C语言写一个菜单,从文件中读取学生的数字成绩,功能1为将读取到的百分制数字成绩转换为等级ABCDEF,功能二为统计不同等级的人数,功能3为输出读取的成绩
时间: 2024-05-03 09:21:23 浏览: 13
以下是使用C语言编写的一个简单的菜单程序,可以从文件中读取学生的百分制数字成绩,并实现三种功能:
1. 将读取到的百分制数字成绩转换为等级ABCDEF;
2. 统计不同等级的人数;
3. 输出读取的成绩。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 1000 // 最多读取1000个学生成绩
int main()
{
int scores[MAX_NUM]; // 存储百分制数字成绩的数组
char grades[MAX_NUM]; // 存储等级的数组
int count[6] = {0}; // 统计不同等级的人数的数组
int i, n;
// 从文件中读取学生成绩
FILE *fp = fopen("scores.txt", "r");
if (fp == NULL) {
printf("无法打开文件\n");
exit(1);
}
for (i = 0; i < MAX_NUM; i++) {
if (fscanf(fp, "%d", &scores[i]) == EOF) {
break;
}
}
n = i; // 实际读取到的学生人数
fclose(fp);
// 转换为等级并统计人数
for (i = 0; i < n; i++) {
if (scores[i] >= 90) {
grades[i] = 'A';
count[0]++;
} else if (scores[i] >= 80) {
grades[i] = 'B';
count[1]++;
} else if (scores[i] >= 70) {
grades[i] = 'C';
count[2]++;
} else if (scores[i] >= 60) {
grades[i] = 'D';
count[3]++;
} else {
grades[i] = 'F';
count[4]++;
}
}
int choice;
do {
// 显示菜单
printf("请选择功能:\n");
printf("1. 转换为等级并输出\n");
printf("2. 统计不同等级的人数\n");
printf("3. 输出原始成绩\n");
printf("4. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1: // 转换为等级并输出
printf("学生人数:%d\n", n);
printf("学号\t成绩\t等级\n");
for (i = 0; i < n; i++) {
printf("%d\t%d\t%c\n", i+1, scores[i], grades[i]);
}
break;
case 2: // 统计不同等级的人数
printf("学生人数:%d\n", n);
printf("等级\t人数\n");
printf("A\t%d\n", count[0]);
printf("B\t%d\n", count[1]);
printf("C\t%d\n", count[2]);
printf("D\t%d\n", count[3]);
printf("F\t%d\n", count[4]);
break;
case 3: // 输出原始成绩
printf("学生人数:%d\n", n);
printf("学号\t成绩\n");
for (i = 0; i < n; i++) {
printf("%d\t%d\n", i+1, scores[i]);
}
break;
case 4: // 退出
printf("已退出\n");
break;
default:
printf("请输入正确的选项\n");
break;
}
} while (choice != 4);
return 0;
}
```