解答例16-1

【問1】

#include <stdio.h>

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

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

void set_goukei( SEISEKI *sp, int ninzu );
void sort_goukei( SEISEKI *sp, int ninzu );

int main( void )
{
	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( 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( SEISEKI *sp, int ninzu )
{
	int i, j;
	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;
			}
		}
	}
}

戻る


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