一 FOR循环的流程
以下是一个累加代码。
if默认只控制一行语句,if也一样。
先执行i=1,然后执行i<=100,如果成立,就执行sum,++i执行标志着循环一次结束。
注意,i=1只执行一次。
#include <stdio.h>
int main(void)
{
int i,sum=0;//sum记得要赋值,不然就是变量没有初始化
for(i=1;i<=100;++i)
sum=sum+i;
printf("sum=%d\n",sum);
return 0;
}
二 for和if的嵌套使用
#include <stdio.h>
int main()
{
int sum=0;
for(i=3;i<=10;i++)
{
if(i%3==0)
sum=sum+i;
printf("sum=%d\n",sum);
}
return 0;
}
输出结果就是:
sum=3
sum=3
sum=3
sum=9
sum=9
sum=9
sum=18
sum=18
因为if默认只能控制一个语句,所以无论成不成立,都会输出printf语句
三 for循环的基本内容
1.定义:某些代码会重复执行
2.格式:for(1;2;3)
语句A;
1先执行,然后2,最后3,然后232323……,1只执行一次。
3.强制转换符
左/右 如果左右都是整数,那么输出也不会有小数点
格式:(数据类型)(表达式)
功能:把表达式的值强制转化为指定数据类型
#include<stdio.h>
int main()
{
int i;
float sum=0;
for(i=1;i<=100;i++){
sum=sum+1/(float)i;
//也可以写成sum=sum+1.0/i;
// "/"号左右如果都是整数,结果输出也是一个整数
//sum=sum+(float)(1/i);这样写也是错的,因为前面是整型后面是整型,没有小数位
}
printf("%f\n",sum);
return 0;
}
4.浮点数存储所带来的问题
float和double都不能保证可以精确的存储一个小数。(浮点型存放的是近似值,例如存放5,实际上存放的可能是4.999999)
Q1: 如何判断一个数是不是0
if(|x-0.000001|<0.0000001)
可以理解为去心邻域(?)
Q2:为什么循环更新的变量不能定义成浮点型?(即不能for(float i=0))
因为for循环的自增中float的存储值不准确,即判断i<=100,可能float自增之后得到的值是100.00001,恰好不符合
四 多个for循环的嵌套使用
1.格式:for(1;2;3)
for(4;5;6)
A;
B;
2.流程
1------2(成立)---4---5---A----6-----5(成立的话)-----A----6---……--5(不成立,脱离第二个for循环)----3------2(判断成立)---4----5-----A-----6……继续执行第二个里面的for循环,然后到5判断不成立脱离。直到2判断不成立,执行B。
重点一:内部执行完毕才能执行3
重点二:for默认只能控制一个,也就是说,绿色部分只能控制黄语句,和红色的B没关系。
重点三:绿色里,1——2(成立)以后,直接进入黄色部分,黄色部分执行自己的for循环,直到黄色部分结束,继续绿色部分的for循环,绿色的for循环里嵌套黄色,就会再次执行黄色的循环,重新4——5——A——6,直到绿色部分结束,才会执行红色。