12.算术运算符

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

×

喜欢就点赞,疼爱就打赏