C語言初學者,一段很簡單的語句求解釋。為什麼這段語句執行的結果是12啊

2022-05-08 02:15:00 字數 5755 閱讀 8048

1樓:

分析 fun(26)的返回值:

dowhile(num);

第1次迴圈

1,k *= 26 % 10 就是 k *= 6; 即k= k * 6 即 k = 1 * 6 就k = 6

2,num = num / 10 即 num = 26 / 10 即num = 2;

第2次迴圈

1,k *= 2 % 10 就是 k *= 2; 即 k = 6 * 2 就k =12

2,num = num / 10 即 num = 2 / 10 即num = 0; 這時不滿足迴圈條件,退出迴圈。

綜述: fun函式就是把 引數num 分離出各位,然後各位相乘,例如輸入 323 那麼返回值就是 3 * 2 * 3

2樓:匿名使用者

dowhile(num);

這段**從num的個位開始,逐位拿出來和k相乘。

3樓:九離天

k*=num%10;就是k=k*num%10

4樓:匿名使用者

首先num不為0時(n為26)就有k的輸出值為1,然後對26進行10求餘,k應該為6,輸出為16才對,呵呵僅供參考,可以去為一下你們老師

怎麼理解這段c**,結果為什麼是12?

5樓:gta小雞

統計0~6中所有偶數之和,結果為0+2+4+6=12

6樓:知道小小白

這段**就是算小於7的正偶數和。0+2+4+6 = 12

c語言初學者,求大神解釋下面這段話,越詳細越好。尤其是那幾個wr語句以及裡面的東西。謝謝

7樓:匿名使用者

這是什麼啊!

感覺0x80+i,應該是一個十六進位制的東東。

大體上的意思是什麼就不清楚了

8樓:匿名使用者

那是個函式,com那個是傳送命令,我記得清屏需要傳送兩個命令。應該是1602吧

c語言,這組語句求解釋(很簡單的語句,但是想不通)

9樓:冰上游魚

這跟編譯器等有關。 這個**會被編譯成不同的彙編**。

10樓:

大家測試一個輸出

i=8;

printf("%d,%d,%d,%d,%d\n",i++,i,i--,i--,i--);

你會發現輸出了5個8也就是說i++,i--操作之後都沒有影像i的值,但是++i,--i會影響,希望大家去驗證這句話。

那麼在printf裡的運算順序是從右向左。然後等運算完了再從左向右輸出,程式執行的順序如下:

printf("%d\n",-i--);//第1步 i本來是8 ,--在後面直接忽略,-8進棧

printf("%d\n",-i++);//第2步 i本來是8 ,++在後面直接忽略,-8進棧

printf("%d\n",i--);//第3步 i本來是8 ,--在後面直接忽略,8進棧

printf("%d\n",i++);//第4步 i本來是8 ,++在後面直接忽略,8進棧

printf("%d\n",--i);//第5步 i本來是8 ,--在前面自減1 ,7進棧

printf("%d\n",++i);//第6步 i本來是7 ,++在前面自加1,8進棧

在螢幕列印時候出棧因此為8 7 8 8 -8 -8

11樓:匿名使用者

這是一個很典型的將數字字元'0'到'9',轉換成對應的整數值的方法。由於在ascii字元編碼中,'0'到'9'是順序編碼的(30h~39h,h表示16進位制,換成10進位制是48d~57d,d表示10進位制)。你的程式假設字串為數字字串,*p是'0'到'9'中的一個,但是*p始終是字元,不是整數值,要得到其對應的整數值,就用*p-'0'。

c編譯器將把*p和'0'轉化成其對應的整數編碼,然後相減,則得到這兩個字元在ascii編碼中的差值(也叫偏移量),這就是*p這個字元對應的整數值。我們看一個例子:

假設*p=='6',*p-'0'就變成'6'-'0',轉化成起對應的ascii編碼就是54d-48d,就等於6d,就是整數值6。

另外你的程式有個問題:while(*p != null)應該改成

while(*p != nul)或者while(*p != '\0')

null是一個空指標,不是空字元。空字元的ascii編碼是0,型別是char,空指標的型別是void *

12樓:

糾結這些語法的東西很沒有意義。。。。

少用自加自減(連續使用的情況下)。

計算機不會糊塗,不代表程式設計師不會糊塗。

13樓:

首先要理解++(或--)在前++i(--i)和++(或--)在後i++(i--)有什麼區別;

這裡以++i和i++為例說明一下(--同理);而且他們都是表示式1、++i這個表示式先對i做自加,而且表示式等於自加後i的值;

所以如果初試i=8;

執行++i以後,i=9,表示式等於9.

2、i++這個表示式後對i做自加,而且表示式等於自加前i的值;

所以如果初試i=8;

執行++i以後,i=9,表示式等於8.

其次,printf列印表示式,它列印的是表示式的最終值,而且他是先從後往前計算表示式,然後列印表示式;

對於提問的例子,有了上面的基礎,現在解釋如下:

printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);

6、++i,執行後表示式8;

5、--i,執行後表示式7;

4、i++,執行後表示式8;

3、i--,執行後表示式8;

2、-i++,執行後表示式-8;

1、-i--,執行後表示式-8;

14樓:匿名使用者

這是編譯器編譯分析執行的不一樣 導致你會有這個問題的。

1,printf語句是從右向左分析執行, 正確的答案應該是 8 7 7 -7 -8

因為您用的軟體(個人認為是優先順序問題) 把-i--認為是 (-i)-- 這樣的情況下 就會得出你說的結果。

2,請根據考試大綱, 用指定的軟體

15樓:匿名使用者

我的結果是 8 7 7 8 -7 -8 (編譯器是dev-c++4.9.9.2)

