第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析
目标 掌握顺序结构的使用; 掌握分支结构的if和switch语句的使用; 掌握循环结构语句while、do-while和for的使用; 掌握break、continue以及goto语句的使用;
内容 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析
3.1 顺序结构 顺序结构——程序运行时按照语句出现的顺 序依次执行。 数据的输入和输出 表达式语句 空语句 复合语句 顺序结构——程序运行时按照语句出现的顺 序依次执行。 最基本的顺序结构语句: 数据的输入和输出 表达式语句 空语句 复合语句 语句组1 语句组2
3.1 顺序结构 3.1.1 数据的输入和输出 1、键盘输入 cin >> 变量1 >> 变量2 … >> 变量n ; >> —— 提取运算符 输入数据之间用空格或回车换行符分隔。 作用—读取用户键入的数据,按相应变量的类型 转换成二进制代码写入内存。
3.1 顺序结构 变量名=getchar(); 3.1.1 数据的输入和输出 1、键盘输入 3.1.1 数据的输入和输出 1、键盘输入 若需输入空格或回车换行符,则可使用 getchar函数。 格式: char 变量名 变量名=getchar();
例 #include "stdafx.h" #include "iostream.h" #include "stdio.h“ int main(int argc, char* argv[]) { char Ent; int b; Ent=getchar(); b=Ent; cout<<Ent<<endl; cout<<b<<endl; return 0; } b=10; 回车,ASCII码13,"\r" 换行,ASCII码10,"\n"
顺序结构 3.1.1 数据的输入和输出 2、屏幕输出 作用:从内存读取数据项的值,转换成相应的字符 串显示到屏幕上。 3.1.1 数据的输入和输出 2、屏幕输出 作用:从内存读取数据项的值,转换成相应的字符 串显示到屏幕上。 cout << 表达式1 << 表达式2 … << 表达式n ; << —— 流插入运算符 输出信息顺序:从左到右 各输出项的计算顺序:从右向左
3.1 顺序结构 2、屏幕输出 其他语句: putchar(字符型) 其他输出控制符: 控制符 功能 endl 输出一个新行符,并清空流 setw ( int n ) 设置输出宽度 setfill ( char c ) 设置填充符c setprecision ( int n ) 设置浮点数输出精度(包括小数点)
P48 例3.2 #include "stdafx.h" #include <iostream> #include <iomanip> using namespace std; int main(int argc, char* argv[]) { int a=8123,b=32,c=123; double pi=3.141593; cout<<"123456789012345"<<endl; cout<<setw(3)<<a<<setw(4)<<b<<setw(5)<<c<<endl; cout<<setfill('#'); cout<<setw(10)<<setprecision(8)<<pi<<endl; return 0; }
3.1 顺序结构 3.1.2 表达式语句 任何表达式加上一个分号成表达式语句。 例如 a = 10 ; i ++ ; z=x – y ; 3.1.2 表达式语句 任何表达式加上一个分号成表达式语句。 例如 a = 10 ; i ++ ; z=x – y ; { t = a ; a = b ; b = t ; } ……
3.1 顺序结构 3.1.3 空语句 表达式为空的语句。 格式: ;
3.1 顺序结构 3.1.4 复合语句 用一对花括号“{ }”将多条语句括起来而构成 的一个逻辑语句。 例如: { int a=5; 3.1.4 复合语句 用一对花括号“{ }”将多条语句括起来而构成 的一个逻辑语句。 例如: { int a=5; cout<<a<<endl; int b=10; cout<<a+b<<endl; }
内容 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析
钢球自动分拣系统 钢球仓 目标钢球 分拣仓 A 摄像头 反射坪 B 计算机 C
分支结构的实现语句 单分支 双分支 多分支 分支结构的两种实现语句 if switch
单分支结构 if( 表达式 ) { 语句组 } 若语句组中只有1条语句,可省略“{ }” if语句实现 真(非0) 假 (0) 表达式
例: #include "stdafx.h" #include <iostream> #include <iomanip> using namespace std; void main() { char ch1,ch2; cin>>ch1; if(ch1>='A'&&ch1<='Z') ch2=ch1-'A'+'a'; cout<<setw(4)<<ch1<<setw(4)<<ch2<<endl; } 输入字符 单分支选择 将输入的大写字母转换成小写字母。 输出间隔 输出字符
双分支结构 若语句组中只有1条语句,可省略“{ }” if语句实现 真(非0) 假(0) if( 表达式 ) { 表达式 语句组1 } else 语句组2 假(0) 语句组1 语句组2 若语句组中只有1条语句,可省略“{ }”
例:判断闰年 输入一个年份,判断它是否是闰年,给出相应的提示 int main(int argc, char* argv[]) { int year; cout<<"Input the year:"; cin>>year; if(year%4==0&&year%100!=0||year%400==0) cout<<year<<" is a leap year"<<endl; else cout<<year<<" is not a leap year!"<<endl; return 0; } 闰年是可以被4整除而不能被100整除,或者能被400整除的年份。 闰年的判断
多分支结构—第一种实现方式 if语句的第一种实现方式 if( 表达式1 ) { if( 表达式2 ) if( 表达式3 ) { 语句组1; } { 语句组3; } else { 语句组2; } { 语句组4; } } 注意:else的配对方式—“就近原则” 表达式2 真(非0) 假(0) 语句组1 语句组2 语句组3 语句组4 表达式3 表达式1
例: #include "stdafx.h" #include"stdio.h" #include<iostream> using namespace std; int main(int argc, char* argv[]) { int x,y; cout<<"Input two integrals:"; cin>>x>>y; cout<<"x="<<x<<"y="<<y<<endl; if(x!=y) { if(x>y) cout<<"x>y"<<endl; else cout<<"x<y"<<endl; } else cout<<"x=y"<<endl; return 0; 当x和y不相等时 当x>y时 当x<y时 当x和y相等时 输入两个整数
多分支结构—第二种实现方式 if语句的第二种实现方式 if(表达式1) { 语句组3 } { 语句组1 } …… { 语句组3 } { 语句组1 } …… else if (表达式2) else if (表达式n) { 语句组2 } { 语句组n } else if (表达式3) else 语句n+1 if语句的第二种实现方式 语句组2 语句组4 表达式2 表达式1 真(非0) 假(0) 表达式3 语句组3 语句组1
例: int main(int argc, char* argv[]) { int score; cout<<"Input scores:"; cin>>score; if(score>=90) cout<<"A"<<endl; else if (score>=80) cout<<"B"<<endl; else if (score>=70) cout<<"C"<<endl; else if (score>=60) cout<<"D"<<endl; else cout<<“E"<<endl; return 0; } 要求:对学生的成绩进行评定。 90以上 输出 A 89 — 80 输出 B 79 — 70 输出 C 69 — 60 输出 D 59以下 输出 E 多分支选择
Switch语句 switch case default break switch语句用于实现多分支结构,程序更加简 后跟表达式 后跟数值选择路径 默认路径 跳出机制 case2 default switch case3 case1
Switch语句 switch ( 表达式 ) { case 常量1: 语句组1; case 常量2: 语句组2; …… break; case 常量n: 语句组n; default : 语句组n+1; } break; break; break;
例: void main(void ) { int i=10; switch(i) { case 9: i++; case 10: i++; default: i++; } cout<<“i=”<<i<<endl; i=11 i=12 i=13 i=13
思考题: 如何利用C++的分支结构模拟物流自动分拣系统? 网络课程平台http://course.cn/G2S/Template/View.aspx?action=view&courseType=0&courseId=2272
内容 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析
这幅地图上有几种颜色? 地图四色猜想 地图四色定理 1852年,英国伦敦大学学生格斯里提出 1976年,美国伊利诺伊斯大学通过计算机进行了100亿次循环, 耗时1200个小时,证明成立 地图四色定理
循环结构的作用 循环结构的作用就是让程序重复地执行某些语句。 采用循环结构可以降低程序书写的长度。 采用循环结构可使复杂问题简单化。 采用循环结构可以提高程序的可读性和执行速度。
循环结构的实现方式 while循环 循环结构 do-while循环 for循环
while循环 while( 表达式 ) { 循环体语句; } 若循环体中只有1条语句,可省略“{ }” while语句实现 假(0) 真(非0) 循环体语句 若循环体中只有1条语句,可省略“{ }”
例: 输出:21 循环条件 int k=2; while(k!=0) cout<<k, k--; cout<<endl; 循环语句为单语句,无需括号。 k 循环条件 输出 2 1 真 真 假 输出:21 2 1 回车
例: 1 2 3 void main(void) 循环条件 循环语句为多重语句,需要括号。 { int num=0; while(num<=2) { num++; cout<<num<<endl; } cout<<endl; 循环条件 循环语句为多重语句,需要括号。 1 2 3 num 循环条件 输出 1 2 3 真 真 真 假 1 2 3 回车
do-while循环结构 do { 循环体语句; } while (表达式); 若循环体语句只有1条语句,可省略“{ }” 真(非0) 假(0) do-while语句实现 do { 循环体语句; } while (表达式); 若循环体语句只有1条语句,可省略“{ }”
例: 编程计算sum=1+1/2+1/3+…+1/100的值 int main(int argc, char* argv[]) { int i=1; double sum=0.0; while (i<=100) sum+=1.0/i; i++; } cout<<"sum="<<sum<<endl; return 0; int main(int argc, char* argv[]) { int i=1; double sum=0.0; do sum+=1.0/i; i++; } while(i<=100); cout<<"sum="<<sum<<endl; return 0; 循环条件 先执行再判断 先判断再执行 循环条件 分号不可少
例:用while循环求解圆周率 π=C/d=3.1415926…. 祖冲之的割圆法 如何用编程的方法计算圆周率? 日期 计算者 纪录 前3世纪 阿基米德 π=3.1418 公元前20年 维特鲁威 π= 3.125 130年 张衡 π=3.162277... 150年 托勒密 π=3.141666... 250年 王蕃 π=3.155555... 263年 刘徽 π=3.14159 480年 祖冲之 3.1415926 <π< 3.1415927 1400年 Madhava π=3.14159265359 如何用编程的方法计算圆周率?
例:求解圆周率 算法分析 分子都是1 分母是奇数 分母从1开始 偶数项符号为负 奇数项符号为正 Leibniz定理: 高斯积分: 欧拉公式: 斯特林公式: 偶数项符号为负 欧拉公式: 奇数项符号为正
例:求解圆周率 用while循环实现程序: 计算结果 如何用do-while循环实现程序? #include <iostream.h> void main() { int i=1, d=1; float s=0; while((float)i<=1e06) s+=(float)d/(i*2-1); d=-d; i++; } cout<<“PI=”<<s*4; 用while循环实现程序: 计算结果 控制循环次数 分母的计算 控制符号 如何用do-while循环实现程序?
作业题: 利用循环结构编写程序验证? 哥德巴赫猜想: 一个不小于6的偶数可以表示为两个素数之和。 例如:6=3+3, 8=3+5, 10=3+7… 利用循环结构编写程序验证? 网络课程平台http://course.cn/G2S/Template/View.aspx?action=view&courseType=0&courseId=2272