質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

148閲覧

C言語ループの挙動について

yoshiki0424yi

総合スコア12

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/11/16 21:25

わからないこと

出力結果について、
なぜ一度加算されていったaが5まで加算された後
1まで減算されたのちに処理が終了するのか。
また、なぜ減算が行われるのか。

該当のソースコード

c

1#include <stdio.h> 2 3/* 再帰関数*/ 4void loop(int a); 5 6int b = 0; 7 8int main(){ 9 int a = 0; 10 int c = 0; 11 12 // 再帰関数 13 loop(a); 14 15 //出力 16 printf("--------\n"); 17 printf("%d, %d, %d\n", a, b, c); 18} 19 20void loop(int a){ 21 int c = 0; 22 23 if (a == 5) { 24 return; 25 } 26 27 a++; 28 b++; 29 c++; 30 31 //出力 32 printf("%d, %d, %d \n", a, b, c); 33 34 //再帰関数 35 loop(a); 36 37 //出力 38 printf("%d, %d, %d \n", a, b, c); 39}

試したこと

関数loop内にて
a++;の前にprintfを追加してみた。
loop(a);の後にprintfを追加してみた。

補足情報

初歩的な質問ではございますが、ご教授いただけると大変助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

関数の中のint aは、関数が呼ばれる度に作成されて、関数を抜けると捨てられるからです。

C

1int a = 0; # a = 0 2 loop(int a) { # a = 0 3 a++; # a = 1 4 loop(int a) { # a = 1 5 a++; # a = 2 6 loop(int a) { # a = 2 7 a++; # a = 3 8 9 } 10 # a = 2 11 } 12 # a = 1 13 } 14 # a = 0

投稿2018/11/16 21:49

hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshiki0424yi

2018/11/17 06:29

理解することができました。 ありがとうございます。
guest

0

減算されているわけじゃなくて、加算する前の値を表示しています。
これは分かりますか?

C

1#include <stdio.h> 2 3void foo(int a){ 4 a++; 5 printf("%d\n",a); 6} 7 8int main(){ 9 int a; 10 11 a=1; 12 foo(a); 13 printf("%d\n",a); 14}

投稿2018/11/17 10:50

otn

総合スコア84529

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshiki0424yi

2018/11/18 12:44

加算する前の値を表示しているという言葉で しっくりきました。 理解できるようになりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問