微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何做出正确的功能?

如何解决如何做出正确的功能?

#include<stdio.h>
int CompareNumber(int n1,int n2,int n3 )
{
    int a = (n1 < n2) ? n2 : n1;
    int b = (a < n3) ? n3 : a;
    int c = (n1 > n2) ? n2 : n1;
    int d = (c > n3) ? n3 : c;
    printf("biggest %d smallest %d",a,d);
    return 0;
}
int main(void)
{
    int a,b,c;
    scanf_s("%d,%d,%d",&a,&b,&c);
    CompareNumber(a,c);
    return 0;
}

当我输入 5,6,7 时,此代码打印 5 代表最大的数字,而一些无意义的数字代表最小的数字

解决方法

更改此声明

printf("biggest %d smallest %d",a,d);

printf("biggest %d smallest %d",b,d);

因为最大值存储在变量 b 中。

还有这个电话

scanf_s("%d,%d,%d",&a,&b,&c);

要求用户也输入逗号。改成

scanf_s("%d %d %d",&c);

注意使用无意义的变量全名作为 a,c,d 会使代码不可读。函数的返回类型也没有意义。

可以通过以下方式声明和定义函数

void CompareNumber( int n1,int n2,int n3 )
{
    int max = ( n1 < n2 ) ? n2 : n1;
    max = ( max < n3 ) ? n3 : max;
    
    int min = ( n2 < n1) ? n2 : n1;
    min = ( n3 < min ) ? n3 : min;
    
    printf( "biggest %d smallest %d",max,min );
}

当函数只做一件事时效果更好:确定最小值和最大值并将它们返回给调用者,调用者输出结果。

这是一个演示程序。

#include<stdio.h>

struct Pair
{
    int min;
    int max;
};

struct Pair  CompareNumber( int n1,int n3 )
{
    struct Pair p = { n2 < n1 ? n2 : n1,n1 < n2 ? n2 : n1 };
    
    p.min = n3 < p.min ? n3 : p.min;
    p.max = p.max < n3 ? n3 : p.max;
    
    return p;    
}

int main(void)
{
    int a,c;
    scanf("%d %d %d",&c);
 
    struct Pair p = CompareNumber( a,c );
    
    printf( "biggest %d smallest %d",p.max,p.min );

    return 0;
}

它的输出可能看起来像

biggest 7 smallest 5
,

您没有将 a 与第三个变量进行比较。以下是 CompareNumber 的更简单表示:

int CompareNumber(int n1,int n3 )
{
    int a = (n1 < n2) ? n2 : n1;
    a = (a < n3) ? n3 : a;

    int d = (n1 < n2) ? n1 : n2;
    d = (d < n3) ? d : n3;

    printf("biggest %d smallest %d",d);
    return 0;
}

您的 main 函数应该按照其他帖子中的建议进行修复。

...这是一个更好的(对我来说)替代方案:

int max (int a,int b)
{
    return (a > b) ? a : b;
}

int min (int a,int b)
{
    return (a > b) ? b : a;
}

int CompareNumber(int n1,int n3 )
{
    int a = max (max (n1,n2),n3);
    int d = min (min (n1,n3);

    printf("biggest %d smallest %d",d);
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。