输出平均分最高的学生信息

img


裁判测试程序样例:

img

img


我的程序:

img


我实在不知道怎么处理这个函数中的指针函数,希望有人能解答一下,真的万分感谢

供参考:

/*请在这里填写答案*/
void  fun(struct STUDENT s[], struct STUDENT* pmax)
{
    int i;
    for (i = 0; i < 4; i++)
    {
        s[i].average = (s[i].compute + s[i].english + s[i].math) / 3.0;
        if (i == 0 || (*pmax).average  < s[i].average)  *pmax = s[i];
    }
    return;
}

题目要求将平均分最高的学生信息存入pmax里,不是存入s[0]里
你交换的时候为什么要去交换s[0],直接将s[i]赋值给pmax就好了呀

你的程序将第一个元素和最大值的元素交换,可是题目并没有让你这么做啊

void fun(struct STUDENT s[], struct STUDENT *pmax)
{
int m = 0;
for (int i = 1; i < 4; i++)
    if ((s[i].computer + s[i].english + s[i].math) > (s[m].computer + s[m].english + s[m].math)) m = i;
pmax->num = s[m].num;
pmax->name = s[m].name;
pmax->english = s[m].english;
pmax->computer = s[m].computer;
pmax->math = s[m].math;
pmax->average = (s[m].english + s[m].computer + s[m].math) / 3.0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7700529
  • 这篇博客也不错, 你可以看下关于:如果函数的参数是一个指针,不要指望用该指针去申请动态内存 我的理解
  • 除此之外, 这篇博客: 看完这篇文章还不会顺序表和链表,请寄刀片给我中的 💦 链表的分类 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    实际中链表的结构非常多样,以下情况组合起来就有8种链表结构:
    注:本章只了解单链表
    

    1️⃣ 单向或者双向

    在这里插入图片描述
    2️⃣ 带头或者不带头
    在这里插入图片描述
    3️⃣ 循环或者非循环
    在这里插入图片描述


    🎗虽然有这么多的链表结构,但是实际中最常用的只有两种结构

    1️⃣ 无头单向非循环链表
    在这里插入图片描述
    2️⃣ 带头双向循环链表
    在这里插入图片描述
    ⚠ 注意:
    ▶ 无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。
    ▶ 带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了,后面我们代码实现了就知道了。

  • 您还可以看一下 吴刚老师的【吴刚大讲堂】电商视觉的排版与应用方法课程中的 基础页面功能布局优化方法小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    问题解答:

    1. 什么是指针函数?指针函数有什么特点和用途?

    指针函数是指返回值为指针类型的函数。它的特点是返回值类型是指针,可以指向一个变量或者函数。指针函数的用途主要有两个:一是可以返回一个指针,方便函数之间传递数据;二是可以通过指针函数修改指向变量的值,实现在函数中对变量的修改。

    1. 我该如何声明和定义一个指针函数?

    声明和定义指针函数的语法如下:

    返回值类型 (*函数名)(参数列表);
    

    示例代码:

    int* sum(int a, int b) {
      int* result = new int;
      *result = a + b;
      return result;
    }
    

    上面的示例代码中,sum 函数是一个指针函数,返回值类型为 int*,参数列表为 (int a, int b)

    1. 如何在函数中正确使用指针函数?

    使用指针函数的关键是理解指针的概念和用法。在函数中使用指针函数时,可以通过以下步骤实现:

    • 声明和定义指针变量,用于接收指针函数的返回值;
    • 调用指针函数,并将返回的指针赋值给指针变量;
    • 使用指针变量来访问指针指向的变量或者函数。

    示例代码:

    int* sum(int a, int b) {
      int* result = new int;
      *result = a + b;
      return result;
    }
    
    void printSum(int (*sumPtr)(int, int), int a, int b) {
      int* result = sumPtr(a, b);
      cout << *result << endl;
      delete result;  // 释放内存
    }
    
    int main() {
      printSum(sum, 5, 7);
      return 0;
    }
    

    上面的示例代码中,printSum 函数接受一个指针函数 sumPtr 和两个整数参数 ab,然后调用 sumPtr 函数来计算 ab 的和,并打印结果。

    1. 如果我需要在函数中修改指针函数指向的变量的值,应该怎么做?

    如果要在函数中修改指针函数指向的变量的值,可以通过以下步骤实现:

    • 定义一个指针变量,指向需要修改的变量;
    • 将指针函数的返回值赋值给指针变量,实现指针指向的变量的修改。

    示例代码:

    void increment(int* numPtr) {
      (*numPtr)++;
    }
    
    int main() {
      int num = 5;
      int* numPtr = &num;
      increment(numPtr);
      cout << *numPtr << endl;
      return 0;
    }
    

    上面的示例代码中,increment 函数接受一个 int 类型的指针变量 numPtr,然后通过修改 numPtr 指向的变量的值实现对 num 变量的修改。

    1. 有没有使用指针函数的示例代码可以参考?

    以下是一个示例代码,演示了如何在函数中使用指针函数:

    #include <iostream>
    
    int* sum(int a, int b) {
      int* result = new int;
      *result = a + b;
      return result;
    }
    
    void printSum(int (*sumPtr)(int, int), int a, int b) {
      int* result = sumPtr(a, b);
      std::cout << *result << std::endl;
      delete result;  // 释放内存
    }
    
    int main() {
      printSum(sum, 5, 7);
      return 0;
    }
    

    上面的示例代码中,sum 函数是一个指针函数,返回两个整数的和;printSum 函数接受一个指针函数 sumPtr 和两个整数参数 ab,然后调用 sumPtr 函数来计算 ab 的和,并打印结果。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^