みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C言語のプログラミングで、ある条件で並び変えるプログラミングが分かりません。

以下のプログラミングができません。
どなたか分かる人はいませんか?

構造体studentを以下のように定義する。
struct student{
char name[20];
int kokugo, sansu, eigo;/* 各科目の点数を記録する変数 */
};

10人分のデータが配列に記録されている。合格者の人数を表示し,合格者が先にくるように配列の中身を並べ替える。その後、配列の内容を表示させる。合格の条件は少なくとも2科目以上で80点以上をとっていることとする。

10人分のデータはmain文のはじめに配列に入れておく。

投稿日時 - 2007-11-10 15:02:00

QNo.3505820

困ってます

質問者が選んだベストアンサー

#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;
}

投稿日時 - 2007-11-10 19:02:16

お礼

ご回答ありがとうございました。
とても参考になりました。

投稿日時 - 2007-11-10 23:40:43

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

for文とif文でソートかけてみては

投稿日時 - 2007-11-10 15:13:31

ANo.1

Wr5

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点以上をとっている」ということになるでしょう。

# 条件に「点数の高い順」とか追加されると多少手間は増えますが。

投稿日時 - 2007-11-10 15:11:32

あなたにオススメの質問