循环语句
定义
某些代码会被重复执行
分类
for
1 .格式
for(1;2;3)
语句A
2 . 执行的流程
单个 for循环的使用
多个for循环的嵌套的使用
1.
for (1; 2; 3) //1
for (4; 5; 6) //2
A; //3
B; //4
整体是两个语句,1 2 3 是第一个语句,4是第二个语句
2. for (1 ; 2; 3)
for (4; 5; 6) 先运行 1 2 4 5 6
当5不符合要求,再开始 3 2 4 5 6
{
A:
B;
}
整体是一个语句
3.
for (7 ; 8; 9)
for (1; 2; 3)
{
A;
B;
for (4; 5; 6)
C;
}
整体是 个语句
3. 范围问题
4. 举例:
1 + 2 + 3 +.. ..+ 100
1 + 1/2 + 1/3 +. ... + 1/100
/*
2023年2月14日 17点30分
本程序不对,因为循环中更新的变量不能定义成浮点数
*/
#include<stdio.h>
int main(void)
{
float i;
float sum = 0;
for (i = 1.0; i <= 100; ++i)
{
sum = sum + 1 / i; // 错误 i为int型,1/i得到的结果依然会是 整形
sum = sum + 1 / (float) (i) // 正确写法
}
printf("sum= %f", sum);
return 0;
}
输出结果----
sum= 5.187378
for循环中的变量‘i’不能定义为浮点型(float),因为浮点型是非准确存储大一点点或小一点点存储的。如 i <=100 有可能最后加到100时比100大一点点而不能参加循环。
for循环的语法定义 ++i和 i++的结果是一样 的 .但是i++ 由于是在使 用当前值之后再+1,所 以需要一个临时的变量 来转存i。
而++i则是在直接+1,省 去了对内存的操作的环节,相对而言能够提高性能
求1到100的奇数个数以及之和
#include<stdio.h>
int main(void)
{
int i;
int sum = 0;
int cnt = 0;
float avg;
for (i = 1; i < 101; ++i)
{
if (i % 2 == 1)
{
sum += i;
++cnt;
}
}
avg = sum / cnt; //错误写法,sum cng 默认为int类型,相除以后也会是 int类型,所以存在错误
avg = 1.0* sum / cnt ; //简单写法 1.0 默认的是double类型
avg = (float) sum /cnt; // 强制转换,需要看情况,本题目只是刚好合适
printf("sum=%d\n", sum);
printf("cnt=%d\n", cnt);
printf("avg=%f\n", avg);
return 0;
}