C_流程控制_循环 笔记
循环
for
1.格式
for(1;2;3)
{
语句A;
语句B;
}
2. 执行流程(以一个例子来说明,序号代表一个语句)
#include<stdio.h> int main(void) { int i,sum; sum=0; for(①i=1;②i<=3;③++i) //第一次循环:先执行①,再执行②。如果②成立,执行④,最后执行③。一次循环结束。 { //第二次循环:
//先执行②(第二次循环不执行①),再执行②。如果②成立,执行④,最后执行③。第二次循环结束。……直到②不成立,则循环结束。继续执行⑤
④sum=sum+i; } ⑤printf("%d",sum); return 0; }
在for循环中的执行顺序:
⑴先执行①,再执行②。如果②成立,执行④,最后执行③。一次循环结束。
⑵先执行②(第二次循环不执行①),再执行②。如果②成立,执行④,最后执行③。第二次循环结束。
……直到②不成立,则循环结束。继续执行⑤。
3.有穷性
循环必须具有有穷性,不能无限循环
4.范围问题
for默认只能控制一个语句,控制多个需用大括号括起来(和if一样)
5.强制数据类型转换
①格式: (数据类型)(表达式\也可以是某个量)
②举例:
//将表达式的值(浮点数型)强制转换为整型
float i;
(int) (i*0.9);
//将整型变量强制转换成浮点型
int i ;
(float) (i);
③功能
将表达式的值强制转换为前面的数据类型
6.代码举例
//C_流程控制_求100内奇数和(方法一) #include <stdio.h> int main() { int i; int sum=0; for(i=1;i<=100;i+=2) { sum=sum+i; } printf("%d",sum); return 0; }
//C_流程控制_求100内奇数和(方法二) #include <stdio.h> int main() { int i,sum; sum=0; for(i=1;i<=100;++i) { if(i%2==1) //若i是奇数,则sum+i sum=sum+i; } printf("%d\n",sum); return 0; }
//1/1+1/2+…+1/100的和 #include <stdio.h> int main() { int i; float k,sum; i=0; k=0; sum=0; for(i=1;i<=100;++i) { k=1/(float)(i); //由于i和1都是整型,所以需要强制数据类型转换 //也可以写成 k=1.0/i; sum=sum+k; } printf("%f",sum); return 0; }
7.试数技巧
①不要去想程序的目的,把自己当做计算机,一步步去试
②不要省略步骤
③要写整齐,有逻辑性
8.浮点型的存错所带来的问题
①原因
float和fouble都不能保证准确地存储一个值(并非所有值都不能准确存储,只是不能保证每一个都准确存储)
②举例
有一个浮点数x,如何判断x的值是否等于零
if (x–0.000001的绝对值<=0.000001)
等于零
else
不等于零
②注意
循环中更新(自加或自减)的变量不能定义为浮点型,因为浮点型是一个非准确存储
9.多个for嵌套的流程【重难点】
(为方便表示,在此数字代表表达式,称1,2,3所在循环为大循环,称4,5,6所在循环为小循环)
for(1;2;3)
for(4;5;6)
语句A;
语句B;
执行顺序:
①先执行1,再执行2,如果成立,则执行4(小循环开始)
②执行完4后,执行5,若成立则执行语句A,然后执行6……直到2不成立,退出
②退出小循环后执行3,接着执行2,若成立则继续进入第二个循环(步骤同上,再次退出小循环后继续执行3)……直到2不成立,退出大循环,所以循环结束,执行语句B
while
1.格式
while(表达式)
语句;
2.执行顺序
先判断表达式,若为真,执行语句。然后继续判断表达式…直到表达式不成立,退出循环
3.for和while的比较
for和while可以相互转换,但for的逻辑性更强
for(1;2;3)
{
A;
}
等价于
1;
while(2)
{
A;
3;
}
do......while
1.格式
do
{
语句;
} while(表达式);
2.流程
①执行语句
②判断表达式,若成立则继续执行语句,不成立则退出循环(无论表达式是否成立,语句都至少要执行一次)
3.与while和for的比较
do......while......不等价于while或for。因为若表达式不成立,while和for都不执行语句,而do......while要执行一次

浙公网安备 33010602011771号