C语言分支与循环(6)--- for循环第二课
标签: C语言分支与循环(6)--- for循环第二课 软件研发博客 51CTO博客
2023-07-23 18:24:16 123浏览
一.先来看以下两段代码:
代码1:
#include<stdio.h>
int main(void){
for (int i = 0; i <= 10; i++){
if (i == 5){
continue;
}
printf("i=%d\n",i);
}
getchar();
return 0;
}
代码2:
#include<stdio.h>
int main(void){
int i = 0;
while (i <= 10){
if (i == 5)
{
break;
}
printf("i=%d\n", i);
i++;
}
getchar();
return 0;
}
这两段代码最明显的不同就是代码1使用了for循环而代码2则使用了while循环,我们先来分析一下代码1,代码1使用了for循环,表达式1创建并变量i并为其赋值:i=0 表达式2则对循环条件进行判断,只有当i的值<=10的时候才进入for循环,表达式3则对for循环进行了调整,每次循环时将i的值+1,随后使用if判断语句进行判断当i=5的时候则执行continue语句,终止本次循环,重新进入while循环,最后调用while语句对i的值进行输出,所以我们可以得知代码的结果为 0 1 2 3 4 6 7 8 9 10,当运行以上代码时也可以发现输出的结果与上面结果一样,如图所示:
我们再来对代码2进行分析:首先创建并为变量i并赋值i=0,随后创建了while循环,入口条件为i<=10
当i=5的时候则执行continue语句终止本次循环,然后调用printf函数对i的值进行输出,最后让i进行自增,也就是i+1,对代码熟悉的朋友们已经看出了代码执行的结果以及问题,让我们运行上述代码,得到的结果为0 1 2 3 4 ,但是此时程序并未跳出循环而是进入了死循环,原因是当i=5的时候代码会执行if语句中的内容,也就是执行了continue语句,我们直到continue语句会终止本次循环,重新进入while语句的入口处执行由于没有对变量i进行自增操作会导致变量i的值依然为5,然后又执行if语句中的continue语句从而导致死循环的发生,解决这个问题的方法也很简单,我们只需要将i++语句放在if语句之前即可,这样当执行continue语句后i可以进行自增从而避免死循环的发生,如图所示:
同时我们在使用for循环的时候也需要注意以下两点:
1.不可在for循环体内修改循环变量,防止for循环失去控制
2.建议for循环控制变量的取值采用前闭后开区间的写法
我们着重说一下第二点:
示例1:for(int i=0; i<10; i++)
示例2:for(int i=0; i<=9; i++)
其中示例1很好的使用了前闭后开的写法,前闭指的是i=0后开指的是i<10 示例2则使用的是两边闭区间的写法,注意!这种书写方法只是建议,如果你不熟悉前闭后开的写法则请使用两边闭区间的写法,总而言之使用自己最熟悉的写法,能最大程度上避免错误的发生
二.for循环的变种
#include<stdio.h>
int main(void)
{
for(;;){
printf("Hello!\n");
}
return 0;
}
我们运行上述代码后可以发现我们创建了一个死循环,程序会一直输出Hello
由此我们的出以下结论:
for循环中的初始化、判断、调整都可以省略,但是当判断语句省略后,那么判断条件就恒为真
注意:如果不是非常熟悉for循环,则建议不要去随便省略相关语句
我们再来看一段代码:
#include<stdio.h>
int main(void)
{
for (int i = 0; i < 10; i++){
for (int x = 0; x < 10; x++)
{
printf("hello\n");
}
}
getchar();
return 0;
}
程序运行结果:
程序运行的结果是输出100个Hello,原因是当i=0进入循环后执行第二个for语句,这时候第二个for语句中x=0,所以会输出10次Hello,当i=10的只会则跳出循环,当i=1的时候则会再执行第二个for循环,此时x的值被初始化成了0,再次输出10次Hello,以此类推,由此得出结论:i每加1的时候就要输出10个Hello,直到最外围的for循环i的值等于10的时候不再满足for循环的入口条件跳出循环,那我们再来看以下代码:
#include<stdio.h>
int main(void)
{
int i=0;
int x=0;
for (; i < 10; i++){
for (; x < 10; x++)
{
printf("hello\n");
}
}
getchar();
return 0;
}
此时我们再运行上述代码则会发现这次程序只输出了10次Hello便结束了,原因是我们将for循环中的初始化表达式留空了,将声明写在了for语句之外,这时候内层的for循环语句便不会受到外层的for循环语句的影响,当内层for语句输出完成后此时x=10,已经不满足内层for语句入口条件了,外层for语句执行便不会再去执行内层for语句,所以只会输出10个Hello,如图所示:
变种3:
#include<stdio.h>
int main(void)
{
for (int x = 0, y = 0; x < 2 && y < 5; ++x, y++){
printf("Hello!\n");
}
getchar();
return 0;
}
上述程序运行后会输出两个Hello,让我们来分析一下这个for循环,其中初始化语句为x=0 y=0 判断语句为x<5与y<5,调整语句是++x和y++,当x=0 y=0的时候满足条件进入循环,输出Hello,此时x=1 y=1,满足条件,输出Hello,当x=2 y=2的时候x的值不再满足条件,由于是&&操作符代表的是与也就是说其中有任何一个条件不满足则为假,for循环便不再执行,所以只会输出Hello,如图所示:
实战题目:
#include<stdio.h>
int main(void)
{
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; i++, k++)
{
k++;
}
getchar();
return 0;
}
请问以上代码需要执行几次循环?
答案:0次因为,for语句中的判断部分(k=0)是将0赋值给了变量k,这时候表达式的结果为k,k=0
我们之前讲到过在C语言中0代表假,非0代表真,当表达式为假(0)的时候则不执行循环
至此for循环大致讲解完成
2023/7/23
王起舟
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论