dポイントプレゼントキャンペーン実施中!

int型の変数n1の値が15であるとする。
このとき以下の文を実行した後のn1の値を答えよ。
#include <stdio.h>
int main(void) {
int n1 = 15;
printf("%d\n", n1+=10);
printf("%d\n", n1-=20);
printf("%d\n", n1*=4);
printf("%d\n", n1/=10);
printf("%d\n", n1%=6);
return(0);
}
25
5
20
2
2
で大丈夫ですか?
n1*=4の箇所が60にならないのはなぜですか?

A 回答 (4件)

なんかよくわからん文章なんだが (「以下の文」ってどれだ), どこから「60」が出てきたんだろう.



そしてそれを「参照渡し」「値渡し」とはいわない気がする>#3.
    • good
    • 0

> n1*=4の箇所が60にならないのはなぜですか?



あなたがプログラムで仕事をしようと思っているなら、値渡し、参照渡しというキーワードを勉強しておいた方が良いと思います。

printf("%d\n", n1+=10);
この命令の計算結果は 25 ですが、この命令実行によって、n1 の値が 25 に上書きされます。

printf("%d\n", n1-=20);
この結果が 5 になるのも、25 に上書きされた n1 から 20 を引き算するからです。
(あなた、もしかして 15 - 20 = 5 だと誤解していませんか? 仮に 15 - 20 だったら -5 です。n1 は uint じゃなくて int なので。)

printf("%d\n", n1*=4);
ここでは、5 に上書きされた n1 に 4 を掛け算するから 20 になります。


このように計算する度に、その結果が上書きされていくような場合を参照渡しと呼び、上書きされないような場合を値渡しと呼びます。多くのプログラムでは、特に明示しない限りは自動的に参照渡しとなります。
    • good
    • 0

大丈夫です。

合っています。

n1+=10 は n1 = n1 + 10 と書くべきところ、n1 を2回書くのが面倒だからこれを省略して書くための省略記法です。
同様に n1*=4 は n1 = n1 * 4 と同じ意味です。

n1*=4 の直前のn1の値は5ですよね?
なので、n1*=4 の結果は当然20です。
    • good
    • 0

大丈夫です。



n1 = 5 * 4 ; ですので、20ですね。
    • good
    • 0

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