無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kokoro

無題

#1

投稿記事 by kokoro » 16年前

問題文
社会、理科、英語の得点から平均点と評価を与えるプログラムである。
各個人のデータは①「出席番号」②「文系・理系の区分」③「社会」④「理科」
⑤「英語」⑥「3教科の平均」⑦「評価」からなる。ただし、具体的にデータとして
入れるのは①②③④⑤のみ。(残りはプログラムに処理させる)データは構造体で宣言する。「3教科平均」では、各人の社会・理科・英語の平均点を代入しておく。
「評価」には「文系であれば社会と英語の平均、理系であれば理科と英語の平均」に
応じて80以上はA、70~79はB、60~69はC、59以下はDといれる。出力はこれらを全て
埋めたものを表形式で出力する。さらに、「3教科の平均」で昇順にソートしておく。
(値の入れ替えはswap関数をつくる)
●検証用データ(変数の宣言時に代入しておく)
出席番号   文系・理系  社会  理科  英語
 0001     文系     85   32   74
 0002     理系     33   68   52
 0003     理系     69   97   83
 0004     文系     72   60   65
 0005     文系     46   72   88
 0006     文系     85   41   79
 0007     理系     77   85   52


「評価」のとこですが,3教科の平均をもとに出ているのですが、
これを「文系は国語と英語の平均」「理系は数学と英語の平均」で出すにはどうすればいいのでしょうか。
アドバイスお願いします。
プログラムは添付してあります。

SCI

Re:無題

#2

投稿記事 by SCI » 16年前

詳しく見てないですが、文系なら0、理系なら1とかやってifで分岐すればいいのでは?
if文の使い方は分かりますか?

kokoro

Re:無題

#3

投稿記事 by kokoro » 16年前

main関数のところのif文は違いますか?

SCI

Re:無題

#4

投稿記事 by SCI » 16年前

その前に、「社・理・英」は「国・数・英」なのですか?

non

Re:無題

#5

投稿記事 by non » 16年前

理系の時は自分で解けてるじゃないですか。
文系のとき
double calc_average(struct person *p) {
    double sum;
    sum = p->score_japa +  p->score_month + p->score_eng;
    return sum / 3.0;
}
理系のとき
double calc_average1(struct person *p) {
    double sum;
    sum =  p->score_month + p->score_eng;
    return sum / 2.0;
}

box

Re:無題

#6

投稿記事 by box » 16年前

> 社会、理科、英語の得点から平均点と評価を与えるプログラムである。

これは間違いないですか?だとすると、

> これを「文系は国語と英語の平均」「理系は数学と英語の平均」で出すにはどうすればいいのでしょうか。

国語と数学の点数がないので、求められないです。

それから、教科の名前とプログラム中の変数名が混乱しているようです。
教科の名前を英語で書くと、
社会:social studies
理科:science
英語:english
国語:japanese
数学:mathematics

一度、頭の中を整理してみるとよいでしょう。

kokoro

Re:無題

#7

投稿記事 by kokoro » 16年前

なんかごちゃまぜになっていますね。すみません。

もう一度添付します。

先生に提出したところ、
「評価」のとこですが,たぶんこれは3教科の平均をもとに出していると
思います.仕様をよく読んで,評価の部分を直してください。
と言われました。

どうすればいいのでしょうか?

SCI

Re:無題

#8

投稿記事 by SCI » 16年前

平均出すところしか見てないけど、改善できてるように見えます。

つまり、「共通3教科平均」から「文理別2教科平均」に作り変えってことですよね?

box

Re:無題

#9

投稿記事 by box » 16年前

calc_average関数で、社会と英語の平均を求めるのに
「3」で割っているのは大いにまずいでしょう。

calc_average関数とcalc_average1関数は
教科が異なるだけでロジックは同じですね。
一つにまとまりませんか?

calc_rank関数とcalc_rank1は全く同じであるように見えます。
どちらか片方があればいいのではないでしょうか。

出席番号の中身が問題文と食い違っています。

non

Re:無題

#10

投稿記事 by non » 16年前

出力する平均は3教科の平均を出す必要があるのでは?
評価用の平均とごちゃまぜになってますね。

kokoro

Re:無題

#11

投稿記事 by kokoro » 16年前

おそらく、「評価」では「文系は社・英の平均」、「理系は、理・英の平均」
を出し、ソートでは「3教科の平均」で昇順にするということですかね…。

non

Re:無題

#12

投稿記事 by non » 16年前

そうですね
平均の関数は
double calc_average(struct person *p) {
    double sum;
    sum = p->score_sha +  p->score_eng + p->score_rika;
    return sum / 3.0;
}
メインでは
    for (i = 0; i < NUM; i++) {
        date.score_average = calc_average(&date);
        if (date.cls == 0) {
		date.rank = calc_rank(date.score_sha, date.score_eng);
        } else {
		date.rank = calc_rank1(date.score_rika, date.score_eng);
        }
    }

kokoro

Re:無題

#13

投稿記事 by kokoro » 16年前

皆さんありがとおうございました。

とても助かりました^^

閉鎖

“C言語何でも質問掲示板” へ戻る