第5章循环结构的C程序设计YYH版第5章循环结构程序设计5.1while循环语句5.2do-while循环语句5.3for5.4多重循环5.5break语句和continue语句5.6goto语句和标号5.7程序举例教材上的第二章2.5中的一部分(2.5.5)第5章循环结构的C程序设计YYH版5.1while循环语句(格式1)1.格式:(a)(b)表达式当表达式为真循环体不满足循环体满足图5.1while循环2.功能图3.执行过程:先计算while后面圆括号内表达式的值,如果其值为“真”(非0),则执行语句部分(即循环体),然后再计算表达式的值,并重复上述过程,直到表达式的值为“假”(0)时,循环结束。注意:while循环中的表达式一般是关系表达式(如i=100)或逻辑表达式,但也可以是数值表达式或字符表达式,此时其值非零即为“真”其值为零即为“假”。while(表达式)(即条件)复合语句(即循环体)第5章循环结构的C程序设计YYH版例5.1利用while语句实现:从键盘输入n(n0)个数,求其和。starti=1;sum=0;i≤nsum=sum+k;i++;stop读入n读入k输出sumNY图5.2求n个数的和的程序框图(细框)输入处理输出编程粗框三部曲第5章循环结构的C程序设计YYH版#includestdio.h//#includeiostrem.hvoidmain(){inti,n,x,sum;i=1;sum=0;//定义计数/累加器printf(Input:);//coutInput:;scanf(%d,&n);//cinn;while(i=n){scanf(%d,&x);//cinx;sum=sum+x;//循环求和i++;//循环计数}printf(\nsumis:%d\n,sum);}//coutendl“sumis:”sumendl;运行结果:Input:6123421195sumis:73解:设计一个计数变量/器i,用以计算循环的次数,其初始值设为1,设计一个求和变量/累加器sum,初始值sum=0;在循环中,每输入一个数x就累加上去:sum=sum+x;注意:程序中黑色的为C语言;蓝色的为C++语言。第5章循环结构的C程序设计YYH版例5.2从键盘连续输入字符,直到输入“回车”符为止,统计输入的字符个数。startlen=0;(ch=getch())!=′/r′stop输出lenNYlen++图5.3统计输入字符的个数的程序框图第5章循环结构的C程序设计YYH版#includestdio.hvoidmain(){charch;intlen=0;//字符计数变量/器初始化puts(Typeinasentence,thenpressEnter\n);while((ch=getch())!=‘\r’){putchar(ch);//将刚键入的字符输出len++;}printf(\nSentenceis%dcharacterslong.\n,len);}运行结果:Typeinasentence,thenpressthisisasentence.Sentenceis19characterslong.包含空格赋值表达式第5章循环结构的C程序设计YYH版5.2do-while循环语句(格式2)1.格式(a)(b)表达式不满足满足直到表达式为假循环体循环体图5.4do-while循环2.功能图3.执行过程(先执行后判定):先执行循环体中的语句,然后计算表达式的值;若表达式的值为“真”(非0),则再次执行循环体;如此重复,直至表达式的值为“假”(0)时结束循环。注意:与while语句(先判定后执行)比较。例5.3利用do—while语句重做例5.1。do语句块(即循环体)while(表达式);第5章循环结构的C程序设计YYH版starti=1;sum=0;sum=sum+k;i++;stop读入n读入k输出sumNYi≤n图5.5求n个数和的程序框图#includestdio.hvoidmain(){inti,n,k,sum;i=1;sum=0;printf(Inputn:);scanf(%d,&n);do{scanf(%d,&k);sum=sum+k;i++;}while(i=n);printf(sumis:%d\n,sum);}第5章循环结构的C程序设计YYH版5.3for循环语句1.格式:(a)(b)表达式2不满足满足求解表达式1求解表达式1当表达式2为真循环体求解表达式3循环体求解表达式3图5.6for循环2.功能图for(表达式1;表达式2;表达式3)语句块(即循环体)3.执行过程:(1)首先求解表达式1(一般为对循环变量赋初值,如i=1)。(2)求解表达式2(一般为判断循环变量超过终值,如i=50),若其值为“真”(非0),则执行循环体中的语句,然后执行第(3)步;若为“假”(0),则结束循环,转至第(5)步。(3)求解表达式3(一般为对循环变量确定步长,如i=i+1)。(4)至第(2)步重复执行。(5)执行for循环语句的下一语句。第5章循环结构的C程序设计YYH版例如:for(i=1;i=50;i++)sum=sum+i;for语句可与while语句等价:表达式1;while(表达式2){语句;表达式3;}例5.4利用for语句重做例5.1。includestdio.hvoidmain(){inti,n,k,sum=0;printf(Inputn:);scanf(%d,&n);for(i=1;i=n;i++){scanf(%d,&k);sum=sum+k;}printf(sum:%d\n,sum);}运行结果:Inputn:6711205219Sum:64for语句最简单的应用形式,也是最容易理解的形式:for(循环变量赋初值;循环条件;循环变量增值)语句块(循环体)或++i第5章循环结构的C程序设计YYH版例5.5计算1至50中是7的倍数的数值之和。#includestdio.hvoidmain(){inti,sum=0;//定义循变和累加器for(i=1;i=50;i++)if(i%7==0)sum+=i;printf(sum=%d\n,sum);}运行结果:sum=196说明:1)表达式3的增量(此例为正方向)或减量(负方向,如此例可改“for(i=1;i=50;i++)”为“for(i=50;i=1;i--)”)与循环变量的初值和终值有关;2)for语句的循环次数是可计算的,而while语句的循环次数一般是不可计算的(按条件循环)。实例见“VC++实例/一般程序/基本循环编程\求a+aa+aaa+”和“C++级数(方一循环方二数组)”终值初值步长+1)循环次数=int(比较:对循环次数确定的用for循环语句;对循环次数不确定的用while循环语句(使用条件)。第5章循环结构的C程序设计YYH版5.4多重循环或循环嵌套当一个循环体内又包含另一个完整的循环结构时,称为多重循环或循环嵌套,其循环结构可用上述三种循环语句的任意一种。例如,下面是两种循环嵌套的示意图。(1)while(){while(){}}……(2)for(;;){…do{…}while();…}外循环内循环(3)for(i=1;;){…for(j=1;;){…}…}第5章循环结构的C程序设计YYH版说明:(1)循环嵌套中的各循环变量不能同名;而并行循环的循环变量可同名。(2)对循环嵌套,当内循环循环完毕时,外循环才开始下一轮循环,此时,内循环又从头开始循环;故内循环的总次数为内外循环次数之积。for(i=1;;){…for(j=1;;){…}…}for(i=1;;){…}for(i=1;;){…}for(i=1;i=10;++i){…for(j=1;j=10;++j){…}…}外循环循环10次;内循环循环10*10=100次。第5章循环结构的C程序设计YYH版例5.6输出如下页的九九表。循环9次输出1—9的表头外循环控制9行(乘数i)内循环控制9列(被乘数j)若是第9列,则换行,否则续行输出应改为:includestdio.hvoidmain()第5章循环结构的C程序设计YYH版i:j:改内循环的初或终值为外循环的循变的函数及输出格式,如:该内循环控制语句为for(j=1;ji;j++)则为左下三角形。实例见“VC++实例/一般程序/基本循环编程/九九乘法表”每个元素值为i*j第5章循环结构的C程序设计YYH版5.5break语句和continue语句5.5.1break语句1.格式:break;2.功能:跳出(或终止)它所在的最近的循环语句或switch结构。3.注意问题:(1)break语句只能用于switch结构或循环结构中,且多和if语句配用,例在程序中有下列语句:if(…)break;则此时的if语句一定位于循环体中或switch结构中,break语句跳出的也不是if语句,而是跳出包含此if语句的循环结构或switch结构。第5章循环结构的C程序设计YYH版(2)在循环语句嵌套使用的情况下,break语句只能跳出(或终止)它所在的循环或它最近的循环语句(有循环嵌套时),而不能同时跳出(或终止)多层循环,如:for(…){for(…){…break;}…}跳至第5章循环结构的C程序设计YYH版例5.7计算r=1到r=10间的圆面积,直到面积area大于100为止。#definePI3.1415926#includestdio.hvoidmain(){intr;floatarea;for(r=1;r=10;r++){area=PI*r*r;if(area100)break;printf(r:%dareais:%f\n,r,area);}}运行结果:r:1areais:3.1415930r:2areais:12.566370r:3areais:28.274334r:4areais:50.265480r:5areais:78.539818问题:1、此例实际循环六次(即计算了六次,第六次因area100而跳出循环),但输出了五次。2、若改题为“计算r=1、2、3…的圆面积,直到面积area大于100为止”则只能用“while”语句,同学们自编。第5章循环结构的C程序设计YYH版5.5.2continue语句continue语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,直接进行下一次是否执行循环的判定。continue语句的一般形式如下:continue;其执行过程是:终止当前这一轮循环,即跳过循环体中位于continue后面的语句而立即开始下一轮循环;对于while和do-while来讲,这意味着立即执行条件测试部分,而对于for语句来讲,则意味着立即求解表达式3。第5章循环结构的C程序设计YYH版例5.8输出100到150之间不能被3整除的数,要求一行输出10个数。#includestdio.hvoidmain(){intn,i=0;for(n=100;n=150;n++){if(n%3==0)continue;printf(%4d,n);i++;//每行的列数计数if(i%10==0)printf(\n);}}运行结果:100101103104106107109110112113115116118119121122124125127128130131133134136137139140142143145146148149if(n%30){printf(%4d,n);i++;//每行的列数计数if(i%10==0)printf(\n);}等价第5章循环结构的C程序设计YYH版5.6goto语句和标号goto语句为无条件转向语句,程序中使用goto语句时要求和标号配合,它们的一般形式为goto标号;…标号:语句;C语言规定,goto语句的使用范围仅局限于函数内部,不允许在一个函数中使用goto语句把程序