c语⾔两个for语句并列执⾏_for的⽤法详解,C语⾔for循环完
全攻略
for 的⼀般形式为:
for (1; 表达式2; 表达式3)
{undefined
语句;
}
⾸先要强调两点:
1) 表达式1、表达式2和表达式3之间是⽤分号;隔开的,千万不要写成逗号。
2) for(表达式1;表达式2;表达式3)的后⾯千万不要加分号,很多新⼿都会犯这种错误——会情不⾃禁地在后⾯加分号。
因为 for 循环只能控制到其后的⼀条语句,⽽在C语⾔中分号也是⼀个语句——空语句。所以如果在后⾯加个分号,那么 for 循环就只能控制到这个分号,下⾯⼤括号⾥⾯的语句就不属于 for 循环了。
下⾯来看看它的执⾏过程:
求解表达式1。
求解表达式2。若其值为真,则执⾏ for 语句中指定的内嵌语句,然后执⾏第3步;若表达式2值为假,则结束循环,转到第5步。
求解表达式3。
转回上⾯第2步继续执⾏。
循环结束,执⾏ for 语句下⾯的语句。
从这个执⾏过程中可以看出,“表达式1”只执⾏⼀次,循环是在“表达式2”“表达式3”和“内嵌语句”之间进⾏的。
for语句最简单的形式是:
for (循环变量赋初值; 循环条件; 循环变量增值)
{undefined
语句;
}
下⾯给⼤家写⼀个程序,求 1+2+3+4+…+100 的总和。
# include
int main(void)
{undefined
int i;
int sum = 0; //sum的英⽂意思是“总和”
for (i=1; i<=100; ++i) //++是⾃加的意思, ++i相当于i = i + 1
{undefined
sum = sum + i; /*等价于sum += i;但是不建议这么写, 因为sum = sum + i看起来更清楚、更舒服*/
}
printf("sum = %d\n", sum);
return 0;
}
输出结果是:
sum = 5050
这个程序的功能是实现求 1+2+3+4+…+100 的和,如果不⽤循环,加⼀次就要⼀条语句,加 100 次就要 100 条语句。这⾥是从 1 加到 100,要是从 1 加到 10000 那就要 10000 条语句。但有了循环就很⽅便了,你想加到多少就加到多少,只要改⼀个参数就可以了。所以循环很重要。
下⾯按照执⾏过程看看上⾯这个程序是怎样执⾏的。
1) ⾸先定义⼀个循环变量 i。定义的时候可以不给它赋初值,在 for 循环⾥⾯再给它赋初值也⾏。但前⾯说过,最好在定义变量的时候就对它进⾏初始化,如果值不确定就初始化为 0。所以程序中也可以在定义 i 的时候就给它赋初值,那么 for 循环⾥的“表达式1”就可以省略了,但分号不可以省略。
这样的话,执⾏的时候就跳过第1步,直接进⼊第2步,其他的不变。所以程序也可以像下⾯这样写:
# include
int main(void)
{undefined
int i = 1;
int sum = 0;c语言中逗号表达式的用法
for (; i<=100; ++i)
{undefined
sum = sum + i;
}
printf("sum = %d\n", sum);
return 0;
}
当然表达式1加上也⾏,⼤不了再重新赋⼀次值。
2) 然后定义⼀个⽤来存放“和”的变量 sum,并给它赋初值 0,然后进⼊ for 循环:
⾸先求解表达式1,即给变量i赋初值,i=1;表达式1只执⾏这⼀次,下⾯都不会再执⾏了。
然后求解表达式2,若 1<=100 成⽴,则执⾏ for 循环中的内嵌语句,即 sum=0+1。
然后执⾏第3步,变量 i ⾃加 1,即变量 i 由 1 变为 2。
然后再求解表达式2,2<=100 成⽴,则执⾏ for 循环中的内嵌语句,sum=0+1+2。
然后再执⾏第3步,变量 i ⾃加 1,即变量 i 由 2 变为 3。
然后再求解表达式2,即 3<=100 成⽴,则执⾏ for 循环中的内嵌语句,sum=0+1+2+3。
……
就这样⼀直循环下去,直到 ++i 等于 100 的时候,求解表达式2,即 100<=100 成⽴,则执⾏ for 循环中的内嵌语
句,sum=0+1+2+3+ (100)
然后再执⾏第3步,变量 i ⾃加 1,即变量 i 由 100 变为 101。然后再求解表达式2,即 101<=100 不成⽴,则结束循环,执⾏ for 循环下⾯的语句即 printf。
以上就是这个程序的执⾏过程。关于 for 语句的代码规范化问题,有两点要再跟⼤家强调⼀下:
1)if、else、for、while、do 都只能控制到其后的⼀条语句,如果要控制多条语句必须加⼤括号{}。但基于代码规范化,if、else、for、while、do 后⾯的执⾏语句不论有多少⾏,就算只有⼀⾏也要加{}。
2) 像 if、for、while 等关键字之后应留⼀个空格再跟左括号(,以突出关键字。
此外上⾯的程序还有⼀个知识点要跟⼤家说⼀下:从功能上讲,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 的话每次只需要判断⼀次。
也许有⼈说:程序在执⾏ i<=100 的时候不是将它转换成 i<100||i==100 吗?这样由“短路或”的知识可知,如果前⾯的为真那么后⾯的不就不会执⾏了吗?这样不也是判断⼀次吗?不是这样的,系统是不会将 i<=100 转换成 i<100||i==100 的,每次判断的时候 i<100 和i==100 都要判断。
但是写成半开半闭也有⼀个问题,就是会影响对代码的理解。有时候写成全闭的区间理解起来才顺畅,⽽写成半开半闭反⽽不易理解,⽐如<=右边是变量或表达式的时候。这时候要以可读性为第⼀要素,即哪种好理解就使⽤哪种。现在 CPU 速度那么快,也不在乎那点效率。所以前⾯说“尽量”,没有要求⼀定要那样写。
下⾯再给⼤家写⼀个程序,求 1 到 100 之间所有奇数的和。
# include
int main(void)
{undefined
int i;
int sum = 0 ;
for (i=1; i<100; i+=2) //i+=2;等价于i = i + 2;
{undefined
sum = sum + i;
}
printf("sum = %d\n", sum);
return 0;
}
输出结果是:
sum = 2500
关于⾃增和⾃减
⼀直以来,++ 和 –– 语法浪费了太多⼈的时间。说句实在话,++ 和 –– 在C语⾔中根本就不重要,除了表达简练外,真的没有什么其他好处了。
简单地说:++i 和 i++ 在单独使⽤时,都表⽰ i=i+1;––i 和 i–– 在单独使⽤时,都表⽰ i=i–1。
⽽ a=++i 就相当于 i=i+1,a=i;a=i++ 就相当于 a=i,i=i+1。
同理,a=––i 就相当于 i=i–1,a=i;a=i–– 就相当于 a=i,i=i–1。
如果实在搞不明⽩ ++ 和 –– 是怎么回事,那也不是什么天塌下来的事情。因为a=++i;完全可以写成i++; a=i;。⽽a=i++;也完全可以写成a=i; i++;。⽽且,这也是⼀种很好的程序风格。
作为⼀个优秀的程序员,在你的程序中就不应该体现出 ++i 和 i++ 的区别,要么都⽤ ++i,要么都⽤ i++,不要⼀会⼉⽤ ++i ⼀会⼉⽤
i++。
对于⾃增和⾃减还有⼀点需要强调的是:只有“变量”才能进⾏⾃增和⾃减!你认为 3++ 等于多少?C语⾔中没有这种写法,常量是不能进⾏⾃增和⾃减的。
for循环练习
1) 求 1! + 2! + 3! + ... + n!
# include
int main(void)
{undefined
int n = 0;
int i = 0;
int m = 1;
int sum=0;
printf("请输⼊n的值:");
scanf("%d", &n);
for (i=1; i<=n; ++i)
{undefined
m = m * i;
sum = sum +m;
}
printf ("sum = %d\n", sum);
return 0;
}
这个程序虽然短,但逻辑性很强,算法很好,所以建议读者记住。因为逻辑性强,所以只看是很难明⽩的,⾃⼰在纸上试⼀下,将⾃⼰当成计算机⼀步步地计算就明⽩了。
假如 n=4:
当 i=1 时,m=1,sum=1。
当 i=2 时,m=1×2,sum=1+1×2。
当 i=3 时,m=1×2×3,sum=1+1×2+1×2×3。
当 i=4 时,m=1×2×3×4,sum=1+1×2+1×2×3+1×2×3×4。
看出规律来了吗?m 的值是⼀直往下乘,乘以 i 之前 m 的值是(i–1)的阶乘,乘以 i 之后 m 的值就是 i 的阶乘了。这样 i 循环到多少,m*i 就⽴刻将这个数的阶乘计算出来,然后加到 sum 中。
2) for 和 if 的嵌套使⽤。求 1 到 100 之间所有能被 3 整除的数之和。
# include
int main(void)
{undefined
int i;
int sum = 0;
for (i=3; i<100; ++i)
{undefined
if (0 == i%3)
{undefined
sum = sum +i;
}
}
printf("sum = %d\n", sum);
return 0;
}
输出结果是:
sum = 1683
⼤家想想如果不⽤ if,这个程序能不能写出来?当然能,能被 3 整除的数肯定是 3 的倍数,只要 i 每次⾃加 3 就⾏了。我们将这个程序写⼀下:
# include
int main(void)
{undefined
int i;
int sum = 0;
for (i=3; i<100; i+=3)
{undefined
sum = sum +i;
}
printf("sum = %d\n", sum);
return 0;
}
因为 ++i 每次只加 1,⽽ i+=3 每次加 3,所以这种写法与第⼀种写法⽐较起来计算机少执⾏很多步,所以执⾏起来更快。由此可知,完成相同的功能,算法不⼀样则效果就不⼀样。对计算机⽽⾔当然是执⾏得越快越好。
3) 编写程序,输出 1~1000 之间所有的完全平⽅数。
# include
# include //要⽤sqrt()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。