1、2022-6-61C+大学基础教程大学基础教程第第3 3章章 C+C+控制语句控制语句2022-6-62用计算机解决实际问题,首先要分析问题,设计合适的算法,然后编程实现算法。2022-6-63第第3 3章章 C+C+控制语句控制语句3.1 算法的基本控制结构算法的基本控制结构3.2 if选择语句选择语句3.3 switch选择语句选择语句3.4 循环语句循环语句3.5 循环嵌套循环嵌套3.6 应用举例应用举例2022-6-643.1 3.1 算法的基本控制结构算法的基本控制结构2022-6-653.1 3.1 算法的基本控制结构算法的基本控制结构v算法算法 1、计算机执行的操作、计算机执行的
2、操作 2、这些操作的顺序、这些操作的顺序 伪码、流程图伪码、流程图v伪码伪码 采用类似计算机语言的分句格式,以自采用类似计算机语言的分句格式,以自然语言描述算法。然语言描述算法。 2022-6-663.1 3.1 算法的基本控制结构算法的基本控制结构v 流程图流程图 以图形符号以图形符号 直观直观 开始开始/结束结束 执行执行 判断判断 联系联系2022-6-673.1 3.1 算法的基本控制结构算法的基本控制结构v程序的三种基本控制结构程序的三种基本控制结构 (1)顺序结构)顺序结构 (2)选择结构)选择结构 (分支结构)(分支结构) (3)循环结构)循环结构2022-6-683.1 3.1
3、 算法的基本控制结构算法的基本控制结构v流程控制语句流程控制语句 选择语句选择语句:if.else、switch 循环语句循环语句:while、for 、do.while 转向语句转向语句:break、continue2022-6-693.2 3.2 if 选择语句选择语句2022-6-6103.2 if选择语句选择语句vif_else语句基本语法语句基本语法if(表达式表达式)语句语句1;else语句语句2;2022-6-6113.2 3.2 if选择语句选择语句vif_else 1、没有、没有else分支分支 2、双分支、双分支 3、多分支、多分支 4、if 语句的嵌套语句的嵌套2022-
4、6-6123.2 3.2 if选择语句选择语句v1、没有、没有else分支分支 例如:比较例如:比较x和和y的大小,如果的大小,如果x大则输出大则输出x的的值值if (表达式) 语句;if ( xy ) coutxy ) coutxendl;else coutyendl;3.2 3.2 if选择语句选择语句2022-6-614例子 任意输入一个任意输入一个4位整数的年份,判断该位整数的年份,判断该年是否是润年?年是否是润年? 是指年份能被4整除的那些年,但不包括能被100整除而不能被400整除的年2022-6-615#include using namespace std;void main(
5、) int year; cinyear; if (year % 4=0) & !(year %100 = 0) & (year % 400!=0) cout润年润年endl; else cout不是润年不是润年endl;2022-6-6163.2 3.2 if选择语句选择语句v3、多分支if (表达式1) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3; else 语句n;2022-6-6172022-6-618例子:输出学生的成绩#include using namespace std;void main() int x; cinx; if(x=90)
6、 cout“优秀”=80) cout“良好”=60) cout“合格”endl; else cout“不及格”endl;2022-6-6193.2 3.2 if选择语句选择语句v4、if 语句的嵌套语句的嵌套if (表达式1) if (表达式2) 语句1 else 语句2else if (表达式3) 语句3 else 语句42022-6-6202022-6-621例子:输出a,b,c中较大的数#include using namespace std;void main() int a,b,c; cinabc; if (ab) if (ac) coutaendl; else coutcc) co
7、utbendl; else coutcendl; coutb?(ac?a:c):(bc?b:c ) );2022-6-6223.2 3.2 if选择语句选择语句v注意:二义性注意:二义性int x=-1;if (x0) if (x50) cout“x is 50”endl;else cout“x is =0”x; switch(x/10) case 10: case 9:cout“优秀优秀”endl; break; case 8: cout“良好良好”endl; break; case 7: case 6: cout“合格合格”endl; break; default: cout“不及格不及格
8、”endl;2022-6-627 switch( 表达式)case 9:case 8:case *: case $:case 0.1:表达式值可为整型表达式值可为整型字符型字符型 、枚举型,、枚举型,但不能为实型但不能为实型2022-6-628 switch( m/10)case 9: a+=1;case 8: a+=1;case 7: a+=1;case 6: a+=1;cout“通过”endl; break;defaultcout“不通过”endl;2022-6-6293.4 3.4 循环循环语句语句2022-6-6303.4 循环语句循环语句三种基本语法三种基本语法1、 while 语句
9、语句2、 dowhile 语句语句3、 for 语句语句2022-6-631#include #include using namespace std;void main() coutsetfill(*) setw(2)n setw(3)n setw(4)n setw(5)n setw(6)n setw(7)n setw(8)n; * * * * * * *2022-6-632#include #include using namespace std;void main() int i=2; coutsetfill(*); while(i=8) coutsetw(i)n; i+; * * *
10、* * * *循环变量循环体循环控制条件2022-6-6333.4 循环语句循环语句v主要包括主要包括3个部分:个部分:1、循环循环控制条件控制条件: 判断循环操作是否进行的条件;判断循环操作是否进行的条件;2、循环体循环体: 重复进行的操作;重复进行的操作;3、循环循环控制变量控制变量: 记录循环体执行的次数,或控制循环的记录循环体执行的次数,或控制循环的结束条件。结束条件。2022-6-6343.4 循环语句循环语句vwhile循环语句while(表达式) 循环体语句;2022-6-635例1:编程循环输出1-9这9个数字? #include using namespace std; vo
11、id main() int i=1; while (i10) coutiendl; i+; cout“循环结束循环结束”endl;运行结果:123456789循环结束2022-6-636例2:编程计算1+2+3+.+10的值 #include using namespace std; void main() int sum=0,i=1; while(i=10) sum+=i; i+; coutsumendl; 552022-6-637例3:打印ASCII码表中的可视字符#includeusing namespace std;void main() unsigned char ch=32; wh
12、ile(ch128) cout(int)chtcht; ch+; 2022-6-638例4:编程计算 的值#include using namespace std;void main()int k=1,sum=0,n;cout0):;cinn; while(k0) coutsum/nendl;else coutn不能不能=0endl;2022-6-6393.4 循环语句循环语句vdo.while循环语句 do 循环体语句; while(表达式);2022-6-640#include #include using namespace std;void main() int i=2; coutse
13、tfill(*); do coutsetw(i)n; i+; while(i=8); * * * * * * *2022-6-641例子:编程计算 的值#include using namespace std;void main()int k=1,sum=0,n;cout0):;cinn; do sum=sum+k*k; k+; while(k0) coutsum/nendl;else coutn不能不能=0endl;2022-6-6423.4 循环语句循环语句vfor循环语句循环语句 v循环结构循环结构 1、表达式、表达式1 循环变量初始化循环变量初始化; 2、表达式、表达式2 循环控制条件
14、;循环控制条件; 3、表达式、表达式3 循环变量的变化循环变量的变化;for (表达式1; 表达式2; 表达式3) 循环体;2022-6-643例1:编程循环输出1-9这9个数字? #include using namespace std; void main() for (int i=1;i10;i+) coutiendl; cout“循环结束循环结束”endl; 运行结果:123456789循环结束2022-6-644例2:编程计算1+2+3+.+10的值 #include using namespace std; void main() int sum=0; for (int i=1;i
15、=10;i+) sum+=i; coutsumendl; 运行结果:552022-6-645#include #include using namespace std;void main() coutsetfill(*); * * * * * * *例3for(int i=2;i=8;i+) coutsetw(i)n;2022-6-6463.4 循环语句循环语句for语句语句v1、省略意味着赋初值省略意味着赋初值提前提前 for(int i=1 ; i=9 ; i+) 循环体;循环体; int i=1; for( ; i=9 ; i+) 循环体;循环体;2022-6-6473.4 循环语句循环
16、语句for语句语句v2、省略,用省略,用break跳出循环跳出循环 for(int i=1; i=9; i+) 循环体;循环体; for(int i=1; ; i+) if (i=9) 循环体;循环体; else break; /跳转语句,用来跳出循环跳转语句,用来跳出循环 2022-6-6483.4 循环语句循环语句for语句语句v3、省略:省略: for(int i=1; i=9; i+) 循环体;循环体; for(int i=1, j=2; i=9; ) 循环体;循环体; i+; 2022-6-6493.4 循环语句循环语句for语句语句v3、 同时省略同时省略 for(int i=1;
17、 i=9; i+) 循环体;循环体; int i=1; for(; i=9; ) 循环体;循环体; i+; 2022-6-6503.4 循环语句循环语句for语句语句v5、极端情况,可实现无限循环、极端情况,可实现无限循环 for( ; ; ) 循环体;循环体; 2022-6-651例4:判断输出结果?#include using namespace std;void main() for(int i=0,j=10,k=0; ij; i+,j-)k+=i*j;coutkendl;分析:i j k0 10 01 9 92 8 253 7 464 6 705 5 跳出2022-6-6523.4 循
18、环语句循环语句v1、for: 最适合循环次数固定,循环规律非常明最适合循环次数固定,循环规律非常明显程序。显程序。v2、while: 使用最多最频繁的循环结构,具有普适使用最多最频繁的循环结构,具有普适性。性。v3、do_while: 最适合至少循环一次的循环结构。最适合至少循环一次的循环结构。2022-6-6533.4.4 转向语句转向语句1、break语句语句2、continue语句语句2022-6-6543.4.4 转向语句转向语句break用途: 常用在常用在while、do-while、for和和switch语句语句中,用来跳出循环或中,用来跳出循环或switch语句。语句。2022
19、-6-655例1:判断输出结果?#include using namespace std;void main() int sum=0; for (int i=1;i10;i+) if (i % 3=0) break; sum+=i; coutsumendl;分析i sum1 12 33 跳出2022-6-6563.4.4 转向语句转向语句continue用途用途 用于循环语句中,结束本次循环,进行下一用于循环语句中,结束本次循环,进行下一次循环;即跳过循环体中尚未执行的部分。次循环;即跳过循环体中尚未执行的部分。2022-6-657例1:判断输出结果?#include using namesp
20、ace std;void main() int sum=0; for (int i=1;i10;i+) if (i % 3=0) continue; sum+=i; coutsumendl;分析i sum1 12 33 34 75 126 127 198 279 2710 跳出2022-6-6583.5 3.5 循环循环嵌套嵌套2022-6-6593.5 3.5 循环嵌套循环嵌套v编程输出国际象棋棋盘编程输出国际象棋棋盘#include using namespace std;void main() for (int i=0;i8;i+)for (int j=0;j8;j+)if (i+j)%
21、2=0) cout; else cout ; coutn; 2022-6-660思考v题目: 使用For循环输出如下图形: * * * * * * *2022-6-661#include using namespace std;void main() for (int i=1;ii; j-) cout ; for (j=1; j=i; j+) cout*; coutendl; 2022-6-6623.6 3.6 应用举例应用举例2022-6-6633.6 3.6 应用举例应用举例1 1v任意输入一个整数,判断是否是素数?任意输入一个整数,判断是否是素数? 问题:什么是素数?问题:什么是素数?2
22、022-6-664#include using namespace std;void main() int n,i;cinn;for (i=2;in;i+)if (n%i=0) break; if (in)coutn不是素数!不是素数!n;elsecoutn是素数是素数n;2022-6-665改进:输出2-100之间的素数#include #include using namespace std;void main()for(int k=2;k100;k+) int n=sqrt(k);for (int i=2;in)coutkt;2022-6-6663.6 3.6 应用举例应用举例2 2v题
23、目题目 一球从一球从100米高度落下,每次落地后反弹回原高度米高度落下,每次落地后反弹回原高度的一半,再落下。编程求解它在第的一半,再落下。编程求解它在第n次落地时,共次落地时,共经过多少米?经过多少米?2022-6-667#include using namespace std;void main() double height=100,n; double sum=height; cinn; for (int i=1;i n;i+) sum+=height; height/=2; coutsumendl;2022-6-668总结v三种基本结构:顺序、选择和循环三种基本结构:顺序、选择和循环v流程图,帮助我们设计算法、完善算法,增流程图,帮助我们设计算法、完善算法,增强算法的可读性强算法的可读性2022-6-669作 业vP69. 一: 3, 5, 7 二: 5