我是初学c语言的学生,谁能用很简单的数组通俗易懂的方法解决一下下面这道C语言题目 200
题目:期末老师需要对某班学生成绩进行处理,生成班级成绩单。假设班级人数为N(为了方便调试程序,N取5),学生的学号、姓名均不超过10个字符,输入每个学生的学号、姓名、4科...
题目:期末老师需要对某班学生成绩进行处理,生成班级成绩单。假设班级人数为N(为了方便调试程序,N取5),学生的学号、姓名均不超过10个字符,输入每个学生的学号、姓名、4科成绩(例如:英语、数学、体育、计算机),计算每个学生的总分、平均分,然后按照总分由高到低排名,输出原始的成绩单和排名后的成绩单。
展开
3个回答
展开全部
C语言程序:
#include <stdio.h>
#define SIZE 100
#define MAX 5
#define N 4
/* 显示菜单 */
void ShowMenu()
{
printf("|----------------------------------|\n");
printf("|--------学生成绩查询系统----------|\n");
printf("| |\n");
printf("|----------请输入(1-4)-----------|\n");
printf("| 1. 输入学生成绩--------|\n");
printf("| 2. 显示成绩单----------|\n");
printf("| 3. 成绩排名------------|\n");
printf("| 4. 退出----------------|\n");
printf("|----------------------------------|\n");
printf("请输入1-4 : ");
}
/* 排序,由高到低排列 */
void Sort(int arr[][2], int n)
{
int i, j, k;
int temp;
for(i=0; i<n-1; i++)
{
k = i;
for(j=i+1; j<n; j++)
{
if(arr[j][0] > arr[k][0])
{
k = j;
}
}
if(k != i)
{
temp = arr[k][0];
arr[k][0] = arr[i][0];
arr[i][0] = temp;
temp = arr[k][1];
arr[k][1] = arr[i][1];
arr[i][1] = temp;
}
}
}
void main(){
int choice;
int sids[MAX]; /* 存储学号 */
char names[MAX][SIZE]; /* 存储姓名 */
int scores[MAX][N]; /* 存储成绩 */
double avgs[MAX]; /* 存储平均分 */
int sums[MAX][2]; /* 存储总分和原顺序 */
int bak[MAX][2];
int sum; /* 最高分 */
double avg; /* 平均分 */
int i, j;
while(1)
{
ShowMenu();
scanf("%d", &choice);
switch(choice)
{
case 1: /* 输入学生成绩 */
{
for(i=0; i<MAX; i++)
{
printf("请输入学生成绩\n");
printf("学号:");
scanf("%d", &sids[i]);
printf("姓名:");
scanf("%s", names[i]);
printf("英语:");
scanf("%d", &scores[i][0]);
printf("数学:");
scanf("%d", &scores[i][1]);
printf("体育:");
scanf("%d", &scores[i][2]);
printf("计算机:");
scanf("%d", &scores[i][3]);
}
for(i=0; i<MAX; i++)
{
sums[i][0] = 0;
sums[i][1] = i;
for(j=0; j<N; j++)
{
sums[i][0] += scores[i][j];
}
avgs[i] = 1.0 * sums[i][0] / N;
}
break;
}
case 2: /* 显示成绩单 */
{
for(i=0; i<MAX; i++)
{
sums[i][0] = 0;
sums[i][1] = i;
for(j=0; j<N; j++)
{
sums[i][0] += scores[i][j];
}
avgs[i] = 1.0 * sums[i][0] / N;
}
printf("学生原始成绩单\n");
printf("%6s%20s%6s%6s%6s%8s%8s%8s\n", "学号","姓名","英语","数学","体育","计算机", "平均分", "总分");
for(i=0; i<MAX; i++)
{
printf("%6d%20s%6d%6d%6d%8d%8.2lf%8d\n", sids[i], names[i], scores[i][0], scores[i][1] , scores[i][2], scores[i][3], avgs[i], sums[i][0]);
}
printf("\n");
break;
}
case 3: /* 成绩排名 */
{
for(i=0; i<MAX; i++)
{
bak[i][0] = sums[i][0];
bak[i][1] = sums[i][1];
}
Sort(bak, MAX);
printf("学生成绩排名\n");
printf("%4s%6s%20s%6s%6s%6s%8s%8s%8s\n", "名次", "学号","姓名","英语","数学","体育","计算机", "平均分", "总分");
for(i=0; i<MAX; i++)
{
j = bak[i][1];
printf("%4d%6d%20s%6d%6d%6d%8d%8.2lf%8d\n", i+1, sids[j], names[j], scores[j][0], scores[j][1] , scores[j][2], scores[j][3], avgs[j], sums[j][0]);
}
printf("\n");
break;
}
case 4: /* 退出 */
{
return;
}
default: /* 继续 */
{
break;
}
}
}
}
运行测试:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询