忙しい現代人の腰&肩のお悩み対策!

C言語のこのプログラムでyをどうやって求めるのか分かりません。
y = func( 3*x ) で、yの値が分かるのですよね?
y = func( 3*x ) について詳しく教えてください。3*xはx=3より9であることは分かります。

#include <stdio.h>
int func(int a)
{
int b ;
b = 2*a ;
return 2*b ;
}
int main(void)
{
int x, y ;
x = 3 ;
y = func( 3*x ) ;
printf("x=%d, y=%d\n",x,y) ;
return 0;
}

実行結果は=3,y=36と書いてありました。

  • 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
  • 今の自分の気分スタンプを選ぼう!
あと4000文字

A 回答 (3件)

関数を理解するコツの一つは「機能だけに注目して、中身は考えない」ことだと思っています。





z = 3+4 ;
とあったら、 まず 3+4 が計算されて、 7 という値になります。
よって
z = 7 ;
と同じ意味になります。
z = x + 4 ;
でも、x の値に4 足した値が計算され、その計算された値を z に代入します。

それと同じように、 y = func(3 * x) ; は
func(3 * x) を「計算して」、その計算された値を y に代入します。


ここで、関数funcの機能だけを考えます。
関数funcは引数 a を受けとります。

return には2の機能があります。
1つは「関数を終了する」もう一つは「計算結果を指定する」です。
return の後に指定するのは「関数funcの『計算結果』として使いたい値」です。
※ この「『計算結果』として使いたい値」を「戻り値」「返り値」等と呼び、
※ 「(戻り値)を返す」と言った言い回しをします。

中で b=2*a ;で変数bに「aの2倍」の値が代入され、
その後 return 2*b ; で「bの2倍」の値を返します。
これは「『aの2倍』の2倍」であり、つまり「aの4倍」が「関数func『計算結果』」ということになります。

まとめると、 func(???) の計算結果は「???の4倍の値」となります。

これがわかったら、funcの中身は一旦忘れましょう。



funcの機能がわかったところで
y = func(3 * x) ;
に戻ります。
func(3 * x) では、まず 3*x を計算します。x=3なので、 3*x=9 が先に計算され、
y = func(9) ;
ということになります。
func(引数)の計算結果は「引数の4倍」なので、 func(9) は 9の4倍=36 になります。
    • good
    • 1

No.1です。



> 「(=9)が関数funk()に引数として渡されます」のfunc()は→func(int a)のこと
> 引数の変数aでその値を受け取ってその値の2倍の値(=18)を変数bにセット→aが9となって、式はb = 2*aのこと
> 変数bの2倍の値(=36)→return 2*bのこと
>
> で合ってますか?

はい。あっています。
プログラムをきちんと日本語で読むようにされるとよいでしょう。


> リターン値として処理を終了→2*bを行って、終了ということですよね?

そうです。


> returnというのは、return ??? で、???を行って終了。という意味なんですか?

そうです。
教科書などでreturn文の説明をご確認ください。
    • good
    • 0
この回答へのお礼

分かりました。もう一度見てみます。

お礼日時:2020/06/29 14:49

関数func()は関数main()の中から呼び出されています。



呼び出す際、関数main()内で定義している変数x(←初期値3で定義)の値に3を掛けた値(=9)が関数funk()に引数として渡されます。
呼び出された関数func()は引数の変数aでその値を受け取ってその値の2倍の値(=18)を変数bにセットします。そして変数bの2倍の値(=36)をリターン値として処理を終了します。

参考まで。
    • good
    • 2
この回答へのお礼

プログラム上で表す?という表現でいいのか分かりませんが、

「(=9)が関数funk()に引数として渡されます」のfunc()は→func(int a)のこと
引数の変数aでその値を受け取ってその値の2倍の値(=18)を変数bにセット→aが9となって、式はb = 2*aのこと
変数bの2倍の値(=36)→return 2*bのこと

で合ってますか?

リターン値として処理を終了→2*bを行って、終了ということですよね?
returnというのは、return ??? で、???を行って終了。という意味なんですか?
よく、

お礼日時:2020/06/29 14:41

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


人気Q&Aランキング