我和二樓看法一樣..還是由printf函式入棧順序來看首先,++ --這兩個的優先順序高於-(現在分的時候是分到一級的,實際上不是)

最右邊的-i--也就是-(i--),結果就是-8,i的值變為7-i++ 也就是-(i++),結果就是-7,i==8i-- 結果8,i==7

i++ 結果7,i==8

--i 結果就是i,i==7

++i 結果就是i,i==8

倒過去就是了..

我這邊可以很好解釋

c語言初學者,幾個簡單問題,求解釋!

16樓:匿名使用者

這個怎麼解釋呢,哪句話不懂啊

17樓:

沒有break就一直執行下去啊

18樓:問號朵朵

可以執行,這主要是讓你理解自加運算子、continue和break語句

可以執行,這主要是讓你理解自加運算子、continue和break語句

1、 while(x<15) y++,x+=++y;

printf("%d,%d\n",y,x);

第一次進入迴圈後,y自加1,但此時y還是0,因為是y++不是++y。之後執行x+=++y,此時的y值已經是1了,然後再++y就是2了,++y在計算中是取++後的y。因為兩條語句之間是逗號,所以都在迴圈體中。

2、do

while(s<15);

第一次進入迴圈,s+=i++:因為是i++所以,計算中先取值後+,s就等於4。

if(s%7==0)continue;如果能s被7整除,就不執行迴圈體後面的語句,進入下一輪迴圈。

3、 if(y>50) break;

如果y>50就不執行迴圈體後面的語句並跳出迴圈。

4、 case 0:

case 3:a+=2;

case 1:

case 2:a+=3;

default:a+=5;

i從0到4,因為沒有break語句,為0時5個case全執行;為1時case 1: case 2 default:執行,以此類推。

針對hejitianxia的跟貼,還要補充一點,完全屬於**。

第一題:我認為逗號運算子計算順序為:從左至右,最後計算的表示式的值和型別便是整個表示式的值和型別,簡單的例子是:

a=(1,2,3); 結果為a=3。所以y++,x+=++y是先算的y++然後算x+=++y。

第二題:s在第二次迴圈就等於7,else ++i;在第二次迴圈就沒執行。

第三題:只要設定了跳出語句就不是死迴圈。while(a=14);其中a=14是條賦值語句,每一次執行到while(a=14);就將a賦值為14,迴圈體中有a+=2;所以a=16。

同時a=14又是while的迴圈條件,14不為0,while一直迴圈直到y>50結束迴圈。

再次宣告:只是討論。

c語言這段程式求解,為什麼輸出結果是0,11,10,12

19樓:阡陌她人只為你

因為b--<=2顯然不成立所以為0,&&運算先看左邊如果左邊為0那麼無論右邊為什麼整個都為0,所以當判斷左邊為0後就不再執行後面的了 。

20樓:匿名使用者

#include

void main()

21樓:匿名使用者

b--<=2是false

不執行c++

22樓:匿名使用者

&&操做的特性,當左邊判斷為false時,將不再操作右邊的部分,||操作亦然。

a++<=10&&b--<=2已經為false了, c++根本沒有操作。so

求解釋一段c語言程式的執行結果,程式及結果如圖所示

23樓:千矢羽

子函式a的形參是指標——int *p,使得呼叫子函式時輸入的是地址—版—&x:指的是x的地址;

子函式的權用處是輸出x地址+1的值,printf("%d\n",*++p)輸出垃圾值

++p,是無論執行什麼語句都先加+1再執行語句相當於:

p=p+1;

printf("%d\n",*p);

24樓:凹凸曼和怪獸

列印bai出來應該是

個很大的未知du數,因為a(&x)傳入的zhi引數是daox的地址,p是一個指標,所以內p=x的地址容 而不是20,*++p指代的是先將p做加的操作 也就是將x的地址做加1操作,然後再取加1後地址裡面的值,而你現在只設定了x的地址上的值為20,而x加1的地址上的值是個未知數,所以答案是一個未知數;

25樓:匿名使用者

在函式a中, printf 列印*++p,意思就是列印*(++p), 也就把傳過來的x的地址加一後,列印這個變化後的地址的內容,裡面亂碼。

26樓:匿名使用者

在函式a( *p);函式引數*p指標變數,函式實現中的 *++p等於*(++p)實際上一個地址,++p 等於p =p+1;而後取地址。

求大神指教,對於C語言初學者應該怎樣去學習那些符號語言,或者

學習c語言其實不難,把握兩個方向 資料結構 函式用法 1 由於c是在dos模式下執行,建議學一點相關的知識 2 c語言屬於程式語言,如果想編一個好程式,需要學習好資料結構 3 作為一個程式設計師,需要強的邏輯思維和靈活多變的頭腦 4 在程式設計上講,需要一定的英語基礎,其實有很多函式基本上就是英語單...

C語言初學者求助,程式設計題,大神看看我編的程式是否有錯誤

好吧我覺copy得樓上兩位簡直bai就是亂來的。這個是最基本的判斷du選擇語句。上題中,假設zhia小於30,則m 1.否則dao a大於等於30 且a小於40,則m 2.同理,a在40到49之間,m 3 a在50到59之間,m 4.a在60到99之間,m 5 case的作用是,讓程式進行跳轉。其實...

c語言的問題,我是初學者。下面的程式為什麼可以編譯但會停

關於 c 語言程式出錯的型別有很多。例如 語法錯誤 隱藏的未知錯誤等。其中 語法錯誤是最容易排除的。例如 int num 10 如果在該語句後面缺少了一個分號,那麼編譯器就會報錯 正確的語句應該是 int num 10 但是隱藏的未知錯誤,那麼除錯起來可就是非常困難了,如果沒有豐富的程式設計經驗,那...