#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; } } } }
▼戻る▼
「初心者のためのポイント学習C言語」 Copyright(c) 2000-2004 TOMOJI All Rights Reserved