循环结构程序设计(1).ppt_第1页
循环结构程序设计(1).ppt_第2页
循环结构程序设计(1).ppt_第3页
循环结构程序设计(1).ppt_第4页
循环结构程序设计(1).ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计,第5章 循环结构程序设计,本章内容要点, while语句及其应用 do-while语句及其应用 for语句及其应用 break和continue语句的应用。,本章任务,在实际编程中,常常会利用循环结构重复执行某些操作。本章要完成的任务是处理一批学生成绩,要求计算出每个学生总分、平均分、最高总分、最低总分,并结合选择结构程序设计,按平均分输出及格人数和不及格人数。,任务分解: 单一科目成绩的输入、输出和处理。 多种科目成绩的输入、输出和处理。,5.1 while语句,While循环语句的一般形式 while (表达式) 语句;(循环体),语句运行流程图如下:,5.1 while语句,例5.1 利用while语句“求123+99+100 ”的和。 main( ) int i, sum=0; i=1; while(i=100) sum=sum+i; i+; printf(“n1+2+3+100=%d“,sum); ,运行结果: 1+2+3+100=5050,5.1 while语句,例5.2 输入10个学生的C语言课程考试成绩,求总成绩和平均成绩。 main() int i,score; int sum; float average; /* average存放平均成绩 */ printf(“输入%d个学生的C语言课程考试成绩:n“,10); sum=0; i=0; while(i10) scanf(“%d“, ,5.1 while语句,average=(float)sum/10; /* 求平均成绩 */ printf(“总成绩为:%dn“,sum); printf(“平均成绩为:%.2f“,average); ,运行结果: 输入10个学生的考试成绩: 82 91 88 70 85 93 67 73 80 77 总成绩为:806 平均成绩为:80.60,5.2 do-while语句,do-While循环语句的一般形式 do 语句(循环体) while (表达式) ;,语句运行流程图如下:,5.2 do-while语句,例5.3 利用do-while语句“求123+99+100 ”的和 main( ) int i, sum=0; i=1; do sum=sum+i; i+; while (i=100); printf(“n1+2+3+100=%d“,sum); ,运行结果: 1+2+3+100=5050,5.3 for语句,for语句的一般形式 for (表达式1; 表达式2; 表达式3) 语句(循环体),for语句最简单的应用形式也是最容易理解的形式如下: for(循环变量赋初值;循环条件;循环变量增量) 语句(循环体),说明: “表达式1”一般是是一个赋值表达式, 它用来给循环控制变量赋初值; “表达式2”一般是一个关系表达式或逻辑表达式,它决定什么时候退出循环;“表达式3”一般是个算术表达式,定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用“;”间隔。,5.3 for语句,如: for(i=1; i100时,结束循环。,5.3 for语句,语句运行流程图如下:,5.3 for语句,例5.4 利用for语句“求123+99+100 ”的和。 main( ) int i,sum; for(i=0,sum=0; i=100; i+) sum=sum+i; printf(“n1+2+3+100=%d“,sum); ,运行结果: 1+2+3+100=5050,5.3 for语句,例5.5 输入10个学生的C语言考试成绩,输出其中的最高分和最低分,以及本门课程的总成绩和平均成绩。 #define N 10 main() int i,score; int max,min,sum; /* max和min分别存放最高分和最低分,sum存放总成绩 */ float average; /* average存放平均成绩 */ printf(“输入%d个学生的考试成绩:n“,N); scanf(“%d“,解决任务一:单一科目成绩的输入、输出和处理。,5.3 for语句,for(i=1;imax) max=score; else if (scoremin) min=score; average=(float)sum/N; /* 求平均成绩 */ printf(“最高分为:%dn“,max); printf(“最低分为:%dn“,min); printf(“总成绩为:%dn“,sum); printf(“平均成绩为:%.2f“,average); ,运行结果: 输入10个学生的考试成绩: 82 91 88 70 85 93 67 73 80 77 最高分为:93 最低分为:67 总成绩为:806 平均成绩为:80.60,5.3 for语句,例5.6 检测给定整数是否素数。 main( ) int i, k, flag; scanf(“%d“, ,运行结果: 17 17 is a prime,例 求Fibonacci数列前40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即: F(1)=1 (n=1) F(2)=1 (n=2) F(n)=F(n-1)+F(n-2) (n3) 算法如图所示:,求Fibonacci数列前40个数。 #include void main() long int f1,f2; int i; f1=1;f2=1; for(i=1; i=20; i+) printf(%12ld %12ld ,f1,f2); if(i%2=0) printf(n); f1=f1+f2; f2=f2+f1; ,运行结果: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 57022887 9227465 14930352 24157817 39088169 63245986 102334155,5.4 goto语句,如: goto loop;,goto语句是一种无条件转移语句,一般形式为: goto 语句标号;,5.4 goto语句,例5.7 利用goto语句“求123+99+100 ”的和。 main() int i,s=0; i=1; label : if (i=100) s=s+i; i+; goto label; printf(“s=%dn“,s ); ,运行结果: 1+2+3+100=5050,5.4 goto语句,例5.8 利用goto语句跳出循环。 main( ) int i, sum=0; i=1; while(i50) goto label; label:printf(“n1+2+3+50=%d“,sum); ,运行结果: 1+2+3+50=1275,5.5 几种循环控制语句的比较,(1)while语句和for语句是属于先判断循环条件的循环语句,故循环体有可能一次也不执行,属于当型循环结构。 (2)do-while语句是执行完循环体后,再判断循环条件的循环语句,循环体至少执行一次,属于直到型循环结构。 (3)循环体至少执行1次时,四种循环都可用来处理同一问题,可以互相代替。所有循环语句都是在循环条件为真(非0)时才能执行循环体。,5.5 几种循环控制语句的比较,(4)如果循环次数可以在进入循环语句之前确定,使用for语句较好;在循环次数难以确定时使用while和do-while语句较好。 (5)用while和do-while循环时,循环变量初始化的操作应在while和do-while之前完成;而for语句可以在表达式1中实现变量的初始化。 (6)while和do-while循环,只在while后面指定循环条件,在循环体中包含应反复执行的操作语句,包括使循环趋于结束的语句。for循环可以在表达式3中包含使循环趋于结束的操作。,5.6 break语句和continue语句,一、break语句,break语句的一般形式为: break;,说明: 其执行过程是:在循环语句中如果执行到break语句,则终止break所在循环的执行,循环体中break语句之后的语句也不再执行。通常break语句总是与if语句联用,即满足条件时便跳出循环。,5.6 break语句和continue语句,例5.10 break语句的应用。 main() int i,s=0; for (i=1;i5) break; s=s+i; printf(“s=%dn“,s); ,运行结果: s=15,5.6 break语句和continue语句,二、continue 语句,contiune语句的一般形式为: continue;,说明: 其执行过程是:如果在循环体语句的执行过程中遇到并执行了continue语句,那么系统将跳过循环体中剩余的语句而强制执行下一次循环。与break语句的用法相似,continue语句常与if条件语句一起使用。,5.6 break语句和continue语句,例5.11 把100200之间不能被3和2整除的数输出。 main( ) int k=0,n=100; while(n=200) n+; if(n%3=0 | n%2=0) continue; printf(“%5d“,n); k+; if(k%5=0) printf(“n“); ,运行结果: 101 103 107 109 113 115 119 121 125 127 131 133 137 139 143 145 149 151 155 157 161 163 167 169 173 175 179 181 185 187 191 193 197 199,5.6 break语句和continue语句,说明: break语句与continue语句区别:continue是结束本次循环,进行下一次循环,而不是结束整个循环过程。对单层循环,break语句是结束整个循环,转到循环体外;对于多层循环,则是结束最内层循环。 break语句和continue语句只对do-while语句、while语句和for语句构成的循环有控制作用,对goto语句构成的循环无效。,5.7 循环嵌套,一、 循环嵌套的几种形式 一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以再嵌套循环,这就是多层循环。 do-while循环、while循环和for循环等可以互相嵌套,goto语句构成的循环很少使用 循环嵌套的常见形式见书。,5.7 循环嵌套,二、循环嵌套应用举例 例5.12 打印九九乘法表。 main() int i,j; for( i=1;i=9;i+) /*共输出九行*/ for( j=1;j=i;j+) /*每行输出i列*/ printf(“%d*%d=%-3d“, j, i, j*i ); printf(“n“); /*每行的列数输出完后换行*/ ,运行结果: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81,5.7 循环嵌套,例5.13 分别输入4个学生的高等数学成绩、大学英语成绩和C语言成绩,求每个学生的总成绩和平均成绩。 源程序如下: #define N 4 main() int score,sum; int i,j; printf(“在对应的序号后输入每个学生每门课程的成绩,以回车结束n“);,解决任务二:多种科目成绩的输入、输出和处理。,5.7 循环嵌套,for (i=0;iN;i+) printf(“%10s%10s%10s%10sn“,“学生序号“,“高等数学“,“大学英语“,“C语言“); sum=0; printf(“%8d“,i+1); for (j=0;j3;j+) scanf(“%d“, ,运行结果: 在对应的序号后输入每个学生每门课程的成绩,以回车结束 学生序号 高等数学 大学英语 C语言 1 80 65 84 学生序号:1 总成绩:229 平均成绩:76.33 学生序号 高等数学 大学英语 C语言 2 78 67 74 学生序号:2 总成绩:219 平均成绩:73.00 学生序号 高等数学 大学英语 C语言 3 69 79 65 学生序号:3 总成绩:213 平均成绩:71.00 学生序号 高等数学 大学英语 C语言 4 77 62 91 学生序号:4 总成绩:230 平均成绩:76.67,例5.14 输入一批学生的高等数学成绩、大学英语成绩和C语言成绩,要求计算出每个学生总分、平均分、最高总分、最低总分,并根据平均分输出及格人数和不及格人数。 源程序: main() int n,score,sum,max_sum,min_sum; int n1=0,n2=0; /* n1存放不及格人数,n2存放及格人数 */ int i,j; float average; printf(“输入学生人数:“); scanf(“%d“, /* 输出序号 */,解决本章任务,解决本章任务,for (j=1;jmax_sum) max_sum=sum; if (summin_sum) min_su

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论