解题思路: 用结构体指针p 申请空间后,录入信息,算平均数,找成绩最高分别用函数实现。
(其中找最高成绩 我有新想法! 内核没有变 只是简化一下代码)
答案是对的,仅供参考,欢迎交流!
注意事项:要理解:&p[i++] 与 p++相似 p是指向大空间 p[0]是N个单间的第一个。其中p[0]里面有学号,名字,学科成绩。
参考代码:
#include
# include
typedef struct stu {
char a[100];
char b[100];
int c[3]; //c[0] c[1] c[2] 三科成绩
} STU;
void input(STU*p) { //录入信息
scanf("%s %s %d %d %d",p->a,p->b,&p->c[0],&p->c[1],&p->c[2]);
}
void prin1(STU*p,int N) { //算平均数的
int i,sun1,sun2,sun3;
sun1=sun2=sun3=0;
for(i=0; i<N; ++i) {
sun1+=p[i].c[0];
sun2+=p[i].c[1];
sun3+=p[i].c[2];
}
printf("%d %d %d\n",sun1/N,sun2/N,sun3/N);
}
void prin2(STU*p,int N) { //找最高分的
STU* s; //设置 s,max 指针
STU*max = &p[0]; //假设p[0]最大
int i=1,sun1=0,sun2=0;
while(i<N) {
s=&p[i];
sun1=s->c[0]+s->c[1]+s->c[2]; //等价 p[i].c[0];
sun2=max->c[0]+max->c[1]+max->c[2];
if(sun1>sun2) {
max=s; //等价于 max=&p[i];
}
++i;
}
printf("%s %s %d %d %d",max->a,max->b,max->c[0],max->c[1],max->c[2]);
}
int main() { //主函数
STU *p;
int i=0;
int N;
scanf("%d",&N);
p=(STU*)malloc(sizeof(STU)*N);// 是p获得大片连续空间(N个“单间”)
getchar(); //消化掉换行符
for(i=0; i<N; i++) { // &p[i++] 与 p++相似 p是指向大空间 p[0]是N个单间的第一个。其中p[0]里面有学号,名字,学科成绩。
input(&p[i]);
getchar(); //消化掉换行符
}
prin1(p,N);
prin2(p,N);
free(p);
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复