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

跟着小潘学后端

一、分支结构是什么?

1. 导入

《震惊!某男子为了凉快竟然干出这种事》

盛夏的中午,火辣辣的太阳毫不留情地炙烤着眼前的一切。

马路两旁大树叶子被晒得无精打采地耷拉下了脑袋有气无力地挨着这难熬的时光,不时地又抬起头,好像在看远处的天空能否有乌云飘过。小狗躺在阴凉的地上乘凉,舌头伸在嘴巴外面喘气。

此时的小明,只盼望能来一场酣畅淋漓的大雨。

“哎,热得我受不了啦!”
说着就把手里的扇子一扔,朝着躺在旁边凉席上的人喊道:”妈,给我点钱呗,我去买点雪糕!“

躺在凉席上的人似乎睡着了,并没有什么动作,偶尔还传来几声呼噜声。

小明沉默了一会儿,决定先拿自己的零花钱。

经过一阵跋涉,小明穿过林荫小道,顶着火辣的阳光,终于来到了超市门口。

此时的小明已经满头大汗,踮了踮脚,身体极力拔高,把头越过柜台朝着里面的一个穿着背心躺在藤椅上正嘿嘿嘿笑个不停的大叔说道:“老板!来个雪糕!”。

只见老板把头一歪,把手机顺手放在大腹便便的肚子上,从旁边的冰柜中随意拿出一个。

“50,谢谢惠顾。”

”什么?“小明大吃一惊,不敢相信的问道:”多少?“
老板:”50!“

”老板再见!“然后小明头也不会的就走掉,嘴里不停骂骂咧咧。

”这么贵,吃了要成仙啊“。

站在小区的绿道上,小明望了望天上的太阳。因为出来了很久,嘴里已是干渴的不行。但是想买便宜的雪糕就得去更远的地方,但是这太阳不禁让小明有点打退堂鼓。

“出都出来了,总不能空着手回去吧“,说罢便头也不回的走向小区大门。

走了很远的路小明终于看到了一个冰淇淋批发店,门上写着购买20个及以上7折,少于20个原价

小明点了点头,“就它了”。

于是便走进了小店。

欲知后事如何,请听下回分解o( ̄▽ ̄)ブ。

2. 单分支结构

咱们用程序思维分析分析《小明买雪糕的故事》,从小明出门到小区超市说起,此时的小明因为天气太热打算去买雪糕。来到超市的小明,此时的他面临了一个选择,买雪糕吗?

可以看到,买雪糕是一件选择事件,选择买就可以吃上雪糕。因为只有一个选择事件,因此买雪糕是一个单分支结构。
代入到C++中,C++的单分支结构是if语句,它的语法格式如下:

if (condition) {
    // 如果条件为真,执行这里的代码
}

其中,condition是一个表达式,如果它的值为真(非零),则执行花括号中的代码块。既如果小明花钱买了雪糕,那么小明就可以吃雪糕。并且从上面可以看到,小明有没有买雪糕都并不影响回家。因此如果condition的值为假(0),则跳过整个if语句,继续执行后面的代码。
下面是一个简单的例子,演示了如何使用if语句判断一个数是否为正数:

#include <iostream>
using namespace std;

int main() {
    int num;
    cout << "请输入一个整数:";
    cin >> num;
    if (num > 0) {
        cout << num << "是正数" << endl;
    }
    return 0;
}

在上面的例子中,如果用户输入的数大于0,则输出该数是正数。如果用户输入的数小于等于0,则if语句不执行,直接跳过。

关于表达式,已经在C++程序设计入门二 中讲解过。

3. 双分支结构

咱们接着分析小明的故事,小明决定不买雪糕从超市出来以后,来到了冰淇淋批发店。在这里小明决定买点雪糕,但是批发店是有优惠活动,20个及以上7折,少于20个原价。此时的小明面临两个选择。

因为可以选择买20个以上,或者20个以下。因此此时是一个双分支的结构。

代入到C++中,C++中的双分支结构是if-else语句,它的语法如下:

if (condition) {
    // 如果条件成立执行的代码块
} else {
    // 如果条件不成立执行的代码块
}

其中,condition是需要判断的条件,如果条件成立则执行if后面的代码块,否则执行else后面的代码块。假如我们设置的条件是雪糕数大于等于20,那么小明买的雪糕超过20就能享受折扣优惠,当然没有超过20就进入否则语句,原价购买。

而且程序运行到双分支结构是必须选其一执行,不能两个语句块都跳过或都执行。

下面是一个简单的例子,演示了如何使用if-else语句实现输入两个整数,将这两个数按照从小到大的顺序输出的功能:

