您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 谢丽聪老师C语言课件-6循环控制-2009
第六章循环控制6.1概述6.2goto语句以及用goto语句构成循环6.3while语句和do-while语句6.4for语句6.5循环的嵌套6.6break和continue语句6.1循环控制概述循环结构的特点:在给定条件成立时,反复执行某程序段,直到条件不成立为止。C语言提供的循环结构类型如下:1)用goto语句和if语句构成循环;2)用while语句;3)用do-while语句;4)用for语句;循环条件循环体6.2goto语句以及用goto语句构成循环6.2.1形式:goto语句标号;6.2.2功能:一进入执行goto语句、立即转向去执行其后面标号所指示的语句……gotojump;loop:语句1语句1语句2语句2………语句n语句njump:语句n+1gotoloop;……用标识符表示分号冒号冒号6.2.3注意:结构化程序设计方法主张限制使用goto语句,一般只在下面两种结构中表示循环一、loop:if(表达式){语句gotoloop;}表达式值为零时,立即停止循环二、loop:语句if(!表达式)gotoloop;表达式值非零时,立即停止循环语句当表达式值非零语句直到表达式值为零例:用goto语句和if语句构成循环。例用goto语句和if语句构成循环。voidmain(){inti,sum=0;i=1;loop:if(i=100){sum=sum+i;i++;gotoloop;}printf(%d\n,sum);}运行结果:5050i=101形式:while(表达式)语句表达式值为零时,立即停止循环形式:do语句while(表达式);表达式值为零时,立即停止循环,至少执行一次循环语句语句当表达式值非零语句直到表达式值为零6.3while和dowhile语句分号while(表达式)do语句while(表达式);例1.写出下面程序的运行结果(1)voidmain(){inti=1;while(i=3){printf(”%d\n”,i);i++;}}(2)voidmain(){inti=1;while(i=3);{printf(”%d\n”,i);i++;}}结果123结果死循环循环体空语句注意:若把上面{、}去掉也死循环复合语句作为循环体语句(3)voidmain(){intk=1,n=1,sum=0;do{sum+=n;n++;if(sum=10)k=0;}while(k==1);printf(”sum=%d\n”,sum);}改为while(k=1)死循环sumn0112336410结果:sum=10例2用while语句和do-while语句求传统流程图表示算法1001nn不成立成立成立不成立N-S图表示算法1001nn100100voidmain(){inti,sum=0;i=1;运行结果:5050while(i=100){sum+=i;i++;}printf(%d\n,sum);}voidmain(){inti,sum=0;i=1;do{sum+=i;i++;}while(i=100);printf(%d\n,sum);}注意:i和sum的初值i的终值例3统计从键盘输入一行字符的个数。#includestdio.hvoidmain(){intn=0;printf(inputastring:\n);while(getchar()!='\n')n++;printf(%d,n);}只要从键盘输入的字符不是回车就继续循环完成对输入字符个数计数。输入:ascdf↙输出:5例4.计算p=1×2×3×······×nvoidmain(){inti,n;longp;scanf(”%d”,&n);i=1;p=1;while(i=n){p*=i;i++;}printf(”p=%ld\n”,p);}不用long会溢出重复到n次,也可以写成in+1例5.计算s=1!+2!+3!+······+n!(n0)voidmain(){inti,n;longs,t;scanf(”%d”,&n);i=1;t=1;s=0;do{t*=i;s+=t;i++;}while(i=n);printf(”s=%ld\n”,s);}保证达到计算n次t=1×1×2×3×…S=1+1×2+1×2×3+…例6.计算下面二十个数的和:13.8、-65、68.9、······、342.987voidmain(){inti=1;floatx,sum=0;while(i=20){scanf(”%f”,&x);sum+=x;i++;}printf(”sum=%f\n”,sum);}注:执行程序时输入13.8–6568.9······342.987↙i=40i+=2while语句中的表达式一般是关系表达或逻辑表达式,也可以是其它表达式,只要表达式的值为真(非0)即可继续循环。例7.voidmain(){inta=0,n;printf(“\ninputn:”);scanf(%d,&n);while(n--)printf(%d,a++*2);}执行n次,每执行1次,n减1。(a*2;a++)等价于输入:8输出:02468101214例8.while和do-while循环比较。voidmain(){intsum=0,i;scanf(“%d”,&i);while(i=10){sum=sum+i;i++;}printf(“sum=%d”,sum);}do{sum=sum+i;i++;}while(i=10);输入:8sumi088917102711输入:11sum=0sum=116.4for语句——代替while语句6.4.1形式:for(表达式1;表达式2;表达式3)语句要正确表达循环结构应注意三方面要求:1、循环控制变量的初始化。2、循环的条件。3、循环控制变量的值的更新for语句在书写形式上集中体现了这三方面要求6.4.2功能for语句完全可以取代while语句。for(表达式1;表达式2;表达式3)语句它的执行过程如下:1)先求解表达式1。2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行第3)步;若其值为假(0),则结束循环,转到第5)步。3)求解表达式3。4)转回第2)步继续执行。5)循环结束,执行for语句下面的一个语句。(用for语句改写前面的例2、例4、例5、例7)计算表达式3语句当表达式2值非零计算表达式1例2′、求voidmain(){inti,sum=0;i=1;do{sum+=i;i++;}while(i=100);printf(%d\n,sum);}voidmain(){inti,sum=0;for(i=1;i=100;i++)sum+=i;printf(%d\n,sum);}1001nn例4′.计算p=1×2×3×······×nvoidmain(){inti,n;longp;scanf(”%d”,&n);i=1;p=1;while(i=n){p*=i;i++;}printf(”p=%ld\n”,p);}for(i=1,p=1;i=n;i++)P*=i;中间用逗号for(i=1,p=1;i=n;P*=i,i++)例5′.计算s=1!+2!+3!+······+n!(n0)voidmain(){inti,n;longs,t;scanf(”%d”,&n);i=1;t=1;s=0;do{t*=i;s+=t;i++;}while(i=n);printf(”s=%ld\n”,s);}for(i=1,t=1,s=0;i=n;i++){t*=i;s+=t;}例7′.计算下面二十个数的和:13.8、-65、68.9、······、342.987voidmain(){inti=1;floatx,sum=0;while(i=20){scanf(”%f”,&x);sum+=x;i++;}printf(”sum=%f\n”,sum);}for(i=1;i=20;i++){scanf(”%f”,&x);sum+=x;}for语句形式:for(循环变量赋初值;循环条件;循环变量增量)语句总是一个赋值语句,它用来给循环控制变量赋初值总是一个表达式,它用来判别循环是否终止定义循环控制变量每循环一次后按什么方式变化这三个部分之间用“;”分开对于for循环中语句的一般形式,for(表达式1;表达式2;表达式3)语句就是如下的while循环形式:表达式1;while(表达式2){语句表达式3;}例1.写出下面程序的输出结果#includestdio.hvoidmain(){charc;for(;(c=getchar())-’#’;)putchar(c);}c为’#’,值为0,结束可以是任意表达式输入:a56*3h#hj$↙输出:a56*3h例2.下面程序的输出结果是[]voidmain(){intx=10,y=10,i;for(i=0;x8;y=++i)printf(”%3d%3d”,x--,y);}A.10192B.9876C.101091D.10990表达式1只做一次xy1010918C2注意:1)for循环中的“表达式1”、“表达式2(循环条件)”和“表达式3”可以缺省,但“;”不能缺省。2)省略了“表达式1”,表示不对循环控制变量赋初值,可在for循环里面或外面对其赋初值。例如:i=1;for(;i=20;i++){scanf(”%f”,&x);sum+=x;}3)省略“表达式2”,则不做其它处理时成为死循环。例如:for(i=1;;i++)sum=sum+i;相当于:i=1;while(1){sum=sum+i;i++;}4)省略了“表达式3(循环变量增量)”,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。例如:for(i=1;i=100;){sum=sum+i;i++;}5)省略了“表达式1”和“表达式3”。例如:for(;i=100;){sum=sum+i;i++;}相当于:while(i=100){sum=sum+i;i++;}6)3个表达式都可以省略。例如:for(;;)语句相当于:while(1)语句7)表达式1可以是设置循环变量的初值的赋值表达式,也可以是其他表达式。例如:for(sum=0;i=100;i++)sum=sum+i;8)表达式1和表达式3可以是一个简单表达式也可以是逗号表达式。for(sum=0,i=1;i=100;i++)sum=sum+i;或:for(i=0,j=100;i=100;i++,j--)k=i+j;9)表达式2一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体。例如:for(i=0;(c=getchar())!=’\n’;i+=c);又如:for(;(c=getchar())!=’\n’;)printf(“%c”,c);6.5循环的嵌套1、各种循环结构的循环体中可以包含任一种完整的循环结构、选择结构,2、选择结构的任一分支中也可以包含任一种完整的循环结构、选择结构,3、且它们可多层嵌套。例1.while(xy+z){…for(k=1;k2;k++){…if(a5)w=1;elseif(a==5){…switch结构…}else{for(s=0,n=0;n3;n++)s+=n;}…}…}6.6break语句和continue语句switch结构中的break:提前结束该结构循环结构中的break:提前结束该结构(while循环、do-while循环、for循环)循环结构中的continue:提前结束本次循环若在多层嵌套中使用break或continue,它只影响包含它的最内层结构例1.写出以下程序的运行结果:voidmain(){intn;for(n=1;n=10;n++){if(n%3==0)break;printf(“%4d”,n);}printf(“!!!!!\n”);}voidmain(){intn;for(n=1;n=10;n++
本文标题:谢丽聪老师C语言课件-6循环控制-2009
链接地址:https://www.777doc.com/doc-7002400 .html