【C++】C++程序结构入门之分支结构二-灵析社区

跟着小潘学后端

一、多分支

在上一文中,我们讲了一个小明买雪糕的故事。假如小明去的冰淇淋店重新制定了优惠活动。

因为有原价、9折、8折、6折四种情况,此时我们使用双分支结构是没有办法处理的。就不得不想一种新的方法。

C++中的多分支语句包括if语句和switch语句。

1. if多分支语句

它的语法如下:

if (condition1) {
    // 如果condition1为真,则执行这里的代码
} else if (condition2) {
    // 如果condition1为假,但condition2为真,则执行这里的代码
} else {
    // 如果condition1和condition2都为假,则执行这里的代码
}

其中,condition1、condition2等都是条件表达式,可以是任何返回值为布尔类型的表达式。如果condition1为真,则执行if语句块中的代码;否则,判断condition2是否为真,如果为真,则执行else if语句块中的代码;否则,执行else语句块中的代码。

以下是C++中if多分支语句的例子:

if (a == b){
    cout << "hello";
} else if (a == c){
    cout << "bye";
} else if (a == d){
    cout << "good morning";
} else{
    cout << "hi";
}

在这个例子中,如果a等于b,则输出"hello";如果a等于c,则输出"bye";如果a等于d,则输出"good morning";否则输出"hi"。

2. switch语句

switch语句也是一种多分支语句,它的语法如下:

switch (expression) {
    case value1:
        // 如果expression的值等于value1,则执行这里的代码
        break;
    case value2:
        // 如果expression的值等于value2,则执行这里的代码
        break;
    ...
    default:
        // 如果expression的值不等于任何一个case后面的值,则执行这里的代码
        break;
}

其中,expression是一个表达式,可以是任何类型的表达式;value1、value2等是常量表达式,可以是整型、字符型、枚举型等类型的常量表达式。如果expression的值等于某个case后面的值,则执行该case语句块中的代码;如果expression的值不等于任何一个case后面的值,则执行default语句块中的代码。

下面是一个简单的示例:

#include <iostream>
using namespace std;

int main() {
    int num = 2;
    switch(num) {
        case 1:
            cout << "num is 1" << endl;
            break;
        case 2:
            cout << "num is 2" << endl;
            break;
        default:
            cout << "num is not 1 or 2" << endl;
            break;
    }
    return 0;
}

上述代码中,我们定义了一个整型变量num,并使用switch语句根据num的值执行不同的代码块。在这个例子中,num的值为2,因此会执行第二个case语句,输出"num is 2"。

二、多个if

在C++中,多个if语句是不必选其一执行的。如果多个if语句都满足条件,那么它们都会被执行。

if (x > 0) {
    cout << "x is positive" << endl;
}
if (x % 2 == 0) {
    cout << "x is even" endl;
}

如果x的值为6,则上述代码将输出:

x is positive
x is even

因为x既是正数又是偶数。

三、多个if与多分支语句比较

如图所示:

四、例题讲解

问题一:1304 - 冷饮的价格(2)

小明夏天去买冰棍,老板说买 30 个及以上 1 元 / 个, 20∼29 个 1.2 元 / 个,10∼19 个 1.5 元 / 个, 10个以下 1.8 元 / 个!
请从键盘读入小明买冰棍的数量,计算小明应该付的价格(价格保留 11 位小数)!

1.分析问题

  1. 已知:冰棍的数量、单价
  2. 未知:应该付的价格

2.定义变量

根据分析的已知,未知按需要定义变量。

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:冰棍的数量n、单价 
	//未知:应该付的价格
	//二、数据定义 
	int n;
、
	
	return 0;	
}

3.输入数据

从键盘读入购买的数量。

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:冰棍的数量n、单价 
	//未知:应该付的价格
	//二、数据定义 
	int n;
	//三、数据输入 
	cin>>n;
	
	return 0;	
}

4.数据计算

