老旧代码

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

猜你喜欢

转载自blog.csdn.net/qq_31932681/article/details/107078472
今日推荐