常量与变量赋值

概念讲解

常量

常量是程序运行期间不能改变的值。

12const int MAX = 100;
const double PI = 3.14159;

字面常量

1234542          // 整型常量
3.14        // 浮点常量
'A'         // 字符常量
"Hello"     // 字符串常量
true        // 布尔常量

赋值语句

基本赋值

123int a = 10;
int b;
b = 20;

多重赋值

12int a, b, c;
a = b = c = 0;

复合赋值

123456int a = 10;
a += 5;   // a = a + 5
a -= 3;   // a = a - 3
a *= 2;   // a = a * 2
a /= 4;   // a = a / 4
a %= 3;   // a = a % 3

自增自减

前置

12int a = 5;
int b = ++a;  // a = 6, b = 6

后置

12int a = 5;
int b = a++;  // a = 6, b = 5

类型转换

隐式转换

1234int a = 5;
double b = a;  // int -> double

int c = 3.7;   // double -> int,截断小数部分

显式转换

1234double a = 3.7;
int b = (int)a;      // C 风格
int c = int(a);      // C++ 风格
int d = static_cast<int>(a);  // C++ 推荐

考点分析

初赛考查方式

  1. 选择题: 常量和变量的概念
  2. 程序阅读: 理解赋值和类型转换
  3. 填空题: 自增自减运算

常见题型

  • 类型转换
  • 自增自减运算
  • 赋值语句

例题精讲

例题 1:自增自减

题目: 以下代码的行为是什么?

123int a = 5;
int b = a++ + ++a;
cout << b;

解答:

⚠️ 这是未定义行为(Undefined Behavior)!

在同一个表达式中对变量 a 进行了两次修改(a++ 和 ++a),这在 C++ 标准中是未定义行为。不同编译器可能产生不同结果,常见的输出可能是 11 或 12,但不能依赖这个结果。

正确写法应该是分开写:

1234int a = 5;
int temp1 = a++;  // temp1 = 5, a = 6
int temp2 = ++a;  // a = 7, temp2 = 7
int b = temp1 + temp2;  // b = 12

例题 2:类型转换

题目: 以下代码的输出是什么?

123int a = 5;
double b = 2;
cout << a / b;

解答:

a 隐式转换为 double
5.0 / 2.0 = 2.5

练习题

  1. 以下代码的输出是什么?
123int a = 10;
a += a -= a * a;
cout << a;
查看答案

-180

计算过程(从右到左):

  1. a * a = 100
  2. a -= 100 → a = 10 - 100 = -90
  3. a += (-90) → a = -90 + (-90) = -180
  1. 以下代码的输出是什么?
12int a = 5;
cout << a++ + a++;
查看答案

未定义行为(不同编译器结果可能不同)

a++ 在同一个表达式中修改同一个变量两次,这是未定义行为。

常见结果可能是 10 或 11,但不能依赖这个结果。

易错点

⚠️ 注意:

  1. 常量定义后不能修改
  2. 自增自减的前置和后置有区别
  3. 隐式类型转换可能丢失精度
  4. 赋值语句的顺序