みけCATさん、kinokawaさん返信ありがとうございます。
今回はみけCATさんの方法をとらせていただきました。
ソースコードは前回投稿した記事をもとに少しだけ変更しました。
以下が実行結果になりますが1位が表示されないのはなぜでしょうか・・また実行結果2の方では正常に作動しないことも疑問です・・
実行結果1
------------------------------------------
今回集計する人数を入力=5
試験の成績を入力してください。
1 人目:100
この人の出席番号を入力してください。
1
試験の成績を入力してください。
2 人目:80
この人の出席番号を入力してください。
2
試験の成績を入力してください。
3 人目:80
この人の出席番号を入力してください。
3
試験の成績を入力してください。
4 人目:90
この人の出席番号を入力してください。
4
試験の成績を入力してください。
5 人目:50
この人の出席番号を入力してください。
6
今回の試験順位(昇順)
0位.出席番号:1 点数:100
2位.出席番号:4 点数:90
3位.出席番号:3 点数:80
3位.出席番号:2 点数:80
5位.出席番号:6 点数:50
------------------------------------------
実行結果2
------------------------------------------
今回集計する人数を入力=3
試験の成績を入力してください。
1 人目:100
この人の出席番号を入力してください。
1
試験の成績を入力してください。
2 人目:100
この人の出席番号を入力してください。
2
試験の成績を入力してください。
3 人目:20
この人の出席番号を入力してください。
3
今回の試験順位(昇順)
0位.出席番号:1 点数:100
1位.出席番号:2 点数:100
2位.出席番号:3 点数:20
------------------------------------------
コード:
include <stdio.h>
#define MAXDATA 100
int main()
{
int d[MAXDATA];
int X;
int a[MAXDATA];
int b[MAXDATA];
int i, j, k;
int tmp;
printf("今回集計する人数を入力="); scanf("%d",&X);
if(X >= MAXDATA){
do{
printf("もう一度生徒数を入力してください。");
scanf("%d", &X);
}while(X > MAXDATA);
}
for (i = 0; i < X; i++){
printf("試験の成績を入力してください。\n");
printf("%d 人目:",i+1);
scanf("%d", &d[i]);
printf("この人の出席番号を入力してください。\n");
scanf("%d" ,&a[i]);
}
printf("今回の試験順位(昇順)\n");
for(i=0;i < X-1; i++){
j=i;
for(k=i+1; k < X; k++){
if(d[j]<d[k]){ j = k; }
}
tmp = d[j];
d[j] = d[i];
d[i] = tmp;
tmp = a[j];
a[j] = a[i];
a[i] = tmp;
}
for (i=1; i<=X; i++){ //追加したもの
b[i] = 1;
}
for (i=2; i<=X; i++) {
for (j=1; j<=i-1; j++) {
if(d[j] > d[i]) b[i]++;
if(d[j] < d[i]) b[j]++;
}
}
for (i = 0; i < X; i++) {
printf("%d位.", b[i]); printf("出席番号:%d ", a[i]); printf("点数:%d\n", d[i]);
}
}