题目
以下程序的输出结果是()。#include< stdio. h>void main()(int x=0,y=0,z=0;if(x=y+z)printf(" * * * " );else printf(" # # # # " ); ) A. 有语法错误[1],不能通过编译B. 输出C. 通过编译,但不能通过连接D. 输出# # # #
以下程序的输出结果是()。#include< stdio. h>void main(){int x=0,y=0,z=0;if(x=y+z)printf(" * * * " );else printf(" # # # # " ); }
- A. 有语法错误[1],不能通过编译
- B. 输出
- C. 通过编译,但不能通过连接
- D. 输出# # # #
题目解答
答案
D
解析
考查要点:本题主要考查C语言中赋值语句与条件判断的优先级及逻辑判断规则。
解题核心思路:
- 区分赋值(=)与比较(==):题目中的
if(x=y+z)实际是将y+z赋值给x,然后判断x的值是否为真。 - 条件判断的真假规则:在C语言中,
0为假,非零为真。由于x、y、z均初始化为0,y+z结果为0,赋值后x仍为0,条件不成立,执行else分支。
破题关键点:
- 明确
if条件中的=是赋值操作,而非比较。 - 计算赋值后的结果是否为真,从而判断执行哪一支代码。
- 变量初始化:
x=0,y=0,z=0,三者初始值均为0。 - 条件判断分析:
if(x=y+z)中,先计算y+z(0+0=0),将结果赋值给x,此时x仍为0。- 判断
x的值是否为真。由于x=0,条件为假,因此执行else分支。
- 输出结果:
else对应的printf(" # # # # ")会被执行,输出# # # #。