• ベストアンサー

かなりの初心者なのですが...

Borlandのコンパイラーを使っているのですが、 以下のコードを書いたときに #include <stdio.h> #include <math.h> main() { double square(); double x,y; x = 1.5; y = square(x); printf("%lf\n",y); } double square(x); double x; { return(x*x); } 「エラー E2258 ここには宣言が必要だが見つからない(関数 square )」と出てコンパイルに失敗します。。例文のとおりに入力したのですがなぜこうなるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こんばんは。 まず、 > double square(x); > double x; > { > return(x*x); > } の部分がおかしいですね。 double square(double x){ return (x*x); } このようにしてみてください。 あと、main関数の double square(); はいりません。 そして、このプログラムの場合、 関数をmainの後に書いているので、 関数宣言というものを行う必要があります。 宣言の方法は、main関数の前に、 宣言したい関数を以下の方法で記述します。 [関数の型] 関数名( 引数の型 [,...]); 今回の場合、 double square(double x); と記述します。 また、main関数の前に関数の定義、宣言を まとめる方法もあります。 二通りのプログラムを示します。 ---- 関数宣言ver.----- #include <stdio.h> #include <math.h> double square(double x); //これ、関数宣言 main(){ double x,y; x = 1.5; y = square(x); printf("%lf\n",y); } double square(double x){ return (x*x); } ------関数宣言定義同時ver.------- #include <stdio.h> #include <math.h> double square(double x){ //関数宣言と定義 return (x*x); } main(){ double x,y; x = 1.5; y = square(x); printf("%lf\n",y); } ------------------- スペルミス等があるかもしれませんので、 コピーはオススメできません。 参考になれば幸いです。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#include <stdio.h> #include <math.h> void main(void) { double square(double x); double x,y; x = 1.5; y = square(x); printf("%lf\n",y); } double square(double x) { return(x*x); } ------------------------------------------- 上記のようにしてみて下さい。 >double square(); ()の中に引数の型を書く必要があります。 >double square(x); ;が余計です。 また、この書き方はかなり古い書き方なので、例の様に変更した方が良いです。 >main() 型を省略するとintを返すものとされます。 何も返さない場合は void main() にします。

回答No.1

#include <stdio.h> #include <math.h> main() { double square(); double x,y; x = 1.5; y = square(x); printf("%lf\n",y); } // mainが終了 double square(x); // xを宣言する前に使用? double x; // ここでxを宣言? { // 2乗を返す関数?がない return(x*x); } # あとはC++ならクラスを使おう…

