解题思路:
注意事项:
参考代码:
#include<stdio.h>
struct transcript
{
char student_num[20];
char name[20];
int grade[3];
};//定义结构体,包含字符串和成绩数组
void input_fun(int count_0,struct transcript cell[]);//输入函数定义
void output_fun(int count_0,struct transcript cell[]);//输出函数定义
int main(void)
{
int n;
scanf("%d",&n);
struct transcript cell[n];//使用数组前,需要知道数组的大小,故要先scanf输入n
input_fun(n,cell);
output_fun(n,cell);
}
void input_fun(int count_0,struct transcript cell[])
{
int i,j;
for(i=0;i<count_0;i++){
scanf("%s %s",cell[i].student_num,cell[i].name);
for(j=0;j<3;j++){
scanf("%d",&cell[i].grade[j]);
}
}
}
void output_fun(int count_0,struct transcript cell[])
{
int grade[3];//成绩单数组
int SUM[3]={0,0,0};//单个科目总成绩初始化
int SUM_0[count_0];//个人总成绩
int i,j,p;//定义计数器
int flag;//寻找总成绩最高的标志位
int max;
//求单个科目总成绩
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(i==j){
for(p=0;p<count_0;p++){
SUM[i]+=cell[p].grade[j];
}
}
}
}
//个人总成绩初始化
for(i=0;i<count_0;i++){
SUM_0[i]=0;
}
//求个人总成绩
for(i=0;i<count_0;i++){
for(j=0;j<3;j++){
SUM_0[i]+=cell[i].grade[j];
}
}
//检查结果
// for(i=0;i<count_0;i++){
// printf("%d ",SUM_0[i]);
// }
// printf("\n");
//寻找成绩最高的个人
max=SUM_0[0];
flag=0;
for(i=1;i<count_0;i++){
if(max<SUM_0[i]){
max=SUM_0[i];
flag=i;
}
}
//单个科目平均值
for(i=0;i<3;i++){
grade[i]=SUM[i]/count_0;
}
//如下均为遍历输出
for(i=0;i<3;i++){
printf("%d",grade[i]);
if(i<2){
printf(" ");
}
if(i==2){
printf("\n");
}
}
printf("%s %s %d %d %d\n",cell[flag].student_num,cell[flag].name,cell[flag].grade[0],cell[flag].grade[1],cell[flag].grade[2]);
}
0.0分
0 人评分