C言語で構造体に格納された4科目の点数と合計点を高い順に表示したいのですが
番号 国語 数学 理科 社会 合計
1005 92 76 81 98 347
1005 92 76 81 98 347
1003 89 92 88 76 345
1002 78 65 70 62 275
1004 32 48 66 25 171
と番号1005が2度表示されて、1001が表示されません。どこがおかしいのでしょうか。
c言語
1#include<stdio.h> 2#define NINZU 5/* 学生の人数*/ 3#define KAMOKU 4/* 科目数*/ 4struct seiseki {/* 成績データ*/ 5 int no;/* 学生番号*/ 6 int ten[KAMOKU];/* 点数*/ 7 int goukei;/* 合計点*/ 8}; 9void set_goukei( struct seiseki *sp, int ninzu ); 10void sort_goukei( struct seiseki *sp, int ninzu ); 11int main( void ){ 12 struct seiseki mycls[NINZU] = { 13 {1001,85,74,63,90,0}, 14 {1002,78,65,70,62,0}, 15 {1003,89,92,88,76,0}, 16 {1004,32,48,66,25,0}, 17 {1005,92,76,81,98,0}, 18 }; 19 int i; 20 printf("番号 国語 数学 理科 社会 合計\n"); 21 set_goukei( mycls,NINZU );/* 合計点を求める*/ 22 sort_goukei( mycls,NINZU );/* 合計得点順に並べる*/ 23 /*** 結果の表示***/ 24 for ( i = 0; i < NINZU; i++ ) { 25 printf("%4d %4d %4d %4d %4d %4d\n",mycls[i].no, mycls[i].ten[0 26], mycls[i].ten[1],mycls[i].ten[2], mycls[i].ten[3], mycls[i].goukei ); 27} 28 29 return 0; 30} 31 32void set_goukei( struct seiseki *sp, int ninzu ){ 33 int i,j; 34for(i=0;i<ninzu;i++) { 35 for(j=0;j<ninzu-1;j++ ){ 36 (sp+i)->goukei=(sp+i)->goukei+(sp+i)->ten[j]; 37 } 38 } 39} 40 41void sort_goukei( struct seiseki *sp, int ninzu ){ 42 int i,j; 43 for (i=0;i<ninzu-1;i++){ 44 for (j=0;j<ninzu-1-i;j++){ 45 if((sp+j)->goukei<(sp+j+1)->goukei){ 46 *sp=*(sp+j); 47 *(sp+j)=*(sp+j+1); 48 *(sp+j+1)=*sp; 49 } 50 } 51 } 52} 53
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。