条件语句
1.if语句
这节课我们要学习一个非常有趣且重要的编程概念——条件语句。在现实生活中,我们经常需要根据不同的情况做出不同的决定。比如,如果外面下雨,我们就会带伞;如果天气晴朗,我们就会选择戴太阳镜。在编程中,我们也需要让计算机根据不同的情况执行不同的操作。这就需要用到条件语句。
在C++中,最常用的条件语句是if语句。if语句的基本结构是这样的:
if (条件)
{
// 如果条件为真,执行这里的代码
}
这里的“条件”可以是一个比较,比如“x > 5”或者“y == 10”。如果条件成立(为真),那么大括号里的代码就会被执行。如果不成立(为假),那么这些代码就会被跳过。
让我们来看一个简单的例子:
int number = 7;
if (number > 5)
{
cout << “数字大于5!” << endl;
}
在这个例子中,我们有一个变量number,它的值是7。if语句检查number是否大于5。因为7确实大于5,所以程序会输出“数字大于5!”。
通过这个简单的例子,我们可以看到条件语句是如何帮助我们在编程中做出决定的。接下来,我们可以通过下面练习来加深对这个概念的理解。
例1:输入两个不同的整数,按照从小到大的顺序输出这两个整数。
参考代码:
int a, b, t;
cin >> a >> b;
if (a > b)
{
//如果a小于b,交换a、b的值
t = a;
a = b;
b = t;
}
cout << a << ” ” << b;
2.if…else…语句
下面我们来考虑一个更加复杂的场景。假设你的班主任要你帮他编写一个程序来决定一个学生是否可以通过一门课程。这个决定基于学生的考试成绩。如果成绩大于或等于60分,学生通过;否则,学生不通过。
前面学习的if语句只能判断条件成立的情况,显然不太适合处理这个问题。这个时候就需要if…else…语句。他的结构如下:
if (条件)
{
// 如果条件为成立(真),执行这里的代码
}
else
{
// 如果条件为不成立(假),执行这里的代码
}
针对上面的问题,参考代码如下:
int score;
cin >> score;
if (score >= 60)
{
// 如果成绩大于或等于60分
cout << “恭喜!你通过了这门课程。” << endl;
}
else
{
// 如果成绩小于60分
cout << “很遗憾,你没有通过这门课程。” << endl;
}
在这个例子中:
我们首先定义了一个变量score,它代表了学生的考试成绩。
然后,我们使用if…else语句来检查score的值:
(1)如果score大于或等于60(即score >= 60为真),程序会执行if块中的代码,输出“恭喜!你通过了这门课程。”
(2)如果score小于60(即score >= 60为假),程序会执行else块中的代码,输出“很遗憾,你没有通过这门课程。”
通过这个例子,我们可以看到if…else语句是如何帮助我们在两种不同的情况下做出决策的。在编程中,这种结构非常常见,因为它允许我们根据不同的条件执行不同的代码块,从而实现更复杂和灵活的逻辑。
我们做一道有难度的练习题:
例2:从控制台输入一个整数,判断这个整数是否为水仙花数。水仙花数是指一个 3 位整数,它的每个数位上的数字的 3次幂之和等于它本身。例如:153就是一个水仙花数,因为1^3 + 5^3+ 3^3 = 153。
参考代码:
int n,gw,sw,bw;
cin>>n;
gw = n/1%10;
sw = n/10%10;
bw = n/100%10;
if(gw*gw*gw + sw*sw*sw + bw*bw*bw == n)
cout<<“Yes”;
else
cout<<“No”;
cout<<endl;
注:当if或者else语句块只有一条语句的时候,可以省略大括号!
例3 :输入一个整数n,如果是奇数输出Yes,如果是偶数输出No。
int n;
cin>>n;
if(n%2==1)//除以2余数为1的就是奇数
{
cout<<“Yes”;
}
else
{
//不是奇数就是偶数
cout<<“No”;
}
cout<<endl;
例4:三位数是否对称。从键盘读入一个三位整数,判断这个三位整数是否是对称数(对称数指的是,这个数正过来和倒过来是同一个数,比如:121、686、808等数都是对称数),如果是对称数,则输出“Y”,否则输出“N”。
int n,g,b;
cin>>n;
g = n/1%10;
b = n/100%10;
if(g==b)
cout<<“Y”;
else
cout<<“N”;
cout<<endl;
例5:恐龙园买门票,身高低于1.3米购儿童票(60元),否则成人票120元。 试编写一个程序,输入身高,输出相应的门票价格。
参考代码:
double x;
cin>>x;
if(x>=1.3)
{
cout<<120<<endl;
}
else
{
cout<<60<<endl;
}
注意:计算机中所有的数据都是以二进制的形式存储的。十进制的0.3在二进制表示中是一个无限循环小数。因此在本题中变量x一定要保存为double类型,否则当从控制台输入1.3的时候会因为精确度的问题产生错误。也可以考虑通过乘10,把0.3变成整数。
例6:谁的年龄大。甲乙两个人在公园相遇,甲说我今年n岁了(n是一个两位的整数,个位和十位不相等),乙说,太巧了,你的年龄倒过来,就是我的年龄,请问两个人谁的年龄更大, 请输出那个更大的年龄?比如,假设甲今年12岁,那么乙就是21岁,乙的年龄更大,应当输出乙的年龄21岁。
int n,gw,sw,m;
cin>>n;
gw=n/1%10;
sw=n/10%10;
m=gw*10+sw;//计算乙的年龄
if(m>n)
{
cout<<m;
}
else
{
cout<<n;
}
cout<<endl;
这个例题其实不用计算乙的年龄。只要考虑甲年龄的个位和十位大小关系就行。如果个位大于十位那么就是乙的年龄大,否则就是甲的年龄大。参考代码如下:
int n,gw,sw;
cin>>n;
gw=n/1%10;
sw=n/10%10;
if(gw>sw)
{
cout<<sw<<gw;
}
else
{
cout<<n;
}
cout<<endl;
例7:做彩纸花边。用一条长为n米的彩纸制作花边,每朵花的宽度为x厘米,花与花之间的间隔为y厘米。请问n米的彩纸最多能做多少朵花的花边。如图中的案例花的宽度为4.5cm,花之间的间隔为1.2cm,那么一条长为0.62m的彩纸最多可以做11朵花的花边(因为一朵花加一个间隔是5.7cm,10朵花以及间隔共57cm,剩余5cm还可以再做一朵花,因此最多共可以做11朵花)
![]()
float n,x,y;
int m,a,b,cnt;
cin>>n>>x>>y;
m = n * 1000;
a = x* 10;
b = y * 10;
cnt = m / (a+b);
if(m %(a+b) > a) cnt ++;
cout<<cnt<<endl;
3.if…else if…else…语句
在前面的课程中,我们学习了if…else…语句,它可以帮助我们处理两种不同的情况。但是,如果我们有多种情况需要处理,该怎么办呢?这时候,我们就需要用到if…else if…else…语句(称作多分支语句)。
if…else if…else…语句的基本结构是这样的:
if (条件1)
{
// 如果条件1为真,执行这里的代码
}
else if (条件2)
{
// 如果条件2为真,执行这里的代码
}
else
{
// 如果前面的条件都不为真,执行这里的代码
}
上一节的代码只判断是成绩否通过有些过于简单了,现在我们帮助你的班主任完善一下那段程序:
int score;
cin >> score;
if (score >= 90)
{
cout << “你的成绩是A!” << endl;
}
else if (score >= 80)
{
cout << “你的成绩是B!” << endl;
}
else if (score >= 70)
{
cout << “你的成绩是C!” << endl;
}
else if (score >= 60)
{
cout << “你的成绩是D!” << endl;
}
else
{
cout << “你的成绩不及格!” << endl;
}
在这个例子中,我们有一个变量score,通过键盘来为score赋值。程序会依次检查每个条件,直到找到一个为真的条件,然后执行相应的代码。假设我们在控制台输入85。因为85大于等于80但小于90,所以程序会输出“你的成绩是B!”,然后结束整个if…else if…else…语句。
扩展知识:C++中有六种比较运算符,分别为:
>(大于) >=(大于等于)
<(小于) <=(小于等于)
==(等于) !=(不等于)
当比较结果成立时,我们说比较结果为真(true),比较结果不成立时,我们说比较结果为假(false)。其实比较的结果是有几个布尔类型的数据。
4.switch语句
switch是另外一种形式的多分支语句(结构)。它允许你根据一个变量的值来选择执行不同的代码块。switch语句比多个 if-else语句更简洁,尤其是在有很多选项的情况下。
switch语句的基本结构如下:
switch (表达式) {
case 常量1:
// 代码块1
break;
case 常量2:
// 代码块2
break;
// 可以有任意数量的case语句
default:
// 默认代码块
break;
}
表达式:是一个整数表达式(包括字符),switch语句会根据这个表达式的值来选择执行哪个 case。
case 常量:每个 case后面跟着一个常量,如果 表达式的值等于这个常量,就会执行这个 case后面的代码块。
break:每个 case代码块的末尾通常会有一个 break语句,用于跳出 switch语句,防止执行后续的 case代码块。
default:这是一个可选的部分,如果 表达式的值与所有 case常量都不匹配,就会执行 default后面的代码块。
int day;
cout << “请输入一个数字(1-7)代表星期几:”;
cin >> day;
switch (day)
{
case 1:
cout << “星期一” << endl;
break;
case 2:
cout << “星期二” << endl;
break;
case 3:
cout << “星期三” << endl;
break;
case 4:
cout << “星期四” << endl;
break;
case 5:
cout << “星期五” << endl;
break;
case 6:
cout << “星期六” << endl;
break;
case 7:
cout << “星期日” << endl;
break;
default:
cout << “无效的输入!请输入1到7之间的数字。” << endl;
break;
}
注意事项:
(1)如果 case代码块的末尾没有break语句,程序会继续执行后续的 case代码块,直到switch语句全部结束或者遇到其他case的break语句。
(2)switch语句中的表达式结果不能是浮点数或字符串。
5.三目运算符?:
在C++中,?: 运算符被称为条件运算符(也称为三元运算符)。它是一种简洁的方式来表达一个简单的 if-else 逻辑。条件运算符的语法如下:
条件 ? 表达式1 : 表达式2
?:运算符的工作原理
首先评估?之前的条件(一个布尔表达式)。如果条件为真(true),则计算并返回表达式1的结果;如果条件为假(false),则计算并返回表达式2的结果。
int a = 10,b = 20;
int max;
// 使用条件运算符找出a和b中的最大值
max = (a > b) ? a : b;
cout << “最大值是: ” << max << endl;
