1樓:網友
這個問題涉及到儲存的問題,記憶體儲存計算式的時候是按照優先順序和先後順序儲存的,提取的時候是逆著提取,所以考慮這一點就容易理解了,你若學過資料結構就好理解了。
用第二個式子解釋:i2=(+i)+(i)+(i);三個++運算子,兩個+運算,++運算子優先順序高,先提取儲存單元裡的兩個++運算子,於是i進行了兩次++運算,變為3;再提取第乙個+運算,式子運算到了前兩項,即(++i)+(i)等於6(相當於第乙個式子的運算了);然後提起第三個++運算,i變為4,;接下來提取最後乙個+運算,即6+4;總結一下,運算順序為如下:++這樣講能明白麼?
用第三個式子講解:i2=-(i)-(i);同樣++運算子優先,於是進行第乙個++運算,但不同的是,這裡第二個運算的是-符號,這不是運算,而是負符號,所以比第二個++運算更先提取;接下來第二個++運算,最後是減運算;運算順序為,++負號)、+減號)。能懂麼?
問題很犀利,讓我也學到了很多。
2樓:一一粑粑
i等於1,經過2次自加等於加3就等於6。可以反彙編,看到詳細過程。
3樓:
好詭異哦,不過好象沒必要究根,平時不這麼寫的。
4樓:血紛飛
他是執行了,自家運算後又進行的加法運算就出這樣的結果。
int i=3;k=(i++)+(++i)+(i++);求k,i的值
5樓:信必鑫服務平臺
int i=3;k=(+i)+(i)+(i++)k=15,i=6;
int i=3;k=(+i)+(i)+(i);
k=18,i=6
int i=3;k=(i++)i++)i++)k=9,i=6
i=6不管哪種,i都是加了三次,由3到最後的6主要區別在於i++是先運算,後執行i=i+1++i是先執行i=i+1,後運算。
所以第乙個先執行了兩次i=i+1後i=5,三個相加後結果是15,然後再加1,i=6
第二個是執行了三次i=i+1後i=6,三個相加後結果是18第三個是先執行相加,結果為9,後執行三次i=i+1,i=6<>
c語言中的 i++ 和 ++i 的區別。
i++和++i的區別就是:
i++ 先引用,後增加。
i :先增加,後引用。
換句話就是:
i++ 先在i所在的表示式中使用i的當前值,再讓i加1++i : 先讓i加1,再在i所在的表示式中使用i的新值。
取決於++和i的相對位置:
在i前面,i先加1,然後在表示式中用i的值;++在i後面,先在表示式中用i的值,然後i再加1。
例如:1、i ++
int i = 0;
while (i < 10) {
i ++2、++i:
int i = 0;
while (i < 10) {
i;1與2,經過運算後,i的值都是10。在while和for迴圈中的 ++i 和 i++ 是沒有區別的。
c語言若int+i[5]={1,2,3}則i[2]的值為?
6樓:
c語言若int+i[5]=則i[2]的值為?
你好,題目就是這樣嗎?能不能拍照?
第三個。這是定義了乙個長度為5的整形陣列。
謝謝你。不客氣。
從ii[1] i[2] 分別為 1 2 3後面兩個為空。
所以選3
int i=1;i+=i+++++i; 然後 i = ?
7樓:張三**
首先看結果,然後再來分析原因。
i +=i++ i
等價於 i = i + i++)i)
等價於 i = 1 + 1 + 3
所以結果是5
這樣的原因有兩個:
基於上面說的原因,所以該式子的孝喊結合方式為 i = i + i++)i)
然後還有另外乙個問題,就是為什麼++i最後的值會是3,這個涉及到i++和++i的區巧兄野別。
其實無論 i++ 還是 ++i ,都是先+1,然後參與運算而不是 ++i 先加1,然後運算,而i++ 先運算塵好後加1。
只不過 i++ 是先將i的賦值給乙個臨時變數,然後用那個臨時變數替換掉 i++ 然後將 i 的值+1
通過 i++ 和 ++i 的區別就能解釋同為什麼上面那個式子的i的值是3
int i=10%3;if(i<2) i++;else i--;輸出i的值是
8樓:
摘要。int i=10%3;if(i<2) i++;else i--;輸出i的值是。
親,輸出這個。
能看得清?輸出2
第一行 求餘 得1
第二行 判斷是否小於2 i等於1,小於2
i++ 自增輸出2
答案是2 ?
嗯嗯。希望我的對你有幫助,祝您生活愉快謝謝<>
int i=3;k=(i++)+(++i)+(i++);求k,i的值
9樓:大野瘦子
int i=3;k=(+i)+(i)+(i++)k=15,i=6;
int i=3;k=(+i)+(i)+(i);
k=18,i=6
int i=3;k=(i++)i++)i++)k=9,i=6
i=6不管哪種,i都是加了三次,由3到最後的6主要區別在於i++是先運算,後執行i=i+1++i是先執行i=i+1,後運算。
所以第乙個先執行了兩次i=i+1後i=5,三個相加後結果是15,然後再加1,i=6
第二個是執行了三次i=i+1後i=6,三個相加後結果是18第三個是先執行相加,結果為9,後執行三次i=i+1,i=6<>
c語言中的 i++ 和 ++i 的區別。
i++和++i的區別就是:
i++ 先引用,後增加。
i :先增加,後引用。
換句話就是:
i++ 先在i所在的表示式中使用i的當前值,再讓i加1++i : 先讓i加1,再在i所在的表示式中使用i的新值。
取決於++和i的相對位置:
在i前面,i先加1,然後在表示式中用i的值;++在i後面,先在表示式中用i的值,然後i再加1。
例如:1、i ++
int i = 0;
while (i < 10) {
i ++2、++i:
int i = 0;
while (i < 10) {
i;1與2,經過運算後,i的值都是10。在while和for迴圈中的 ++i 和 i++ 是沒有區別的。
10樓:網友
計算結果為:14,15,12。
首選我們要搞清楚:++i 是先加後賦值,i ++是先賦值後加。++i和i++都是分兩步完成的。
比如。a=i++;
先將i的值賦予給a,然後i再進行自增操作,變成i+1。
b=++i;
i先進行自增操作,變成i+1。然後再將這個值傳給b。
按照從左到右的計算順序,下圖示出了每個小括號的計算結果,就能得出最後的值:
擴充套件程式:
i++ 不能作為左值,而++i 可以。
左值是對應記憶體中有確定儲存位址的物件的表示式的值,而右值是所有不是左值的表示式的值。一般來說,左值是可以放到賦值符號左邊的變數。
但能否被賦值不是區分左值與右值的依據。比如,c++的const左值是不可賦值的;而作為臨時物件的右值可能允許被賦值。左值與右值的根本區別在於是否允許取位址&運算子獲得對應的記憶體位址。
11樓:monument丶執滅
int i=3;k=(+i)+(i)+(i++)求k,i的值。
int i=3;k=(+i)+(i)+(i);求k,i的值。
int i=3;k=(i++)i++)i++)求k,i的值。
i都是6,k分別是15,16,9
用vc++出的答案。
你們除了考慮優先順序外,都不用考慮結合性?比如第乙個,(+i)+(i)+(i++)因為存在兩個同級的「+」運算,根據「+」運算子的左結合性,在編譯時,其實先處理(++i)+(i)這部分,然後再將此結果和(i++)相加。
12樓:假裝_不曉得
主要就是++i和i++的區分 ++i是先自加後使用再自加 i++是先使用再自加 ,主要是你要搞清楚到底是先使用還是先自加 告訴你我的記憶方法 從左到右看到++就先加 看到i就先用i
13樓:網友
i++是先運算後加1,++i是先加1在運算。。。
14樓:樂觀的
我真的不知道你是咋個算出這個答案的朋友,++i和i++你搞明白沒要?
inti=3;k=(+i)+(i)+(i++)求k,i的值。
i=6,k=14
inti=3;k=(+i)+(i)+(i);求k,i的值。
i=6,k=15
inti=3;k=(i++)i++)i++)求k,i的值。
i=6,k=12
int i=0,a[]={3,4,5,4,3}; do{a[i++];{while (a[++i]<5); for(i=0;i<5;i++) printf("%d",a[i]);求詳細解
15樓:網友
while前的括號打反了?
程式並不會出問題, 因為第一次迴圈a[i++]執行後, i = 1; while條件中先++i, 導致i = 2, 而a[2] <5 條件是不成立的, 直接跳出了do {}while迴圈。 執行for迴圈遍歷列印a陣列。
這裡如果a = 就出問題了, 正好把a[3]=5跳過去了, 會再次進入迴圈, 結果是陣列越界了。 結果就不一定了, 越界後如果那段記憶體不可讀, 程式就崩潰了, 如果可讀讀則讀到乙個隨機值, 正好是大於5的, 也就碰巧出迴圈了。
a[i]++
那分析是這樣:
第一次: a[i]++此時a[0] = 4; i = 0;
while (a[++i] <5); 此時i = 1, 判斷的是a[1] <5, 條件成立。
第二次:a[i]++此時a[1] = 5; i = 1;
while (a[++i] <5); 此時i = 2; 判斷的是a[2] <5, 條件不成立, 跳出迴圈。
資料變成45543, 我已執行確認是這結果, 跟你的結果不一樣, 看看是不是**還輸入錯了。
16樓:網友
#include
int main()
do //do..while();迴圈,先執行一次迴圈體。
while (a[++i]<5); //第一次來判斷 4<5成立了,繼續迴圈 第二次。。以下省略。
for(i=0;i<5;i++)//迴圈5次printf("%d",a[i]);//輸出a[i]的值,也就是把a中的所有值都輸出一遍了。
return 0;
17樓:
int i=0,a=;//資料的定義並初始化do while(a[++i] <5) //執行一步a[i++]然後判斷a[++i] 是否大於5,大於5則執行下面的語句,否則,繼續迴圈;唯一要區別的是 i++,是先把i用了在把i+1;++i是先把i+1,再使用i;
do {}while()是先執行迴圈體後,後進行條件檢查,而while(){是先檢查條件後執行;
for(i=0;i<5;i++)
printf("%d",a[i]);
就是從陣列第乙個位置(或者說成0號位置)開始順序列印出這個5個元素,列印的格式是 整形10進位。
18樓:匿名使用者
當中那個花括號什麼啊,這不就是把這個陣列輸出嗎,do a[i++]while (a[++i]<5);這個迴圈沒有意義吧。
for a 1,i 1 1i1 iaprintf2d n ,aprintf2d n ,i為何結果只輸出最後的那個呢
你的 1 i 1應該理解為 1 1 1 1 1的結果為1,1 1 的結果為0 因此這個迴圈條件不滿足,不會執行 把printf 2d n i 放到裡面,你的輸出結果是for迴圈結束後的i值,當然只有一個了 因為你的for迴圈裡面的第二個是條件表示式 1 i 1,這個式子本身是錯誤的,導致for迴圈並...
1i2ii3iii4v5iv六是什麼呢?這個符號叫
六是 這個符號叫羅馬數字,是世界上最早的數字表示方式 6到12的符號為 6 7 8 9 10 11 12。羅馬數字是阿拉伯數字傳入之前使用的一種數碼。羅馬數字採用七個羅馬字母作數字 即 1 x 10 c 100 m 1000 v 5 l 50 d 500 1 i 2 ii 3 iii 4 iv 5 ...
試求開關S閉合前後電路中I1 I2 I及電源的端電壓U當S閉合時,I1是否被分去一些如果
1 由於電源內阻r0 0,根據全電路歐姆定律,u e 220v i1 p1 u 60w 220v 0.27a i2 p2 u 100w 220v 0.45a i i1 i2 0.27 0.45 0.72a.2 若電源內阻r0 0,根據全電路歐姆定律,閉合s時,60w電燈中的電流不會變動。3 由於p ...