- ベストアンサー
C言語の前置演算子と後置演算子の違いとは?
- C言語の前置演算子と後置演算子には意味の違いがあります。++aはaを1増やしてから式を評価し、a++は式を評価してからaを1増やします。
- 前置演算子++aと後置演算子a++の結果は異なります。++aは式を評価する前にaを1増やすため、b = ++aの場合、bには増加した値が代入されます。
- 後置演算子a++は式を評価してからaを1増やすため、b = a++の場合、bには増加する前の値が代入されます。しかし、複数の++演算子を含む式では予想と結果が異なることもあります。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- C言語の演算について
次のプログラムを実行したらどう出力されますか。 微妙な代入演算の違いが分からないので、教えていただけないでしょうか。 #include<stdio.h> void main (void) { int x = 5; int y = 8; int z = 3; int a,b,c,d,e,f; a = y == x + z; b = !x; c = x + y / z; d = x *=z - 1; e = --y / --z; f = y+++ % x++; printf("%d,%d,%d,%d,%d,%d\n",a,b,c,d,e,f); } できれば途中のトレースも書いていただけると助かります。 よろしくお願いします。
- 締切済み
- C・C++・C#
- c言語の簡単な演算なのですがわかりません。
int a = 10, b = 5, c = 3; b = ++a - c--; print("%d\n", b); b の結果が がなんで 8 になるのでしょうか? aのインクリで11 cのデクリで2 で9のような気がしましたが違いますね。 計算の順番をわすれてしまいました。 小学生レベルといわずよろしくお願いします。
- ベストアンサー
- C・C++・C#
- C言語の演算式
C言語のプログラミングで、4×(1-1/3+1/5-1/7+・・・・・)の式を100000項まで合計した式を作りたいです。答えは3.141591になります。 自分で作成してみたのですが、なかなか上手くいきません。 どうすればよいでしょうか?以下自分の作成したプログラムを「」内に載せます。 答えは0になってしまいます。 「 #include <stdio.h> int main(void) { int i=0,a=1,b; do{ i++; if(i%2) { a+=(-1)/(2*(i-1)+1); } else{ a+=1/(2*(i-1)+1); } }while(i<100000); b=4*a; printf("π=%f\n",b-1); putchar('\n'); return (0); } 」
- ベストアンサー
- C・C++・C#
- プログラミングC言語の問題ですがわかりません。
プログラミングC言語の問題ですがわかりません。 5つのint型変数a,b,c,ans,responseを宣言する。a,b,cの値はscanf関数で読みこむことにより初期化する。 a(1)b(2)c= と表示して、scanf関数によりユーザーの答案をresponseに読み込み、演算結果が正しければ1、間違っていたら0を表示するプログラムを作成しなさい。ここで(1)と(2)には算術演算子(+,-,*,/,%)がはいる。5×5=25通りの演算をすべて実行するようにしなさい。 特に正しければ1、間違っていたら0を表示するプログラムがわかりません。 まだprintfとscanf関数と演算子しかやっていないのでそれを踏まえたプログラムを1通りだけでいいので書いて頂けると幸いです。
- ベストアンサー
- C・C++・C#
- C言語の演算について
次のプログラムを実行したらどう出力されますか。 微妙な代入演算の違いが分からないので、教えていただけないでしょうか。 #include<stdio.h> void main (void) { int x = 5; int y = 8; int z = 3; int a,b,c,d,e,f; a = y == x + z; b = !x; c = x + y / z; d = x *=z - 1; e = --y / --z; f = y++ % x++; printf("%d,%d,%d,%d,%d,%d\n",a,b,c,d,e,f); } できれば途中のトレースも書いていただけると助かります。 よろしくお願いします。 なお、先ほど記述ミスがあるのにも関わらず投稿してしまいました…。 正しい記述はこちらの質問です。 大変失礼しました。 前の質問は削除可能になり次第、削除いたします。
- 締切済み
- C・C++・C#
- C言語に詳しい方。教えてください。ずっと悩んでるのですがわかりません。
問 次のプログラムに3重ループ(for)を使ってプログラムを作成したい。 コンパイルの実行結果から考えて、(1)(2)(3)の中に適切な数値や式等をいれて コンパイルの実行結果になるように3重ループを使って作成せよ #include<stdio.h> main() { int a,b,c; for(a=1;a<=3;a++){ (1) for(b=1;b<=2;b++){ (2) for(c=1;c<=3;c++){ (3) } コンパイルした後の実行画面 abbc c c d abbc c c d abbc c c d 解答欄 (1) (2) (3)
- 締切済み
- C・C++・C#
- c言語について
C言語で、二つの整数値を読み込んで、前者の値が後者の何%であるかを実数で表示するプログラムを作成しようとして以下のコードを書きました。 #include <stdio.h> int main(void) { int n1, n2 ; puts("二つの整数を入力してください。") ; printf("整数A : \n") ; scanf("%d" , &n1) ; printf("整数B : \n") ; scanf("%d" , &n2) ; printf("Aの値はBの%f%%です。\n" , (double)(n1 / n2) * 100) ; return 0 ; } 上記コードを実行すると、0.000000%のような結果になります。 そこで、最後のキャスト演算子を使用した後の式で(n1 / n2) * 100がまずいのかなと考え、n1 / n2 * 100にしたら上手くいきました。 なぜ、上記コードだと上手くいかないんでしょうか?
- ベストアンサー
- C・C++・C#
- C言語の課題について。教えてください
次のプログラムに3重ループ(for)を使ってプログラムを作成したい。 コンパイルの実行結果から考えて、(1)(2)(3)の中に適切な数値や式等をいれよ。 #include<stdio.h> main() { int a,b,c; for(a=1;a<=3;a++){ (1) for(b=1;b<=2;b++){ (2) for(c=1;c<=3;k++){ (3) } コンパイルした後の実行画面 abbc c c d abbc c c d abbc c c d 解答欄 (1) (2) (3)
- 締切済み
- C・C++・C#
- 問題がとけません
以下の設問に答えよ。 型はC言語の基本型でchar型を除いたもので答えよ。 1.次の演算結果の型と値を求めよ。 100/10*5 2.次の演算結果の型と値を求めよ。 1.0f/2 3.次の演算結果の型と値を答えよ。 100/10*5.0 4.次の演算結果の値を答えよ。 54321-54321/100*100 5.次の演算結果の値を答えよ。※(int)(式)は,式の値の小数点以下を切り捨ててint型に変換する。 (int)(123/5.0+0.5) 6.次の演算結果の型と値を答えよ。 5<2 7.次の演算結果の型と値を答えよ。 5.0>2 8.変数a,b,cに関して,a<b<cの真偽を評価する論理式を書け。 9.次の文が実行された後,変数i,kの値はいくらになっているか。変数はどちらもint型とする。 i=0; k=0; k=5+(++i); 10.次の文が実行された後,変数kの値はいくらになっているか。変数はどちらもint型とする。 i=5; k=5; k *= i<0 ? (-i) : i; 11.次の文Aは実行されるか。kの型はintである。文法的な誤りはない。 if(k = 0) 文A
- ベストアンサー
- C・C++・C#
- C++のnew演算子について質問です。
C++のnew演算子について質問です。 以下は関数にポインタを渡して値を得ようしたプログラムです。 ※ディレクティブは省略しています。 void test( int* a ) { a = new int( 100 ); } void main() { int* b; test(b); printf( "%d", *b ); delete b; b = NULL; } このプログラムを実行すると、コンソール画面には100と表示されるかと思っていたのですが、 実際には滅茶苦茶な値と、例外が発生して強制終了しました。 また、関数に渡したポインタのアドレスもNULLとなってしまいます。 そこで以下のようにソースを変更すると正常に100が表示されました。 void test( int** a ) { *a = new int( 100 ); } void main() { int* b; test(&b); printf( "%d", *b ); delete b; b = NULL; } 結果的には目的が達成できたのでいいのですが、なぜこのような動作をするのかが いまいち釈然としません。 new演算子は自動的には破棄されないのではないのでしょうか? 回答の程、よろしくお願いします。
- ベストアンサー
- C・C++・C#
お礼
なるほど、++aやa++が2回以上出てこない事を前提にして定義しているのですね。 インクリメントするタイミングまでは定められていないのですね。 回答有難うございました。