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

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

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

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

Q&A

1回答

560閲覧

C 入力したデータの平均値を求めて出力する関数

takemark20

総合スコア9

C

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

0グッド

0クリップ

投稿2018/07/17 09:52

前提・実現したいこと

C言語で、入力したデータの平均値を求めて出力する関数のプログラムを作っています。

発生している問題・エラーメッセージ

C

1test.c:13:8: error: conflicting types for 'avg' 2 double avg(double d[]) 3 ^ 4test.c:3:8: note: previous declaration of 'avg' was here 5 double avg(double);

このようなエラーが出てきます。

該当のソースコード

C

1/* test.c */ 2#include<stdio.h> 3double avg(double); 4 5int main() 6{ 7 double ave, a; 8 a = avg(ave); 9 printf("平均値は%.2fです。\n", a); 10 return 0; 11} 12 13double avg(double d[]) 14{ 15 int i = 0, cnt = 0; 16 double sum = 0, aa; 17 do{ 18 printf("データを入力してください > "); 19 scanf("%lf", &d[i]); 20 cnt++; 21 sum = sum + d[i]; 22 }while(d[i++]!=-1); 23 sum = sum + 1; 24 cnt = cnt - 1; 25 aa = sum / cnt; 26 return aa; 27} 28

試したこと

double avg()内を色々変えてみましたができませんでした。


どうしたらよいのでしょうか?

関数の考え方のコツなども教えていただけるとありがたいです。

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

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

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

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

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

guest

回答1

0

プロトタイプ宣言を書き換えねばなりません。

C

double avg(double);

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

C

1double avg(double[]);

そもそもこの引数は必要ないんじゃないかとも思いますが。


関数の考え方のコツなども教えていただけるとありがたいです。

関数の役割を強く意識することが大事です。
関数avgには平均値を求めることだけの責任を持たせ、入力部分は外に切り出した方が良いと思います。

文法面については繰り返し基礎を見直して勉強するしかないです。

投稿2018/07/17 09:59

編集2018/07/17 10:16
LouiS0616

総合スコア35658

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

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

takemark20

2018/07/17 14:18

ありがとうございます。 しかしそうすると test.c:8:10: error: incompatible type for argument 1 of 'avg' a = avg(ave); ^ test.c:3:8: note: expected 'double *' but argument is of type 'double' double avg(double[]); こう出てしまいます。
LouiS0616

2018/07/17 14:22

double ave[100] といった風に、配列として宣言すれば良いです。 100要素以上値を入力した際には領域外アクセスが発生してしまいますが。 しかし、そもそも変数aveを引数として渡す意味がよく分からないです。 関数内で標準入力を行うなら配列は関数内で用意すれば良いのでは。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問