为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

C程序第5章

2012-09-17 29页 doc 68KB 26阅读

用户头像

is_611395

暂无简介

举报
C程序第5章第5章 循环结构 1、什么样的题型适合用循环结构来实现?(同时满足以下两条) ⑴数之间有规律。 ⑵重复进行某项操作。 例如:求1+2+…+100的和。数之间的规律是差值为1的等差数列;而且是重复进行加法操作。满足循环结构的两个条件,适合用循环结构来实现。 2、构成循环结构的循环语句有三种:while、do-while和for。 3、while语句 ⑴while语句的一般形式 while(表达式) 循环体 ⑵while语句的执行过程如下: 先判断表达式的真假,若表达式为真,则执行循环体一遍,然后再次判断表达式...
C程序第5章
第5章 循环结构 1、什么样的题型适合用循环结构来实现?(同时满足以下两条) ⑴数之间有规律。 ⑵重复进行某项操作。 例如:求1+2+…+100的和。数之间的规律是差值为1的等差数列;而且是重复进行加法操作。满足循环结构的两个条件,适合用循环结构来实现。 2、构成循环结构的循环语句有三种:while、do-while和for。 3、while语句 ⑴while语句的一般形式 while(表达式) 循环体 ⑵while语句的执行过程如下: 先判断表达式的真假,若表达式为真,则执行循环体一遍,然后再次判断表达式的真假,若为真,则继续执行循环体,若为假,则彻底跳出循环,转去执行循环体下面的语句。while语句就是当型循环,即循环体有可能一次都执行不到。 ⑶简单举例: k=0; while(k<10) {printf(“*”); k++; } 本程序的功能是:连续输出10个*号。 ⑷详细举例: 求1+2+…+100的和。(用while实现) #include main() { int i=1,sum=0; while(i<=100) {sum+=i; i++; } printf(“1+2+…+100=%d\n”,sum); } ⑸细节说明 1 while是关键字,系统专用,用户决不能用。 2 while后的圆括号不能为空,其中的表达式可以是任意合法的表达式。 ③循环体只能是“一条”语句(可以是复合语句)。 举例: <1> k=0; while(k<10) {printf(“*”); k++; } 本程序将连续输出10个*号。 <2> k=0; while(0) {printf(“*”); k++; } 本程序将不会输出任何*号。 <3> k=0; while(1) {printf(“*”); k++; } 本程序将会输出无穷个*号。 ⑹如何跳出循环体,避免死循环的出现?(两种方法) 1 走正门:表达式为为假(即为0的时候) 举例:k=0; while(k<10) {printf(“*”); k++; } 2 走后门:在循环体中加入break。 举例:k=0; while(1) {printf(“*”); k++; if(k>=10) break; } 本程序将连续输出10个*号。 注意比较: k=0; while(1) {printf(“*”); k++; if(k>10) break; } 本程序将连续输出11个*号。注意有等号和没等号的区别。 ⑺if语句与while语句的相同点 1 执行的开始都是判断表达式的真假,以此判断是否执行管辖范围内的语句。 2 其后的语句都有可能一次都执行不到。 举例:<2>if(2>3) printf(“*”); <2>while(0) printf(“*”); 3 管辖范围都是其后紧跟的“一条”语句(可以是复合语句)。 ⑻if语句与while语句的不同点 1 if后的语句最多执行一次。 如:if(a<2) printf(“*”); printf(“&”); 2 while后的语句可反复执行多次。 如:k=0; while(k<10) {printf(“*”); k++; } 例5.1 #include main() { int i,sum; i=0; sum=0; while(sum<1000) {sum+=i*i; i++; } printf(“n=%d sum=%d\n”,i-1,sum); } 注意: 1 变量sum的角色是累加和,所以在用之前要清0。否则sum中产生的随机数会捣乱,从而影响累加的结果。 2 如果sum的初值为10000,则表达式sum<10000一开始就为0,所以循环体一次都执行不到。 3 i++语句的重要性:正是因为i不断地增1,才使得sum的值不断地增大,从而使表达式sum<10000有机会为假,进而避免死循环的出现。 4 语句的先后位置必须符合逻辑,否则影响结果。 i=1; while(sum<1000) { i++; sum+=i*i; } 位置颠倒后,少加了第一项。 例5.2 #include #include main() {int s; float n,t,pi; t=1.0; pi=0; n=1.0; s=1; while(fabs(t)>=1e-6) { pi=pi+t; n+=2.0; s=-s; t=s/n; } pi=pi*4; printf(“pi=%f\n”,pi); } 1 变量s完成正负号的交替。变量t存放每项的值。变量n存放每项分母。pi存放累加和。 ②#include 是为函数fabs() 而写的。函数fabs()的功能是求绝对值。如:fabs(0)就是求0的绝对值。C语言中的数学函数都在math.h文件中定义着,只要在程序中用到像fabs()这样的数学函数,都要把#include写上。 4、do-while语句 ⑴do-while语句的一般形式 do 循环体 While(表达式); ⑵do-while语句的执行过程如下: 先执行循环体,然后判断表达式的真假,若表达式为真,则执行循环体一遍,然后再次判断表达式的真假,若为真,则继续执行循环体,若为假,则彻底跳出循环,转去执行循环体下面的语句。do-while语句就是直到型循环,即循环体至少执行一次。 ⑶简单举例: i=0; do {i++; s+=i; }while(i<10); 本程序的功能是求:1+2+…+10的和。 ⑷详细举例: 求1+2+…+100的和。(用do-while实现) #include main() { int i=1,sum=0; do {sum+=i; i++; } while(i<=100); printf(“1+2+…+100=%d\n”,sum); } ⑸细节说明 1 do和while都是关键字,而且do不能单独使用,必须和while配对使用才有效。但是while可以单独使用,构成while语句。 2 在do-while语句中,while(表达式)后的分号必不可少。 3 在do-while语句中,while圆括号中的表达式可以是任意合法的表达式。 4 循环体只能是“一条”语句(可以是复合语句)。同while语句。 例5.4 Fibonacci数列如下: 0 1 1 2 3 5 8 …… ↑ ↑ ↑ f1 f2 f ↑ f1 f2 f do {f=f1+f2; f1=f2; f2=f; }while(f2<=1000); 5、for语句 ⑴for语句的一般形式 for(表达式1;表达式2;表达式3) 循环体 ⑵for语句的执行过程如下: 先执行表达式1,再判断表达式2的真假,若表达式2为真,则执行循环体,然后执行表达式3,再次判断表达式2的真假,若为真,继续执行循环体,若为假,则跳出循环体,转去执行循环体下面的语句。 ⑶简单举例: for(k=0;k<10;k++) printf(“*”); 本程序将连续输出10个*号。 ⑷详细举例: 求1+2+…+100的和。(用for实现) #include main() { int i=1,sum=0; for(i=1;i<=100;i++) sum+=i; printf(“1+2+…+100=%d\n”,sum); } ⑸细节说明 1 for是关键字。 2 for圆括号中的三个表达式都可省略,但两个分号必不可少。如果省略表达式2,就会形成死循环。 3 for后一对圆括号中的表达式可以是任意有效的C语言表达式。for(sum=0,i=1;i<=100;sum=sum+i,i++); 例5.6 #include main() {double r,s,pi=3.1416; for(r=0.5;r<=2.5;r+=0.5) {s=pi*r*r; Printf(“r=%3.1f s=%f\n”,r,s); } } 分析:半径之间有规律,相差0.5,并且是重复性的求圆的面积,所以本题符合循环操作的。可以用循环结构来实现。 6、循环嵌套 定义:循环语句中又套循环语句。 例5.7 使用双层for循环打印如下由星号组成的倒三角图形: ******* ***** *** * 解析:该图形一共四行,每一行*的个数成等差数列递减,分别为7,5,3,1;以第一行的左边界为准,每一行的空格输出个数分别为:0,1,2,3。并且是重复的进行输出*的操作。符合循环结构的两个条件,故本题应用循环结构来实现。 #include main( ) {int k,i,j; for(i=0;i<4;i++) {for(k=1;k<=i;k++) printf(“ ”); for(j=0;j<7-i*2;j++) printf(“*”); printf(“\n”); } } : 1、 for(i=0;i<4;i++),i从0一直变到3,控制四行的输出。i为0时,对第1行进行输出,i为1时,对第2行进行输出,依次类推。 2、 for(k=1;k<=i;k++) printf(“ ”);控制每一行空格的输出。 3、 for(j=0;j<7-i*2;j++) printf(“*”); 控制每一行*的输出。 4、 printf(“\n”);一行输出完毕后的换行,为下一行的输出做好准备。 5、 内层for循环跳不出,是无法执行外层for循环的,循环嵌套的执行顺序是由内层到外层。 6、 稍微改动后,倒三角变正三角。 #include main( ) {int k,i,j; for(i=3;i>=0;i--) {for(k=1;k<=i;k++) printf(“ ”); for(j=0;j<7-i*2;j++) printf(“*”); printf(“\n”); } } 例5.8(重点掌握) 编写程序,找出2—100以内的所有的质数(素数)。 解析:只能被1和它本身整除的数叫质数,也就是说,如果一个数i能被2到i-1之间的某个数整除,则这个数i就不是质数。比如:判断9是不是质数,只需让9与2到8期间的7个数都除一遍,若有一个能被整除的,9就不是质数,当9和3除时能整除,则说明9不是质数。 #include main( ) {int k,i,tag; for(i=2;i<=100;i++) {tag=0; for(k=2;k #include main( ) {int k,i,tag; printf(“2,”); for(i=3;i<=100;i+=2) {tag=0; for(k=2;tag==0&&k,就像printf、scanf与#include的关系一样。 7、 break语句 break语句可以出现在两个地方:switch语句体或循环体内,目的是强制跳出switch语句体或循环体。 8、 continue语句 遇到continue语句,将会余下循环体中尚未执行的语句,提前进入下次循环,可以理解为仅结束本次循环,并未彻底跳出循环体。 例5.10 #include main( ) {int k=0,s=0,i; for(i=1;i<=5;i++) {s=s+i; if(s>5) { printf(“****i=%d,s=%d,k=%d\n”,i,s,k); continue; } k=k+s; printf(“i=%d,s=%d,k=%d\n”,i,s,k); } 运行后黑屏显示如下: i=1,s=1,k=1 i=2,s=3,k=4 ****i=3,s=6,k=4 **** i=4,s=10,k=4 **** i=5,s=15,k=4 解析: 只要执行到continue语句,则循环体中余下的语句k=k+s; printf(“i=%d,s=%d,k=%d\n”,i,s,k); 都将被跳过,而是提前执行i++的操作。 例5.11从输入的若干个大于0的正整数中选出最大值,用-1结束输入。 #include main( ) {int x,max; printf(“Enter -1 to end:\n”); do { printf(“Enter x:”); scanf(“%d”,&x); }while(x<0&&x!=-1); max=x; while(x!=-1) { printf(“Enter x:”); scanf(“%d”,&x); if(x>0&&x>max) max=x; } if(max!=-1) printf(“max=%d\n”,max); } 解析: do { printf(“Enter x:”); scanf(“%d”,&x); }while(x<0&&x!=-1); 此程序段是为了确保第一个输入数据的合法有效性。只要输入的数据小于0并且不是-1,表达式x<0&&x!=-1就为真,重复执行循环体后,程序要求重新输入数据。因为题目要求:从输入的若干个大于0的正整数中选出最大值。
/
本文档为【C程序第5章】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索