繁体   English   中英

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

[英]Outputting the maximum and minimum value from an array in C

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

#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;

}

您当前的代码可以使用循环和辅助函数,这将通过减少所有这些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

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

我更新了我的代码,使上面代码中提到的 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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM