【问题标题】:Max/Min methods returning nothing or incorrect numberMax/Min 方法不返回任何内容或返回不正确的数字
【发布时间】:2018-09-23 21:31:06
【问题描述】:

我需要将参数放入一个数组并使用方法获取数字的最大值/最小值和平均值。它不会返回预期的结果。我对此束手无策。如果有人能让我知道我做错了什么,我将非常感激。这是我在沮丧中造成的混乱。

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

void getGrade(int argc, char *argv[]);
int findMaximum(int grade[]);
int findMinimum(int grade[]);
float calculateAverage(int grade[]);
void printResults(int maximum, int minimum, float average);

int argc;
int grade[50];
int main(int argc, char *argv[])
{

    getGrade(argc,argv);
    int max = findMaximum(grade);
    int min = findMinimum(grade);
    float avg = calculateAverage(grade);
    printResults(max,min,avg);
return 0;
}
void getGrade(int argc, char *argv[]){
    for(int i=1;i<=argc-1;i++)
        grade[i-1]=atoi(argv[i]);
}
int findMaximum(int grade[]){
    int max;
    int size = argc-1;
    for(int i=0;i<size;i++){
       if(grade[i]>grade[0]){
            max = grade[i];}
       else{
            max = grade[0];}
    }
         return max;
}
int findMinimum(int grade[]){
    int min;
    int size= argc-1;
    for(int i=0; i<size;i++){
        if(grade[i]<grade[0])
           min=grade[i];
    }
    return min;
}
float calculateAverage(int grade[]){
    float avg=0.0;
    for(int i=0; i<=argc; i++)
        avg= grade[i]+avg;
    return avg/(argc-1);
}
void printResults(int maximum, int minimum, float average){
    printf("Maximum Grade: %d\nMinimum Grade: %d\nAverage Grade: %.2f\n",maximum,minimum, average);
}

我是 C 的新手,所以请善待并原谅这已经成为一团糟。

【问题讨论】:

    标签: c methods arguments


    【解决方案1】:

    在您的最大和最小函数中,您将列表的每个元素与列表的第一个元素进行比较

    if(grade[i]>grade[0])
    

    相反,您应该在循环之前将 max 设置为 Grade[0],而不是与 max 进行比较。所以你的功能会变成:

    int findMaximum(int grade[]){
      int max = grade[0];
      int size = argc-1;
      for(int i=0;i<size;i++){
        if(grade[i]>max){
            max = grade[i];}
      }
    return max;
    }
    

    请注意,此函数假定列表中至少有一个元素。为避免这种情况,您可以将 max 设置为 INT_MIN,这样第一个元素将始终大于当前的 max

    你也可以做同样的事情,只是切换最小函数。

    【讨论】:

      【解决方案2】:

      您的全局变量 argc 永远不会被赋值。为了不过多更改代码,只需将其重命名为 Argc:

      int Argc;
      int grade[50];
      int main(int argc, char *argv[])
      {
          Argc=argc;
          getGrade(argc,argv);
      

      然后按照上一张海报的建议进行:

         int findMaximum(int grade[]){
          int max;
          int size = Argc-1;
          max=grade[0];
          for(int i=1;i<size;i++){
             if(grade[i]>max){
                  max = grade[i];}
          }
               return max;
      }
      
      int findMinimum(int grade[]){
          int min=grade[0];
          int size= Argc-1;
          for(int i=1; i<size;i++){
              if(grade[i]<min)
                 min=grade[i];
          }
          return min;
      }
      

      calculateAverage 同上。

      ./a.out 8 9 5 2
      Maximum Grade: 9
      Minimum Grade: 2
      Average Grade: 6.00
      

      【讨论】:

        猜你喜欢
        • 2019-04-10
        • 2019-05-30
        • 2010-10-28
        • 1970-01-01
        • 2019-10-23
        • 2020-01-26
        • 2018-10-21
        • 1970-01-01
        • 2022-11-28
        相关资源
        最近更新 更多