单选题
1、〖第15题〗33) 若有以下定义:char s='\092'; 则该语句()。
A
使s的值包含1个字符
B
定义不合法,s的值不确定
C
使s的值包含4个字符
D
使s的值包含3个字符
答案解析
正确答案:B
解析:
这道题考察的是 C 语言中**转义字符**的语法规则,特别是八进制转义序列和字符常量的合法性。
### 核心解析
1. **转义字符规则**:
在 C 语言中,以反斜杠 `\` 开头的字符序列称为转义序列。其中,`\ddd` 表示 1 到 3 位**八进制**数字所代表的字符。
* **关键点**:八进制数字只能包含 `0` 到 `7`。**数字 `8` 和 `9` 不是合法的八进制数字**。
2. **分析题目中的定义**:
语句为:`char s = '\092';`
* 编译器在解析 `\092` 时,会尝试将其识别为八进制转义字符。
* 它从 `\` 后面开始读取数字:
* 第一个数字是 `0`(合法八进制)。
* 第二个数字是 `9`。**错误出现**:因为 `9` 超出了八进制的范围(0-7),所以 `\09` 不能构成一个合法的八进制转义序列。
3. **编译器的行为**:
* 在标准的 C 语言编译器中,遇到非法的转义序列(如包含非八进制数字的 `\092` 或非十六进制数字的 `\xG` 等),通常会被视为**语法错误**或**非法字符常量**。
* 因此,该定义语句是**不合法**的,无法通过编译。既然无法通过编译,变量 `s` 也就没有被成功定义和赋值,其值自然是不确定的(或者说程序根本跑不起来)。
4. **选项分析**:
* **A. 使s的值包含1个字符**:如果转义合法(例如 `'\092'` 改为 `'\102'`),则 `s` 存储一个字符。但此处非法,故排除。
* **B. 定义不合法, s的值不确定**:正确。因为 `9` 不是八进制数字,导致转义序列非法,整个字符常量定义出错。
* **C. 使s的值包含4个字符**:`char` 类型只能存储 1 个字节(1 个字符),不可能包含 4 个字符。且单引号内如果是多字符常量(如 `'abcd'),其行为是实现定义的,但这里是因为转义错误导致非法,而非多字符问题。
* **D. 使s的值包含3个字符**:同理,`char` 只能存 1 个字符。
### 结论
由于 `\092` 中含有非八进制数字 `9`,导致转义序列非法,因此该定义语句不合法。
**正确答案是:B**
题目纠错
c语言选择判断题库
相关题目
单选题
1、以下数据中,不正确的数值或字符常量是()。
单选题
9.以下数组定义中不正确的是()。
单选题
8.设有 int x=11; 则表达式 (x++ * 1/3) 的值是()。
单选题
3.以下数据中,不正确的数值或字符常量是()。
单选题
1、第300题 (1.0分) 题号:516 static char str[10]=“China”;数组元素个数为()。
单选题
1、第299题 (1.0分) 题号:664 以下正确的函数定义形式是()。
单选题
1、第298题 (1.0分) 题号:537 在定义构造数据类型时,不能()。
单选题
1、第297题 (1.0分) 题号:525 C语言中不可以嵌套的是()。
单选题
1、第296题 (1.0分) 题号:626 若希望当A的值为奇数时,表达式的值为”真”,A的值为偶数时,表达 式的值为”假”,则以下不能满足要求的表达式是()。
单选题
1、第295题 (1.0分) 题号:96 下列字符序列中,不可用作C语言标识符的是()。
