Administrator
发布于 2025-09-07 / 0 阅读
0
0

C#第3章:算数运算符

算数运算符是什么

算数运算符用于执行算数计算。数学运算符一共9个,分为两类:

  • 算数运算符:加、减、乘、除、取模

  • 自增自减运算符:前置自增、后置自增、前置自减、后置自减

算数运算符

加法运算符 (+)

  • 用于数值相加(注意数据类型问题)

  • 也可用于字符串连接(但这不是数学运算)

int a = 5 + 3; //8
int a = 5.0 + 3; //报错
double a = 5.0 + 3; //8.0 
double a = 5 + 3; //8.0 目标类型double能完整容纳源类型值int且不损失精度时数据类型转换自动发生
double b = 4.2 + 2.8; //7.0
string s = "Hello" + " World"; // "Hello World"(非数学运算)

数值的精度

  • int :整型最低 10/ 3 = 3

  • float: 单精度浮点数 10/3 = 3.3333333

  • double:双精度浮点数 10/3 = 3.3333333333333333

  • decimal: 高精度小数 10/3 = 3.33333333333333333333333333

减法运算符 (-)

  • 用于数值相减

  • 也可用作一元运算符表示负数

  • 一元运算符:指操作一个值的运算符。

int a = 10 - 4;      // 结果:6
double b = -5.5;      // 负数值
int c = -(-10);       // 结果:10(双重否定)

乘法运算符 (*)

  • 用于数值相乘

int a = 6 * 7;        // 结果:42
double b = 2.5 * 4;   // 结果:10.0

除法运算符 (/)

  • 整数除法:结果截断小数部分

  • 浮点除法:保留小数部分

int a = 10 / 3;   // 结果:3(整数除法)
float f = 10 / 3; //3.0f
float f = 10.0 / 3; //报错
float f = 10.0f / 3; //3.3333333f
double d = 10.0 / 3; //3.3333333333333335d
decimal m = 10m / 3m; //3.3333333333333333333333333333m
//混合运算的类型提升
int a = 2 * 1.5;
int a = 3 / 2; 
double a = 3 / 2; //期望1.5,实际1(纯整数运算无提升)
double a = 3.0 / 2; //期望1.5:使用混合运算时,可以得到1.5(整数自动提升为小数)
double a = (double)3 / 2; //期望1.5: 先转double,可以得到1.5

取模运算符 (%)

  • 返回除法后的余数

  • 用途:判断奇偶性、循环索引等

int remainder = 10 % 3; // 结果:1
bool isEven = (15 % 2) == 0; // 判断偶数:false

自增/自减运算符

前置自增 (++x)

  • 先增加,后使用值

//++:表示自增运算符(自己+1)
            int n = 5;
            //++n;
            n++;
            Console.WriteLine(n);
​
            //--:表示自减运算符(自己-1)
            int n1 = 5;
            --n1;
            Console.WriteLine(n1);
​
int a = 5;
int b = ++a; //
Console.WriteLine(a);
Console.WriteLine(b);

后置自增 (x++)

  • 先使用值,后增加

int a = 5;
int b = a++; // 

前置自减 (--x)

  • 先减少,后使用值

int a = 5;
int b = --a; // 

后置自减 (x--)

  • 先使用值,后减少

int a = 5;
int b = a--; // 

运算符优先级

从高到低:

  1. 括号 ()

  2. 自增/自减(前缀)

  3. 乘法 *、除法 /、取模 %

  4. 加法 +、减法 -

  5. 自增/自减(后缀)

  6. 赋值运算符

int result = 5 + 3 * 2;   // 3*2=6 → 5+6=11
int withParens = (5 + 3) * 2; // 5+3=8 → 8*2=16

总结

C# 9个数学运算符概览

运算符

名称

示例

结果 (示例)

注意事项

+

加法

5 + 3

8

也用于字符串连接

-

减法

10 - 4

6

可作一元负号

*

乘法

6 * 7

42

/

除法

10 / 3 (int)

3

整数除法截断

10.0 / 3

≈3.333

浮点除法

%

取模

10 % 3

1

余数符号同被除数

++

自增

int a=5; a++;

a=6

前置/后置影响计算顺序

--

自减

int b=5; --b;

b=4

前置/后置影响计算顺序

练习(算数运算符5道)

1.交换变量值(不用临时变量)

2.判断奇偶性

3.result 的值是多少?

int result = 8 + 15 % 4 * 2;

4.x 的最终值是多少?

int x = 20;
x /= 4;    
x += 3;    
x *= 2;    

5.将125分钟转换成小时(hours)和分钟(minutes)。

练习(自增自减24道)

1.执行以下代码后,x 的值是多少?

int x = 5;
x = x++ + ++x;
​
1. x = 5
2. x = 5
3. x = 6
​

