• 締切済み

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

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

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

質問ってのはたいてい「うまくいかない」ときにする (想定した通りに動いていたら, 疑問に思わないでしょ?) ものだから, 単に「うまくいかない」とだけ書くようでは質問の文章として失格. 何がどう「うまくいかない」のかをちゃんと書いてください.

sairamnaomi
質問者

お礼

解決しました。ご指摘ありがとうございました。

sairamnaomi
質問者

補足

コンパイルすると、結果が実行例と同じようにならず、このようになります。 breakを外したり、いろいろやってみましたが、無限ループになったりします。 よろしくお願いします。 ▼実行を開始します ----PETA2が1回目の実行を開始します--自動入力値[10 100 20 35 120]- 点数: 合計:10点 平均:10.00点 ----PETA2が2回目の実行を開始します--自動入力値[10 50 0 -1]- 点数: 合計:10点 平均:10.00点 ▲実行を終了しました

すると、全ての回答が全文表示されます。
noname#263834
noname#263834
回答No.2

whileの中6行目が、必ずbreakすることになってしまっているので、たとえば if(hito==5) break; にして、5人分の入力が終わったらbreakにすればいいんじゃないですかね。 思いついたものを勝手に書いてみました。参考になれば幸いです。 (入力値の範囲確認してませんが・・・) #include <iostream> int main(void) { int goukei=0; const int size=5; //配列の要素数 int ten[size]; //点数の配列 for(int i=0; i<size; i++){ //点数の入力 std::cout << "点数[" << i << "]?→"; std::cin >> ten[i]; } for(int i=0; i<size; i++){ //合計の計算 goukei += ten[i]; } printf("\n合計:%d点",goukei); printf("\n平均:%.2lf点", (double)goukei/size ); return 0; }

sairamnaomi
質問者

お礼

ご回答ありがとうございます! C言語を学習し始めて1週間程で、まだ習っていない表現がありますが、参考にさせていただきます。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.1

breakが2か所あります。 2番目のbreakはなぜ必要ですか?

sairamnaomi
質問者

お礼

breakを外したら、解決できました! ありがとうございました!

すると、全ての回答が全文表示されます。

関連するQ&A