分支与循环(二)——循环语句
1.while循环
while循环的语法结构:
while(表达式)
语句n;
首先执行判断表达式,若表达式的值为0,循环直接结束;若表达式的值不为0,则执行循环语句。有细心的宝子肯定已经发现,while循环的语法结构和if分支语句的语法结构长得一样,那他们到底有什么区别呢?让我们具体写个代码来对比一下。
if语句:
int main()
{
if (1)
printf("爱学习的都是好宝宝!");
return 0;
}
while循环:
int main()
{
while (1)
printf("爱学习的都是好宝宝!");
return 0;
}
从运行结果可以发现,if只能打印一条,而while语句可以实现循环效果。
举个栗子来深入理解一下吧~
例:输入一个正的整数,逆序打印这个整数的每一位
输入:1234,输出:4 3 2 1
输入:1128,输出:8 2 1 1
题解:
1.将一个整数逆序输出,第一步先将整数的最后一位,也就是整数的最低位输出,我们应该用什么方法呢?在之前的学习中,我们认识了C语言中的几种算术操作符,其中%用于取模运算,得到余数。在这题中我们就可以使用%操作符,将整数n%10,得到的余数就是最低位,例如:1234%10得到的余数是4,1128%10得到的余数是8。
2.第二步输出整数的倒数第二位,我们使用n%100得到的余数如:1234%100得到的余数是34,1128%100得到的余数是28,我们发现,这个结果比我们预想的多了最低位的输出,那我们应该怎么去掉它呢?这里我们使用算术操作符/,使用n=n/10就可以去掉最低位,例如:n=1234/10得到123,n=1128/10得到112 。所以要输出整数的倒数第二位,可以先使用n=n/10去掉最低位,再使用n%10得到整数倒数第二位。例如:
n=1234/10; //n=123
printf("%d",n%10);
3.以此类推,循环1.2两个步骤,在n=0前,就能得到所有位。
代码如下:
int main()
{
int i = 0;
scanf("%d", &i);
while (i)
{
printf("%d ", i % 10);
i = i / 10;
}
return 0;
}
2.for循环
我们分析上述while循环的执行流程,分为三个步骤:初始化、判断、调整,for循环的执行流程也是一样,但语法形式不同。
for循环语法形式如下:
for(表达式1;表达式2;表达式3)
语句;
表达式1用于循环变量的初始化,表达式2用于循环结束条件的判断,表达式3用于循环变量的调整。首先执行表达式1的初始化循环变量,接下来执行表达式2的判断部分,如结果==0,则循环结束,如结果!=0,则循环执行,循环语句执行后,执行表达式3循环变量的调整,然后返回表达式2执行判断,判断结果是否为0,决定循环是否继续。
举个简单栗子实践一下吧~
例1:用for循环打印1–10的值
int main()
{
int i = 0;
for (i = 1; i<= 10; i++)
{
printf("%d ", i);
}
return 0;
}
在此处i++与++i效果上没有区别,C语言中不存在++i或i++哪个更高效。
例2:计算1–100所有偶数之和
int main()
{
int i = 0;
int sum = 0;
for (i = 1; i <= 100; i++)
{
sum += i;
}
printf("%d ", sum);
return 0;
}
5050
3.do–while循环
对比while和for循环,do-while循环用的较少,语法如下:
do
语句;
while(表达式);
do-while循环与其他两种循环不一样的是,它是先直接进入循环体,执行循环语句,在执行while后的判断表达式,表达式为真,循环继续下一次,表达式为假,则不再继续循环。
例如:输入一个整数,判断它是几位数
int main()
{
int i = 0;
scanf("%d", &i);
int cnt = 0;
do
{
cnt++;
i = i / 10;
} while (i);
printf("%d\n", cnt);
return 0;
}
4.break与continue语句
break语句的作用是终止循环,break执行时,会直接跳出循环,继续向后执行。
continue语句作用是跳过本次循环中continue后面的代码,继续执行。
我们先拿while循环来举例
break举例:
int main()
{
int i = 1;
while (i <= 20)
{
if (i % 9 == 0)
break;
printf("%d ", i);
i+=1;
}
return 0;
}
1 2 3 4 5 6 7 8
因为9%9结果为0,执行break语句,跳出循环,循环结束。
continue举例:
int main()
{
int i = 1;
while (i <= 20)
{
if (i % 9 == 0)
continue;
printf("%d ", i);
i += 1;
}
return 0;
}
当i=9时,执行continue,直接跳过continue后面的代码,回到循环的判断部分。
由于i+=1在continue之后,执行continue后跳过了这一句,所以i的值一直为9,程序陷入死循环。
用for循环举例
break举例:
int main()
{
int i = 0;
for (i = 1; i <= 20; i++)
{
if (i % 9 == 0)
break;
printf("%d ", i);
}
return 0;
}
1 2 3 4 5 6 7 8
for循环中break与while循环中的break一样,只要执行到break,循环就终止。
continue举例:
int main()
{
int i = 0;
for (i = 1; i <= 20; i++)
{
if (i % 9 == 0)
continue;
printf("%d ", i);
}
return 0;
}
1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 17 18 19 20
for循环中continue与while循环中的continue不一样,在for循环中continue的作用是跳过本次循环中continue后面的代码,直接去到循环的调整部分。
do-while中break和continue的用法与在while中的一样,大家可以自己试一下,这里及就不列举啦😊
本期结束,欢迎大家交流指正,别忘了点赞评论收藏哦,下期见~~