您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 计算机编程CHP4-循环结构
第四章循环结构本章教学要求1.理解C语言循环程序的概念与基本原理,熟悉循环的功能。2.掌握循环结构程序设计的基本方法。3.正确区分while、do-while语句的异同。4.掌握break和continue语句在循环中的使用方法。5.通过多重循环程序设计,更加深入地掌握结构化程序设计方法,进一步加深“CDIO理念”在计算机编程中的应用。教学内容1.用格里高利公式求π的近似值(while语句)2.统计一个整数的位数(do-while语句)3.判断素数(break和continue语句)4.求1!+2!+...+100!(循环嵌套)5.循环结构程序设计6.本章小结用格里高利公式求π的近似值例4-1:使用格里高利公式求π的近似值,要求精确到最后一项的绝对值小于10–4。①程序解析②while语句③输入一批学生的成绩,统计平均分11114357#includemath.hintmain(void){intdenominator,flag;doubleitem,pi;flag=1;denominator=1;item=1.0;pi=0;while(fabs(item)=0.0001){item=flag*1.0/denominator;pi=pi+item;flag=-flag;denominator=denominator+2;}pi=pi*4;printf(“pi=%f\n”,pi);return0;}程序解析-求π的近似值pi=3.141613item=0.0?fabs(item)0.0001while语句while(条件)循环体语句;真假while下一条语句表达式循环体语句循环条件循环体一条语句while语句和for语句都是在循环前先判断条件while语句说明表达式1;while(表达式2){for的循环体语句;表达式3;}把for语句改写成while语句for(表达式1;表达式2;表达式3)循环体语句while和for的比较for(i=1;i=10;i++)sum=sum+i;i=1;循环变量赋初值while(i=10){循环条件sum=sum+i;i++;循环变量的改变}循环体例4-2从键盘输入一批学生的成绩,计算平均分。分析:①求累加和②确定循环条件不知道输入数据的个数,无法事先确定循环次数用一个特殊的数据作为正常输入数据的结束标志,比如选用一个负数作为结束标志。统计输入的一批学生的平均成绩#includestdio.hIntmain(void){intnum;doublegrade,total;num=0;total=0;printf(“Entergrades:\n);scanf(%lf,&grade);/*输入第1个数*/while(grade=0){/*输入负数,循环结束*/total=total+grade;num++;scanf(“%lf”,&grade);}if(num!=0)printf(“Gradeaverageis%.2f\n,total/num);elseprintf(Gradeaverageis0\n);return0;}Entergrades:6788735482-1Gradeaverageis72.80Entergrades:-16788735482Gradeaveragemarkis0统计一个整数的位数从键盘读入一个整数,统计该数的位数。①程序解析②do-while语句③循环语句的选择intmain(void){intcount,number;count=0;printf(“Enteranumber:);scanf(%d,&number);if(number0)number=-number;do{number=number/10;count++;}while(number!=0);printf(Itcontains%ddigits.\n,count);return0;}程序解析-统计一个整数的位数Enteranumber:12534Itcontains5digits.Enteranumber:-99Itcontains2digits.Enteranumber:0Itcontains1digits.while(number!=0){number=number/10;count++;}思考区别!!do-while语句do{循环体语句}while(表达式);先循环后判断真假表达式循环体语句do-while的下一条语句①while是先判别条件,再决定是否循环;②do-while是先至少循环一次,然后再根据循环的结果决定是否继续循环。while和do-while的比较真假表达式循环体语句do-while的下一条语句真假while的下一条语句表达式循环体语句循环语句的选择if(循环次数已知)使用for语句else/*循环次数未知*/if(循环条件在进入循环时明确)使用while语句else/*循环条件需要在循环体中明确*/使用do-while语句判断素数输入一个正整数m,判断它是否为素数。①程序解析②break语句和continue语句程序解析-判断素数算法:除了1和m,不能被其它数整除。设i取值[2,m-1]如果m不能被该区间上的任何一个数整除,即对每个i,m%i都不为0,则m是素数只要找到一个i,使m%i为0,则m肯定不是素数m%2%3%4%5%(m-1)不是素数||=0=0是素数&&!=0!=0m不可能被大于m/2的数整除i取值[2,m-1]、[2,m/2]、[2,]mfor(i=2;i=m/2;i++)if(m%i==0)break;if(im/2)printf(yes\n)elseprintf(no\n”);intmain(void){inti,m;printf(“Enteranumber:);scanf(%d,&m);for(i=2;i=m/2;i++)if(m%i==0)break;if(im/2)printf(%disaprimenumber!\n,m);elseprintf(No!\n);}例4-4:源程序-判断素数Enteranumber:9NoEnteranumber:1111isaprimenumber!for(i=2;i=m/2;i++)if(m%i==0)printf(No!\n);elseprintf(%disaprimenumber!\n,m);循环条件?循环的结束条件?思考区别!!break语句while(exp){语句1if(expb)break;语句2}真假exp语句1假expb语句2循环体真for(i=2;i=m/2;i++)if(m%i==0)break;if(im/2)printf(Yes);elseprintf(No!\n);当循环有多个出口时:表示循环条件区分结束条件for(i=2;i=m/2;i++)if(m%i==0){printf(No!\n);break;}printf(Yes);思考区别!!continue语句while(exp){语句1if(expb)continue;语句2}真假exp语句1假expb语句2循环体真跳过continue后面的语句,继续下一次循环break和continue#includestdio.hintmain(void){charc;inti;for(i=0;i10;i++){c=getchar();if(c=='\n')break;putchar(c);}}abc↙efgh↙123↙abcabcefgh1continue;Why??求1!+2!+…+100!for(i=1;i=100;i++){item=i!sum=sum+item;}①程序解析:调用函数fact(i)计算i的阶乘②嵌套循环:用循环计算i的阶乘#includestdio.hdoublefact(intn);intmain(void){inti;doublesum;sum=0;for(i=1;i=100;i++)sum=sum+fact(i);printf(1!+2!+3!+…+100!=%e\n,sum);return0;}doublefact(intn){inti;doubleresult=1;for(i=1;i=n;i++)result=result*i;returnresult;}程序解析:求1!+2!+…+100!嵌套循环for(i=1;i=100;i++){item=i!sum=sum+item;}for(i=1;i=100;i++){item=1;for(j=1;j=i;j++)item=item*j;sum=sum+item;}例4-6源程序#includestdio.hintmain(void){inti,j;doubleitem,sum;/*item存放阶乘*/sum=0;for(i=1;i=100;i++){item=1;/*每次求阶乘都从1开始*/for(j=1;j=i;j++)/*内层循环算出item=i!*/item=item*j;sum=sum+item;}printf(1!+2!+3!+…+100!=%e\n,sum);}内层循环的初始化for(i=1;i=100;i++){item=1;for(j=1;j=i;j++)item=item*j;sum=sum+item;}求1!+2!+….+100!item=1;for(i=1;i=100;i++){for(j=1;j=i;j++)item=item*j;sum=sum+item;}思考区别??求1!+1!*2!+……+1!*2!*……*100!分析嵌套循环的执行过程for(i=1;i=100;i++){item=1;for(j=1;j=i;j++)item=item*j;sum=sum+item;}①外层循环变量i的每个值,内层循环变量j变化一个轮次;②内外层循环变量不能相同,分别用i和ji=1j=1输出11(第1次输出)j=1输出21(第2次输出)i=2j=2输出22(第3次输出)…………j=1输出1001(第4951次输出)j=2输出1002(第4952次输出)……i=100j=100输出100100(第5050次输出)for(i=1;i=100;i++)for(j=1;j=i;j++)printf(%d%d\n,i,j);循环程序设计1.循环程序的实现要点:①归纳出哪些操作需要反复执行?循环体②这些操作在什么情况下重复执行?循环条件2.选用合适的循环语句forwhiledo-while3.循环具体实现时考虑(循环条件):①事先给定循环次数,首选for②通过其他条件控制循环,考虑while或do-while#includestdio.hintmain(void){inti,mark,max,n;printf(Entern:);scanf(%d,&n);printf(Enter%dmarks:,n);scanf(%d,&mark);/*读入第一个成绩*/max=mark;/*假设第一个成绩是最高分*/for(i=1;in;i++){scanf(%d,&mark);if(maxmark)max=mark;}printf(Max=%d\n,max);return0;}例4-7:输入一批学生的成绩,求最高分(for)markmaxmaxmarkEntern:5Enter5maks:6788735482Max=88Entern:0思考??#includestdio.hintmain(void){intmark,max;printf(“Entermarks:);scanf(%d,&mark);/*读入第一个成绩*/max=mark;/*假设第一个成绩最高分*/while(mark=0){if(maxmark)max=mark;scanf(%d,&mark);};printf(Max=%d\n,max);return0;}例4-7输入一批学生的成绩,求
本文标题:计算机编程CHP4-循环结构
链接地址:https://www.777doc.com/doc-4981912 .html