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

Back


1/11の宿題を以下のようにアレンジして科目ごとの得点の高い順に並べ直すものに変更する.科目は英語,数学,物理,化学,生物,地学,法律,経済の8科目とし,得点は乱数により0から100点の範囲でそれぞれ与える.

科目の得点の高い順に表示を並べ直すプログラムを作成せよ.ここで,科目名は4文字分確保して左揃え,得点も4桁分を確保して右揃え,コラムの間はスペース2個分空けるようにすること.

My student number: s164099

Eng   Math  Phys  Chem  Bio   Geo   Law   Econ  
  21     6    69    15    11    51    50    48  

Phys  Geo   Law   Econ  Eng   Chem  Bio   Math  
  69    51    50    48    21    15    11     6  

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

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

以前と同様な配列 record[8][2] の他に,科目名用に次のような配列を用意します.

	char class[8][5] = {"Eng", "Math", "Phys", "Chem", "Bio", "Geo", "Law", "Econ"};


この配列の文字列にスペースを入れて,例えば, "Eng " のようにすることは認めません.ちゃんと左揃えにしてください.
解答用紙を使用する際には,まず,科目名の不要な方を削除してください.また,学生番号と名前の記入も忘れないでください.さらに,解答用紙自体がC言語のプログラムとなっていますので, cc コマンドを実行して,コンパイルエラーの無いことを確認してから提出してください.

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


解答例

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

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

main()
{
	srand((unsigned) time(NULL));
	
	int i, j, k, record[8][2], tmp;
	char class[8][5] = {"Eng", "Math", "Phys", "Chem", "Bio", "Geo", "Law", "Econ"};
	
	printf("My student number: s164099\n\n");
	
	for(i=0; i<=7; i++){
		record[i][0] = i;
		record[i][1] = rand() % 101;
	}
	
	for(i=0; i<=7; i++)
		printf("%-4s  ", class[record[i][0]]);
	
	printf("\n");
	
	for(i=0; i<=7; i++)
		printf("%4d  ", record[i][1]);
	
	printf("\n\n");
	
	for(i=0; i<=6; i++){
		for(j=i+1; j<=7; j++){
			if(record[i][1]<record[j][1]){
				for(k=0; k<=1; k++){
					tmp = record[i][k];
					record[i][k] = record[j][k];
					record[j][k] = tmp;
					
				}
			}
		}
	}
	
	for(i=0; i<=7; i++)
		printf("%-4s  ", class[record[i][0]]);
	
	printf("\n");
	
	for(i=0; i<=7; i++)
		printf("%4d  ", record[i][1]);
	
	printf("\n\n------------------------------------\n\n");
	
	return(0);
}




Back