c語言結果為什麼是4554,題目見詳細說明

2021-03-07 01:31:24 字數 3353 閱讀 8757

1樓:匿名使用者

#include

int f1(int *x,int *y,int z);

int main(void )

int f1(int *x,int *y,int z)請給出分析過程。

所以最後輸出為4 5 5 4

這裡需要注意,函式呼叫時,是將a,b的地址呼叫,所以子函式中的變化就是a,b的變化。

而c的呼叫只是將c的值賦給了z,z在這裡是個子函式區域性變數,z在子函式返回時記憶體被釋放,其改變不會造成c的變化。

2樓:風天雪月

我的表達可能不是特別好 僅作參考用

簡單來說就是 函式指標(形參,實參)和++ --的問題這裡 首先 函式呼叫了兩個地址變數 形參 int *x,int *y,這個意思是傳遞地址變數過去,這個可以看成引用的操作 就是對目標(這個地址的變數)的操作,其實就是形參與這個目標共享同一儲存單元

然後++ --的問題就好懂點了。。(個人理解) ++放在變數後面 可以看做先處理完這個語句再變數自己+1,可以看做*x=*y;*y+=1;然後a先等於b的值4 然後b再自己+1等於5 --則是先自減再執行語句 d=c-1就是4,但是這裡的z是形參,不影響實參c 所以答案是4554

c語言題目結果為什麼是4 5 5 4,題目見詳細說明

3樓:風天雪月

我的表達可能不是特別好 僅作參考用

簡單來說就是 函式指標(形參,實參)和++ --的問題這裡 首先 函式呼叫了兩個地址變數 形參 int *x,int *y,這個意思是傳遞地址變數過去,這個可以看成引用的操作 就是對目標(這個地址的變數)的操作,其實就是形參與這個目標共享同一儲存單元

然後++ --的問題就好懂點了。。(個人理解) ++放在變數後面 可以看做先處理完這個語句再變數自己+1,可以看做*x=*y;*y+=1;然後a先等於b的值4 然後b再自己+1等於5 --則是先自減再執行語句 d=c-1就是4,但是這裡的z是形參,不影響實參c 所以答案是4554

c語言題,為什麼結果是5,4,-5

4樓:匿名使用者

一個語句裡帶有多個 ++,--都是耍流氓,都是不推薦的**。

常用的 cdecl , stdcall都是從右往左壓棧,也就是說對於函式引數會從右往左一個一個計算值:

printf("......", ++x, --x, -x)因此會首先 計算 -x , 得到 -5 壓入堆疊,第四個引數是 -5再計算 --x, 字首--, 先自減x, 再求值,因此 x 變成 4, 表示式的值也是4, 壓入第三個引數,

再計算 ++x, 字首++, 先自增x, 再求值,因此 x 變成 5, 表示式的值也是5, 壓入第二個引數,

因此 三個引數分別是 5, 4, -5

c語言中 4&&5的值為什麼是1 4&5的值是多少 邏輯與和按位與有什麼區別

5樓:匿名使用者

4&&5的值為1.這裡的1是表示真。因為4和5都是非0值。非0即為真。真真得真。所以結果為1

4&5的值為4。這裡4的二進位制是「100」,5的二進位制是「101」 按位與就是100&101=100(即十進位制為4);

6樓:匿名使用者

&&是邏輯與

false && false = falsefalse && true = falsetrue && false = falsetrue && true = true

&是位與

先將數看成2進位制的,然後按照上面的邏輯與的規則,對每一位進行邏輯與比如4 = 100

5 = 101

4 & 5 = (100)&(101)

1 0 0

1 0 1

-----------------

= 1 0 0

4 & 5 = (100)&(101) = (100) = 4

c語言,為什麼結果是1 3 4 5

7樓:楊兵

答案我執行過了,是 1 3 4 5,現在我來解釋一下,希望我的解釋你能夠理解:

首先int a[5]=;

(1)注意到c/c++語言規定是a[0]=1,a[1]=4,a[2]=5;

而不是a[1]=1,a[2]=4,a[3]=5;

(2)經過

while (i<=n&&k>=a[i])

i++;

由於a[i]即a[1]=4,而k=3不大於a[1],不滿足迴圈條件,不執行i++語句

故經過while之後,i 不變,仍未1;

(3)for (j=n-1;j>=i;j--)

a [j+1]=a[j];

當j =n-1即j=2時,將(a[j]即a[2])的值5賦值給(a[j+1]即a[3]),此時a[5]=;

當 j=1時,將(a[j]即a[1])的值4賦值給(a[j+1]即a[2]),此時a[5]=;

(4)a[i]=k;

即將k的值3賦值給a[i]即a[1],得a[1]=3,此時a[5]=

(5)for (i=0;i<=n;i++)

printf ("%3d",a[i]);

輸出a[5]所有的值,即1,3,4,5

8樓:劉_永友

你嘗試著一步一步的 自己試著 想象 執行過程

i n j k a[0] a[1] a[2] a[3] a[4]

1 3 null 3 1 4 5 0 0

while語句進入 由於 k>=a[1] 不成立 所以 跳出

for語句 初始化 j = 2

第一次 1 3 1 3 1 4 5 5 0

第二次 1 3 0 3 1 4 4 5 0

由於 0<1 跳出

下一語句 a[i]=k; 執行 即使 a[1] = 3;

執行 列印語句 到 a[3] 所以就是 1 3 4 5了 你要注意 格式 我估計你這個是 把迴圈的格式

弄錯了 造成了邏輯 錯誤 …… 按照題目要求 慢慢改吧 迴圈體 建議 加一個 括號……

9樓:匿名使用者

a[0]=1,a[1]=4,a[2]=5;

while (i<=n&&k>=a[i])後i 不變,仍未1;

c語言迴圈結構為什麼輸出結果是,c語言迴圈結構為什麼輸出結果是

輸入 hello 之後有回車的吧,這個是 n 貢獻給other 輸入 12345 之後也有回車的,這個是 n 貢獻給other 輸入 之後,本身貢獻給other有4個 也有回車的,這個是 n 貢獻給other 輸入 之後也有回車的,但是因為首先 共享給other一個之後,while迴圈結束了,n 作...

在C語言中11結果是,c語言中,為什麼b11最終得出b

在c或c 中 是與的操作符,只要操作符兩邊都為真 不為0就為真 結果就為真。因為 1的二進位制碼 1的二進位制位全為1 不是0,所以兩個條件都為真,結果就為真。前面有人寫出了執行結果,可以看出,c或c 是用1來表示真的 所以結果就為1了 是 1 include int main include us...

請教這段C語言程式輸出結果為什麼是1023沒有

靜態全域性變數初值是0。所以arr初值是0。最後輸出迴圈是10次,包含10個陣列元素1111000000對於迴圈巢狀邏輯,要是理不清,在原程式迴圈的地方加printf語句把對於的一些變數列印處理會更清晰。比如我下面把原碼新增了printf。include int change int n,int s...