学生番号が正常に出力されていません
この質問と同じ質問が他に1つありますが、何分急いでいますのでご了承下さい。以下のプログラムで実行結果が、入力された得点に対応する学生番号を得点の高い順に並び替えて出力したいのです。得点の方は正常に出力されているのですが学生番号がおかしな出力になっています。しかし、どこをどう直せば良いか分かりません。なので分かりやすく説明お願い致します。
#include<stdio.h>
#define M 10
#define N 5
void sort_score(int score_cpy[M]);
int linear_search(int score_cpy[M],int key);
void exchange_number(int order[M],char number[M][N]);
int no;
int main(void)
{
int i,score[M],score_cpy[M],order[M];
char number[M][N];
printf("人数を入力して下さい:");
scanf("%d",&no);
("学生番号と平均点を入力して下さい。");
for(i=0;i<no;i++){
printf("学生番号:");
scanf("%s",&number[i][N]);
printf("得点:");
scanf("%d",&score[i]);
}
for(i=0;i<=M;i++){
score_cpy[i]=score[i];
}
sort_score(score_cpy);
for(i=0;i<M;i++){
order[i]=linear_search(score_cpy,score[i]);
}
exchange_number(order,number);
printf("\n\n得点の高い順に並び替えて表示します\n\n");
for(i=0;i<no;i++){
printf("学生番号 :%s %d点\n",number[i],score_cpy[i]);
}
return 0;
}
void sort_score(int score_cpy[M])
{
int i,j,score;
for(j=0;j<no-1;j++){
for(i=no-1;i>0;i--){
if(score_cpy[i-1]<score_cpy[i]){
score=score_cpy[i-1];
score_cpy[i-1]=score_cpy[i];
score_cpy[i]=score;
}
}
}
}
int linear_search(int score_cpy[M],int key)
{
int i;
for(i=0;i<no;i++){
if(score_cpy[i]==key){
return i;
}
}
return -1;
}
void exchange_number(int order[M],char number[M][N])
{
int i,temp[M];
for(i=0;i<M;i++){
if(order[i]==-1)break;
temp[i]=number[i][N];
}
for(i=0;i<M;i++){
if(order[i]==-1)break;
number[order[i]][N]=temp[i];
}
}
人数を入力して下さい:10
学生番号:y3051 得点:85
学生番号:y3052 得点:65
学生番号:y3053 得点:75
学生番号:y3054 得点:63
学生番号:y3055 得点:95
学生番号:y3056 得点:68
学生番号:y3057 得点:80
学生番号:y3058 得点:90
学生番号:y3059 得点:83
学生番号:y3060 得点:70
得点の高い順に並び替えて表示します
学生番号 : 95点
学生番号 :y3051y3052y3053y3054y3055y3056y3057y3058y3059y3060 90点
学生番号 :y3052y3053y3054y3055y3056y3057y3058y3059y3060 85点
学生番号 :y3053y3054y3055y3056y3057y3058y3059y3060 83点
学生番号 :y3054y3055y3056y3057y3058y3059y3060 80点
学生番号 :y3055y3056y3057y3058y3059y3060 75点
学生番号 :y3056y3057y3058y3059y3060 70点
学生番号 :y3057y3058y3059y3060 68点
学生番号 :y3058y3059y3060 65点
学生番号 :y3059y3060 63点
お礼
ご回答ありがとうございました。 残念ながら asahi.com の動画は見ることができませんでした。 戦前から、ということになると詳しい事はわからないのでしょうね。