编写一个程序满足下面的要求: a. 外部顶一个有两个成员的结构模板name: 一个字符串储存名,一个字符串储存姓。 b. 外部定义一个有3个成员的结构模板student:一个name类型的结构,一个 grade 数组储存3个浮点型 分数,一个变量储存三个分数的平均数。 c. 在main()函数中声明一个内含CSIZE (CSIZE = 4) 个student类型结构的数组,并初始化 这些结构的名字部分。用函数执行g,e,f 和 g 中描述的任务。 d. 以交互的方式获取每个学生的成绩,提示用户输入学生的姓名和分数。把分数储存到grade 数组相应的结构中。可以在main() 函数或其他函数中循环来完成。 e. 计算每个结构的平均分,并把计算后的值赋给合适的成员。 f. 打印每个结构的信息。 g. 打印班级的平均分,即所有结构的数值成员的平均值
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXLEN 30 //姓名的最大长度 #define CSIZE 4 //建立4个student类型的结构 //建立name结构模板 ----名和姓 struct name { char fname[MAXLEN]; char lname[MAXLEN]; }; //建立student结构模板 ----name +三个分数 + 平均值 struct student { struct name name; double grade[3]; double Average; }; //获取学生的分数 void GetGrade(struct student info[], int count); //计算每个学生的平均分 void GetAverage(struct student info[], int count); //打印每个学生的信息 void OutInfo(struct student info[], int count); //打印班级的平均分(因为每个学生的平均分已经计算过,所以只需再次平分四次的平均分就行) void OutAverage(struct student info[], int count); int main(void) { //初始化三个学生的姓名 struct student info[CSIZE] = { {{"Alex", "Mercer"}}, {{"Nick", "Joen"}}, {{"Jane", "Kali"}}, {{"Joen", "DIss"}} }; //获取学生的成绩 GetGrade(info, CSIZE); //获取每个学生的平均分 GetAverage(info, CSIZE); //打印每个学生的信息 OutInfo(info, CSIZE); //打印班级的平均分 OutAverage(info, CSIZE); return 0; } //获取学生的分数 void GetGrade(struct student info[], int count) { for (int i = 0; i < count; i++) { printf("What's the mark of %s %s?\n", info[i].name.fname, info[i].name.lname); while (scanf_s("%lf %lf %lf", &info[i].grade[0], &info[i].grade[1], &info[i].grade[2]) != 3) { printf("That's not invatid! Try again:\n"); continue; } } printf("\n"); } //计算每个学生的平均分 void GetAverage(struct student info[], int count) { for (int i = 0; i < count; i++) { //获取三科的平均分 info[i].Average = (info[i].grade[0] + info[i].grade[1] + info[i].grade[2]) / 3; } } //打印每个学生的信息 void OutInfo(struct student info[], int count) { for (int i = 0; i < count; i++) { printf("The mark of %s %s is %.2f %.2f and %.2f.\n", info[i].name.fname, info[i].name.lname, info[i].grade[0], info[i].grade[1], info[i].grade[2]); printf("And the average mark is %.2f.\n", info[i].Average); printf("\n"); } } //打印班级的平均分 void OutAverage(struct student info[], int count) { double average = 0; for (int i = 0; i < count; i++) { average += info[i].Average; } printf("The average mark of all is %.2f.\n", average / 4); }