C语言中关于if if-else语句的问题?

代码1如下
运行环境 :VS2013
代码作用:输入三个数然后判断其中最小的一位数然后输出的

 #include<stdio.h>
#include<stdlib.h>

int main()
{
    int x, y, z, min;
    min = 0;
    scanf_s("%d %d %d", &x, &y, &z);

    if (x < y)           
    {
        min = x;
    }
    else if (y < x)  //这个if不起作用
    {
        min = y;
    }
    else if (min > z)          //这样写构成了一个级联的if -else if 语句 
    {
        min = z;
    }
    printf("%d", min);
    system("pause");
    return 0;
}

代码2如下:

 #include<stdio.h>
#include<stdlib.h>

int main()
{
    int x, y, z, min;
    min = 0;
    scanf_s("%d %d %d", &x, &y, &z);

    if (x < y)           
    {
        min = x;
    }
    else (y < x)  //删除if后
    {
        min = y;
    }
    if (min > z)          //删除else后 
    {
        min = z;
    }
    printf("%d", min);
    system("pause");
    return 0;
}

附:
这两个程序那个比较好呢?运行的结果都是一样的,不知道1好还是2好。请同胞们给些意见 多谢了!

  • 不是好不好的问题。第一段、第二段都有严重的错误,不能说好不好,只能说对不对。
  • 第一段:
  • 在if (...) {} else if (... ) {} else{}这样的判断中,所有的分支只会执行一个。
  • 在你的第一段代码中
     if (x < y)           
    {
        min = x;
    }
    else if (y < x)  //这个if不起作用
    {
        min = y;
    }
    else if (min > z)          //这样写构成了一个级联的if -else if 语句 
    {
        min = z;
    }

if(x<y)和else if(y<x)几乎是矛盾的。也就是说只有当x==y的时候才会去做最下面的那个min和z的比较。而当做到这个比较的时候,min还是0,

  • 第二段
    if (x < y)           
    {
        min = x;
    }
    else (y < x)  //删除if后
    {
        min = y;
    }

else后面不能跟条件。这里应该是语法错误,编译不能通过。如果要改的话,可以

 else //(y < x)  //删除if后

你想问多个if好,还是用一个联级的if,都差不多。

这个从编译的角度看。。。。。

先把程序写对再说
第一个程序x=1 y=2 z=0 结果都不对。
因为后面的分支没执行。

第二段代码根本不能编译。

正确写法:

 int min = x;
if (y < min) min = y;
if (z < min) min = z;

当然是第二种代码好的啊

第一个代码,后面的if判断是否发生会受到前面判断结果的影响,第二个代码,把else改成if的话(这个错误编译都通过不了)后,是三个if语句,一定会判断三次。
用哪个好,要根据你的逻辑~

第一个代码,后面的if判断是否发生会受到前面判断结果的影响,第二个代码,把else改成if的话(这个错误编译都通过不了)后,是三个if语句,一定会判断三次。
用哪个好,要根据你的逻辑~

一比较好 具体分析已有人回答

用三目运算符简洁而方便

这两段程序都不太对,可以看一下C语言书,关于if-else 里面讲的很清楚的

这个问题有点高难度,我建议你去问你的老师或者公司里的一些同事比较好

直接用,条件语句解决就ok
max=x>y?(x>z?x:z):(y>z?y:z);
min=x<y?(x<z?x:z):(y<z?y:z);

你这两个代码都不行,漏洞百出,没有一个好的!

你的代码好像有问题,请再检查一下

第一个代码最多判断两次,但第二个代码最多判断3次,第一种好

第一段代码果断不能正常处理XYZ的大小啊,楼主!!!看看知常曰明的答案吧,补补基础。

min = x < y ? x : y;
min = min < z ? min : z;
解决战斗。

第二段代码不能编译。建议改一下再问。

从代码的可读性来看,第一个比较好

结果一样,但是程序有问题。在好好了解if else if的执行顺序把

显然1好,2看似化简了程序,却不便理解