C语言编程:采用数组的结构(一维数组或二维数组)和子函数调用的方式实现一个具有如下功能要求的小系统: 1、系统具有欢迎界面,并能为用户提供简单菜单显示,让用户可以根据需要选择相应的功能。 2、录入一个班所有学生某门课的成绩(学生人数自定)。 3、输出显示一个班所有学生某门课的成绩。 4、统计成绩各个分数段的人数及比例。(100~90为优秀,89~80为良好,79~70为中等,69~60为及格,59~0为不及格。) 5、计算并输出平均成绩。 6、统计并输出及格率。 7、输出最高成绩。 8、输出最低成绩。9、将成绩按由高到低的顺序输出
时间: 2023-07-16 21:13:10 浏览: 95
下面是一个实现上述功能的 C 语言程序:
```c
#include <stdio.h>
#define MAX_STUDENTS 100 // 最多学生人数
#define SCORE_RANGE 10 // 成绩分数段
// 录入成绩函数
void input_scores(int scores[], int n) {
int i;
printf("请输入 %d 个学生的成绩:\n", n);
for (i = 0; i < n; ++i) {
printf("第 %d 个学生:", i + 1);
scanf("%d", &scores[i]);
}
}
// 输出成绩函数
void output_scores(int scores[], int n) {
int i;
printf("所有学生的成绩为:\n");
for (i = 0; i < n; ++i) {
printf("第 %d 个学生:%d\n", i + 1, scores[i]);
}
}
// 统计分数段人数函数
void count_scores(int scores[], int n, int counts[]) {
int i, j;
for (i = 0; i < n; ++i) {
j = scores[i] / SCORE_RANGE; // 计算成绩所在分数段
if (j >= 10) {
j = 9;
}
counts[j]++; // 分数段人数加 1
}
}
// 输出分数段人数函数
void output_counts(int counts[]) {
int i, total = 0;
printf("各个分数段的人数及比例为:\n");
for (i = 0; i < 10; ++i) {
printf("%2d-%2d 分: %2d 人,占比 %.2f%%\n",
i * SCORE_RANGE, (i + 1) * SCORE_RANGE - 1,
counts[i], (float)counts[i] / MAX_STUDENTS * 100);
total += counts[i];
}
printf("总人数:%d\n", total);
}
// 计算平均成绩函数
float average_score(int scores[], int n) {
int i, sum = 0;
for (i = 0; i < n; ++i) {
sum += scores[i];
}
return (float)sum / n;
}
// 计算及格率函数
float pass_rate(int scores[], int n) {
int i, count = 0;
for (i = 0; i < n; ++i) {
if (scores[i] >= 60) {
count++;
}
}
return (float)count / n;
}
// 输出最高分和最低分函数
void output_max_min_scores(int scores[], int n) {
int i, max = scores[0], min = scores[0];
for (i = 1; i < n; ++i) {
if (scores[i] > max) {
max = scores[i];
}
if (scores[i] < min) {
min = scores[i];
}
}
printf("最高分:%d,最低分:%d\n", max, min);
}
// 输出按由高到低排序的成绩函数
void sort_scores(int scores[], int n) {
int i, j, temp;
for (i = 0; i < n - 1; ++i) {
for (j = i + 1; j < n; ++j) {
if (scores[i] < scores[j]) {
temp = scores[i];
scores[i] = scores[j];
scores[j] = temp;
}
}
}
printf("按由高到低排序的成绩为:\n");
for (i = 0; i < n; ++i) {
printf("%d ", scores[i]);
}
printf("\n");
}
int main() {
int scores[MAX_STUDENTS]; // 成绩数组
int counts[10] = {0}; // 分数段人数统计数组
int n, choice;
do {
printf("\n欢迎使用学生成绩管理系统:\n");
printf("1. 录入成绩\n");
printf("2. 输出成绩\n");
printf("3. 统计分数段人数\n");
printf("4. 计算平均成绩\n");
printf("5. 计算及格率\n");
printf("6. 输出最高分和最低分\n");
printf("7. 输出按由高到低排序的成绩\n");
printf("0. 退出系统\n");
printf("请选择功能:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入学生人数:");
scanf("%d", &n);
if (n > MAX_STUDENTS) {
printf("学生人数不能超过 %d 人!\n", MAX_STUDENTS);
} else {
input_scores(scores, n);
}
break;
case 2:
if (n <= 0) {
printf("请先录入成绩!\n");
} else {
output_scores(scores, n);
}
break;
case 3:
if (n <= 0) {
printf("请先录入成绩!\n");
} else {
count_scores(scores, n, counts);
output_counts(counts);
}
break;
case 4:
if (n <= 0) {
printf("请先录入成绩!\n");
} else {
printf("平均成绩为:%.2f\n", average_score(scores, n));
}
break;
case 5:
if (n <= 0) {
printf("请先录入成绩!\n");
} else {
printf("及格率为:%.2f%%\n", pass_rate(scores, n) * 100);
}
break;
case 6:
if (n <= 0) {
printf("请先录入成绩!\n");
} else {
output_max_min_scores(scores, n);
}
break;
case 7:
if (n <= 0) {
printf("请先录入成绩!\n");
} else {
sort_scores(scores, n);
}
break;
case 0:
printf("感谢使用学生成绩管理系统!\n");
break;
default:
printf("无效的选择!\n");
break;
}
} while (choice != 0);
return 0;
}
```
这个程序通过菜单界面让用户选择不同的功能,并使用数组和函数来实现各种功能。注意,这个程序中使用了许多辅助函数,例如 `input_scores`、`output_scores`、`count_scores` 等,这样可以让主函数更加简洁明了。
阅读全文