关于#c语言#的问题,请各位专家解答!

#include
#include 
#include
struct student
{
    char num[10] ;
    char name[20];
    float chinese;
    float math;
    float score;
};
struct node
{
    struct student data;
    struct node*next;
    struct student;
};
struct node*head;

void create()
{
    head=(struct node*)malloc(sizeof(struct node));
    head->next=NULL;
}

void pingjun()
{
    struct node *head;
    struct node*p, *q, *s;
    p = head->next;
    float max = p->score;
    q = head->next;
    float min = p->score;
    s = head->next;
    float sum = 0;
    int n = 0;
    while (p->next)
    {
        p = p->next;
        if (p->score > max)
        {
            max = p->score;
        }
        if (p->score < min)
        {
            min = p->score;
        }
    }
    while (s)
    {
        sum = sum + s->score;
        n++;
        s = s->next;
    }
    float ave = sum / n;
    printf("最高成绩:%.1f,最低成绩:%.1f,平均成绩:%.1f", max, min, ave);
}

该回答引用NewBing

你好,这是Bing。我可以尝试帮你检查代码,但我不能保证完全正确。请注意,我不会运行代码或提供解决方案,只会给出一些可能的错误或建议。


我发现了一些可能的问题:

  • 在第10行,你定义了一个结构体变量student,但是没有给它分配内存或初始化。
  • 在第11行,你定义了一个指针变量head,但是没有指向任何有效的地址。
  • 在第14行,你创建了一个新的结点,并把它赋值给head,但是这样会覆盖掉之前的head变量。你应该把新结点插入到链表的尾部或头部。
  • 在第24行,你重新定义了一个局部变量head,但是没有初始化。这样会导致后面的操作出错。你应该使用全局变量head或者把它作为参数传递给函数。
  • 在第25行,你定义了三个指针变量p,q,s,并且都指向head->next。这样会导致后面的循环重复计算相同的结点。你应该让p,q,s分别指向不同的结点,并且在循环中更新它们。
不知道你这个问题是否已经解决, 如果还没有解决的话:

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