版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第第4章章 控制结构控制结构程序的基本控制结构程序的基本控制结构表达式语句表达式语句函数调用语句函数调用语句空语句空语句复合语句复合语句if语句、语句、if-else语句、语句、switch语句语句while语句、语句、do-while语句、语句、for语句语句continue语句、语句、break语句、语句、goto语句、语句、return语句语句2程序的基本控制结构程序的基本控制结构顺序结构:常用的语句有表达式语句和顺序结构:常用的语句有表达式语句和 复合语句。复合语句。选择结构:选择结构:if语句、语句、if-else语句、语句、 switch语句。语句。循环结构:循环结构:while
2、语句、语句、do-while语句、语句、 for语句。语句。其它:空语句、其它:空语句、continue语句、语句、break语句语句 、goto语句、语句、return语句语句。3表达式语句表达式语句表达式语句的形式如下:表达式语句的形式如下: 表达式表达式; 表达式语句表达式语句示例:示例:a = a + 3;/ 赋值语句赋值语句x = y = z = 0; / 多重赋值语句多重赋值语句t = 2,t + x + a; / 逗号表达式语句逗号表达式语句z = i j ? x : x + y ;/ 条件表达式语句条件表达式语句f1(); /函数调用语句且函数调用语句且f1f1有返回值有返回值
3、x1 = exp(x); / 函数表达式语句,计算函数表达式语句,计算 exx2 = pow(x, y); /函数表达式语句,计算函数表达式语句,计算xy其功能是计算号前表达式的结果4函数调用语句函数调用语句函数调用语句的形式如下:函数调用语句的形式如下: 函数调用函数调用 ; 如前例所讲的如前例所讲的 average函数函数 的调用。的调用。注:对有返回值的函数调用所构成的语句实际注:对有返回值的函数调用所构成的语句实际上也是表达式语句上也是表达式语句5空语句空语句空语句的形式如下:空语句的形式如下: ; /仅仅起到标识作用仅仅起到标识作用表达式语句和空语句表达式语句和空语句示例:示例:a
4、= a + 3;/ 赋值语句赋值语句; / 空语句空语句6复合语句复合语句 复合语句的语法定义如下:复合语句的语法定义如下: 复合语句复合语句示例:示例:a = a + 3; x = y = z = 0; t = 2,t + x + a; z = i j ? x : x + y ;7【例【例4_1】 计算圆的周长和面积。计算圆的周长和面积。#include #include #define PI 3.14int main()double radius, area; /说明语句说明语句 radius = 3.0 ; double perimeter; /说明语句说明语句 perimeter =
5、PI * 2 * radius; cout The perimeter is : “ perimeter n ; /复合语句复合语句 area = PI * pow(radius,2); cout The area of the circle is : “ area n ; return 0;8if 语句语句 一般形式为一般形式为: if ( ) 可以是任意表达式可以是任意表达式 (一般为逻辑表达式)(一般为逻辑表达式)ifif语句语句示例:示例: if (grade=60) cout passed n;语义:语义:计算计算的值,若非零,的值,若非零,则执行则执行 ,然后按顺序继续执行,然后按
6、顺序继续执行ifif语语句的下一条语句(有例外)。否则,跳过句的下一条语句(有例外)。否则,跳过 ,直接执行,直接执行ifif语句的下一条语句。语句的下一条语句。if (grade60) return;cout passed n;9if-else 语句语句(1)(1) 一般形式为一般形式为: if ( ) else注:注:else和和必须可分离,即在有些情况下必须可分离,即在有些情况下else和和之间的空格或换行符是必须的之间的空格或换行符是必须的10qif-else 语句示例: if (grade = 60) cout Passed !n; else cout Failed !n;(错:el
7、secout 20|x-10) if(yx)Printf(“Good”); else printf(“bad”);解释1: 解释2: 12测试13if-else 语句语句( (3 3) ) qif 或if-else的嵌套: if 或if-else 中嵌套 if 或if-else if(grade=90)printf(“A”); else if (grade=80)printf(“B”); else if (grade=70)printf(“C”); else if (grade=60)printf(“D”); else printf(“F”);1415switch switch 语句语句一般形
8、式一般形式switch ( ) case : case : case : default: 多个多个case 分支和可选的分支和可选的 default 分支分支的值为整数类型(的值为整数类型(int,char,)每个每个的最后一个语句一般为的最后一个语句一般为break语语句句,每个每个也可以为空也可以为空switch 语句(1)16falsetrue计算条件表达式的值计算条件表达式的值条件表达式的值条件表达式的值 = 常量表达式常量表达式1语句序列语句序列1falsetrue条件表达式的值条件表达式的值 = 常量表达式常量表达式2语句序列语句序列2falsetrue条件表达式的值条件表达式的
9、值 = 常量表达式常量表达式n语句序列语句序列n语句序列语句序列n+1switch 语句(语句(2)17【例【例4_7】用】用switch语句实现成绩转换语句实现成绩转换 #include int main() int score;scorePhrase; cout score; if (score 100) cout The score is illegal!; return 0; /不是最好的实现,有多出口不是最好的实现,有多出口 / 计算分数段计算分数段 scorePhrase = score / 10;18/ 判断并输出等级判断并输出等级switch ( scorePhrase )ca
10、se 10: case 9: coutGrade is A. endl; break; case 8: coutGrade is B. endl; break; case 7: coutGrade is C. endl; break; case 6: coutGrade is D. endl; break;19 / 判断并输出等级判断并输出等级 case 0: case 1: case 2: case 3: case 4: case 5: coutGrade is E. endl; break; default: coutThe score is illegal! endl; return 0
11、;2020循环型程序设计概述C+ 语言可实现循环的语句:l用goto 和 if 构成循环lwhile 语句ldo while 语句lfor 语句goto语句及用goto构成循环vgoto语句一般格式: goto 语句标号语句标号; .标号:语句标号:语句; 2121v功能:无条件转移语句v说明:l不能用整数作标号l只能出现在goto所在函数内,且唯一l只能加在可执行语句前面l限制使用goto语句2222例 用if 和goto语句构成循环,求1001nn#include main() int i,sum=0; i=1;loop: if(i=100) sum+=i; i+; goto loop;
12、coutsum;sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050循环初值循环终值循环变量增值循环条件循环体2323课堂练习课堂练习:从键盘输入一组数据,以0结束输入,求数据和#include main() int number,sum=0; read_loop: cinnumber; if(!number) goto print_sum; sum+=number; goto read_loop;print_sum: cout“The total sum =“sum;2424while语句v一般形式:while(表达式) 循环体语句;v执行流程:
13、expr循环体假(0)真(非0)whilev特点:先判断表达式,后执行循环体v说明:l循环体有可能一次也不执行l循环体可为任意类型语句l下列情况,退出while循环u条件表达式不成立(为零)u循环体内遇break,return,gotol无限循环: while(1) 循环体;2525例 用while循环求 1001nn#include main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; coutsum;循环初值循环终值循环变量增值循环条件循环体2626课堂练习 显示110的平方#include void main() int i=1; wh
14、ile(i=10) couti*i=i*iendl; i+; 1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=1002727dowhile语句v一般形式:do 循环体语句; while(表达式);v执行流程:do循环体expr假(0)真(非0)whilev特点:先执行循环体, 后判断表达式v说明:l至少执行一次循环体ldowhile可转化成while结构2828例例 用用dowhile循环求循环求 1001nn#include main() int i,sum=0; i=1; do sum+=i;i+; while(i=100)
15、; coutsum;2929例 while和dowhile比较#include void main() int i,sum=0; i=0; do sum+=i;i+; while(i=10); coutsum;#include void main() int i,sum=0; i=0; while(i=10) sum+=i;i+; coutsum;求:1+2+3+10的值3030for语句v一般形式:for(expr1 ; expr2 ; expr3) 循环体语句;v执行流程:expr2循环体假(0)真(非0)forexpr1expr33131例 用for循环求 1001nn#include
16、main() int i,sum=0; for(i=1;i=100;i+) sum+=i; coutsum;3232v说明:lfor语句中expr1, expr2 ,expr3 类型任意,都可省略,但分号“;”不可省l无限循环: for(;)lfor语句可以转换成while结构expr1;while(expr2)循环体语句;expr3;3333#include main( ) int i=0; for(i=0;i10;i+) couta+i;运行结果:abcdefghij#includevoid main( ) int i=0; for(;i10;i+) couta+i;#includevoi
17、d main( ) int i=0; for(;i10;) couta+(i+); #includevoid main( ) int i=0; for(;i10;couta+i,i+) ;3434循环的嵌套v三种循环可互相嵌套,层数不限v外层循环可包含两个以上内循环,但不能相互交叉v嵌套循环的执行流程(1) while() while() . (2) do do while( ); . while( );(3) while() do while( ); . (4) for( ; ;) do while(); while() .内循环外循环内循环v嵌套循环的跳转禁止:l从外层跳入内层l跳入同层的
18、另一循环3535例例 循环嵌套,输出九九表循环嵌套,输出九九表1234567891234567892468101214161836912151821242791827364554637281.ij#include main() int i,j; for(i=1;i10;i+) coutsetw(4)i; coutendl; cout“=n”; for(i=1;i10;i+) for(j=1;j10;j+) if (j=9) coutsetw(4)i*jendl; else coutsetw(4)i*j; 3636i10Cout假(0)真(非0)i=1j+j=1j10真(非0)假(0)i+for
19、(i=1;i10;i+) for(j=1;j10;j+) if (j=9) coutsetw(4)i*jendl; else coutsetw(4)i*j; 外循环内循环37371. 嵌套的循环控制变量不应同名,以免造成混乱。2. 内循环变化快,外循环变化慢。例如:for(i=1;i=9;i+) for(j=1;j=i;j+) printf(%ld*%1d=%2d ,i,j,i*j); printf(n); 3. 循环体的确定要慎重。循环嵌套的说明循环嵌套的说明:3838while(表达式) 循环体语句do 循环体语句while(表达式); for(表达式1;表达式2;表达式3;) 循环体语句
20、循环控制条件循环控制条件也可在循环体内改变循环控制变量值改变循环控制变量值循环控制变量循环控制变量初始化初始化也可在for前1. 不提倡用不提倡用goto构成循环。构成循环。2. 关于循环的控制:关于循环的控制:39393. 一种循环可以解决的问题,使用另外两种同样可行,只是方便程度不同。4. while循环一般用于循环次数不定的情况,for循环一般用于循环次数确定的情况(也可以用于循环次数不定的情况),do-while循环一般用于至少需要执行一次的情况。5. for循环和while循环是先判断条件是否为真,再执行循环体,因此,可出现循环一次也不执行的情况;do-while循环是先执行循环体,
21、再判断条件是否为真,因此,循环体至少执行一次。6. while循环、 do-while循环、 for循环,可以用break语句跳出循环,用continue语句结束本次循环。4040辅助控制语句4141exprbreak;假(0)真(非0)whiledobreak;.expr假(0)真(非0)while4242expr2break;.假(0)真(非0)forexpr1expr3switchexpr语句组1break;语句组2break;语句组nbreak;语句组break;.const 1const 2const ndefaultcase 4343例例 分析下列程序运行结果:注意分析下列程序运行
22、结果:注意break语句的作用语句的作用#include#define PI 3.14159main() int r; float area; for(r=1;r100) break; cout“r=“r“ area=“area; coutendl; 运行结果运行结果 r=1 area=3.14159 r=2 area=12.5664 r=3 area=28.2743 r=4 area=50.2654 r=5 area=78.53974444#include main()char c;while(1) cinc;if(c=a & c=z)cout(char)(c-a+A)endl; e
23、lse break;return 0;4545exprcontinue;假(0)真(非0)while真(非0)docontinue;.expr假(0)whileexpr2continue;.假(0)真(非0)forexpr1expr3使用使用for continuefor continue语句完语句完成成1-1001-100中偶数的求和中偶数的求和4646功能:功能: 从键盘输入个整数,求正整数的个数,和以及其平均值从键盘输入个整数,求正整数的个数,和以及其平均值 4747Ch5_6.c为止最后一项的绝对值小于的近似值,直到公式求用例610171513114:1n程序设计举例4848为止最后一
24、项的绝对值小于的近似值,直到公式求用例610171513114:1n分子:1,-1,1,-1分母:1,3,5,7,.s-分子n-分母t-右边某一项值pi-右边所有项的和n=1;pi=0;s=1;t=s/n;while( )pi=pi+t;s=-s; n=n+2 t=s/n;4949#include #include main() int s; /分子分子 float n,t,pi;/n分母,分母,t每一项的值,每一项的值,pi等式右边的值等式右边的值 t=1; pi=0; n=1.0; s=1; while(fabs(t)=1e-6) pi=pi+t; n=n+2; s=-s; t=s/n;
25、pi=pi*4; cout“pi=”piendl;5050#include #include main() int m,i,k; cinm; k=sqrt(m); for(i=2;i=m) coutm“ 是素数n; else coutm“ 不是素数n;5151例例3 打印图形:打印图形:分析:1.每行的起始位置不同,空格数:5-row2.每行的字符数不同,字符数:2*row-13.用二重循环实现: 外循环控制输出行数; 两个并列内循环控制输出每行的空格数和字符数main( )int row, col; for(row=1;row=5;row+) for (col=1;col=5-row;col
26、+)printf( ); for (col=1;col=2*row-1;col+)printf(*); printf(n); 5252课堂练习:课堂练习:求求Fibonacci数列:数列:1,1,2,3,5,8,的前的前40个数个数,并按下列格式输出并按下列格式输出)3()2(12) 1(1121nFFFnFnFnnn 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
27、 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 1023341555353#include #include #include main() int n,f1,f2,f; f1=1,f2=1; for(n=1;n=40;n+) if(n=1)f=f1; else if(n=2) f=f2; else f=f1+f2; f1=f2; f2=f; coutsetw(12)f; if(n%4=0) coutendl; 核心算法核心算法难点:输出格式难点:输出格式每行四个数,因每行四个数,因此当此当n%4=0时,
28、输出回车换时,输出回车换行符行符5454搬砖问题:搬砖问题: 36块砖块砖36人搬,男搬人搬,男搬4女搬女搬3、小孩两个、小孩两个抬抬1砖,要求一次全搬完,问男、女、小孩各若干?砖,要求一次全搬完,问男、女、小孩各若干?分析:设男人、女人、小孩人数各为men,women,children,则可得如下方程: 4*men+3*women+children/2=36 men+women+children=36下面考虑如何寻找另外的约束条件: 按常识,men、women、children都应为正整数,且它们的取值范围分别应为: men:08 (假设36块砖全由men搬,最多需8人) women:011
29、(假设36块砖全由women搬,最多需11人) children:036(假设36块砖全由children搬,最多为36人)穷举法5555本题的细化过程如下: 首先从1开始,列举men的各个可能值,在每个men值下找满足两个方程的一组解。 算法如下: for(men=1;men=8;men+) s1:找满足两个方程的解的women,children s2:输出一组解 下面进一步用细化法来表现S1: for(women=1;women=11;women+) s1.1 找满足方程的一个children s1.2 输出一组解 搬砖问题:搬砖问题: 36块砖块砖36人搬,男搬人搬,男搬4女搬女搬3、小孩两个、小
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科技教育编程教育的普及与推广
- DB4453T 30-2025广藿香组培苗生产技术规程
- DB35T 2232-2024海峡两岸共通 火龙果生产技术规程
- 东莞企业劳动合同范本
- 个人贷款房屋抵押合同模板大全
- 业务经营权转让合同
- 个人车位共有权买卖合同
- 临时仓储合同范本
- 两人股权转让合同范本
- 个人借款利息合同模板
- 电梯结构与原理-第2版-全套课件
- IEC-62368-1-差异分享解读
- SWITCH塞尔达传说旷野之息-1.6金手指127项修改使用说明教程
- 2022-2023学年广东省佛山市顺德区高三(下)模拟英语试卷
- 节后复工培训内容五篇
- GB/T 33322-2016橡胶增塑剂芳香基矿物油
- GA 1051-2013枪支弹药专用保险柜
- 某水毁公路维修工程施工方案
- 家庭病房工作制度和人员职责
- 建设工程监理合同示范文本GF-2018-0202
- 2022质检年终工作总结5篇
评论
0/150
提交评论