目录
序言
while循环
语法形式
if和while对比
while语句的执行流程
while循环的实践
for循环
语法形式
for循环的执行流程
for循环的实践
编辑
while循环与for循环对比
do-while循环
语法形式
do-while循环的执行流程
do-while循环的实践
循环的嵌套
goto语句
小结
在上篇博文中,我们一起探讨了C语言的分支和循环的分支部分。今天,我们继续来学习一下C语言的循环结构。C语言和我们提供了三种循环语句,分别是:while、for和do-while语句。
while语句的语法结构和if语句的语法结构非常相似
if (表达式)
语句;
while (表达式)
语句; //如果循环体想要包含更多语句,可以加上{}
具体写两个代码,我们可以对比看一下:
//代码1
#include
int main()
{
if (1)
printf("Chestnut-programming\n");//if表达式为真,打印一次Chestnut-programming
return 0;
}
//代码2
#include
int main()
{
while (1)
{
printf("Chestnut-programming\n");//while表达式为真,死循环打印
//Chestnut-programming
}
return 0;
}
这就是它俩的区别,while语句可以实现循环的效果。
首先上来就是执行表达式,表达式的值为0,循环结束;表达式的值不为0,则执行循环语句,语句执行完后,在进行表达式判断,是否进行下一次判断。
练习:
输入一个正的整数,逆序输出这个整数的每一位数
输入样例:1234
输出样例:4 3 2 1
参考代码:
题目解析:
1. 要想得到n的最低位,可以使用n%10的运算,得到的余数就是最低位,如:1234%10得到4
2. 要想去掉n的最低位,找出倒数第二位,则使⽤ n=n/10 操作就可以去掉最低位的,如: n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。
3. 循环1和2两个步骤,在n变成0之前,就能到所有的位。
for循环是三种循环中使用最多的,语法形式如下:
for (表达式1;表达式2;表达式3)
语句; //如果循环体想要包含更多语句,可以加上{}
表达式1:用于循环变量的初始化
表达式2:用于循环结束条件的判断
表达式3:用于循环变量的调整
首先执行 表达式1 初始化循环变量,接下来就是执行 表达式2 的判断部分, 表达式2的结果如果 ==0,则循环结束; 表达式2 的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表达式 3 ,调整循环变量,然后再去 表达式2 的地方执行判断, 表达式2 的结果是否为0,决定循环是否继续。 整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。
练习:
在屏幕上打印1~10的值
参考代码:
#include
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
for和while实现循环的时候都包含这三个部分:初始化、判断和调整。如下图,给我们更直观的感受是,for循环这三个部分更加集中一些,这样有利于我们对代码的维护,而如果代码较多的时候 while 循环的三个部分就比较分散,所以从形 式上 for 循环要更优⼀些。
for和while循环是先进行判断,在确定是否进入循环体。但do-while循环是直接进入循环体,执行循环语句,再来判断表达式,表达式为真就进入下次循环,为假就跳出循环。
do
{
语句;
}while(表达式);
do-while循环先执行”语句“,在执行”判断表达式“,如果判断表达式结果为真,则继续执行循环语句,若为假,则跳出循环。
所以,do-while循环中循环体至少执行一次,这是do-while循环比较特殊的地方。
练习:
输入一个正整数,计算这个整数是几位数?
参考代码:
#include
int main()
{
int n = 0;
scanf("%d", &n);
int cnt = 0;
do
{
cnt++;
n = n / 10;
} while (n);
printf("%d\n", cnt);
return 0;
}
前⾯学习了三种循环 while , do while , for ,这三种循环往往会嵌套在⼀起才能更好的解决 问题,就是我们所说的:循环嵌套,这里我们就看⼀个例子。
练习:
找出100~200之间的素数,并打印在屏幕上。
参考代码:
运行结果:
题⽬解析:
1. 要从100~200之间找出素数,⾸先得有100~200之间的数,这⾥可以使用循环解决。
2. 假设要判断i是否为素数,需要拿2~i-1之间的数字去试除i,需要产生2~i-1之间的数字,也可以使用循环解决。
3. 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。
C语言提供了一种非常特别的语法,就是goto语句和跳转标号,goto语句可以实现在同一个函数内,跳转到设置好的标号处。
例如:
#include
int main()
{
printf("hehe\n");
goto next;
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
goto语句如果使用不当,会导致在函数内部随意跳转,打乱程序的执行流程。所以,一般不建议使用goto语句。但goto语句不是一无是处,在多层循环中,如果想要快速跳出,就可以使用goto语句,这样就方便多了。
for(...)
{
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
}
error:
//...
本来for循环想要提前跳出,必须使用break,但是一个break只能跳出一层for循环,在这里使用在这种情况下goto语句就会更加便捷。
OK~各位大佬,小栗子和大家分享的C语言分支和循环基础知识基本告一段落啦,下一期小栗子会更新利用C语言分支和循环知识来编写一些有趣的代码~敬请期待哦~~