【问题标题】:Get maximum and minimum from numbers从数字中获取最大值和最小值
【发布时间】:2018-10-03 03:11:05
【问题描述】:

我需要从数字中打印最大和最小数字。 问题是,当我将 mn 和 mx 设置为 0 时,它就无法工作,因为当用户写数字 1 2 3 4 5 时,最小值是 0 而不是 1,这就是问题所在。

我的代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main() {

    int x, mx = 0, mn = 0;
    int i = 1, n;

    scanf("%d", &n);
    for (i = 1; i <= n; i++) {
        printf("Your number %d:", i);
        scanf("%d", &x);
            if (x > mx) {
                mx = x;
            };
            if (x < mn) {
            mn = x;
            };
    };

    printf("minimum is: %d", mn);
    printf("maximum is: %d", mx);
    system("pause");
    return 0;
}

【问题讨论】:

  • for- 和if 之后不需要; 使用花括号的语句:}; 应该只是}
  • 尽快取消学习for (i = 1; i &lt;= n; i++),改用for (i = 0; i &lt; n; i++)。当您要使用数组时,您需要它(这可能是您书中的下一个)。
  • 那是我们大学老师的话 :D 但在这种情况下,使用 1 而不是 0 来获得更好的用户体验确实更好。
  • 我明白了——提示。但是你可以在那里打印i+1。相信我:坚持从 1 开始咬你一口。仅针对提示解决它是完全正常的事情。
  • if (x &lt; mn) 第一次为真,就像if (x &lt; 0)。用大数初始化mn 更有意义。 int mn = INT_MAX; int mx = INT_MIN;.

标签: c ansi


【解决方案1】:

将两者都设置为输入的第一个值。然后按原样使用您当前的代码。

system("pause"); 除外。C 不需要。)

【讨论】:

  • 正要说同样的话。您的答案可以通过指出关闭}有半列的事实来完成@
  • 嗯,我想知道...但我是 c 新手,我只是不知道该怎么做。如果你能为我提供例子,我将非常感激。
  • @JurajJakubov:添加if (i == 1) 并在其中存储最小值和最大值,否则更新它们。
  • 非常感谢:)
  • "C 不需要那个。"需要system("pause"); 的不是C,而是环境。它允许用户在控制台关闭之前查看程序输出。如果程序控制台运行,则没有必要。
【解决方案2】:

从数字中打印最大和最小数字。

mn,mx 初始化为相反的极端,而不是两者都为0。无需在循环中考虑特殊情况。好的代码力求降低循环的复杂性。

当不存在最小值/最大值(空集)时,这可以轻松且正确地检测极端情况。

#include <limits.h>

// int mx = 0, mn = 0;
int mn = INT_MAX;
int mx = INT_MIN;

...  code as before

if (mn > mx) {
  puts("No input encountered");
} else {
  printf("minimum is: %d\n", mn);
  printf("maximum is: %d\n", mx);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    相关资源
    最近更新 更多