関連するQ&A

  • 初心者

    #include <stdio.h> main() {     printf("hello,world\n"); } と初歩のプログラムをコンパイルしたのですが 「関数は値を返すべき(関数 main)」とでます 本見て試しに書いたのでどこが間違ってるのかわかりません。 よろしければ教えてください。。 使用しているコンパイラはborland C++ Turbodebu です

  • WindowsでコンパイルできるがUNIXではできない

    下記のプログラムは、2^-0.94を計算するものです。 このプログラムはwindows2000のマシンでコンパイルできるのですが、UNIXのマシンだと Unresolved text symbol "pow" というエラーがでてコンパイルできません。 UNIXのマシンは「cc ファイル名」でコンパイルを実行します。 どうすればコンパイルできるようになるのでしょうか。お手数ですが、教えてください。よろしくお願いします。 ※windows2000マシンのコンパイラ:Borland C++ Compiler 5.5 #include <stdio.h> #include <math.h> int main() { int a; double b,c; a=2; b=-0.94; c=pow(a,b); printf("%lf\n",c); return 0; }

  • C言語のプログラミングがうまくいきません!

    先日のプログラムを作り直しました。アドバイスのおかげでエラーは減りましたが、まだ完ぺきではないようです。恐らく、elseのところがいけないと思うのですが、どうしたらいいか分かりません。 ご指摘お願いします。 #include <stdio.h> #include <math.h> void main(void) { double x ,y ,z ,error ,menseki ; double ans; printf("x ?"); scanf("%lf", &x); printf("y ?"); scanf("%lf", &y); printf("z ?"); scanf("%lf", &z); if(x<y+z || y<x+z || z<x+y) { ans=(x+y+z)/2; menseki=sqrt(ans*(ans-x)*(ans-y)*(ans-z)); } if(x==y && y==z && z==x) { printf("正三角形です"); printf("面積は%lfです" , menseki); } else if(x==y || y==z || z==x) { printf("二等辺三角形です"); printf("面積は%lfです" , menseki); } else { printf("三角形です"); printf("面積は%lfです" , menseki); } else { printf("error"); } }

  • プログラムの作成

    Cで、キ-ボ-ドから整数を1個(mとする)、実数を1個(xとする)それぞれ入力し、 S=Σ(n=0からmまで)1/2n+1×(x-1/x+1)^2n+1 の値を求めるプログラムを作ってみたのですが、あってるかどうかわかりますか? #include<stdio.h> #include<math.h> main() { double y=0; int i,m,x; printf(\" Input m: \") scanf(\"%lf\", &m); printf(\" Input x: \") scanf(\"%lf\", &x); for(i=0; i <= m; i++) { y += 1/(2*i+1)*pow((x-1)/(x+1),2*i+1) } printf(\" S = %d\n\", y) }

  • C言語で乱数がうまく効きません。下記のソースでコンパイルして実行すると

    C言語で乱数がうまく効きません。下記のソースでコンパイルして実行すると結果が130固定となってしまいます。 #include <stdio.h> #include <stdlib.h> int main(void){ int x; x = rand(); printf("%d",x); return 0; } 使っているコンパイラはBorland C++ 5.5.1です。何か間違いでもあるのでしょうか?よろしくお願いします。

  • 値の渡し方?(初心者)

    以前質問したプログラムについて、新たに質問です。 メインプログラムと、関数プログラムを組みました。 関数の中では、print文を使うと計算は正しく行われていて、結果が正しいことが分かりました。 でうが、メイン文の出力では、どこにも出てこない変な値が出てきてしまいます。 値の渡し方がおかしいのでしょうか? 誰か、アドバイスをお願いします。 ***以下プログラムです。*** #include <stdio.h> #include <math.h> double gamma(double x) { double c[9],y,a,r,b,s,z; int i; a=1.; r=1.; c[1]=5.771916e-01; c[2]=9.882058e-01; c[3]=8.970569e-01; c[4]=9.182068e-01; c[5]=7.567040e-01; c[6]=4.821993e-01; c[7]=1.935278e-01; c[8]=3.586834e-02; printf("0 %f\n",x); while(1){ if(x>2.){ x=x-1.; a=a*x; printf("1 %f %f\n",x,a); } else if(x<1.){ a=a/x; x=x+1.; printf("2 %f %f\n",x,a); } else{ break; } } x=x-1.; for(i=1;i<9;i++){ b=(double)(i); s=(c[i]*((double)(pow(-1.,b)))*((double)(pow(x,b)))); printf("3 %d %f\n",i,c[i]); r=r+s; } y=a*r; printf("4 %lf\n",y); return y; } main() { double x,y; printf("数字を入力してください。"); scanf("%lf",&x); printf("メインプログラム x= %lf \n",x); y=gamma(x); printf("x= %f y= %f\n",x,y); }

  • 極座標から直交座標に変換

    極座標を直交座標に変換するプログラムです。 ptor関数を使って作成するのですが、上手く実行できません。 度からradに変換の仕方も良く分かりません。 どこが間違っているのか教えてください。 #include <stdio.h> #include <math.h> #define PI 3.14159265358979323846 struct rect{ double x; double y; }; struct pole{ double r; double theta; }; double po2(double *x, double *y, double r, double theta ) { double rad; rad = theta ; x = r * cos(rad); y = r * sin(rad); } int main(void) { double x, y; double r, theta; printf("r = "); scanf("%lf",&r); printf("theta = "); scanf("%lf",&theta); printf("(r:%f, theta:%f) => (x:%f, y:%f)\n", r, theta, x, y); return(0); }

  • 定積分のプログラミングについて

    刻み幅dxを入力し、f(x)=4/(1+x^2)を0~1まで定積分するというプログラムを作ったんですが、なぜか、刻み幅を入力してENTERを押すと、 ずら~~~~~っと無限に結果の文字列が出てきてしまいます。 書いたプログラムを載せるので、間違っている箇所を教えてもらえませんか。お願いします。 #include <stdio.h> #include <math.h> double f(double m); main(){ double x,F,dx; printf("Numerical integration of y=4/(1+x^2).\n"); /*刻み幅の入力*/ scanf("%lf,&dx:"); /*aとbと刻み幅*/ printf("The lowwer bound:0.0\n"); printf("The upper bound:1.0\n"); printf("The meth width:dx\n"); /*関数*/ for(x=0.0;x<1.0;x+=dx) { F=f(x); /*計算結果を出力*/ printf(" f(%lf)= 4/(1+x^2) =%lf\n",x,F); } } double f(double m) { double y; y=4/(1+m*m); return y; }

  • log(0)と-1.#INF00Pの関係

    #include<stdio.h> #include<math.h> main() { double y; y=log(0); printf("%lf",y); return 0; } 上のプログラムを実行すると -1.#INF00P という結果が出力されます。 これは一体何なのでしょうか?値なのですか? http://www.okweb.ne.jp/kotaeru.php3?q=648430 ではlog(0)の影響で 1.#INF00 という結果になっているようですが、何が違うのでしょうか?

  • 漸化式のプログラム

    n=100としてn+1個の点(Xj,Yj) (j=1,2,3・・n)はどのようなグラフになるか?ただし、h=1/n, Xj=jh, Y(j+1)=Yj+hYj, Y(0)=1である。 このプログラムを教えてください。 #include <stdio.h> #include <math.h> main() { double pi, x, y; int i; pi=4*atan(1); x=1/100; y=1; for(i = 1; i<=100; ++i){ x=i*1/100; y[n+1]=y[n]+1/100*y[n]; printf("%lf %lf\n", i, x, y,); } } ではだめなんでしょうか?

専門家に質問してみよう