程序的选择——分支结构基础语法讲解
1.if语句和缩进
在C++的程序设计中,程序不只是一成不变的。有时也会根据情况选择执行。这个时候就需要分支结构了。
1.1.if语句基本语法:
if(表达式)
语句;
if后面也不一定只有一个语句。可以用大括号将多个语句合并成一个语句块。比如:
if(表达式)
{
语句1;
语句2;
语句1;
}
如果if括号里面的表达式为false(即0),直接跳过if后面的语句或语句块。否则就执行if后面的语句或语句块。
1.2.缩进
在C++中,一般会对语句块进行缩进。一般就是四个空格。缩进并不是强制要求,只是为了美观才缩进的。比如:
#include<iostream>
using namespace std;
int main(){
int a,b,max;
cin>>a>>b;
max=a;
if(b>a)
{
cout<<"改变max的值"<<endl;
max=b;
}
cout<<"较大数是"<<max<<endl;
return 0;
}
2.if else语句
如果……那么……否则……就是一个经典的if else语句。if else语句的基本语法如下:
if(表达式)
语句1;
else
语句2;
当然,else后面跟if一样,可以只是一个语句,也可以是一个语句块。
2.1.例题1——闰年判断
题目描述
输入一个年份,判断这一年是否是闰年,如果是输出 1 1 1,否则输出 0 0 0。
1582 1582 1582 年以来,闰年的定义:
普通闰年:公历年份是 4 4 4 的倍数,且不是 100 100 100 的倍数的,为闰年(如 2004 2004 2004 年、 2020 2020 2020 年等就是闰年)。
世纪闰年:公历年份是整百数的,必须是 400 400 400 的倍数才是闰年(如 1900 1900 1900 年不是闰年, 2000 2000 2000 年是闰年)。
输入格式
输入一个正整数 n n n,表示年份。
输出格式
输出一行。如果输入的年份是闰年则输出 1 1 1,否则输出 0 0 0。
输入输出样例
输入 #1
1926
输出 #1
0
输入 #2
1900
输出 #2
0
输入 #3
2000
输出 #3
1
输入 #4
1996
输出 #4
1
提示
数据保证, 1582 ≤ n ≤ 2020 1582 \leq n \leq 2020 1582≤n≤2020 且年份为自然数。
判断闰年的口诀:四年一闰,百年不闰,四百年又闰。
根据这个口诀模拟就行了。
#include<iostream>
using namespace std;
int main(){
int year;
cin>>year;
if((year%4==0&&year%100!=0)||year%400==0)//根据口诀写出表达式
cout<<1<<endl;
else cout<<0<<endl;
return 0;
}
2.2.练习1——洛谷团队系统
题目描述
在洛谷上使用团队系统非常方便的添加自己的题目。如果在自己的电脑上配置题目和测试数据,每题需要花费时间
5
5
5 分钟;而在洛谷团队中上传私有题目,每题只需要花费
3
3
3 分钟,但是上传题目之前还需要一次性花费
11
11
11 分钟创建与配置团队。现在要配置
n
n
n 道题目,如果本地配置花费的总时间短,请输出 Local
,否则输出 Luogu
。
输入格式
输入一个正整数 n n n,表示需要配置的题目量。
输出格式
输出一行,一个字符串。如果本地配置花费的总时间短,请输出 Local
,否则输出 Luogu
。
输入输出样例
输入 #1
2
输出 #1
Local
输入 #2
50
输出 #2
Luogu
提示
数据保证 1 ≤ n ≤ 100 1 \leq n\leq 100 1≤n≤100。
程序示例:
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
if((n*5)<(n*3+11))
cout<<"Local"<<endl;
else
cout<<"Luogu"<<endl;
return 0;
}
3.if else嵌套
3.1.语法介绍
当我们有很多情况需要判定时,可以使用“分支嵌套”。也可以叫做“else if语句”。
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
……
else if(表达式n)
语句n;
注意:每一个if都会自动匹配最近的else。
3.2.例题1——肥胖问题
题目描述
BMI 指数是国际上常用的衡量人体胖瘦程度的一个标准,其算法是 m h 2 \dfrac{m}{h^2} h2m,其中 m m m 是指体重(千克), h h h 是指身高(米)。不同体型范围与判定结果如下:
- 小于
18.5
18.5
18.5:体重过轻,输出
Underweight
; - 大于等于
18.5
18.5
18.5 且小于
24
24
24:正常体重,输出
Normal
; - 大于等于
24
24
24:肥胖,不仅要输出 BMI 值(使用
cout
的默认精度),然后换行,还要输出Overweight
;
现在给出体重和身高数据,需要根据 BMI 指数判断体型状态并输出对应的判断。
对于非 C++ 语言,在输出时,请四舍五入保留六位有效数字输出,如果小数部分存在后缀 0 0 0,不要输出后缀 0 0 0。
请注意,保留六位有效数字不是保留六位小数。例如 123.4567 123.4567 123.4567 应该输出为 123.457 123.457 123.457, 5432.10 5432.10 5432.10 应该输出为 5432.1 5432.1 5432.1。
输入格式
共一行。
第一行,共 2 2 2 个浮点数, m , h m, h m,h,分别表示体重(单位为 kg),身高(单位为 m)。
输出格式
输出一行一个字符串,表示根据 BMI 的对应判断。特别地,对于 Overweight
情况的特别处理请参照题目所述。
输入输出样例
输入 #1
70 1.72
输出 #1
Normal
输入 #2
100 1.68
输出 #2
35.4308
Overweight
提示
对于所有数据, 40 ≤ m ≤ 120 40\le m \le 120 40≤m≤120, 1.4 ≤ h ≤ 2.0 1.4 \le h \le 2.0 1.4≤h≤2.0。 m m m 和 h h h 的小数点后不超过三位。
示例程序:
#include<bits/stdc++.h>
using namespace std;
int main()
{
double m,h,BMI;
cin>>m>>h;
BMI=m/(h*h);
if(BMI<18.5)
cout<<"Underweight";
else if(BMI>=15&&BMI<24)
cout<<"Normal";
else if(BMI>=24)//if(BMI>=24)可以不加,因为就只有三种情况,前面两种都不是就是第三种
cout<<BMI<<endl<<"Overweight";
return 0;
}
3.3.练习1——计算邮资
题目描述
请根据邮件的重量和用户选择是否加急计算邮费。计算规则:
-
重量在 1000 1000 1000 以内(包括),基本费 8 8 8 元;
-
超过 1000 1000 1000 克的部分,每 500 500 500 克加收超重费 4 4 4 元,不足 500 500 500 克部分按 500 500 500 克计算;
-
如果用户选择加急,多收 5 5 5 元。
输入格式
一行,包含一个正整数
x
x
x 和一个字符 c(y
或 n
),之间用一个空格隔开,分别表示重量和是否加急。
如果字符是 y
,说明选择加急;如果字符是 n
,说明不加急。
输出格式
输出一行一个正整数,表示邮费。
输入输出样例 #1
输入 #1
1200 y
输出 #1
17
提示
对于100%数据 1 ≤ x ≤ 1 0 6 1\leq x\leq 10^6 1≤x≤106
还是一样,根据题目模拟就行了。
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int x,ans=0;
char c;
cin>>x>>c;
if(x<1000&&c=='n')ans=8;
else if(x<1000&&c=='y')ans=8+5;
else if(x>1000&&c=='n')ans=8+ceil((x-1000)/500.0)*4;
else ans=8+ceil((x-1000)/500.0)*4+5;
cout<<ans<<endl;
return 0;
}
4.switch 语句
4.1.switch语法
如果有很多单调的情况,我们可以用switch语句简化。switch语句基本语法如下:
switch(表达式)
{
case 常量表达式1:语句块1
case 常量表达式2:语句块2
…
default:语句块n
}
switch语句中的每个常量表达式都必须各不相同。在执行switch语句的时候,会先计算表达式的值,然后将表达式的值带入到每个case后面的表达式。发现了可以匹配的就把后面所有的语句都执行了。
default代表默认情况。即如果判断没有一个是成立的,在其它情况下执行的语句。
break可以用来跳出switch语句。在执行switch语句时,只要碰到一个break,后面的所有语句就都不会再执行了。
4.2.例题——小洛机器人
提供以下指令(一个字符),机器人按照指令给出对应的回复:
•输入G:打招呼,小洛会回复 Hello, my master
!,还会在下一行加上一句 I'm Xiaoluo
.
•输入N:自我介绍,小洛只会回复 I'm Xiaoluo
.
•输入S:唱歌,小洛会哼唱 Teinei teinei teinei~
•输入B或者Q:告别,小洛向你说 Bye bye!
•其他任何字符:小洛无法理解,只能回复 Sorry...
代码如下:
#include<iostream>
using namespace std;
int main(){
char c;
cin>>c;
switch(c)
{
case'G':cout<<"Hello, my master!"<<endl;//先输出Hello, my master!,然后跳到后面,输出I'm Xiaoluo.
case'N':cout<<"I'm Xiaoluo."<<endl;break;
case'S':cout<<"Teinei teinei teinei~"<<endl;break;
case'B':case'Q':cout<<"Bye bye!"<<endl;break;//B和Q都会输出Bye bye!
default:cout<<"Sorry..."<<endl;//由于是在最后所以不需要跳出
}
return 0;
}
课后作业
喜欢就订阅此专辑吧!
【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。
欢迎扫码关注蓝胖子编程教育