質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
C

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

Q&A

解決済

4回答

1270閲覧

2つの実数の入力待ちをしたあと平均を出力し、さらに3つ目の実数を入力待ちをして、合計3つの平均を出力するプログラム

KYUURI

総合スコア46

C

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

0グッド

0クリップ

投稿2020/06/09 16:45

2つの実数の入力待ちをしたあと平均を出力し、さらに3つ目の実数を入力待ちをして、合計3つの平均を出力するプログラム+=と/(割り算)は1度のみ使用できる


1つ目の実数:3
2つ目の実数:7
平均は 5
3つ目の実数:2
平均は 4
このように出力したいが、割り算が一回のみの使用しかできないので、どうしたらいいでしょうか。

#include <stdio.h>

int ave(int)
int main(void)
{
int a,b;
int sum;

printf("1つ目の実数:\n");
scanf("%d",&a);
printf("2つ目の実数:\n");
scanf("%d",&b);

sum = a + b;

printf("平均は %.6f. \n",(double)sum/2);

return 0;
}

int ave(int)
printf("3つ目の実数.:\n");
scanf("%d",&c);

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

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

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

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

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

guest

回答4

0

実数の入力待ちに int a, b; はおかしいのではありませんか?

次のコードは、+= と / を 1回だけ使っていますが、
出題者の意図に合致するものかどうかは分かりません。

C

1#include <stdio.h> 2 3int main(void) 4{ 5 double a, b, c, sum; 6 7 printf("1つ目の実数: "); 8 scanf("%lf", &a); 9 printf("2つ目の実数: "); 10 scanf("%lf", &b); 11 sum = a + b; 12 printf("平均は %g\n", sum * 0.5); 13 printf("3つ目の実数.: "); 14 scanf("%lf", &c); 15 sum += c; 16 printf("平均は %g\n", sum / 3); 17}

投稿2020/06/10 00:55

kazuma-s

総合スコア8224

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

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

0

ベストアンサー

C

1#include <stdio.h> 2 3double mean(double data[], int n) { 4 /* data[0]~data[n-1]の総和をnで割った値を返す */ 5 /* 中身はアナタが書いてね♪ */ 6} 7 8int main() { 9 double data[3]; 10 printf("1つ目の実数: "); 11 scanf("%lf", &data[0]); 12 printf("2つ目の実数: "); 13 scanf("%lf", &data[1]); 14 printf("平均は %g\n", mean(data,2)); 15 printf("3つ目の実数 : "); 16 scanf("%lf", &data[2]); 17 printf("平均は %g\n", mean(data,3)); 18 return 0; 19}

投稿2020/06/10 02:06

episteme

総合スコア16612

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

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

0

c

1#include <stdio.h> 2 3int main(void) 4{ 5 double a, b, c, sum; 6 7 printf("1つ目の実数: "); 8 scanf("%lf", &a); 9 printf("2つ目の実数: "); 10 scanf("%lf", &b); 11 sum = a + b; 12 printf("平均は %g\n", sum * 0.5); 13 printf("3つ目の実数 : "); 14 scanf("%lf", &c); 15 printf("平均は %g\n", (sum-(-c)) / 3); 16}

投稿2020/06/10 01:02

ozwk

総合スコア13553

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

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

0

おそらく、共通点を見つけ出して、一般化し、ループで処理せよという問題だと思われます。
まずは、処理の中から繰り返しになってしまっている無駄な部分を探してみて下さい。

投稿2020/06/09 17:19

amiya

総合スコア1218

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

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

KYUURI

2020/06/09 17:30

return0以降でしょうか
amiya

2020/06/09 17:38

まずは、問題の縛りは無視して、普通に作ってみてください。
KYUURI

2020/06/09 18:10 編集

#include <stdio.h> int ave(int); int main(void) { int a,b,c; int sum; int n; printf("1つ目の実数:\n"); scanf("%d",&a); printf("2つ目の実数:\n"); scanf("%d",&b); sum = a + b; printf("平均は %.6f. \n",(double)sum/2); printf("3つ目の実数.:\n"); scanf("%d",&c); n = sum + c; printf("平均は %.6f. \n",(double)n/3); return 0; }
KYUURI

