使用'如果'找到最大值和最小值

时间:2017-02-05 09:58:20

标签: c if-statement

我编写这些代码以找到五个不同整数的最大值和最小值。

我知道这不是最好的方法。它可以找到最大值,但是' min'总是等于' a',这是在开头分配的。

#include <stdio.h>
#include <stdlib.h>
//Enter five numbers and find the maximum and minimum.
int main()
{
    int a = 1, b = 2, c = 3, d = 4, e = 5, max = a, min = a;
    scanf("%d%d%d%d%d", &a, &b, &c, &d, &e);
    if (b > max) {
        max = b;
    }
    if (c > max) {
        max = c;
    }
    if (d > max) {
        max = d;
    }
    if (e > max) {
        max = e;
    }
    if (b < min) {
        min = b;
    }
    if (c < min) {
        min = c;
    }
    if (d < min) {
        min = d;
    }
    if (e < min) {
        min = e;
    }
    printf("Maximum: %d\nMinimum: %d", max, min);
    return 0;
}

7 个答案:

答案 0 :(得分:4)

在您要求用户输入之前,您需要使用max 的值初始化mina 。更新a不会更新minmax

表达式max = aa的值复制到max。它没有将max设置为跟踪a

由于您从所有计算中省略了a,因此最小值和最大值都不会考虑在内。

答案 1 :(得分:3)

您还可以将值输入到数组中。如果您使用此方法,则可以将Linkmax设置为min,并从array[0]迭代到i=1并将i=narray[i]max值。如果找到新的minmax值,请将其设置为min

以下是一个例子:

array[i]

答案 2 :(得分:2)

您的maxmin在开头设置为1,但在输入后,a的值发生了变化,但最大值和分钟仍为1

您可以通过在max语句后初始化minscanf来解决此问题,或者您可以将maxmin初始化为INT_MAXBarak Manos所指出的INT_MIN中定义的{} limits.h

#include <stdlib.h>
//Enter five numbers and find the maximum and minimum.
int main()
{
    int a,b,c,d,e;
    scanf("%d%d%d%d%d", &a, &b, &c, &d, &e);
    int max = a, min = a;
    ....
    ....
}

此外,简单版本会将所有输入数字存储在一个数组中,并在该数组上调用minmax

答案 3 :(得分:2)

这是因为您在影响min之前对maxa进行了初始化。

int a;
int b;
int c;
int d;
int e;
// you should check the return of function
if (scanf("%d%d%d%d%d", &a, &b, &c, &d, &e) != 5) { 
  return 1;
}
int max = a;
int min = a;

顺便说一下,在你的情况下,主要的正确原型是int main(void);

答案 4 :(得分:2)

以这种方式重构代码:

string[] string_suggestion = {"suman goa - SGMN","sugar khamaturan - SKMN","goan kuman - GKMN","karan thapa - TTMN"};
       var source = new AutoCompleteStringCollection();
        source.AddRange(string_suggestion);
        textBox1.AutoCompleteCustomSource = source;
        textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
        textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
// there are more than 1000 words 

此外,当您要从标准输入扫描这些输入时,不要看到使用不同的值初始化a,b,c,d和e。

当用户输入全0作为输入时,此代码不起作用。那么你的最小计算将是不正确的。

因此,最好使用int main() { int a = 1, b = 2, c = 3, d = 4, e = 5; scanf("%d%d%d%d%d", &a, &b, &c, &d, &e); int min = a, max = a; // rest of your code here; } 初始化min,并使用INT_MAX

初始化min

答案 5 :(得分:1)

您好,您可以通过此代码实现以下内容。 如果在扫描值之前指定max和min的值,则可能存在问题。

例如:我输入5个数字3,4,5,6,7,如下所示我将从你的代码得到1作为min的值。所以这个问题可以通过在获得用户输入后定义max和min来删除。

#include <stdio.h>
#include <stdlib.h>

//Enter five numbers and find the maximum and minimum.
int main(void) {
    int a, b, c, d, e, min, max;

    if (scanf("%d%d%d%d%d", &a, &b, &c, &d, &e) != 5)
        return 1;

    min = max = a;
    if (b > max) {
        max = b;
    }
    if (c > max) {
        max = c;
    }
    if (d > max) {
        max = d;
    }
    if (e > max) {
        max = e;
    }
    if (min > b) {
        min = b;
    }
    if (min > c) {
        min = c;
    }
    if (min > d) {
        min = d;
    }
    if (min > e) {
        min = e;
    }
    printf("Maximum: %d\nMinimum: %d", max, min);
    return 0;
}

干杯!

答案 6 :(得分:0)

正如其他人诊断出的那样:

    在从用户读取min的值之前,
  • max1设置为a。修复方法是在读取值后初始化minmax
  • abcde的初始化无用。
  • 应测试scanf()的返回值以避免未定义的行为。
  • 没有参数的main原型是int main(void)
  • 最后一个printf应输出最终换行符,以确保在所有平台上正确刷新。

这是一种采用单循环的不同方法。它使用经典技巧使所有比较都具有通用性:min初始化为最大可能int值,max初始化为最小值:

#include <limits.h>
#include <stdio.h>
#include <stdlib.h>

#define SIZE 5

int main(void) {
    int array[SIZE], min = INT_MAX, max = INT_MIN;

    printf("Enter %d numbers:\n", SIZE);
    for (size_t i = 0; i < SIZE; i++) {
        if (scanf("%d", &array[i]) != 1) {
            printf("Invalid number entered\n");
            exit(EXIT_FAILURE);
        }
        if (max < array[i]) {
            max = array[i];
        }
        if (min > array[i]) {
            min = array[i];
        }
    }
    printf("Maximum: %d\nMinimum: %d\n", max, min);
    return 0;
}