前提・実現したいこと
それぞれの学生の点数の合計点の高い順に、それに従って、番号、名前、素点も並び替えるプログラムを作っています。番号、名前、素点の英語、合計点は正しく並び替えることができましたが、数学と物理が並び替えることができません。どのようにプログラムを改善すればいいのでしょうか?教えてください。
発生している問題・エラーメッセージ
英語のみがソートされ、他の科目はそのままで表示されてしまいます。
該当のソースコード
#include<stdio.h> #include<string.h> struct slist { int num; /* 番号 */ char name[20]; /* 名前 */ int ten[6]; /* 各科目の点数(3科目) */ int total; /* 合計点 */ }; int main(void) { /*変数宣言と配列の初期値設定*/ int i, j, jmax, totalmax, nummax; int N = 7, M = 3, K = 6; /* N:学生数, M:科目数 K:項目数*/ char a[20]; char b[6]; struct slist seiseki[7] = { { 1, "Ito", { 65, 55, 80 }, 0 }, { 2, "Kato", { 30, 40, 50 }, 0 }, { 3, "Tanaka", { 65, 85, 100 }, 0 }, { 4, "Suzuki", { 85, 90, 65 }, 0 }, { 5, "Yamada", { 20, 50, 80 }, 0 }, { 6, "Takada", { 90, 30, 40 }, 0 }, { 7, "Sato", { 50, 70, 55 }, 0 } }; char hyodai[6][7] = { "No.", "Name", "Eigo", "Sugaku", "Buturi", "Total" }; /*表題の表示*/ printf("------------------------------------------------\n"); printf(" Original Data\n"); printf("------------------------------------------------\n"); for (i = 0; i < K; i++) { printf("%8s", hyodai[i]); }; printf("\n"); for (i = 0; i < N; i++) { printf("%8d%8s", seiseki[i].num, seiseki[i].name); for (j = 0; j < M; j++) { printf("%8d", seiseki[i].ten[j]); seiseki[i].total += seiseki[i].ten[j]; } printf("%8d\n", seiseki[i].total); } for (i = 0; i < N - 1; i++) { totalmax = seiseki[i].total; jmax = i; /* 最大値を求める*/ for (j = i + 1; j < N; j++) { if (totalmax < seiseki[j].total) { jmax = j; totalmax = seiseki[j].total; } nummax = seiseki[jmax].num; strcpy(a,seiseki[jmax].name); memcpy(b,seiseki[jmax].ten,sizeof(5)); } /* 最大値(jmax番目)のデータとi番目のデータを交換*/ seiseki[jmax].total = seiseki[i].total; seiseki[i].total = totalmax; seiseki[jmax].num = seiseki[i].num; seiseki[i].num = nummax; strcpy(seiseki[jmax].name,seiseki[i].name); strcpy(seiseki[i].name,a); memcpy(seiseki[jmax].ten,seiseki[i].ten,sizeof(5)); memcpy(seiseki[i].ten,b,sizeof(5)); } /*並ぎ替え後の合計点の表示 */ printf("--------------------------\n"); printf("並び替えデータ\n"); printf("--------------------------\n"); for (i = 0; i < K; i++) { printf("%8s", hyodai[i]); }; printf("\n"); for (j = 0; j < N; j++) { printf("%8d%8s%8d%8d%8d%8d\n", seiseki[j].num, seiseki[j].name,seiseki[j].ten[0],seiseki[j].ten[1],seiseki[j].ten[2], seiseki[j].total); } return (0); }
試したこと
英語、物理、数学をそれぞれseiseki[j].ten[1],seiseki[j].ten[2],seiseki[j].ten[3]として3つ別々に並び替えようとしましたが、エラーになってしまいました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。