2020/06/09 18:12

これだと、2つ入力待ちにしたことになりませんよね… 前のaとbの呼び出し方がわかりませんでした
amiya

2020/06/09 18:14

その中から、構造的に繰り返しになってて、2回も同じようなこと書くの面倒くさいなーって部分を囲みます。 その中の微妙に違う部分を変数等で置き換えて、中身を全く同じ記述で済ませられないかな?と考えます。 もし、全く同じ記述に落とし込めるのであれば、それはループや関数で処理できるようになります。 こういうのを、一般化とか言います。
KYUURI

2020/06/09 18:19

sum = a + b;とn = sum + c; printf("平均は %.6f. \n",(double)sum/2);とprintf("平均は %.6f. \n",(double)n/3); でしょうか
amiya

2020/06/09 18:22

その式単体というよりは一連の流れ丸ごとです。 その式は差異の部分に当たるので、うまく同じ形にすることで、一般化が可能になります。
KYUURI

2020/06/09 18:31

int a[2]; printf("1つめの実数.:\n"); scanf("%d",&a[0]); printf("2つめの実数.:\n"); scanf("%d",&a[1]); printf("3つめの実数.:\n"); scanf("%d",&a[2]); こんな感じでしょうか
amiya

2020/06/09 18:45

int a[2]でアクセス出来るのはa[1]までです。 それでも良いのですが個別の数は後から使わないのでわざわざ配列に残しておく必要は無いです。 必要なのは合計なので、よくある、○○までの和を求めよ的なやり方を思い出してみてください。
KYUURI

2020/06/09 18:48

for(i=1;i<=3;i++){ sum+=i; でしょうか
amiya

2020/06/09 18:51

そういう感じです。 合計と足す数という括りで考えれば今回も同じ構造です。
KYUURI

2020/06/09 19:07

#include <stdio.h> int ave(int); int main(void) { int a; int sum=0; for(a=1;a<=3;a++) sum+=a; printf("1つ目の実数.:\n"); scanf("%d",&a); printf("2つめの実数:\n"); scanf("%d",&a); printf("平均は %.6f. \n",(double)sum/2); printf("3つ目の実数.:\n"); scanf("%d",&a); printf("平均は %.6f. \n",(double)sum/3); return 0; } ここから分かりません…
KYUURI

2020/06/09 19:09

これじゃ 入力した実数関係ないですよね…
amiya

2020/06/09 19:22

欲しいのは入力した数では無く、その合計ですから、合計を保存する事を考えてみると良いです。 (というか元々の方にはそれがあったのになぜか消されちゃってます^^;)
KYUURI

2020/06/09 19:29

sum+=a+b; でしょうか
amiya

2020/06/09 19:31

bはもはや存在していないのでは。 式の意味から考えて、これは何をしているのか? といったん日本語で考えると分かりやすいかもしれません。
KYUURI

2020/06/09 19:35

1つ目のaと2つ目のaを足したいです
amiya

2020/06/09 19:46

井戸から桶を使って水を汲みます。 汲み上げるための桶は一つしかありません。 一回引き上げる毎に一杯分の水が汲めます。 3杯分の水を汲んで持って帰るためにはどうしたら良いでしょう? というのと同じ問題です。 1回目の桶の水と2回目の桶の水を合わせるには……?
KYUURI

2020/06/09 19:47

大きい桶に入れる でしょうか
amiya

2020/06/09 19:51

そうです。そこでコード上にある大きな桶とは?という話になります。
KYUURI

2020/06/09 19:52

sum でしょうか
amiya

2020/06/09 19:59

一杯ずつ汲んでは入れると、考えると処理が一般化しやすい形になります。 ループの雛形は最初の縛りを無視して〜の時に作ったものが参考になります。 同じ事を繰り返している部分をひとブロックに纏めます。
KYUURI

2020/06/09 20:01

質問の途中ですが、そろそろ寝ないといけないので、寝ます すいません こんな時間までありがとうございました
amiya

2020/06/09 20:05

了解です。おやすみなさい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問