原题链接:[编程入门]结构体之成绩统计2
解题思路:利用链表进行解题,我在进行找最大的时候用的时单链表,因为循环链表效率更高一些,单是我还不熟悉链表,所以用的单链表,亲们可以是这采用循环链表注意事项:在用链表的时候我们总习惯free(p),在此处我找了许久发现这里如果释放的话释放的是最后一组录入数据参考代码: #include"stdio.h"//1051目前bug在录入时无法将最后一个录入,已解决 #include"stdlib.h" #include"string.h" typedef struct student { char id[10]; char name[10]; int score1; int score2; int score3; struct student *next; }stu; int n;//全局变量,学生数目 stu *create() { int i; stu *head=(stu *)malloc(sizeof(stu ));//开辟头节点 head->next=NULL;//将链表置为空表 stu *p,*r=head; scanf("%d",&n); for(i=0;i<n;i++) { p=(stu *)malloc(sizeof(stu ));//开辟新节点 //printf("请输入学生学号和姓名和三科成绩:\n"); scanf("%s%s%d%d%d",p->id,p->name,&p->score1,&p->score2,&p->score3); p->next=r->next;//尾插法 r->next=p; r=p; } //free(p);此处不能用以为一旦释放就会丢了最后的一组数据,之前的bug return head; } void max(stu *head)//找最大元素的函数 {stu *tmp,*max; max=tmp=head->next; while(tmp) { if(max->score1+max->score2+max->score3<=tmp->score1+tmp->score2+tmp->score3) { strcpy(max->id,tmp->id); strcpy(max->name,tmp->name); max->score1=tmp->score1; max->score2=tmp->score2; max->score3=tmp->score3; } tmp=tmp->next; } printf("%s %s %d %d %d",max->id,max->name,max->score1,max->score2,max->score3); } void average(stu *head)//求平均值函数 { stu *tmp; int sum1=0,sum2=0,sum3=0; tmp=head->next; while(tmp) {sum1+=tmp->score1; sum2+=tmp->score2; sum3+=tmp->score3; tmp=tmp->next; } printf("%d %d %d\n",sum1/n,sum2/n,sum3/n); } void print(stu* head)//测试输出时我用的函数,亲们可以不用写这个函数 { stu* tmp; tmp=head->next; while(tmp) { printf("%s %s %d %d %d\n",tmp->id,tmp->name,tmp->score1,tmp->score2,tmp->score3); tmp=tmp->next; } } int main() { stu *head; head=create(); average(head); max(head); }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复