第6章 循环结构1_第1页
第6章 循环结构1_第2页
第6章 循环结构1_第3页
第6章 循环结构1_第4页
第6章 循环结构1_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1思考:求1~10的累加和?#include<stdio.h>voidmain(){intsum;

sum=1+2+3+4+5+6+7+8+9+10;

printf(“sum=%5d\n”,sum);}2思考:求1~20的累加和?【换一种思路】首先设置一个累加器sum,其初值为0,利用sum=sum+n来计算(n依次取1、2、……、20);只要解决以下3个问题即可:

(1)将n的初值置为1;

(2)每执行1次“sum=sum+n;”后,n增1;

(3)当n增到21时,停止计算。此时,sum的值就是1~20的累加和。3第六章循环结构程序设计4一、goto语句二、while语句三、do-while语句四、for语句五、几种循环的比较六、break、continue语句主要内容5格式goto语句标号;#include<stdio.h>voidmain(){intn=1,sum=0;

loop:sum=sum+n;n++;if(n<=100)goto

loop;printf(“sum=%d\n”,sum);}

举例使用goto语句与if语句配合构成循环结构,实现1~100的累加和。作用:使程序转向标号所在的语句行执行。标号的命名规则遵循标识符命名规则。一、goto语句(转向语句)6(1)与if语句一起构成循环结构。(2)不符合结构化程序设计原则,一般不用。说明一、goto语句循环结构注意以下几个问题何时进入循环(循环条件)循环体是什么?如何结束循环(循环体中应有使循环条件趋近于0的语句)8格式while(表达式)循环体语句含义当表达式为真(非0值)时,执行while语句中的内嵌语句。执行过程表达式循环体语句假

真循环体语句当表达式值为真N-S图表示二、while语句9说明1、循环体如果包含一个以上的语句,必须使用复合语句形式。2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。3、先判断表达式,后执行语句。二、while语句?10sum=55i=1sum=0当i<=10sum=sum+i;i++;输出sum#include<stdio.h>voidmain(){inti,sum;i=1;sum=0;

while(i<=10){sum=sum+i;i++;}printf(“sum=%5d\n”,sum);}1求1~50的累加和.2求1~100的奇数和.3求1~100的偶数和.举例:求1~10的累加和(while语句)11#include<stdio.h>voidmain(){inti,sum;i=1;sum=0;

while(i<=10){sum=sum+i;i++;}printf(“sum=%5d\n”,sum);}思考1、如果去掉循环体中的大括号,执行过程将会怎样变化?2、在循环体中,使循环条件趋向于不满足(假)的语句是哪条?举例:求1~10的累加和(while语句)12利用while语句,计算1+1/2+1/4+…+1/50.#include<stdio.h>voidmain(){

floatsum=1;int

i=2;

while(i<=50){sum=sum+1.0/i;

i=i+2;}printf("thesum=%f",sum);}#include<stdio.h>voidmain(){

floatsum=1;inti=1;

while(2*i<=50){sum=sum+1.0/(2*i);

i=i+1;}printf("thesum=%f",sum);}while语句举例【编程】求若干个学生平均成绩,以输入负数成绩为结束

【算法分析】1.定义变量score存储学生成绩,定义s=0存储累加的成绩,定义n=0统计录入的成绩数目。

2.输入第一个学生的score3.若score>=0,执行第4步,否则执行第7步

4.s=s+score;5.n++;

6.录入下一个score,并返回第3步

7.如果n>0,输出s/n;否则输出没有学生成绩main(){intn=0;floats=0,score;scanf(“%f”,&score);while(score>=0){s=s+score;n++;scanf(“%f”,&score);}if(n>0)printf(“\n%f”,s/n);elseprintf(“nostudentscore!”);}【参考答案】15格式do

循环体语句while(表达式);含义执行do-while语句中的内嵌语句,直到表达式为假(0)才跳出循环。

循环体语句至少被执行一次。三、do-while语句注意:分号不能丢16说明1、循环体如果包含一个以上的语句,必使用复合语句形式。2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。3、先执行循环体语句,后判断表达式的值。执行过程表达式循环体语句假真循环体语句当表达式值为真N-S图表示至少执行一次三、do-while语句17#include<stdio.h>voidmain(){inti,sum;i=1;sum=0;

