初学c语言,想问一下各位大神们,这道题答案为什么是5啊

 

因为x>y,所以所有的内部if语句都无法执行,只执行了printf语句,所以z的值还是5

//因为x>y,进不了if语句
if(x<y)
{
    //内部条件无法执行
	if(y<0)
		z=0;
	else            //else对应内部if,因为else与最近的if语句匹配
		z=z+1;
}

 

if(x<y)不成立,后面啥也没干啊,所以z还是5

后面两个if...else...是配对的,属于第一个if的作用范围

代码整理一下格式,应该看的更清楚。所以代码编写还是要规范一些比较好

void main()
{
    int x=2,y=-1,z=5;
    if(x<y)
    {
        if(y<0)
            z=0;
        else
            z=z+1;
    }
    printf("%d\n",z);

}

 

因为x<y为假的,因此进不去后面的if和else,这题最终就是直接输出z变量的值。

你写的代码相对于下面的

if(x<y)
{
	if(y<0)
		z=0;
	else
		z=z+1;
}

 

 

这是if和else的关系,如果没有{}包裹,那么C语言中认为,esle是与其距离最近的上一个if是一个组合,在本例中,else z= z+1和if(y<0)是一个组合,这个组合在if(x<y)这个判断语句中,也就是说,当x<y是true时,下面的if...else...才会被执行,但是在本例中x<y是false(因为x>y),所以,if(x<y)后面的if...else...组合没有被执行。所以最后z还是z,值没有改变。

如有帮助,请采纳一下,谢谢。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632