- ベストアンサー
摂氏の値を計算するプログラム
- 摂氏と華氏の関係式を使って、摂氏の値を求めるプログラムを作成しました。
- 関数の部分がうまく動作していないようです。どこを修正すればいいか教えてください。
- 摂氏と華氏の変換を行うプログラムですが、まだ完全な結果が出力されていません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
以下のようにして下さい。 #include<stdio.h> /* F:華氏(input)*/ /* 戻り値:摂氏*/ double functionC(double F) { return (5.0/9.0*(F-32.0)); } main(void) { double C,F3,F4,i,j; printf("摂氏の値を計算します\n 華氏の下限、上限、きざみを入力してください\n"); printf("華氏の下限:\n"); scanf("%lf", &F3); printf("華氏の上限:\n"); scanf("%lf", &F4); printf("きざみ:\n"); scanf("%lf", &i); printf("摂氏 華氏\n"); /* 以下は入力値の確認*/ printf ("F3 =%f F4=%f i=%f\n",F3,F4,i); for(j=F3; j<=F4; j+= i) printf("%lf %lf\n",functionC(j),j); } ------------------------------- 要点は 1.double型は %lfで操作する 2.double型と組み合わせる定数は5.0の用に小数点を 付ける。 3.関数 functionCは、入力は華氏 戻り値が摂氏 の関数となる。 4.華氏の下限から上限まで、刻み幅単位でのループは for(j=F3; j<=F4; j+= i) となる。 以上です。
その他の回答 (3)
- ency
- ベストアンサー率39% (93/238)
No3 tatsu99 さんに補足です。 printf() は、float でも double でも、%f です。 %lf が定義されているのは scanf() だけで、printf() では動作が未定義だったはず。 ただし、たいていのコンパイラでは無難に動作してくれるようです。 # scanf() に引っ張られて printf() でも %lf としてしまう人が多いから # なんでしょうか。。。
お礼
私はたしかint型とdouble型の区別をするためにdouble型内では%lfとしたほうが自分が間違えにくいと教わりました。ありがとうございました。
- bloomers_daisuki
- ベストアンサー率14% (40/267)
これ、コンパイルできますか? パッと見てコンパイルできないと思いますが。 理由 関数functionC()の定義の引数の数(4)と呼び出しの引数の数(3)が合わない。 関数functionC()でしていることと表示がバラバラです。 tempで「最後に計算した結果のみ」を返しているので、最後の値だけが表示されるのでしょうか。 printf("%f %f\n", functionC(j,F3,F4)); の変数表示%fが2ヶ所出てきますが、表示される引数はfunctionC(j,F3,F4)の1つです。 for(j=F3; j<=F4; j++)文のjに対して、刻み量iの関係がまったくありません。 ここら辺をチェックしてみましょう。 **** 参考 **** ※1 関数functionC()中のローカル変数とmain()中のローカル変数は互いに独立なので、F, F1, F2, F3, F4の変数名の付け方に違和感を覚えます。 C → cels F → fahr のような変数名が好まれます。大文字の変数名はほとんど使いません。 ※2 for(j=F3; j<=F4; j++) 変数jは倍精度実数ですが、その変数にインクリメント演算をするのは(正しく動きますが)おかしいです。 インクリメント・デクリメント演算子は整数に用いるべきです。 実数の場合は、j+=1.0;が適切でしょう。
お礼
ありがとうございます。 コンパイルはできたので余計にエラーがわかりませんでした。参考になる部分が多くありました。
- chie65536
- ベストアンサー率41% (2512/6032)
質問にあるプログラムを拝見した所 「プログラムで何をさせたいのか判っていない」 と思います。 まずは 「プログラムで何をさせたいのか、日本語で記述してみる」 というのを試して下さい。 例えば、最初は 1.華氏の下限を実数型変数F3に取り込む 2.華氏の上限を実数型変数F4に取り込む 3.(以下略) のように記述します。 次に、記述した日本語をCの命令や関数に一対一で対応するくらいまで細分化して記述し直します。例えば 1.華氏の下限を実数型変数F3に取り込む ↓ 1-1.「華氏の下限:」と画面表示する 1-2.キーボードから実数型変数F3に実数を取り込む のように、命令語や関数1つに対応するくらいまで細かくします。 Cでコーディングするのはそれが出来てからの話で、コーディングするのはまだ時期尚早と思われます。 いきなりプログラム言語そのままで書き始めても、絶対にうまく行きません。
お礼
ありがとうございます。 日本語で一度解釈してみるようにします。
お礼
ありがとうございました! わからない部分がほとんど明らかになりとても助かりました。 lfにすることもやったはずなのに忘れていたり・・ すごく参考になりました!