跳转至

第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 是关键字,非法。

标识符的四条规则:

  1. 只能由 字母、数字、下划线 _ 组成
  2. 不能以数字开头
  3. 不能是关键字(int/float/while/case/const/goto… 共 32 个)
  4. 区分大小写(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。

易错:

  1. 以为 const 不是关键字
  2. 以为"全大写"是特殊写法——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 这种省略整数部分的写法本身是合法的,错的是指数)。

易错:

  1. 忘了 L/UL/f 这些后缀是合法的(12345UL 也对)
  2. 以为 '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 这种"省略整数部分"的浮点常量本身是合法的,错的是后面第二个小数点。这两点要区分开。

说明

  1. 第 4 题:选项 B(in1_3)与 C(A_BID)按 C 语言规则都合法,本题严格说没有唯一答案。答案按材料给出的取 B,解析中已作说明。