编写一个程序满足下面的要求。
a.外部定义一个有两个成员的结构模板name:一个字符串储存名,一个 字符串储存姓。
b.外部定义一个有3个成员的结构模板student:一个name类型的结构, 一个grade数组储存3个浮点型分数,一个变量储存3个分数平均数。
c.在main()函数中声明一个内含CSIZE(CSIZE = 4)个student类型结构的 数组,并初始化这些结构的名字部分。用函数执行g、e、f和g中描述的任 务。
d.以交互的方式获取每个学生的成绩,提示用户输入学生的姓名和分 数。把分数储存到grade数组相应的结构中。可以在main()函数或其他函数中 用循环来完成。
e.计算每个结构的平均分,并把计算后的值赋给合适的成员。
f.打印每个结构的信息。
g.打印班级的平均分,即所有结构的数值成员的平均值
#include <stdio.h>
#define CSIZE 4
struct name{
char FName[20];
char LName[20];
};
struct student
{
struct name Name;
float grade[3];
int avg;
};
void print(struct student * p);
int main()
{
#if 0
char a;
scanf("%c",&a);
printf("--%c\n",a);
char arr[20];
scanf("%s",arr);
printf("----%s\n",arr);
#endif
struct student Mst[CSIZE], * p = Mst;
// printf("-----%d\n",Mst[0].Name.FName);
int i ,j,k,sum;
for(i = 0; i < CSIZE; i++)
{
printf("please enter the %d student's message:\n",i+1);
printf("please enter the first name of the %d student:\n",i+1);
scanf("%s",Mst[i].Name.FName);//laoli
//printf("FName:%s\n",Mst[i].Name.FName);
printf("please enter the last name of the %d student:\n",i+1);
scanf("%s",Mst[i].Name.LName);
printf("\nplease enter %d's three grades:\n",i+1);
sum = 0;
for(j = 0; j < 3; j++)
{
scanf("%f",&Mst[i].grade[j]);
//printf("%f\t",Mst[i].grade[j]);
//for(k = 0; k < 4; k ++)
//sum[k] += (Mst[i].grade[j]);
sum += Mst[i].grade[j];
Mst[i].avg = sum/ (j+1);
//sum += Mst[i].grade[j];
}
//printf("average:%d\n",Mst[i].avg);
//Mst[i].avg = sum[i]/3;
//printf("%d\n",Mst[i].avg);
}
print(p);
return 0;
}
void print(struct student * p)
{
int i,j,k;
for(i = 0; i < CSIZE;i++)
{
printf("%s %s's grade is :",p[i].Name.FName,p[i].Name.LName);
for(k = 0; k < 3; k++)
printf(" %f ",(p+i)->grade[k]);
printf("\neverage is:%d\n",(p+i)->avg);
}
}
特别注意:
1.scanf函数的用法,不能在输入的后面加上’\n’或者是’ '空格,否则会导致输入失败的情况。
2.在选择存储方式时一定要先想好存储的方式,利用哪一种存储方式更为合适。
3.学会自己检测漏洞,找出bug.