• 締切済み

プログラム エラー BCC Developer

 BCC DeveloperでC言語のプログラミングの勉強をしようとしているのですが、エラーの原因が分かりません  初心者で、この文に関しても本の丸写しなのですが(”河西メソッド C言語プログラミング学習の方程式”という本です)  エラー内容は Error 3-10.rc 4 10: Expecting filename or BEGIN ** error 20018 ** deleting Debug\\3-10.res Make End !! (Elapsed time 0:00.120) というものです 本文は /* 3-10 */ #include<math.h> float EPS=1e-8 float s,d,e,x=60*3.14159/180; int k, flag=0; s=1.0;e=1.0; for(k=1;k<=200;k=k+2){ d=s; e=-e*x*x/(k=k+2){ s=s+e; if(fabs(s-d)<=EPS*fabs(d)){ flag=1; break; } } if(flag==1) printf(\"%f\\n\",s); else printf(\"収束しない\\n\"); } です cos(X)のテーラー展開に関するものです この原因をご指摘いただければ幸いです

みんなの回答

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

C言語ではmain関数が必要。

関連するQ&A

  • BCC Devaloper のエラーについて

    C言語の初心者で、BCC Developerで自習しているのですが 参考書に書いてあるプログラミングを打ってもエラーが出てその原因が分かりません 本文は /* 3-10 */ #include<math.h> float EPS=1e-8 float s,d,e,x=60*3.14159/180; int k, flag=0; s=1.0;e=1.0; for(k=1;k<=200;k=k+2){ d=s; e=-e*x*x/(k=k+2){ s=s+e; if(fabs(s-d)<=EPS*fabs(d)){ flag=1; break; } } if(flag==1) printf("%f\n",s); else printf("収束しない\n"); } というもので、コサインのテイラー展開が収縮するかを見極めるものです エラー内容は Error 3-10.rc 4 10: Expecting filename or BEGIN ** error 20018 ** deleting Debug\3-10.res Build End !! (Elapsed time 0:00.791) です  よろしくお願いします

  • sinのプログラム

    #include<stdio.h> #include<math.h> #define NMAX 100 main(){ float eps,x,t,s; int n; printf("Taylor series\n"); scanf("%g",&eps); printf("eps=%g\n",&x); for(;scanf("%g",&x)!=EOF;){ printf("\nx=%g\n n\tt\t\ts\n",x); t=s=1; for(n=1;n<NMAX;n++){ t*=X/n; s+=t; printf("%2d %15.6e %15.6e\n",n,t,s); if(fabs(t)<eps) break; } if(n>=NMAX) printf("---not converged ---\n); printf("exp(%g)=%g\tn=%d\n",x,s,n); } return(0); } これはeの級数展開をもとめるプログラムなのでが、これをsinの級数展開のプログラムに改造しろという問題があります。 sinのn乗の項を求めてeの部分と置き換えてやってみたのですができません。 どなたかわかる方がいましたら、教えてください。

  • このグラフが書きたいんですが。。

    #include <stdio.h> #include <math.h> #define KMAX 20 void eval(float x,float *f,float *df) { float e; e= exp(-x); *f= x-e; *df= 1+e; return; } void main() { float x, eps, f, df, d; int k; scanf("%g%g", &x, &eps); printf("Solution of f(x)=x-eps(-x)=0\n"); printf("Convergence criterion |f(x)|<%G\n\n", eps); printf(" k\tx\t\tf(x)\t\tf'(x)\t\tcorrection\n"); for(k=0;k<KMAX;k++){ eval(x, &f, &df); d= -f/df; printf("%2d %15.6e %15.6e %15.6e %15.6e\n", k, x, f, df, d); x += d; if(fabs(f)<eps) break; } if(k>=KMAX) printf("divergent?\n"); printf("\nroot=%g\n", x); } この解における収束状況をグラフを書いて確かめたいのですがどうやって、何で書いたらいいのかわかりません。教えてください!このプログラムはC++で書いたNewton法です。

  • このプログラムがうまく作動しないのですが・・・

    #include <stdio.h> #include <math.h> #include <stdlib.h> float f(float x); float f(float x) { return (float)(x-sin(x)/cos(x)); } void main() { float x1,x2,eps,f1,f2,xm,ff; int i; printf("Bisection method\n\n"); for(;scanf("%g%g%g",&x1,&x2,&eps)!=EOF;){ f1= f(x1); f2= f(x2); if(f1>0){ xm= x1; x1= x2; x2=xm; ff= f1; f1= f2; f2=ff; } printf("\nFinding a root between x1=%g and x2=%g\n", x1, x2); printf("f(x1)=%g f(x2)=%g eps=%g\n", f1, f2, eps); printf("\tx1\t\tx2\t\txm\t\tf(xm)\n"); if(f2<0){ printf("????\n"); continue; } i= 0; for(;fabs(x1-x2)>=eps;){ xm=(x1+x2)*((float)rand()/(float)RAND_MAX) ff= f(xm); i++; printf("%2d %15.6e %15.6e %15.6e %15.6e\n",i, x1, x2, xm, ff); if(ff<0) x1= xm; else x2= xm; } printf("A root found between %g and %g\n", x1, x2); } } f(x)=x-tanx=0の解のうち3つを表示させるためにランダムサーチのプログラムを上記のように書いたつもりなんですがうまく作動しません。どこをどう直したらいいのでしょうか、教えてください。

  • 二分法のプログラム

    関数x^3-7x^2-6x+2を二分法で解くプログラムを作ったのですが、エラーが出てコンパイルできません。訂正箇所を教えて下さい。 宜しくお願い致します。 #include<stdio.h> #include<math.h> #define EPSILON 0.1E-5 #define TURE 1 #define FALSE 0 int kansu(int x); void Nibunho(left,right,sol,flag); double left,right; int flag; int main(void) { printf("区間の左端と右端は?\n"); scanf("%lf %lf",&left,&right); flag=FALSE; Nibunho(left,right,&root,&flag); if(flag) printf("解 = %e (繰り返し回数 = %d)\n",root,k); else { printf("入力した範囲で解は求まりませんでした。\n"); printf("f(%e) = %e \n",root,k); } return 0; } int kansu(int x) { int f(double x) f(x)=x*x*x-7.0*x*x-6.0*x+2.0; return(f(x)); } void Nibunho(left,right,sol,flag) { double left,right,*sol; int *flag; double a,b,c,fa,fb,fc; k=0; a=left; b=right; do { k++; c=(a+b)/2.0; fc=f(c); fa=f(a); fb=f(b); if(fabs(fc)<1.0e-10) { a=c; b=c; *flag=TRUE; } else { if( (fa * fc < 0.0) || (fb * fc < 0.0) ) { *flag = TRUE; if( (fa*fc) < 0.0 ) b=c; else a=c; } else { if( fabs(fa) > fabs(fb) ) a=c; else b=c; } } } while((b-a)>EPSILON) *sol=(a+b)/2.0; }

  • どこがおかしいのでしょうか??

    下のプログラムはsinの級数展開を求めるプログラム…を書いたつもりなんですが計算機と違う値がでてしまい困っています。どこをどう直せばいいのか教えてもらえませんでしょうか??それともこのプログラムではうまくいかないのでしょうか?返答をお願いします。 #include <stdio.h> #include<math.h> #define NMAX 100 main() { float eps,x,t,s; int n; printf("Taylor series\n"); scanf("%g", &eps); printf("eps=%g\n", eps); for(;scanf("%g", &x)!=EOF;){ printf("\nx=%g\n n\tt\t\ts\n", x); t=s=x; for(n=1;n<NMAX;n++){ t*=-x*x/((2*n+1)*(2*n)); s+=t; printf("%2d %15.6e %15.6e\n", n, t, s); if(fabs(t)<eps) break; } if(n>=NMAX) printf("--- not converged ---\n"); printf("exp(%g)=%g\tn=%d\n", x, s, n); } return(0); }

  • C言語で表記についの質問です

    C言語です。 exp(x)のテイラー展開を数値計算で求めるプログラムですが、 プログラムでは相対打ち切り誤差をEPSと定義しています。 具体的には double myexp(double x){ double EPS=1e-08; double s=1.0,e=1.0,d; int k; for(k=1;k<=200;k++){ d=s; e=e*x/k; s=s+e; if(fabs(s-d)<EPS*fabs(d)) return s; } と上の様に書かれています。 わからない点は上記のプログラムでEPS=1e-08のeは10の意味をしているでしょうか?EPS=10^-8理解 してよろしいでしょうか? またEPSのeと二つ目のe=1.0は全く異なるものでしょうか。 ご教授よろしくお願いします。

  • ガウスのの単純消去法のプログラムです。

    ガウスのの単純消去法のプログラムです。 前進消去の第k段階が終わった段階でaij,biが表示されるようにしたいんですがどうすればいいでしょうか↓ よろしくお願いします。 #include<stdio.h> #include<stdlib.h> #include<math.h> #define ERROR -1 #define EPS 1.0e-15 int gausssimp(double *, double *, double *, int); int main(void) { double *a,*b,*x,val; char s[32]; int i,j,n,result; printf("Input size n="); gets(s); sscanf(s,"%d",&n); if((a=(double *)calloc(n*n,sizeof(double)) ) == NULL){ fprintf(stderr,"Memory allocation error\n"); exit(-1); } if((b=(double *)calloc(n,sizeof(double))) == NULL){ fprintf(stderr,"Memory allocation error\n"); exit(-1); } if((x=(double *)calloc(n,sizeof(double))) == NULL){ fprintf(stderr,"Memory allocation error\n"); exit(-1); } /* A,b の成分を入力 */ printf("----- A -----\n"); for(i=0; i<n; i++){ for(j=0; j<n; j++){ printf("a(%2d,%2d)=",i+1,j+1); gets(s); sscanf(s,"%lf",&val); a[n*i+j]=val; } } printf("\n----- b -----\n"); for(i=0; i<n; i++){ printf("b(%2d)=",i+1); gets(s); sscanf(s,"%lf",&val); b[i]=val; } /* Gaussの単純消去法による求解 */ result = gausssimp(x,a,b,n); /* 解の表示 */ if(result == ERROR){ printf("ERROR occurs. pivot 0\n"); } else { printf("\n----- solution -----\n"); for(i=0; i<n; i++){ printf("x(%2d)=%.8e\n",i+1, x[i]); } } free(a); free(b); free(x); return 0; } int gausssimp(double *x, double *a, double *b, int n) { int i,j,k; double tmp,p,sum; /* step 1: 前進消去 */ /**** 追加 ****/ /* 前進消去の各段階を終えるごとに,式がどのように変化しているかわかるように表示する */ /**************/ for(k=0; k<n-1;k++){ if(a[n*k+k] == 0.0) { /* ピボットの値が0.割り算でエラーが起きる.*/ return ERROR; } else { /* k+1番目以降の式から x[k] の項を消去 */ for(i=k+1; i<n; i++){ p=a[n*i+k]/a[n*k+k]; for(j=0; j<n; j++){ a[n*i+j]=a[n*i+j]-p*a[n*k+j]; } b[i]=b[i]-p*b[k]; printf("a[%d %d]=%d b[%d]=%d",i,j,a[n*i+j]-p*a[n*k+j],i,b[i]-p*a[n*k+j]); ↑これではできませんでした。。。 } /**********************************/ } printf("k=%d\n",k); } /* step 2: 後退代入 */ for(k=n-1; k>=0; k--){ if(fabs(a[n*k+k]) < EPS) return(ERROR); sum=0.0; for(j=k+1; j<n; j++) sum+=a[n*k+j]*x[j]; x[k]=(b[k] - sum)/a[k*n+k]; } return 0; }

  • Gaussの消去法のプログラムなんですがこれを利用して、消去法による行

    Gaussの消去法のプログラムなんですがこれを利用して、消去法による行列式の計算プログラムをつくりたいのですが難しくてよくわかりません。。。 教えていただきたいです。 困ってるのでよろしくお願いします。 int gauss(double *x, double *a, double *b, int n) { int i,j,k,m; double tmp,p,sum; for(k=0; k<n-1;k++){ printf("---- Step %d ----\n",k+1); printf("-- before --\n"); for( m = k;m < n;m++){ printf("%lf\n",a[n * m + k]); } printf("-- --\n"); j = pivot(a,n,k); if(j == ERROR) { return ERROR; } else { if(j != k) { for(i=0; i<n; i++){ tmp = a[n*k+i]; a[n*k+i] = a[n*j+i]; a[n*j+i] = tmp; } tmp=b[j]; b[j]=b[k]; b[k]=tmp; } } printf("-- after --\n"); for( m = k;m < n;m++){ printf("%lf \n",a[n * m + k]); } for(i=k+1; i<n; i++){ p=a[n*i+k]/a[n*k+k]; for(j=0; j<n; j++){ a[n*i+j]=a[n*i+j]-p*a[n*k+j]; printf("a[%d %d]=%lf",i,j,a[n*i+j]); } b[i]=b[i]-p*b[k]; printf("b[%d]=%lf\n",i,b[i]); } printf("k=%d\n",k); /*--------------------------------------------------------------------------*/ } /* step 2: 後退代入 */ for(k=n-1; k>=0; k--){ if(fabs(a[n*k+k]) < EPS){ return(ERROR); } sum=0.0; for(j=k+1; j<n; j++){ sum+=a[n*k+j]*x[j]; } x[k]=(b[k] - sum)/a[k*n+k]; } return 0; } int pivot(double *a, int n, int k) { int i,m; double d; /* ピボットの探索 */ m = k; d = fabs(a[k*n+k]); for(i=k+1; i<n; i++){ if(fabs(a[n*i+k]) > d){ m = i; d = fabs(a[n*i+k]); } } if(fabs(d) < EPS) { return ERROR; } else { return m; } }

  • Cプログラミングについて

    私はBorlandのコンパイラを使ってCプログラミングをやっているのですが、以下のプログラムが実行できません。 どのようにすればコンパイラできるのか教えてください。 非線型方程式f(x)=x^3-x+1の根をニュートン法により求めよ。 /* *-------------------------- *   ニュートン法 * *-------------------------- */ #include <stdio.h> #include <math.h> #define f(x) ((x)*(x)*(x)-(x)+1) #define g(x) (3*(x)*(x)-1) #define EPS 1e-8 #define LIMIT 50 int main(void) { double x=-2.0,dx;   int k; for (k=1;k<=LIMIT;k++){ dx=x; x=x-f(x)/g(x); if(fabs(x-dx)<fabs(dx)*EPS){ printf("iteration=%d\n",k); printf("x=%f\n",x); break; } } if (k>LIMIT) printf("収束しない\n"); } コンパイルしようとすると以下のようなエラーが出ます。 エラー E2206 sample.c 18: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 sample.c 18: 不正な文字 ' ' (0x8140)(関数 main ) 警告 W8070 sample.c 32: 関数は値を返すべき(関数 main ) *** 2 errors in Compile *** お答えよろしくお願いします。

専門家に質問してみよう