プログラミング入門 情報科学演習 宿題 2017.01.11

Back


受験番号1001から1005の5人の受験生が1科目の試験を受けることを想定して,以下のように番号順に得点を表示した後で,得点の高い順に並べ直すプログラムを作成せよ.なお,得点は乱数により0から100点の範囲の数を発生させたものとする.また,同点の場合の並べ替え処理は気にしなくても良い.

My student number: s164099

Num  Score
1001   68 
1002   45 
1003   28 
1004   25 
1005   89 

1005   89 
1001   68 
1002   45 
1003   28 
1004   25 

---------------------------------------

なお,結果の出力では必ず最初の行に自分の学生番号を,最後にハイフンによるラインをつけること.無い場合には減点するので注意.

受験番号と得点の両方を記憶するために,次のような配列を用意します.

	int score[5][2];


得点の高い順に並べ直すのは実習の問題で行ったのと同じ方法ですが,要素が今回は2つセットになっていますので,得点の方で入れ替え判断を行い,受験番号と得点の両方とも入れ替える必要があります.
解答用紙を使用する際には,まず,科目名の不要な方を削除してください.また,学生番号と名前の記入も忘れないでください.さらに,解答用紙自体がC言語のプログラムとなっていますので, cc コマンドを実行して,コンパイルエラーの無いことを確認してから提出してください.

指定の解答用紙を使用していない,コンパイルエラーが出る,実行時に警告が出る,学生番号と名前が無い,というような答案は提出されても採点しません.注意してください.


解答例

/* ************************************************** */
/*                                                    */
/*      プログラミング入門  情報科学演習C7                            */
/*      レポート課題                                  */
/*      2017.01.11                                    */
/*                                                    */
/* ************************************************** */
/*                                                    */
/*      学生番号:                                    */
/*                                                    */
/*      氏名:                                        */
/*                                                    */
/* ************************************************** */
/*                                                    */
/*      この行以降に解答のプログラムを書くこと        */

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

main()
{
	srand((unsigned) time(NULL));
	
	int i, j, k, tmp, score[5][2];
	
	printf("My student number: s164099\n\n");
	printf("Num  Score\n");
	
	for(i=0; i<=4; i++){
		score[i][0] = 1001 + i;		
		score[i][1] = rand() % 101;
		
		for(j=0; j<=1; j++)			
			printf("%4d ", score[i][j]);
		
		printf("\n");
	}
	
	printf("\n");		
	
	for(i=0; i<=3; i++)
		for(j=i+1; j<=4; j++)
			if(score[i][1]<score[j][1])
				for(k=0; k<=1; k++){
					tmp = score[i][k];
					score[i][k] = score[j][k];
					score[j][k] = tmp;
				}
				
	for(i=0; i<=4; i++){
		for(j=0; j<=1; j++)
			printf("%4d ", score[i][j]);
		
		printf("\n");
	}
			
	printf("\n---------------------------------------\n");
	
	return(0);
}



Back