大学C语言程序设计二版(电子工业)5_第1页
大学C语言程序设计二版(电子工业)5_第2页
大学C语言程序设计二版(电子工业)5_第3页
大学C语言程序设计二版(电子工业)5_第4页
大学C语言程序设计二版(电子工业)5_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、大学C/C+语言程序设计 第4章 选择结构程序设计第5章 循环结构程序设计5.1 while语句5.2 do-while 语句5.3 for语句5.4 循环结构的嵌套5.5 break语句和continue语句在循环 结构中的应用1问题的提出:问题1. 从键盘输入10个学生的成绩,求总成绩。问题2. 显示110的平方。问题3. 求100300之间所有的素数。问题1的一种解决办法:定义一个变量a,每次输入一个学生成绩保存到变量a中,累加到s后再输入下一个学生成绩.;语句如下: step1: scanf(“%f”,&a); s=s+a; step2: scanf(“%f”,&a); s=s+a;

2、. 这样重复10次,然后输出s的值。 是否可用一种语句,使这两条语句能自动的重复执行10次,以简化书写的麻烦呢? 这就是循环语句的任务。大学C/C+语言程序设计 第5章 循环结构程序设计2循环结构特点: 在给定条件(循环条件)成立时,反复执行某程序段(又称循环体),直到条件不成立为止。C语言可实现循环的语句:while 语句do while 语句for 语句大学C/C+语言程序设计 第5章 循环结构程序设计35.1 while循环结构一般形式:while(表达式) 循环体语句;执行流程:大学C/C+语言程序设计 第5章 循环结构程序设计4特点:先判断表达式,后执行循环体。说明:循环体有可能一次

3、也不执行循环体可为任意类型语句下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,return无限循环: while(1) 循环体;大学C/C+语言程序设计 第5章 循环结构程序设计5例: 显示110的平方#include main() int i=1; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; kj30运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100循环变量初值循环条件改变循环变量值大学C/C+语言程序设计 第5章 循环结构程序设计6解题步骤描述

4、如下:(1)输入一个成绩,存入score;(2)判断score的值,当score0时,做下列工作: (2-1)累计总分; (2-2)人数加一; (2-3)输入下一个成绩,存入score;(3)重复第(2)步,直到score0为止;(4)用总分除以人数,求出平均分。 例:输入某班学生成绩,求全班平均成绩。 #includemain() float score, sum=0, ave=0; int count=0; scanf(%f, &score);/输入 while(score=0) sum=sum+score;/累加 count+; /人数 scanf(%f, &score); if(cou

5、nt!=0) ave=sum/count; printf(ave=%.2fn, ave); 循环变量初值循环条件改变循环变量值循环体大学C/C+语言程序设计 第5章 循环结构程序设计应注意:1、计数器和累加器的初值;2、一次循环后,循环控制变量的变化情况。3、跳出循环时循环控制变量的值应为多少。7do 循环体语句; while(表达式);执行流程:5.2 dowhile循环结构一般形式:大学C/C+语言程序设计 第5章 循环结构程序设计8特点:先执行循环体,后判断表达式说明:至少执行一次循环体dowhile可转化成while结构大学C/C+语言程序设计 第5章 循环结构程序设计9例: 用dow

6、hile循环求例1? #include main() int i=1;do printf(%d*%d=%dn,i,i,i*i); i+; while(i=0) sum=sum+score; scanf(%f, &score); scanf(%f, &score); do sum=sum+score; scanf(%f, &score); while(score=0);比较两段程序在以下输入时输出结果的不同?1、score输入602、score输入-60大学C/C+语言程序设计 第5章 循环结构程序设计12一般形式:for(循环变量赋初值;终止条件;循环变量增(减)值)循环体语句;for (表达

7、式1;表达式2;表达式3)循环体语句;5.3 for循环结构大学C/C+语言程序设计 第5章 循环结构程序设计13执行流程:大学C/C+语言程序设计 第5章 循环结构程序设计0014例:输入n值,求n!。#includemain() int i, n; long fac; scanf(%d, &n); fac=1; for(i=1; i=n; i+) fac=fac*i; printf(n%d!=%ldn, n, fac);大学C/C+语言程序设计 第5章 循环结构程序设计15说明:无限循环: for(;)for语句可以转换成while结构scanf(“%d”, &n); fac=1; i=1

