2201_75843485 2024-02-28 19:31 采纳率: 50%
浏览 4

C语言 基础题 结构体变量的指针做参数

题目:

img

我的代码

#include<stdio.h>
#define n 3
struct student
{
    int num;
    char name[20];
    int chin;
    int math;
    int eng;
    float aver;
};
int main()
{
    struct student people[n];
    struct student* p;
    p = people;
    void input(struct student arr[]);
    struct student max(struct student *q);
    void print(struct student* q);
    input(p);
    max(p);
    print(p);
    return 0;
}

void input(struct student arr[])
{
    int i;
    for (i = 0; i < n; i++)
    {
        scanf_s("%d %s %d %d %d ", &arr[i].num, arr[i].name, &arr[i].chin, &arr[i].math,&arr[i].eng);
        arr[i].aver = (arr[i].chin + arr[i].math + arr[i].eng) / 3.0;
    }

}
struct student max(struct student *q)
{
    int i,j;
    for (i = 0; i < n; i++)
    {
        if ((q+j)->aver < (q + i)->aver)
            j = i;
    }
    return (q + j)->aver;
}
void print(struct student *q)
{
    printf("num:%d name:%s chinnes:%d math:%d english:%d averge:%f\n", q->num, q->name, q->chin, q->math, q->eng, q->aver);
}

报错显示:

img

能帮忙找找错吗

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2024-02-28 19:32
    关注

    2201_75843485 晚上好🌙🌙🌙
    本答案参考通义千问

    错误原因

    1. max函数中,你试图通过(q+j)访问结构体数组元素,但这里应该使用*(q+j)来解引用指针。
    2. max函数没有返回值,但需要返回最大值。

    修改后的代码

    #include<stdio.h>
    #define n 3
    struct student {
        int num;
        char name[20];
        int chin;
        int math;
        int eng;
        float aver;
    };
    
    int main() {
        struct student people[n];
        struct student* p;
        p = people;
        void input(struct student arr[]);
        struct student (*max)(struct student*); // 修改函数声明,添加括号
        void print(struct student* q);
        input(p);
        max = max(p); // 将max赋值为输入后找到的最大值
        print(p);
        return 0;
    }
    
    void input(struct student arr[]) {
        int i;
        for (i = 0; i < n; i++) {
            scanf_s("%d %s %d %d %d ", &arr[i].num, arr[i].name, &arr[i].chin, &arr[i].math, &arr[i].eng);
            arr[i].aver = (arr[i].chin + arr[i].math + arr[i].eng) / 3.0;
        }
    }
    
    struct student max(struct student *q) { // 添加解引用操作
        int i, j;
        for (i = 0; i < n; i++) {
            if (*(q + j)->aver < *(q + i)->aver) // 使用*(q+j)访问结构体成员
                j = i;
        }
        return *q + j; // 返回最大值的结构体指针
    }
    
    void print(struct student *q) {
        printf("num:%d name:%s chinnes:%d math:%d english:%d averge:%f\n", q->num, q->name, q->chin, q->math, q->eng, q->aver);
    }
    

    解决方案

    1. max函数声明中,添加了括号表示这是一个指向函数的指针类型。
    2. main函数中,将max(p)的结果赋值给max,而不是直接调用。
    3. max函数中,对(q+j)进行了解引用操作 *(q+j),以便正确访问结构体成员。
    4. max函数返回值是结构体指针,所以返回语句是return *q + j;
    评论

报告相同问题?

问题事件

  • 创建了问题 2月28日