次に示すプログラムの構造体宣言を「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
▼戻る▼
「初心者のためのポイント学習C言語」 Copyright(c) 2000-2004 TOMOJI All Rights Reserved