6.循环控制6.1概述C语言的循环结构:(1)goto与if;(2)while(3)dowhile(4)for6.循环控制6.2goto语句以及用goto语句构成的循环问题:求1+2+……+100;inti,sum;i=1;sum=0;sum=sum+i;————〉循环体i++;sum=sum+i;————〉循环体i++···6.循环控制6.2.1格式goto语句标号;说明:goto为关键字语句标号:标识符(起名规则)语句标号的使用:语句标号:语句;例如:loop:i++;6.循环控制6.2.2应用(1)与if语句构成循环例题:求1+2+……+100;思路,例程:C6_2_2。inti,sum;i=1;sum=0;sum=sum+i;————〉循环体i++;sum=sum+i;————〉循环体i++;inti,sum;i=1;sum=0;loop:sum=sum+i;i++;gotoloop;inti,sum;i=1;sum=0;loop:sum=sum+i;i++;if(i=100)gotoloop;inti,sum;i=1;sum=0;loop:if(i=100){sum=sum+i;i++;gotoloop;}6.循环控制(2)由循环体内跳转到循环体外后面的课程中应用。6.2.3提示结构化程序设计方法主张限制goto语句的使用。6.循环控制6.3while语句6.3.4while灵活运用例程c6-3-2说明:前后匹配;灵活运用。c6-3-2-1inti,sum;i=1;sum=0;Loop:if(i=100){sum=sum+i;i++;gotoloop;}inti,sum;i=1;sum=0;while(i=100){sum=sum+i;i++;}6.循环控制6.3while语句6.3.1格式while(表达式)语句;说明:若表达式为非0,执行内嵌语句。先判断表达式,再执行语句。6.3.2例题例程:c6_3_26.3.3说明(1)循环体可以只包含一条语句或一个复合语句。(2)循环体中应该有使循环趋于结束的语句。6.循环控制6.4do-while语句6.4.1格式do循环语句;while(表达式);执行过程:先执行循环语句;再判断表达式;若为0,结束;非0继续执行循环语句。提示:while(表达式)之后需要“;”习惯上循环语句使用带{}的复合语句。6.4.2例题例程:C6_4_26.循环控制6.4.3与while语句的比较关键:while语句先判断再执行;而dowhile语句先执行再判断。关键问题:当表达式已开始就为“假”(0)时,运行结果不同。例程:输入i,求(当i100时,结果不同。)程序:c6_4_21与c6_4_22。100inn6.循环控制作业:1.输入n,求即(1+2+3+……+n)。2.思考题:输入n,输出1~n之间所有的偶数。nii16.循环控制6.5for语句6.5.1格式for(表达式1;表达式2;表达式3)语句;类比:表达式1;While(表达式2){语句;表达式3;};6.循环控制for(表达式1;表达式2;表达式3)语句;6.5.2执行过程(1)求表达式1;(2)求表达式2;判断为0;执行(6);否则(非0),执行(3);(3)执行循环语句;(4)求表达式3;(5)继续执行(2);(6)结束,执行下一条语句。6.循环控制6.5.3例题例程:c6_5_3。for语句的简单理解:for(循环变量赋初值;循环条件;循环变量增值)语句;6.循环控制6.5.4说明(1)表达式1可以省略,但其后面的“;”不能省略。i=1;for(;i=100;i++)sum=sum+1;(2)表达式3可以省略,但其前面的“;”不能省略。for(i=1;i=100;){sum=sum+1;i++;}6.循环控制(3)表达式1、表达式3可以都省略,即只给循环条件。i=1;for(;i=100;){sum=sum+1;i++;}(4)表达式2可以省略,但是循环将无休止的执行下去。for(i=1;;i++)sum=sum+1;死循环!同样表达式1、表达式2和表达式3可以全部省略,执行死循环for(;;)语句;6.循环控制(5)表达式1、表达式3可以是逗号表达式。执行多个变量的赋值和运算。for(i=1,sum=0;i=100;i++)sum=sum+i;for(i=1,sum=0;i=100;sum=sum+i,i++);注意:计算可以与循环有关也可以与循环无关。(6)表达式2一般为关系表达式或逻辑表达式,也可以是其他类型的表达式,只要其值为非0,就执行循环体。例题:打印输入的字符,直到输入回车。c=getchar();for(c=getchar();c!=’\n’;c=getchar())putchar(c);for(;(c=getchar())!=’\n’;putchar(c));例程:c6_5_2_6(7)建议不要把与循环无关的内容放在for语句中。6.循环控制6.6循环的嵌套while语句、do-while语句与for语句可以互相嵌套。参考6.6节。例题:输出1~100的矩阵c6_6_1.c(补充)分析:(1)内层循环:完成10个数的输出(2)外层循环:控制10行数据的输出(3)控制输出格式6.7几种循环的比较本节自学,强调第4点。6.循环控制作业:编程输出以下图形:(规律:行数加列数的和为奇数)************************************6.循环控制6.8break语句与continue语句。6.8.1break语句格式:break;作用:(1)跳出switch语句;(2)跳出循环语句,包括while语句、do-while语句与for语句。例题:1+2+….+100,求加到几时1000i=1,sum=0;while(i=100){sum=sum+i;if(sum1000)break;i++;}6.循环控制for(i=1,sum=0;i=100;i++){sum=sum+1;if(sum1000)break;}例程:c6_8_1,c6_8_12深入:将条件和并到循环判断处。6.循环控制6.8.2continue语句(1)格式:continue;作用:结束本次循环。即跳过尚未执行的循环语句,进行下一次循环的判断。(2)例题:输出100~200之间不能被3整除的数字。讲解思路:取100~200之间的数,使用循环;被3整除,%例程:c6_8_2_26.循环控制6.9程序举例6.9.1例6.6求π=4.0*(1-1/3+1/5-1/7+……)思路:(1)查找规律:每一步分母+2,-、+间隔;(2)-、+间隔的处理:(-1)相乘。(3)结束标志:例程c6_9_1_1c6_9_1_2610|1|n6.循环控制6.9.2Fibonacci数列前40个说明:F1=1;F2=1;Fn=Fn-1+Fn-2;(n3)123457112358思路1:(1)需2个记录状态的变量,以便纪录Fn-2,Fn-1,假设f1,f2(2)Fn=f1+f2,用f3表示(3)状态变化:f1=f2;f2=f3;(4)纪录个数用变量n,初始n=3,打印格式使用。例程:c6_9_2_16.循环控制main(){longf1=1,f2=1,f3;for(;;){f3=f1+f2;f1=f2;f2=f3;}printf(\n);}main(){longf1=1,f2=1,f3,n;n=2;for(;n40;){f3=f1+f2;f1=f2;f2=f3;n++;}printf(\n);}main(){longf1=1,f2=1,f3,n;n=2;printf(%12ld%12ld,f1,f2);for(;n40;){f3=f1+f2;f1=f2;f2=f3;n++;printf(%12ld,f3);}printf(\n);}main(){longf1=1,f2=1,f3,n;n=2;printf(%12ld%12ld,f1,f2);for(;n40;){f3=f1+f2;f1=f2;f2=f3;n++;printf(%12ld,f3);if(n%5==0)printf(\n);}printf(\n);}6.循环控制思路2:(1)需2个记录状态的变量,以便纪录Fn-2,Fn-1,假设f1,f2(2)fn=f1+f2,fn+1=fn+fn-1(3)状态变化:f1=f1+f2;f2=f1+f2;(4)纪录个数用变量n,初始n=4,打印格式使用。例程:c6_9_2_26.循环控制作业(h6_8.c):使用循环输出以下矩阵:1234567891012131415161718192023242526272829303435363738394045464748495056575859606768697078798089901006.9.3例题:计算2n(n=0)(c6_9_3.c)要求:输入n,输出2nmain(){intn,result;scanf(%d,&n);printf(result=%d\n,result);}6.循环控制main(){intn,result;scanf(%d,&n);for(result=1;n0;n--){result=result*2;}printf(result=%d\n,result);}main(){intn;floatresult;scanf(%d,&n);for(result=1;n0;n--){result=result*2;}printf(result=%.0f\n,result);}作业:计算mn(n=0)要求:输入m,n,输出mn6.循环控制6.9.4例题:判断任意输入的正整数是不是质数要求:输入n,输出yes或nomain(){intn,i,flag;scanf(%d,&n);if(flag)printf(no!\n);elseprintf(yes!\n);}main(){intn,i,flag;scanf(%d,&n);for(i=2,flag=0;in;i++){if(n%i==0){flag=1;break;}}if(flag)printf(no!\n);elseprintf(yes!\n);}6.循环控制2.程序的灵魂—算法数据结构+算法=程序2.1算法的概念算法:广义的说,为解决一个问题而采取的方法和步骤,就称为“算法”。计算机算法:为解决一个问题而让计算机执行的指令和步骤。分类:(1)数值算法:求解数值。例如:求方程,计算pi(2)非数值算法:事务管理。处理学生成绩,排名次。2.程序的灵魂—算法2.2简单的算法书上的算法很重要,同学们自学。说明::以例6.9.1求pis1.变量赋初值,i=1,s=1;pi=0.0;s2.判断1.0/i=1.0e-6,是退出循环,执行s5,否则继续执行;s3.pi=pi+s*(1.0/i);s4.循环变量赋值,s=s*(-1),i=i+2;转向s2s5.循环结束,pi=pi*4.0;s6.输出。2.程序的灵魂—算法2.3算法的特性(1)有穷性(2)确定性,步骤明确。操作对象明确。(3)有0或n个输入(4)有1或n个输出(5)有效性。2.程序的灵魂—算法3.4算法的表示2.4.1自然语言2.4.2流程图流程图符号参见p19图2.3以2.2节为