A) 10 B) 11 C) 12 D) 13

2.代码输出结果是什么?

int a = 3;
Console.Write(a++ + " " + ++a);

A) 3 5 B) 4 4 C) 3 4 D) 4 5

3.执行后 b 的值是多少?

int b = 10;
b += b-- + --b;

A) 27 B) 28 C) 29 D) 30

4.最终 z 的值是多少?

int y = 8;
int z = y-- * 2 + ++y;

A) 24 B) 25 C) 26 D) 27

5.代码输出结果是什么?

int i = 1;
Console.Write(i++ + ++i + i);

A) 6 B) 7 C) 8 D) 9

6.执行后 m 的值是多少?

int m = 6;
m = --m + m++ * 2;

A) 15 B) 16 C) 17 D) 18

7.最终 pq 的值是多少?

int p = 7;
int q = p++ + --p;

A) p=7, q=14 B) p=7, q=15 C) p=8, q=14 D) p=8, q=15

8.代码输出结果是什么?

int x = 4;
Console.Write($"{x++} {x} {++x}");

A) 4 5 6 B) 4 5 5 C) 5 5 6 D) 4 4 5

9.执行后 sum 的值是多少?

int a = 2, b = 3;
int sum = a++ + ++b + a + b--;

A) 11 B) 12 C) 13 D) 14

10.最终 counter 的值是多少?

int counter = 0;
for (int i = 0; i < 5; i++) {
    counter += i++;
}

A) 4 B) 6 C) 10 D) 15

11.代码输出结果是什么?

int num = 9;
Console.Write(num-- - --num);

A) 1 B) 2 C) 3 D) 4

12.执行后 result 的值是多少?

int x = 5, y = 3;
int result = ++x * y-- + x++ - --y;

A) 22 B) 23 C) 24 D) 25

13.最终 ab 的值是多少?

int a = 10, b = 20;
a = b++;
b = ++a;

A) a=20, b=21 B) a=21, b=21 C) a=20, b=20 D) a=21, b=20

14.代码输出结果是什么?

int i = 0;
Console.Write(i++ + ++i + i-- + --i);

A) 2 B) 3 C) 4 D) 5

15.执行后 value 的值是多少?

int value = 15;
value = value-- + --value * 2;

A) 41 B) 42 C) 43 D) 44

16.最终 x 的值是多少?

int x = 1;
x += x++ + ++x + x;

A) 8 B) 9 C) 10 D) 11

17.代码输出结果是什么?

int a = 5, b = 3;
Console.Write(a++ * --b + a / b);

A) 11 B) 12 C) 13 D) 运行时错误(除零异常)

18.执行后 total 的值是多少?

int count = 0;
int total = 0;
while (count++ < 4) {
    total += count;
}

A) 6 B) 10 C) 15 D) 21

19.最终 pq 的值是多少?

int p = 8, q = 4;
q = p++ - --q;
p = q-- * 2;

A) p=12, q=3 B) p=14, q=4 C) p=16, q=5 D) p=18, q=6

20.代码输出结果是什么?

int x = 2;
Console.Write($"{x} {++x} {x++} {x}");

A) 2 3 3 4 B) 2 3 4 4 C) 3 3 3 4 D) 2 3 3 3

21.a 和 b 的值分别是多少?

int a = 5;
int b = a++ + 2;

22.x 的最终值是多少?

int x = 10;
x += 5; 
x *= 2;  

23.i, j, k 的值分别是多少?

int i = 3;
int j = ++i * 2;   
int k = i-- + 1;   

24.a, b, c 的最终值分别是多少?

int a = 5;
int b = a-- + 4; 
int c = ++b * 2;  

答案(算数运算符)

1.答案

int a = 5, b = 10;
a = a + b; // a=15
b = a - b; // b=5
a = a - b; // a=10

2.答案

bool isEven = (number % 2) == 0;

3.result=10 15%4=33*2=68+6=10

