简体   繁体   English

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

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

I have written a program that asks the user the input the high and low temperature over the course of four days.我编写了一个程序,要求用户输入四天的高温和低温。 Following this, the program calculates the mean temperature using the inputs from all four days.在此之后,程序使用所有四天的输入来计算平均温度。 Everything is working fine however, I need to have the program determine and output the greatest high temperature and the day it occurred on as well as the smallest low temperature and the day it occurred on.一切正常,但是,我需要让程序确定并输出最高高温及其发生日期以及最低低温及其发生日期。 Here's my code so far到目前为止,这是我的代码

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

}

Your current code can use a loop and a helper function, which would shorten your code by reducing all those scanf() calls.您当前的代码可以使用循环和辅助函数,这将通过减少所有这些scanf()调用来缩短您的代码。 You could also abstract a lot more, by using more functions, but it will show the general idea.您还可以通过使用更多函数来抽象更多内容,但它会显示总体思路。

It is also good to check the result of scanf() , just in case the user enters a non-integer.检查scanf()的结果也很好,以防用户输入非整数。

Your current code could look like this:您当前的代码可能如下所示:

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

In terms of finding the largest and smallest temperatures, here is a method you can use:在查找最大和最小温度方面,您可以使用以下方法:

  • Set max and min to the first element of your array, array[0] .maxmin设置为数组的第一个元素array[0]
  • loop from i=1 to i=n .i=1循环到i=n
  • If and element if bigger than max , set max to array[i] .如果和元素大于max ,则将max设置为array[i] If an element is smaller than min , set min to array[i] .如果元素小于min ,则将min设置为array[i]
  • The day for the highest and lowest temperatures will be i+1 .最高和最低温度的那一天将是i+1

Since doing something like this will help you understand loops better, I decided to just describe the steps.由于做这样的事情会帮助你更好地理解循环,我决定只描述这些步骤。 The above code was just an improvement on your current code, and showing you a easier way to do it will show you a different perspective on how to do problems like these.上面的代码只是对您当前代码的改进,向您展示一种更简单的方法将向您展示如何解决此类问题的不同视角。

I updated my code to have the if statement mentioned in my above code to function correctly.我更新了我的代码,使上面代码中提到的 if 语句正常运行。 Here it is:这里是:

    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