我需要将参数放入数组中,并使用方法获取数字的最大值/最小值和平均值。它不返回预期结果。我为此尽全力。如果有人能让我知道我在做什么错,我将非常感激。这是我无奈时所犯的一团糟。
#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的新手,请好心并请谅解这种混乱。
答案 0 :(得分:2)
在最大和最小函数中,您将列表的每个元素与列表的第一个元素进行比较
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
。
您也可以执行此操作,只是切换到最小功能。
答案 1 :(得分:1)
您的全局变量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;
}
Ditto用于计算平均。
./a.out 8 9 5 2
Maximum Grade: 9
Minimum Grade: 2
Average Grade: 6.00