1、C+大学基础教程大学基础教程第第3 3章章 C+C+控制语句控制语句2022-7-291第1页,共69页。用计算机解决实际问题,首先要分析问题,设计合适的算法,然后编程实现算法。2022-7-292第2页,共69页。第第3 3章章 C+C+控制语句控制语句3.1 算法的基本控制结构算法的基本控制结构3.2 if选择语句选择语句3.3 switch选择语句选择语句3.4 循环语句循环语句3.5 循环嵌套循环嵌套3.6 应用举例应用举例2022-7-293第3页,共69页。3.1 3.1 算法的基本控制结构算法的基本控制结构2022-7-294第4页,共69页。3.1 3.1 算法的基本控制结构算
2、法的基本控制结构v算法算法 1、计算机执行的操作、计算机执行的操作 2、这些操作的顺序、这些操作的顺序 伪码、流程图伪码、流程图v伪码伪码 采用类似计算机语言的分句格式,以自采用类似计算机语言的分句格式,以自然语言描述算法。然语言描述算法。2022-7-295第5页,共69页。3.1 3.1 算法的基本控制结构算法的基本控制结构v 流程图流程图 以图形符号以图形符号 直观直观 开始开始/结束结束 执行执行 判断判断 联系联系2022-7-296第6页,共69页。3.1 3.1 算法的基本控制结构算法的基本控制结构v程序的三种基本控制结构程序的三种基本控制结构 (1)顺序结构)顺序结构 (2)选
3、择结构)选择结构(分支结构)(分支结构)(3)循环结构)循环结构2022-7-297第7页,共69页。3.1 3.1 算法的基本控制结构算法的基本控制结构v流程控制语句流程控制语句 选择语句选择语句:if.else、switch 循环语句循环语句:while、for、do.while 转向语句转向语句:break、continue2022-7-298第8页,共69页。3.2 3.2 if 选择语句选择语句2022-7-299第9页,共69页。3.2 if选择语句选择语句vif_else语句基本语法语句基本语法if(表达式表达式)语句语句1;else语句语句2;2022-7-2910第10页,共
4、69页。3.2 3.2 if选择语句选择语句vif_else 1、没有、没有else分支分支 2、双分支、双分支 3、多分支、多分支 4、if 语句的嵌套语句的嵌套2022-7-2911第11页,共69页。3.2 3.2 if选择语句选择语句v1、没有、没有else分支分支 例如:比较例如:比较x和和y的大小,如果的大小,如果x大则输出大则输出x的的值值if(表达式)语句;if(xy)coutxy)coutxendl;else coutyendl;3.2 3.2 if选择语句选择语句2022-7-2913第13页,共69页。例子 任意输入一个任意输入一个4位整数的年份,判断该年位整数的年份,判
5、断该年是否是润年?是否是润年?是指年份能被4整除的那些年,但不包括能被100整除而不能被400整除的年2022-7-2914第14页,共69页。#include using namespace std;void main()int year;cinyear;if(year%4=0)&!(year%100=0)&(year%400!=0)cout润年润年endl;else cout不是润年不是润年endl;2022-7-2915第15页,共69页。3.2 3.2 if选择语句选择语句v3、多分支if(表达式1)语句1;else if (表达式2)语句2;else if (表达式3)语句3;els
6、e 语句n;2022-7-2916第16页,共69页。2022-7-2917第17页,共69页。例子:输出学生的成绩#include using namespace std;void main()int x;cinx;if(x=90)cout“优秀”=80)cout“良好”=60)cout“合格”endl;else cout“不及格”endl;2022-7-2918第18页,共69页。3.2 3.2 if选择语句选择语句v4、if 语句的嵌套语句的嵌套if(表达式1)if(表达式2)语句1 else 语句2else if(表达式3)语句3 else 语句42022-7-2919第19页,共69
7、页。2022-7-2920第20页,共69页。例子:输出a,b,c中较大的数#include using namespace std;void main()int a,b,c;cinabc;if(ab)if(ac)coutaendl;else coutcc)coutbendl;else coutcendl;coutb?(ac?a:c):(bc?b:c);2022-7-2921第21页,共69页。3.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
8、)case 10:case 9:cout“优秀优秀”endl;break;case 8:cout“良好良好”endl;break;case 7:case 6:cout“合格合格”endl;break;default:cout“不及格不及格”endl;2022-7-2926第26页,共69页。switch(表达式)case 9:case 8:case*:case$:case 0.1:表达式值可为整型表达式值可为整型字符型字符型、枚举型,、枚举型,但不能为实型但不能为实型2022-7-2927第27页,共69页。switch(m/10)case 9:a+=1;case 8:a+=1;case 7:
9、a+=1;case 6:a+=1;cout“通过”endl;break;defaultcout“不通过”endl;2022-7-2928第28页,共69页。3.4 3.4 循环循环语句语句2022-7-2929第29页,共69页。3.4 循环语句循环语句三种基本语法三种基本语法1、while 语句语句2、dowhile 语句语句3、for 语句语句2022-7-2930第30页,共69页。#include#include using namespace std;void main()coutsetfill(*)setw(2)n setw(3)n setw(4)n setw(5)n setw(6
10、)n setw(7)n setw(8)n;*2022-7-2931第31页,共69页。#include#include using namespace std;void main()int i=2;coutsetfill(*);while(i=8)coutsetw(i)n;i+;*循环变量循环体循环控制条件2022-7-2932第32页,共69页。3.4 循环语句循环语句v主要包括主要包括3个部分:个部分:1、循环循环控制条件控制条件:判断循环操作是否进行的条件;判断循环操作是否进行的条件;2、循环体循环体:重复进行的操作;重复进行的操作;3、循环循环控制变量控制变量:记录循环体执行的次数,或
11、控制循环的结束条记录循环体执行的次数,或控制循环的结束条件。件。2022-7-2933第33页,共69页。3.4 循环语句循环语句vwhile循环语句while(表达式)循环体语句;2022-7-2934第34页,共69页。例1:编程循环输出1-9这9个数字?#include using namespace std;void main()int i=1;while(i10)coutiendl;i+;cout“循环结束循环结束”endl;运行结果:123456789循环结束2022-7-2935第35页,共69页。例2:编程计算1+2+3+.+10的值#include using namespa
12、ce std;void main()int sum=0,i=1;while(i=10)sum+=i;i+;coutsumendl;552022-7-2936第36页,共69页。例3:打印ASCII码表中的可视字符#includeusing namespace std;void main()unsigned char ch=32;while(ch128)cout(int)chtcht;ch+;2022-7-2937第37页,共69页。例4:编程计算 的值#include using namespace std;void main()int k=1,sum=0,n;cout0):;cinn;whi
13、le(k0)coutsum/nendl;else coutn不能不能=0endl;2022-7-2938第38页,共69页。3.4 循环语句循环语句vdo.while循环语句 do 循环体语句;while(表达式);2022-7-2939第39页,共69页。#include#include using namespace std;void main()int i=2;coutsetfill(*);do coutsetw(i)n;i+;while(i=8);*2022-7-2940第40页,共69页。例子:编程计算 的值#include using namespace std;void main
14、()int k=1,sum=0,n;cout0):;cinn;do sum=sum+k*k;k+;while(k0)coutsum/nendl;else coutn不能不能=0endl;2022-7-2941第41页,共69页。3.4 循环语句循环语句vfor循环语句循环语句 v循环结构循环结构 1、表达式、表达式1 循环变量初始化循环变量初始化;2、表达式、表达式2 循环控制条件;循环控制条件;3、表达式、表达式3 循环变量的变化循环变量的变化;for(表达式1;表达式2;表达式3)循环体;2022-7-2942第42页,共69页。例1:编程循环输出1-9这9个数字?#include usi
15、ng namespace std;void main()for(int i=1;i10;i+)coutiendl;cout“循环结束循环结束”endl;运行结果:123456789循环结束2022-7-2943第43页,共69页。例2:编程计算1+2+3+.+10的值#include using namespace std;void main()int sum=0;for(int i=1;i=10;i+)sum+=i;coutsumendl;运行结果:552022-7-2944第44页,共69页。#include#include using namespace std;void main()c
16、outsetfill(*);*例3for(int i=2;i=8;i+)coutsetw(i)n;2022-7-2945第45页,共69页。3.4 循环语句循环语句for语句语句v1、省略意味着赋初值省略意味着赋初值提前提前 for(int i=1;i=9;i+)循环体;循环体;int i=1;for(;i=9;i+)循环体;循环体;2022-7-2946第46页,共69页。3.4 循环语句循环语句for语句语句v2、省略,用省略,用break跳出循环跳出循环 for(int i=1;i=9;i+)循环体;循环体;for(int i=1;i+)if(i=9)循环体;循环体;else break
17、;/跳转语句,用来跳出循环跳转语句,用来跳出循环 2022-7-2947第47页,共69页。3.4 循环语句循环语句for语句语句v3、省略:省略:for(int i=1;i=9;i+)循环体;循环体;for(int i=1,j=2;i=9;)循环体;循环体;i+;2022-7-2948第48页,共69页。3.4 循环语句循环语句for语句语句v3、同时省略同时省略 for(int i=1;i=9;i+)循环体;循环体;int i=1;for(;i=9;)循环体;循环体;i+;2022-7-2949第49页,共69页。3.4 循环语句循环语句for语句语句v5、极端情况,可实现无限循环、极端情
18、况,可实现无限循环 for(;)循环体;循环体;2022-7-2950第50页,共69页。例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-7-2951第51页,共69页。3.4 循环语句循环语句v1、for:最适合循环次数固定,循环规律非常明最适合循环次数固定,循环规律非常明显程序。显程序。v2、while:使用最多最频繁的循环结构,具有普适使用最多最频繁
19、的循环结构,具有普适性。性。v3、do_while:最适合至少循环一次的循环结构。最适合至少循环一次的循环结构。2022-7-2952第52页,共69页。3.4.4 转向语句转向语句1、break语句语句2、continue语句语句2022-7-2953第53页,共69页。3.4.4 转向语句转向语句break用途:常用在常用在while、do-while、for和和switch语句语句中,用来跳出循环或中,用来跳出循环或switch语句。语句。2022-7-2954第54页,共69页。例1:判断输出结果?#include using namespace std;void main()int
20、sum=0;for(int i=1;i10;i+)if(i%3=0)break;sum+=i;coutsumendl;分析i sum1 12 33 跳出2022-7-2955第55页,共69页。3.4.4 转向语句转向语句continue用途用途 用于循环语句中,结束本次循环,进行下一用于循环语句中,结束本次循环,进行下一次循环;即跳过循环体中尚未执行的部分。次循环;即跳过循环体中尚未执行的部分。2022-7-2956第56页,共69页。例1:判断输出结果?#include using namespace std;void main()int sum=0;for(int i=1;i10;i+)
21、if(i%3=0)continue;sum+=i;coutsumendl;分析i sum1 12 33 34 75 126 127 198 279 2710 跳出2022-7-2957第57页,共69页。3.5 3.5 循环循环嵌套嵌套2022-7-2958第58页,共69页。3.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)%2=0)cout;else cout ;coutn;2022-7-2959第59
22、页,共69页。思考v题目:使用For循环输出如下图形:*2022-7-2960第60页,共69页。#include using namespace std;void main()for(int i=1;ii;j-)cout;for(j=1;j=i;j+)cout*;coutendl;2022-7-2961第61页,共69页。3.6 3.6 应用举例应用举例2022-7-2962第62页,共69页。3.6 3.6 应用举例应用举例1 1v任意输入一个整数,判断是否是素数?任意输入一个整数,判断是否是素数?问题:什么是素数?问题:什么是素数?2022-7-2963第63页,共69页。#includ
23、e 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-7-2964第64页,共69页。改进:输出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-7-2965第65页,共69页。3.6 3.6 应用举例应用举例2 2v题目题目
24、 一球从一球从100米高度落下,每次落地后反弹回原高度米高度落下,每次落地后反弹回原高度的一半,再落下。编程求解它在第的一半,再落下。编程求解它在第n次落地时,共经次落地时,共经过多少米?过多少米?2022-7-2966第66页,共69页。#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-7-2967第67页,共69页。总结v三种基本结构:顺序、选择和循环三种基本结构:顺序、选择和循环v流程图,帮助我们设计算法、完善算法,增流程图,帮助我们设计算法、完善算法,增强算法的可读性强算法的可读性2022-7-2968第68页,共69页。作 业vP69.一:3,5,7 二:52022-7-2969第69页,共69页。