Методы Max / Min, не возвращающие ничего или неверное число - PullRequest
0 голосов
/ 24 сентября 2018

Мне нужно поместить аргументы в массив и получить максимальное / минимальное и среднее число, используя методы.Это не возвращает ожидаемые результаты.Я в своем уме с этим.Если бы кто-нибудь мог сообщить мне, что я делаю неправильно, я был бы очень благодарен.Вот беспорядок, который я сделал в своем разочаровании.

#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, поэтому, пожалуйста, будьте добры и извините за беспорядок, которым он стал.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вашей глобальной переменной 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
0 голосов
/ 24 сентября 2018

В ваших максимальных и минимальных функциях вы сравниваете каждый элемент списка с первым из списка

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.

. И вы можете сделать то же самое, просто переключившись для функции минимума.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...