8、; while( i=n) fac=fac*i; i+; printf(n%d!=%ldn, n, fac);大学C/C+语言程序设计 第5章 循环结构程序设计16注意事项:1.表达式1,2,3的省略。在具体应用中,表达式1,2,3都可以省略,但 ; 不能省;2.逗号表达式在for语句中应用。for语句中的表达式1和表达式3都可以使用逗号表达式,特别是在两个循环变量控制循环的情况下 。17例:利用putchar函数编程输出以下结果: abcdefghijPro1:#include main( ) int i; for(i=0;i10;i+) putchar(a+i); Pro2 :#inclu

9、de main( ) int i=0; for(;i10;i+) putchar(a+i); Pro3:#include main( ) int i=0; for(;i10;) putchar(a+(i+); 18#include main() int i,j,sum=0; for(i=1,j=100;ij; i+,j-) sum=sum+i+j; printf(%dn,sum);例 :双循环变量求 #include main() int i,sum=0; for(i=1;i=100;i+) sum+=i; printf(%d,sum);19循环典型实 例 解 析例: 编写程序:输出所有的“水

10、仙花数”。分析:水仙花数是指3位数的各位数字的立方和等于这个数本身。 如: 153=13+53+33【解析】穷举法:是将100到999所有的3位正整数一一考察,即将每一个3位正整数的个位数、十位数、百位数一一求出,算出三者的立方和,一旦与原数相等就输出。总共考察了900个3位正整数。20#include main() int unit, ten, hundred, n;for(n=100; n1000; n+)hundred=n/100;ten=n/10-hundred*10;unit=n%10;if(n=unit*unit*unit+ten*ten*ten+hundred*hundred*h

11、undred) printf(%6d, n); 21例:计算斐波那契分数序列前n项之和(n为常数,斐波那契分数序列为2/1, 3/2, 5/3, 8/5, 13/8, 21/13)。分析:一般处理数列问题,首要的是找出数列的规律。斐波那契分数序列的规律是:后一个分数的分子为前一个分数的分子和分母之和,其分母为前一个分数的分子。类似题型:求Fibonacci 数列:1,1,2,3,5,8, 的前40个数 帕多瓦数列:1,1,1,2,2,3,4,5,7,9,12,16求出这个数列的前20项之和。22#include main( ) int i=1, n; float t, m, x=1, y=2,

12、 sum=0; printf(input n: ); scanf(%d, &n); while(i=n) m=y/x; /序列中一项; sum=sum+m; /累加; t=y; y=y+x; /求下一项的分子; x=t; /求下一项的分母; i+; printf(The result is: %10.4fn, sum);23计算斐波那契分数序列前n项之和(n为常数,斐波那契分数序列为2/1, 3/2, 5/3, 8/5, 13/8, 21/13)。5.4 循环结构的嵌套 在循环体语句中又包含另一个完整的循环结构的形式,称为循环结构的嵌套。 嵌套在循环体内的循环体称为内循环,外面的循环体称为外循

13、环。如果内循环中又有嵌套的循环语句,则构成多重循环。while、dowhile、for循环结构既可以自身嵌套又可以相互嵌套。24循环的嵌套三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程(1) while() while() . (2) do do while( ); . while( );(3) while() do while( ); . (4) for( ; ;) do while(); 嵌套循环的跳转禁止:从外层跳入内层 跳入同层的另一循环25例:打印九九表(矩形)1 2 3 4 5 6 7 8 92 4 6 8 10 12 14 16 18

14、.9 18 27 36 45 54 63 72 81#includemain() int i, j; for(i=1; i=9; i+) /控制行数 for(j=1; j=9; j+) /控制每一行中* 的个数 printf (%4d,i*j); printf(n); kj3226例:打印九九表(下三角)1 2 4 .9 18 27 36 45 54 63 72 81#includemain() int i, j; for(i=1; i=9; i+) /控制行数 for(j=1; j=i; j+) /控制每一行中* 的个数 printf (%4d,i*j); printf(n); 27例:打印

