Lesson 2 - 表达式和算数运算符
在 C++里,我们编程时会遇到很多像数学一样的“运算”,比如加法、减法等,这些运算在编程中也有类似的“工具”来帮我们完成各种计算。这些工具叫做运算符,而这些运算组成的“算式”就是表达式。
1. 什么是运算符?
运算符就像计算的“工具”,每个运算符都有自己的“任务”。在 C++中,常用的运算符有以下几类:
- 算术运算符:比如加号
+
、减号-
、乘号*
、除号/
、取余%
,可以让我们完成加减乘除求余数的运算。 - 比较运算符:比如等号
==
和大于号>
,可以让我们比较两个值的大小。 - 逻辑运算符:比如与
&&
和或||
,可以让我们判断多个条件是否都满足或只满足其中一个。
2. 什么是操作数?
操作数就是运算符要计算的“数字”或者“东西”。举个例子,在 5 + 3
这个算式中,5
和 3
就是操作数,而加号 +
是运算符。
操作数可以是数字,也可以是变量。比如 a + b
中,a
和 b
是操作数,它们可以代表不同的数值。
3. 什么是表达式?
表达式就是由运算符和操作数组成的一个“算式”,它会得到一个结果。比如 5 + 3
是一个表达式,它的结果是 8
;而 a + b
也是一个表达式,它的结果取决于 a
和 b
的值。
举个例子:假设 a = 5
,b = 3
,那么 a + b
这个表达式的结果就是 8。
4. 注意事项
- 运算顺序:运算符有优先级,就像我们做数学题时要先算乘除后算加减。比如
2 + 3 * 4
的结果是14
,因为乘法的优先级比加法高。为了让程序更清楚,可以使用括号,比如(2 + 3) * 4
会得到20
。 - 除法运算的陷阱:整数相除会得到整数,比如
7 / 2
的结果是3
,小数部分会被丢掉。如果要得到小数结果,可以用浮点数(比如7.0 / 2.0
),这样结果是3.5
。 - 逻辑运算和比较运算:这些运算会得到“是”或“不是”的答案,C++里会用
1
表示“是”(真),用0
表示“不是”(假)。比如5 > 3
的结果是1
,而5 < 3
的结果是0
。 - 避免运算错误:小心不要把
=
(赋值运算符)和==
(等于号)搞混了。=
是把右边的值赋给左边的变量,而==
是在比较两个值是否相等。
5. 题目示例
3440 买早餐
问题分析
题目要求计算买一个面包和一瓶牛奶的总费用。我们输入面包和牛奶的价钱,直接相加即可得到总费用。
提示
输入的两个整数使用空格隔开,直接相加即可得到结果。
代码实现
#include <bits/stdc++.h>
using namespace std;
int main() {
int bread, milk;
cin >> bread >> milk; // 输入面包和牛奶的价格
int sum = bread + milk; // 计算总费用
cout << sum << endl; // 输出结果
return 0;
}
2774 长方形的周长和面积
问题分析
要计算长方形的周长和面积。已知长方形的周长公式为:2 * (长 + 宽)
,面积公式为:长 * 宽
。输入为长和宽,直接应用公式即可得到结果。
提示
使用公式 2 * (长 + 宽)
计算周长,长 * 宽
计算面积,结果用空格隔开输出。
代码实现
#include <bits/stdc++.h>
using namespace std;
int main() {
int length, width;
cin >> length >> width; // 输入长和宽
int c = 2 * (length + width); // 计算周长
int s = length * width; // 计算面积
cout << c << " " << s << endl; // 输出周长和面积
return 0;
}
2775 交换两位整数的十位和个位
问题分析
我们需要将输入的两位数的十位和个位互换位置,得到一个新的整数。可以使用整数除法和取余运算分别获取十位和个位,然后将个位放在十位上,十位放在个位上,组合成新数。
提示
使用 num / 10
获取十位,num % 10
获取个位,交换位置后形成新数。
代码实现
#include <bits/stdc++.h>
using namespace std;
int main() {
int num;
cin >> num; // 输入两位整数
int s = num / 10; // 获取十位
int g = num % 10; // 获取个位
int new_num = g * 10 + s; // 交换位置形成新数
cout << new_num << endl; // 输出结果
return 0;
}
2776 倒序三位数
问题分析
我们需要将一个三位数的各个数位倒过来输出。可以用整数除法和取余操作依次获取百位、十位和个位,然后重新组合,形成倒序的新数。
提示
使用 num / 100
获取百位,num / 10 % 10
获取十位,num % 10
获取个位,倒序组合成新数。
代码实现
#include <bits/stdc++.h>
using namespace std;
int main() {
int num;
cin >> num; // 输入三位整数
int b = num / 100; // 获取百位
int s = (num / 10) % 10; // 获取十位
int g = num % 10; // 获取个位
int new_num = g * 100 + s * 10 + b; // 倒序组合成新数
cout << new_num << endl; // 输出结果
return 0;
}
2777 细胞分裂
问题分析
细胞分裂每次数量翻倍,初始为 1 个细胞。第一次分裂后变为 2 个,第二次变为 4 个,以此类推,第 n
次分裂后的数量为 n
个 2
相乘,即
。要求第 5 次分裂完成后的数量,因此计算
即可。
提示
可以使用位移运算 1 << n
快速计算 2^n
,这里 1 << 5
等于 32
。
代码实现
#include <bits/stdc++.h>
using namespace std;
int main() {
int cells = 1 << 5; // 计算 2^5,即第5次分裂后的细胞数量
// int cells = 2*2*2*2*2; 或者写5个2相乘
cout << cells << endl; // 输出结果
return 0;
}
2778 电影时长
问题分析
将给定的秒数 n
转换为小时、分钟和秒。通过整数除法和取余操作,我们可以依次计算小时、分钟和秒:小时 = n / 3600
,剩余秒数 = n % 3600
,然后将剩余秒数继续分解为分钟和秒。
提示
使用 n / 3600
获取小时,(n % 3600) / 60
获取分钟,n % 60
获取秒数。
代码实现
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n; // 输入总秒数
int hours = n / 3600; // 计算小时
int minutes = (n % 3600) / 60; // 计算分钟
int seconds = n % 60; // 计算秒数
cout << hours << ":" << minutes << ":" << seconds << endl; // 按格式输出时:分:秒
return 0;
}