模块5循环结构程序设计电子课件 C语言程序设计案例教程.pptx
《模块5循环结构程序设计电子课件 C语言程序设计案例教程.pptx》由会员分享,可在线阅读,更多相关《模块5循环结构程序设计电子课件 C语言程序设计案例教程.pptx(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言程序设计案例教程模块5 循环结构程序设计任务描述假设学生成绩表如表4-1所示。编写程序,通过键盘输入所有学生的成绩score,通过选择结构语句的处理,输出相应的等级grade,分别统计及格人数c1和不及格人数c2,并输出。(1)设计循环语句,当输入负数时结束循环。(2)依次输入score,判断是哪个等级(grade)并输出,统计及格和不及格的人数。(3)输出及格和不及格人数。(1)如果已知学生的人数,在输入过程中可能输入错误的数据(如负数),同样需要以上处理,程序如何编写?(2)如果希望将总成绩score按从大到小的顺序排列,如何处理?模块5 循环结构程序设计任务目标(1)能够应用循环结
2、构设计算法。(2)能够根据处理需要设计循环体、循环控制和设置循环初值。(3)培养软件开发必备的逻辑思维清晰、流程控制正确的基本素质。模块5 循环结构程序设计源代码展示#include main()float score;char grade;int n=0,n1=0;printf(“请输入学生的成绩:”);scanf(%f,&score);while(score=0)n+;模块5 循环结构程序设计源代码展示switch(int)(score/10.0)/*成绩score除以10然后取整*/case 10:case 9:grade=A;break;case 8:grade=B;break;cas
3、e 7:case 6:grade=C;break;default:grade=D;printf(score=%.1f,grade=%cn,score,grade);/*输出score及对应的等级*/if(score=60)n1+;/*成绩及格则及格人数n1+1*/模块5 循环结构程序设计源代码展示printf(“请输入学生的成绩:”);scanf(%f,&score);printf(及格人数=%d,不及格人数=%dn,n1,n-n1);运行结果模块5 循环结构程序设计程序分析任务要求根据输入的学生成绩判断其等级并求及格、不及格人数,程序采用while循环,判断条件是score=0。等级处理采用
4、switch语句,求及格、不及格人数需要计数,定义变量n计数总人数、n1计数及格人数,在循环体中统计对应的人数,使用n+、n1+分别实现。许多问题的求解归结为重复执行的操作。例如,输入全校学生的成绩,数值计算中的方程迭代求根,非数值计算中的对象遍历等。重复执行就是循环,重复工作是计算机特别擅长的工作之一。循环结构是结构化程序设计的3种基本结构之一,在程序设计中对于那些需要重复执行的操作利用循环结构处理既简单又方便。因此,熟练掌握循环结构的应用是程序设计最基本的要求。在C语言中有4种可以构成循环结构的语句,结构化程序设计方法主张限制使用goto语句,因此本模块主要介绍while、dowhile和
5、for三种循环语句。5.1 while语句while语句是实现循环结构的常用语句之一,常用于实现“当型”循环。1.语法while语句的语法格式如下。while(表达式)语句序列;while是关键字,其中的表达式称为循环条件,语句序列称为循环体。图5-2while语句流程图当逻辑表达式为真(非0)时,重复执行循环体语句;当逻辑表达式为0时,终止循环,执行下一条语句。while语句的特点是先判断,后执行。其流程图如图5-2所示。使用while语句需要注意以下几点。5.1 while语句(1)while语句的特点是先计算表达式的值,然后根据表达式的值决定是否执行循环体中的语句。因此,如果表达式的值一
6、开始就为假,那么循环体一次也不执行。(2)当循环体由多个语句组成时,必须用括起来,形成复合语句。(3)在循环体中应有使循环趋于结束的语句,以避免“死循环”的发生。5.1 while语句【例5-1】用while语句计算s=1+2+3+100。程序代码如下。#include main()int i,s;i=1;s=0;/*设循环初值*/while(i=100)/*循环终止判断*/s=s+i;/*循环体设计*/i=i+1;5.1 while语句printf(1+2+3+100=%dn,s);程序运行结果如下。1+2+3+100=50502.循环结构程序设计的关键(1)循环体的设计。遇到数列求和、求积
7、的一类问题,一般可以考虑使用循环解决。累加:s=s+item;累乘:p=p*item;计数:c=c+1;(2)注意循环初值的设置。一般对于累加器常常设置为0,累乘器常常设置为1。注意循环控制变量初始、步长、终值设置。5.1 while语句s=0;i=1;while(i=100)s=s+i;i+;s=0;i=0;while(i100)i+;s=s+i;(3)设计特殊输入数据(远离正常数据)作为终止循环条件。循环体中要做重复的工作,同时应有使循环趋于结束的语句。【例5-2】求若干学生的某门课程的平均成绩,设置输入-1时终止循环。程序代码如下。#include main()int score,n=0
8、;float sum=0,ave;printf(ninput scores:);5.1 while语句scanf(%d,&score);while(score!=-1)/*循环终止判断*/sum+=score;n+;scanf(%d,&score);ave=sum/n;printf(average score=%.1fn,ave);程序运行结果如下。input scores:88 76 94 87 91 68-15.1 while语句average score=84.0(4)设置某一项(趋于0)小于某一很小的数值或者满足什么条件时终止循环。【例5-3】编写程序,利用公式4=1-13+15-17
9、+,求的近似值,直到最后一项的绝对值小于10-6为止。程序代码如下。#include#include main()int i=1,sign=1;float s=0,item=1,pi;while(fabs(item)=1e-6)5.1 while语句s=s+item;sign=-sign;i+=2;item=(float)sign/i;printf(pi=%fn,4*s);程序运行结果如下。pi=3.1415945.2 dowhile语句dowhile语句可以实现“直到型”循环,先无条件地执行循环体语句,再进行判断。直到条件为假,退出循环。dowhile语句的语法格式如下。do循环体while
10、(表达式);执行循环体语句,当逻辑表达式为真(非0)时,重新执行循环体语句;当逻辑表达式为假(0)时,终止循环,执行下一条语句。特点是先执行,后判断。其程序流程图如图5-3所示。图5-3dowhile语句流程图有关dowhile语句的说明如下。(1)dowhile循环总是先执行一次循环体,然后求表达式的值,因此,无论5.2 dowhile语句表达式是否为真,循环体至少执行一次。(2)dowhile循环与while循环十分相似,它们的主要区别是:while循环先判断循环条件再执行循环体,循环体可能一次也不执行。dowhile循环先执行循环体,再判断循环条件,循环体至少执行一次。(3)循环体中应该
11、有使循环趋于终止的语句。5.2 dowhile语句【例5-4】编写程序,求满足1+2+3+n1 000时n的最大值及累加和。程序代码如下。#include main()int n=0,s=0;/*设循环初值*/don=n+1;s=s+n;while(s1000);printf(n=%d,sum=%dn,n-1,s-n);程序运行结果如下。n=44,sum=9905.3 for语句for语句是实现循环最常用的语句。它不仅可以用于循环次数确定的情况,也可以用于循环次数不确定而只给出循环结束条件的情况。for语句的语法格式如下。for(表达式1;表达式2;表达式3)循环体for是关键字,其后有3个表
12、达式,各个表达式用“;”分隔。3个表达式可以是任意的表达式,通常主要用于for循环控制。for循环执行过程如下。(1)计算表达式1。(2)计算表达式2,若其值为非0(循环条件成立),则转步骤(3)执行循环体;若其值为0(循环条件不成立),则转步骤(5)结束循环。(3)执行循环体。5.3 for语句(4)计算表达式3,然后转步骤(2)判断循环条件是否成立。(5)结束循环,执行for循环之后的语句。for循环的流程图如图5-4所示。关于for语句的几点说明如下。(1)表达式1或者循环初值可以放在语句之前,但分号不能省略。例如:for(i=1;i=100;i+)s=s+i;循环初值放在for语句之前
13、实现如下。i=1;for(;i=100;i=i+1)s=s+i;5.3 for语句(2)如果省略表达式2,即不在表达式2的位置判断循环终止条件,循环无终止地进行,也就是认为表达式2始终为“真”,则应该在其他位置(如循环体)安排检测及退出循环的机制。(3)可以省略表达式3,但应该设法保证循环终止。例如:for(i=1;i=100;)s=s+i;i=i+1;(4)可以省略表达式1和表达式3,但应该设法保证循环终止。例如:i=1;for(;i=100;)s=s+i;i=i+1;(5)可以省略表达式1、2和3,但两个分号不能省,循环体无终止。例如:for(;)printf(“*”);循环将无限制地执行
14、而形成无限循环(死循环)。5.3 for语句(6)表达式1和表达式3可以是逗号表达式。例如:for(s=0,i=1;i=100;s+=i,i+)从上面的说明可以看出,C语言的for语句功能强大,使用灵活,可以把循环体和一些与循环控制无关的操作也都作为表达式出现,程序短小简洁。但是,如果过分使用这个特点会使for语句显得杂乱,降低程序可读性。建议不要把与循环控制无关的内容放在for语句的3个表达式中,养成程序设计的良好风格。【例5-5】从键盘输入5位学生的成绩,编程计算并输出平均分、最高分和最低分。程序代码如下。#include main()int i;5.3 for语句float score,
15、max=-1,min=101,sum=0;for(i=0;imax)max=score;if(scoremin)min=score;printf(average=%.1fmax=%.1fmin=%.1f n,sum/5,max,min);程序运行结果如下。5.3 for语句请输入第1位同学的成绩:88请输入第2位同学的成绩:90请输入第3位同学的成绩:80请输入第4位同学的成绩:78请输入第5位同学的成绩:66average=80.4max=90.0min=66.0【例5 6】计算n!。程序代码如下。#include main()float fact;5.3 for语句int i,n;fact
16、=1.0;scanf(%d,&n);for(i=1;i=n;i+)fact*=i;printf(%d!=%.0fn,n,fact);程序运行结果如下。6!=720程序中fact定义为float,若定义为int或long,则输入的n值大一点儿时,就得不到理想的结果。另外,累乘变量初始化为1(fact=1.0)。5.4 循 环 嵌 套一个循环内又包含另一个循环,称为循环的嵌套。内循环中还可以嵌套循环。按照循环的嵌套次数,可有二重循环、三重循环等。一般将处于内部的循环称为内循环,处于外部的循环称为外循环。3种循环语句for语句、while语句和dowhile语句可以相互嵌套。(1)一个循环体必须完整
17、地嵌套在另一个循环体内,不能出现交叉现象。(2)多层循环的执行顺序是:最内层先执行,由内向外逐步展开。(3)3种循环语句构成的循环可以相互嵌套。(4)并列循环允许使用相同的循环变量,但嵌套循环不允许。(5)嵌套的循环要采用缩进格式书写,使程序层次分明,便于阅读和调试。【例5-7】打印九九乘法表。1*1=1 1*2=1 1*3=3 1*9=92*1=2 2*2=4 2*3=6 2*9=185.4 循 环 嵌 套9*1=9 9*2=189*3=279*9=81程序代码如下。#include main()int i,j;for(i=1;i=9;i+)for(j=1;j=9;j+)printf(%3d
18、*%d=%2d,i,j,i*j);printf(n);5.4 循 环 嵌 套程序运行结果如图5-5所示。5.4 循 环 嵌 套【例5-8】打印以下图案。*程序代码如下。#include main()int i,j;for(i=1;i=5;i+)/*控制行数*/5.4 循 环 嵌 套for(j=1;j=20-i;j+)/*控制每行开始空格个数*/printf();for(j=1;j=2*i-1;j+)/*控制每行*的个数*/printf(*);printf(n);/*每输出一行后换行*/5.5 break语句和continue语句在循环程序执行过程中,有时需要终止循环。C语言中提供了两个循环中断
19、控制语句,即break语句和continue语句。break语句跳出本层循环不再执行,continue语句是结束本次循环,下次循环可以继续执行。多层循环可以设置一个标志变量,逐层跳出。5.5.1 break语句break语句用于跳出switch语句或跳出本层循环体,其语法格式如下。break;(1)break语句只用于循环语句或switch语句中。在循环语句中,break语句常常和if语句一起使用,表示当条件满足时,立即终止循环。注意break不是跳出if语句,而是跳出循环结构。(2)循环语句可以嵌套使用,break语句只能跳出(终止)其所在的循环,而不能跳出多层循环。要实现跳出多层循环可以设
20、置一个标志变量,控制逐层跳出。【例5-9】编写程序,判断从键盘输入的自然数是否为素数(质数)。需要说明如下几点。(1)所谓素数,就是只能被1和它自身整除的大于1的整数。5.5.1 break语句(2)要判断n是否为素数,就要用2、3、n-1分别除n,如果都不能被整除,则n就是素数,正常退出循环;如果其中某个数被n整除,则n不是素数,需要退出循环。实际上要判断n是不是素数,只要用2、3、n 除n即可。程序代码如下。#include#include main()int i,n,k;printf(Input a number(1):);5.5.1 break语句scanf(%d,&n);k=sqrt
21、(n);for(i=2;ik)printf(%d is a prime number.n,n);else printf(%d is not a prime number.n,n);程序运行结果如下。Input a number(1):175.5.1 break语句17 is a prime number.程序说明如下。(1)程序中的k值可以是n-1、n/2或n,只有当k为n时判断的次数最少,程序最优化。(2)经过分析可知,在for循环中只要某次“n%i=0”,则判定n不是素数从而跳出循环。但在输出这个数是不是素数时还要比较i与k的值,如果判断条件写错了就会前功尽弃。因此采用一个标识变量会使程序
22、更明晰,这也是程序设计过程中常用的技巧。采用标识变量后的程序代码如下。#include#include 5.5.1 break语句main()int i,n,k,flag=1;printf(Input a number(1):);scanf(%d,&n);k=sqrt(n);for(i=2;i=k;i+)if(n%i=0)flag=0;break;5.5.1 break语句if(flag)printf(%d is a prime number.n,n);else printf(%d is not a prime number.n,n);5.5.2 continue语句continue语句的语法
23、格式如下。continue;continue语句用于结束本次循环,即跳出本层循环中余下的尚未执行的语句,接着执行下一次循环条件的判定。执行continue语句并没有使整个循环终止,注意其与break的不同。在while和dowhile循环中,continue语句使流程直接跳到循环控制条件的测试部分,然后决定循环是否继续执行。在for循环中,遇到continue后,跳过循环体中余下的语句,而计算for语句中表达式3的值,然后测试表达式2的条件,最后根据表达式2的值来决定for循环是否执行。5.5.2 continue语句【例5-10】把1030不能被3整除的数输出。程序代码如下。#include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模块5循环结构程序设计电子课件 C语言程序设计案例教程 模块 循环 结构 程序设计 电子 课件 语言程序设计 案例 教程
限制150内