单选题
1、第260题 (1.0分) 题号:629 为了避免在嵌套的条件语句 if-else 中产生二义性,C语言规定: else子句总是与()配对。
A
缩排位置相同的if
B
其之前最近的if
C
其之后最近的if
D
同一行上的if
答案解析
正确答案:B
解析:
**解析:**
在 C 语言(以及大多数类 C 语言,如 C++、Java、C# 等)中,当 `if-else` 语句嵌套使用时,如果省略了花括号 `{}`,编译器需要一种明确的规则来确定 `else` 子句究竟属于哪一个 `if` 语句。
为了解决这种语法上的二义性,C 语言标准规定:**`else` 子句总是与它之前最近的、且尚未配对的 `if` 语句进行配对。**
我们来分析各个选项:
* **A. 缩排位置相同的 if**:缩进(Indentation)只是为了提高代码的可读性,方便程序员理解逻辑结构。C 语言编译器在编译时会忽略空白字符(包括空格、制表符和换行符),因此缩进对程序的逻辑执行没有任何影响。这是一个常见的误区。
* **B. 其之前最近的 if**:这是 C 语言的标准规定。编译器从 `else` 向上查找,找到的第一个没有匹配 `else` 的 `if` 即为该 `else` 所归属的条件语句。
* **C. 其之后最近的 if**:逻辑上不可能,因为 `else` 是跟在 `if` 块之后的,无法与后面的语句配对。
* **D. 同一行上的 if**:C 语言不强制要求语句必须在同一行或不同行,换行符被视为空白字符,不影响语法解析。
**示例说明:**
```c
if (a > 0)
if (b > 0)
printf("a>0 and b>0\n");
else
printf("a<=0\n"); // 这个 else 实际上是与内部的 if (b>0) 配对的,而不是外部的 if (a>0)
```
如果想要让 `else` 与外层的 `if (a > 0)` 配对,必须使用花括号明确作用域:
```c
if (a > 0) {
if (b > 0)
printf("a>0 and b>0\n");
} else {
printf("a<=0\n"); // 此时 else 与外层的 if (a>0) 配对
}
```
因此,正确答案是 **B**。
题目纠错
c语言选择判断题库
相关题目
单选题
1、〖第39题〗560) 能将高级语言编写的源程序转换为目标程序的是()。
单选题
1、〖第38题〗77) 以下描述中,正确的是()。
单选题
1、〖第37题〗528) 对于void类型函数,调用时不可作为()。
单选题
1、〖第36题〗88) 两个指针变量不可以()。
单选题
1、〖第35题〗567) 以下叙述中正确的是 ()。
单选题
1、〖第34题〗454) 以下函数调用语句中实参的个数是()。 func((e1,e2),(e3,e4,e5));
单选题
1、〖第33题〗214) C语言中的文件的存储方式有()。
单选题
1、〖第32题〗603) 以下符合C语言语法的赋值表达式是()。
单选题
1、〖第31题〗601) 下面四个选项中,均是不合法的浮点数的选项是()。
单选题
1、〖第30题〗730) 若以”a+”方式打开一个已存在的文件,则以下叙述正确的是()。
