コンパイルエラーがでてしまいます 。どうすればいいですか?エラー内容はおそらくポインターのことですがどこをいいのかがわかりません。
プログラム内容
キーボードから数値を3つ入力すると、それらの平均を計算して 表示するとともに、入力した値自体と、入力値から平均値を引き算した結果を表示 (+-符号付き、小数点以下第3位まで) するプログラムです。
特徴。
- キーボードからの入力と結果表示は、main側で行う。入力される値は浮動小数点数とする。
- 平均値の計算は、関数 ave3() の中で行う。この関数はmain側から 3つのデータを引数として受け取り、それらの平均を計算し、結果を戻り値として返す。
0. 入力データから平均値を引き算する操作は、関数 sub3() の中で行う。この関数はmain側から3つのデータに関する情報と、先に計算した平均値を 引数として受け取り、3つのデータそれぞれから平均を引き算する。 この関数は戻り値無しとし、main側では関数の中で変更された3つの値をそのまま出力する。
source
1#include <stdio.h> 2 3double ave3(double, double, double); 4double subave3(double *,double *, double *); 5 6int main() 7{ 8 double a, b, c, ave; 9 10 printf("3つ値を入力してください:\n"); 11 scanf("%lf%lf%lf", &a, &b, &c); 12 13 ave = ave3(&a, &b, &c ); /* 関数の呼び出し */ 14 15 printf("平均: %.3f\n", ave); 16 printf("元のデータ: %+.3f %+.3f %+.3f\n", a, b, c); 17 18 subave3(double *x, double *y, double *z); 19 20 printf("平均差し引き後のデータ: %+.3f %+.3f %+.3f\n", a, b, c); 21 22 return 0; 23} 24 25/* 平均を計算する関数。データから平均値の引き算も行う。 */ 26double subave3(double x, double y, double z) 27{ 28 x -= ave; /* 各データから平均を引き算する */ 29 y -= ave; 30 z -= ave; 31 32 a=x; 33 b=y; 34 c=z; 35 36 return a,b,c; 37} 38 39double ave3(double x, double y, double z){ 40 ave = (*x + *y + *z) / 3.0; 41 return ave; 42}
Error
1prog01.c: In function ‘main’: 2prog01.c:13:14: error: incompatible type for argument 1 of ‘ave3’ 3 13 | ave = ave3(&a, &b, &c ); /* 関数の呼び出し */ 4 | ^~ 5 | | 6 | double * 7prog01.c:3:13: note: expected ‘double’ but argument is of type ‘double *’ 8 3 | double ave3(double, double, double); 9 | ^~~~~~ 10prog01.c:13:18: error: incompatible type for argument 2 of ‘ave3’ 11 13 | ave = ave3(&a, &b, &c ); /* 関数の呼び出し */ 12 | ^~ 13 | | 14 | double * 15prog01.c:3:21: note: expected ‘double’ but argument is of type ‘double *’ 16 3 | double ave3(double, double, double); 17 | ^~~~~~ 18prog01.c:13:22: error: incompatible type for argument 3 of ‘ave3’ 19 13 | ave = ave3(&a, &b, &c ); /* 関数の呼び出し */ 20 | ^~ 21 | | 22 | double * 23prog01.c:3:29: note: expected ‘double’ but argument is of type ‘double *’ 24 3 | double ave3(double, double, double); 25 | ^~~~~~ 26prog01.c:18:11: error: expected expression before ‘double’ 27 18 | subave3(double *x, double *y, double *z); 28 | ^~~~~~ 29prog01.c:18:3: error: too few arguments to function ‘subave3’ 30 18 | subave3(double *x, double *y, double *z); 31 | ^~~~~~~ 32prog01.c:4:8: note: declared here 33 4 | double subave3(double *,double *, double *); 34 | ^~~~~~~ 35prog01.c: At top level: 36prog01.c:26:8: error: conflicting types for ‘subave3’ 37 26 | double subave3(double x, double y, double z) 38 | ^~~~~~~ 39prog01.c:4:8: note: previous declaration of ‘subave3’ was here 40 4 | double subave3(double *,double *, double *); 41 | ^~~~~~~ 42prog01.c: In function ‘subave3’: 43prog01.c:28:8: error: ‘ave’ undeclared (first use in this function); did you mean ‘ave3’? 44 28 | x -= ave; /* 各データから平均を引き算する */ 45 | ^~~ 46 | ave3 47prog01.c:28:8: note: each undeclared identifier is reported only once for each function it appears in 48prog01.c:32:3: error: ‘a’ undeclared (first use in this function) 49 32 | a=x; 50 | ^ 51prog01.c:33:3: error: ‘b’ undeclared (first use in this function) 52 33 | b=y; 53 | ^ 54prog01.c:34:3: error: ‘c’ undeclared (first use in this function) 55 34 | c=z; 56 | ^ 57prog01.c: In function ‘ave3’: 58prog01.c:40:3: error: ‘ave’ undeclared (first use in this function); did you mean ‘ave3’? 59 40 | ave = (*x + *y + *z) / 3.0; 60 | ^~~ 61 | ave3 62prog01.c:40:10: error: invalid type argument of unary ‘*’ (have ‘double’) 63 40 | ave = (*x + *y + *z) / 3.0; 64 | ^~ 65prog01.c:40:15: error: invalid type argument of unary ‘*’ (have ‘double’) 66 40 | ave = (*x + *y + *z) / 3.0; 67 | ^~ 68prog01.c:40:20: error: invalid type argument of unary ‘*’ (have ‘double’) 69 40 | ave = (*x + *y + *z) / 3.0; 70 | ^~ 71
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。