解题思路: 用结构体指针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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论