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

Back


5人の学生(A〜E)が英語,数学,および物理のテストを受けるとします.それぞれ点数を0から100の範囲の乱数で発生させるとし,合計点の多い順に並べ替える操作を行なうプログラムを作成しましょう.

文字列配列の練習として,以下の配列を用いて for 文を使用して表示させる練習もしましょう.

	char header[5][8] = {"Student", "English", "Math", "Physics", "Total"};

My student number: s134099

Student  English     Math  Physics    Total
      A       54       92       83      229
      B       73       13       86      172
      C       18       81        4      103
      D       83       76       31      190
      E       84       86       97      267
      
Student  English     Math  Physics    Total
      E       84       86       97      267
      A       54       92       83      229
      D       83       76       31      190
      B       73       13       86      172
      C       18       81        4      103

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

上の例では2次元配列を一つだけ用意しています.先頭の要素が文字コード,その次から3つが成績,最後の要素が合計点の組合せを人数分保存できるようにしましょう.

解答例

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

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

main()
{
	srand((unsigned) time(NULL));
	
	int i, j, k, score[5][5], tmp;
	char header[5][8] = {"Student", "English", "Math", "Physics", "Total"};
	
	printf("My student number: s134099\n\n");
	
	for(i=0; i<=4; i++)
		printf("%7s  ", header[i]);
		
	printf("\n");
	
	for(i=0; i<=4; i++){
		score[i][0] = 65 + i;
		score[i][4] = 0;
		
		for(j=1; j<=3; j++){
			score[i][j] = rand() % 101;
			score[i][4] += score[i][j];
		}
	}
	
	for(i=0; i<=4; i++){
		printf("%7c  ", score[i][0]);
		
		for(j=1; j<=4; j++)
			printf("%7d  ", score[i][j]);
		
		printf("\n");
	}
	
	printf("\n");
	
	for(i=0; i<=4; i++)
		printf("%7s  ", header[i]);
		
	printf("\n");
	
	for(i=0; i<=3; i++)
		for(j=i+1; j<=4; j++)
			if(score[i][4] < score[j][4])
				for(k=0; k<=4; k++){
					tmp = score[i][k];
					score[i][k] = score[j][k];
					score[j][k] = tmp;
				}
	
		
	for(i=0; i<=4; i++){
		printf("%7c  ", score[i][0]);
		
		for(j=1; j<=4; j++)
			printf("%7d  ", score[i][j]);
			
		printf("\n");
	}
	
	printf("\n---------------------\n\n");
	
	return(0);
}


Back