编写一个程序满足下面的要求:
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);
}