プロが教えるわが家の防犯対策術!

大学に入って初めてプログラミングを習いましたが、2回目の授業ではやくも関数のプログラムの宿題が出されました。
問題は「摂氏Cを入力し、これを華氏Fと絶対温度Kに換算せよ。ただし換算式はそれぞれ、F = 32.0 + 1.8c、K = 273.16 + cとし、華氏および絶対温度を求める部分は、それぞれ関数化すること。」というものなのですが、一応教科書にのっとって、作ってみましたが、コンパイルエラーが起こってしまいます。解決策が見つからないので質問することにしました。
以下が私が作ったプログラムです。

-------------------------------------------------

#include<stdio.h>
float Sessi(float);

void main(void)
{
float c;
float kasi, zettaiondo;
c = 25;
kasi = Sessi(c);
zettaiondo = Sessi(c);
printf("華氏F = %f\n", kasi);
printf("絶対温度K = %f\n", zettaiondo);
}

float Sessi(float c)
{
float f;
f = 32.0 + 1.8 * c;
return(f);
float k;
k = 273.16 + c;
return(k);
}

-------------------------------------------------

上はとりあえず、C=25の場合の換算です。
このプログラムですと、実行はできるのですが、C=○のところにどんな数字を入れても華氏F、絶対温度Kともに、77.00000になってしまいます。明らかにおかしいのは自分でも分かりますが、まだはじめたばかりなので分けが分かりません。
慣れている方には馬鹿馬鹿しい質問ですが、ご指摘お願い致します。

A 回答 (2件)

「関数」って言葉の意味を考えたことがありますか?


関数は、ひとつの変数を投入するとひとつの値を戻す、というのが原則です。すなわち、ひとつの関数に引数25を与えたら、戻り値はひとつです。netekunさんのように、ひとつの関数に並列でreturn()を二つ書いたら、一つ目以降は無効な式になります。
華氏と絶対温度の二つの戻り値が必要なら、以下のように二つの関数を定義してはどうでしょう。
----
float CtoF(float c)
{
float f;
f = 32.0 + 1.8 * c;
return(f);
}
float CtoK(float c)
{
float k;
k = 273.16 + c;
return(k);
}
    • good
    • 0

関数の作り方が、間違っています。


この作り方では、最初の return(f); までしか、実行されません。

float Sessi(float c)
{
float f;
f = 32.0 + 1.8 * c;
return(f);
float k;
k = 273.16 + c;
return(k);
}

関数を2つに分け
float Sessi(float c)
float Zettai(float c)
として、 return(); までを、分けて作り、
zettaiondo = Sessi(c); を zettaiondo = Zettai(c);
の、ようにすると良いでしょう。
サブルーチンは、return(); を、見つけるとそこで終了して、メインに帰ってしまいます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!