我是初学c语言的学生,谁能用很简单的数组通俗易懂的方法解决一下下面这道C语言题目 200

题目:期末老师需要对某班学生成绩进行处理,生成班级成绩单。假设班级人数为N(为了方便调试程序,N取5),学生的学号、姓名均不超过10个字符,输入每个学生的学号、姓名、4科... 题目:期末老师需要对某班学生成绩进行处理,生成班级成绩单。假设班级人数为N(为了方便调试程序,N取5),学生的学号、姓名均不超过10个字符,输入每个学生的学号、姓名、4科成绩(例如:英语、数学、体育、计算机),计算每个学生的总分、平均分,然后按照总分由高到低排名,输出原始的成绩单和排名后的成绩单。 展开
 我来答
老冯文库
2016-05-08 · 知道合伙人软件行家
老冯文库
知道合伙人软件行家
采纳数:1139 获赞数:8733

向TA提问 私信TA
展开全部

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;
}
}
}
}


运行测试:

饿咬7
2016-05-08 · TA获得超过155个赞
知道小有建树答主
回答量:741
采纳率:0%
帮助的人:186万
展开全部
这个可以用数组做 就是太麻烦 最好用结构体 我都可以帮你实现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
生于天山的雪莲
2016-05-08 · TA获得超过240个赞
知道小有建树答主
回答量:1007
采纳率:20%
帮助的人:390万
展开全部
用结构体,数组处理太复杂
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式