dotcpp0642108


私信TA

用户名:dotcpp0642108

访问量:97

签 名:

等  级
排  名 26360
经  验 577
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

注意事项:

参考代码:

#include<stdio.h>
#include<stdlib.h>
#define Maxsize 100
typedef struct 
{
    char num[Maxsize];//学号
    char name[Maxsize];//姓名
    int course[3];//三科成绩
}Student;//一个学生的信息

typedef struct studentnode
{
    Student data;//节点数据域
    struct studentnode* next;//节点指针域
}SNode,*SList;//链表节点

SList InitalList();//初始化链表
void InsertNode(SList head);//在链表插入节点
Student TraverseList(SList head,int a[3],int N);//浏览所有节点找出总成绩最高的人并计算三科成绩平均分
int Sum(Student a);//求学生a的成绩总分
int main()
{
    int N;//学生个数
    SList head = InitalList();//建立头节点
    scanf("%d",&N);
    //将N个学生的信息插入链表
    for(int cont_i = 0;cont_i<N;cont_i++)
    {
        InsertNode(head);
    }
    int course1[3]={0};//三科的平均成绩
    
    Student best = TraverseList(head,course1,N);//找出总分最高的学生
    printf("%d %d %d\n",course1[0],course1[1],course1[2]);//输出三科平均分
    printf("%s %s %d %d %d\n",best.num,best.name,best.course[0],best.course[1],best.course[2]);//输出总分最高的学生的信息
	return 0;
}

SList InitalList()
{
    SList output=(SNode*)malloc(sizeof(SNode));//生成头节点空间
    //头节点数据域赋值
    (output->data).course[0]=-1;
    (output->data).course[1]=-1;
    (output->data).course[3]=-1;
    output->next = NULL;
    return output;
}

void InsertNode(SList head)
{
    SNode *newStudent = (SNode*)malloc(sizeof(SNode));//建立节点空间
    //将学生信息输入到节点的数据域
    scanf("%s %s %d %d %d",&(newStudent->data).num,&(newStudent->data).name,&(newStudent->data).course[0],&(newStudent->data).course[1],&(newStudent->data).course[2]);
    //将节点插入到链表顶端
    newStudent->next = head->next;
    head->next = newStudent;
}

Student TraverseList(SList head,int a[3],int N)
{
    Student best={
        "ERROR","ERROR",-1,-1,-1
    };//初始化最好的学生信息
    //int sum[3]={0};
    SNode* p = head->next;//从首元节点开始遍历
    while(p)
    {
        if(Sum(p->data)>Sum(best))//当前学生的总分大于best中的学生的总分
        {
            best = p->data;//进行更换
        }
        //计算三科的总分
        a[0] = a[0]+(p->data).course[0];
        a[1] = a[1]+(p->data).course[1];
        a[2] = a[2]+(p->data).course[2];
        //读取下一个学生的信息
        p=p->next;
    }
    //计算三科的平均分
    for(int cont_i = 0;cont_i<=2;cont_i++)
    {
        a[cont_i] = a[cont_i]/N;
    }
   return best; 
}
//求学生a的成绩总分
int Sum(Student a)
{
    int output = a.course[0]+a.course[1]+a.course[2];
    return output;
}


 

0.0分

0 人评分

  评论区

  • «
  • »