42
第第第 C++ 第第第第第第第

第三章 C++ 程序的流程控制

  • Upload
    kipp

  • View
    79

  • Download
    9

Embed Size (px)

DESCRIPTION

第三章 C++ 程序的流程控制. 流程控制与程序结构. 顺序结构:按先后顺序依次执行 条件分支结构: 由特定的条件决定执行哪个语句和程序结构 分单分支结构 (if) 、多分支结构 (switch) 循环结构 特定的条件决定某个语句重复执行次数的控制方式 分先判断后执行 (while,for) 、先执行后判断 (do…while) 三种结构特点:只有一个入口和一个出口. 三种基本的程序结构. —— 顺序结构:通过安排语句的排列顺序来决定程序流程的程序结构 ;. 语句1. 语句2. 三种基本的程序结构. - PowerPoint PPT Presentation

Citation preview

Page 1: 第三章   C++ 程序的流程控制

第三章 C++ 程序的流程控制

Page 2: 第三章   C++ 程序的流程控制

流程控制与程序结构 顺序结构:按先后顺序依次执行 条件分支结构:

由特定的条件决定执行哪个语句和程序结构 分单分支结构 (if) 、多分支结构 (switch)

循环结构 特定的条件决定某个语句重复执行次数的控制方式 分先判断后执行 (while,for) 、先执行后判断 (do…

while) 三种结构特点:只有一个入口和一个出口

Page 3: 第三章   C++ 程序的流程控制

三种基本的程序结构 ..语句语句 11

语句语句 22

—— 顺序结构:通过安排语句的排列顺序来决定程序流程的程序结构 ;

Page 4: 第三章   C++ 程序的流程控制

三种基本的程序结构 ..• —— 条件分支结构:由特定的条件决定

执行哪个语句的程序结构。truetruefalsefalse 条件条件

语句语句 22 语句语句 11

Page 5: 第三章   C++ 程序的流程控制

三种基本的程序结构 .. —— 循环结构:由特定的条件决定某个

语句重复执行的次数的程序结构。

trutruee 循环体循环体

falsefalse

循环条件循环条件

Page 6: 第三章   C++ 程序的流程控制

三种基本的程序结构• —— 共同特点:每种结构只有一个入口和一个出口,可以相互嵌套。

Page 7: 第三章   C++ 程序的流程控制

条件分支结构 if 结构(两分支) switch 结构(多分支)

Page 8: 第三章   C++ 程序的流程控制

if 语句 ..• —— 格式:if( 条件 ) 语句 1 〖 else 语句 2 〗

条件条件语句语句 11

truetrue

falsfalsee

truetruefalsefalse 条件条件语句语句 22 语句语句 11

Page 9: 第三章   C++ 程序的流程控制

if 语句 ..→→• —— 条件 通常是一个逻辑表达式 。

若不是,则一切 0 值将被转换成 false ,一切非 0 值将被转换成 true 。

• —— 语句 1 和 语句 2 可以是基本语句,也可以是复合语句 ,但必须是语句。

Page 10: 第三章   C++ 程序的流程控制

if 语句 .. 错误的 if 语句示例( 1 ): if(x) cout<<"x is non-zero“else cout<<"x is zero";

缺语句结束符缺语句结束符 ;;

Page 11: 第三章   C++ 程序的流程控制

if 语句• 错误的 if 语句示例( 2 ):if(x==100){ a=1; b=2;};else{ a=-1; b=-2;};

多余的语句结束多余的语句结束符(语法错误)符(语法错误)

多余的语句结束多余的语句结束符(逻辑错误)符(逻辑错误)

Page 12: 第三章   C++ 程序的流程控制

if 语句的嵌套 ..• —— 在格式

if( 条件 ) 语句 1 〖 else 语句 2 〗中,若 语句 1 和 语句 2 本身也是 if 语句,就构成嵌套的 if语句 。

• —— 第一个 else 开始,“ else”总与离它最近的“ if”配对 。

→→

Page 13: 第三章   C++ 程序的流程控制

• if(n>0)• 语句 if(a>b) z=a; 的含义 ? • else z=b;

if 语句的嵌套 ..

if(n>0){ if(n>0){ if(a>b) z=a; if(a>b) z=a; else z=b; else z=b;

}}

if(n>0){ if(n>0){ if(a>b) z=a; if(a>b) z=a; }}

else z=b;else z=b;

??

Page 14: 第三章   C++ 程序的流程控制

if 语句的嵌套 ..• —— 最好只在 else 后嵌套if(n>0){ if(n>0){ if(a>b) z=a; if(a>b) z=a;} } else z=b;else z=b; if(n<=0)

z=b; else if(a>b) z=a;

n>0 的相反条件

Page 15: 第三章   C++ 程序的流程控制
Page 16: 第三章   C++ 程序的流程控制

