- 1 个班上有 N 个学生,每个学生有学号、性别、身高、班级、数学、英语、物理等。
请编写一个程序统计学生的男生、女生分别的个数,平均身高、每门课的平均成绩,
并找出 3 门课总分最高且单门成绩大于 60 的的学生。
要求:
1)请 定义一个结构,来描述每个学生
2)请用根据输入学生的个数动态申请的方法来定义结构数组
3)请分别定义函数来计算统计、平均、最高分数
4)函数的形参请使用指针的形式 - 基于第 1 题,请用把学生的信息放在文本里面,用文件操作来输入;请把统计的结
果输出到一个 ouput.txt 的文本中。
关于#c语言#的问题:要求:1)请 定义一个结构,来描述每个学生2)请用根据输入学生的个数动态申请的方法来定义结构数组3)请分别定义函数来计算统计、平均、最高分数4)函数的形参请使用指针的形式
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- |__WhoAmI__| 2023-01-02 19:00关注
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; }
仅供参考,望采纳,谢谢。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥100 set_link_state
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败
- ¥100 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度