#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