🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

2868閲覧

似たような質問で申し訳ないです。while文を使った平均値のプログラム

-taku-

総合スコア4

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2020/11/23 12:01

while文を用いて平均値以下の値を求めるプログラムにおいて、0以下の値が入力されたときにそれまでの値の平均を取るようにしたいのですが、どのように組めばよろしいでしょうか。(0以下は含まない)
見当がつかないので、教えていただけると助かります。
とりあえず、試しに考えてみたところ、以下のようになりました。
正直やってることが全然違っていると思いますが、そこも含めご指摘お願いします。
※while文の使い方,breakの使い方がいまいちわかっていない状況です。

#include<stdio.h>
#define NUM 10000

int main(void)
{
int Num=0;
double test[NUM];
double dnumSum = 0;
double dnumAve = 0;
int i=1;
int j;

printf("データの数を入力してください。\n"); scanf("%d", &Num); while (Num <= 0) { printf("入力に誤りがあります。入力し直してください。\n"); scanf("%d", &Num); } while (test[i]<0) { printf("データの値を入力してください。\n"); scanf("%lf", &test[i]); i++; break; dnumSum += test[i]; } dnumAve = (double)dnumSum / Num; for (j = 0; j < Num; j++) { if (test[j] <= dnumAve) { printf("平均値以下のデータは%fです。\n",test[j]); } } return 0;

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

while(式) {} の使い方、、
--> 式が真の間、{}の中を繰り返し、実行します。

while (test[i]<0) {

test[i]が真の間、実行なのですが、最初のtest[i]の値が設定されていないので、結果か不明ですね。 多分、Numだけ繰返したいのでしょうから、
--> while (i < Num)でしょうか。
なお、iの初期設定は、0にすべきでしょうか。 (1になってる)

入力が、0より小さい場合なので、break は、以下のようでしょうか?
if (test[i] <= 0) break; (i++はこの後にする)

また、平均を求めるのに、

dnumAve = (double)dnumSum / Num;

は、入力が 0以下の場合、不正となるので、
dnumAve = (double)dnumSum / i; でしょうか?

ざっと気づいたところで。
ただし、最初の入力が 0以下の場合がこれでは考慮されていませんが、とりあえず。

投稿2020/11/23 12:23

pepperleaf

総合スコア6385

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

-taku-

2020/11/23 12:34

すみません、先にベストアンサーを押してしまったのですが、デバックで上手く表示されませんでした。何か他にも問題点があるということなんでしょうか?
pepperleaf

2020/11/23 12:34

上記だと漏れがあり、編集したら、エラーとなったので、こちらへ > (i++はこの後にする) dnumSum += test[i]; の後でないとだめですね。 > for (j = 0; j < Num; j++) { ここの Numも 途中で抜けた場合を考慮し、 iとすべきでしょう。
-taku-

2020/11/23 12:41

無事解決しました。本当に助かりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問