- 締切済み
C言語で関数を使う課題でわかりません。
大学の課題で関数を使って計算したりするプログラムを作るのですが、エラーが出てしまって出来ません。 課題として 自分の学籍番号の末尾2桁の数字(r1)と生年末尾2桁の数字(r2)をキーボードから入力させ、 (1)それらを抵抗値として並列の合成抵抗を求める[R=(r1*r2)/(r1+r2)] (2)電圧100.0Vに対する端子電流値を求める[a=v/R v=100.0] (3)その電力を計算[p=a*v] (4)各抵抗値r1r2、合成抵抗R、電圧V、電流値a、電力値pを画面に表示させる。 上記のものをCで作ってみたところ、下記のようになりました。 ========== #include <stdio.h> double gousei_teikou(double r1,double r2); double get_current(double v,double r); double get_power(double v, double a); double display(double r1,double r2,double r,double v,double a,double p); int main(void) { double r1,r2,r; double v,a; double p; //入力させる printf("学籍番号末尾2桁入力(抵抗r1):"); scanf("%d",&r1); printf("生年(西暦)末尾2桁を入力(抵抗r2):"); scanf("%d",&r2); //合成抵抗を求める gousei_teikou(r1,r2,r); //端子電流値を求める get_current(v,r); //電力を求める get_power(v,a); //すべての結果を表示させる display(r1,r2,r,v,a,p); return 0; } double gousei_teikou(double r1,double r2) { double r; r=(r1*r2)/(r1+r2); return r; } double get_current(double v,double r) { double a; v=100.0; a=v/r; return a; } double get_power(double v, double a) { double p; p=a*v; return p; } double display(double r1,double r2,double r,double v,double a,double p) { printf("抵抗値r1="); printf("%lf",r1); printf("抵抗値r2="); printf("%lf",r2); printf("合成抵抗値r="); printf("%lf\n",r); printf("電圧v="); printf("%lf[V],, ",v); printf("電流値a="); printf("%lf[A],, ",a); printf("電力値p="); printf("%lf[W]\n",p); } ========== するとエラーで『Run-Time Check Failure #3 - The variable 'r' is being used without being initialized.』となります。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- KAZUMI2003
- ベストアンサー率37% (77/208)
書式文字列については、よく調べなきゃいけませんね。 その他の部分についても考えてみてください。 注・全角スペース使いました。 #include <stdio.h> double gousei_teikou(double r1,double r2); double get_current(double v,double r); double get_power(double v, double a); double display(double r1,double r2,double r,double v,double a,double p); int main(void) { double r1,r2,r; double v,a; double p; //入力させる printf("学籍番号末尾2桁入力(抵抗r1):"); scanf("%lf",&r1); printf("生年(西暦)末尾2桁を入力(抵抗r2):"); scanf("%lf",&r2); //合成抵抗を求める r = /****** ←関数の戻り値はとっておかなくちゃ */ gousei_teikou(r1,r2 /* ,r */); /******←引数の数がヘンでしょ? */ v=100; /****** ←電圧はここで設定したほうがいいよ。*/ //端子電流値を求める a = /****** ←関数の戻り値はとっておかなくちゃ */ get_current(v,r); //電力を求める p= /****** ←関数の戻り値はとっておかなくちゃ */ get_power(v,a); //すべての結果を表示させる display(r1,r2,r,v,a,p); return 0; } double gousei_teikou(double r1,double r2) { double r; r=(r1*r2)/(r1+r2); return r; } double get_current(double v,double r) { double a; // v=100.0; /** 電圧は他の関数でも使ってるから、ここじゃないところで定義 */ a=v/r; return a; } double get_power(double v, double a) { double p; p=a*v; return p; } double display(double r1,double r2,double r,double v,double a,double p) { printf("抵抗値r1="); printf("%f",r1); /***** ← printfの書式は、タダのfで良し 以下同文*/ printf("抵抗値r2="); printf("%f",r2); printf("合成抵抗値r="); printf("%f\n",r); printf("電圧v="); printf("%f[V],, ",v); printf("電流値a="); printf("%f[A],, ",a); printf("電力値p="); printf("%f[W]\n",p); }
- Wr5
- ベストアンサー率53% (2173/4061)
>double r1,r2,r; >printf("学籍番号末尾2桁入力(抵抗r1):"); >scanf("%d",&r1); >printf("生年(西暦)末尾2桁を入力(抵抗r2):"); >scanf("%d",&r2); scanf()の書式の確認も必要ですな。
- TooManyBugs
- ベストアンサー率27% (1472/5321)
変数rに何も代入しないで引数として使用している。 ついでに引数の数が合っていない関数がある。
お礼
変数rについては下記の通りに直しました。 引数の数についてはこちらに記載するときミスっていたのに気づきました。 ありがとうございました。
- ClickHere
- ベストアンサー率42% (3/7)
エラー文をよく読んでください。 変数が初期化されてないと文句を言っていますよ?
お礼
よく分かりませんが、以下のように修正したところ、直りました。 double r1=0,r2=0,r=0; double v=0,a=0; double p=0; とりあえず解決したのだと思います。 ありがとうございました。
補足
すみませんが、初期化の仕方が分かりません。
補足
確かにscanfのエラーもリビルド時に出ていましたが、よく分かりません。 とりあえずdoubleを使っているので%dを%lfに変えたらいいのかなとは思いましたが、それ以外はちょっと分かりません。