您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 第06章 循环结构程序设计(新)
C语言程序设计吉林大学珠海学院计算机系李昱E-mail:826450556@QQ.comTEL:13631284762(66762)第6章循环结构程序设计学习的意义许多实际问题中往往需要有规律地重复某些操作,如菜谱中可以有:“打鸡蛋直到泡沫状”这样的步骤,也就是说,在鸡蛋没有打成泡沫状时要反复地打。相应的操作在计算机程序中就体现为某些语句的重复执行,这就时所谓的循环。下面来思考一个问题:如何编程来计算1+2+3+…+100?程序如下:ints=0;s=s+1;s=s+2;s=s+3;……s=s+100;printf(“s=%d”,s);重复100次,晕!!!有没有更好的方法来计算呢?有!就是用循环来编程。第4章已讨论程序结构顺序结构选择结构循环结构本章讨论第5章已讨论学习目标理解循环结构的含义;掌握C语言三种循环结构的特点;掌握while、do-while、for、goto、break、continue语句的使用方法;掌握不同循环结构的选择及其转换方法;掌握混合控制结构程序设计的方法。While、do-while、for语句循环嵌套Break、continue、goto语句exit()函数循环结构类型的选择及转换循环结构程序设计举例本章小结学习内容6.1循环结构的程序设计1.while语句一般形式:while(表达式)循环体语句;执行流程:exprT循环体Fwhile其中:while后面的括号()不能省。while后面的表达式可以是任意类型的表达式,但一般是条件表达式或逻辑表达式。表达式的值是是循环的控制条件。语句部分称为循环体,当需要执行多条语句时,应使用复合语句。特点:先判断表达式,再执行循环体【例】用while语句求1~100的累计和。#includestdio.hvoidmain(){inti=1,sum=0;while(i=100){sum+=i;i++;}printf(sum=%d\n,sum);}循环初值循环终值循环条件循环体循环变量增值运行结果:sum=5050【例】显示1~10的平方#includestdio.hvoidmain(){inti=1;while(i=10){printf(%d*%d=%d\n,i,i,i*i);i++;}}运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100(1)如果while后的表达式的值一开始就为假,循环体将一次也不执行。(2)循环体中的语句可为任意类型的C语句。(3)遇到下列情况,退出while循环:表达式为假(为0)。循环体内遇到break、return或goto语句(break和goto语句将在随后介绍)。while语句注意事项:inta=0,b=0;while(a0)//a0为假,b++不可能执行b++;intnum=0;//字符计数while(1){if(getche()=='\n')//如果输入的字符是回车符,则返回return;num++;}(4)在执行while语句之前,循环控制变量必须初始化,否则执行的结果将是不可预知的。(5)要在while语句的某处(表达式或循环体内)改变循环控制变量,否则极易构成死循环。(6)允许while语句的循环体又是while语句,从而形成双重循环。while语句注意事项:例:计算10!#includestdio.hvoidmain(){inti;//i应赋初始值10longs=1;while(i=1)s*=i--;printf(10!=%ld\n,s);}i=1;while(i100)//死循环,因为i的值没变化,永远小于100sum+=i;printf(sum=%d\n,sum);i=1;while(i=9){j=1;while(j=9){printf(%d*%d=%d\n,i,j,i*j);j++;}i++;}【例】求两个正整数的最大公因子。我们采用Euclid(欧几里德)算法来求最大公因子,其算法是:(1)输入两个正整数m和n。(2)用m除以n,余数为r,如果r等于0,则n是最大公因子,算法结束,否则(3)。(3)把n赋给m,把r赋给n,转(2)。#includestdio.hvoidmain(){intm,n,r;printf(Pleaseinputtwopositiveinteger:);scanf(%d%d,&m,&n);while(n!=0){r=m%n;//求余数m=n;n=r;}printf(Theirgreatestcommondivisoris%d\n,m);}运行结果:Pleaseinputtwopositiveinteger:2456↙Theirgreatestcommondivisoris82.do_while语句一般形式:do循环体语句;while(表达式);执行流程:其中:while后面的括号()不能省。while最后面的分号;不能省。while后面的表达式可以是任意类型的表达式,但一般是条件表达式或逻辑表达式。表达式的值是是循环的控制条件。语句部分称为循环体,当需要执行多条语句时,应使用复合语句。expr循环体TFdowhile特点:先执行循环体,再判断表达式【例】用do_while语句求1~100的累计和。#includestdio.hvoidmain(){inti=1,sum=0;do{sum+=i;i++;}while(i=100);printf(sum=%d\n,sum);}运行结果:sum=5050do_while语句注意事项:(1)如果do-while后的表达式的值一开始就为假,循环体还是要执行一次。(2)在if语句、while语句中,表达式后面都不能加分号,而在do-while语句的表达式后面则必须加分号,否则将产生语法错误。(3)循环体中的语句可为任意类型的C语句。(4)和while语句一样,在使用do-while语句时,不要忘记初始化循环控制变量,否则执行的结果将是不可预知的。(5)要在do-while语句的某处(表达式或循环体内)改变循环控制变量的值,否则极易构成死循环。(6)do-while语句也可以组成多重循环,而且也可以和while语句相互嵌套。inta=0,b=0;dob++;while(a0);3.for语句一般形式:for(表达式1;表达式2;表达式3)循环体语句;执行流程:其中:for后面的括号()不能省。表达式1:一般为赋值表达式,给控制变量赋初值。表达式2:关系表达式或逻辑表达式,循环控制条件。表达式3:一般为赋值表达式,给控制变量增量或减量。表达式之间用分号分隔。语句部分称为循环体,当需要执行多条语句时,应使用复合语句。expr2T循环体forexpr1expr3Ffor语句很好地体现了正确表达循环结构应注意的三个问题:控制变量的初始化。循环的条件。循环控制变量的更新。【例】用for语句求1~100的累计和。#includestdio.hvoidmain(){inti,sum=0;for(i=1;i=100;i++)sum+=i;printf(sum=%d\n,sum);}运行结果:sum=5050for语句注意事项:(1)表达式1、表达式2、和表达式3可以是任何类型的表达式。比方说,这三个表达式都可以是逗号表达式,即每个表达式都可由多个表达式组成。例:计算1*2+3*4+5*6+…+99*100。inti,j;longsum=0;for(i=1,j=2;i=99;i=i+2,j=j+2)sum+=i*j;printf(sum=%ld\n,sum);逗号表达式逗号表达式(2)表达式1、表达式2、和表达式3都是任选项,可以省掉其中的一个、两个或全部,但其用于间隔的分号是一个也不能省的。#includestdio.hvoidmain(){inti,sum=0;i=1;for(;i=100;i++)sum+=i;printf(sum=%d\n,sum);}#includestdio.hvoidmain(){inti,sum=0;i=1;for(;i=100;)sum+=i++;printf(sum=%d\n,sum);}for语句注意事项:省掉表达式1,3省掉表达式1#includestdio.hvoidmain(){inti,sum=0;i=1;for(;;){if(i100)break;sum+=i++;}printf(sum=%d\n,sum);}省掉表达式1,2,3for语句注意事项:for(a=1;;a++)printf(&d\n,a);(3)表达式2如果为空则相当于表达式2的值是真。死循环!(4)循环体中的语句可为任意类型的C语句。(5)for语句也可以组成多重循环,而且也可以和while语句和do-while语句相互嵌套。(6)循环体可以是空语句。例:计算用户输入的字符数(当输入是回车符时统计结束)。#includestdio.hvoidmain(){intn=0;printf(inputastring:\n);for(;getchar()!='\n';n++);printf(%d,n);}表示循环体为空语句,并非表示for语句结束三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}嵌套循环的跳转禁止:从外层跳入内层跳入同层的另一循环向上跳转4.循环嵌套(4)for(;;){……do{……}while();……while(){……}…...}外循环内循环内循环【例】循环嵌套,输出九九表1234567891234567892468101214161836912151821242791827364554637281……………..ij#includestdio.hvoidmain(){inti,j;for(i=1;i10;i++)printf(%4d,i);printf(\n---------------------------------------\n);for(i=1;i10;i++)for(j=1;j10;j++)printf((j==9)?%4d\n:%4d,i*j);}i10printf假(0)真(非0)i=1j++j=1j10真(非0)假(0)i++外循环内循环for(i=1;i10;i++)for(j=1;j10;j++)printf((j==9)?%4d\n:%4d,i*j);5.break与continue语句break语句功能:在循环语句和switch语句中,终止并跳出循环体或开关体说明:(1)break不能用于循环语句和switch语句之外的任何其它语句之中。(2)break只能终止并跳出最近一层的结构。while(表达式1){……if(表达式2)break;……}语句……do{……if(表达式2)break;……}while(表达式1);语句……for(;表达式1;){……if(表达式2)break;……}语句……【例】将用户输入的小写字母转换成大写字母,直到输入非小写字母字符。#includestdio.hvoidmain(){charc;while(1){c=getchar();//读取一个字符if(c='a'&&c='z')//是小写字母putchar(c-'a'+'A');//输出其大写字母else//不是小写字母break;//循环退出}}运行结果:howareyou↙HOWAREYOU方法:通过设置一标志变量tag,然后在每层循环后加上一条语句:if(tag)break;其值为1表示跳出循环体,为0则
本文标题:第06章 循环结构程序设计(新)
链接地址:https://www.777doc.com/doc-4021659 .html