do{sum=sum+i;i++;}while(i<=10);printf(“sum=%5d\n”,sum);}i=1sum=0当i<=10(直到i>10)输出sumsum=sum+i;i++;举例:求1~10的累加和(do-while语句)18#include<stdio.h>voidmain(){inti,sum;i=1;sum=0;

do{sum=sum+i;i++;}while(i<=10);printf("sum=%5d\n",sum);}思考1、如果去掉循环体中的大括号,执行过程将会怎样变化?2、在循环体中,使循环条件趋向于不满足(假)的语句是哪条?求1~10的累加和(do-while语句)19利用do-while语句,计算1+1/2+1/4+…+1/50.#include<stdio.h>voidmain(){floatsum=1;inti=2;do{sum=sum+1.0/i;i=i+2;}while(i<=50);printf("thesum=%f",sum);}main(){intn=0;floats=0,score;do{scanf(“%f”,&score);s=s+score;n++;}while(score>=0);if(n>1)printf(“\n%f”,(s-score)/(n-1));elseprintf(“nostudentscore!”);}【编程】用do-while语句编写统计学生平均成绩由于do-while语句至少要被执行一次,特别要注意n和s的取值问题!【编程】:任意输入一个自然数,把它反序输出。(如:原数为123,输出321)。【分析】此题不确定循环执行的次数,也不涉及一个规律变化的变量,一般用while或do-while来编写。又由于第一次就要判断输入的是否是自然数,通常用while来实现。算法步骤如下:1.定义整型变量a用于存储输入的自然数,定义t初值为0用于存放a的反序数,定义i用于依次存放求出的a的每一位的数值。2.输入一个自然数赋值给变量a3.若a>0,执行第4步,否则执行第7步4.i=a%10;5.t=t*10+i;6.a=a/10,并返回第3步7.输出t#include<stdio.h>main(){longa,i,t=0;scanf(“%ld”,&a);while(a>0){i=a%10;t=t*10+i;a=a/10;}printf(“\n%ld”,t);}【参考答案】【编程】:任意输入一个自然数,把它反序输出。23while和do-while循环比较24#include<stdio.h>voidmain(){inti,sum=0;scanf(“%d”,&i);

while(i<=10){sum=sum+i;i++;}printf(“sum=%d\n”,sum);}#include<stdio.h>voidmain(){inti,sum=0;scanf(“%d”,&i);

do{sum=sum+i;i++;}while(i<=10);printf(“sum=%d\n”,sum);}

输入:11sum=0输出:sum=11什么情况下两者结果相同?输入:1sum=55输出:sum=55

输入:10sum=10输出:sum=10输入:2sum=54输出:sum=54

?25while和do-while循环的比较两者具有相同的循环体时:当while后面的表达式的第一个值为“真”时,两种循环得到的结果保持一致,否则不一致。26格式for(表达式1;表达式2;表达式3)语句for(循环变量赋初值;循环条件;循环变量增值)语句执行过程(1)先求解表达式1;(2)求解表达式2,若其值为真,则执行循环体语句,然后执行第(3)步;若为假,则结束循环,转到第(5)步;(3)求解表达式3;(4)转向步骤(2);(5)循环结束,执行for语句下面的一个语句。表达式2循环体语句假

真求解表达式1求解表达式3四、for语句27sum=55sum=0fori=1to10sum=sum+i输出sum#include<stdio.h>voidmain(){inti,sum;sum=0;

for(i=1;i<=10;i++)sum=sum+i;printf(“sum=%5d\n”,sum);}1求1~80的累加和.2求1~100的奇数和.3求1~100的偶数和.举例:求1~10的累加和(

for语句)28for(表达式1;表达式2;表达式3)语句说明三个表达式可以省略。表达式2循环体语句假

真求解表达式3表达式1省略循环体语句求解表达式1求解表达式3表达式2省略表达式2循环体语句假

