【问题标题】:searching for the maximum in text file在文本文件中搜索最大值
【发布时间】: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 &amp;Student[l]; 时您还没有完成数组解析,无论如何l 始终是0。当你找到一个新的最大值时,设置l = s 并等待循环结束返回。如果至少有一个元素,则返回值不能NULL

标签: c


【解决方案1】:

问题本质上是您返回得太早了。可能有多个值大于当前最大值。举个例子吧。

假设 gpa 为 1.7、2.7、2.0、3.9、4.0。 您的代码将看到 2.7 大于 1.7,然后返回该值,因为它更大。这显然是不正确的,因为我们希望 4.0 是最大值。基本上,您只想在完成所有必要的比较后返回。此外,您还需要检查以确保学生的 gpa 最多的作业。

另外,对于两个 gpa 相同的学生,应该注意上面的解释。你不需要什么特别的东西。作业数较多的学生将被退回。

【讨论】:

  • 哦,我明白了.. 非常感谢!
  • 如果您觉得我的回答有帮助,如果您能支持或接受我的回答,我将不胜感激。 :)
猜你喜欢
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多