646134029 发表于 2020-4-29 15:10:34

新手学习C语言,逻辑出错自己检查不出,求指教

#include <stdio.h>

void main()
{
        int a, b, c, me;
        printf("input 3 integer:");
        scanf("%d%d%d", &a, &b, &c);
        if (a>b)
        {
                me = a;
                a = b;
                b = me;
        }
        if (a>c)
        {
                me = a;
                a = c;
                c = me;
        }
        if (b>c);
        {
                c = b;
        }
        printf("min=%d,max=%d\n", a, c);


}




题目是输入3个整数输出最大的数和最小的数,为什么运行以后输出 456 的结果是min=4max=5;请问哪里有逻辑错误?

sunrise085 发表于 2020-4-29 15:17:10

最后一个为什么不交换啊?
最后一个if条件后多了一个分号
#include <stdio.h>
void main()
{
    int a, b, c, me;
    printf("input 3 integer:");
    scanf("%d%d%d", &a, &b, &c);
    if (a>b)
    {
      me = a;
      a = b;
      b = me;
    }
    if (a>c)
    {
      me = a;
      a = c;
      c = me;
    }
    if (b>c)
    {
      me = b;
      b = c;
      c = me;
    }
    printf("min=%d,max=%d\n", a, c);

}

646134029 发表于 2020-4-29 15:20:02

sunrise085 发表于 2020-4-29 15:17
最后一个为什么不交换啊?
最后一个if条件后多了一个分号

非常感谢,你说的这种赋值方法我是知道的但是我只需要输出最大和最小所以不用交换, 结果就是一个分号的问题,搞得我怀疑自己逻辑出错检查好久~~

sunrise085 发表于 2020-4-29 15:31:44

646134029 发表于 2020-4-29 15:20
非常感谢,你说的这种赋值方法我是知道的但是我只需要输出最大和最小所以不用交换, 结果就是一个分 ...

只是找最大最小值啊。那前两个if中也没必要交换。
有更简单的方法。
三目运算符? :

#include <stdio.h>
void main()
{
    int a, b, c, min,max;
    printf("input 3 integer:");
    scanf("%d%d%d", &a, &b, &c);
    max=(c>b&&c>a)?c:(a>b)?a:b;
    min=(c<a&&c<b)?c:(a<b)?a:b;
    printf("min=%d,max=%d\n", min, max);
}

646134029 发表于 2020-4-29 15:40:42

sunrise085 发表于 2020-4-29 15:31
只是找最大最小值啊。那前两个if中也没必要交换。
有更简单的方法。
三目运算符? :

这样写确实很简单哦,我刚开始没想到

sunrise085 发表于 2020-4-29 15:45:28

646134029 发表于 2020-4-29 15:40
这样写确实很简单哦,我刚开始没想到

那就给个最佳呗~~
页: [1]
查看完整版本: 新手学习C语言,逻辑出错自己检查不出,求指教