#include <stdio.h>
#define LEN 20
#define CSIZE 4
struct name{
char fname[LEN];
char lname[LEN];
};
struct student{
struct name stu;
float grade[3];
float aver;
};
void e(struct student *stus);
void f(struct student stus[],int size);
void g(struct student stus[],int size);
int main(void)
{
struct student stus[CSIZE]={{"a","a"},{"b","b"},{"c","c"},{"d","d"}};;
//定义结构是name是排在第一的,所以可以直接初始化. 注意格式即可
for(int i= 0;i<CSIZE;i++)
{
printf("input %s %s\'s grade :f f f\n",stus[i].stu.fname,stus[i].stu.lname);
scanf("%f %f %f",&stus[i].grade[0],&stus[i].grade[1],&stus[i].grade[2]);
e(&stus[i]);
}
f(stus,CSIZE);
g(stus,CSIZE);
return 0;
}
void e(struct student *stus)//要改变结构的值,需要指针.
{
int i;
int size=3;
float count=0;
for(i=0;i<size;i++)
count += stus->grade[i];
stus->aver = count/size;
}
void f(struct student stus[],int size)
{
int i;
float count=0;
for(i=0;i<size;i++)
printf("%s %s ,grade1=%f ,grade2=%f ,grade3=%f ,aver=%f\n",
stus[i].stu.fname,stus[i].stu.lname,stus[i].grade[0],stus[i].grade[1],stus[i].grade[2],stus[i].aver);
}
void g(struct student stus[],int size)
{
int i;
float count=0;
for(i=0;i<size;i++)
{
count += stus[i].grade[0]+stus[i].grade[1]+stus[i].grade[2];
printf("count%d=%f\n",i,count);
printf("%s %s,aver=%f\n",stus[i].stu.fname,stus[i].stu.lname,stus[i].aver);
}
printf("all_aver=%f\n",count/size/3);
}