12.运算符-算术运算符
12.1 知识点
算术运算符是什么
算术运算符是用于数值类型变量计算的运算符,它的返回结果是数值。
赋值符号=
关键知识点:先看右侧,再看左侧,把右侧的值赋值给左侧的变量。
string myName = "韬老狮";
int myAge = 18;
算术运算符
加法 +
- 用自己计算:先算右侧结果,再赋值给左侧变量。
int i = 10;
i = i + 2;
cout << i << endl; // 12
- 连续运算:先算右侧结果,再赋值给左侧变量。
i = 1 + 3 + 2 + 4 + i + i;
cout << i << endl; // 34
- 初始化时运算:先算右侧结果,再赋值给左侧变量。
int i2 = 1 + 2 + 3 + 4 + i;
cout << i2 << endl; // 44
减法 -
- 用自己计算:先算右侧结果,再赋值给左侧变量。
int j = 1;
j = j - 1;
cout << j << endl; // 0
- 连续运算:先算右侧结果,再赋值给左侧变量。
j = 1 - 1 - 9 - 8 - j;
cout << j << endl; // -17
- 初始化时运算:先算右侧结果,再赋值给左侧变量。
int j2 = 0 - 1 - 99 - j;
cout << j2 << endl; // -83
乘法 *
- 用自己计算:先算右侧结果,再赋值给左侧变量。
int c = 1;
c = c * 10;
cout << c << endl; // 10
- 连续运算:先算右侧结果,再赋值给左侧变量。
c = 1 * 2 * 10 * c;
cout << c << endl; // 200
- 初始化时运算:先算右侧结果,再赋值给左侧变量。
int c2 = 1 * 2 * c;
cout << c2 << endl; // 400
除法 /
- 用自己计算:先算右侧结果,再赋值给左侧变量。
int chu = 2;
chu = 10 / chu;
cout << chu << endl; // 5
注意:赋值时,没有小数的数值默认是整数。如果用来做除法运算,会丢失小数点后的部分。若需浮点结果,确保运算中有浮点数。
chu = 1 / 2;
cout << chu << endl; // 0
float f = 1 / 2.0f;
cout << f << endl; // 0.5
取余 %
- 用自己计算:先算右侧结果,再赋值给左侧变量。
int qy = 4;
qy = qy % 3;
cout << qy << endl; // 1
- 连续运算:先算右侧结果,再赋值给左侧变量。
qy = 4 % 3 % 2;
cout << qy << endl; // 1
- 初始化时运算:先算右侧结果,再赋值给左侧变量。
qy = 1 % 2;
cout << qy << endl; // 1
算术运算符的优先级
- 优先级是指在混合运算时的运算顺序。
- 乘、除、取余优先级高于加减。
- 先算乘、除、取余,再算加减。
int a = 1 + 2 * 3 / 2 + 1 + 2 * 3;
cout << a << endl; //1 + 3 + 1 + 6 = 11
a = 1 + 4 % 2 * 3 / 2 + 1 + 2 * 3;
cout << a << endl; // 1 + 0 + 1 + 6 = 8
- 使用括号可以改变优先级,优先计算括号内内容。
a = 1 + 4 % (2 * 3 / 2) + 1 + 2 * 3;
cout << a << endl; // 1 + 4 % 3 + 1 + 6 = 1 + 1 + 7 = 9
- 多组括号 先算最里层括号 依次往外算
a = 1 + 4 % (2 * (3 / 2)) + 1 + 2 * 3;
cout << a << endl; // 1 + 4 % ( 2 * 1) + 1 + 6 = 1 + 4 % 2 + 7 = 1 + 0 + 7 = 8
算术运算符的复合运算符
固定写法:+=
, -=
, *=
, /=
, %=
- 用于自己和某一个后面的数进行计算后,再返回给自己。
int i3 = 1;
i3 = i3 + 2;
cout << i3 << endl;//3
i3 = 1;
i3 += 2; // i3 = i3 + 2;
cout << i3 << endl;//3
i3 = 2;
i3 += 2;//i3 = i3 + 2 = 4
i3 -= 2;//i3 = i3 - 2 = 2
i3 *= 2;//i3 = i3 * 2 = 4
i3 /= 2;//i3 = i3 / 2 = 2
i3 %= 2;//i3 = i3 % 2 = 0
//复合运算符 相当于 就是自己和某一个后面的数进行计算 然后返回给自己
cout << i3 << endl;//0
- 注意:复合运算符 只能进行一种运算 不能混合运算
//i3 */= 2;//不被允许
- 复合运算符 后面 是可以进行连续运算的 规则就是 连续运算结束后 再按复合运算符的规则进行计算
i3 += 2 + 3 + i3 * 2 / 2 % 2;
cout << i3 << endl; // 5 + 0 = 5
算术运算符的自增减
- 普通自增写法。
int i4 = 1;
i4 = i4 + 1;
cout << i4 << endl; // 3
- 自增运算符
++
:让自己 +1。- 先用再加:
i++
- 先加再用:
++i
- 先用再加:
i4 = 1;
cout << i4++ << endl; // 1
cout << ++i4 << endl; // 3
- 自减运算符
--
:让自己 -1。
i4 = 1;
cout << i4-- << endl; // 1
cout << --i4 << endl; // -1
不同精度的数值进行混合运算
- 若数据类型相同,结果数据类型相同。
int ii = 1;
int jj = 2;
cout << ii + jj << endl; // 3
- 若数据类型不同,算术表达式中的数据会取精度最高的数据类型。
float ff = 10.5f;//10.5
char cc = 'A';//65
bool bb = true;//1
int ii5 = 5;//5
cout << ff + cc + bb + ii5 << endl;//81.5
- 注意:如果想要用变量存储最终结果,一定以最高精度的变量类型容器来装载,否则会丢失精度
float ff2 = ff + cc + bb + ii5;
cout << ff2 << endl;//81.5
12.2 知识点代码
Lesson12_运算符_算术运算符.cpp
#include <iostream>
using namespace std;
int main()
{
std::cout << "算术运算符\n";
#pragma region 知识点一 算术运算符是什么
//算术运算符 是用于 数值类型变量计算的运算符
//它的返回结果是数值
#pragma endregion
#pragma region 知识点二 赋值符号
// =
// 关键知识点 :
// 先看右侧 再看左侧 把右侧的值赋值给左侧的变量
string myName = "韬老狮";
int myAge = 18;
#pragma endregion
#pragma region 知识点三 算术运算符
#pragma region 加+
// 用自己计算 先算右侧结果 再赋值给左侧变量
int i = 10;
i = i + 2;
cout << i << endl;//12
// 连续运算 先算右侧结果 再赋值给左侧变量
i = 1 + 3 + 2 + 4 + i + i;
cout << i << endl;//10 + 12 + 12 = 34
// 初始化时就运算 先算右侧结果 再赋值给左侧变量
int i2 = 1 + 2 + 3 + 4 + i;
cout << i2 << endl;//34 + 10 = 44
#pragma endregion
#pragma region 减-
// 用自己计算 先算右侧结果 再赋值给左侧变量
int j = 1;
j = j - 1;
cout << j << endl;//0
// 连续运算 先算右侧结果 再赋值给左侧变量
j = 1 - 1 - 9 - 8 - j;
cout << j << endl;//-17
// 初始化时就运算 先算右侧结果 再赋值给左侧变量
int j2 = 0 - 1 - 99 - j;
cout << j2 << endl;//-83
#pragma endregion
#pragma region 乘*
// 用自己计算 先算右侧结果 再赋值给左侧变量
int c = 1;
c = c * 10;
cout << c << endl;//10
// 连续运算 先算右侧结果 再赋值给左侧变量
c = 1 * 2 * 10 * c;
cout << c << endl;//200
// 初始化时就运算 先算右侧结果 再赋值给左侧变量
int c2 = 1 * 2 * c;
cout << c2 << endl;//400
#pragma endregion
#pragma region 除/
// 用自己计算 先算右侧结果 再赋值给左侧变量
int chu = 2;
chu = 10 / chu;
cout << chu << endl;//5
// 注意:
// 赋值时,没有小数的数值默认的整数 是int 如果用来做除法运算 要注意 会丢失小数点后的小数
// 如果你想用浮点数来存储 一定是 在运算时要有浮点数的特征
chu = 1 / 2;
cout << chu << endl;//0
float f = 1 / 2.0f;//注意要是2.0f 否则结果仍然是0
cout << f << endl;//0.5
#pragma endregion
#pragma region 取余%
// 用自己计算 先算右侧结果 再赋值给左侧变量
int qy = 4;
qy = qy % 3;
cout << qy << endl;//4 / 3 得到的余数是 1
// 连续运算 先算右侧结果 再赋值给左侧变量
qy = 4 % 3 % 2;
cout << qy << endl;// 1 % 2 = 1
// 初始化时就运算 先算右侧结果 再赋值给左侧变量
qy = 1 % 2;
cout << qy << endl;// 1
#pragma endregion
#pragma endregion
#pragma region 知识点四 算术运算符的 优先级
//优先级 是指 在混合运算时的运算顺序
//乘除取余 优先级高于 加减
// 先算乘、除、取余
// 后算加、减
int a = 1 + 2 * 3 / 2 + 1 + 2 * 3;
cout << a << endl; //1 + 3 + 1 + 6 = 11
a = 1 + 4 % 2 * 3 / 2 + 1 + 2 * 3;
cout << a << endl; // 1 + 0 + 1 + 6 = 8
//括号可以改变优先级 优先计算括号内内容
a = 1 + 4 % (2 * 3 / 2) + 1 + 2 * 3;
cout << a << endl; // 1 + 4 % 3 + 1 + 6 = 1 + 1 + 7 = 9
//多组括号 先算最里层括号 依次往外算
a = 1 + 4 % (2 * (3 / 2)) + 1 + 2 * 3;
cout << a << endl; // 1 + 4 % ( 2 * 1) + 1 + 6 = 1 + 4 % 2 + 7 = 1 + 0 + 7 = 8
#pragma endregion
#pragma region 知识点五 算术运算符的 复合运算符
// 固定写法 运算符=
// += -= *= /= %=
//复合运算符 是用于 自己=自己进行运算
int i3 = 1;
i3 = i3 + 2;
cout << i3 << endl;//3
i3 = 1;
i3 += 2; // i3 = i3 + 2;
cout << i3 << endl;//3
i3 = 2;
i3 += 2;//i3 = i3 + 2 = 4
i3 -= 2;//i3 = i3 - 2 = 2
i3 *= 2;//i3 = i3 * 2 = 4
i3 /= 2;//i3 = i3 / 2 = 2
i3 %= 2;//i3 = i3 % 2 = 0
//复合运算符 相当于 就是自己和某一个后面的数进行计算 然后返回给自己
cout << i3 << endl;//0
//注意:复合运算符 只能进行一种运算 不能混合运算
//i3 */= 2;
// 复合运算符 后面 是可以进行连续运算的 规则就是 连续运算结束后 再按复合运算符的规则进行计算
i3 += 2 + 3 + i3 * 2 / 2 % 2;
cout << i3 << endl; // 5 + 0 = 5
#pragma endregion
#pragma region 知识点六 算术运算符的 自增减
//普通自增写法
int i4 = 1;
i4 = i4 + 1;
i4 += 1;
cout << i4 << endl;//3
//自增运算符 ++ 让自己+1
i4 = 1;
//先用再加
i4++;
cout << i4 << endl;//2
//先加再用
++i4;
cout << i4 << endl;//3
i4 = 1;
//先用再加
cout << i4++ << endl;//1
//此时 i4=2 了
//先加再用
cout << ++i4 << endl;//3
//自减运算符 -- 让自己-1
i4 = 1;
//先用再减
cout << i4-- << endl;//1
//此时 i4=0了
//先减再用
cout << --i4 << endl;//-1
//自增减是让自己+1或-1
//但是
// 符号在前 代表 先加减再用 ++i --i
// 符号在后 代表 先用再加减 i++ i--
#pragma endregion
#pragma region 知识点七 不同精度的数值进行混合运算
//在进行混合运算时
//不同数据类型的数据会先自动转换为同一类型,然后再进行运算
//1.若数据类型相同
// 结果数据类型相同
int ii = 1;
int jj = 2;
cout << ii + jj << endl;//3
//2.若数据类型不同
// 算术表达式中的数据会取精度最高的数据类型,以确保数据精度不发生损失
float ff = 10.5f;//10.5
char cc = 'A';//65
bool bb = true;//1
int ii5 = 5;//5
cout << ff + cc + bb + ii5 << endl;//81.5
//注意:如果想要用变量存储最终结果,一定以最高精度的变量类型容器来装载
// 否则会丢失精度
float ff2 = ff + cc + bb + ii5;
cout << ff2 << endl;//81.5
#pragma endregion
}
12.3 练习题
定义一个变量存储你的年龄,十年后你的年龄是多少?请输出到控制台
int myAge = 18;
// myAge = myAge + 10;
myAge += 10;
cout << "十年后我的年龄是" << myAge << endl; // 28
计算一个半径为5的圆的面积和周长
面积公式:πr²
周长公式:2πr
float r = 5;
const float PI = 3.1415f;
float mianJi = PI * r * r;
cout << "圆的面积为:" << mianJi << endl; // 圆的面积为:78.5375
float zhouChange = 2 * PI * r;
cout << "圆的周长为:" << zhouChange << endl; // 圆的周长为:31.415
计算任意三门成绩的总分、平均分打印到控制台(三门成绩为 C++、UE、Unity)
int CPP = 81, UE = 70, Unity = 90;
// 总分
int sum = CPP + UE + Unity;
// 平均分
float avg = sum / 3.0f;
cout << "总分为:" << sum << endl; // 总分为:241
cout << "平均分为:" << avg << endl; // 平均分为:80.3333
商店 T 恤的价格为 285 元/件,裤子的价格为 720 元/条,小李买了 2 件 T 恤和 3 条裤子,请计算总价和打 3.8 折后的价格
int kuZiJiaGe = 720;
int tXueJiaGe = 285;
// 总价
int sum2 = 2 * tXueJiaGe + 3 * kuZiJiaGe;
// 打折后
float sum3 = sum2 * 0.38f;
cout << "总价:" << sum2 << endl; // 总价:2730
cout << "打3.8折后:" << sum3 << endl; // 打3.8折后:1037.4
说明以下表达式的结果
int a = 10, b = 20;
int number1 = ++a + b;
cout << number1 << endl; // 31
a = 10;
b = 20;
int number2 = a + b++;
cout << number2 << endl; // 30
a = 10;
b = 20;
int number3 = a++ + ++b + a++;
cout << number3 << endl;
// C++ 中 number3 可能有两个结果(与编译器有关)
// 42: 10 + 21 + 11 = 42
// 41: 10 + 21 + 10 = 41
交换两个数的值(a = 99,b = 87)
方法 1:使用临时变量
方法 2:使用算术运算符
int a1 = 99;
int b1 = 87;
// 方法 1:临时变量
int temp = a1;
a1 = b1;
b1 = temp;
cout << a1 << endl; // 87
cout << b1 << endl; // 99
// 方法 2:算术运算符
a1 = 99;
b1 = 87;
a1 = a1 + b1; // 99 + 87
b1 = a1 - b1; // 99 + 87 - 87 = 99
a1 = a1 - b1; // 99 + 87 - 99 = 87
cout << a1 << endl; // 87
cout << b1 << endl; // 99
将 987652 秒转为 n 天 n 小时 n 分钟 n 秒
// 一天占多少秒 = 60 * 60 * 24
int oneDayS = 60 * 60 * 24;
// 一个小时占多少秒 = 60 * 60 s
int oneHourS = 60 * 60;
// 一分钟占多少秒 = 60s
int oneMinS = 60;
// 算天数:总的秒数 / 一天有多少秒
int day = 987652 / oneDayS;
// 算小时:用不足一天的秒 / 一小时占的秒数
int hour = 987652 % oneDayS / oneHourS;
// 算分钟:用不足一小时的秒 / 一分钟对应的秒数
int min = 987652 % oneHourS / oneMinS;
// 算秒:用不足一分钟的秒
int s = 987652 % oneMinS;
cout << "987652秒对应的时间是:" << day << "天" << hour << "小时" << min << "分钟" << s << "秒" << endl;
// 987652秒对应的时间是:11天10小时20分钟52秒
12.4 练习题代码
Lesson12_练习题.cpp
#include <iostream>
using namespace std;
int main()
{
std::cout << "算术运算符练习题\n";
cout << "****************************************" << endl;
#pragma region 练习题一
//定义一个变量存储你的年龄,十年后你的年龄是多少?请输出到控制台
int myAge = 18;
//myAge = myAge + 10;
myAge += 10;
cout << "十年后我的年龄是" << myAge << endl;//十年后我的年龄是28
#pragma endregion
cout << "****************************************" << endl;
#pragma region 练习题二
/*计算一个半径为5的圆的面积和周长
面积公式:πr²
周长公式:2πr*/
float r = 5;
const float PI = 3.1415f;
float mianJi = PI * r * r;
cout << "圆的面积为:" << mianJi << endl;//圆的面积为:78.5375
float zhouChange = 2 * PI * r;
cout << "圆的周长为:" << zhouChange << endl;//圆的周长为:31.415
#pragma endregion
cout << "****************************************" << endl;
#pragma region 练习题三
/*计算任意三门成绩的总分、平均分打印到控制台。
三门成绩均为整数类型(C++ UE Unity)*/
int CPP = 81, UE = 70, Unity = 90;
//总分
int sum = CPP + UE + Unity;
//平均分
float avg = sum / 3.0f;
cout << "总分为:" << sum << endl;//总分为:241
cout << "平均分为:" << avg << endl;//平均分为:80.3333
#pragma endregion
cout << "****************************************" << endl;
#pragma region 练习题四
/*商店T恤的价格为285元/件,裤子的价格为720元/条,
小李在该店卖了2件T恤和3条裤子,
请计算小李该付多少钱?打3.8折后呢?*/
int kuZiJiaGe = 720;
int tXueJiaGe = 285;
//总价
int sum2 = 2 * tXueJiaGe + 3 * kuZiJiaGe;
//打折后
float sum3 = sum2 * 0.38f;
cout << "总价:" << sum2 << endl;//总价:2730
cout << "总价:" << 2 * 285 + 3 * 720 << endl;//总价 : 2730
cout << "打3.8折后:" << sum3 << endl;//打3.8折后 : 1037.4
cout << "打3.8折后:" << (2 * 285 + 3 * 720) * 0.38f << endl;//打3.8折后 : 1037.4
#pragma endregion
cout << "****************************************" << endl;
#pragma region 练习题五
//请说明 number1和number2和number3的结果
int a = 10, b = 20;
int number1 = ++a + b;
cout << number1 << endl;//31
a = 10;
b = 20;
int number2 = a + b++;
cout << number2 << endl;//30
a = 10;
b = 20;
int number3 = a++ + ++b + a++;
cout << number3 << endl;
// C++中 number3 可能有两个结果 和编译器有关 不同的编译器实现可能会有不同的处理方式
// 42
//10 + 21 + 11 = 42
// 41
//10 + 21 + 10 = 41
#pragma endregion
cout << "****************************************" << endl;
#pragma region 练习题六
//有两个数 a = 99,b = 87,请写出两种方法交换他们的值,让 a = 87,b = 99
int a1 = 99;
int b1 = 87;
//中间商 不赚差价
int temp = a1;//99
a1 = b1;//87
b1 = temp;//99
cout << a1 << endl;//87
cout << b1 << endl;//99
//a = b;
//b = a;
//算术运算符 加减法
a1 = 99;
b1 = 87;
a1 = a1 + b1; // 99 + 87
b1 = a1 - b1; // 99 + 87 - 87 = 99
a1 = a1 - b1; // 99 + 87 - 99 = 87
cout << a1 << endl;//87
cout << b1 << endl;//99
#pragma endregion
cout << "****************************************" << endl;
#pragma region 练习题七
//请把987652秒通过代码转为n天n小时n分钟n秒显示在控制台中
//一天占多少秒 = 60 * 60 * 24
int oneDayS = 60 * 60 * 24;
//一个小时占多少秒 = 60 * 60 s
int oneHourS = 60 * 60;
//一分钟占多少秒 = 60s
int oneMinS = 60;
// 算天数 总的秒数 / 一天有多少秒
int day = 987652 / oneDayS;
// 算小时 用不足一天的秒 / 一小时占的秒数
// 987652 - day * oneDayS
int hour = 987652 % oneDayS / oneHourS;
// 算分钟 用不足一小时的秒 / 一分钟对应的秒数
int min = 987652 % oneHourS / oneMinS;
// 算秒 用不足一份中的秒 就是剩余的秒数
int s = 987652 % oneMinS;
cout << "987652秒对应的时间是:" << day << "天" << hour << "小时" << min << "分钟" << s << "秒" << endl;//987652秒对应的时间是:11天10小时20分钟52秒
#pragma endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com