常量与变量赋值
概念讲解
常量
常量是程序运行期间不能改变的值。
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:自增自减
题目: 以下代码的行为是什么?
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练习题
- 以下代码的输出是什么?
123int a = 10;
a += a -= a * a;
cout << a;查看答案
-180
计算过程(从右到左):
a * a = 100a -= 100→a = 10 - 100 = -90a += (-90)→a = -90 + (-90) = -180
- 以下代码的输出是什么?
12int a = 5;
cout << a++ + a++;查看答案
未定义行为(不同编译器结果可能不同)
a++ 在同一个表达式中修改同一个变量两次,这是未定义行为。
常见结果可能是 10 或 11,但不能依赖这个结果。
易错点
⚠️ 注意:
- 常量定义后不能修改
- 自增自减的前置和后置有区别
- 隐式类型转换可能丢失精度
- 赋值语句的顺序