解题思路:利用链表进行解题,我在进行找最大的时候用的时单链表,因为循环链表效率更高一些,单是我还不熟悉链表,所以用的单链表,亲们可以是这采用循环链表注意事项:在用链表的时候我们总习惯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 人评分