480 likes | 731 Views
一、流程控制 控制程序中语句的执行顺序。 二、流程控制方式: 顺序控制、条件分支控制、循环控制。 三、程序结构种类: 顺序结构、条件分支结构、循环结构。. 4.1 流程控制与程序结构. 1 、顺序流程 程序中的语句按先后顺序依此执行。 如: ( 1 ) int i; ( 2 ) cin>>i; ( 3 ) cout<<i﹡2; 计算机按语句的先后顺序依此执行 ( 1 )( 2 )( 3 ). 4.1 流程控制与程序结构. 2 、条件分支结构 ( 1 )由特定的条件决定执行哪个语句。 ( 2 )分类 ☆ 单分支结构
E N D
一、流程控制 控制程序中语句的执行顺序。 二、流程控制方式: 顺序控制、条件分支控制、循环控制。 三、程序结构种类: 顺序结构、条件分支结构、循环结构。 4.1 流程控制与程序结构
1、顺序流程 程序中的语句按先后顺序依此执行。 如:(1)int i; (2)cin>>i; (3)cout<<i﹡2; 计算机按语句的先后顺序依此执行 (1)(2)(3) 4.1 流程控制与程序结构
2、条件分支结构 (1)由特定的条件决定执行哪个语句。 (2)分类 ☆单分支结构 ☆多分支结构 (3)条件分支结构用if语句或switch语句实现。 4.1 流程控制与程序结构
3、循环结构 (1)由特定的条件决定某个语句重复 执行的次数。 (2)分类 ☆先判断后执行结构 ☆先执行后判断结构 (3)循环结构用for语句, while语句或 do…while 语句来实现。 4.1 流程控制与程序结构
说明: 1、三种程序结构的共同特点: 只有一个入口和一个出口。 2、三种程序结构之间的关系: ☆衔接:一个结构的出口是另一个结构的入口。 ☆嵌套:自身嵌套、相互嵌套 4.1 流程控制与程序结构
一、if语句 格式1: 格式2: if(条件)语句1 if(条件)语句1 else 语句2 若条件为真,执行 语句1,否则什么都不做 4.2 选择语句 若条件为真,执行 语句1,否则执行语句2
说明: 1、格式中的条件通常是一个逻辑表达式,若不是,则一切0值转换为false,一切非0值转换为true。 2、格式中的语句1和语句2可以是基本语句,也可以是复合语句,但不能不是语句,也不能是多个语句。 4.2 选择语句
例1:if (x) cout<<”x is non-zero ” else cout<< ” x is zero ”; 例2:if(x==100) {a=1;b=2;}; else {a=-1;b=-2;}; 4.2 选择语句 例1:if (x) cout<<”x is non-zero ”; else cout<< ” x is zero ”; 例2:if(x==100) {a=1;b=2;} else {a=-1;b=-2;}
二、if语句的嵌套 if语句格式中的语句1和语句2本身也可以是if语句。 1、if与else的配对:从第一个else开始,else总是与离它最近的尚未配对的if进行配对。 例1:if (n>0) if(a>b) z=a; else z=b; 4.2 选择语句 if (n>0) { if(a>b) z=a; else z=b;}
例2: if(x>0) if(x>10) cout<<’A ’; else cout<< ’ B ’; else if(y<-8) if(y>-20) cout<< ’ C ’; else cout<< ’ D ’; 若x值为4,y值为-55,则输出结果为:B 4.2 选择语句
2、为了提高可读性,必要时可以把嵌套 位置放在else之后。 例: if (n>0) { if(a>b) z=a;} else z=b; 3、把永真条件或永假条件用于if语句,是一种严重的逻辑错误。 4.2 选择语句 if (n<=0) z=b; else if(a>b) z=a;
三、if多分支结构 通过规范化的if嵌套所构成的多分支结构。 4.2 选择语句 嵌套的if语句放在else之后
格式: if(条件1)语句1 else if(条件2)语句2 else if(条件3)语句3 … else if(条件n)语句n 【 else 语句n+1 】 注:多分支结构中的各个条件都应当是 相互排斥的,任意时刻顶多有一个 条件得以满足。 4.2 选择语句
例:#include<iostream.h> void main( ) { float score; cin>> score; if(score<0|| score>100) cout<< ”输入错误!”; else if (score < 60) cout<< ”不及格”; else if (score < 70) cout<< ”及格”; else if (score < 80) cout<< ”中等”; else if (score < 90) cout<< ”良好”; else cout<< ”优秀”; } 4.2 选择语句
四、switch语句和switch多分支结构 1、switch语句的格式: switch(整型表达式) {case 整型常量表达式1:语句序列1; case 整型常量表达式2:语句序列2; … case 整型常量表达式k:语句序列k; 【default:语句序列k+1 】 } 4.2 选择语句
2、执行顺序: 先计算switch语句中表达式的值,然后 在case 语句中寻找值相等的常量表达式,并以此为入口,由此开始 顺序执行。如果没有找到 相等的常量表达式,且default 后的语句n+1存在,则执行语句n+1,否则什么都不做。 4.2 选择语句
3、几点说明: (1)整型表达式如果不是整型,则它的值将自动转换为整型。 (2)整型常量表达式通常就是一个整型常量。如果不是,将自动转换为整型。 (3)case的作用只是标明一个入口以及转入该入口的条件。一旦从某个入口进入一个语句序列,就从该语句序列开始顺序执行,直到以下所有语句序列执行完毕时为止。 4.2 选择语句
4、语句序列可以是空的,即其中一个语 句也没有。 5、break语句可以提前结束switch语句的 执行。 4.2 选择语句
例:根据整型变量dayoftheweek(0-6)值输出其表示的星期几的英语单词。(无break语句) Switch(dayoftheweek) { case 0: cout<< ”Sunday”; case 1: cout<< ”Monday”; case 2: cout<< ”Tuesday”; case 3: cout<< ”Wednesday”; case 4: cout<< ”Thursday” case 5: cout<< ”Friday”; case 6: cout<< ”Saturday”; default:cout<< ”Unknown week day”; }; 4.2 选择语句
若dayoftheweek的值为4, 则输出结果为: ThursdayFridaySaturdayUnknown week day 4.2 选择语句
(有break语句) Switch(dayoftheweek) {case 0: cout<< ”Sunday”; break; case 1: cout<< ”Monday”; break; case 2: cout<< ”Tuesday”; break; case 3: cout<< ”Wednesday”; break; case 4: cout<< ”Thursday”; break; case 5: cout<< ”Friday”; break; case 6: cout<< ”Saturday”; break; default:cout<< ”Unknown week day”; break; }; 4.2 选择语句
若dayoftheweek的值为4, 则输出结果为: Thursday 4.2 选择语句
五、if多分支结构和switch多分支结构的相互替代:五、if多分支结构和switch多分支结构的相互替代: ☆替代条件: switch语句中每个非空语句序列的最后 一个语句都为break语句。 4.2 选择语句
例:switch(k) if(k==1||k==2||k==3) { cout<<’A ’; case1: else if(k==4||k==5) case2: cout<< ’ B ’; case3: cout<<’A ’;break; else cout<< ’ C ’; case4: case5: cout<< ’ B ’;break; default: cout<< ’ C ’;break; } 4.2 选择语句
if(x>=0&&x<=2) cout<<’X ’; else if(x>=20&&x<=22) cout<< ’ Y ’; else cout<< ’ Z ’; 4.2 选择语句 switch(x) {case0: case1: case2:cout<<’X ’;break; case20: case21: case22:cout<< ’ Y ’; break; default:cout<< ’ Z ’; }
一、for循环 1、 for语句构成一种先判断后执行的循环结构。 2、 for语句格式: for(循环初始化;循环条件;循环参数调整) 循环体 4.3 循环结构
说明: (1)循环条件应当是一个逻辑表达式。 (2)循环初始化和循环参数调整都应当 是具有副作用的表达式,其中循环 参数调整应当能够影响循环条件。 (3)循环体是一个语句。(可以是一个 简单语句、复合语句或空语句) 4.3 循环结构
3、执行过程: (1)进行循环初始化; (2)判断循环条件; (3)如果循环条件为真,则执行循环体、对循环参数调整,然后转向步骤(2);如果循环条件为假,则结束循环。 4.3 循环结构
4、流程图: 4.3 循环结构 例:for(int i=0;i<20;i+=5) cout<<i<<’ ’; 执行结果为: 0 5 10 15 循环初始化 N 循环条件? Y 循环体 循环参数调整
4、 几种特殊的for语句 (1)for( ;循环条件; ) 循环体 此时用while语句更好。 (2)for(循环初始化; ;循环参数调整)循环体 循环条件为空 永真条件 无限循环 4.3 循环结构 在循环体中用break语句可强制退出 在循环体中不用break语句形成死循环
(3) for(循环初始化;循环条件;循环参数调整) 循环体为空,用于延迟一段时间。 4.3 循环结构
例 输入10个数,计算并显示它们的合计。 #include<iostream.h> void main( ) { double x,s=0; //保存累加结果的变量应初始化为0 cout<<”请输入10个数: ”; for(int i=0;i<10;i++){cin>>x; s+=x;} cout<< ”合计: ” <<s; } 4.3 循环结构 若从键盘输入: 1 2 3 4 5 6 7 8 9 10 则结果为:55
例 显示输出一个三角形。 #include<iostream.h> void main( ) { for(int i=0;i<6;i++) { cout<<endl; int j; for(j=0;j<5-i;j++) cout<<’ ’; for(j=0;j<i+i+1;j++) cout<< ’* ’; } } 4.3 循环结构
例 显示输出99乘法表。 #include<iomanip.h> void main( ) { cout<<endl<<setw(3)<<”| ”; int i; for(i=1;i<10;i++) cout<<setw(3)<<i; cout<<endl<< ” --+-------------------------- ”; for(i=1;i<10;i++){cout<<endl<<setw(2)<<i<< ”| ”; for(int j=1;j<10;j++)cout<<setw(3)<<i*j;} } 4.3 循环结构
说明: 1、setw:为下一个要输出的数据设置输 出宽度,宽度值由随后的参数给出。 如:cout<<1<<setw(8)<<2<<3; 则输出结果为:1 23 2、 iomanip.h:包含setw等大多数操纵 符的定义以及iostream.h中的所有内容。 4.3 循环结构
二、while循环 1、 while 语句构成一种先判断后执行的 循环结构。 2、 while语句格式: while(循环条件) 循环体 4.3 循环结构
3、执行过程: 当循环条件为真时, 执行循环体,否则 退出循环。 4、流程图(见右上图) 4.3 循环结构 N 循环条件? Y 循环体
5、for语句和while语句的区别: (1) for语句一般用于循环次数已知的情况; (2) while语句不仅可以用于循环次数已知 的情 况,也可以用于循环次数未知的情况; (3)一切用for语句实现的循环都可以用while语句来代替,反之不可以。 (4)在循环次数已知的情况下, for语句和while语句可以相互转换。 4.3 循环结构
例:for(int i=0;i<10;i++) cout<<i; int i=0;while(i<10){cout<<i;i++;} 例:int i=20;while(i>0) cout<<i--; for(int i=20;i>0;i--)cout<<i; 4.3 循环结构
例 求数列1/2,3/4,5/8,7/16,9/32…的所有 大于等于0.000001的数据项之和,显 示输出计算的结果。 4.3 循环结构
方法一 ☆基于递推公式: #include<iostream.h> void main( ) { int n=1,d=2; double s=0.0,s0; while((s0=double(n)/d)>=0.000001) {s+=s0; n+=2; d+=d;} cout<<s; } 4.3 循环结构
方法二 ☆基于通项公式: #include<iostream.h> #include<math.h> void main( ) { int i=1; double s=0.0,s0; while((s0=(i+i-1)/pow(2,i))>=0.000001) {s+=s0; i++;} cout<<s; } 4.3 循环结构
例:设计函数double powi(double x,int n);,它计算并返回x的n次方。 #include<iostream.h> double powi(double x,int n) { double a=1; //保存累乘结果的变量应初始化为1 while(n--) a*=x; return a; } void main( ) {cout<<powi(5.0,3)<<endl<<powi(5.1,3);} 4.3 循环结构
三、do…while循环 1、 do… while 语句构成一种先执行后判断 的循环结构。 2、 do… while语句格式: do 循环体 while(循环条件); 4.3 循环结构
3、执行过程: 循环执行语句, 直到循环条件为假时, 退出循环。 4、流程图(见右上图) 5、do…while语句与while语句唯一的区别: while语句的循环体有可能一次不执行。 do…while语句的循环体至少执行一次。 4.3 循环结构 循环体 N 循环条件? Y
一、break和continue的使用 break和continue是可以在循环体中使用的控制语句。 1、 break语句 (1)格式: break; (2)功能:强制退出所在的循环语句。 2、 continue语句 (1)格式: continue; (2)功能:提前结束本轮循环体的执行。 4.4 转向语句
二、goto语句 1、作用:无条件地转移到指定标号处。 2、标号定义的格式: 标号:语句 3、转移到指定标号的格式:goto 标号; 4.4 转向语句 C++中唯一可以先使用后说明的非保留字标识符
二、return语句 1、return语句用于结束函数的运行并返回 到函数调用处。 2、无返回值的函数不使用return语句或空 return语句(return;) 3、有返回值的函数必须使用非空的return 语句( return 表达式;) 4.4 转向语句