C++ 中合法的标识符(变量名/函数名)可以包含?
规则:标识符只能由字母、数字、下划线组成,且不能以数字开头。
考点:标识符(KJ-13a)。
解析:abc、_x、a1 合法;1a(数字开头)、a-b(减号)、a b(空格)都不合法。
易错:下划线可以开头(_x 合法);汉字在新标准中虽允许但竞赛不用。
排除法:减号/空格不是标识符字符;数字不能开头。
下列哪个是不合法的标识符?
规则:不能以数字开头。
考点:标识符(KJ-13a)。
解析:2abc 以数字 2 开头,编译器会报错;_abc(下划线开头)、a2b、abc_ 都合法。
易错:下划线开头合法是常见盲点。
排除法:其余三个都符合标识符规则。
C++ 中的关键字(如 int、if、while)可以拿来当变量名吗?
规则:关键字(保留字)已被语言占用,不能用作标识符。
考点:关键字(KJ-13a)。
解析:int、if、while、return、const 等都是关键字;int int = 5; 是编译错误。
易错:main 不是关键字(是函数名惯例),但 int 等是。
排除法:关键字有固定含义,不能作变量名。
关于「常量」与「变量」,下列说法正确的是?
规则:变量 = 值可变的存储单元;常量 = 值固定不变。
考点:常量与变量(KJ-13a/b)。
解析:int a = 5; a = 10;(a 是变量可改);const int b = 5;(b 是常量,再赋值报错)。
排除法:方向反、都可改、不占内存都不对。
代码中的 100、3.14、'A'、"hi" 这类直接写出的值称为?
规则:直接写在代码里的值叫字面常量:100 整型、3.14 浮点、'A' 字符、"hi" 字符串。
考点:常量(KJ-13a)。
解析:cout << 100; 里的 100 就是字面常量,不需要名字。
易错:'A' 是字符(1 个字符),"A" 是字符串(含结尾 \0),两者不同。
排除法:不是变量(无名字);不是关键字;不是函数。
C++ 中使用变量前必须做的操作是?
规则:使用变量前必须先定义:int a; 告诉编译器 a 是整型。
考点:变量定义(KJ-13b)。
解析:a = 5; 单独写会报错(a 未定义);必须先 int a; 再赋值。
排除法:输出/括号都不是使用变量的前提。
a + b * 2 在 C++ 中称为?
规则:由运算符和操作数组成的式子叫表达式;表达式以分号结尾才成为语句。
考点:表达式(KJ-13a)。
解析:a + b * 2 是表达式(求值);x = a + b * 2; 是语句(赋值语句)。
易错:表达式 vs 语句——表达式加分号变语句。
排除法:不是语句(无分号);不是注释/头文件。
程序中定义在 main 函数外面的变量(如 int n; 写在最顶部)称为?
规则:定义在函数外部的变量是全局变量,整个程序都能用;定义在函数内部的是局部变量。
考点:变量作用域(KJ-13b)。
解析:全局变量默认初始化为 0,程序所有函数都能访问;竞赛中常用全局数组。
易错:局部变量不初始化是脏数据,全局变量自动清零。
排除法:局部变量定义在函数内;常量的值固定;宏是预处理替换。
int a = 5; 这行代码完成了什么?
规则:类型 变量名 = 初值; = 定义 + 初始化。
考点:变量定义(KJ-13b)。
解析:int a = 5; 给 a 分配内存并放入 5;int a; 只定义不初始化(值是脏数据)。
易错:局部变量不初始化直接用,值不确定。
排除法:只定义不赋值是 int a;;常量用 const;不是输出。
在 C++ 中,用 const 关键字声明的变量特点是?
规则:const 修饰的变量初始化后只读,再赋值报错。(真题 2023 考法)
考点:const(KJ-13b)。
解析:const int MAXN = 100; 之后 MAXN = 200; 是编译错误;常用来定义数组大小、固定参数。
易错:const 变量必须初始化;const 变量仍是变量(占内存),与 #define 不同。
排除法:只读不可改;占内存;不限类型。
#define MAXN 100 的作用是?
规则:#define 名字 内容 是宏定义,预处理阶段把代码里所有这个名字替换成内容。
考点:宏(KJ-13e)。
解析:#define MAXN 100 后,代码里出现的 MAXN 在预处理时全变成 100;没有分号,不是变量。
易错:宏是纯文本替换,不做类型检查;#define 结尾不能加分号(会连分号一起替换)。
排除法:const 才定义只读变量;宏不是函数;头文件是 #include。
#define N 100 后面不能加什么?
规则:宏定义不能以分号结尾,否则分号会被一起替换进代码。
考点:宏(KJ-13e)。
解析:#define N 100; 会把每个 N 替换成 100;,导致 int a = N; 变成 int a = 100;;(多一个分号,语法错)。
易错:这是初学者最常见的宏错误。
排除法:空格/换行/注释都不影响宏定义。
#include <iostream> 中的 #include 属于?
规则:以 # 开头的都是预处理指令:#include(包含头文件)、#define(宏定义)。
考点:预处理/头文件(KJ-13c/e)。
解析:#include <iostream> 在编译前把头文件内容包含进来;#include <cstdio> 引入 scanf/printf。
排除法:不是函数调用;不是变量;不是语句。
using namespace std; 这行的作用是?
规则:using namespace std; 声明使用 std 命名空间,之后可直接写 cin/cout 而不用 std::cin/std::cout。
考点:名字空间(KJ-13c)。
解析:cin/cout 定义在 std 命名空间里;不写 using 就得写 std::cin。
易错:using 需写在 main 外、include 之后。
排除法:不是定义变量/开始函数/结束程序。
下列标识符中,合法的是?
规则:字母数字下划线组成、非数字开头、非关键字。
考点:标识符综合(KJ-13a)。
解析:x_1 合法;9x 数字开头非法;int 是关键字非法;a-b 含减号非法。
排除法:其余三个各踩一条规则。
下列变量命名中,最规范(可读性好)的是?
规则:命名应见名知意:studentCount(学生人数)比 a、x1x1x1 可读性好。
考点:命名规范(KJ-13b)。
解析:竞赛常用小驼峰(studentCount)或下划线(student_count);短名字 x/y/n 用于临时变量可接受。
易错:命名不清会导致代码难读,是工程大忌。
排除法:a/x1x1x1 无意义;超长混合命名也不规范。
定义数组大小 MAXN = 100000,用 const int MAXN = 100000; 比 #define MAXN 100000 好在哪里?
规则:const 变量有类型、参与编译检查;宏只是预处理期的文本替换,不查类型。
考点:const vs 宏(KJ-13b/e)。
解析:const int MAXN 有类型(int),写错类型编译报错;宏 #define 无类型,替换出问题难排查。
易错:宏替换可能产生意外的优先级问题(如 #define SQR(x) x*x 时 SQR(2+3) 变成 2+3*2+3)。
排除法:宏不更快;const 占内存;宏 C/C++ 都能用。
C++ 中变量 score 和 Score 是?
规则:C++ 区分大小写,score 和 Score 是两个不同的标识符。
考点:标识符(KJ-13a)。
解析:定义了 int score 再用 Score = 5 会报「未定义」——大小写不同就是不同名字。
易错:这是最常见的笔误来源。
排除法:区分大小写是语言规则。
局部变量 int a; 未赋值就 cout << a;,输出是?
规则:局部变量不初始化,值是不确定的脏数据;全局变量才自动为 0。
考点:变量初始化(KJ-13b)。
解析:int a;(函数内)栈上残留旧值;使用未初始化变量是未定义行为,可能输出任意值。
易错:误以为变量默认 0——只有全局变量默认 0。
排除法:不是确定 0/1;不是编译错误(语法对)。
字符串常量 "hi" 实际占几个字符的内存?
规则:C 风格字符串以 \0(空字符)结尾,"hi" 实际存 3 个字符。
考点:字符串字面量(KJ-13a)。
解析:"hi" = 'h'、'i'、'\0' 共 3 字节;字符常量 'h' 只占 1 字节。
易错:数漏结尾的 \0。
排除法:2 是显式字符数;4/1 与内容不符。
关于 main 的说法,正确的是?
规则:main 是程序的入口函数名,不是关键字;但一个程序只能有一个 main。
考点:main/关键字(KJ-13a)。
解析:关键字是语言保留的(int/if/while…),main 只是约定的入口函数名;位置不限(编译时自动找)。
易错:把 main 当关键字。
排除法:不是关键字;位置不限;只能有一个入口。
用了 cin/cout 但忘记 #include <iostream>,编译时会?
规则:cin/cout 声明在 iostream 头文件里,不 include 就未定义,编译报错。
考点:头文件(KJ-13c)。
解析:编译器不认识 cin/cout → 「标识符未定义」错误。
易错:用 scanf/printf 要 #include <cstdio>,用 string 要 #include <string>。
排除法:编译期就挂,不是运行期。
#define SQR(x) x*x,表达式 SQR(2+3) 替换后变成?
规则:宏是纯文本替换,不会自动加括号。
考点:宏陷阱(KJ-13e)。
解析:SQR(2+3) → 2+3*2+3 = 2+6+3 = 11,不是 25。正确写法:#define SQR(x) ((x)*(x))。
易错:宏不做语法解析,替换结果可能完全不是你以为的。
排除法:25 是加了括号才有的;不是 6;不会编译错(语法合法但结果错)。
一个完整 C++ 程序的结构顺序是?
规则:标准骨架 = #include(头文件)→ using namespace std; → int main(){...}。
考点:程序结构(KJ-13a)。
解析:先包含头文件、再声明命名空间、最后写主函数;顺序错了编译报错(using 在 include 前、main 在最前都不规范)。
排除法:include 必须在 using 前;main 是入口但要先有头文件。