• 締切済み

C言語 RC回路

この問題自分でやってみたんですが、 デバッグするとエラーになってしまいます。 C言語を独学で勉強しているもので、 どなたか教えてくださると助かります。 コンデンサと抵抗の回路がある. 10Vで充電されたコン デンサ(0.01F)の両極 を100Ωの抵抗でつな いだ場合,2秒後の電 圧をシミュレーション (時間の刻み幅0.0001 秒=1.0e-4)により求めなさい。 C=0.01[F], R=100[Ω] #include "stdafx.h" #include"math.h" void main() { double c,r=100,v=10; double f,h,e; long n; double l,i, di, t; c=0.01*f; h=1.0e-4; while(n<2000) { di = e * h / l; e -= i * h / c; i += di; n++; } printf ("input initial voltage [V] = "); scanf ("%lf", &e); }

noname#180992
noname#180992

みんなの回答

  • tsunji
  • ベストアンサー率20% (196/958)
回答No.3

初期化されてい変数があるのに、その変数を計算式で使っちゃダメでしょ。 とにかく全部の変数について初期化値を設定する。

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

どういうエラーが出るんでしょうか? >long n; >while(n<2000) nの値はwhile文にきた時の値っていくつでしょうか? 『値を設定していないローカル変数は不定値がとなっている』というのはご存じですが? whileループに入るまでに値が正常なのはr、v、hだけです。 cは不明な値に0.01を掛けているので、結果はやっぱり不定な値と同様です。 最近のコンパイラなら「未初期化の変数を参照している」という類の「警告」が出るかと思いますが……。 で、それらが終わった後で >printf ("input initial voltage [V] = "); >scanf ("%lf", &e); 変数eに値を取り込んでも意味がありません。

noname#180992
質問者

補足

良かったら正しいプログラムを書いていただけませんか?

  • chie65535
  • ベストアンサー率43% (8520/19368)
回答No.1

nが初期化されてないので、値は不定。 while(n<2000) の時点でnが2000以上の不定な値になってたなら、ループしない。 それと、ループの後で数値入力しても意味ない。 あと、計算結果を表示も何もしてないので、プログラム自体が無意味。

noname#180992
質問者

補足

良かったら正しいプログラムを書いていただけると助かります。

