1.定义结构体,描述每个学生的信息。
struct student
{
int id; // 学号
char gender; // 性别
float height; // 身高
int class_id; // 班级
float math; // 数学成绩
float english; // 英语成绩
float physics; // 物理成绩
};
2.根据输入学生的个数动态申结构体数组。
int num_students; // 学生的个数
printf("输入学生的个数:");
scanf("%d", &num_students);
// 动态申结构体数组
struct student *students = (struct student *)malloc(num_students * sizeof(struct student));
3.定义函数来计算统计、平均、最高分数。
// 计算男生、女生的个数
void count_genders(struct student *students, int num_students, int *num_males, int *num_females)
{
for (int i = 0; i < num_students; i++)
{
if (students[i].gender == 'M')
{
(*num_males)++;
}
else if (students[i].gender == 'F')
{
(*num_females)++;
}
}
}
// 计算平均身高
float average_height(struct student *students, int num_students)
{
float sum = 0;
for (int i = 0; i < num_students; i++)
{
sum += students[i].height;
}
return sum / num_students;
}
// 计算每门课的平均成绩
void average_scores(struct student *students, int num_students, float *math_avg, float *english_avg, float *physics_avg)
{
float math_sum = 0, english_sum = 0, physics_sum = 0;
for (int i = 0; i < num_students; i++)
{
math_sum += students[i].math;
english_sum += students[i].english;
physics_sum += students[i].physics;
}
*math_avg = math_sum / num_students;
*english_avg = english_sum / num_students;
*physics_avg = physics_sum / num_students;
}
// 找出 3 门课总分最高且单门成绩大于 60 的的学生
void top_students(struct student *students, int num_students)
{
int top_count = 0;
for (int i = 0; i < num_students; i++)
{
// 如果学生的 3 门课总分最高且单门成绩大于 60,就输出学生的信息
if (students[i].math > 60 && students[i].english > 60 && students[i].physics > 60 && students[i].math + students[i].english + students[i].physics > top_count)
{
top_count = students[i].math + students[i].english + students[i].physics;
printf("学号:%d\n", students[i].id);
printf("性别:%c\n", students[i].gender);
printf("身高:%.2f\n", students[i].height);
printf("班级:%d\n", students[i].class_id);
printf("数学成绩:%.2f\n", students[i].math);
printf("英语成绩:%.2f\n", students[i].english);
printf("物理成绩:%.2f\n", students[i].physics);
}
}
}
4.从文本文件中读取学生信息,并输出统计结果到另一个文本文件。
int main()
{
// 从文本文件中读取学生信息
FILE *input_file = fopen("input.txt", "r");
if (input_file == NULL)
{
printf("无法打开文件!\n");
return 1;
}
// 读取学生的个数
int num_students;
fscanf(input_file, "%d", &num_students);
// 动态申结构体数组
struct student *students = (struct student *)malloc(num_students * sizeof(struct student));
// 读取每个学生的信息
for (int i = 0; i < num_students; i++)
{
fscanf(input_file, "%d %c %f %d %f %f %f", &students[i].id, &students[i].gender, &students[i].height, &students[i].class_id, &students[i].math, &students[i].english, &students[i].physics);
}
fclose(input_file);
// 统计男生、女生的个数
int num_males = 0, num_females = 0;
count_genders(students, num_students, &num_males, &num_females);
// 计算平均身高
float avg_height = average_height(students, num_students);
// 计算每门课的平均成绩
float math_avg, english_avg, physics_avg;
average_scores(students, num_students, &math_avg, &english_avg, &physics_avg);
// 找出 3 门课总分最高且单门成绩大于 60 的的学生
top_students(students, num_students);
// 输出统计结果到文本文件
FILE *output_file = fopen("output.txt", "w");
if (output_file == NULL)
{
printf("无法打开文件!\n");
return 1;
}
fprintf(output_file, "男生的个数:%d\n", num_males);
fprintf(output_file, "女生的个数:%d\n", num_females);
fprintf(output_file, "平均身高:%.2f\n", avg_height);
fprintf(output_file, "数学成绩的平均分:%.2f\n", math_avg);
fprintf(output_file, "英语成绩的平均分:%.2f\n", english_avg);
fprintf(output_file, "物理成绩的平均分:%.2f\n", physics_avg);
fclose(output_file);
free(students);
return 0;
}
仅供参考,望采纳,谢谢。