• ベストアンサー

ソースプログラム!!

ある点数(1~100)を入力して、その合計点を求めるプログラムを作っています。 ・入力する国語の点数の範囲を調べる   正しい範囲 0~100点まで   誤り    上記以外の点 ・正しい範囲なら、合計点をもとめる操作  誤りなら誤り文を表示して、その点数を省く操作 が基本で、プラス ・正しい点数を入力した人数を数え上げる ・5人分の繰り返しを終了したら正しい点数の合計点と人数を使って平均点を求める ・合計点と平均点を並べて表示する。正しい点数の人数も表示する(項目名をつけて) さらに、 ・上記5名の中から最高点と最低点を求める ・求めた最高点と最低点を表示する というものなのですが、基本でここまでできています。 どなたか、上の機能を作って完成させていただけるか、 やり方を教えていただけませんか main() { int kokugo,cnt,t_kokugo; t_kokugo=0; for(cnt=1;cnt<=5;cnt++) { printf("国語の点数="); scanf("%d",&kokugo); t_kokugo=t_kokugo+kokugo; } printf("国語合計点=%d\n",t_kokugo);

noname#154250
noname#154250

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

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.2

プログラムを書くのは簡単ですが、よしておきます。 ヒントだけ。 ・仕様に疑問点があります。 「誤りなら誤り文を表示してその点数を省く」のは、 誤りデータが入力されたときに表示するのでしょうか。 それとも、5つ入力された後に表示するのでしょうか。 前者なら、その作業はforループの中で行い、 後者なら、入力するループとは別のところで行います。 ・「正しい点数かどうか」を調べるため、 それと「最高点と最低点」を求めるためには、 一つづつのデータを記録する必要があります。 すなわち、入力データを配列に入れなければなりません。 配列は使えるでしょうか。 ・プログラムの構造としては、 「入力させ、5つの数値を得るループ」 「誤りデータ以外の、個数と合計点を計算するループ」 「最高点と最低点を調べるループ」 など、複数のforループが並ぶと思います。 (一つにすることも可能ではありますが、 複数にした方が簡単だと思います) ・有効なデータが一つもない場合があり得ます。 そのとき、平均点の計算を特別に処理する必要があります。 (0で割ることになるからです)

noname#154250
質問者

お礼

詳しく書いていただいてありがとうございます。 提示された問題文以外に情報がないので、どうするかというのは好きなようにしていいんだと思います。 はずかしながら使われている言葉でわからないものが多いので(頭の中で日本語としてしか処理できていないもの)すが、 頂いたヒントはフローチャートを作る参考にさせていただきます! どうもありがとうございました!

その他の回答 (1)

noname#4564
noname#4564
回答No.1

入門者、初学者向けの書籍を入手すれば、そのぐらいの 問題は解説されています。 (というか、ほとんどそのまんまの例題を見た記憶あり)

参考URL:
http://www.bohyoh.com/Books/
noname#154250
質問者

補足

早速のご回答ありがとうございます。 本を見たいところなのですが、 今授業中で、ここでやらなければいけないので、 やり方等解説されているホームページか 似たような解説があれば教えていただけませんか?

関連するQ&A

  • C言語のプログラムについて質問です。

    C言語のプログラムについて伺いたいことがあるんですが5人くらいの名前、数学、英語、国語の点数を入力して各教科の最高点、最低点、平均点、それぞれの数+英+国の合計点を表示するプログラムを構造体を使って作りたいと思っています。 もしよろしければ事細かに教えていただけないでしょうか。 よろしくお願いします。

  • c言語 構造体

    大学での内容なのですが,『名前,数学の点数,英語の点数,国語の点数を格納できる(メンバに持つ)構造体を宣言し,この構造体の配列を用いて,3人分の情報をキーボードから入力後,各科目の平均点を画面に表示するプログラムを作成せよ.』という問題で,自分なりに作ってみたのですがうまくいきません.どなたか教えていただけませんか? 一応自分で作ったものを下に載せておきます. ================================================================ #include <stdio.h> #include <string.h> struct test { char name[20]; int sugaku; int eigo; int kokugo; }; int main(void) { struct test suzuki; int (suzuki.sugaku), (suzuki.eigo), (suzuki.kokugo); strcpy(suzuki.name, "Suzuki"); printf("氏名:鈴木 一馬\n"); printf("数学:"); scanf("%d", &suzuki.sugaku); printf("英語:"); scanf("%d", &suzuki.eigo); printf("国語:"); scanf("%d", &suzuki.kokugo); struct test tanaka; int tanaka.sugaku, tanaka.eigo, tanaka.kokugo; strcpy(tanaka.name, "Tanaka"); printf("氏名:田中 二郎\n"); printf("数学:"); scanf("%d", &tanaka.sugaku); printf("英語:"); scanf("%d", &tanaka.eigo); printf("国語:"); scanf("%d", &tanaka.kokugo); struct test yamamoto; int yamamoto.sugaku, yamamoto.eigo, yamamoto.kokugo; strcpy(yamamoto.name, "Yamamoto"); printf("氏名:山本 三弘\n"); printf("数学:"); scanf("%d", &yamamoto.sugaku); printf("英語:"); scanf("%d", &yamamoto.eigo); printf("国語:"); scanf("%d", &yamamoto.kokugo); printf("数学の平均点は%dです。\n", ((suzuki.sugaku + tanaka.sugaku + yamamoto.sugaku) / 3.0)); printf("英語の平均点は%dです。\n", ((suzuki.eigo + tanaka.eigo + yamamoto.eigo) / 3.0)); printf("国語の平均点は%dです。\n", ((suzuki.kokugo, + tanaka.kokugo + yamamoto.kokugo) / 3.0)); return (0); } ================================================================

  • どこが間違っているのか教えてください。。

    C言語の勉強をしています。 プログラムを作成してみましたが、うまくいきません。 どこが間違っているのか、なぜそうなるのか、教えていただけると助かります。 よろしくお願いします。 あるクラスの試験の点数を整数で繰り返し入力し、点数の合計と平均点を出力するプログラムを作成しなさい。 点数は、0点以上100点以下とし、この範囲外の点(0点未満または100点より大きい点)が入力されたときは、入力を終了し、点数の合計と平均点を出力する(最後に入力された範囲外の点は集計の対象としない)。 また、平均は小数点以下2桁まで出力する。 繰り返しの命令は、何を使ってもよい。 ▼実行例 点数:10 点数:100 点数:20 点数:35 点数:120 合計:165点 平均: 41.25点 ******************************************* 考えたプログラム #include<stdio.h> int main(void) { int   ten,hito,goukei; double           heikin; goukei=0; hito=0; while(1){ printf("¥n点数:"); scanf ("%d", &ten); if(ten<0||100<ten) break; goukei=goukei+ten; hito=hito+1; break; } printf("¥n合計:%d点",goukei); heikin=(double)goukei/(double)hito; printf("¥n平均:%.2lf点",heikin); }

  • 合計の出し方

    よろしくお願いいたします。 プログラミングの勉強中です。 国語:78 算数:94 理科:68 社会:70 英語:75 合計点は385点です。 と表示されるプログラムを作り、数字は変えられるようにscanfを使用します。 自分で以下のように作ってみたのですが、合計だけがめちゃめちゃな数で出て来てしまいます。 どこが間違っているか教えていただけますか? #include<stdio.h> main() { int kokugo; int sansuu; int rika; int syakai; int eigo ; int sum = kokugo+sansuu+rika+syakai+eigo; printf("国語:"); scanf("%d",&kokugo); printf("算数:"); scanf("%d",&sansuu); printf("理科:"); scanf("%d,&rika"); printf("社会:"); scanf("%d,&syakai"); printf("英語:"); scanf("%d,&eigo"); printf("合計点は%d点です。",sum); }

  • C++の配列についてなんですが

    #include <iostream> using namespace std; int main() { int i,goukei=0; int kokugo[5]; float heikin; for(i=0;i<5;i++) { cout << "出席番号" << i+1 << "番の国語の成績を入力してください\n"; cin >> kokugo[i]; goukei = goukei + kokugo[i]; } heikin = (float)goukei/5.0; cout << "平均点は" << heikin << "点です\n"; for(i=0;i<5;i++) { cout << "出席番号" << i+1 << "番の国語の成績は" << kokugo[i]; cout << "点で、平均との差は" << heikin-(float)kokugo[i] << "です\n"; } return 0; } これを基に 数学の点数も入力する 数学の平均も出力する 国語と数学の総合的な平均点も出力する ようにするにはどうすればいいんですか?

  • gets関数と構造体について

    名前を入力して、各教科の点数を入力したあと、それを表示するプログラムを作りました。 完成はしたのですが、分からないところがあるので質問させて頂きます。 #include <stdio.h> #include <string.h> typedef struct { char name[32]; int kokugo; int rika; } siken; int main() { siken tensu[5]; // = {"三村",80,45,"大竹",90,85,"松本",75,60,"狩野",100,100,"大江",95,90}; char name[32],point[16],end[6]; int i=0; do { printf("名前を入力してください。 : "); gets(tensu[i].name); //tensu[i].name = name; printf("国語 : "); gets(point); tensu[i].kokugo = atoi(point); printf("理科 : "); gets(point); tensu[i].rika = atoi(point); i++; printf("入力を終わりますか?(YES=0,NO=1) : "); gets(end); } while (atoi(end)); i=0; do { printf("氏名を入力して下さい。 : "); gets(name); while (strcmp(name,tensu[i].name)) i++; printf("氏名 : %s\n国語 : %d\n理科 : %d\n",tensu[i].name,tensu[i].kokugo,tensu[i].rika); printf("終わりますか?(YES=0,NO=1) : "); gets(end); if (atoi(end)==0) break; else if(atoi(end)!=1) { printf("入力に誤りがあります。もう一度入力して下さい。 : "); gets(end); continue; } } while (atoi(end)); return 0; } このプログラムの printf("名前を入力してください。 : "); gets(tensu[i].name); //tensu[i].name = name; printf("国語 : "); gets(point); tensu[i].kokugo = atoi(point); printf("理科 : "); gets(point); tensu[i].rika = atoi(point); i++; printf("入力を終わりますか?(YES=0,NO=1) : "); gets(end); の部分で、点数を入力するとき、 scanf("%d",tensu[i].kokugo); とすると、入力を終了するための入力が飛ばされ、いきなり表示に行きます。(入力を終わりますか?の表示のだけですぐデータ表示のための「氏名を入力してください」が表示される感じです。) また、この部分の最後のendをint型のj(初期化したものです)に置き換えると「入力を終わりますか?」の入力はできるのですがデータの表示がエラーでできなくなります。 この部分が分からず、もやもやが残っているので質問させていただきました。 長文で申し訳ないです。 回答よろしくお願いいたします。

  • プログラミング、VB.NET(初歩です)

    (1)3つの科目の点数を入力し、最高点数だけ2倍した合計を表示させる方法が分りません。 (2)同じく3つの科目の点数を入力し、最高点と2番目の点数を2倍した合計を表示させる方法が分りません。 どのように入力したらよいでしょうか?

  • どうしても作れないプログラムがあります。

    仕様としては 学生の名前と国語、英語の成績を5人分キーボードから入力するプログラムで国語、英語、合計点それぞれの観点で、最高点の学生の名前と成績(国語、英語、合計点)を表示させたいです。 該当者が複数いた場合は、任意の1人でかまいません。 なお、学生1人分のデータは構造体として表現し、名前は63byte(¥0 含まず)以下で表現できるもので、各教科の成績は0~100 点の整数で表現できるものでお願いします。 ※使用言語はC言語です。 よろしくお願いします。

  • 構造体と関数について質問です

    私はC言語の勉強を始めて2ヶ月の初心者です。 課題に取り組んでいるのですが、まったく進めないので助けていただきたいと思い質問しました。 課題 A君B君C君の3人の国語・算数・理科・社会の点数を入力し、それぞれの合計点と平均点、1番高かった教科を表示する。 というものです。 構造体はstruct subjectData member[3]で 関数は入力をする関数と合計点を出す関数平均点を出す関数最高点を出す関数を使ってということなんですが、まったくわからなく手がつけられないもので、質問させていただきました。 参照渡しを使えということも言われ、参考書をみて戦っているんですがどうも理解ができません。 解説とソースを載せていただけたら助かります。 どなたかよろしくお願いします!

  • tiny basicでプログラム作成

    次の問題のプログラムをtiny basicで作成してみてくだい。 理科、数学、国語、音楽、体育の点数を読み込み、5科目の平均点を計算し、平均点が60点以上で合格、60点以下なら不合格と表示するプログラムをつくりなさい。 各科目の点数は、理科50点、数学80点、国語40点、音楽60点、体育64点とする。

専門家に質問してみよう