欢迎光临
我们一直在努力

c语言while的无限循环,c语言while循环详解基础

C语言循环控制语句基本用法

循环语句使用的基本思想:

对于事先循环次数已知的称为计数控制的循环,一般使用for循环;对于事先循环次数不知的称为条件控制的循环,一般使用while或者do while循环语句;对于一个循环语句包括另外一个循环语句的称为嵌套循环;

一、while语句

一般形式:
赋初始值;赋初始值;赋初始值;
while(循环控制表达式)
{
循环体语句;
}流程图:

循环控制表达式是在执行循环体语句前判断的:

while语句的执行过程

循环控制表达式是在执行循环体语句前判断的;
如果表达式的值一开始就为0,则语句一次也不会被执行;
a.计算循环控制表达式的值;
b.如果循环控制表达式的值为真,则执行循环体语句,并返回步骤;
c.如果循环控制表达式的值为假,则跳过循环,接着执行后面的语句;

例1、输出1-100之间所有的奇数;

#include <stdio.h>void main(){int i=1;//记得赋初始值;while(i <= 100){if(i%2 != 0)//判断奇偶;(i%2==0)输出偶数;{printf(“%5d”,i);}i++;}} 死循环(例举一种情况) #include <stdio.h>void main(){int i=1;while(i <= 100);//这里加上分号就很有可能变成死循环{if(i%2 != 0){printf(“%5d”,i);}i++;}}

二、do…while语句

一般形式
do
{
循环体语句;
}
while(循环控制表达式);

while();后面有一个分号

流程图

先执行循环体语句,再进行表达式判断;

do…while语句的执行过程:

a.计算循环体语句;
b.计算循环控制表达式的值;
c.如果循环控制表达式的值为真,并返回步骤;
d.如果循环控制表达式的值为假,则跳过循环,接着执行后面的语句;
由于是先执行,后判断表达式的真假,所以循环体中的语句至少被执行一次;

while 与 do…while的区别: (1)#include <stdio.h> (2)#include <stdio.h>void main() void main() { { int i=11; int i=11;while(i<=10) do{ {printf(“i = %d\n”,i); printf(“i = %d\n”,i);i++; i++;} } while(i<=10);} }没有任何输出 输出:i=11

程序(1)是因为先判断后执行,所以当条件一开始就不满足的情况下,循环一次也不执行,所以没有任何输出;
程序(2)是因为先执行后判断,已经执行过了一次再进行的判断,所以循环至少执行了一次,输出 i=11。

例2:1-100之间的数字竞猜游戏(随机数值固定的情况下)

#include <stdio.h>#include <stdlib.h>void main(){int person,machine;//用户猜的数,系统随机数int i = 0; //猜的次数printf(“输入一个1-100之间的数:”);machine = rand()%100+1;do{ scanf(“%d”,&person);if(person>machine){printf(“这个数大了!\n”);}else if(person<machine){printf(“这个数小了!\n”);}else{printf(“你猜对了!\n”);}i++; }while(person!=machine);printf(“您一共猜了%d次\n”,i);}

rand()函数生成的是0–32767之间的整数;使用时需要包括头文件 stdlib.h;
rand()%b ==> [ 0, b-1 ] 之间;
rand()%b+a ==> [ a,a+b-1 ]之间;

三、for语句

一般形式:
for(初始化表达式;循环控制表达式;循环变量增量)
{
循环语句;
}

for语句中的表达式分隔符分号,有且只有两个,不可以省略;

也可以表示为其他形式:

初始化表达式 初始化表达式 for( ;循环控制表达式;循环变量增量) for( ;循环控制表达式; ) { { 循环语句; 循环语句; 循环变量增量; } } 当循环控制表达式省略时,则表示循环条件永真,不做处理的话,可能会导致死循环;

流程图:

for语句的执行过程:
a. 由初始化表达式开始;
b.执行循环控制表达式,若其值为真(非0),则执行循环内语句,然后执行循环变量增量语句;
c.若其值为假(0),则结束循环,执行循环外语句;

例3:(算法一:穷举法) 韩信点兵问题
韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。编程求韩信至少有多少兵?

穷举法:从1开始,直到上述条件成立i,i则为所求的值;

解法一:

#include <stdio.h>void main(){int i;for(i=1; ;i++){if(i%5==1 && i%6==5 && i%7==4 && i%11==10){printf(“%d\n”,i);break;}}}

利用无限循环找出第一个满足条件的值,然后跳出循环;

解法二:(对于循环次数未知的条件控制循环,一般使用while或者do while语句)

#include <stdio.h>void main(){int i = 0;do{i++;}while(!(i%5==1 && i%6==5 && i%7==4 && i%11==10));printf(“%d\n”,i);}

算法二:递推法:下一项的值是在前一项的前提下推算出来的。
求Fibonacci数列前40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。

#include <stdio.h>void main(){int i, p=1,q=1;for(i=1;i<=20;i++){printf(“%d %10d\n”,p,q);p=p+q;q=q+p;}}

四、goto语句和if语句构成循环

一般不使用goto语句和if语句构成循环;

**例:**计算1+2+…+100的和

#include <stdio.h>void main(){int i,sum;i=1;sum=0;round: if(i<=100) { sum = sum + i; i++; goto round; }printf(“%d\n”,sum);} 91280357

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。