【发布时间】:2020-11-19 14:25:24
【问题描述】:
大家!我是编程初学者,对C语言特别感兴趣。如果我问的东西太明显了,我很抱歉,但是,正如我已经提到的,我只是一个新手。另外,这是我的第一篇文章,很抱歉我不知道如何使用编辑模式
所以,假设我有一个学生结构,其中包括他们的姓名、gpa 和完成作业的数量:
typedef struct {
char name[20];
int gpa;
int assignments
} students;
我的文件内容是:
Name GPA Assignments
Antonio 3 5
Christine 2 2
Veronika 3 7
Jade 1 3
我想实现函数 bestStudent,如果这个学生的 gpa 最高,它必须返回一个指向最好学生的指针;但是,如果有几个学生的 gpa 相同,那么最好的学生就是 gpa 最高和作业次数最多的学生。但是如果有几个最好的学生同时拥有最高的 gpa 和最多的作业数,那么该函数应该返回一个空指针。
其实我在网上搜索了如何找到数组中的最大值,所以如果我只看gpa就知道如何实现了。但是,如果有两个学生的 gpa 相同,我怎么能同时查看作业的数量?我应该将指针返回给那个学生。 假设 n 是学生的数量,最多有 10 个学生。
students* bestStudent (int n, students Student[10]){
int l=0;
int maximum = Student[l].gpa;
for (int s=0; s<n; s++){
if (Student[s].gpa > maximum){
l=s;
maximum = Student[s].gpa;
return &Student[l];
}
}
return NULL;
}
如果有两个或更多学生的 gpa 相同,我不明白如何检查作业的数量。我需要再创建一个循环来检查吗?如果这些问题对你来说很愚蠢,我真的很抱歉:)
【问题讨论】:
-
return &Student[l];时您还没有完成数组解析,无论如何l始终是0。当你找到一个新的最大值时,设置l = s并等待循环结束返回。如果至少有一个元素,则返回值不能NULL。
标签: c