设计主函数,在主函中应该有正确输入或调用每个学生的学号及各科成绩(输入可以根据不同的情况采用不同的输入方法)。
要求:输入时有必要的提示信息。
设计子函数,可以求每个学生的平均成绩,每门课的平均成绩等、并保存在数组中;
要求:每个学生至少设计两个子函数。
最后结果输出。要求:输出格式要界面直观、清晰大方、格式规范。
关于#c语言#的问题:要求:输出格式要界面直观、清晰大方、格式规范
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
12条回答 默认 最新
- 语言-逆行者 2023-06-09 22:05关注
基于new bing的编写修改:
#include <stdio.h> #include <stdlib.h> #define MAX_STUDENT_NUM 20 #define MAX_SUBJECT_NUM 10 // 学生结构体定义 typedef struct student { int id; char name[20]; float score[MAX_SUBJECT_NUM]; float average; // 平均成绩 } student; void print_menu() { printf("\n 欢迎使用学生成绩管理系统,请输入数字执行相应操作:\n"); printf(" ---------------1. 录入学生信息----------------\n"); printf(" ---------------2. 输出所有学生信息------------\n"); printf(" ---------------3. 计算每个学生的平均分数-------\n"); printf(" ---------------4. 计算每门课程的平均分数-------\n"); printf(" ---------------5. 退出系统--------------------\n\n"); } int get_input(int min, int max) { int input; do { printf("请输入数字(%d-%d): ", min, max); scanf("%d", &input); } while (input < min || input > max); return input; } int input_student_info(student *students, int num_students, int num_subjects) { int i, j; for (i = 0; i < num_students; i++) { printf("录入第%d个学生的信息:\n", i + 1); printf("请输入学号:"); scanf("%d", &students[i].id); printf("请输入姓名:"); scanf("%s", students[i].name); for (j = 0; j < num_subjects; j++) { printf("请输入第%d门课的成绩:", j + 1); scanf("%f", &students[i].score[j]); } } return num_students; } void output_student_info(student *students, int num_students, int num_subjects) { int i, j; printf("\n所有学生的信息如下:\n"); printf("| 学号 | 姓名 | "); for (j = 0; j < num_subjects; j++) { printf("第%d门课程 | ", j + 1); } printf("\n|------|------|"); for (j = 0; j < num_subjects; j++) { printf("-----------|"); } printf("\n"); for (i = 0; i < num_students; i++) { printf("| %4d | %4s | ", students[i].id, students[i].name); for (j = 0; j < num_subjects; j++) { printf("%9.2f | ", students[i].score[j]); } printf("\n"); } } void calculate_student_average(student *students, int num_students, int num_subjects) { int i, j; for (i = 0; i < num_students; i++) { float sum = 0; for (j = 0; j < num_subjects; j++) { sum += students[i].score[j]; } students[i].average = sum / num_subjects; } } void output_student_average(student *students, int num_students) { int i; printf("\n每个学生的平均分数如下:\n"); for (i = 0; i < num_students; i++) { printf("%s 的平均成绩为 %.2f\n", students[i].name, students[i].average); } } void calculate_subject_average(student *students, int num_students, int num_subjects) { int i, j; float subject_total[MAX_SUBJECT_NUM] = {0}; for (j = 0; j < num_subjects; j++) { for (i = 0; i < num_students; i++) { subject_total[j] += students[i].score[j]; } } printf("\n每门课程的平均分如下:\n"); for (j = 0; j < num_subjects; j++) { printf("第%d门课程: %.2f\n", j + 1, subject_total[j] / num_students); } } int main() { int num_students = 0, num_subjects = 0; student students[MAX_STUDENT_NUM]; print_menu(); int option = get_input(1, 5); while (option != 5) { switch(option) { case 1: printf("请输入要录入的学生数量:"); scanf("%d", &num_students); printf("请输入要录入的课程数量:"); scanf("%d", &num_subjects); if (num_students > MAX_STUDENT_NUM || num_subjects > MAX_SUBJECT_NUM) { printf("输入数量超过最大限制。\n"); break; } input_student_info(students, num_students, num_subjects); break; case 2: output_student_info(students, num_students, num_subjects); break; case 3: calculate_student_average(students, num_students, num_subjects); output_student_average(students, num_students); break; case 4: calculate_subject_average(students, num_students, num_subjects); break; default: printf("无效的选择,请重新输入。\n"); break; } print_menu(); option = get_input(1, 5); } printf("已退出学生成绩管理系统。\n"); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 定义了函数,但是无法根据函数定义触发器
- ¥20 5变量卡诺图化简得出与非门电路图
- ¥20 位置依赖的碱基序列独热编码
- ¥15 Python爬取交通拥堵指数数据
- ¥15 使用vba抓取重定向网页问题
- ¥20 付费需求测试程序(细谈)。
- ¥15 为什么这段c++代码会报这么多语法错误?
- ¥20 如何利用C语言实现用最小二乘法选配两个经验公式
- ¥50 vue-codemirror如何对指定行 指定位置的 字符进行背景颜色或者字体颜色的修改?
- ¥30 遇到一个的问题,请教各位