




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 循环结构程序设计5.1 while循环结构程序设计【学习目标】(1) 掌握循环结构的内涵(2) 掌握while循环语句的结构和应用(3) 掌握循环结构程序中break和continue语句的用法实例15 while循环语句求1+2+100的和值【实例任务】用while语句求1+2+3+100的和值。程序的运行结果如图5-1所示。 图5-1 程序运行结果【程序代码】#include "stdio.h" main() int i=1,sum=0;while(i<=100)sum=sum+i; /*随着i的变化,将i的值累加到sum中*/ i+; /*循环一次,i自
2、动增1*/ printf("1+2+.+100的和值为:%dn",sum);getch(); 【相关知识】1循环结构程序设计 循环结构是结构化程序三种基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。循环结构的特点是:在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件成为循环条件,反复执行的程序段称为循环体。C语言的循环体语句有while语句、do-while语句、for语句。2while语句while语句用于实现“当”型循环结构。其一般形式如下: while(表达式) 循环体其执行过程是当表达式为非值时,执行循环体。循环体内语句可以是
3、空语句,可以是一条语句,可以是多条语句。如果为空语句或一条语句,可略去。循环执行过程中,如果参与表达式判断的变量值不能改变,则循环不会结束,称为死循环。【课堂精练】1 统计从键盘输入一行字符的个数。程序运行结果如图5-2所示。 图5-2 程序运行结果根据程序运行结果,请将下面程序补充完整并调试。#include "stdio.h"main() int n=0;printf("请输入一系列字符:n");while(getchar()!='n')_ printf("输入的字符的个数为:%d",n); getch(); 2.
4、 求n!值。程序运行结果如图5-3所示。 图5-3 程序的运行结果根据程序运行结果,请将下面程序补充完整并调试。#include "stdio.h"main()int n,i=1,sum=1; printf("请输入n的值n"); scanf("%d",&n); _ sum=sum*i; _ printf("n!值为:%d",sum); getch(); 5.2 for循环结构程序设计【学习目标】(1)掌握for循环语句结构的内涵(2)掌握for循环语句的结构和执行过程实例16 for循环语句统计大写字母和
5、小写字母的个数【实例任务】编写一个程序,用于接收用户输入10个字符,统计其中大写字母和小写字母的个数。比较大写字母与小写字母的个数,并显示相应的消息。程序运行结果如图5-4所示。 图5-4 程序运行结果【程序代码】#include "stdio.h"main()char inp;int i,low,upp;/*for 循环的计数器是i,upp来统计大写字母的计数器是,low来统计小写字母*/printf("n请输入一系列字符:");low=0;upp=0; i=0;for(i=0;i<10;i+) inp=getchar(); if(inp>
6、='a'&&inp<='z') low+; else if(inp>='A'&&inp<='z') upp+; putchar(inp);/*比较大写字母数和小写字母数*/if(low>upp)printf("n 小写字母比大写字母多%d个。n",low-upp);else if(upp>low)printf("n 大写字母比小写字母多%d个。n",upp-low);elseprintf("n 小写字母和大写字母的个数相
7、等,为%d个。n",low); getch(); 【相关知识】1for语句 for语句是C语言中最灵活、功能最强的循环语句。它不仅可以使用用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,完全可以代替while语句。for语句的一般形式为: for (表达式1;表达式2;表达式3) 循环体for语句的执行过程是,运行之初先求解表达式1,然后进行表达式2的条件判断,如果条件成立,则执行循环体,此时条件不成立,退出循环。在执行循环体后,再计算表达式3,之后转去执行表达式2进行条件判断,如果成立,继续执行循环体,否则退出循环不,进行循环后,依次是计算表达式3
8、、判断表达式2的步骤执行,直到条件不成立为止,结束循环。2表达式说明表达式1,通常用来给循环变量赋初值,一般是赋值表达式。也可以在for语句外给循环变量赋初值,此时可以省略该表达式。表达式1对整个循环过程来讲,只做一次。 表达式2,通常是循环条件,一般为关系表达式或逻辑表达式。 表达式3, 通常可以用来修改循环变量的值,一般是赋值语句。如果想省略表达式3,可以把相应语句放到循环体中完成。这三个表达式都可以是逗号表达式,即每个表达式都可以由多个表达式组成。三个表达式都是任选项,都可以省略。但要注意,在省略表达式的同时,两个分号必须保留,因为语句要求两个分号将三个表达式分开。如以下语句 i=1;
9、for( ; i<5 ; ) printf(“*”) ; i+;3 for语句中的逗号表达式逗号运算符的主要应用就在for语句中。表达式1和表达式3常为逗号表达式,求解它们时完成多个表达式(往往为赋值表达式、自增自减表达式)的一次求值。如下列的一些表示方式: for(i=1,sum=0;i<=100;i+)for(i=0,j=100,k=0;i<=j;i+,j-) for(i=0;(c=getchar()!=n;i+=c)从上面几种表达方式可以看出,C语言中的for语句功能强大。可以把循环体和一些与循环控制无关的操作也作为表达式1或表达式3出现,这样程序可以短小简洁。但过分地
10、利用这一特点会使for语句显得杂乱,可读性降低,建议不要把与循环控制无关的内容放到for语句中。【课堂精练】1把100200之间的不能被3整除的输出,要求每行输出5个,最后一行除外。程序运行结果如图5-5所示。 图5-5 程序运行结果 根据程序的运行结果,请将下面程序补充完整并调试。#include "stdio.h"main()int n,m=0;for(n=100;n<=200;n+) if(n%3=0) _ m+; _ printf("%5d",n);printf("n"); else printf("%5d&q
11、uot;,n);getchar();2判断一个整数是否为素数(素数,是指只能被1和它本身整除的数。判断方法是将m被2的整数除,如果m不能被2中的任何一个整数整除,则m是素数;只要m能被2中的某一个整数整除,就可断定m为非素数。程序运行结果如图5-6所示。 图5-6 程序运行结果 根据程序的运行结果,请将下面程序补充完整并调试。#include "stdio.h"#include "math.h" main() int m,j,k; scanf("%d",&m); _ for(j=2;j<=k;j+)_ if(j>=
12、k+1) printf("%d 是素数n",m); else printf("%d 不是素数n",m); getch(); 5.3 do-while循环结构程序设计【学习目标】(1)掌握do-while循环语句结构的内涵(2)掌握do-while循环语句的结构和执行过程(3)掌握循环结构程序中break和continue语句的用法实例17 do-while循环语句求1+2+100和12 +22+302的值【实例任务】用do-while语句求si=1+2+3+100和s2=12 +22+32+302 .的值。程序的运行结果如图5-7所示。 图5-7 程序运
13、行结果【程序代码】#include "stdio.h"main() int i=0,s1=0,s2=0;do i+; if(i>100) /*如果i的值高于100,则结束循环*/ break; /*强行退出循环*/ s1=s1+i; if(i>30) /*如果i的值高于30,则执行continue语句,执行下一次循环*/ continue;/*不再执行它下面的语句,来执行下次循环*/ s2=s2+i*i; while(i<150); printf("s1=%dn",s1); printf("s2=%dn",s2);
14、getch(); 【相关知识】1do-while语句do-while语句的特点是先执行循环体,然后判断循环条件是否成立。其一般形式为 do 循环体 while(表达式);其执行过程是先执行一次指定的循环体语句,然后进行条件判断,也就是先计算表达式的值,当表达式的值为非零(“真”)时,返回重新执行循环体语句。如此反复,直到表达式的值等于0为止,此时循环结束。2while语句和do-while语句的区别 while语句执行时,先进行条件判断,条件成立的情况下才执行循环体。do-while语句是先执行一次循环体,然后再进行条件判断,直到表达式不成立时终止循环。3break和continue语句 在s
15、wich语句中,可用break语句终止swich语句的执行跳出该swich语句。同样,在三种循环语句中可用break语句终止该循环语句的执行而跳出,它的一般形式是: break;continue语句结束本次循环,即跳过循环体中在continue语句后面的尚未执行的其他语句,而执行下一次循环,它的一般形式是: continue;【课堂精练】1求s=1+2+3+100的值。程序运行结果如图5-8所示。 图5-8 程序运行结果 根据程序的运行结果,请将下面程序补充完整并调试。#include "stdio.h" main() _ do s=s+k; k+; _ printf(&q
16、uot;s=%d",s); getch(); 2. 求s=1+1/2+1/4+1/50的值。程序运行结果如图5-9所示。 图5-9 程序运行结果 根据程序的运行结果,请将下面程序补充完整并调试。#include "stdio.h" main()float sum=1.0;int i=2;do_ i=i+2;_ printf("sum=%fn",sum);getch(); 5.4 循环的嵌套结构【学习目标】(1)掌握循环的嵌套结构内涵(2)掌握循环的嵌套结构程序执行过程(3)提高综合编程能力实例18 循环的嵌套结构百钱买百鸡问题【实例任务】 中国
17、古代数学家张丘建在他的算经中提出了著名的“百钱百鸡问题”鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁,母,雏各几何?编写一程序解决此问题,程序运行结果如图5-10所示。 图5-10 程序运行结果【程序代码】#include "stdio.h"#include "conio.h" main() int i,j,k; /* 三个变量分别代表鸡翁、鸡母、鸡雏 */ /* 理论上鸡翁的循环范围是0-100,但实际上每个鸡翁值5钱, 如果鸡翁的数量超过20,那么钱数一定超过100,那么就不合题意了, 所以这里鸡翁的取值范围是0-20,内层循环的鸡
18、母范围也是同理。 */ for(i=0;i<=20;i+) for(j=0;j<=33;j+) k=100-i-j; /* 计算鸡雏的数量 */ /* 鸡的数量和钱的数量同时扩大三倍,以防余数问题。 */ if(i*15+j*9+k=300) printf("n鸡翁 鸡母 鸡雏数分别为:%5d%5d%5d",i,j,k); getch(); 【相关知识】1 循环嵌套在一个循环体内又完整地包含了另一个循环,称为循环嵌套。前面介绍的三种类型的循环都可以互相嵌套,循环的嵌套可以多层,但每一层循环在逻辑上必须是完整的。在编写程序时,循环嵌套的书写要采用缩进的形式,像本例
19、题程序中所示,内循环中的语句应该比外循环中的语句有规律地向右缩进2-4列,这样程序分明,易于阅读。2百钱买百鸡问题解析百钱买百鸡是一道用C语言程序解决数学方程运算问题的一个典型试题,用到了程序中典型的方法:穷举法。假设想x、y、z分别为鸡翁、鸡母、鸡雏的只数,依题意可得出联体方程组如下:x+y+z=100 (1)5x+3y+z/3=100 (2)三个未知数,只有两个方程式,所以x、y、z可能有多组解,因此,可用“穷举法”,x、y、z可能满足要求的组合,最后把符合上述两方程的想x、y、z判断打印出来。【课堂精练】1打印一个空心菱形图案,程序运行结果如图5-11所示。 图5-11 程序运行结果根据
20、程序运行结果,请将下面程序补充完整并调试。#include "stdio.h"main() int i,j,k;/*i控制要打印的行数,j控制要打印的空格数,k控制要打印的星号的个数*/*先打印上边的4行*/for(i=1;i<=4;i+) /*控制要打印的行数*/ for (j=1;j<=4-i;j+) /*控制每行要打印的空格数*/printf(" ");_ /*控制要打印第一个"*"到第二个"*"*/ if(k=1|k=2*i-1) /*只在循环的边界值打印"*",否则打印空格
21、*/ printf("*"); else printf(" "); printf("n"); /*然后打印下边的三行*/for (i=1;i<=3;i+) /*控制要打印的行数*/ for(j=1;j<=i;j+) /*控制每行要打印的空格数*/ printf(" "); _ /*控制每行要打印的"*"的个数*/ if (k=1|k=7-2*i) /*只在循环的边界值打印"*",否则打印空格*/ printf("*"); else printf
22、(" "); printf("n"); getch(); 2打印九九乘法表,程序运行结果如图5-12所示。 图3-16 程序运行结果根据程序运行结果,请将下面程序补充完整并调试。#include "stdio.h" main() int i=1,j; _ for(j=1;j<10;j+) _ i+; getch(); 5.5 课后习题5.5.1 项目练习一练习目的 1进一步练习循环结构程序设计 2. 进一步练习循环嵌套结构程序设计 3进一步提高综合编程和调试程序的能力二练习内容1. 打印输出所有的水仙花数(所谓水仙花数,是指一个
23、三位数,其各位数字立方和等于该数本身)。2. 求fibonacci数列:1,1,2,3,5,8,的前40项,即 f1=1(n=1)f2=1(n=2)f3=2(n=3)fn=fn-1+fn-2(n>=3)3求整数1100的累加值,但要求跳过所有个位为3的数。4打印输出100至200之间的全部素数。5. 试编程,找出199之间的全部同构数。同构数是这样一组数:它出现在平方数的右。例如:5是25右边的数,25是625右边的数,5和25都是同构数。5.5.2 练习题一选择题1.下面程序段的运行结果是_。 int n=0; while(n+<=2);printf("%d"
24、,n);(A)2 (B) 3 (C) 4 (D)有语法错2设有程序段:t=0;while(printf(“*”) t+; if(t<3) break; 下面描述正确的是_。A 其中循环控制表达式与0等价 B 其中循环控制表达式与0等价C 其中循环控制表达式是不合法的 D 以上说法都不对3.执行语句for(i=1;i+<4; );后变量i的值是_. (A)3 (B)4 (C)5 (D)不定4以下for循环的执行次数是_。for(x=0,y=0 ; (y=123)&&(x<4) ; x+);A 是无限循环 B 循环次数不定 C 执行4次 D 执行3次5下面程序的运
25、行结果是_。#include “stdio.h”main( ) int j; for(j=1 ; j<=5 ; j+) if(j%2) printf(“*”); else continue ; printf(“#”); printf(“$n”); A *#*#*#$ B #*#*#*$ C *#*#$ D #*#*$6.若有如下语句 int x=3; doprintf(""%dn",x-=2);while(!(-x); 则上面程序段_。 (A)输出的是1 (B)输出的是1和-2 (C)输出的是3和0 (D)是死循环7下面程序的运行结果是_。#include
26、“stdio.h”main( ) int y=10; do y-; while(-y); printf(“%dn”,y-);A 1 B 1 C 8 D 08下面程序段不是死循环的是_。A int j=100; while(1) j=j%100+1; if(j>100) break; B for( ; ; );C int k=0; do +k; while(k>=10);D int s=36; while(s); -s;9以下正确的描述是_。 (A)continue语句的作用是结束整个循环的执行 (B)只能在循环体内和switch语句体内使用break语句 (C)在循环体内使用bre
27、ak语句或continue语句的作用相同 (D)从多层循环嵌套中退出时,只能使用goto语句10.以下程序的输出结果是_。#include "stdio.h" main() int k,j,s; for(k=2;k<6;k+,k+) s=1; for(j=k;j<6;j+) s+=j; printf("%dn",s); getch();(A)9 (B)1 (C)10 (D)1211.以下程序的输出结果是_。#include "stdio.h" main() int i=5; for(;i<15;) i+; if(i%4=0) printf(" %d",i); else continue; getch();(A)8 12 16 (B)8 12(C)12 16 (D)8二填空题1.以下由while构成的循环执行的次数是_。 int k=0; while(k=2) k+;2.以下程序的输出结果是_。 #include "stdio.h" main() int x=2; while(x-) printf("%d n",x); getch(); 3.以下程序的输出结果是_。 #include "stdio.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届河北省张家口市高三上学期期末质量检测地理试题及答案
- 2025年度专业车库租赁权转让合同
- 2025年度农村土地承包经营权流转与农业文化遗产保护合同
- 2025年度中小企业流动资金授信借款合同
- 2025年度城市河道治理房屋拆迁补偿合同
- 2025年度人才共享与借用项目合作协议
- 2025年度协商解除劳动合同与员工住房安置合同
- 2025年度公司销售业务员协议书:人工智能赋能下的销售代理合同
- 2025年度子女对父母赡养及社区互助保障协议
- 化妆品店装修合同
- 劳工及道德体系法律法规清单
- 仓储物流中心物业管理服务费报价单
- 2024年哈尔滨科学技术职业学院单招职业适应性测试题库及答案解析
- 2024年北京市大兴区清源街道招聘笔试冲刺题(带答案解析)
- (2024年)污水处理设备培训方案
- 《生物质热电联产工程设计规范》
- 中国十五冶招聘线上笔试测评题库
- 中国结直肠癌诊疗规范(2023版)解读
- 通用级聚苯乙烯简介介绍
- 《反窃电技术》课件
- 1.1原子结构-12课时课件高二化学人教版选择性必修2
评论
0/150
提交评论