if 结构 格式: if( 条件 ) 语句 1[else 语句 2] 功能:条件成立执行语句 1 ,否则执行 else 后的语句 2 语句 1 、 2 可以是基本语句,也可以是复合语句 例: P53 条件不能是永真或永假条件 , 否则出现逻辑错误 C++ 的写法:

if (ok) …… // 如果 ok 为真,则…… if (!ok)…… // 如果 ok 为假,则……

Page 17: 第三章   C++ 程序的流程控制

if 结构 (if 语句的嵌套 ) if(n>0)if(a>b) z=a;else z=b; else 总是与离它最近的 if 配对

Page 18: 第三章   C++ 程序的流程控制

例 1: 输入 2 个数,找出其中最大一个并显示出来 1 : #include< iostream.h> 2: 3: void main( ) 4: { 5: int i, j; 6: cout<<“ 请输入 2 个整数:” ; 7: cin>>i>>j; 8: cout<<“2 个数中最大的是”; 9: if(i>j) 10: cout<<i<<endl; 11: else 12: cout<<j<<endl; 13: }

Page 19: 第三章   C++ 程序的流程控制

例 2 :输入 3 个数,找出其中最大一个并显示出来 1:#include<iostream.h> 2: 3:void main( ) 4:{ 5:int i,j,k,m; 6:cout<<“ 请输入 3 个整数:”; 7:cin>>i>>j>>k; 8:cout<<“3 个数中最大的是”; 9:if (i<j)i=j; 10:if(i<k)i=k; 11:cout<<i<<endl; 12:}

Page 20: 第三章   C++ 程序的流程控制

例 2 :输入 3 个数,找出其中最大一个并显示出来#include<iostream.h>void main( ){int i,j,k;cout<<“ 请输入 3 个整数:”;cin>>i>>j>>k;cout<<“3 个数中最大的是”;if(i>j){// 若条件成立则 j 被排除 , 问题变成“从 i 和 k 中找出最大者”if(i=k) cout<<i<<endl;else cout<<k<<endl;}else{// 若条件不成立则被 i 排除,问题变成“从 j 和 k 中找出最大者if(j>=k) cout<<j<<endl;else cout<<k<<endl;}}

Page 21: 第三章   C++ 程序的流程控制

例 3 输入 3 个数,然后按从大到小的顺序把它们显示出来 1:#include<iostrean.h> 2: 3:void main( ) 4:{ 5:int i,j,k,p; 6:cout<<“ 请输入 3 个整数:”; 7:cin>>i>>j>>k; 8:if(i<j){p=i;i=j;j=p;} 9:if(i<k){p=i;i=k;k=p} 10:if(j<k){p=j;j=k;k=p;} 11:cout<<endl<<i<<’’<<j<<’’<<k; 12:}

Page 22: 第三章   C++ 程序的流程控制

if 多分支结构 if (条件 1 ) 语句 1 else if ( 条件 2) 语句 2 else if ( 条件 3) 语句 3 …… else if ( 条件 n) 语句 n [else 语句 n+1]

Page 23: 第三章   C++ 程序的流程控制

输入一个 0~100 分范围内的一个成绩,显示相应的等级 #include<iostream.h> void main( ){ float score; cout<<“ 请输入成绩 :”; cin>>score; if(score<0||score>100) cout<<“ 成绩必须在 0~100 分之间” ; else if (score<60) cout<<“ 不及格” <<endl; else if (score<70) cout<<‘” 及格” <<endl; else if (score<80) cout<<“ 中” <<endl; else if (score<90) cout<<“ 良” <<endl; else cout<<“ 优” <<endl;}

Page 24: 第三章   C++ 程序的流程控制

switch 语句和 switch 多分支结构 格式 :

switch ( 整型表达式 ){ case 整型常量表达式 1: 语句序列 1 case 整型常量表达式 2: 语句序列 2 …… case 整型常量表达式 k: 语句序列 k [default: 语句序列 k+1]}

说明 : 整型表达式若不是整型 , 则它的值将被自动转换成整型 整型常量表达式不是整型则 , 将被自动转换成整型 语句序列可以是空的 break 语句作用是提前结束 switch 语句的执行 , 跳出 switch 结构

Page 25: 第三章   C++ 程序的流程控制

例 : 输入一个表示星期的数字 , 显示对应的英文单词 #include<iostream.h> void main(){ int weekday; cout<<“ 今天星期几 ?”; cin>>weekday; switch(weekday){ case 0 : cout<<“Sunday”<<endl;break; case 1 : cout<<“Monday”<<endl;break; case 2 : cout<<“Tuesday”<<endl;break; case 3 : cout<<“Wednesday”<<endl;break; case 4 : cout<<“Thursday”<<endl;break; case 5 : cout<<“Friday”<<endl;break; case 6 : cout<<“Saturday”<<endl;break; default: cout:<<“ 表示星期几的数须在 0~6 之间” <<endl;break;} }

