C语言学习-翁凯(第五章笔记)
C语言学习-翁凯-第五章
第五章
5.1.1for循环
阶乘
- n! = 1 * 2 * 3 * 4 * 5 * …* n
- 写一个程序,让用户输入n,然后计算输出n!
- 变量:
- 显然读用户的输入需要一个int 的n,然后计算的结果需要用一个变量保存,可以是int的factor,在计算中需要有一个变量不断地从1递增到n,那可以是int的i
int n;scanf("%d",&n);
int fact=1;int i=1;
while(i<=n){fact *= i;i++;
}printf("%d!=%d\n",n,fact);
可以使用for语句,改良为
int n;scanf("%d",&n);
int fact=1;int i;
for(i=1;i<=n;i++){fact *= i;
}printf("%d!=%d\n",n,fact);
for(初始动作;循环继续的条件;循环每轮要做的事情)
for循环
for循环像一个计数循环:设定一个计数器,初始化它,然后在计数器到达某值之前,重复执行循环体,而每执行一轮循环,计数器值以一定步进进行调整,比如加1或者减1
for(i=0;i<5;i=i+1){printf("%d",i);
}
for = 对于
- for(count=10;count>0;count–);
- 就读成:“对于一开始的count=10,当count>0时,重复做循环体,每一轮循环在做完循环体内语句后,使得count–。”
小套路
- 做求和的程序时,记录结果的变量应该初始化为0,而做求积的变量时,记录结果的变量应该初始化为1
- 循环控制变量i只在循环里被使用了,在循环外面它没有任何用处。因此,外面可以把变量i的定义写到for语句里面去
int n;scanf("%d",&n);
int fact=1;for(int i=1;i<=n;i++){fact *= i;
}printf("%d!=%d\n",n,fact);
(只有c99才能用!)
try
- 1*1还是1,所以程序的循环不需要从1开始,那么改成从多少开始合适呢?这样修改之后,程序对所有的n都正确吗?这样的改动有价值吗?
- 除了可以从1乘到n来计算n!,还可以从n乘到1来计算吧?试试把循环换个方向来计算n。这时候,还需要循环控制变量i吗?
int n;scanf("%d",&n);
int fact=1;int i=n;
//for(int i=1;i<=n;i++){// fact *= i;
//}
for(;n>1;n--){fact *= n;
}printf("%d!=%d\n",i,fact);
5.1.2循环的计算和选择
循环次数
for(i=0;i<n;i++);
- 则循环的次数是n,而循环结束以后,i的值是n。循环的控制变量i,是选择从0开始还是从1开始,是判断i<n还是判断i<=n,对循环的次数,循环结束后变量的值都有影响
for == while
for(int i=1;i<=n;i++){fact *= i;
}
等价于
int i=1;
while(i<=n){fact *=i;i++;
}
for循环
for(初始动作;条件;每轮的动作){ }
- for中的每一个表达式都是可以省略的
- for(;条件;) == while(条件)
三种循环
for循环
while循环
do-while循环
Tips for loops
- 如果有固定次数,用for
- 如果必须执行一次,用do-while
- 其他情况用while
5.2.1循环控制
素数
- 只能被1和自己整除的数
- 2,3,5,7,11,13,17,19······
break vs continue
- break:跳出循环
- continue:跳过循环这一轮剩下的语句进入下一轮
int x;scanf("%d",&x);int i;
int isPrime=1;
for(i=2;i<x;i++){if(x%i == 0){isPrime=0;break;}
}
if(isPrime==1){printf("是素数\n");
}else{printf("不是素数\n");
}return 0;
5.2.2嵌套的循环
100以内的素数
- 如何写程序输出100以内的素数?
int x;for(x=2;x<=100;x++){int i;
int isPrime=1;
for(i=2;i<x;i++){if(x%i == 0){isPrime=0;break;}
}
if(isPrime==1){printf("%d",x);
}
}return 0;
嵌套的循环
- 循环里面还是循环
输出前50个素数
int x;
int cnt=0; for(x=2;cnt<50;x++){int i;
int isPrime=1;
for(i=2;i<x;i++){if(x%i == 0){isPrime=0;break;}
}
if(isPrime==1){cnt++;printf("%d\t",x);if(cnt%5==0){printf("\n");}
}
}return 0;
5.2.3从嵌套的循环中跳出(离开多重循环)
凑硬币
- 如何用1角、2角和5角的硬币凑出10元以下的金额呢?
int x;
int one,two,five;scanf("%d",&x);
for(one=1;one<x*10;one++){for(two=1;two<x*10/2;two++){for(five=1;five<x*10/5;five++){if(one+two*2+five*5==x*10){printf("可以用%d个1角加%d个2角加%d个5角得到%d元。\n",one,two,five,x);}}}
}return 0;
break和continue
- 只能对它所在的那层循环做
接力break
int x;
int one,two,five;
int exit=0;scanf("%d",&x);
for(one=1;one<x*10;one++){for(two=1;two<x*10/2;two++){for(five=1;five<x*10/5;five++){if(one+two*2+five*5==x*10){printf("可以用%d个1角加%d个2角加%d个5角得到%d元。\n",one,two,five,x);exit=1;break;}}if(exit)break;}if(exit==1)break;
}return 0;
goto
int x;
int one,two,five;scanf("%d",&x);
for(one=1;one<x*10;one++){for(two=1;two<x*10/2;two++){for(five=1;five<x*10/5;five++){if(one+two*2+five*5==x*10){printf("可以用%d个1角加%d个2角加%d个5角得到%d元。\n",one,two,five,x);goto out;}}}
}
out:
return 0;
5.3.1求和-前n项求和
int n;int i;double sum=0.0;scanf("%d",&n);for(i=1;i<=n;i++){sum += 1.0/i;}printf("f(%d)=%f\n",n,sum);return 0;
int n;int i;double sum=0.0;int sign=1; scanf("%d",&n);for(i=1;i<=n;i++){sum += sign*1.0/i;sign=-sign;}printf("f(%d)=%f\n",n,sum);return 0;
5.3.2整数分解
正序分解整数
- 输入一个非负整数,正序输出它的每一位数字
- 输入:13425
- 输出:1 3 4 2 5
int x;scanf("%d",&x);int t=0;do{int d=x%10;t=t*10+d;x/=10;}while(x>0);printf("x=%d,t=%d\n",x,t);x=t;do{int e=x%10;printf("%d",e);if(x>9){printf(" ");}x/=10;}while(x>0);printf("\n");return 0;
但是当x最后一位为0时,会被省略,如700,输出为7
改进版:
int x;scanf("%d",&x);int mask=1;int t=x; while(t>9){t/=10;mask*=10;}printf("x=%d,mask=%d\n",x,mask);do{int d=x/mask;printf("%d",d);if(mask>9){printf(" ");}x%=mask;mask/=10;}while(mask>0);printf("\n");return 0;
5.3.3求最大公约数
求最大公约数
- 输入两个数a和b,输出它们的最大公约数
- 输入:12 18
- 输出:6
枚举
- 设t为2;
- 如果u和v都能被t整除,则记下这个t;
- t加1后重复第2步,直到t等于u或v;
- 那么,曾经记下的最大的可以同时整除u和v的t就是gcd。
int a,b;
int min;scanf("%d %d",&a,&b);
if(a<b){min=a;
}else{min=b;
}
int ret=0;
int i;
for(i=1;i<min;i++){if(a%i==0){if(b%i==0){ret=i;}}
}printf("%d和%d的最大公约数是%d。\n",a,b,ret);
辗转相除法
- 如果b等于0,计算结束,a就是最大公约数;
- 否则,计算a除以b的余数,让a等于b,而b等于那个余数;
- 回到第一步。
int a,b;int t;scanf("%d %d",&a,&b);while(b!=0){t=a%b;a=b;b=t;printf("a=%d,b=%d,t=%d\n",a,b,t);}printf("gcd=%d\n",a);return 0;
C语言学习-翁凯(第五章笔记)相关推荐
- C语言学习-翁凯(第九章笔记)
C语言学习-翁凯(第九章笔记) 第九章 9.1.1 取地址运算:&运算符取得变量的地址 运算符& scanf("%d",&i);里面的& 获得变量的 ...
- C语言学习-翁凯(第六章笔记)
C语言学习-翁凯-第六章 第六章 6.0.1 给定条件的整数集 int a;scanf("%d",&a);int i,j,k;int cnt=0;//i=indexi=a; ...
- C语言学习-翁凯(第七章笔记)
C语言学习-翁凯(第七章笔记) 第七章 7.1.1初见函数 素数求和 int m,n;int i;int cnt=0;int sum=0;scanf("%d %d",&m, ...
- c语言 10 9-8 7-6… 1循环语句,C语言学习与总结---第五章:循环结构程序设计
循环结构程序设计 5.1 while语句 5.2 do-while语句 5.3 for语句 5.4 循环的嵌套 5.5 while与do-while的比较 5.7 改变循环执行的状态 5.7.1 co ...
- Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能
Python语言学习:基于python五种方法实现使用某函数名[func_01]的字符串格式('func_01')来调用该函数[func_01]执行功能 目录 问题提出 代码五种设计思路 T1方法:e ...
- 谭浩强C语言程序设计代码示例第5章(笔记)
谭浩强C语音程序设计代码示例第四章(新手入门笔记) 第一章包含参考书,在线编译工具,代码,注释等. 遵循共享互助原则 谭浩强C语言程序设计代码示例(1-3章) 谭浩强C语言程序设计代码示例第4章(笔记 ...
- 谭浩强C语言程序设计代码示例第6章(笔记)
谭浩强C语音程序设计代码示例第六章(新手入门笔记) 第一章包含参考书,在线编译工具,代码,注释等. 遵循共享互助原则 谭浩强C语言程序设计代码示例(1-3章) 谭浩强C语言程序设计代码示例第4章(笔记 ...
- DirectX12龙书--第五章笔记
需要龙书电子版的可联系我,部分图片太大,csdn导入不了,可访问我的github图床github或者在书里面查看. DirectX12龙书第五章笔记 第五章 5.1 3D视觉即错觉? 5.2 模型的表 ...
- 《学习Opencv》第五章 习题6
这是第五章 习题5.6的结合版,其中实现了摄像头抓拍功能,能够成功运行. #include "stdafx.h" #include "cv.h" #includ ...
- JavaScript高级程序设计(第4版)学习随笔【第五章】
第五章主讲基本引用类型 引用值(或者对象)是某个特定引用类型的实例.新对象通过使用new操作符后跟一个构造函数(constructor)来创建.引用类型有时候也被称为对象定义,因为它们描述了自己的对象 ...
最新文章
- 他自学成才,坐拥38w粉丝,技术类第一大号!
- leetcode笔记:Gray Code(2016腾讯软件开发笔试题)
- jQueryMobile常用技巧
- 判断某一天是这一年的第多少天
- Leedcode4-sort listnode 归并排序
- Cilium架构:提供并透明地保护应用程序工作负载之间的网络连接和负载平衡
- OpenShift 4 - DevSecOps Workshop (13) - 将镜像推送到Quay,并进行漏洞扫描
- 【elasticsearch】elasticsearch的问题之ERROR: bootstrap checks failed
- C++ 出现异常“.... \debug_heap.cpp Line:980 Expression:__acrt_first_block==header“
- 机器学习算法基础4-K-近邻算法、朴素贝叶斯算法、分类模型评估、模型的选择与调优
- uni-app 167将某人踢出群聊(二)
- 反思腾讯:大数据与AI时代的危与机
- .img文件怎么打开(解压缩)
- 3d游戏计算机怎么配置要求吗,3DMAX软件对电脑的配置要求
- 大数据与云计算学习:Python网络数据采集
- 2020年4月11日
- 如何才能画出透亮迷人的双眼?
- 在移动端设置overflow:hidden禁止滚动的解决方法
- 【C# Opencv机器视觉】 Opencv水位检测、液体高度检测、卡尺高度检测
- 哪家的云服务器便宜?