1 / 42

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

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

kipp
Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 流程控制与程序结构 • 顺序结构:按先后顺序依次执行 • 条件分支结构: • 由特定的条件决定执行哪个语句和程序结构 • 分单分支结构(if)、多分支结构(switch) • 循环结构 • 特定的条件决定某个语句重复执行次数的控制方式 • 分先判断后执行(while,for)、先执行后判断(do…while) • 三种结构特点:只有一个入口和一个出口

  3. 三种基本的程序结构.. ——顺序结构:通过安排语句的排列顺序来决定程序流程的程序结构 ; 语句1 语句2

  4. 三种基本的程序结构.. ——条件分支结构:由特定的条件决定执行哪个语句的程序结构。 false 条件 true 语句2 语句1

  5. 三种基本的程序结构.. ——循环结构:由特定的条件决定某个语句重复执行的次数的程序结构。 循环条件 true 循环体 false

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

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

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

  9. if 语句.. ——条件通常是一个逻辑表达式 。若不是,则一切 0 值将被转换成 false,一切非 0 值将被转换成 true。 ——语句1和 语句2可以是基本语句,也可以是复合语句 ,但必须是语句。 →

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

  11. if 语句 错误的 if 语句示例(2):if(x==100){ a=1; b=2;};else{ a=-1; b=-2;}; 多余的语句结束符(语法错误) 多余的语句结束符(逻辑错误)

  12. if 语句的嵌套.. ——在格式if(条件) 语句1〖 else 语句2〗中,若 语句1和 语句2本身也是 if 语句,就构成嵌套的if语句 。 ——第一个 else 开始,“else”总与离它最近的“if”配对 。 →

  13. if(n>0) 语句 if(a>b) z=a; 的含义? else z=b; if 语句的嵌套.. if(n>0){ if(a>b) z=a; else z=b; } if(n>0){ if(a>b) z=a; } else z=b; ?

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

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

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

  17. 例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: }

  18. 例2:输入3个数,找出其中最大一个并显示出来例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:}

  19. 例2:输入3个数,找出其中最大一个并显示出来例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;} }

  20. 例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:}

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

  22. 输入一个0~100分范围内的一个成绩,显示相应的等级输入一个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;}

  23. switch语句和switch多分支结构 • 格式: • switch (整型表达式){ • case 整型常量表达式1:语句序列1 • case 整型常量表达式2:语句序列2 • …… • case 整型常量表达式k:语句序列k • [default: 语句序列k+1]} • 说明: • 整型表达式若不是整型,则它的值将被自动转换成整型 • 整型常量表达式不是整型则,将被自动转换成整型 • 语句序列可以是空的 • break语句作用是提前结束switch语句的执行,跳出switch结构

  24. 例:输入一个表示星期的数字,显示对应的英文单词例:输入一个表示星期的数字,显示对应的英文单词 • #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;} • }

  25. 循环结构 • 先判断后执行: • for循环 • while循环 • 先执行后判断 • do……while循环

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

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

  28. 例:输入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; • } 变量 存和

  29. 连续输入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<<’*’;}

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

  31. while循环 • 格式:while(循环条件)循环体 • 功能: • 例: • int x=5; • while(x>0){ • cout<<’*’; • x-=1;}

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

  33. 例:求数列 的所有大于等于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);} cout<<”和s=”<<s;

  34. 例:求数列 的所有大于等于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;} cout<<”和s=”<<s;

  35. #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);}

  36. do……while循环 • 格式:do 循环体 while (循环条件); • 功能: • 例: • int x=5; • do {cout<<’*’; • x-=1;} • while(x>0);

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

  38. 其它流程控制 • goto语句 • 格式: • 标号:语句 • …… • goto 标号; • C++中唯一可先使用后说明 • return语句 • 格式: return [表达式]; • 无返回值的函数,可用return结束运行,若执行完语句还没有return,函数停止运行并返回调用处 • 有返回值的函数,须用return 表达式结束函数的运行,并把表达式的值返回调用处。

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

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

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

More Related