从C中的数组输出最大值和最小值

时间:2017-02-09 01:58:58

标签: c arrays max min

我编写了一个程序,要求用户在四天内输入高温和低温。在此之后,程序使用所有四天的输入计算平均温度。一切都工作正常但是,我需要让程序确定并输出最高的温度和发生的日期,以及最小的低温和它发生的那一天。这是我目前的代码

#include <stdio.h>
#define NUMS 4

int main (void)

{
int high[NUMS];
int low[NUMS];
const int MAX = 40;
const int MIN = -40;
int totalhigh;
int totallow;
int sum;
float avg;

    printf ("---===IPC Temperature Analyzer ===---\n");

    printf ("Enter the high value for day 1: ");
    scanf ("%d", &high[0]);

    printf ("Enter the low value for day 1: ");
    scanf ("%d", &low[0]);

    while (high[0] > MAX || low[0] <  MIN || high[0] < low[0]) {

    printf ("Incorrect values, temperatures must be in the range -40 to 40, high must be greater than low.\n");

    printf ("Enter the high value for day 1: ");
    scanf ("%d", &high[0]);

    printf ("Enter the low value for day 1: ");
    scanf ("%d", &low[0]);

    }

    printf ("Enter the high value for day 2: ");
    scanf ("%d", &high[1]);

    printf ("Enter the low value for day 2: ");
    scanf ("%d", &low[1]);

    while (high[1] > MAX || low[1] < MIN || high[1] < low[1]) {

    printf ("Incorrect values, temperatures must be in the range -40 to 40,    high must be greater than low.\n");

    printf ("Enter the high value for day 2: ");
    scanf ("%d", &high[1]);

    printf ("Enter the low value for day 2: ");
    scanf ("%d", &low[1]);

    }

    printf ("Enter the high value for day 3: ");
    scanf ("%d", &high[2]);


    printf ("Enter the low value for day 3: ");
    scanf ("%d", &low[2]);

    }

    printf ("Enter the high value for day 4: ");
    scanf ("%d", &high[3]);

    printf ("Enter the low value for day 4: ");
    scanf ("%d", &low[3]);

    while (high[3] > MAX || low[3] < MIN || high[3] < low[3]) {

    printf ("Incorrect values, temperatures must be in the range -40 to 40, high must be greater than low.\n");

    printf ("Enter the high value for day 4: ");
    scanf ("%d", &high[3]);

    printf ("Enter the low value for day 4: ");
    scanf ("%d", &low[3]);

    }

    totalhigh = high[0] + high[1] + high[2] + high[3];
    totallow = low[0] + low[1] + low[2] + low[3];

    sum = totalhigh + totallow;
    avg = sum/8.0;
    printf ("The average (mean) temperature was: %.2f\n", avg);

    if (high[0] > high[1] || high[0] > high[2] || high[0] > high[3]) {

            printf ("The highest temperature was %d, on day 1\n", high[0]);
    }
    else if (high[1] > high[0] || high[1] > high[2] || high[1] > high[3]) {

            printf ("The highest temperature was %d, on day 2\n", high[1]);
    }

    else if (high[2] > high[0] || high[2] > high[1] || high[2] > high[3]){
            printf ("The highest temperature was %d, on day 3\n", high[2]);
    }

    else {
            printf ("The highest temperature was %d, on day 4\n", high[3]);
    }


return 0;

}

2 个答案:

答案 0 :(得分:1)

您当前的代码可以使用循环和辅助函数,这会通过减少所有scanf()次调用来缩短代码。通过使用更多函数,您还可以抽象更多,但它将显示一般的想法。

检查scanf()的结果也很好,以防万一用户输入非整数。

您当前的代码可能如下所示:

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

#define NUMS 4

/* takes a pointer to a number */
void get_input(int *temp) {
    if (scanf("%d", temp) != 1) {
        printf("Invalid temp entered\n");
        exit(EXIT_FAILURE);
    }
}

int main(void) {
    int high[NUMS];
    int low[NUMS];
    const int MAX = 40;
    const int MIN = -40;
    int day = 1, totalhigh = 0, totallow = 0, sum;
    float avg;

    for (size_t i = 0; i < NUMS; i++) {
        printf ("Enter the high value for day %d: ", day);

        /* takes the address of the pointer given by get_input() */
        get_input(&high[i]);

        printf ("Enter the low value for day %d: ", day);
        get_input(&low[i]);
        while (high[i] > MAX || low[i] <  MIN || high[i] < low[i]) {
            printf ("Incorrect values, temperatures must be in the range -40 to 40, high must be greater than low.\n");

            printf ("Enter the high value for day %d: ", day);
            get_input(&high[i]);

            printf ("Enter the low value for day %d: ", day);
            get_input(&low[i]);
        }
        day++;
    }

    for (size_t i = 0; i < NUMS; i++) {
        totalhigh += high[i];
        totallow += low[i];
    }

    sum = totalhigh + totallow;
    avg = sum/8.0;

    printf ("The average (mean) temperature was: %.2f\n", avg);

    return 0;
}

在寻找最大和最小温度方面,您可以使用以下方法:

  • maxmin设置为数组的第一个元素array[0]
  • i=1循环到i=n
  • 如果和元素大于max,请将max设置为array[i]。如果元素小于min,请将min设置为array[i]
  • 最高和最低温度的日期为i+1

由于做这样的事情可以帮助你更好地理解循环,我决定只描述步骤。上面的代码只是对当前代码的改进,并向您展示一种更简单的方法,它将向您展示如何解决这些问题的不同观点。

答案 1 :(得分:0)

我更新了我的代码,使上面代码中提到的if语句正常运行。这是:

    if (high[0] > high[1] && high[0] > high[2] && high[0] > high[3]) { // Check to see if day 1 has the highest temperature against days 2,3 and 4.

            printf ("The highest temperature was %d, on day 1\n", high[0]); // Output day 1 as the highest temperature and indicate the temperature value.
    }
    else if (high[1] > high[0] && high[1] > high[2] && high[1] > high[3]) { // Same function as the above function for day 1 except this is used for day 2.

            printf ("The highest temperature was %d, on day 2\n", high[1]); // Refer to day 1 printf
    }

    else if (high[2] > high[0] && high[2] > high[1] && high[2] > high[3]){
            printf ("The highest temperature was %d, on day 3\n", high[2]);
    }

    else {
            printf ("The highest temperature was %d, on day 4\n", high[3]);
    }

// Switch out high values with low values in order to determine lowest temperature and its corresponding day.