程序流程结构
C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构
- 程序结构:程序按顺序执行,不发生跳转
- 选择结构:依据条件是否满足,有选择的执行相应功能
- 循环结构:依据条件是否满足,循环多次执行某段代码
1.1 选择结构
1.1.1 if语句
作用:执行满足条件的语句
if语句的三种形式
- 单行格式的if语句
- 多行格式的if语句
- 多条件的if语句
1 单行格式的if语句if(条件){满足条件的执行语句}
代码示例
int main()
{
//用户输入分数,如果分数大于600,则输出,考上一本大学
//1、用户输入分数
int score = 0;
cout << "请输入一个分数:" << endl;
cin >> score;//从键盘输入分数
//2、打印输入的分数
cout << "您输入的分数是" << score << endl;
//3、判断分数是否大于600,如果大于,则输出
//注意,if条件后面不要加分号,否则,{}里的执行语句都会被执行
if (score > 600)
{
cout << "恭喜您考上了一本大学!!!" << endl;
}
}
结果:
2 多行格式if语句:if(条件){条件满足执行的语句}else{条件不满足的执行语句}
代码示例:
int main()
{
//用户输入分数,如果分数大于600,则输出,考上一本大学,如果没考上,则打印未考上一本大学
//1、用户输入分数
int score = 0;
cout << "请输入一个分数:" << endl;
cin >> score;//从键盘输入分数
//2、打印输入的分数
cout << "您输入的分数是" << score << endl;
//3、判断分数是否大于600,如果大于,则输出
//注意,if条件后面不要加分号,否则,{}里的执行语句都会被执行
if (score > 600)
{
cout << "恭喜您考上了一本大学!!!" << endl;
}
else
{
cout << "未考上一本大学" << endl;
}
return 0;
}
结果:
3 多条件的if语句if(条件1){条件1满足执行的语句}else if(条件2){条件2满足的执行语句}else{都不满足执行的语句}
代码示例:
int main()
{
/*
用户输入分数,如果分数大于600,则输出,考上一本大学,
如果没考上,则打印未考上一本大学,大于500,则考上二本大学,
大于400分,则考上三本大学,小于等于400分,则未考上本科
*/
//1、用户输入分数
int score = 0;
cout << "请输入一个分数:" << endl;
cin >> score;//从键盘输入分数
//2、打印输入的分数
cout << "您输入的分数是" << score << endl;
//3、判断分数是否大于600,如果大于,则输出
//注意,if条件后面不要加分号,否则,{}里的执行语句都会被执行
if (score > 600)
{
cout << "恭喜您考上了一本大学!!!" << endl;
}
else if(score>500)
{
cout << "考上二本大学" << endl;
}
else if (score > 400)
{
cout << "考上三本大学" << endl;
}
else {
cout << "未考上本科" << endl;
}
}
结果1:
结果2:
注意:else if可以写n个!,但要根据实际情况来写
3.1 嵌套if语句
作用:在if语句中,再嵌套使用if语句,达到更精确的条件判断。
案例:
提示用户输入一个高考成绩,根据成绩做判断:
分数如果大于600分,则考上一本,大于500分,则考上二本,大于400分,考上三本,其余的视为未考上本科;
其中,在一本分数中,如果大于700分,则考上北大,大于650分,考上浙大,大于600分,考上人大。
int main()
{
/*
提示用户输入一个高考成绩,根据成绩做判断:
分数如果大于600分,则考上一本,大于500分,则考上二本,大于400分,考上三本,其余的视为未考上本科;
其中,在一本分数中,如果大于700分,则考上北大,大于650分,考上浙大,大于600分,考上人大
*/
//1、用户输入分数
int score = 0;
cout << "请输入一个分数:" << endl;
cin >> score;//从键盘输入分数
//2、打印输入的分数
cout << "您输入的分数是" << score << endl;
//3、判断分数是否大于600,如果大于,则输出
//注意,if条件后面不要加分号,否则,{}里的执行语句都会被执行
if (score > 600)
{
cout << "恭喜您考上了一本大学!!!" << endl;
//开始if语句的嵌套
if (score > 700)
{
cout << "恭喜您考上了北京大学!!!" << endl;
}
else if(score > 650)
{
cout << "恭喜您考上了浙江大学!!!" << endl;
}
else
{
cout << "恭喜您考上了人民大学!!!" << endl;
}
}
else if (score > 500)
{
cout << "考上二本大学" << endl;
}
else if (score > 400)
{
cout << "考上三本大学" << endl;
}
else {
cout << "未考上本科" << endl;
}
return 0;
}
结果1:
结果2:
1.1.2 三目运算符
作用:通过三目运算符实现简单的判断
语法:表达式1?表达式2:表达式3
解释:
- 如果表达式1的值为真,执行表达式2,并返回表达式2的结果
- 如果表达式1的值为假,执行表达式3,并返回表达式3的结果
注意:三目运算符返回的是变量
代码示例:
int main()
{
/*
需求:创建3个变量a b c,将a和b作比较,将变量大的值赋值给变量c
*/
int a = 10;
int b = 20;
int c = 0;
c=(a > b) ? a : b; //先做a>b的运算,如果为真,则a赋值给c,否则,c=b=20。程序中a>b为假,返回b
cout << "c=" << c << endl;
//在C++中三目运算符返回的是变量,可以继续赋值,比如:
(a > b) ? a : b = 100;
cout << "a=" << a <<" , " << "b="<< b << endl;
return 0;
}
结果:
1.1.3 switch语句
作用:执行多条件分支语句
语法:
switch(表达式)
{
case 结果1:执行语句;break
case 结果2:执行语句;break
...
default:执行语句;break
}
代码示例:
int main()
{
/*
案例:给电影打分
10~9:经典
8~7:非常好
6~5:一般
5分以下:烂片
*/
//1、提示用户评分
//
cout<<"请给电影评分:" << endl;
//2、用户开始进行打分
int score = 0;
cin >> score;
cout << "您打的分数是:" << score<<endl;
//3、根据用户输入的分数告诉用户结果
switch (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://代表以上条件都没有找到,相当于最后一个else
cout << "烂片" << endl;
break;
}
//switch缺点:在判断时只能是整型或字符型,不能是区间
//switch优点:结构清晰,执行效率高(相比于if)
return 0;
}
结果1:
结果2:
1.2 循环结构
1.2.1 while循环
作用:满足循环条件,执行循环语句
语法:while(循环条件){循环语句}
解释:只要循环条件结果为真,就执行循环语句
代码示例:
int main()
{
//小技巧,生成随机数
srand((unsigned int)time(NULL));
int num = rand() % 100;//生成0-99的随机数
cout << num << endl;
//在屏幕中打印0-9这10个数字
int num = 0;
while (num <10)
{
cout << num << endl;
num++;
}
return 0;
}
结果:
注意:while(1)代表无限循环,因为“1”为真
1.2.2 do…while语句
作用:满足循环条件,执行循环语句
语法:do{循环语句}while{循环条件}
注意:与while的区别在于do…while会先执行一次循环语句,再判断循环条件
int main()
{
/*
案例:在屏幕中输出0-9这10个数字
*/
int num = 0;
do
{
cout << num << endl;
num++;
} while (num < 10);
return 0;
}
结果:
1.2.3 for循环
作用:满足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾循环体){循环语句;}
代码示例:
int main()
{
//从数字0打印到数字9
//第一种写法
for (int i = 0; i < 10; i++)
{
cout << i << endl;
}
cout << "============" << endl;
//第二种写法
int i = 0;
for (; i < 10;i++) //()里面的表达式都可以拆分
{
cout << i << endl;
}
return 0;
}
结果:
1.2.4 嵌套循环
作用:在循环体中再嵌套一层循环,解决一些实际问题
代码示例:
int main()
{
//利用嵌套循环打印星图
//外层循环
for (int i = 0; i < 10; i++)//注意,i和j最好不一样
{
//内层循环
for (int j = 0; j < 10; j++)//打印一行星图
{
cout << "* ";
}
cout << endl;
}
return 0;
}
结果:
嵌套循环案例:打印九九乘法表
代码示例:
int main()
{
//打印行数
for (int i = 1; i <= 9; i++)
{
//cout << i << endl;
for (int j = 1; j <= i; j++)
{
cout << j<<"*"<<i<<"="<<j*i<<" ";//列数*行数=结果
}
cout << endl;
}
return 0;
}
运行结果:
1.3 跳转语句
1.3.1 break语句
作用:用于跳出选择结果或循环结构
break使用的时机:
- 出现在switch语句中,作用是终止case并跳出switch
- 出现在循环语句,作用是跳出当前的循环结构
- 出现在嵌套循环中,跳出最近的内层循环结构
代码示例:
int main()
{
//break的使用时机
//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;//break跳出case选择
case 2:cout << "您选择的是中等难度" << endl; break;
case 3:cout << "您选择的是困难难度" << endl; break;
default:
break;
}
//2、出现在循环语句中
//
for (int i = 0; i < 9; i++)
{
cout << i << endl;
if (i == 5)//比如i=5时退出循环
{
break;
}
}
//3、出现在嵌套循环语句中
//*图
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
cout << "*";
if (j == 5) //退出循环
{
break; //退出内层循环,不会影响外层循环
}
}
cout << endl;
}
return 0;
}
结果
1.3.2 continue语句
作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
代码示例:
int main()
{
//continue
for (int i = 0; i < 100; i++)
{
//如果是奇数输出,偶数不输出
if (i % 2 == 0)
{
continue; //不进行后面代码的执行,直接进入下一次循环
}
cout << i << endl;
}
return 0;
}
结果:
1.3.3 goto语句
作用:可以无条件跳转语句
语法:goto 标记;
解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置
代码示例:
int main()
{
//goto
cout << "1、XXX" << endl;
cout << "2、XXX" << endl;
goto FLAG; //运行1,2后,直接去第5个
cout << "3、XXX" << endl;
cout << "4、XXX" << endl;
FLAG: //标记,直接执行第5个
cout << "5、XXX" << endl;
return 0;
}
结果:
注:建议不要使用goto语句,很烦很乱!
本章所有代码:
#include<iostream>
#include<string>
using namespace std;
//选择结构 单行if语句
void single_line_if()
{
//用户输入分数,如果分数大于600,则输出,考上一本大学
//1、用户输入分数
int score = 0;
cout << "请输入一个分数:" << endl;
cin >> score;//从键盘输入分数
//2、打印输入的分数
cout << "您输入的分数是" << score << endl;
//3、判断分数是否大于600,如果大于,则输出
//注意,if条件后面不要加分号,否则,{}里的执行语句都会被执行
if (score > 600)
{
cout << "恭喜您考上了一本大学!!!" << endl;
}
}
//选择结构 多行if语句
void muti_line_if()
{
//用户输入分数,如果分数大于600,则输出,考上一本大学,如果没考上,则打印未考上一本大学
//1、用户输入分数
int score = 0;
cout << "请输入一个分数:" << endl;
cin >> score;//从键盘输入分数
//2、打印输入的分数
cout << "您输入的分数是" << score << endl;
//3、判断分数是否大于600,如果大于,则输出
//注意,if条件后面不要加分号,否则,{}里的执行语句都会被执行
if (score > 600)
{
cout << "恭喜您考上了一本大学!!!" << endl;
}
else
{
cout << "未考上一本大学" << endl;
}
}
//选择结构 多条件if语句
void muti_condition_if()
{
/*
用户输入分数,如果分数大于600,则输出,考上一本大学,
如果没考上,则打印未考上一本大学,大于500,则考上二本大学,
大于400分,则考上三本大学,小于等于400分,则未考上本科
*/
//1、用户输入分数
int score = 0;
cout << "请输入一个分数:" << endl;
cin >> score;//从键盘输入分数
//2、打印输入的分数
cout << "您输入的分数是" << score << endl;
//3、判断分数是否大于600,如果大于,则输出
//注意,if条件后面不要加分号,否则,{}里的执行语句都会被执行
if (score > 600)
{
cout << "恭喜您考上了一本大学!!!" << endl;
}
else if(score>500)
{
cout << "考上二本大学" << endl;
}
else if (score > 400)
{
cout << "考上三本大学" << endl;
}
else {
cout << "未考上本科" << endl;
}
}
//嵌套if
void nest_if()
{
/*
提示用户输入一个高考成绩,根据成绩做判断:
分数如果大于600分,则考上一本,大于500分,则考上二本,大于400分,考上三本,其余的视为未考上本科;
其中,在一本分数中,如果大于700分,则考上北大,大于650分,考上浙大,大于600分,考上人大
*/
//1、用户输入分数
int score = 0;
cout << "请输入一个分数:" << endl;
cin >> score;//从键盘输入分数
//2、打印输入的分数
cout << "您输入的分数是" << score << endl;
//3、判断分数是否大于600,如果大于,则输出
//注意,if条件后面不要加分号,否则,{}里的执行语句都会被执行
if (score > 600)
{
cout << "恭喜您考上了一本大学!!!" << endl;
//开始if语句的嵌套
if (score > 700)
{
cout << "恭喜您考上了北京大学!!!" << endl;
}
else if(score > 650)
{
cout << "恭喜您考上了浙江大学!!!" << endl;
}
else
{
cout << "恭喜您考上了人民大学!!!" << endl;
}
}
else if (score > 500)
{
cout << "考上二本大学" << endl;
}
else if (score > 400)
{
cout << "考上三本大学" << endl;
}
else {
cout << "未考上本科" << endl;
}
}
//三目运算符
void three_calcu()
{
/*
需求:创建3个变量a b c,将a和b作比较,将变量大的值赋值给变量c
*/
int a = 10;
int b = 20;
int c = 0;
c=(a > b) ? a : b; //先做a>b的运算,如果为真,则a赋值给c,否则,c=b=20。程序中a>b为假,返回b
cout << "c=" << c << endl;
//在C++中三目运算符返回的是变量,可以继续赋值,比如:
(a > b) ? a : b = 100;
cout << "a=" << a <<" , " << "b="<< b << endl;
}
//switch判断
void switch_if()
{
/*
案例:给电影打分
10~9:经典
8~7:非常好
6~5:一般
5分以下:烂片
*/
//1、提示用户评分
//
cout<<"请给电影评分:" << endl;
//2、用户开始进行打分
int score = 0;
cin >> score;
cout << "您打的分数是:" << score<<endl;
//3、根据用户输入的分数告诉用户结果
switch (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://代表以上条件都没有找到,相当于最后一个else
cout << "烂片" << endl;
break;
}
//switch缺点:在判断时只能是整型或字符型,不能是区间
//switch优点:结构清晰,执行效率高(相比于if)
}
//循环语句
void while_word()
{
//在屏幕中打印0-9这10个数字
int num = 0;
while (num <10)
{
cout << num << endl;
num++;
}
int r = rand() % 100 + 1;
cout << r << endl;
}
//do...while
void do_while()
{
/*
案例:在屏幕中输出0-9这10个数字
*/
int num = 0;
do
{
cout << num << endl;
num++;
} while (num < 10);
}
//for循环
void for_type()
{
//从数字0打印到数字9
//第一种写法
for (int i = 0; i < 10; i++)
{
cout << i << endl;
}
cout << "============" << endl;
//第二种写法
int i = 0;
for (; i < 10;i++) //()里面的表达式都可以拆分
{
cout << i << endl;
}
}
//嵌套循环
void nest_for_type()
{
//利用嵌套循环打印星图
//外层循环
for (int i = 0; i < 10; i++)//注意,i和j最好不一样
{
//内层循环
for (int j = 0; j < 10; j++)//打印一行星图
{
cout << "* ";
}
cout << endl;
}
}
//案例:九九乘法表
void nine_nine_multi_table()
{
//打印行数
for (int i = 1; i <= 9; i++)
{
//cout << i << endl;
for (int j = 1; j <= i; j++)
{
cout << j<<"*"<<i<<"="<<j*i<<" ";//列数*行数=结果
}
cout << endl;
}
}
//跳转语句:break
void break_type()
{
//break的使用时机
//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;//break跳出case选择
case 2:cout << "您选择的是中等难度" << endl; break;
case 3:cout << "您选择的是困难难度" << endl; break;
default:
break;
}
//2、出现在循环语句中
//
for (int i = 0; i < 9; i++)
{
cout << i << endl;
if (i == 5)//比如i=5时退出循环
{
break;
}
}
//3、出现在嵌套循环语句中
//*图
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
cout << "*";
if (j == 5) //退出循环
{
break; //退出内层循环,不会影响外层循环
}
}
cout << endl;
}
}
//continue语句
void continue_type()
{
//continue
for (int i = 0; i < 100; i++)
{
//如果是奇数输出,偶数不输出
if (i % 2 == 0)
{
continue; //不进行后面代码的执行,直接进入下一次循环
}
cout << i << endl;
}
}
//goto 语句
void goto_type()
{
//goto
cout << "1、XXX" << endl;
cout << "2、XXX" << endl;
goto FLAG; //运行1,2后,直接去第5个
cout << "3、XXX" << endl;
cout << "4、XXX" << endl;
FLAG: //标记,直接执行第5个
cout << "5、XXX" << endl;
}
int main()
{
//小技巧,生成随机数
//srand((unsigned int)time(NULL));
//int num = rand() % 100;//生成0-99的随机数
//cout << num << endl;
//single_line_if();
//muti_line_if();
//muti_condition_if();
//nest_if();
//three_calcu();
//switch_if();
//while_word();
//do_while();
//for_type();
//nest_for_type();
//nine_nine_multi_table();
//break_type();
//continue_type();
goto_type();
return 0;
}