单选题
1、〖第21题〗433) 下列程序的输出为()。 main() { int y=10; while(y--) ; printf(”y=%d\n”,y); }
A
y=0
B
while构成无限循环
C
y=1
D
y=-1
答案解析
正确答案:D
解析:
这道题主要考察 C 语言中 `while` 循环的执行机制以及后置自减运算符 `y--` 的特性。
**1. 代码逻辑分析**
* **初始化**:`int y = 10;`,变量 `y` 初始值为 10。
* **循环条件**:`while(y--)`
* 这里使用的是**后置自减**运算符。其执行规则是:**先使用 `y` 当前的值作为表达式的值进行判断,然后再将 `y` 的值减 1**。
* `while` 循环会一直执行,直到括号内的表达式值为假(即 0)时停止。
* 注意循环体是一个空语句 `;`,这意味着循环体内没有实际操作,所有的变化都发生在条件判断中。
**2. 逐步推导过程**
让我们模拟循环的最后几次迭代,因为前面的迭代只是让 `y` 逐渐变小,关键看何时退出循环:
* ...(中间过程省略,y 逐渐减小)...
* **当 y = 1 时**:
1. 判断条件:取 `y` 的当前值 `1` 作为表达式结果。`1` 为真(True),进入循环(虽然循环体为空)。
2. 执行自减:`y` 变为 `0`。
* **当 y = 0 时**:
1. 判断条件:取 `y` 的当前值 `0` 作为表达式结果。`0` 为假(False),**循环终止**。
2. 执行自减:**注意**,即使是判断为假导致循环退出,后置自减运算符 `y--` 中的“减 1”操作依然会执行。这是后置运算符的关键特性。
3. 执行自减后:`y` 从 `0` 变为 `-1`。
**3. 输出结果**
循环结束后,程序执行 `printf("y=%d\n", y);`。
此时 `y` 的值已经是 **-1**。
因此,输出结果为 `y=-1`。
**4. 选项分析**
* A. `y=0`:错误。如果使用的是前置自减 `--y` 或者在判断为假时不执行自减,才可能是 0,但后置自减在判断后仍会执行。
* B. `while构成无限循环`:错误。`y` 每次都在减小,最终会变为 0 从而退出循环。
* C. `y=1`:错误。
* D. `y=-1`:正确。符合上述推导。
**结论**
正确答案是 **D**。
题目纠错
c语言选择判断题库
相关题目
单选题
1、第278题 (1.0分) 题号:511 求平方根函数的函数名为()。
单选题
1、第277题 (1.0分) 题号:618 C语言中用于结构化程序设计的三种基本结构是()。
单选题
1、第276题 (1.0分) 题号:706 若有说明:int *p,m=5,n;以下正确的程序段是()。
单选题
1、第275题 (1.0分) 题号:102 以下数据中,不正确的数值或字符常量是()。
单选题
1、第274题 (1.0分) 题号:596 下面四个选项中,均是不合法的用户标识符的选项是()。
单选题
1、第273题 (1.0分) 题号:492 下列程序段的输出结果为()。 float x=213.82631; printf(”%3d”,( );
单选题
1、第272题 (1.0分) 题号:702 对于基本类型相同的两个指针变量之间,不能进行的运算是()。
单选题
1、第271题 (1.0分) 题号:588 若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是()。
单选题
1、第270题 (1.0分) 题号:109 C语言中,double类型数据占()。
单选题
1、第269题 (1.0分) 题号:153 在C语言中,if语句后的一对原括号中,用以决定分支的流程的表 达式()。
