给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法:

来源:百度知道 编辑:UC知道 时间:2024/05/22 19:48:19
[问题描述]给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法:
(1) 按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次;
(2) 按名次列出每个学生的姓名与分数。
[基本要求]学生的考试成绩表必须通过键盘输入数据而建立,同时要对输出进行格式控制。
[算法实现]下面给出的是用直接选择排序算法实现的C语言程序。

#define n 30
typedef struct student
{ char name[8];
int score;
}
R[n];

main ( )
{ int num, i, j, max, temp;
printf("\n请输入学生成绩: \n");
for (i=0; i<n; i++)
{ printf ("姓名:");
scanf ("%s", R[i].name);
scanf ("%4d", R[i].score);
}
num=1;
for (i=0; i<n; i++)
{ max=i;
for (j=i+1; j<n; j++)
if (R[j].score>R[max].score)
max=j;
if (max!=i)
{ temp = R[max];
R[max]=R[i];
R[i]= temp;
}
if ((i>0)&&(R[i].score<R[i-1].score))
num=num+1;
printf("%4d%s%4d", num, R[i].name, R[i].score);
}
}
程序运行总是报错

帮你改好了,并且也已经编译运行正常,自己看一下吧:

#include<stdio.h>
#include<stdlib.h>
#include <conio.h>

#define n 30
struct student
{ char name[8];
int score;
} R[n];

main ( )
{ int num, i, j, max, temp;
printf("\n请输入学生成绩: \n");
for (i=0; i<n; i++)
{
printf ("姓名:");
scanf ("%s", R[i].name);
printf ("成绩:");
scanf ("%d", &(R[i].score));
}
num=1;
for (i=0; i<n; i++)
{ max=i;
for (j=i+1; j<n; j++)
if (R[j].score>R[max].score)
max=j;
if (max!=i)
{ temp = R[max].score;
R[max]=R[i];
R[i].score= temp;
}
if ((i>0)&&(R[i].score<R[i-1].score))
num=num+1;
printf("%4d%s%4d", num, R[i].name, R[i].score);
}

getch();
}

#include<stdio.h>
#include<stdl