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と書いてありました。
No.5ベストアンサー
- 回答日時:
№1と№2でほぼ理解できていると思います。
少しだけ補足します。
このコードは引っ掛け問題のような書き方ですね。
b = 2*a ;
return 2*b ;
見やすくすると下のようになります。
b = 2*2*a ;
return b ;
returnの意味は「???を行って終了」よりも、「???の値を結果として返す」と考えた方がわかりやすいです。
returnで返す値が、func( 3*x )の答えです。
func( 3*x ) = 36 なので、y = func( 3*x ) = 36 です。
これなら見やすいと思います。
#include <stdio.h>
int func_yonbai(int a)
{
int b ;
int kotae ; /* func_yonbai関数の戻り値(計算結果)を代入する */
b = 2*a ;
kotae = 2*b ;
return kotae ; /* kotaeを、func_yonbai関数の結果として返す */
}
int main(void)
{
int x, x_sanbai, y ;
x = 3 ;
x_sanbai = 3*x ; /* 変数x_sanbaiには、変数xの3倍の数を入れる */
y = func_yonbai( x_sanbai ) ; /* func_yonbai関数を変数x_sanbaiで計算する */
printf("x=%d, y=%d\n",x,y) ;
return 0;
}
No.4
- 回答日時:
何から説明していいかわかりませんが、「項」はわかりますよね、中学校の数学で習った「項」。
C言語の項は、全て数値です。
で、項を使った演算結果も当然数値。
次に、プログラムの実行毎に内容が変化したりとかして、決まった数値じゃないものを一次的に覚えておく必要があるのですが、それが変数。
上記の例だと、a, b, x, yが変数。
変数も、名前を付けているだけで中身は数値。
さらに、関数は中で何やら処理をしていますが、これも呼び出し元から見ると一つの数値。
関数の引数(かっこの中)も数値。
という知識をもとに順を追っていきますが、
x = 3;は、xという名前の変数に3という数値を代入すること(代入も中学校の数学で習っていますよね)。
単独の「=」は代入演算子といって、左辺の変数に右辺の数値を代入する機能があります。
算数の=とは意味が違いますが、C言語(だけでなく多くのプログラミング言語)ではそういう決まりなので、考えても無駄です、そう覚えてください。
y = func( 3*x ) ;は、yに「func(3*x)」という数値を代入すること、これも大丈夫ですね。
func(3*x)は、funcという名前の関数に引数3*xを渡しているのですが、3*xは3という項とxという項を*という演算した結果の数値です。
中学校で習う数学の書き方だと3xという数値、このプログラムではxの値が3なので、9ですね。
つまり、func(3*x)は、func(9)としていることになります。
ここで、関数funcを呼び出しているのですが、funcの先頭にはfunc(int a)とありますね、これは呼び出し元で与えた数値をこの関数の中に限ってはaという変数に代入するという意味です。これも考えても無駄です、そういう決まりです。
関数funcの最後にreturn 2*b;というのがありますが、returnの右に書いた数値が呼び出し元の「func(3*x)」の数値になります。もちろん「2*b」は計算すると一つの数値になりますね。
これだけの情報があれば中間は自分で考えられると思います。
No.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 になります。
No.2
- 回答日時:
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文の説明をご確認ください。
No.1
- 回答日時:
関数func()は関数main()の中から呼び出されています。
呼び出す際、関数main()内で定義している変数x(←初期値3で定義)の値に3を掛けた値(=9)が関数funk()に引数として渡されます。
呼び出された関数func()は引数の変数aでその値を受け取ってその値の2倍の値(=18)を変数bにセットします。そして変数bの2倍の値(=36)をリターン値として処理を終了します。
参考まで。
プログラム上で表す?という表現でいいのか分かりませんが、
「(=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 ??? で、???を行って終了。という意味なんですか?
よく、
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# プログラミングの授業のペーパーテスト 実行結果を答えろ #include int x[ ] = {1 3 2022/06/16 20:08
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# 10人分の生徒の英語の点数{32,34,41,38,40,26,14,46,42,50} と数学の点 2 2022/05/26 21:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
EXCEL/VBA 変数の値をクリップ...
-
C言語 列挙型(enum型)変数について
-
整数xxxが大き過ぎますというエ...
-
「%」を使って、偶数か奇数かを...
-
テキストボックスの値を変数に...
-
i++と++i ってどう違うのですか?
-
[VBS]変数を定数に変換する方法...
-
ExcelのVBAでをA列に第0〜19項...
-
Accessコンボボックスにレコー...
-
processing エラーで、 "cannot...
-
変数にオフセットが付いている...
-
構造体からレコードセットへの代入
-
C言語 アロー演算子について質...
-
プログラミングで変数と関数の...
-
切り上げ
-
python の 連鎖代入の文法
-
Variant型で宣言してるのにEmpt...
-
無名関数のメリットがよくわか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
EXCEL/VBA 変数の値をクリップ...
-
C言語 列挙型(enum型)変数について
-
テキストボックスの値を変数に...
-
Variant型で宣言してるのにEmpt...
-
[VBS]変数を定数に変換する方法...
-
python の 連鎖代入の文法
-
エラーの意味は? Lvalue req...
-
jsp~jspにhiddenを使って変数...
-
processing エラーで、 "cannot...
-
整数xxxが大き過ぎますというエ...
-
プログラミングで変数と関数の...
-
構造体からレコードセットへの代入
-
コマンドプロンプト バッチ|結...
-
stdpicture型の変数に、、
-
無名関数のメリットがよくわか...
-
i++と++i ってどう違うのですか?
-
DataTableの値を変数に代入したい
-
Accessコンボボックスにレコー...
-
VBA 1行で複数の代入を行った...
おすすめ情報