在c语言的循环语句里有1.do while语句 2.while语句 3.for语句
1.while循环语句
while语句的形式
while(表达式)
语句;//如果循环体想包含更多的语句,可以加上⼤括号
#include<stdio.h>
int main()
{ int i=10;
while(i>0)
printf("%d",i);
return 0;
}
在以上代码中因为一直满足while后面的条件 所以会死循环打印i
while循环的执行流程如下
⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执⾏完后再继续判断,是否进⾏下⼀次判断
练习1:要打印出1~100的和
先可以将该练习的流程图画出来
由于要多次循环 所以要使用while语句
#include <stdio.h>
int main()
{ int i =1;//初始化i
int sum=0;
while(i<=100)//判断部分
{
sum+=i;
i++;//调整部分
}
printf("%d",sum);
return 0;
}
该代码最终输出结果为5050
练习2:输⼊⼀个正的整数,逆序打印这个整数的每⼀位
例输入4321 输出1234
#include <stdio.h>
int main()
{ int i=0;
scanf("%d", &i);
while(i)
{
printf("%d",i%10);
i=i/10;
}
return 0;
}
解析:先得到n的最低i%10的运算,得到的余数就是最低位,i的最低位,找出倒数第⼆位,则使用i=i/10 操作就可以去掉最低位的,在循环以上步骤 当i=0时就会跳出循环
在while语句中在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,C语⾔中提供了 break 和 continue 两个关键字,就是应⽤到循环中的
• break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执行。
•continue 的作⽤是跳过本次循环中 continue 后边的代码
#include <stdio.h>
int main
{
int i=1;
while(i<=10)
{ if(i==5)
{
continue;
}
printf("%d ",i);
i++
}
return 0;
}
以上这段代码能正常打印1~4 但当i=5时会进入if语句,进入之后执行continue跳出本次while循环后面的代码,回到变量判断部分,之后一直循环往复导致死循环
所以以上代码最终结果是1 2 3 4 死循环
若continue变成break又会是什么样的结果呢?
#include <stdio.h>
int main
{
int i=1;
while(i<=10)
{ if(i==5)
{
break;
}
printf("%d ",i);
i++
}
return 0;
}
以上这段代码也能先正常打印1~4 i=5时也会进入if语句,但之后会直接跳出while循环
所以以上代码最终结果是1 2 3 4
2.for循环语句
除了可以用while 语句实现循环外,C语言还提供了for语句实现循环,而且for语句更为灵活,不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。
for(表达式1; 表达式2; 表达式3)
语句;//如果循环体想包含更多的语句,可以加上⼤括号
表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整
for循环的流程图如下
若用for循环来完成上面的练习2 可以这样来写
#include <stdio.h>
int main()
{
int i = 0;
scanf("%d", &i);
for (; i; i = i / 10)
{
printf("%d", i % 10);
}
return 0;
}
通过以上练习2分别用while循环和for循环的解答 可以看出while循环语句和for循环语句都含变量初始化部分 条件判断部分 变量调整部分
只是 for 循环的三个部 分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形 式上 for 循环要更优⼀些
若要打印出1~100之间3的倍数的总和 用if语句代码就可以很简练
#include <stdio.h>
int main()
{int a =0;
int sum =0;
for(a=3;a<=100;a+=3)
{
sum+=a;
}
printf("%d",sum);
return 0;
}
在for循环语句中也有break和continue语句
break 的作⽤也是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环
而continue在 for 循环与 while 循环中的使用有所差异
#include <stdio.h>
int main
{
int i=0;
for( i=1;i<=10;i++)
{ if(i==5)
{
continue;
}
printf("%d ",i);
}
return 0;
}
以上这段代码也能先正常打印1~4 但当i=5时会直接跳到for语句的开头部分再接下来打印6~10
所以以上代码的最终结果是1 2 3 4 6 7 8 9 10
3.do... while循环语句
do... while的一般形式为
do 语句
while(表达式)
while和for这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳
出循环;
⽽do...while循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏while后的判断表达式,表
达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环 至少执行一次循环体
若用do... while完成以上练习2 可用以下代码实现
#include<stdio.h>
int main()
{ int i=0;
scanf("%d",&i);
do
{ printf("%d",i%10);
i=i/10;
}while(i)
return 0;
}
在do...while语句中的的break与continue与while中的作用相同
4.循环的嵌套
在以上讲解的if循环 for循环 do while循环通常情况下可嵌套使用,能更好的解决问题
例如要在屏幕上打印出200~300的素数,就可用到嵌套循环
#include<stdio.h>
int main()
{ int i =0;
int j =0;
int flag=1;
for(i=200;i<=300;i++)
{ for(j=2;j<=i-1;j++)
{ if(i%j==0)
flag=0;
break;
}
if(flag==1)
printf("%d",i);
}
return 0;
}
由于素数一定是奇数,且若i=a*b 其中一个数必<=根号i
这时我们就可以用到库函数sqrt,注意需要引用头文件#include<math.h>
#include<stdio.h>
#include<math.h>
int main()
{ int i =0;
int j =0;
flag=1;
for(i=201;i<=300;i+=2)
{ for(j=2;j<=sqrt(i);j++)
{if(i%j==0)
flag=0;
break;
}
if(flag==1)
printf("%d",i);
}
return 0;
}