
摂氏Cと華氏Fの間には C=5/9(F-32)という関係式があり、華氏の上限、下限、きざみを入力して摂氏の値を求めるプログラムを関数を使って作りたいのですが、自分で作ってみたところ関数の部分がよくわかりません。printf("摂氏 華氏\n");までは画面上に出力されます。そのあとの結果が出ないのです。以下に自分で書いたものを書きますので、どこをどう直したらいいか教えてください!お願いします!!
#include<stdio.h>
double functionC(double F,double F1,double F2,double l)
{
double temp;
for(F=F1; F<=F2; F++){
F = F+l;
temp = 5/9*(F-32);
}
return(temp);
}
main(void)
{
double C,F3,F4,i,j;
printf("摂氏の値を計算します\n 華氏の下限、上限、きざみを入力してください\n");
printf("華氏の下限:\n"); scanf("%f", &F3);
printf("華氏の上限:\n"); scanf("%f", &F4);
printf("きざみ:\n"); scanf("%f", &i);
printf("摂氏 華氏\n");
for(j=F3; j<=F4; j++)
printf("%f %f\n", functionC(j,F3,F4));
}

No.3ベストアンサー
- 回答日時:
以下のようにして下さい。
#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)
となる。
以上です。
ありがとうございました!
わからない部分がほとんど明らかになりとても助かりました。
lfにすることもやったはずなのに忘れていたり・・
すごく参考になりました!
No.4
- 回答日時:
No3 tatsu99 さんに補足です。
printf() は、float でも double でも、%f です。
%lf が定義されているのは scanf() だけで、printf() では動作が未定義だったはず。
ただし、たいていのコンパイラでは無難に動作してくれるようです。
# scanf() に引っ張られて printf() でも %lf としてしまう人が多いから
# なんでしょうか。。。
私はたしかint型とdouble型の区別をするためにdouble型内では%lfとしたほうが自分が間違えにくいと教わりました。ありがとうございました。
No.2
- 回答日時:
これ、コンパイルできますか?
パッと見てコンパイルできないと思いますが。
理由
関数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;が適切でしょう。
No.1
- 回答日時:
質問にあるプログラムを拝見した所
「プログラムで何をさせたいのか判っていない」
と思います。
まずは
「プログラムで何をさせたいのか、日本語で記述してみる」
というのを試して下さい。
例えば、最初は
1.華氏の下限を実数型変数F3に取り込む
2.華氏の上限を実数型変数F4に取り込む
3.(以下略)
のように記述します。
次に、記述した日本語をCの命令や関数に一対一で対応するくらいまで細分化して記述し直します。例えば
1.華氏の下限を実数型変数F3に取り込む
↓
1-1.「華氏の下限:」と画面表示する
1-2.キーボードから実数型変数F3に実数を取り込む
のように、命令語や関数1つに対応するくらいまで細かくします。
Cでコーディングするのはそれが出来てからの話で、コーディングするのはまだ時期尚早と思われます。
いきなりプログラム言語そのままで書き始めても、絶対にうまく行きません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
cshの文字列操作(0埋め)
-
C言語のソースをC++言語に変換...
-
一番大きい奇数を表示する
-
C言語での数字の花形表示
-
switch分のケースを範囲数?に...
-
コンパイルエラーについて
-
コマンドラインに出力した文字...
-
C言語です このプログラミング...
-
strcmp
-
現在時刻の表示について
-
C言語のプログラミングについて...
-
文字と数字の判定について
-
%P と %X の違い
-
srand(time(NULL))の使い方
-
int型 00 を表示するのに0とな...
-
値を変数に代入してprintfで表...
-
文字を動かしたい
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
20'(角度)の計算がわかりま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
コンパイルエラーについて
-
c言語でAからZまでを表示する...
-
コマンドプロンプトがすぐ消える
-
C言語の勉強しています。すみま...
-
テキストカーソル位置の取得
-
【C言語教えてください】sin波...
-
コマンドラインに出力した文字...
-
三角形の判別
-
(C言語)めちゃくちゃな値にな...
-
cshの文字列操作(0埋め)
-
scanfに文字が入力されたときに...
-
入力したお金の金額からお札の...
-
unsigned int型について
-
8人分のテストの点数を入力し、...
-
プログラミングについて質問で...
-
LU分解法のピボット選択機能実...
-
勝率をプログラムに
-
CTRL+Dでループを抜けるには
-
C言語
おすすめ情報