最大/最小方法返回任何数据或错误数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大/最小方法返回任何数据或错误数字相关的知识,希望对你有一定的参考价值。

我需要将参数放入数组中并使用方法获取数字的最大值/最小值和平均值。它没有返回预期的结果。我的智慧结束了。如果有人能让我知道我做错了什么,我会非常感激。这是我在挫折中弄得一团糟的事。

#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
Minimum Grade: %d
Average Grade: %.2f
",maximum,minimum, average);
}

我是C的新手,所以请善待并原谅这已成为混乱。

答案

您的全局变量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
另一答案

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

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

你可以做同样的事情,只需转换为最小功能。

以上是关于最大/最小方法返回任何数据或错误数字的主要内容,如果未能解决你的问题,请参考以下文章

使用用户输入并返回最小和最大数字 - 练习 coursera Python

寻找局部最大值和最小值

js 取最大值 最小值 判断是否是数字

片段视图返回后执行的 Firebase 查询

Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)

DocumentFragment使用