4.x=14** 初始20 → 20/4=55+3=88*2=16` 注意:整数除法

5.hours=2, minutes=5 125/60=2(小时) → 125%60=5(分钟)

答案(自增自减)

  1. C) 12 x++ 返回 5(后置),x 变为 6 → ++x 先自增为 7 → 5 + 7 = 12

  2. A) 3 5 先输出 a++(输出 3,a 变为 4)→ ++a 先自增为 5 → 输出 5

  3. B) 28 b-- 返回 10(b 变 9)→ --b 先自减为 8 → 10 + 8 = 18 → b += 18(9+18=27)❌ 修正:表达式计算顺序:b--(值10,b=9)→ --b(b=8,值8)→ 10+8=18 → b = 9 + 18 = 27 答案应为 A) 27,题目选项有误

  4. B) 25 y-- 返回 8(y 变 7)→ 8*2=16++y 先自增为 8 → 16 + 8 = 24 ❌ 修正y-- 后 y=7 → ++y 使 y=8 → 16 + 8 = 24 → z=24 答案应为 A) 24,题目选项有误

  5. B) 7 i++ 返回 1(i 变 2)→ ++i 先自增为 3 → i 当前值 3 → 1 + 3 + 3 = 7

  6. A) 15 --m 先自减为 5 → m++ 返回 5(后自增为 6)→ 5*2=10 → 5 + 10 = 15

  7. A) p=7, q=14 p++ 返回 7(p 变 8)→ --p 先自减为 7 → 7 + 7 = 14 → q=14

  8. A) 4 5 6 输出 x++(输出 4,x 变 5)→ 输出 x(5)→ ++x 自增为 6 并输出

  9. B) 12 a++ 返回 2(a 变 3)→ ++b 自增为 4 → a=3b-- 返回 4(b 变 3)→ 2+4+3+4=13 ❌ 修正a++=2(a=3)→ ++b=4(b=4)→ a=3 → b--=4(b=3)→ 2+4+3+4=13 → 答案应为 C) 13

  10. B) 6 i=0:counter=0+0=0 → i++ 变1 → 循环步进 i++ 变2 i=2:counter=0+2=2 → i++ 变3 → 循环步进 i++ 变4 i=4:counter=2+4=6 → i++ 变5 → 结束

  11. B) 2 num-- 返回 9(num 变 8)→ --num 先自减为 7 → 9 - 7 = 2

  12. C) 24 ++x→x=6 → y-- 返回 3(y 变 2)→ 6*3=18x++ 返回 6(x 变 7)→ --y 自减为 1 → 18 + 6 - 1 = 23 ❌ 修正++x=6 → y--=3(y=2)→ 6*3=18 → x++=6(x=7)→ --y=1(y=1)→ 18+6-1=23 → 答案应为 B) 23

  13. B) a=21, b=21 a = b++(a=20, b=21)→ b = ++a(a 先自增为 21 → b=21)

  14. C) 4 i++ 返回 0(i=1)→ ++i 自增为 2 → 返回 2 → i-- 返回 2(i=1)→ --i 自减为 0 → 返回 0 → 0+2+2+0=4

  15. C) 43 value-- 返回 15(value=14)→ --value 自减为 13 → 13*2=26 → 15+26=41 ❌ 修正:表达式为 value-- + (--value * 2)value--=15(value=14)→ --value=13(value=13)→ 15 + (13*2)=41 → 答案应为 A) 41

  16. A) 8 x++ 返回 1(x 变 2)→ ++x 自增为 3 → x=3 → 1+3+3=7 → x +=7(2+7=9)❌ 修正:原始 x=1 → 表达式:x++=1(x=2)→ ++x=3(x=3)→ 当前 x=3 → 1+3+3=7 → x = 1 + 7 = 8(因为 x += ... 等价于 x = x + ...,此时 x 是原始值 1) 最终 x=8

  17. D) 运行时错误(除零异常) a++ 返回 5(a=6)→ --b 自减为 2 → 5*2=10a/b = 6/2=3 → 10+3=13 ❌ 修正:b 自减后为 2,不会除零 → 正确答案为 B) 12? 重新计算--b 使 b=2 → a/b = 6/2=3 → 5*2=10 → 10+3=13 → 答案应为 C) 13

  18. B) 10 循环过程: count=0:count++<4 成立 → total=0+1=1(count 自增为 1) count=1:count++<4 成立 → total=1+2=3(count=2) count=2:count++<4 成立 → total=3+3=6(count=3) count=3:count++<4 成立 → total=6+4=10(count=4) count=4:count++<4 不成立 → 结束

  19. A) p=12, q=3 第一行:p++ 返回 8(p 变 9)→ --q 自减为 3 → q = 8 - 3 = 5 修正p++=8(p=9)→ --q=3(q=3)→ q = 8 - 3 = 5 → 第二行:q-- 返回 5(q 变 4)→ p = 5 * 2 = 10 最终 p=10, q=4(无匹配选项)

  20. A) 2 3 3 4 x 输出 2 → ++x 自增为 3 并输出 → x++ 输出 3(后自增为 4)→ x 输出 4

21.a=6, b=7 a++ 先返回原值5再自增 → 5+2=7 → 后a自增为6 22.x=30 初始10 → 10+5=1515*2=30 23.i=3, j=8, k=5

  • ++i:i先变4 → 4*2=8(j=8)

  • i--:先用i=4 → 4+1=5(k=5) → 后i自减为3 24.a=4, b=10, c=20`**

  • a--:先用a=5 → 5+4=9(b=9) → a自减为4

  • ++b:b先增为10 → 10*2=20(c=20)


评论