首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当给定3个负数时,如何确保始终打印输入的3个数字的中位数(C语言入门编程任务)

当给定3个负数时,如何确保始终打印输入的3个数字的中位数(C语言入门编程任务)
EN

Stack Overflow用户
提问于 2014-08-05 20:30:12
回答 5查看 127关注 0票数 1

所以基本上我的C程序任务是要求/允许用户输入3个整数。在输入的3个整数中,使用一堆if / else语句,我必须确保它打印出3的中位数。

例如,如果用户输入4 5 6,则中位数将为5。

我已经生成了成功完成此任务的代码,除非我输入整数-2 -1 -3。中位数显然是-2,但输出的是-1作为中位数。

下面是我的代码;

代码语言:javascript
复制
#include <stdio.h>

int main(int argc, char *argv[]) {
    int firstNumber;
    int secondNumber;
    int thirdNumber;

    printf("Please enter first number: ");
    scanf("%d", &firstNumber);
    printf("PLease enter second number: ");
    scanf("%d", &secondNumber);
    printf("Please enter third number: ");
    scanf("%d", &thirdNumber);

    if (firstNumber < secondNumber && thirdNumber > secondNumber) {
        printf("The median is %d\n", secondNumber);
    } else if (firstNumber < thirdNumber && secondNumber > thirdNumber) {
        printf("The median is %d\n", thirdNumber);
    } else if (firstNumber > secondNumber && firstNumber < thirdNumber) {
        printf("The median is %d\n", firstNumber);
    } else if (firstNumber > thirdNumber && thirdNumber < secondNumber) {
        printf("The median is %d\n", secondNumber);
    } else if (firstNumber > secondNumber && secondNumber < thirdNumber) {
        printf("The median is %d\n", thirdNumber);
    } else if (firstNumber > thirdNumber && secondNumber > firstNumber) {
        printf("The median is %d\n", firstNumber);
    }

    return 0;
}

我已经看过了每一条语句,但我仍然不确定为什么最后的if语句会给我带来问题。

我希望有人能帮助我,任何帮助都将不胜感激。

EN

回答 5

Stack Overflow用户

发布于 2014-08-05 20:34:36

这段代码非常糟糕。不管怎么说,我看到的第一个问题就是排队

代码语言:javascript
复制
    } else if (firstNumber > thirdNumber && thirdNumber < secondNumber) {
    printf("The median is %d\n", secondNumber);

if中的条件不适合确定secondNumber为中间值。您只需检查secondNumber是否大于thirdNumber

票数 3
EN

Stack Overflow用户

发布于 2014-08-05 20:38:38

以下是为您提供的解决方案:

代码语言:javascript
复制
median = max(min(a,b), min(max(a,b),c));

此外,您还需要定义minmax

代码语言:javascript
复制
#define max(x, y)    (((x) > (y)) ? (x) : (y))
#define min(x, y)    (((x) < (y)) ? (x) : (y))
票数 2
EN

Stack Overflow用户

发布于 2014-08-05 20:59:47

你有两个条件是错的。请参阅修改后的条件(用注释标记):

代码语言:javascript
复制
#include <stdio.h>

int main(int argc, char *argv[]) {
    int firstNumber;
    int secondNumber;
    int thirdNumber;

    printf("Please enter first number: ");
    scanf("%d", &firstNumber);
    printf("PLease enter second number: ");
    scanf("%d", &secondNumber);
    printf("Please enter third number: ");
    scanf("%d", &thirdNumber);

    if (firstNumber < secondNumber && thirdNumber > secondNumber) {
        printf("The median is %d\n", secondNumber);
    } else if (firstNumber < thirdNumber && secondNumber > thirdNumber) {
        printf("The median is %d\n", thirdNumber);
    } else if (firstNumber > secondNumber && firstNumber < thirdNumber) {
        printf("The median is %d\n", firstNumber);
    } else if (firstNumber > thirdNumber && thirdNumber > secondNumber) {  // Changed this line
        printf("The median is %d\n", thirdNumber);        // Changed this line
    } else if (firstNumber > secondNumber && secondNumber > thirdNumber) {  // Changed this line
        printf("The median is %d\n", secondNumber);       // Changed this line
    } else if (firstNumber > thirdNumber && secondNumber > firstNumber) {
        printf("The median is %d\n", firstNumber);
    }

    return 0;
}

注意:如果两个或全部三个数字相等,代码将不起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25138867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档