
インクリメント演算子について
プログラミング超初心者です。
大学のプログラミングの課題で
インクリメント演算子を使って
数字をひとつずつ大きく(小さく)していくという課題が出ました
私が作ったプログラムは以下のとおりです
#include <stdio.h>
int main(void)
{
int x ; //変数宣言
printf("整数値を入力してください:");
scanf("%d",&x);
printf("1ずつ増加\n");
printf("%d,",x++);
printf("%d,",x++);
printf("%d,",x++);
printf("%d,",x++);
printf("%d\n",x);
printf("1ずつ減少\n");
printf("%d,",x--);
printf("%d,",x--);
printf("%d,",x--);
printf("%d,",x--);
printf("%d\n",x--);
}
ちなみに、整数値は10にしました。
結果は
1ずつ増加
10,11,12,13,14
1ずつ減少
14,13,12,11,10
と、望んでるものになったのですが、疑問があるので質問させていただきます。
xを変数にすると、x++はx+1になると思うのですが表示されたのは10、11、…と
10から表示されました。
しかも、増加していった最後のxはなぜ14になるのでしょうか?
課題は出来たのですが、頭が混乱しています…
詳しく解説をお願いします。
No.2ベストアンサー
- 回答日時:
x++は(プリインクリメントといいます)インクリメント演算子を使わないと
misaki-hina さんの書かれているように x=x+1; と書くことになりますが
1行の中に複数の命令(?)orintfとx++がありますので、
どちらが先に実行されるかが問題になります。
実行コード順で展開した風にを書き直すと
printf("1ずつ増加\n");
printf("%d,",x++);
printf("%d,",x++);
printf("%d,",x++);
printf("%d,",x++);
printf("%d\n",x);
は
printf("1ずつ増加\n");
printf("%d,",x); この時xは10
x=x+1; ここでxは11
printf("%d,",x);
x=x+1;
printf("%d,",x);
x=x+1;
printf("%d,",x);
x=x+1;
printf("%d\n,",x);
という風に展開して書けます。
ちなみに
printf("%d,",++x);
は
x=x+1;
printf("%d,",x);
となります。
インクリメント、デクリメントは便利ですけどちょっとややこしいですよね!
なるほど
確かにややこしいですね
でも、なんとなくですが、分かった気がします。
これからもっと勉強して、もっと理解できるようにしたいです!!
ありがとうございます(^^)
No.3
- 回答日時:
>詳しく解説をお願いします。
理由というか動作は#1のedomin7777さんのおっしゃる通りです。
大学生ということで、一つアドバイスをすると、
C言語というのは、設計された当時にシステムーすなわちOSを効率よく記述することを目標に設計されました。
当時は大型コンピュータでさえ、メモリが1Mbyteあれば大容量という時代でしたから、そういう資源の制約の中でなるべく効率よくアセンブラのプログラムに変換できる言語として策定されたのがC言語です。当時の最新マシンはDEC(現在HP)のPDP11でした。C言語はPDP11で効率よく動作されるように設計されており、PDP11のアークテクチャを色濃く反映すようになっています。
そういうことで、学生さんでしたら温故知新でDECの
PDP7, PDP8, PDP11, VAX11
のCPUのアークテクチャを詳しく研究してみることをお薦めします。
まだC言語を勉強し始めたばかりなので
プログラムはなかなか難しいですね(^^;)
これからもっと勉強していきたいと思います!!
ありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# プログラミングの授業のペーパーテスト 実行結果を答えろ #include int x[ ] = {1 3 2022/06/16 20:08
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SJIS→UTF-8の文字コード変換
-
Visual Sutdio 2017 でのC言語...
-
コンパイルエラーについて
-
C言語のプログラムについて
-
c言語で2000年以降カレンダーを...
-
C言語
-
UnixでC言語を学習中(初心者で...
-
printf で二進表示を行いたい。
-
小数点切捨て表示
-
unsigned int型について
-
16bitのパラレル送信がうまくい...
-
学校の課題で
-
4の倍数を論理演算で表す。。
-
defineで定数が置き換えられな...
-
strcmp
-
プログラミング教えてください
-
wsprintfの書式制御文字列につ...
-
縦の棒グラフ
-
Cプログラムについて
-
[緊急]bcc developerについての...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンパイルエラーについて
-
printf で二進表示を行いたい。
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
コマンドラインに出力した文字...
-
strcmp
-
cshの文字列操作(0埋め)
-
printfの出力内の文字をdefine...
-
テキストカーソル位置の取得
-
アドレスの比較について
-
コマンドプロンプトがすぐ消える
-
Visual Sutdio 2017 でのC言語...
-
defineで定数が置き換えられな...
-
10個出力で改行したいのですが...
-
ifなんですが
-
c言語で2000年以降カレンダーを...
-
WM_CLOSEで閉じれないウィンド...
-
%P と %X の違い
-
Cプログラムについて
-
三角形の判別
おすすめ情報