dポイントプレゼントキャンペーン実施中!

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

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

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

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

A 回答 (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;
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/10 23:40

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

    • good
    • 0

http://www.google.co.jp/search?hl=ja&q=%E6%A7%8B …

構造体のソートで、合格条件に合っているかどうかを並び替えればよいかと。

80点以上の科目がいくつあるかカウントする変数を用意して、
kokugoが80点以上なら+1、
sansuが80点以上なら+1、
eigoが80点以上なら+1とやって、最後にカウントが2以上であれば、
「少なくとも2科目以上で80点以上をとっている」ということになるでしょう。

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!