15、九九表(上三角)1 2 3 4 5 6 7 8 9 4 6 8 10 12 14 16 18 . 81#includemain() int i, j; for(i=1; i=9; i+) /控制行数 for(j=1; j=9; j+) /控制每一行中* 的个数 if(ji) printf ( ); else printf (%4d,i*j); printf(n); 28例:编写程序输出如下图形。* * * * * * * * * * * * * * *#includemain() int i, j; for(i=1; i=5; i+) /控制行数 for(j=1; j=i; j+) /控制每一

16、行中* 的个数 printf(*); printf(n); 29例: 编写程序求解“百钱买百鸡”问题。算经一书中提出“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?分析:设变量a, b分别代表鸡翁、鸡母的个数,则鸡雏的个数为100 - a - b。通过分析可知,a, b可能取值的范围为:a在019,b在033。则鸡翁、鸡母、鸡雏可能的组合有2034 = 680种。对每一种组合都用是否符合百钱的条件进行测试,若符合,则该组合就是问题的一个解,因此解可能不唯一。30#includemain() int a, b, c; for(a=0; a=20; a+)

17、 for(b=0; b=33; b+) c=100-a-b; if(5.0*a+3.0*b+c/3.0=100) printf(a=%d, b=%d, c=%dn, a, b, c); 31 5.5 break和continue语句的应用break语句功能:在循环语句和switch语句中,常和if语句一起使用,当满足条件时终止程序并跳出循环体或开关体。说明:break只能终止并跳出最近一层的结构。break不能用于循环语句和switch语句之外的任何其它语句之中。32break应用举例:编写程序从键盘上连续输入数据,如果是正数,则累加;如果是负数,则程序结束。#includemain() in

18、t x; long sum=0; for(; ; ) scanf(%d, &x); if(x=0) sum+=x; else break; printf(sum=%ldn, sum);33break应用举例:判断m是否为素数。分析:素数即质数(只能被1和本身整除的数)。判断一个数是否为素数可以应用数学上已被证明的定理:“如果数m不能被2到sqrt(m)之间的任何一个数整除,则m为素数。”#include #include main() int m,i,k; scanf(%d,&m); k=(int)sqrt(m); for(i=2;i=k;i+) if (m%i=0) break; if(i=

19、k+1) printf(%d 是素数n,m); else printf(“%d 不是素数n,m); kj3134#include #include main() int m,i,k,flag=1; scanf(%d,&m); k=(int)sqrt(m); for(i=2;i=k& flag;i+) if (m%i=0) flag=0; if(flag) printf(%d 是素数n,m); else printf(“%d 不是素数n,m); kj31acontinue语句功能:跳过循环体中尚未执行的语句,结束本次循环,进行下一次循环体。仅用于循环语句中35continue应用举例:阅读程序,

20、推断出程序解决的问题?#includemain() int n; for(n=100; n=200; n+) if(n%7!=0) continue; printf(%5d, n); printf(n);程序是输出100200之间能被7整除的数。36注意:break语句和continue语句的区别是,一旦条件满足,break语句则结束整个循环,不再进行循环条件的判断;而continue语句只是结束本次循环,接着进行下一次循环条件的判断。二者可以通过下面两段程序的输出进行比较。 for(n=1; n=10; n+) for(n=1; n=10; n+) if(n= =5) if(n= =5) break; continue; printf(“%3d, n); printf(“%3d, n); 输出结果: 输出结果: 1 2 3 4 1 2 3 4 6 7 8 9 10 37例:求输入的十个整数中正数的个数及其平均值。#include main() int i,num=0,a; float sum=0; for(i=0;i10;i+) scanf(%d, &a);if(a=0) continue;num+;sum+=a; printf(%d ,%fn,num,sum); printf(Mean value:%fn,sum/num);38例 : 求30

温馨提示

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

评论

0/150

提交评论