2 claysystem claysystem 于 2015.06.04 23:50 提问

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好。请同胞们给些意见 多谢了!

22个回答

gamefinity
gamefinity   Rxr 2015.06.05 06:50
  • 不是好不好的问题。第一段、第二段都有严重的错误,不能说好不好,只能说对不对。
  • 第一段:
  • 在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后
oNingZi
oNingZi   2015.06.05 08:57

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

caozhy
caozhy   Ds   Rxr 2015.06.04 23:59

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

caozhy
caozhy   Ds   Rxr 2015.06.05 00:02

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

正确写法:

 int min = x;
if (y < min) min = y;
if (z < min) min = z;
frank_20080215
frank_20080215   2015.06.05 06:05

当然是第二种代码好的啊

oNingZi
oNingZi   2015.06.05 08:57

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

qq_24013105
qq_24013105   2015.06.05 09:46

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

qq_26871009
qq_26871009   2015.06.05 09:55

用三目运算符简洁而方便

u011443762
u011443762   2015.06.05 11:34

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

qq_28763887
qq_28763887   2015.06.05 11:44

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

fjienigui
fjienigui 别这么坑……
2 年多之前 回复
共22条数据 1 3 尾页
Csdn user default icon
上传中...
上传图片
插入图片