#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    if (a > b) {
        int t = a;
        a = b;
        b = t;
    }
    cout << a << " " << b << endl;
    return 0;
}

在这个例子中,我们首先使用cin语句输入两个整数a和b,然后使用if-else语句判断a和b的大小关系,如果a大于b,则交换它们的值,最后使用cout语句输出结果。

二、例题讲解

问题一:1303 - 冷饮的价格1

小明去冷饮店买冰激凌,如果买 10个以上或者 10 个,2 元 / 个, 10个以下, 2.2元 / 个。
请从键盘读入小明的购买数量,计算小明应付的价格!

1.分析问题

  1. 已知:购买数量 n,
  2. 未知:应付的金额

2.定义变量

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

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:购买数量 n,          
	//未知:应付的金额
	//二、数据定义	
	int n;
}

3.输入数据

从键盘读入购买的数量。

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:购买数量 n,          
	//未知:应付的金额
	//二、数据定义	
	int n;
	//三、数据输入 
	cin>>n;
}

4.数据计算

买冰激凌,如果买 10个以上或者 10 个,2 元 / 个, 10个以下, 2.2元 / 个。因此需要使用双分支结构。

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:购买数量 n,          
	//未知:应付的金额
	//二、数据定义	
	int n;
	//三、数据输入 
	cin>>n;
	//四、数据计算 
	if(n<10){

	}else{

	}
}

5.输出结果

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:购买数量 n,          
	//未知:应付的金额
	//二、数据定义	
	int n;
	//三、数据输入 
	cin>>n;
	//四、数据计算 
	if(n<10){
		//五、输出结果 
		//printf("%.1f",n*2.2);
		cout<<fixed<<setprecision(1)<<n*2.2;
	}else{
		//五、输出结果 
		//printf("%.1f",n*2);
		cout<<fixed<<setprecision(1)<<n*2.0;
	}
}

问题二:1033 - 判断奇偶数

输入一个整数,判断是否为偶数。是输出 y e s ,否则输出n o。

1.分析问题

  1. 已知:一个整数
  2. 未知:是否为偶数

2.定义变量

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

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:一个整数
	//未知:是否为偶数
	//二、数据定义 
	int n;

	return 0;	
}

3.输入数据

从键盘读入需要判断的整数。

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:一个整数
	//未知:是否为偶数
	//二、数据定义 
	int n;
	//三、数据输入
	cin>>n;
	
	return 0;	
}

4.数据计算

判断是否为偶数。是输出 y e s ,否则输出n o。因此还是要使用双分支结构。
判断偶数的方法:如果这个数能整除2,那么它就是偶数。即 % 2 == 0;

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:一个整数
	//未知:是否为偶数
	//二、数据定义 
	int n;
	//三、数据输入
	cin>>n;
	//四、数据计算
	if(n%2==0){

	}else{

	}
	
	return 0;	
}

5.输出结果

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:一个整数
	//未知:是否为偶数
	//二、数据定义 
	int n;
	//三、数据输入
	cin>>n;
	//四、数据计算
	if(n%2==0){
		//五、输出结果
		cout<<"y e s";
	}else{
		//五、输出结果
		cout<<"n o";
	}
	
	return 0;	
}

问题三:1302 - 是否适合晨练?

夏天到了,气温太高,小明的爷爷每天有晨练的习惯,但有时候温度不适合晨练;小明想编写一个程序,帮助爷爷判断温度是否适合晨练。
输入温度 t 的值,判断其是否适合晨练,适合晨练输出 OK ,不适合输出 NO 。( 20≤t≤30 ,则适合晨练 OK ,否则不适合 NO )。

1.分析问题

  1. 已知:温度t
  2. 未知:是否适合晨练

2.定义变量

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

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:温度t
	//未知:是否适合晨练
	//二、数据定义 
	int t;
	
	return 0;	
	
}

3.输入数据

从键盘读入需要判断的温度。

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:温度t
	//未知:是否适合晨练
	//二、数据定义 
	int t;
	//三、数据输入 
	cin>>t;
	
	return 0;	
	
}

4.数据计算

20 ≤ t ≤ 30 ,则适合晨练 OK ,否则不适合 NO 。还是使用双分支结构。

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:温度t
	//未知:是否适合晨练
	//二、数据定义 
	int t;
	//三、数据输入 
	cin>>t;
	//四、数据计算 
	if(t>=20&&t<=30){
	
	}else{

	}
	
	return 0;	
	
}