Page 26: 第三章   C++ 程序的流程控制

循环结构 先判断后执行 :

for 循环 while 循环

先执行后判断 do……while 循环

Page 27: 第三章   C++ 程序的流程控制

for 循环 格式: for( 初始化;条件;参数调整 ) 循环体 功能: 说明:

括号内决定了循环次数 条件:逻辑表达式 初始化,参数调整:具有副作用的表达式,其中后者能影响条件 循环体:基本语句、复合语句、空语句 先判断后执行,若条件不成立,循环体一次也不执行

步长

Page 28: 第三章   C++ 程序的流程控制

for 循环用法说明 for( ;条件; ) …… 等同于 while( 条件 ) for(… ;;… )…… 循环条件为空即为永真条件,循环体中必须有 break 循环体为空可用于延时操作 for(int I=0;I<5;I++) cout<<I<<endl; for(int I=0;I<5;I++) cout<<’*’<<endl;

for(int I=0;I<2;I++){for(int j=0;j<3;j++)cout<<I+j<<endl;}

Page 29: 第三章   C++ 程序的流程控制

例:输入 10 个数,计算并显示它们的和 #include<iostream.h> void main(){ double x,s=0; cout<<“ 请输入 10 个数 :”; for(int I=0;I<10;I++){cin>>x; s+=x;} cout<<“ 合计 :”<<s; }

变量 存和

Page 30: 第三章   C++ 程序的流程控制

连续输入 5 个 * (横向 \ 纵向 \ 斜向) for(int I=0;I<5;I++)cout<<’*’; for(int I=0;I<5;I++)cout<<’*’<<endl;for(int I=0;I<5;I++){cout<<endl;for(int j=0;j<I;j++)cout<<’ ’;cout<<’*’;}

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<<’*’;}

Page 31: 第三章   C++ 程序的流程控制

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;}

Page 32: 第三章   C++ 程序的流程控制

while 循环 格式: while( 循环条件 ) 循环体 功能: 例:

int x=5; while(x>0){ cout<<’*’; x-=1;}

Page 33: 第三章   C++ 程序的流程控制

例题 int I,s; for(I=s=0;I<12;I++)s+=I; while(--I>5)s+=I; cout<<s;

Page 34: 第三章   C++ 程序的流程控制

例:求数列 的所有大于等于 0.000001 的数据项之和并显示之 利用通项公式

int n=1; double s=0.0,a; a=(2*n-1)/pow(2,n); while (a>=0.000001) {s=s+a; n=n+1; a=(2*n-1)/pow(2,n);}

329,

167,

85,

43,

21

cout<<” 和 s=”<<s;

Page 35: 第三章   C++ 程序的流程控制

例:求数列 的所有大于等于 0.000001 的数据项之和并显示之

递推公式int n=1,d=2;double s=0.0,a;while(a=double(n)/d>=0.000001){s+=a;n+=2;d*=2;}

329,

167,

85,

43,

21

cout<<” 和 s=”<<s;

Page 36: 第三章   C++ 程序的流程控制

#include<iostream.h> double powi(double x,int n) {double a=1; while(n--) a*=x; return a;} void main( ) {cout<<powi(5.0,3);}

Page 37: 第三章   C++ 程序的流程控制

do……while 循环 格式: do 循环体 while ( 循环条件 ) ; 功能: 例:

int x=5; do {cout<<’*’; x-=1;} while(x>0);

Page 38: 第三章   C++ 程序的流程控制

循环结构的特殊控制 break : 强制退出循环,执行循环语句的下一个诗句 continue: 提前结束本轮循环体的执行 例题: 3.16 (P77)

Page 39: 第三章   C++ 程序的流程控制

其它流程控制 goto 语句

格式: 标号:语句 …… goto 标号;

C++ 中唯一可先使用后说明 return 语句

格式: return [ 表达式 ] ; 无返回值的函数,可用 return 结束运行,若执行完语句还没有 return ,函数停止运行并返回调用处 有返回值的函数,须用 return 表达式结束函数的运行,并把表达式的值返回调用处。

Page 40: 第三章   C++ 程序的流程控制

小结 顺序结构、条件分支结构、循环结构,三种结构可相互衔接和嵌套,构成任意复杂程序。 条件分支结构及 if 嵌套 循环结构 其它: continue 、 break 、 goto 、 return

Page 41: 第三章   C++ 程序的流程控制

#include<iostream.h> void main(){ int n=10,y=1; while(n--){y++;++y} cout<<"y*y="<<y*y<<endl;

Page 42: 第三章   C++ 程序的流程控制

void main() { int s1=0,s2=0; for(int i=0;i<10;i++) if(i%2)s1+=i; else s2+=i; cout<<s1<<' '<<s2;}