関連するQ&A

  • C言語 初心者です

    Cで計算して出た結果をエクセルに出力するやり方を教えて下さい。 #include<stdio.h> #include<math.h> double V(double x) { double pot=0.0; if (x >-1 && x<1) { pot=-2.0; } return(pot); } double F(double psi, double E,double x) { return(2.*(V(x)-E)*psi); } int main() { double E; int i,j; double psi,psi1,phi,phi1,x,dx; psi=0.01; phi=0.01; scanf("%1f",& E); x=-5.; i=5; dx=pow(10,-i)*10.0; for(j=0;j<pow(10,i);j++) { psi1=psi+phi*dx; phi1=phi+F(psi,E,x)*dx; x=x+dx; psi=psi1; phi=phi1; if((j+1)/5000*5000==j+1) { printf("x=%f phi= %f psi= %f\n",x,phi,psi); } } }

  • C言語における複素数の四則演算について

    複素数の四則演算(a+biとc+diの四則演算)について、for文を用いて表示するプログラムについて、???の部分に何を入れたらよいかわからず、うまく実行することができません。和・差・積・商の計算種別を入れるみたいなのですが、何を入れたらいいのかわかりません。 #include <stdio.h> void fukuso(double a,double b,double c,double d,double *e,double *f,int keisan); int main(void) { double a=4, b=8, c=4, d=3, e, f; int i; for(i=1;i<5;i++){ fukuso(a,b,c,d,&e,&f,???); if(i==1) printf("和演算\n"); else if(i==2) printf("差演算\n"); else if(i==3) printf("積演算\n"); else printf("商演算\n"); printf("e=%f f=%f i\n",e,f); } return (0); } void fukuso(double a1,double b1,double a2,double b2,double *a3,double *b3,int keisan) { if(keisan==1){ *e=a+c; *f=a+c; } else if(keisan==2){ *e=a-c; *f=b-d; } else if(keisan==3){ *e=a*c-b*d; *f=a*d+c*b; } else{ *e=(a*c+b*d)/(c*c+d*d); *f=(-a*d+c*b)/(c*c+d*d); } }

  • C言語の配列の宣言について

    20年以上前に発行された本に書いてある、利用したいCのコードがあります。 JavaやPHPは使ったことがありますが、Cは触ったことすらありません。 とりあえずメモ帳に打ち出して、codepadでC codeで実行してみましたが、正常に動作しません。 どこがおかしいのか、ご教示ください。 よろしくお願いします。 ---- #include <stdio.h> #include <math.h> #define N 20; int main( int argc, char **argv ) { double u[N+1], w[N+1]; double k=0.001; double h, r, s; int i, j; h= 1.0/(double)N; r= k/(h*h); s= 1.0-2.0*r; for( i=0; i<=N; i++ ) w[i]=0.0; for( i=1; i<N; i++ ) u[i]=1.0; u[0]=0.0; u[N]=0.0; for(j=1;j<200;j++){ if((j%10)==0) { printf("%5.31f",(double)j*k); for(i=0;i<=N;i+=2) printf("%5.31f",u[i]); printf("\n"); } for( i=0; i<=w; i++ ) w[i]=r*(u[i+1]+u[i-1])+s*u[i]; for( i=1; i<N; i++ ) u[i]=w[i]; } return 0; }

  • RC回路の計算

    下記のRC回路(右側もつながっている)で、10秒後の電流と10秒後の時点でスイッチを切り、その後の電流についての式を求める。というもので、10秒後の電流はI=E/R×(1-e^(-tR/L)からI=10Aと計算できたのですが、電源を切った後の式の導き方というのが分かりません。テストが近いので解き方をマスターしたいのですが、どなたか教えてください。 --S--R----C- | V | ----------- V =10V R=1Ω C=100mF S=スイッチ

  • C言語でプログラミングしました。違うとこを指摘してくれませんか?

    ∫(e^(-n)^x)cosx*cosxdx n=19/20 積分範囲は0~10です #include <stdio.h> #include<math.h> int main(void) { double left,right,n,s; left=0,right=10.0; double integral(double,double,double); s=integral(left,right,n); printf(“%14.10f\n”,s); } double formula (double x) { int a,b,c,d; a=(-19/20)^x; b=e^a; c=cosx*cosx; d=b*c; return d=b*c; } double integral(double l,double r,double n) { double x,s2,s4,h; n=352; double formula(double); h=(r-1)/h: s2=0.0; s4=formula(1+h); for(x=1+2.0*h;x<=r-h+0.000001;x+=2.0*h); { s2+=formula(x); s4+=formula(x+h); } return(h*(formula(l)+formula(r)+4.0*s4+2.0:s2)/3.0); }

  • C言語

    main() { int a = 5,b=2,e,f,g=3,i; double c,d,h=2.0; c = a/b; printf("c = %f\n",c); d = a/h; printf("d=%f\n",d); e = a++; f = ++b; g+= 4; i= ++a + b; printf(" a = %d\n",a); printf(" b = %d\n"b); printf(" e = %d\n"e); printf(" f = %d\n"f); printf(" g = %d\n"g); printf(" i = %d\n" i); 答え a=7,b=3,c=2.0,d=2.5,e=5,f=3,g=7,i=10 この問題のa,b,iがどうやってこの値になるのかがわかりません解説お願いします。

  • C言語のプログラムについてですが、

    #include <stdio.h> int main(void) { double r; printf("半径を入力してください:"); scanf("%lf", &r); printf("円周=%f\n", 2.0 * r * 3.14159); printf("円面積=%f\n", r * r * 3.14159); return 0; } 上のC言語のプログラムを参考にして 正三角形一辺を double値でキーボード入力し、次のように高さと 面積を計算するプログラムを教えてください。 よろしくお願いしますl_ω_l 3の平方根は1.73205とします。 [実行結果] ======= 一辺の値を入力してください: 20 高さ=17.320500 面積=173.205000

  • C言語

    #include <stdio.h> #include <stdib.h> int main (void){ double a[5]={0.0,4.0,0.0,-5.0,1.0}; double x; int i,j,k,n; n=4; x=0.75; for(i=1;i<=n;i++) printf("%10.5f ,",a[i]); printf("\n"); for (i=1; i<=n+1; i++) printf("----------") printf("\n"); while(n>=1){ for(i=1; i<=n; i++) a[i]=a[i-1]*x+a[i]; for(i=1; i<=n; i++) prontf("%10.5f ,"a[i]); printf("\n"); n=n-1; } return 0; }

  • fscanf()【C言語】

    テキストファイルをうまく読み込んでくれません。 どうかご教示お願いいたします。 環境 Windows7 Borland C++ 5.5.1 for Win32 status.txtの内容 1.50,40.0 1.55,45.0 1.60,50.0 1.65,55.0 1.70,60.0 1.75,65.0 1.80,70.0 1.85,75.0 1.90,80.0 プログラムの内容 #include<stdio.h> #include<stdlib.h> #include<string.h> int main(){ FILE *filepointer; double s[10],w[10]; int i=0,ret; if((filepointer=fopen("status.txt","rt"))==NULL){ printf("file open error!!\n"); exit(1); } printf("%X\n",filepointer); while((ret=fscanf(filepointer,"%f,%f",&s[i],&w[i]))==2){ i++; printf("%d %f %f\n",ret,s[i],w[i]); } fclose(filepointer); return 0; } 出力結果 40E714 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 5.121811144940079976000000000000000000000e+303 0.000000 2 0.000000 0.000000 2 0.000000 0.000000

  • RLC回路の質問

    起動力と直列につないだ抵抗、コイル、コンデンサーを持っている回路で、 L=10H、R=1000Ω、C=1マイクロF E=1000V をキルヒホッフの法則 L・(dI/dt)^2+R・dI/dt+I/C=0  を用いたときのIとQの値を教えてください。 自分でも以下のように解いてみましたが、正しいでしょうか。 I=20/√39e^(-50t)・sin50√39t Q=1/1000-1/1000√39・e^(-50t)・{19sin50√39t + √39cos50√39t} またIとQをexcelでどのようにグラフ化すればいいでしょうか。 (セルに 「=20*39^(-1/2)*EXP(-50*A2)*SIN(50*39^(1/2)*A2」 のように 入力すればいいですか。) さらに共振周波数は1/2π√LCに当てはめて 50.33MHZ で正しいでしょうか。 計算が複雑で申し訳ないですが、部分的に回答していただいても 構いませんので宜しくお願いします。

専門家に質問してみよう