第1章 · 程序设计基础¶
本页最后更新于 ,内容可能过时
本章题目对应教材第 1 章,覆盖标识符、关键字、常量与转义字符。按 1.4 节的顺序排列:先判断标识符,再判断常量写法。
1.4 标识符、常量和变量¶
1 · 标识符合法性¶
请选出可以作为 C 语言标识符的一组标识符。
- A.
total-sum, _value - B.
count_, String - C.
float, num# - D.
3data, while
答案
B
解析
逐项判断——
- A:
total-sum含减号-,非法(合法连接符只有下划线);_value本身合法。 - B:
count_以下划线结尾,合法;String不是关键字(C 区分大小写,String≠string)✅ - C:
float是关键字;num#含#,非法。 - D:
3data数字开头;while是关键字,非法。
标识符的四条规则:
- 只能由 字母、数字、下划线
_组成- 不能以数字开头
- 不能是关键字(
int/float/while/case/const/goto… 共 32 个)- 区分大小写(
INT合法、int非法)关键字加上其他字符后依然合法:
_int、int_、int2都是合法标识符——因为关键字必须整体匹配。易错:以为
String是关键字(那是 C++/Java 的string),C 里没有string关键字。
2 · 标识符合法性¶
请选出可以作为 C 语言标识符的一组标识符。
- A.
2num, f1, total - B.
main, case, _sum - C.
print, int$, number_1 - D.
_data, sum1, Average
答案
D
解析
- A:
2num数字开头,非法(f1、total本身合法)。 - B:
case是关键字,非法。(注意main是合法的——它是函数名,不是关键字。) - C:
int$含$,非法。 - D:
_data、sum1、Average三个都合法。✅
易错:
main、define、include都不是关键字,是合法的普通标识符。不能使用的是 C 的 32 个关键字。
3 · 标识符合法性¶
请选出不可以作为 C 语言用户标识符的一组标识符。
- A.
A_1、Goto、Ba - B.
character、_0、AbC - C.
_a、__a、x_ - D.
temp、x#、INT
答案
D
解析
本题问的是"不可以"。
- A:
A_1合法、Goto合法(大小写敏感,Goto≠goto)、Ba合法 → 可以。 - B:
character、_0、AbC全部合法(_0下划线开头即可,后面跟数字没关系)→ 可以。 - C:
_a、__a、x_全部合法(下划线的位置和个数都不受限)→ 可以。 - D:
x#含#非法 → 不可以。✅
易错:这题和上面两题问法相反("可以" vs "不可以"),读题时先把"可以/不可以"圈出来。
4 · 标识符合法性¶
以下是正确的 C 语言标识符是__。
- A.
int - B.
in1_3 - C.
A_BID - D.
const
答案
B(材料上的答案)
解析
- A:
int是关键字,非法。 - B:
in1_3——字母开头、后面是数字与下划线,合法。✅ - C:
A_BID——也合法(全大写不会变成关键字,C 区分大小写,A_BID只是一个普通标识符)。 - D:
const是关键字,非法(const从 C89 起就在关键字表里)。
说明
按标准 C 的规则,B 的 in1_3 和 C 的 A_BID 都是合法标识符,而材料上这一题给出的答案是 B。
这可能是原卷就这么出的(本题按单选设计),也可能是扫描时把某个选项改掉了字。
按材料给出的答案,选 B。
易错:
- 以为
const不是关键字- 以为"全大写"是特殊写法——C 的大小写只影响"会不会是关键字",
A_BID、INT都完全合法
5 · 标识符合法性¶
以下哪个变量名是无效的?
- A.
int_value - B.
_tempVar - C.
2nd_var - D.
totalSum
答案
C
解析
变量名 = 标识符,只能由字母、数字、下划线组成且不能以数字开头。
- A:
int_value合法——int只是它的前三个字母,不是关键字int(关键字要整体匹配)。 - B:
_tempVar下划线开头,合法。 - C:
2nd_var以数字2开头,无效。❌ - D:
totalSum合法(大小写混用没问题)。
易错:把
int_value、intValue、float1当成"用了关键字"——只要不是单独一个int,就不算关键字。
6 · 标识符合法性¶
以下哪个是 C 语言中的合法标识符?
- A.
123var - B.
_var - C.
var-name - D.
var name
答案
B
解析
- A:数字开头,非法。
- B:
_var下划线开头,合法。✅ - C:
var-name含减号-,非法。 - D:
var name含空格,非法。
易错:
-(减号)和空格是两个最常出现的"看起来像连接符"的非法字符。合法连接符只有下划线_。
7 · 常量与转义字符¶
在下面给出的 C 语言常量表示中,错误的一项是( )。
- A.
'\x41' - B.
0x41 - C.
'\08' - D.
"A"
答案
C
解析
- A:
\x41是十六进制转义,41₁₆ = 65,即字符'A',合法。 - B:
0x41是十六进制整型常量,值也是 65,合法。 - C:
\0是八进制转义,八进制只允许0–7;后面的8不是八进制数字,于是'\08'变成两个字符的多字符常量——不是合法的常量表示(gcc 会警告multi-character character constant,值还是实现定义的)。❌ - D:
"A"是字符串字面量(占 2 字节:'A'+'\0'),合法。
转义序列表:
| 写法 | 含义 | 注意点 |
|---|---|---|
\0 |
空字符(数值 0) | 字符串结束标志;str['\0'] 就是 str[0] |
\ddd |
八进制转义,1–3 位 | 只认 0–7,遇到 8/9 立刻截断 |
\xhh |
十六进制转义 | \x 后可接任意多位的十六进制数字 |
\\ \' \" |
反斜杠 / 单引号 / 双引号 | \\ 是一个字符 |
\n \t \r \b |
换行 / 制表 / 回车 / 退格 |
易错:把
'\08'当成"合法的八进制转义"——它其实是这一题唯一的问题选项。
8 · 变量定义的正误(后缀与多字符常量)¶
请指出哪一个定义语句是正确的。
- A.
int 34x = 1234; - B.
long a[] = {5L, 3L, -2L}; - C.
char b = 'Class'; - D.
double y = .45e-4.3L;
答案
B
解析
- A:
34x以数字开头,不是合法标识符 → 定义非法。 - B:
5L、3L、-2L是长整型常量(后缀L合法),数组省略长度、由初始化列表推出long[3],合法。✅ - C:
'Class'是多字符字符常量——不是"一个字符",值是实现定义的(gcc 15.2.0 警告:multi-character literal with 5 characters exceeds 'int' size),不能算"正确的定义"。 - D:
.45e-4.3L的指数部分-4.3不是整数 —— 浮点常量的指数必须是整数,非法(.45这种省略整数部分的写法本身是合法的,错的是指数)。
易错:
- 忘了
L/UL/f这些后缀是合法的(12345UL也对)- 以为
'Class'合法——它在 C 里语法上能过、值不保证,任何正规代码都不该写多字符常量
9 · 变量定义的正误(浮点常量)¶
以下哪种变量定义是无效的?
- A.
int *p = NULL; - B.
char str[]="C Programming"; - C.
double rate = .05.3; - D.
unsigned long id = 12345UL;
答案
C
解析
注意本题问"无效"的。
- A:
NULL是空指针常量,int *p = NULL;合法。 - B:用字符串初始化字符数组,长度自动推出(
char[14],含'\0'),合法。 - C:
.05.3里有两个小数点 → 不是合法的浮点常量(小数点只能出现一次),无效。❌ - D:
12345UL的后缀UL=unsigned long,合法。
易错:
.05这种"省略整数部分"的浮点常量本身是合法的,错的是后面第二个小数点。这两点要区分开。
说明¶
- 第 4 题:选项 B(
in1_3)与 C(A_BID)按 C 语言规则都合法,本题严格说没有唯一答案。答案按材料给出的取 B,解析中已作说明。