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号
广州松河信息科技有限公司 版权所有