5.输出结果

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:温度t
	//未知:是否适合晨练
	//二、数据定义 
	int t;
	//三、数据输入 
	cin>>t;
	//四、数据计算 
	if(t>=20&&t<=30){
		//五、输出结果 
		cout<<"OK";
	}else{
		//五、输出结果 
		cout<<"NO";
	}
	
	return 0;	
	
}

问题四:1030 - 心系南方灾区

2008年年初我国南方正在承受百年不遇的大雪、冻雨灾害。北京市已经开始了面向全体市民的捐款捐物活动,并组织运力,以最快速度将这些救灾物资运送到灾区人民的手中。
已知救灾物资中有 m 件大衣(10000≤m≤2000000 ),一辆卡车一次最多可以运走 n 件(2000≤n≤10000 )。
请你编写程序计算一下,要将所有的大衣运走,北京市政府最少需要调动多少辆卡车参与运送。

1.分析问题

  1. 已知:有m件大衣
  2. 未知:需要调动多少辆卡车

2.定义变量

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

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:有m件大衣
	//未知:需要调动多少辆卡车
	//二、数据定义 
	int m,n,result;

	return 0;	
}

3.输入数据

从键盘读入大衣的数量。

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:有m件大衣
	//未知:需要调动多少辆卡车
	//二、数据定义 
	int m,n,result;
	//三、数据输入
	cin>>m>>n;

	return 0;	
}

4.数据计算

这个问题不仔细看好像是一个顺序结构的问题,直接用大衣的数量/卡车运输的数量=卡车的数量就完成了,但是因为int类型是向下取整,而且大衣也存在不能刚好运输完的概率,因此需要判断m % n == 0。

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:有m件大衣
	//未知:需要调动多少辆卡车
	//二、数据定义 
	int m,n,result;
	//三、数据输入
	cin>>m>>n;
	//四、数据计算 
	if(m%n==0){
		result=m/n;
	}else{
		result=m/n+1;
	}

	return 0;	
}

5.输出结果

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	//一、分析问题
	//已知:有m件大衣
	//未知:需要调动多少辆卡车
	//二、数据定义 
	int m,n,result;
	//三、数据输入
	cin>>m>>n;
	//四、数据计算 
	if(m%n==0){
		result=m/n;
	}else{
		result=m/n+1;
	}
	//五、输出结果 
	cout<<result;

	return 0;	
}

问题五:1043 - 行李托运价格

某车站行李托运收费标准是: 10 公斤或 10 公斤以下,收费2.5 元,超过 10 公斤的行李,按每超过 1 公斤增加 1.5元进行收费。
试编一程序,输入行李的重量,算出托运费。

1.分析问题

  1. 已知:收费标准、 行李的重量
  2. 未知:托运费

2.定义变量

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

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:收费标准、 行李的重量
	//未知:托运费
	//二、数据定义 
	int n;
	double price;

	return 0;	
}

3.输入数据

从键盘读入行李的重量。

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:收费标准、 行李的重量
	//未知:托运费
	//二、数据定义 
	int n;
	double price;
	//三、数据输入
	cin>>n;
	return 0;	
}

4.数据计算

因为有两种收费标准,那么就会有两种结果。因此使用双分支结构。
10 公斤或 10 公斤以下,收费2.5 元,超过 10 公斤的行李,按每超过 1 公斤增加 1.5元进行收费。注意是超过的部分加收1.5元,price = 2.5 + (n - 10 ) * 1.5 。

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:收费标准、 行李的重量
	//未知:托运费
	//二、数据定义 
	int n;
	double price;
	//三、数据输入
	cin>>n;
	//四、数据计算
	if(n<=10){
		price=2.5;
	}else{
		price=2.5+(n-10)*1.5;
	}
	return 0;	
}

5.输出结果

#include<iostream>
using namespace std;
int main(){
	//一、分析问题
	//已知:收费标准、 行李的重量
	//未知:托运费
	//二、数据定义 
	int n;
	double price;
	//三、数据输入
	cin>>n;
	//四、数据计算
	if(n<=10){
		price=2.5;
	}else{
		price=2.5+(n-10)*1.5;
	}
	//五、输出结果 
	printf("%.2f",price);
	
	
	return 0;	
}

三、作业

问题一:1037 - 恐龙园买门票

问题二:1045 - 判断能否构成三角形

问题三:1324 - 扩建鱼塘问题

问题四:1309 - 最多能倒多少杯水

问题五:1034 - 两数比大小

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

四、总结

以上就是单,双分支结构的全部内容。单,双分支结构的难点在于对表达式的判断理解以及单,双分支结构在什么时候区分使用。我的建议是就是多练o( ̄▽ ̄)o。


阅读量:700

点赞量:0

收藏量:0