真求解表达式1表达式3省略四、for语句29说明1i=1;for(;i<=10;i++)sum=sum+i;2for(i=1;;i++)sum=sum+i;3for(i=1;i<=10;){sum=sum+i;i++;}for(i=1;i<=10;i++)sum=sum+i;表达式1、2可以省略,但其后的分号不可以省略。没有循环结束条件,构成了死循环for(i=1;i<=10;i++)sum=sum+i;四、for语句30建议:for语句中只放与循环控制变量有关的语句。说明5for(;;)sum=sum+i;6表达式1和表达式3可以是与循环变量无关的表达式。4for(;i<=10;){sum=sum+i;

i++;}7表达式2一般是关系表达式,也可以是数值或字符表达式。while(i<=10){sum=sum+i;i++;}表达式1和表达式3可以同时省略,等同于while语句。for(sum=0,i=1;i<=100;i++)sum=sum+i;例while(1)sum=sum+i;四、for语句31说明1、三种循环语句在处理循环问题时,一般可以相互替代。2、

对于循环次数固定的问题,用for语句实现比较简单。3、

对于循环次数不确定的问题,可用while语句或do-while语句实现。4、while语句:先判断,后执行。

do-while语句:先执行,后判断。五、几种循环语句的比较32结束整个循环转向执行该循环结构后面的语句结束本次循环继续进行下一次循环的条件判别六、break\continue语句格式while(表达式1){…if(表达式2)break;

…}while(表达式1){…if(表达式2)conitue;

…}33举例#include<stdio.h>voidmain(){inti,sum=0;for(i=1;i<=10;i++){if(i>5)break;sum=sum+i;}printf(“sum=%5d\n”,sum);#include<stdio.h>voidmain(){inti,sum=0;for(i=1;i<=10;i++){if(i<=5)continue;sum=sum+i;}printf(“sum=%5d\n”,sum);六、break\continue语句sum=15sum=40【编程】判断n是否为素数

#include<stdio.h>main(){inti,n;scanf("%d",&n);for(i=2;i<n;i++) if(n%i==0)break;if(i>=n)printf("%dis\n",n);else printf("%disnot\n",n);}1、下列叙述中正确的是A)break语句只能用于switch语句B)在switch语句中必须使用defaultC)break语句必须与switch语句中的case配对使用D.)在switch语句中,不一定使用break语句。2、以下叙述中正确的是A)break语句只能用于switch语句体中B)continue语句的作用是:使程序的执行流程跳出包含它的所有循环C.)break语句只能用在循环体内和switch语句体内。D)在循环体内使用break语句和continue语句的作用相同3、有以下程序main(){intk=5;while(--k)printf("%d",k-=3);printf("\n");}执行后的输出结果是A.)1.B)2C)4D)死循环2006-92006-92007-44、有以下程序main(){inti;for(i=1;i<=40;i++){if(i++%5==0)if(++i%8==0)printf("%d",i);}printf("\n");}执行后的输出结果是5B)24C.)32.

D)405、有以下程序main(){intk=5,n=0;do{switch(k){case1:case3:n+=1;k--;break;default:n=0;k--;case2:case4:n+=2;k--;break;}printf("%d",n);}while(k>0&&n<5);}程序运行后的输出结果是A.)235.B)0235C)02356D)23562006-96、当执行以下程序时,输入1234567890<回车>,则其中while循环体将执行________次。#include<stdio.h>main(){charch;while((ch=getchar())=='0')printf("#");}2007-407、若变量已正确定义,有以下程序段i=0;doprintf("%d,",i);

while(i++);printf("%d\n",i);其输出结果是

A)0,0B.)0,1.C)1,1D)程序进入无限循环8、有以下程序

#include<stdio.h>

main()

{int

y=9;

for(;y>0;y--)

if(y%3==0)

printf("%d",--y);

}程序的运行结果是

A)741

B)963

C.)852.

D)8754212007-92007-99、以下程序的输出结果是()#include<stdio.h>main(){

intn=12345,

d;

while(n!=0){d=n%10;printf("%d",d);n/=10;}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论