30 个及以上 1 元 / 个, 20∼29 个 1.2 元 / 个,10∼19 个 1.5 元 / 个, 10个以下 1.8 元 / 个。

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:冰棍的数量n、单价 
	//未知:应该付的价格
	//二、数据定义 
	int n;
	//三、数据输入 
	cin>>n;
	//四、数据计算
	if(n>=30){

	}else if(n>=20){

	}else if(n>=10){

	}else {

	}
	return 0;	
}

5.输出结果

复习一下输出小数点有两种方式。

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:冰棍的数量n、单价 
	//未知:应该付的价格
	//二、数据定义 
	int n;
	//三、数据输入 
	cin>>n;
	//四、数据计算
	if(n>=30){
		//五、输出结果 
		cout<<fixed<<setprecision(1)<<n*1.0; 
	}else if(n>=20){
		//五、输出结果 
		printf("%.1f",n*1.2);
	}else if(n>=10){
		//五、输出结果 
		printf("%.1f",n*1.5);
	}else {
		//五、输出结果 
		printf("%.1f",n*1.8);
	}
	return 0;	
}

问题二:1044 - 找出最经济型的包装箱型号

已知有 A,B,C,D,E 五种包装箱,为了不浪费材料,小于 10 公斤的用 A 型,大于等于 10公斤小于 20公斤的用 B 型,大于等于 20公斤小于40 公斤的用 C 型,大于等于 40 公斤的小于 50公斤的用 D 型,大于等于 50 公斤小于 80 公斤的用 E 型。
现在输入一货物的重量(小于 80 公斤),找出最经济型的包装箱型号。

1.分析问题

2.定义变量

根据分析的已知,未知按需要定义变量。

  1. 已知:货物的重量
  2. 未知:最经济型的包装箱型号

3.输入数据

从键盘读入货物的重量。

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:货物的重量
	//未知:最经济型的包装箱型号
	//二、数据定义 
	int weight;
	//三、数据输入 
	cin>>weight;

	return 0;	
}

4.数据计算

根据题目要求设计表达式。

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:货物的重量
	//未知:最经济型的包装箱型号
	//二、数据定义 
	int weight;
	//三、数据输入 
	cin>>weight;
	//四、数据计算
	if(weight>=50&&weight<=80){

	}else if(weight>=40){


	}else if(weight>=20){

	}else if(weight>=10){

	}else{

	}
	return 0;	
}

5.输出结果

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:货物的重量
	//未知:最经济型的包装箱型号
	//二、数据定义 
	int weight;
	//三、数据输入 
	cin>>weight;
	//四、数据计算
	if(weight>=50&&weight<=80){
		//五、输出结果 
		cout<<"E";
	}else if(weight>=40){
		//五、输出结果 
		cout<<"D";
	}else if(weight>=20){
		//五、输出结果 
		cout<<"C";
	}else if(weight>=10){
		//五、输出结果 
		cout<<"B";
	}else{
		//五、输出结果 
		cout<<"A";
	}
	return 0;	
}

问题三:1035 - 判断成绩等级

输入某学生成绩,如果 86 分以上(包括 86 分)则输出 VERY GOOD ,如果在 60 到 85 之间的则输出 GOOD (包括 60 和 85 ),小于 60 的则输出 BAD。

1.分析问题

  1. 已知:学生成绩n
  2. 未知:学生成绩等级

2.定义变量

根据分析的已知,未知按需要定义变量。

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:学生成绩n 
	//未知:学生成绩等级 
	//二、数据定义 
	int n;

	return 0;	
}

3.输入数据

从键盘读入学生成绩。

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:学生成绩n 
	//未知:学生成绩等级 
	//二、数据定义 
	int n;
	//三、数据输入 
	cin>>n;
	return 0;	
}

4.数据计算

<60、60<=n<=85、>=86三个等级。

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:学生成绩n 
	//未知:学生成绩等级 
	//二、数据定义 
	int n;
	//三、数据输入 
	cin>>n;
	//四、数据计算
	if(n<60){

	}else if(60<=n&&n<=85){

	}else{

	}
	return 0;	
}

