初莫M 发表于 2023-10-7 16:06:10

为什么代码错误啊

题目是
输入3个实数a,b,c
,通过交换,将最小的数放到a
,次小的数放到b
,最大的数放到c
后,按由小到大的顺序输出。

输入描述
标准输入,三个无序的实数,以空格间隔。

输出描述
标准输出,输出三个由小到大排好序的实数,以空格间隔。

样例
输入 复制
3 2 1
输出 复制
1 2 3#include<stdio.h>
int main()
{
    char a,b,c,t;
    scanf("%c%c%c",&a,&b,&c);
    if(a<b){t=a;a=b;b=t;}
    if(a<c){t=a;a=c;c=t;}
    if(b<c){t=b;b=c;c=t;}
    printf("%c %c %c",c,b,a);
}

Mike_python小 发表于 2023-10-7 16:06:27

你的代码有几个错误和潜在的问题。首先,在输入部分,应该使用 %lf 而不是 %c 来读取实数。其次,在输出部分,应该使用 %lf 而不是 %c 来打印实数。

另外,你可以直接比较三个实数的大小,然后进行相应的交换,而无需使用字符类型变量来进行交换。

以下是修正后的代码:


#include <stdio.h>

int main() {
    double a, b, c, temp;

    scanf("%lf %lf %lf", &a, &b, &c);

    if (a > b) {
      temp = a;
      a = b;
      b = temp;
    }
    if (a > c) {
      temp = a;
      a = c;
      c = temp;
    }
    if (b > c) {
      temp = b;
      b = c;
      c = temp;
    }

    printf("%.2lf %.2lf %.2lf\n", a, b, c);

    return 0;
}


在这个修正后的代码中,我们使用 %.2lf 来控制输出实数的小数位数为两位。你可以根据需要进行调整。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-10-7 16:06:47

代码错误的原因是使用了错误的数据类型和格式化符号。在输入和输出部分,应该使用浮点数的数据类型和格式化符号。

以下是修改后的代码:

#include <stdio.h>

int main()
{
    float a, b, c;
    scanf("%f %f %f", &a, &b, &c);

    if (a > b)
    {
      float temp = a;
      a = b;
      b = temp;
    }
    if (a > c)
    {
      float temp = a;
      a = c;
      c = temp;
    }
    if (b > c)
    {
      float temp = b;
      b = c;
      c = temp;
    }

    printf("%.2f %.2f %.2f", a, b, c);

    return 0;
}


修改后的代码将输入和输出的数据类型改为float,并使用%f作为格式化符号来读取和打印浮点数。同时,还修改了交换数值的逻辑,确保最小的数放在a,次小的数放在b,最大的数放在c。

这样修改后的代码就可以正确地按由小到大的顺序输出三个实数了。
页: [1]
查看完整版本: 为什么代码错误啊