解答例15-3

【問1】

#include <stdio.h>

/* #defineについては第18章参照 */
#define	 NINZU 5	/* 学生の人数 */
#define	 KAMOKU 4	/* 科目数 */

struct seiseki {
	int no;
	int kamoku[KAMOKU];
};

int main( void )
{
	struct seiseki mycls[NINZU+1] = {
		{ 1001, 85, 74, 63, 90 }, 
		{ 1002, 78, 65, 70, 62 }, 
		{ 1003, 89, 92, 88, 76 }, 
		{ 1004, 32, 48, 66, 25 }, 
		{ 1005, 92, 76, 81, 98 }, 
		{   -1,  0,  0,  0,  0 } };
	struct seiseki *my_p;
	char *kname[] = { "国語", "数学", "理科", "社会" };
	int i, j;
	double heikin;

	my_p = mycls;
	for ( j = 0; j < KAMOKU; j++ ) {
		i = 0;
		heikin = 0.0;
		while( ( my_p+i )->no != -1 ) {
			heikin = heikin + ( my_p+i )->kamoku[j];
			i++;
		}
		heikin = heikin / i;
		printf( "%s 平均 = %6.2f\n", kname[j], heikin );
	}
	
	return 0;
}

【問2】

#include <stdio.h>

#define	 NINZU	5
#define	 KAMOKU	4

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

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 },
	};
	struct seiseki *sp;
	struct seiseki wk;
	int i, j;

	sp = mycls;

	printf( "番号      国語    数学    理科    社会    合計\n" );
	for ( i = 0; i < NINZU; i++ ) {
		
		/*** 合計点を求める ***/
		for ( j = 0; j < KAMOKU; j++ ) {
			( sp+i )->goukei = ( sp+i )->goukei + ( sp+i )->ten[j];
		}
	}
	/*** 合計得点順に並べる ***/
	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;
			}
		}
	}

	/*** 結果の表示***/
	for ( i = 0; i < NINZU; i++ ) {
		printf( "%4d    ", ( sp+i )->no );
		for ( j = 0; j < KAMOKU; j++ )
			printf("%4d    ", ( sp+i )->ten[j] );
		printf( " %4d\n", ( sp+i )->goukei );
	}
	
	return 0;
}

戻る


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