程序流程结构
C++三种最基本的程序运行结构:顺序结构、选择结构、循环结构。
一、选择结构
1. if 语句
(1)单行格式 if 语句:if (条件) {条件满足执行的语句}
(2)多行格式 if 语句:if (条件) {条件满足执行的语句} else{条件不满足执行的语句}
(3)多条件的 if 语句:if(条件1){条件1满足执行的语句} else if(语句2){条件2满足执行的语句} ......else{都不满足的执行语句}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 //选择结构 单行 if 语句 7 //用户输入分数,如果分数大于600,考上一本大学,在屏幕上输出 8 //大于500,考上二本大学,屏幕输出 9 //大于300,考上三本大学,屏幕输出 10 //小于等于300,未考上大学 11 //1.用户输入分数 12 float a=0; 13 cout << "请输入你的分数:" << endl; 14 cin >> a ; 15 16 //2.打印用户输入的分数 17 cout << "您输入分数为" << a <<endl; 18 19 //3.判断分数,如果分数大于600,考上一本大学,在屏幕上输出 20 if (a>600) 21 cout <<"恭喜考上一本" << endl; 22 else if (a>500) 23 cout <<"恭喜考上二本" << endl; 24 else if (a>300) 25 cout <<"恭喜考上三本" << endl; 26 else 27 cout<<"很遗憾"<<endl; 28 29 system("pause"); 30 return 0; 31 }
(4)嵌套 if 语句
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 //选择结构 单行 if 语句 7 //用户输入分数,如果分数大于600,考上一本大学,在屏幕上输出, 8 //在一本分数中,分数>700清华大学;分数>650人大;分数>600同济大学; 9 //大于500,考上二本大学,屏幕输出 10 //大于300,考上三本大学,屏幕输出 11 //小于等于300,未考上大学 12 //1.用户输入分数 13 float a=0; 14 cout << "请输入你的分数:" << endl; 15 cin >> a ; 16 17 //2.打印用户输入的分数 18 cout << "您输入分数为" << a <<endl; 19 20 //3.判断分数,如果分数大于600,考上一本大学,在屏幕上输出 21 if (a>600) 22 { 23 cout <<"恭喜考上一本" << endl; 24 if (a>700) 25 cout<<"恭喜考入清华"<<endl; 26 if (a>650) 27 cout<<"恭喜考入人大"<<endl; 28 if (a>600) 29 cout<<"恭喜考入同济"<<endl; 30 } 31 32 else if (a>500) 33 cout <<"恭喜考上二本" << endl; 34 else if (a>300) 35 cout <<"恭喜考上三本" << endl; 36 else 37 cout<<"很遗憾"<<endl; 38 39 system("pause"); 40 return 0; 41 }
(5)三目运算符:通过三目运算符实现简单判断
语法:表达式1 ?表达式2:表达式3
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namesspace std; int main() { //三目运算符 //创建三个变量a,将a与b作比较,将变量大的值赋给变量c int a=10,b=20,c=0; c=(a > b ? a : b); cout <<"c=" << c <<endl; //在c++中三目运算符返回的是变量,可以继续赋值 (a > b ? a : b)= 100; cout <<"a=" << a <<endl; cout <<"b=" << b <<endl; system ("pause"); return 0; } 三目运算符
注:在c++中三目运算符返回的是变量,可以继续赋值
2. switch语句
语法:
switch (表达式) { case 结果1:执行语句;break; case 结果2:执行语句;break; …… default:执行语句;break; }
注:
-
break只表示向外跳出一层
-
switch里面不一定每一个case都要对应break,也不是整个switch的执行与一定要有break,仅作说明
-
不一定需要default,所有case都不符合也可以顺序执行
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namespace std ; int main() { //给电影打分;10~9经典;8~7非常好;6~5一般;5分以下烂片。 //1.提示用户打分 cout <<"请给电影打分" <<endl; //2.用户开始打分 int score; cin >> score; cout <<"您给电影打分" << score <<endl; //3.根据用户输入的分数来提示用户最后的结果; swich (score) { case 10: cout << "经典电影" <<endl;break; //退出当前分支 case 9: cout << "经典电影" <<endl;break; case 8: cout << "非常好" <<endl;break; case 7: cout << "非常好" <<endl;break; case 6: cout << "一般" <<endl;break; case 5: cout << "一般" <<endl;break; default: cout << "烂片" <<endl;break; } system("pause"): return 0; } switch小例子
小结:
if 与 switch的区别:
(1)switch 缺点:判断时候只能是整型或字符型,不可以是一个区间
(2)switch优点:结构清晰,执行效率高
(3)case里如果没有break,那么程序会一直向下执行
二、循环结构
1. while循环语句
语法:while(循环条件)(循环语句)
ps:只要条件为真,就执行循环语句
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namespace std; int main() { int num=0; //避免死循环 while (num < 10) { cout << num <<endl; num++; } system("pause"); return 0; }
注:在执行循环语句的时候,程序必须提供跳出循环的出口,否则出现死循环
小案例:猜数字
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namespace std; #include <ctime> //time系统时间头文件 int main() { //添加随机数种子:利用当前系统时间生成随机数,防止每次随机数都一样 srand((unsigned int) time (NULL)); //1.系统生成随机数 int num=rand()%100 +1; // rand()%100生成0~99的随机数,rand不是伪随机数 //cout << num <<endl; //2.玩家进行猜测 int val =0; //3.判断玩家猜测 while(1) { cin >> val; if(num>val) { cout << "猜小了"<<endl; } else if(num<val) { cout << "猜大了"<<endl; } else { cout << "恭喜猜对了"<<endl; break; //break,可以利用该关键字来退出当前循环 } } system("pause"); return 0; } while猜数字
2. do ... while循环语句
语法:do{循环语句} while{循环条件};
注:与while的区别在于do...while会先执行一次循环语句,再判断循环条件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namespace std; int main() { //在屏幕中输出0到9 int num=0; do { cout << num <<endl; num++; } while (num < 10); //do...while先执行一次; system("pause"); return 0; }
案例:水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它自己本身.请用 do...while 写出代码。
例如:1^3+5^3+3^3=153
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namespace std; int main() { cout << "输出三位数字的水仙花数" << endl; int num = 100; do { //获取个位数 int a=num %10; //获取十位数 int b=num /10 %10; //获取百位数 int c=num/100; if (a*a*a+b*b*b+c*c*c == num) { cout << num<<endl; } num++; } while (num<1000); system ("pause"); return 0; }
3. for循环语句
语法:for(起始表达式;条件表达式;模为循环体) {循环语句};
注:起始表达式只执行一次
案例:敲桌子;
案例描述:从1开始数到数字100,如果数字个数含有7,或数字十位含有7,或者数字是7的倍数,我们打印敲桌子,其余数字直接打印输出。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namespace std; int main() { for (int i=1;i<=100;i++) { if ( i %7== 0 || i%10==7 || i/10==7) //特殊数字 { cout << "敲桌子" << endl; } else { cout << i <<endl; } } system("pause"); return 0; }
3.1 嵌套循环
在循环体中嵌套再嵌套一层循环,解决一些实际问题
注:当外层循环与内层循环的变量一致时,输出变量采用就近原则方式输出
案例:乘法口诀表
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namespace std; int main() { for (int i=1;i<=9;i++) { for (int j=1;j<=i;j++) { cout << j << "*"<< i << "="<< i*j <<" "; } cout <<endl; } system ("pause"); return 0; }
3.2 跳转语句
3.2.1 break语句:用于跳出选择结构或者循环结构
break使用的时机
-
出现在switch条件语句中,作用是终止并跳出switch
-
出现在循环语句中,作用是跳出当前的循环语句
-
出现在嵌套循环中,跳出最近的内层循环语句
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namespace std; int main() { //1.出现在switch语句中 cout << "请选择副本难度" << endl; cout << "1.普通" << endl; cout << "2.中等" << endl; cout << "3.困难" << endl; int select =0; //创建选择结果变量 cin >> select; switch(select) { case 1: cout << "您选择的是普通难度" << endl;break; case 2: cout << "您选择的是中等难度" << endl;break; case 3: cout << "您选择的是困难难度" << endl;break; default: break; } //出现在循环语句中 for (int i=0;i<10;i++) { //如果等于5,退出循环; if (i==5) break; cout << i<<endl ; } //出现在嵌套循环中 for (int m=0;m<10;m++) { for (int n=0;n<10;n++) { if (n==5) break; //退出内层循环,不影响外层循环 cout << "*" ; } cout <<endl; } system ("pause"); return 0; }
3.2.2 continue 语句:跳本次循环中余下尚未执行的语句,继续执行下一次循环。
小例子:输出奇数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namespace std; int main() { //continue 语句 for (int i=0;i<=100;i++) { //如果奇数就输出 if(i % 2 ==0) { continue; //可以筛选条件,执行到次不再执行,执行下一次循环; //break会退出循环,而continue不会 } cout << i<<endl; } system ("pause"); return 0; }
3.2.3 goto 语句:无条件跳转语句
语法:goto 标记;
解释:如果标记的名称存在,执行到goto语句时,回调到标记的位置
#include <iostream> using namespace std; int main() { cout <<"1.xxx" <<endl; cout <<"2.xxx" <<endl; goto FLAG; cout <<"3.xxx" <<endl; cout <<"4.xxx" <<endl; FLAG: //标记 cout <<"5.xxx" <<endl; system ("pause"); return 0; }
注:在程序中不建议使用goto语句,以免造成程序流程混乱。