第4课 赋值运算和算术运算
前言
一个程序主题(主函数内)通常包含四部分:定义数据、输入变量、计算处理、输出结果。
从现在开始,我们将逐一介绍计算处理方法。
C++语言中有很多运算符和表达式,本课值涉及到C++语言中最基本的赋值运算和算术运算。
本课主要介绍了以下内容。
(1)基本赋值运算=。
(2)基本算术运算包括+、-、、/、%、++和﹣-。
(3)复合算术赋值运算包括+=、-=、=、/=和%=。
(4)混合运算优先级是"短向长转"、“右向左转”,强制类型转换加括号。
一、内容提纲
这里只给出内容提纲,具体参见《C++案例趣学》对应的部分。
1. 基本赋值运算符(=)
2. 算术运算七兄弟(+, -, *, /, %, ++, --)
算术运算符使用时需要注意的几点
(1)两个整数做除法运算,那么结果一定是整数。计算方法是舍去小数点后的数据,仅取整数部分。
例如:表达式11/4的值为2,1/3的值为0。
若要使结果是小数,可以将其中一个表示为小数形式,例如:1.0/2结果就是小数,保留1位小数那就是0.5。
(2)求余运算符的结果是整型数据相除的余数,它不能用于实型数据的运算。
例如:表达式3%4的值为3,9%4的值为1,100%4的值为0。
(3)+和-还可以作为单目运算符,用于表示数值常量的符号,如+7和-7。
(4)双目运算符两侧操作数的类型要相同,否则,系统会自动进行类型转换,使它们具有相同的数据类型,然后再进行运算。转换的原则一般是转换成占存储空间较大的数据类型。
例如:10.0/4时,系统会先自动将其转换为10.0/4.0,再算出其值为2.5。
(5)算术表达式中乘号不能省略,和数学不同,例如5(fahr-32)/9是错误的,会报错: [Error] called object is not a function or function pointer,需要改成5*(fahr-32)/9;
3. 运算符简写
简写 | 含义 |
---|---|
a+=b | a=a+(b) |
a-=b | a=a-(b) |
a*=b | a=a*(b) |
a/=b | a=a/(b) |
a%=b | a=a%(b) |
注意:a-=b+c相当于a=a-(b+c),所以,这里的括号是必要的。
4. 混合运算
- 多类型混合运算扽的类型转换规则是“短向长转”,即占用字节少的类型向占用字节多的类型转换。
- 赋值时的类型转换规则是“右向左转”,即等号右边的类型向等号左边的类型转换。
5. 取整的4种方法
(1)四舍五入法:与数学规定相同。如3.4四舍五入后为3,3.5四舍五入后为4。
(2)截尾取整法:无论小数部分是多少都要舍掉。如3.5截尾为3,-3.5截尾为﹣3。
(3)下取整法:取小于或等于数据的最大整数。在 C ++中,用 floor(数据)函数完成下取整。如 floor(3.5)结果为3, floor(-3.5)结果为﹣4。
(4)上取整法:取大于数据的最小整数。在 C ++中,用 ceil (数据)函数完成上取整。如 ceil(3.4)结果为4, ceil(-3.4)结果为﹣3。
注意
要想使用floor(数据)和 ceil (数据)函数,需要在程序开头添加如下头文件:# include < cmath >
二、课后练习
3. 长方形面积计算问题
输入长方体的长a、宽b(单位:cm),计算长方形面积。
4. 球的体积计算问题
已知球的半径r,球的体积计算公式为 4 3 π r 3 \frac4 3\pi r^3 34πr3。输入球的半径r,求球的体积V。
5. 温度转换问题
摄氏温度是目前世界使用广泛的一种温标,用符号
∘
C
^\circ\text{C}
∘C表示。华氏温度也是用来计量温度的单位,用符号
∘
F
^\circ\text{F}
∘F表示,两者间的转换公式如下
c
=
5
9
(
f
−
32
)
c=\frac 5 9 (f-32)
c=95(f−32)
f
=
9
5
c
+
32
)
f=\frac 9 5 c +32)
f=59c+32)
输入一个表示华氏温度的单精度实数(f>=459.67),计算其对应的摄氏温度,要求精确到小数点后3位。
代码如下(示例):
#include<iostream>
#include<iomanip>
using namespace std;
// 输入一个表示华氏温度的单精度实数(f>=459.67),
// 计算其对应的摄氏温度,要求精确到小数点后3位。
// 摄氏度 = (华氏度 - 32°F) ÷ 1.8
// 华氏度 = 32°F + 摄氏度 × 1.8
int main() {
float f, c;
cout << "请输入一个华氏温度:";
cin >> f;
c = (f-32)*5/9;
cout << fixed << setprecision(3) << c << endl;
return 0;
}
运行测试程序如下:
请输入一个华氏温度:100
37.778
6. 学期成绩评定问题
卡路这学期学习了 “人工智能入门” 课程。这门课程的总成绩计算方法是:
总成绩=作业成绩x30%+小测成绩x20%+期末考试成绩x50%
期末考试后,卡路想知道这门课程自己最终能得多少分。
输入:一行,包含3个非负整数 a 、b 、c(a 、b 和 c 均大于0且小于100),即卡路的作业成绩、小测成绩和期末考试成绩,3个数据用空格分隔。
输出:一行,包含一个整数,即卡路这门课程的总成绩,满分也是100分。
输入样例:
100 100 98
输出样例:
99
代码如下:
#include<iostream>
using namespace std;
// 总成绩=作业成绩x30%+小测成绩x20%+期末考试成绩x50%
// 输入:作业成绩、小测成绩和期末考试成绩
int main() {
int exercise, midterm_test, end_test;
float final_score;
cout << "输入作业成绩、小测成绩和期末考试成绩:" << endl;
cin >> exercise >> midterm_test >> end_test;
final_score = exercise*0.3 + midterm_test*0.2 + end_test*0.5;
cout << int(final_score) << endl;
return 0;
}
运行程序,测试如下:
输入作业成绩、小测成绩和期末考试成绩:
100 100 98
99