原题链接:[编程入门]结构体之成绩统计2
解题思路:
注意事项:
参考代码:
#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复