- ベストアンサー
C言語のプログラミングで、ある条件で並び変えるプログラミングが分かりません。
以下のプログラミングができません。 どなたか分かる人はいませんか? 構造体studentを以下のように定義する。 struct student{ char name[20]; int kokugo, sansu, eigo;/* 各科目の点数を記録する変数 */ }; 10人分のデータが配列に記録されている。合格者の人数を表示し,合格者が先にくるように配列の中身を並べ替える。その後、配列の内容を表示させる。合格の条件は少なくとも2科目以上で80点以上をとっていることとする。 10人分のデータはmain文のはじめに配列に入れておく。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#include <stdio.h> struct student{ char name[20]; int kokugo, sansu, eigo; }; int judge(struct student st) { return (st.kokugo >= 80) + (st.sansu >= 80) + (st.eigo >= 80); } int main(void) { struct student st[10] = {{"a", 60, 60, 60}, {"b", 85, 60, 60}, {"c", 60, 85, 85}, {"d", 85, 60, 60}, {"e", 85, 85, 85}, {"f", 85, 85, 60}, {"g", 60, 60, 60}, {"h", 85, 60, 85}, {"i", 60, 60, 60}, {"j", 85, 85, 85}}, st0; int i, j; for(i = 0; i < 10; i ++){ printf("%s %d %d %d\n", st[i].name, st[i].kokugo, st[i].sansu, st[i].eigo); } for(i = j = 0; i < 10; i ++){ if(judge(st[i]) >= 2){ st0 = st[j]; st[j] = st[i]; st[i] = st0; j ++; } } putchar('\n'); for(i = 0; i < 10; i ++){ if(i == j) puts("---------------------*"); printf("%s %d %d %d\n", st[i].name, st[i].kokugo, st[i].sansu, st[i].eigo); } return 0; }
その他の回答 (2)
- isyuto2007
- ベストアンサー率31% (80/258)
for文とif文でソートかけてみては
- Wr5
- ベストアンサー率53% (2173/4061)
http://www.google.co.jp/search?hl=ja&q=%E6%A7%8B%E9%80%A0%E4%BD%93+%E3%82%BD%E3%83%BC%E3%83%88&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja 構造体のソートで、合格条件に合っているかどうかを並び替えればよいかと。 80点以上の科目がいくつあるかカウントする変数を用意して、 kokugoが80点以上なら+1、 sansuが80点以上なら+1、 eigoが80点以上なら+1とやって、最後にカウントが2以上であれば、 「少なくとも2科目以上で80点以上をとっている」ということになるでしょう。 # 条件に「点数の高い順」とか追加されると多少手間は増えますが。
お礼
ご回答ありがとうございました。 とても参考になりました。