原题链接:[编程入门]结构体之成绩统计2
解题思路:
注意事项:
参考代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct students{
char *id;
char *name;
int score[3];
}St;
St * initSt(){
int i,j;
St *temp=(St *)malloc(sizeof(St));
if(temp==NULL){
return NULL;
}
char sr1[100];
scanf("%s",&sr1);
temp->id=(char *)malloc(strlen(sr1)+1);
if(temp->id==NULL){
return NULL;
}
strcpy(temp->id, sr1);
char sr2[100];
scanf("%s",&sr2);
temp->name=(char *)malloc(strlen(sr2)+1);
if(temp->name==NULL){
return NULL;
}
strcpy(temp->name, sr2);
int sr3[3];
for(i=0;i<3;i++){
scanf("%d",&sr3[i]);
}
temp->score[3]=(int *)malloc(sizeof(sr3)*3);
if(temp->score==NULL){
return NULL;
}
for(i=0;i<3;i++){
temp->score[i]=sr3[i];
}
return temp;
}
void printStu(St *stu)
{
printf("%s %s %d %d %d\n", stu->id, stu->name, stu->score[0], stu->score[1] ,stu->score[2]);
}
void freeStu(St *stu)
{
if (stu == NULL)
return;
free(stu->id);
free(stu->name);
free(stu);
}
int main (){
int i,j,n,a=0,b=0,c=0,max=0,z=0;
scanf("%d",&n);
St *test[n];
St *test1;
test1=test[0];
for (i=0;i<n;i++){
test[i]=initSt();
}
//2 打印
for (i = 0; i < n; i++)
{
a+=test[i]->score[0];
b+=test[i]->score[1];
c+=test[i]->score[2];
for(j=0;j<3;j++){
max+=test[i]->score[j];
}
if(max>z){
z=max;
max=0;
test1=test[i];
}
}
printf("%d %d %d\n",a/n,b/n,c/n);
printStu(test1);
//3 释放
for (i = 0; i < n; i++)
{
freeStu(test[i]);
}
return 0;
}0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复