for (表达式1; 表达式2; 表达式3)
{
语句;
}
;
隔开的,千万不要写成逗号。for(表达式1;表达式2;表达式3)
的后面千万不要加分号,很多新手都会犯这种错误——会情不自禁地在后面加分号。
for (循环变量赋初值; 循环条件; 循环变量增值)
{
语句;
}
# include <stdio.h> int main(void) { int i; int sum = 0; //sum的英文意思是“总和” for (i=1; i<=100; ++i) //++是自加的意思, ++i相当于i = i + 1 { sum = sum + i; /*等价于sum += i;但是不建议这么写, 因为sum = sum + i看起来更清楚、更舒服*/ } printf("sum = %d\n", sum); return 0; }输出结果是:
# include <stdio.h> int main(void) { int i = 1; int sum = 0; for (; i<=100; ++i) { sum = sum + i; } printf("sum = %d\n", sum); return 0; }当然表达式1加上也行,大不了再重新赋一次值。
i=1;
表达式1只执行这一次,下面都不会再执行了。{}
。但基于代码规范化,if、else、for、while、do 后面的执行语句不论有多少行,就算只有一行也要加{}
。(
,以突出关键字。for(i=1; i<=100;++i)
完全可以写成for(i=1; i<101; ++i)
,而且建议大家尽量使用这种写法。也就是说,循环语句的循环条件尽量写成半开半闭的,不管是 for 循环还是 while 循环。for(i=1; i<101; ++i)
实际上是 1≤i<101,是半开半闭的;而for(i=1; i<=100; ++i)
实际上是 1≤i≤100,是全闭的。那么为什么建议使用半开半闭的呢?因为如果写成 i<=100 的话,那么每次判断的时候都要判断两次,即 i<100 和 i==100,而写成 i<101 的话每次只需要判断一次。<=
右边是变量或表达式的时候。这时候要以可读性为第一要素,即哪种好理解就使用哪种。现在 CPU 速度那么快,也不在乎那点效率。所以前面说“尽量”,没有要求一定要那样写。# include <stdio.h> int main(void) { int i; int sum = 0 ; for (i=1; i<100; i+=2) //i+=2;等价于i = i + 2; { sum = sum + i; } printf("sum = %d\n", sum); return 0; }输出结果是:
a=++i;
完全可以写成i++; a=i;
。而a=i++;
也完全可以写成a=i; i++;
。而且,这也是一种很好的程序风格。# include <stdio.h> int main(void) { int n = 0; int i = 0; int m = 1; int sum=0; printf("请输入n的值:"); scanf("%d", &n); for (i=1; i<=n; ++i) { m = m * i; sum = sum +m; } printf ("sum = %d\n", sum); return 0; }这个程序虽然短,但逻辑性很强,算法很好,所以建议读者记住。因为逻辑性强,所以只看是很难明白的,自己在纸上试一下,将自己当成计算机一步步地计算就明白了。
# include <stdio.h> int main(void) { int i; int sum = 0; for (i=3; i<100; ++i) { if (0 == i%3) { sum = sum +i; } } printf("sum = %d\n", sum); return 0; }输出结果是:
# include <stdio.h> int main(void) { int i; int sum = 0; for (i=3; i<100; i+=3) { sum = sum +i; } printf("sum = %d\n", sum); return 0; }因为 ++i 每次只加 1,而 i+=3 每次加 3,所以这种写法与第一种写法比较起来计算机少执行很多步,所以执行起来更快。由此可知,完成相同的功能,算法不一样则效果就不一样。对计算机而言当然是执行得越快越好。
# include <stdio.h> # include <math.h> //要用sqrt() int main(void) { int i; //循环变量 int x; //存储每个数的二次方根 for (i=1; i<1000; ++i) { x = sqrt(i); /*如果i不是完全平方数, 那么sqrt(i)肯定是小数, 而i是int型, 所以x是sqrt(i)取整后的值, 这样x*x肯定不等于i*/ if (x*x == i) { printf("%d\t", i); // \t是跳到下一个Tab位置 } } printf("\n"); return 0; }输出结果是:
1 4 9 16 25 36 49 64 81 100 121 144 169 196 225 256 289 324 361 400 441 484 529 576 625 676 729 784 841 900 961
# include <stdio.h> int main(void) { int i; //循环变量 for (i=1; i*i<1000; ++i) { printf("%d\t", i * i); // \t是跳到下一个Tab位置 } printf("\n"); return 0; }输出结果是:
1 4 9 16 25 36 49 64 81 100 121 144 169 196 225 256 289 324 361 400 441 484 529 576 625 676 729 784 841 900 961
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有