5.输出结果

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:学生成绩n 
	//未知:学生成绩等级 
	//二、数据定义 
	int n;
	//三、数据输入 
	cin>>n;
	//四、数据计算
	if(n<60){
		//五、输出结果
		cout<<"BAD";
	}else if(60<=n&&n<=85){
		//五、输出结果
		cout<<"GOOD";
	}else{
		//五、输出结果
		cout<<"VERY GOOD";	
	}
	return 0;	
}

问题四:1039 - 求三个数的最大数

已知有三个不等的数,将其中的最大数找出来。

1.分析问题

  1. 已知:三个数
  2. 未知:谁最大

2.定义变量

根据分析的已知,未知按需要定义变量。

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:三个数 
	//未知:谁最大 
	//二、数据定义 
	int a,b,c;

	
	
	return 0;	
}

3.输入数据

从键盘读入三个整数。

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:三个数 
	//未知:谁最大 
	//二、数据定义 
	int a,b,c;
	//三、数据输入 
	cin>>a>>b>>c; 
	
	
	return 0;	
}

4.数据计算

既然是最大的数,必然是大于其它两个数。

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:三个数 
	//未知:谁最大 
	//二、数据定义 
	int a,b,c;
	//三、数据输入 
	cin>>a>>b>>c; 
	//四、数据计算 

	if(a>b&&a>c){

	}
	if(b>a&&b>c){

	}
	if(c>a&&c>b){

	}
	
	return 0;	
}

5.输出结果

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:三个数 
	//未知:谁最大 
	//二、数据定义 
	int a,b,c;
	//三、数据输入 
	cin>>a>>b>>c; 
	//四、数据计算 

	if(a>b&&a>c){
		//五、输出结果 
		cout<<a;
	}
	if(b>a&&b>c){
		//五、输出结果 
		cout<<b;
	}
	if(c>a&&c>b){
		//五、输出结果 
		cout<<c;
	}
	
	return 0;	
}

问题五:1040 - 求三个数的大小顺序

输入三个数,按由大到小顺序打印出来。

1.分析问题

  1. 已知:三个整数
  2. 未知:大小顺序

2.定义变量

根据分析的已知,未知按需要定义变量。

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:三个整数 
	//未知:大小顺序 
	//二、数据定义 
	int a,b,c,temp;

	return 0;	
}

3.输入数据

从键盘读入三个整数。

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:三个整数 
	//未知:大小顺序 
	//二、数据定义 
	int a,b,c,temp;
	//三、数据输入 
	cin>>a>>b>>c;

	return 0;	
}

4.数据计算

典型的两数交换问题,在C++程序结构入门之顺序结构二中介绍了三种方法,用其中一种即可。

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:三个整数 
	//未知:大小顺序 
	//二、数据定义 
	int a,b,c,temp;
	//三、数据输入 
	cin>>a>>b>>c;
	//四、数据计算

	if(a>b){
		temp=a;
		a=b;
		b=temp;
	}
	if(a>c){
		temp=a;
		a=c;
		c=temp;
	}
	if(b>c){
		temp=b;
		b=c;
		c=temp;
	}


	return 0;	
}

5.输出结果

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:三个整数 
	//未知:大小顺序 
	//二、数据定义 
	int a,b,c,temp;
	//三、数据输入 
	cin>>a>>b>>c;
	//四、数据计算

	if(a>b){
		temp=a;
		a=b;
		b=temp;
	}
	if(a>c){
		temp=a;
		a=c;
		c=temp;
	}
	if(b>c){
		temp=b;
		b=c;
		c=temp;
	}
	//五、输出结果 
	cout<<c<<" "<<b<<" "<<a;

	return 0;	
}

五、练习

问题:1049 - 汉译英

问题:1391 - 公交卡充值问题?

问题:1322 - 求数的量级?

问题:1305 - 求四个数的最大数

问题:1300 - 小明暑假的零花钱

问题:1340 - 做纸箱最少需要多少面积的硬纸板。

问题:1047 - 能否构成直角三角形

问题:1041 - 判断三个整数是否相邻

问题:1018 - 三角形类别

六、总结

以上就是多分支结构的内容,关于分支结构的内容就介绍到这里,下一节将对循环结构进行讨论。


阅读量:214

点赞量:0

收藏量:0