鱼C论坛

 找回密码
 立即注册
查看: 1601|回复: 2

为什么错了

[复制链接]
发表于 2023-10-25 20:24:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{
        int a, b, c;
        scanf("%d %d %d",&a,&b,&c);
        int max,min,med;
        max = (a > b) ? a : b;
        med = (a > b) ? b : a;
        if (max > c && med >c)
        max = max;
        med = med;
        min = c;
        else if (max > c && med < c)
        max = max;
        min = med;
        med = c;
        else if (max < c && med <c)
        med = max;
        min = med;
        max = c;
        printf("%d%d%d",min,med,max);
        return 0;

}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-25 20:25:01 | 显示全部楼层
问题出在代码的if-else语句块中。在C语言中,每个if语句只能对应一个else语句,而你的代码中却有多个else if语句。

正确的写法应该是使用嵌套的if-else语句来实现多个条件的判断。以下是修正后的代码:

  1. #include <stdio.h>

  2. int main() {
  3.     int a, b, c;
  4.     scanf("%d %d %d", &a, &b, &c);
  5.     int max, min, med;
  6.     max = (a > b) ? a : b;
  7.     med = (a > b) ? b : a;
  8.     if (max > c && med > c) {
  9.         min = c;
  10.     } else if (max > c && med < c) {
  11.         min = med;
  12.         med = c;
  13.     } else if (max < c && med < c) {
  14.         med = max;
  15.         min = med;
  16.         max = c;
  17.     }
  18.     printf("%d%d%d", min, med, max);
  19.     return 0;
  20. }
复制代码


修正后的代码中,使用了嵌套的if-else语句来根据不同的条件进行判断,并正确地更新了变量的值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-26 10:05:08 | 显示全部楼层
看起来你的代码意图是找出三个数中的最大值、最小值和中间值,但是代码存在一些逻辑错误。

首先,你在if-else语句中没有正确地比较a、b和c的值,导致最大值、最小值和中间值的赋值出现错误。

其次,你的代码没有处理所有可能的情况,例如当c是最大值时的情况。

最后,你的代码在最后的printf语句中打印了最小值、中间值和最大值,但是它们被打印成了三个数字,应该用空格或者其它分隔符隔开。

以下是修改后的代码:

  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int a, b, c;
  5.     scanf("%d %d %d",&a,&b,&c);
  6.     int max,min,med;

  7.     // 比较a、b的大小,找出最大值
  8.     max = (a > b) ? a : b;

  9.     // 比较a、b的大小,找出最小值
  10.     min = (a < b) ? a : b;

  11.     // 如果c既不是最大值也不是最小值,那么它就是中间值
  12.     if (c <= max && c >= min) {
  13.         med = c;
  14.     } else { // 如果c是最大值或者最小值,那么中间值就是a或b中不是最大值也不是最小值的数
  15.         med = (max == a) ? b : a;
  16.     }

  17.     printf("%d %d %d",min,med,max); // 打印最小值、中间值和最大值,用空格隔开
  18.     return 0;
  19. }
复制代码

这个修改后的代码可以正确地找出三个数中的最大值、最小值和中间值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 04:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表