给定课程数据,编写菜单程序。输入“0”作行统计,输出 课程平均分;输入“1”作列统计,某同学总分和排名;输入 “3”退出程序
时间: 2023-09-16 09:08:51 浏览: 88
以下是一个简单的菜单程序,实现了对给定课程数据的行统计和列统计,并且可以退出程序:
```
#include <stdio.h>
#define ROWS 5
#define COLS 3
void row_statistics(int grades[][COLS]);
void col_statistics(int grades[][COLS]);
float average(int grades[][COLS], int row);
int main(void) {
int grades[ROWS][COLS] = {
{80, 75, 92},
{61, 65, 71},
{72, 80, 85},
{87, 90, 93},
{78, 82, 89}
};
int choice;
do {
printf("Please choose an option:\n");
printf("0. Row statistics\n");
printf("1. Column statistics\n");
printf("2. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 0:
row_statistics(grades);
break;
case 1:
col_statistics(grades);
break;
case 2:
printf("Exiting...\n");
break;
default:
printf("Invalid choice. Please try again.\n");
}
} while (choice != 2);
return 0;
}
void row_statistics(int grades[][COLS]) {
int i, j;
float sum, avg;
for (i = 0; i < ROWS; i++) {
sum = 0;
for (j = 0; j < COLS; j++) {
sum += grades[i][j];
}
avg = sum / COLS;
printf("Average grade for row %d: %.2f\n", i+1, avg);
}
printf("\n");
}
void col_statistics(int grades[][COLS]) {
int i, j, total, rank;
int sum[ROWS];
float avg[ROWS];
for (i = 0; i < ROWS; i++) {
total = 0;
for (j = 0; j < COLS; j++) {
total += grades[i][j];
}
sum[i] = total;
avg[i] = (float)total / COLS;
}
for (i = 0; i < ROWS; i++) {
rank = 1;
for (j = 0; j < ROWS; j++) {
if (sum[j] > sum[i]) {
rank++;
}
}
printf("Total score for student %d: %d, Rank: %d\n", i+1, sum[i], rank);
}
printf("\n");
}
float average(int grades[][COLS], int row) {
int i;
float sum = 0;
for (i = 0; i < COLS; i++) {
sum += grades[row][i];
}
return sum / COLS;
}
```
在上面的程序中,我们首先定义了一个5行3列的二维数组grades,表示5个学生的3门课程的成绩。然后,我们使用一个do-while循环来实现菜单功能。用户可以输入0或1进行行统计或列统计,输入2退出程序。
当用户输入0时,我们调用row_statistics函数进行行统计。在row_statistics函数中,我们使用两个嵌套的for循环来计算每一行的平均分,并输出到屏幕上。
当用户输入1时,我们调用col_statistics函数进行列统计。在col_statistics函数中,我们首先计算每个学生的总分和平均分,并存储在两个数组sum和avg中。然后,我们使用两个嵌套的for循环来计算每个学生的排名,并输出到屏幕上。
当用户输入2时,我们输出一条退出信息,并退出程序。
注意:上面的程序仅作为参考,实际应用中可能需要根据具体需求进行修改。