《C语言程序设计》课程教案表授课题目第三章程序的控制结构(5)——循环结构for课时安排2授课时间教学目的和要求1.掌握:循环结构程序设计、for语句2.熟悉:continue、break及goto语句教学内容1.基本内容:(1)三种循环比较(2)多重循环(3)循环中用到的其他语句2.重点:运算符与表达式、赋值运算符与赋值表达式讲课进程和时间分配1、引子(15分钟)•分析植树任务,认识循环结构中的术语:•循环条件•循环控制变量•循环体•改变循环条件的语句植树任务:学校组织植树,要求每个班100棵.•(1)当少于100棵•刨树坑.•种树•浇水•植树棵树加一•(2)返回(1)在实际工作中常常会遇到有一定规律的重复性操作,这就需要用到循环语句。在C语言中主要有三种循环语句:while,do-while,for。用goto语句和if语句也能构成循环。2、for语句(50分钟)(1)格式for(表达式1;表达式2;表达式3)循环体;(2)for循环执行过程如下1)计算表达式1。2)计算表达式2,若其值为非0(循环条件成立),则转(3)执行循环体;若其值为0(循环条件不成立),则转(5)结束循环。3)执行循环体。4)计算表达式3,然后转(2)判断循环条件是否成立。5)结束循环,执行for循环之后的语句。循环条件(暗含循环控制变量)循环体改变循环条件的语句例:求1+2+3+4+……100=?【例】Fibonacci数列问题,求数列1,1,2,3,5,8,…前40个数。提示:①用a,b两个变量a=1,b=1初始化,然后a=a+b=2,b=b+a=3,a=a+b=5,b=b+a=8……,依次类推,生成40个数据;数列后面的数值超过int的取值范围,所以定义a,b用长整型;②因为每次打印2个数,循环20次,用语句for(i=1;i=20;i++)实现;③每行打印4个数,用语句if(i%2==0)printf(“\n”);实现。main(){longinta=1,b=1;inti;for(i=1;i=20;i++){printf(“%12ld%12ld”,a,b);if(i%2==0)printf(“\n”);a=a+b;b=b+a;}}说明:for是关键词,其后有3个表达式,各个表达式用“;”分隔。上面的格式为规范性for语句格式.实际上3个表达式可以是任意的表达式,通常主要用于for循环控制main(){inti=1,s=0;while(i=100){s=s+i;i++;}printf(“thesumis:%d”,s);}main(){inti,s=0;for(i=1;i=100;i++){s=s+i;}printf(“thesumis:%d”,s);}for语句中表达式1,表达式2,表达式3都可以省略,甚至三个表达式都同时省略,但是起分隔作用的“;”不能省略。如果省略表达式1,即不在for语句中给循环变量赋初值,则应该在for语句前给循环变量赋初值。如果省略表达式2,即不在表达式2的位置判断循环终止条件,循环无终止地进行,也就是认为表达式2始终为“真”。则应该在其它位置(如:循环体)安排检测及退出循环的机制。(break语句)如果省略表达式3,即不在此位置进行循环变量的修改,则应该其它位置(如:循环体)安排使循环趋向于结束的工作。表达式1可以是设置循环变量初值的表达式(常用),也可以是与循环变量无关的其它表达式;表达式1,表达式3可以是简单表达式,也可以是逗号表达式。for(i=1,fact=1.0;;i++)表达式2一般为关系表达式或逻辑表达式,也可以是数值表达式或字符表达式,事实上只要是表达式就可以。建议:不要把与循环控制无关的内容放在for语句的三个表达式中,这是程序设计的良好风格。注意:规范性for循环通常用于循环次数给定的程序。下列程序段的运行结果是[]。for(i=1;i=5;)printf(“%d”,i);i++;A)12345B)1234C)15D)无限循环若i为整形变量,则以下循环语句的循环次数是____________。for(i=2;i==0;)printf(“%d”,i--);A)无限次B)0次C)1次D)2次main(){…for(i=1,fact=1.0;i=n;i++)fact=fact*i;…}main(){i=1;fact=1;for(;i=n;i++)fact=fact*i;…}main(){…for(i=1,fact=1.0;i=n;){fact=fact*i;i++;}…}学生练习:显示1—10内的偶数。3、循环中用到的其他语句(30分钟)(1)break语句break语句的一般形式为:break;执行过程是:终止对switch语句或循环语句的执行(跳出这两种语句结构),而转移到其后的语句处执行。【例5.5】求圆的面积。•#definePI3.1415926•main()•{•intr;floats;•for(r=1;r=10;r++)•{•s=PI*r*r;•if(s100)break;•}•printf(″s=%f″,s);•}•计算r=1到r=10的圆面积,直到s100为止。说明:1)break语句仅能用于开关语句switch,循环语句while、do-while和for。2)在多重循环的情况下,使用break语句时,仅退出包含break语句所在的那层循环体。练习:下面程序的输出结果是_______________。main(){inti;for(i=1;i=100;i++)if((i*i=150)&&(i*i=200))break;printf(“%d\n”,i*i);}A)144B)255C)169D)121写出程序的运行结果:main(){inti,s=0;for(i=1;i=10;i++){s=s+2;if(s5)break;}printf(“%d”,s);}总结说明:break语句只用于循环语句或switch语句中。在循环语句中,break常常和if语句一起使用,表示当条件满足时,立即终止循环。注意break不是跳出if语句,而是循环结构。循环语句可以嵌套使用,break语句只能跳出(终止)其所在的循环,而不能一下子跳出多层循环。要实现跳出多层循环可以设置一个标志变量,控制逐层跳出。2)continue语句(翻译为“继续”(循环continue语句的一般形式是:continue;功能:结束本次循环。即跳过本层循环体中余下尚未执行的语句,接着再一次进行循环条件的判定。【例5.6】求100--150之间和400--450之间能被9整除的数。提示:一个数与9取余等于0,则说明该数能被9整除。我们用一个循环语句初值=100,终值用450,步长=1进行循环,151到399之间的数据用continue;语句跳过不进行判断。main(){intn;for(n=100;n=450;n++){if(n150&&n400)continue;if(n%9==0)printf(“%6d”,n);}}运行:108117126135144405414423432441450注意:执行continue语句并没有使整个循环终止。注意与break语句进行比较。在while和do-while循环中,continue语句使流程直接跳到循环控制条件的测试部分,然后决定循环是否继续执行。在for循环中,遇到continue后,跳过循环体中余下的语句,而去对for语句中的表达式3求值,然后进行表达式2的条件测试,最后决定for循环是否执行。练习:以下程序的运行结果是[]。•main()•{inti,j,x=0;•for(i=0;i2;i++)•{x++;•for(j=0;j=3;j++)•{if(j%2)continue;x++;}•x++;•}•printf(“%d\n”,x);•}A、4B、8C、6D、12总结break,continue主要区别:continue语句只终止本次循环,而不是终止整个循环结构的执行;break语句是终止循环,不再进行条件判断。3)goto语句格式:goto〈语句标号〉;功能:goto语句为无条件转向语句,程序执行到goto语句时,无条件地转到〈语句标号〉所指定的语句并执行。说明:①〈语句标号〉必须用标识符表示,不能用整数作为标号。②goto语句与if语句一起使用,在满足某一条件时,程序跳到标号处执行。4、程序设计举例编写循环程序的要点:(1)定义循环控制变量的初始值;(2)每执行一次循环,改变循环变量的增量(或减量);(3)用数据代入测试控制循环的终值条件(即是否按自己预定的次数进行循环)。【例5.8】输入一个整数,将其各位数字逆序输出。分析:一个数i,用K=i%10,K的值为取最低位数并打印出来,再用i=i/10去掉最低位,若i≠0,然后重复以上过程,直到i=0就可以将整数i逆序全部输出。验证数字:i=123第1次:K=i%10(k=3)i=i/10(i=12)≠0第2次:K=i%10(k=2)i=i/10(i=1)≠0第3次:K=i%10(k=1)i=i/10(i=0)=0程序代码:#includestdio.hvoidmain(){longi,k;printf(Pleaseinputaninteger:\n);scanf(%ld,&i);do{k=i%10;/*取最低位后打印*/printf(%ld,k);i=i/10;/*去掉最低位*/}while(i!=0);printf(\n);}运行:Pleaseinputaninteger:3167952↙2597613【例5.9】蜗牛爬井问题:一只蜗牛从井底爬到井口,每天白天蜗牛要睡觉,晚上才出来活动,一个晚上蜗牛可以向上爬3尺,但是白天睡觉的时候会往下滑2尺,若井深10尺,问蜗牛几天可以爬出来?提示:可定义三个变量,分别表示已经爬的高度、用的天数、白天和晚上的标记,每过一个晚上或者白天都给天数加1,最后将天数加1除以2得到的结果输出即是所用的天数。本例用到while循环语句和if……else分支语句。程序代码:#includestdio.hmain(){inth,day,flag;h=day=0;flag=1;while(h10){if(flag==1){h=h+3;day=day+1;flag=0;}else{h=h-2;day=day+1;flag=1;}}day=(day+1)/2;printf(“%d”,day);}【例5.10】打印九九乘法表。提示:用二重循环语句,外循环用i循环变量控制打印的行数,内循环用j循环变量控制每行打印的个数。程序代码:main(){inti,j;for(i=1;i=9;i++){for(j=1;j=9;j++)printf(“%d*%d=%-4d”,i,j,i*j);printf(“\n”);}}讨论、思考题、作业:实验指导书习题参考资料(含参考书、文献等):叶斌陈世强.C语言程序设计.北京:科学出版社授课类型:理论课讨论课□实验课□练习课□其他□教学方式:传统授课双语□讨论□示教□指导□其他□教学资源:多媒体模型□实物□挂图□音像□其他□