while 语句的语法结构和 if 很相似。
if (表达式) while(表达式)
语句; 语句;
while 循环语句的执行流程:
练习1:在屏幕上打印1~10的数字。
#include
int main()
{
int i = 1;//i为循环变量,i=1是对i的初始化
while(i<=10)//判断
{
printf("%d ",i);
++i;//调整,对i的调整
}
return 0;
}
练习2:输入一个正的整数,逆序打印这个整数的每一位。
例: 输入:1234 输出:4321
思路分析:要得到每一位数,就需要用到除法和取模运算1234%10=4;1234/10=123,利用这种思想来达到1234到4321的转换。
#include
int main()
{
int n = 0;
scanf("%d",&n);
while(n)
{
printf("%d",n%10);
n = n/10;//赋值
}
return 0;
}
在 for 循环中它解决了 while 循环中初始化、调整、判断三个点距离很散的问题。
for(表达式1“初始化”;表达式2“判断”;表达式3“调整”)
#include
int main()
{
int i = 0;//i为循环变量
for(i=1;i<=10;++i)
{
printf("%d",i);
}
return 0;
}
for 语句中 第一步:i=1 --- 初始化(只被执行一次)
第二步:i<=10 --- 判断
第三步: 执行printf --- 打印
第四步:++i --- 调整
练习:输出1~100之间的3的倍数的和。
#include
int main()
{
int i = 0;
int sum = 0;
for(i=1;i<=100;i++)
{
if(i%3 == 0)
sum = sum + i;
}
printf("%d\n",sum);
return 0;
}
do
语句;
while(表达式);//若表达式为真,则继续循环
练习1:在屏幕上打印1~10,利用 do...while 循环。
#include
int main()
{
int i = 1;
do
{
printf("%d",i);
i++;
}
while(i<=10);
return 0;
}
练习2:输入一个正整数,计算这个数是几位数?
#include
int main()
{
int n = 0;
scanf("%d",&n);
int count = 0;//计数有多少位
do
{
count++;
n = n / 10;
}
while(n);
printf("%d",count);
return 0;
}
break:其作用是永久性的终止循环,只要 break 被执行,直接跳出循环,继续往后执行。
continue:跳过本次循环 continue 后面的代码,在 for 和 while 中有所差异。
#include
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d",i);
i++;
}
return 0;
}
在上述程序中可得到1234的结果,并不能打印出5以后的数字,就是因为当i=5时,循环遇到break,结束循环。
#include
int main()
{
int i = 1;
while(i<=10)
i++;
if(i == 5)
continue;
printf("%d",i);
return 0;
}
在此段代码中,最后得到的结果是1 2 3 4 6 7 8 9 10
#include
int man()
{
int i = 0;
for(i=1;1<=10;i++)
{
if(i == 5)
break;
printf("%d",i);
}
return 0;
}
在程序中,打印出来的结果为1,2,3,4
#include
int man()
{
int i = 0;
for(i=1;1<=10;i++)
{
if(i == 5)
continue;
printf("%d",i);
}
return 0;
}
在这段程序中,将break替换成了continue得到的结果为1,2,3,4,6,7,8,9,10
#include
int main()
{
int i = 1;
do
{
if(i == 5)
continue;
printf("%d",i);
i = i + 1;
}
while(i<=10)
return 0;
}
在这段程序里只能打印出来1,2,3,4,接下来就会进入死循环。
三种循环 while、for、do...while 往往会嵌套在一起才能更好的解决问题,即循环嵌套。
练:找出100~200之间的素数,打印在屏幕上。
思路:判断i是否是素数,用2~i-1的数去挨个试除i,若其中有一个数字整除了i,i就不是素数;若所有的数都不能整除i,那么i就是素数。
#include
int main()
{
int i = 0;
int count = 0;
for(i=100;1<=200;i++)
{
int j = 0;
int flag = 1;//假设i是素数
for(j=2;j
goto 语句可以实现在同一个函数内跳转到设置好的标号处。goto 语句若使用不当,会导致在函数内部随意乱跳转,打乱程序的执行流程。goto 语句的优点就是多层循环嵌套时,goto 语句会让循环快速跳出。
for(...)
{
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
}
error;
goto 语句既可以往前指也可以往后指,没有对其规定。