3种循环结构小结、循环结构的嵌套

小结

(1)种循环结构都可以用来处理同一问题,一般情况下它们可以互相代替。
2、用while 和do…while 循环时,循环变量初始化的操作应在while和do…while 语句之前完成,而for语句可以在表达式1中实现循环变量的初始化。
3、while 和do…while 循环只在while后面指定循环条件,在循环体中应包含使循环结束的语句(如i++等)。
④do…while 语句和while语句的区别在于do…while 是先执行后判断,因此do…while至少要执行一次循环体,而while是先判断后执行,如果条件不满足,则一次循环体语句也不执行。
⑤for 循环可以在表达式3中包含使循环趋于结束的语句,甚至可以将循环体中的操作放到表达式3中,因此for语句的功能最强,凡用while和do…while 循环语句能完成:的操作,用for循环语句都能实现。

例2

【例2】以下程序段中,循环次数不超过10的是)。
A)int i=10; do i=i+1; while(i<0);
B)int i=5;do i+=1; while(i>0);
C)int i=1; do i+=2;| while(i!=10);
D)int i=6; do i-=2;| while(i!=1);
【解析】do…while 循环语句一般形式是do 循环体 while(表达式);。执行过程是首先执行循环体,之后判断表达式,成立(非0)则再一次执行循环体,不成立(0)则退出循环。选项A,执行函数体i=
11,判断条件11<0不成立,退出循环,循环次数为
1,不超过10次,选项A正确。选项B,执行函数体i
=6,判断条件为i>0,由于执行函数体时i在增加,i>0一直成立,程序陷入无限循环,循环次数大于
10,选项B错误。选项C,执行函数体i=3,判断条件为i!=10,由于函数体中i每次增加2,所以永远不可能等于10,故程序会陷入无限循环,循环次数大于10,选项C错误。选项D,执行函数体i=4,判断条件为i!=1,由于函数体中i每次减少2,所以永远不可能等于1,故程序会陷入无限循环,循环次数大于10,选项D错误。
【答案】A

例3

【例3】以下不构成无限循环的语句或语句组是( )。
A)n=0;
do i ++n;/
while(n<=0);
B)n=0;
while (1) n++;
C)n=10;
while (n); in–;
D)for(n=0,i=1;; i++)n+=i;
【解析】选项A中,do后面的语句只执行了一次便结束了循环;选项B中,条件while(1)永远成立,所以是死循环;选项C中,n的值为10,而循环体为空语句,所以while(n)永远为真,进入死循环;选项D中,for语句第二个表达式为空,所以没有判别条件,进入死循环。for语句题目先看第二个表达式是否无(判别条件)
【答案】A

例4

【例4】若变量已正确定义,有以下程序段:
i=0;
do printf(“&d,”,i); while(i++); printf(“gd\n”,i);
其输出结果是( )。
A)0,1
B)0,0
C)1,1
D)程序进入无限循环
【解析】第一次首先执行循环体,打印i的值0,然后判断while的条件i++,先用后自增,所以判断时条件为假,跳出循环,但是仍执行了i的自增操作,i的值为1。在接下来的打印语句中进行打印。
【答案】A

循环结构的嵌套

for(a=1;a<10;a++)
{for(b = 0;b<=5;b++)

}
说明
1在此段程序中,for(a=1;a<=10;a++)作为外循环,而for(b=0;b<=5;b++)作为内循环。
2外循环执行1次内循环就执行6次。循环正常结束时,外循环执行了10次,内循环共执行了10×
6=60次。

习题

【例5】求2~100之间的所有素数,输出。
判断一个数是素数的方法为:设某一个数为a,a除了能表示为它自己和1的乘积以外,不能表示为任何其他两个整数的乘积。例如,15=3×5,所以15不是素数;另外,13除了等于13×1以外,不能表示为其他任何两个整数的乘积,所以13是一个素数。
现要求2~100之间的所有素数,判断素数的方法是相同的,只要利用循环依次从2~100之间取一个数,判断其是否是素数,如果是素数就输出显示,不是素数就继续判断下一个数,直至判断到100为止。
下面展示一些 内联代码片

#include<stdio.h>
#include<math.h>
 int main()
int n,i,j,flag,x=0;    
for(i=2;i<=100;i++)
flag=1;j=2;
n=(int)sqrt((double)i); 
while(flag&&j<=n)
(if(ij==0) flag=0;
j ++;
if(flag)
printf("d,",i);X++if(x& 5 ==0)printf(" \n")

分析此程序的执行过程如下所还。
1程序运行时,当i=2或3时,变量j的初值也为2,大于变量n的值,内嵌的whil。循环不执行,flag变量值为1,输出素数为?或3。
2当i>3时,进入内层循环,若i是素数,flag的值不变,仍为1;若i不是素数,flag的值变为0,并立即结束内循环。当退出内循环后,if语句判断flag的值为1时,输出素数i;若i不是素数,flag的值变为0,不输出。
3外层循环继续取下一个数,通过内层
循环判断是否是素数,直到外层循环取的数i大于100后,结束外层循环,结束程序运行。
通过上例可以看到,外层循环的目的是,每次循环分别从2~100的数中取某一个数,已知循环的次数为99次,采用for循环比较合适;而内层循环是判断某个数是否是素数,在每一次的除法中,当某一次除法运算出现余数为0时,表明该数不是素数,立即结束内层循环,所以内层循环次数事先难以确定
在这里插入图片描述

  • 29
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值