14.18编程练习.5
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define CSIZE 4
#define LEN 30
struct name
{
char firstname[LEN];
char lastname[LEN];
};
struct student
{
struct name name_s;
int grade[3];
double grade_p;
};
int main(void)
{
struct student student_s[CSIZE]={
{"James"},//初始化默认给了firstname
{"pengjun"},
{"wen"},
{"shuren"}
};//要求初始化结构的名字部分。结构的指定初始化项目使用点运算符和成员名来表示这些具体的项目。(书上)
//实际由于编译版本问题,实则有变化。
int count=0,n=0;
int i=0,j=0;
int total=0;
puts("Please enter the first student lastname");
while(count<4 && gets(student_s[count].name_s.lastname)!=NULL && student_s[count].name_s.lastname[0]!='\0')
{
puts("Please enter student grade(three points):");
while(n<3)
scanf("%d",&student_s[count].grade[n++]);
n=0;
count++;
if(count<4)
puts("Please enter the next student lastname:");
while(getchar()!='\n')
continue;
}
for(i=0;i<CSIZE;i++)
{
for(j=0;j<3;j++)
{
total+=student_s[i].grade[j];
}
student_s[i].grade_p=(float)total/3.0;
total=0;
}
puts("Here is first struct infomation:");
for(i=0;i<CSIZE;i++)
printf("%s %s\n",student_s[i].name_s.lastname,student_s[i].name_s.firstname);
puts("Here is second struct infomation:");
for(i=0;i<CSIZE;i++)
printf("%s %s,student grades are %d %d %d,these grades total is %d,and average is %.2f.\n",
student_s[i].name_s.lastname,student_s[i].name_s.firstname,
student_s[i].grade[0],student_s[i].grade[1],student_s[i].grade[2],
(student_s[i].grade[0]+student_s[i].grade[1]+student_s[i].grade[2]),
student_s[i].grade_p);
//对于最后的g要求,我理解为所有分数的平均数。
for(i=0;i<CSIZE;i++)
for(j=0;j<3;j++)
total+=student_s[i].grade[j];
printf("The grades total is %d,average is %.2f\n",total,(float)total/4.0);
return 0;
}