《程序设计基础教案142课时——循环结构 go to语句和while.docx》由会员分享,可在线阅读,更多相关《程序设计基础教案142课时——循环结构 go to语句和while.docx(7页珍藏版)》请在第一文库网上搜索。
1、教案序号14周次授课形式新授授课章节名称循环结构(一)教学目的Goto语句和WhiIe语句的使用教学重点Whi1e语句的使用教学难点Whi1e语句的使用使用教具机房课外作业课后体会授课主要内容4.4.1goto语句构成的循环goto语句是一种使程序流程无条件转移的语句。其语法格式为:goto标号;它的作用是从所在处,转向本国数内的某一处,程序必须指出转向的目的地,目的地用标号指明。标号应是合法的标识符,它的命名规则与变量名相同。在作为转向目标的语句的前面要用同一标识符作为标号。goto语句通常与条件语句配合使用。可用来实现条件转移,构成循环体,跳出循环体等功能。但是,在结构化程序设计中一般不主
2、张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。goto语句只在一个地方有使用价值:当要从多重循环深处直接跳转到循环之外时,如果用break语句,将要用多次,而且可读性也不好,此时goto可以发挥作用。对于初学者来S3:返回S2,继续执行。传统流程图如图4.15所示。据此写出源程序如下:#inc1udeintmain()(inti=1,sum=0;1oop:if(i=100)sum=sum+i;i=i+1;goto1oop;)printf(z,sum=%dnz,sum);returnO;运行情况为:sum=5050本例用if语句和goto语句构成循环结构。如果i100则
3、结束循环体,然后转移至goto后续语句执行。在这个程序中,变量i不仅表示了待累加的变量的值,而且还起着控制循环是否继续进行的作用。在很多计算机类的书籍中把起着控制循环继续进行否的变量称之为循环控制变量。本例整个执行过程中i,sum的变化过程如表4.3所示。表4.3计算1+2+3+100时部分循环中的各种数据循环次数循环控制变量ii=100的值循环体语句本次循环后i的值本次循环后sum值01011s=0+1;i=i+1;2122s=1+2;i=i+1;3333s=3+3;i=i+1;4644s=6+4;i=i+1;51055s=10+5;i=i+1;615100100真s=4950100i=10
4、15050i+1;101101假结束说明:(D由此例可知,循环结构由三部分组成:初始化部分,循环体部分和循环控制部分。在初始化部分要完成循环体中所用到的相关变量的声明、定义初值等工作。如本例中的“inti=1,sum=OJ语句,一般在循环体前完成。在循环体部分完成需要重复执行的各步操作。如本例中求累加和、i增值、返回循环条件判断语句处等操作,即以下语句:(sum=sum+i;i=i+1;goto1oop;循环控制部分用来给定控制循环是否继续执行的条件,如本例中的“1oop:if(i100因此在循环体中应该有使i增值以最终导致i100的语句,本例中用“i=i+1;”语句来达到此目的。如果无此语句
5、,则i的值始终不改变,循环永不结束。4.4.2whi1e循环结构WhiIe语句用来实现“当型”循环结构。1、WhiIe语句一般格式:whi1e(表达式)循环体;)其中表达式称为循环条件,循环体由一条或多条语句组成。为便于初学者理解,可以读做“当(循环)条件成立时,执行循环体”。图4.16whi1e循环结构说明:(1)循环体如果包含一个以上的语句,应该用“”括起来,以复合语句形式出现,否则WhiIe语句的范围只到WhiIe后面的第一个分号处。(2)在循环体中应有使循环趋向于结束的语句,以避免“无限循环”的发生。2、WhiIe语句执行过程计算WhiIe后的表达式,若其值非零,则转向;否则退出该循环
6、结构,去执行该结构的后继语句。执行循环体,循环体执行完毕,重复进行。WhiIe语句的传统流程图、N-S图见图4.16所示。注意:Whi1e语句的特点是先计算表达式的值,然后根据表达式的值决定是否执行循环体中的语句。因此,若表达式的值一开始就为零,那么循环体一次也不执行。IOO例4.17用whi1e语句编写程序求OH=I图4.17例4.17图算法流程图如图4.17。据此算法写出源程序如下:ttinc1udeintmain()inti=1,sum=0;i称为循环变量,SUm称为累加器whi1e(i=100)sum=sum+i;i=i+1;printf(zzsum=%d,sum);return0;)
7、运行情况为:sum=5050本例用whi1e循环结构。当i100时则结束循环体,然后转至后续语句执行。整个执行过程中i,sum的变化过程如表4.1所JO例4.18打印指定月份的日历。ttinc1udeintmain()intweek,day,month,maxday,year,i;Printf(请输入年份和月份:r);scanf(z,%d,%c,&year,&month);Printf(请输入该月第一天是星期几(0二星期天,,6二星期六)和该月的天数:n);scant(z,%d,&week,&maxday);printf(z,=%year年%month月=n);printf(*SUNtMONt
8、TUEtWEDtTURtFRItSATn);i=0;whi1e(iweek)将该月份的第一天准确定位于所在的星期的位置printf(z,tz,);i+;day=1;whi1e(day=maxday)printf(z,%dt”,day);week=(week+1)%7;此语句完成了使Week+1的功能,同时模7,使产生星期在O6之间if(week=O)printfnz,);day+;returnO;)运行情况如下:请输入年份和月份:20053/请输入该月第一天是星期几(O=星期天,6二星期六)和该月的天数:230/-SUNMONTUEWEDTURFRISAT123456789101112131415161718192021222324252627282930请读者自行画出本题的N-S流程图。