演習16-1

【問1】

次に示すプログラムの構造体宣言を「typedef」を用いて書き換えなさい。

#include <stdio.h>

#define NINZU 5		/* 学生の人数 */
#define KAMOKU 4		/* 科目数 */

struct seiseki {		/* 成績データ */
	int no;		/* 学生番号 */
	int ten[KAMOKU];	/* 点数 */
	int goukei;	/* 合計点 */
};

void set_goukei( struct seiseki *sp, int ninzu );
void sort_goukei( struct seiseki *sp, int ninzu );

int main( void )
{
	struct seiseki mycls[NINZU] = {
		{1001,85,74,63,90,0},
		{1002,78,65,70,62,0},
		{1003,89,92,88,76,0},
		{1004,32,48,66,25,0},
		{1005,92,76,81,98,0},
	};
	int i;
	
	printf("番号 国語 数学 理科 社会  合計\n");
	set_goukei( mycls,NINZU );	/* 合計点を求める */
	sort_goukei( mycls,NINZU );	/* 合計得点順に並べる */
	
	/*** 結果の表示 ***/
	for ( i = 0; i < NINZU; i++ ) {
		printf( "%4d  %4d  %4d  %4d  %4d    %4d\n",
			mycls[i].no, mycls[i].ten[0], mycls[i].ten[1],
			mycls[i].ten[2], mycls[i].ten[3], mycls[i].goukei );
	}
	
	return 0;
}

/*** 合計点を求める ***/
void set_goukei( struct seiseki *sp, int ninzu )
{
	int i, j;
	
	for ( i = 0; i < ninzu; i++ ) {
		for ( j = 0; j < KAMOKU; j++ ) {
			( sp + i )->goukei = ( sp + i )->goukei + ( sp + i )->ten[j];
		}
	}
}

/*** 合計得点順に並べる ***/
void sort_goukei( struct seiseki *sp, int ninzu )
{
	int i, j;
	struct seiseki wk;
	
	/*** 合計得点順に並べる ***/
	for ( i = 0; i < ninzu-1; i++ ) {
		for ( j = 0; j < ninzu-i-1; j++ ) {
			if( ( sp+j )->goukei < ( sp+j+1 )->goukei ) {
				wk = *( sp+j );
				*( sp+j ) = *( sp+j+1 );
				*( sp+j+1 ) = wk;
			}
		}
	}
}
実行結果

番号	国語	数学	理科	社会	合計
1005	92	76	81	98	347
1003	89	92	88	76	345
1001	85	74	63	90	312
1002	78	65	70	62	275
1004	32	48	66	25	171

解答例戻る


banner初心者のためのポイント学習C言語」
Copyright(c) 2000-2004 TOMOJI All Rights Reserved