标题:求助 这个链表中的max函数为什么输出不出来呢?
只看楼主
静战者
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-12-21
结帖率:0
已结贴  问题点数:20 回复次数:3 
求助 这个链表中的max函数为什么输出不出来呢?
程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct student
{
    int xuehao;
    char name[4];
    int point1;
    int point2;
    int point3;
    struct student *next;
}Linklists;
main()
{
    void input(Linklists *head);
    void print(Linklists *head);
    void max(Linklists *head);
    Linklists *head;
    head=(Linklists*)malloc(sizeof(Linklists));
    head->next=NULL;
    input(head);
    print(head);
    max(head);
    return 0;
}
void input(Linklists *head)
{
    Linklists *p;
    printf("请依次输入学号,姓名,各科成绩(学号输入00时结束):\n");
        while(1)
        {
            p=(Linklists*)malloc(sizeof(Linklists));
            scanf("%d",&p->xuehao);
            if(p->xuehao==00)
            {
                free(p);
                break;
            }
            scanf("%s %d %d %d",p->name,&p->point1,&p->point2,&p->point3);
            p->next=head->next;
            head->next=p;
        }
}
void print(Linklists *head)
{
    Linklists *p;
    p=head->next;
        printf("\n学号------姓名-------第一科成绩----第二科成绩----第三科成绩\n");
        while(p!=NULL)
        {
            printf("%d %s %d %d %d\n",p->xuehao,p->name,p->point1,p->point2,p->point3);
            p=p->next;
        }
}
void max(Linklists *head)
{
    Linklists *p=head->next;
    int maxpoint,temp,maxxuehao;
    maxxuehao=head->xuehao;
    printf("最高分的同学的成绩如下:");
    printf("\n学号------姓名-------第一科成绩----第二科成绩----第三科成绩\n");
    while(p!=NULL)
    {
        maxpoint=p->point1+p->point2+p->point3;
        p=p->next;
        temp=p->point1+p->point2+p->point3;
        if(maxpoint<temp)
        {
            maxxuehao=p->xuehao;
            maxpoint=temp;
        }
    }
    p=head->next;
    while(p!=NULL)
    {
        if(maxxuehao==p->xuehao)
        printf("%d %s %d %d %d\n",p->xuehao,p->name,p->point1,p->point2,p->point3);
        else
        p=p->next;
    }
}

这个我不知道怎么把图片黏贴上,题目是这样的,输入若干个学生的信息然后通过链表输出,并且找到最高分的同学的成绩并输出
搜索更多相关主题的帖子: next head void 成绩 printf 
2021-12-21 15:59
静战者
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-12-21
得分:0 
忘了说问题了,它这个输入后输出的结果没问题,但是这个max的函数就没有正确输出
2021-12-21 16:00
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
代码混乱,逻辑也混乱

从你的 max 函数中看不出到底是输出一个最高分的学生信息,还是所有最高分的学生信息。
因为纯从代码上猜,你是想输出所有与“链表中第一个最高分(输入信息中最后一个最高分)者”相同学号的学生们的信息
2021-12-21 16:54
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
如果是只要输出第一个

程序代码:
void max(Linklists *head) // 应该加 const,懒得改之前的代码了
{
    printf("最高分的同学的成绩如下:\n");
    printf("学号------姓名-------第一科成绩----第二科成绩----第三科成绩\n");

    const Linklists* pmax = NULL;
    int maxpoint;
    for( const Linklists* p=head->next; p; p=p->next )
    {
        int temp = p->point1 + p->point2 + p->point3;
        if( !pmax || maxpoint<temp )
        {
            pmax = p;
            maxpoint = temp;
        }
    }

    if( pmax )
        printf( "%d %s %d %d %d\n", pmax->xuehao, pmax->name, pmax->point1, pmax->point2, pmax->point3 );
}


输入
1 a 1 2 3
2 a 11 22 33
3 a 11 22 33
4 a 1 2 3
0

输出
学号------姓名-------第一科成绩----第二科成绩----第三科成绩
4 a 1 2 3
3 a 11 22 33
2 a 11 22 33
1 a 1 2 3
最高分的同学的成绩如下:
学号------姓名-------第一科成绩----第二科成绩----第三科成绩
3 a 11 22 33
2021-12-21 16:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507943-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052866 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved