在C語言中 m 1 m 2怎麼運算的

2021-03-27 22:00:53 字數 4972 閱讀 5029

1樓:楓葉

#define num (m+1)*m/2執行時相當於 (n + 1 + 1) * n + 1 / 2相當於 (2 + 1 + 1) * 2 + 1 / 2所以答案是8;define m n+1 ;在程式執行時,直接在m的地方替換為n + 1;然後再將n的地方替換為 2,這樣才開始運算;所以define後最好打(),免得出錯

2樓:匿名使用者

#defint n 2

#defint m n+1

#defint num (m+1)*m/2這裡面的num的值是多少? 為什麼?

回答:這裡語句的意思是n=2,m=n+1=3;num=(3+1)*3/2=4*3/2=12/2=6;

我這裡寫的指的是程式執行的順序。

3樓:匿名使用者

直接把m代入,用一般數**算順序計算。如果m定義為整形數,除法時要注意去掉小數點後的資料。如3/2=1。

4樓:尤慕

你好,先算括號裡的,現依次算乘除。這樣的問題你是問著玩的吧?

5樓:匿名使用者

先算小括號內加法,後算乘法,再算除法

建議你好好去看看運算子優先順序部分

在c語言中,程式段int m=-2;while(m=0)m=m+1;執行後m的值是0

6樓:匿名使用者

while(m=0)中,注意m=0是賦值語句,m賦值0,while(0)不進行迴圈,m最後還是0

7樓:匿名使用者

int m=-2;while(m=0)m=m+1;

while(m=0)先賦值m=0,然後while(0)條件為假,迴圈結束,m=0

8樓:

while的()中清清楚楚寫著m=0來賦值,而不是m==0來判斷!

c語言中*(*(p+1)+2) 什麼意思?具體怎麼表示的? 20

9樓:一個青年

*(*(p+1)+2)為

二維陣列用指標表示的形式,相當於陣列元素num[1][2]

二維陣列本質上是以陣列作為陣列元素的陣列,即「陣列的陣列」,型別說明符 陣列名[常量表示式][常量表示式]。二維陣列又稱為矩陣,行列數相等的矩陣稱為方陣。

對稱矩陣a[i][j] = a[j][i],對角矩陣:n階方陣主對角線外都是零元素。

二維陣列a[m][n],這是一個m行,n列的二維陣列。設a[p][q]為a的第一個元素,即二維陣列的行下標從p到m+p,列下標從q到n+q,元素a[i][j]的地址計算方法如下:

按「行優先順序」儲存時,地址計算為:loc(a[i][j]) = loc(a[p][q]) + ((i − p) * n + (j − q)) * t

按「列優先順序」儲存時,地址計算為:loc(a[i][j]) = loc(a[p][q]) + ((j − q) * m + (i − p)) * t

存放該陣列至少需要的單元數為(m-p+1) * (n-q+1) * t 個位元組

擴充套件資料:

指向二維陣列的指標變數設二維陣列為a[m][n]

設有整型二維陣列a[3][4]如下:

1000 1001 1002 1003

1004 1005 1006 1007

1008 1009 1010 1011

設陣列a的首地址為1000,各下標變數的首地址及其值如上列出。

c語言允許把一個二維陣列分解為多個一維陣列來處理。因此陣列a可分解為三個一維陣列,即a[0],a[1],a[2]。每一個一維陣列又含有四個元素。

例如a[0]陣列,含有a[0][0],a[0][1],a[0][2],a[0][3]四個元素。

陣列及陣列元素的地址表示如下:a是二維陣列名,也是二維陣列0行的首地址,等於1000。a[0]是第一個一維陣列的陣列名和首地址,因此也為1000。

*(a+0)或*a是與a[0]等效的,它表示一維陣列a[0]0號元素的首地址。也為1000。&a[0][0]是二維陣列a的0行0列元素首地址,同樣是1000。

因此,a,a[0],*(a+0),*a,&a[0][0]是相等的。

同理,a+1是二維陣列1行的首地址,等於1004。a[1]是第二個一維陣列的陣列名和首地址,因此也為1004。&a[1][0]是二維陣列a的1行0列元素地址,也是1004。

因此a+1,a[1],*(a+1),&a[1][0]是等同的。由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。

此外,&a[i]和a[i]也是等同的。因為在二維陣列中不能把&a[i]理解為元素a[i]的地址,不存在元素a[i]。

c語言規定,它是一種地址計算方法,表示陣列a第i行首地址。由此,我們得出:a[i],&a[i],*(a+i)和a+i也都是等同的。

另外,a[0]也可以看成是a[0]+0是一維陣列a[0]的0號元素的首地址,而a[0]+1則是a[0]的1號元素首地址,由此可得出a[i]+j則是一維陣列a[i]的j號元素首地址,它等於&a[i][j]。

由a[i]=*(a+i)得a[i]+j=*(a+i)+j,由於*(a+i)+j是二維陣列a的i行j列元素的首地址。該元素的值等於*(*(a+i)+j)。

10樓:匿名使用者

按優先順序一步一步的計算:

假設:int a[3]=, *p; p=a; 先定一個指標p指向a陣列首地址。

解析下含義:

最裡的的是*(p+1)表示,指向地址數值+1後內地址的值顯示出來是2,指標指向不變還是指向陣列首地址。也就是p+1是指向了a[1]的地址,p還是指向a[0]地址。可以安陣列計算表示為p[1].

更直接。

下一步(p[1]+2) 這個是是數值p[1]=2 的值 加上 2 = 4

.但是*(4)。也就是定義的地址為4上的值。 這種操作會報錯,所以假設不成立,p不是變數指標而是指標的指標

。重新假設int a[2][3]=,} **p; p=a; 同樣先定一個指標p指向a陣列首地址

**p: 是指標的指標;*p指向的是指標的地址。也就是a[0]的地址。a[0]對陣列a[2][3]也是指標。

同樣一步一步化解:*(p+1),也是指向地址下一個地址的值。因為p是指向二維陣列,下一個地址值,是a[1]的地址也就是第一排的首地址。同樣可以化成:p[1].

*(p[1]+2) ,就是把p[1]看成指標q,那同於*(q+2)便於理解。同樣花簡為q[2].指向第一排資料的第3個資料也就是,6.

因此*(*(p+1)+2)=p[1][2] 也就是陣列a中的6 ..

11樓:洛雨曦

舉例:int p[2][3];這是個二維陣列2行3列,而用指標形式*(*(p+1)+2)表示的是p[1][2]這個元素,即:*(p+1)指向的是第一行(p[1]),*(p+1)+2表示的是第一行第二列的地址,而*(*(p+1)+2)就是取第一行第二列的內容也就是p[1][2]這個元素

12樓:等待阿若

推薦你去c語言貼吧去提問,**有專業的人會告訴你真的,不適合在知道上問

13樓:匿名使用者

去查「指向指標的指標」

14樓:

以地址p+1的值,再加上2組成的地址裡面的值

好拗口啊,呵呵

在c語言中 語句 printf("%d%d%%d%d",1+2,5/2,-2*4,11%3)是怎樣運算的

15樓:匿名使用者

先算1+2=3,這個沒什麼要說的

再計算 5/2=2(整型數與整型數計算,結果也為整型數.5/2=2.5,取整得2)

再計算 -2*4=-8,這個也沒什麼要說的

最後 11%3=2(11/3取餘數) 關於取餘計算.我想說一下,就是隻有整型數才能進行取餘計算. 特殊情況,如果m小於n,m%n=m.

輸出框輸出的是32-82(沒有空格)

還想說一下關於printf的問題.就以本題為例.如果%d的個數少於輸出項的個數,則多餘的項不輸出.如果%d的個數多於輸出項的個數.則多項的%d會輸出不定值.

還有,就是printf是按從左向右的順序輸出的.但是輸出項部分.是以從右向左的順序運算的.

也就是說.本例中.是先運算11%3=2,最後運算1+2=3,但是輸出時,還是自左向右.

這點需要注意...(函式引數的計算順序是自右向左)

關於習題嘛.我覺得你到書店裡買一本好點的二級習題就可以了.最重要的是反覆的做,自己總結知識點.不然.做再多的習題,也沒有用.

祝你成功!

16樓:匿名使用者

在函式裡,引數是從右向左進行的

int a=5;

printf("%d %d",a,++a);

結果是6 6

注意:在某些編譯器中是從左向右

在c語言中(1/2)*(a+b)*h和 (a+b)*h*(1/2)為什麼結果不一樣?第一個結果是0,第二個就不是.

17樓:窗邊消失的糖

你是來不是a,b取的都是整形(int型別)?這自是(1/2)*(a+b)*h中先算(1/2)*(a+b)。如果這個數小於0.

5就會自動四捨五入變為零。所以再乘h還是零。而後面一種先算(a+b)*h再除以二。

所以不為零

18樓:匿名使用者

結果是一樣的。

因為 (1/2)=0,一個式子不論是先乘 0 還是後乘 0都一個結果。

我剛才用 vc2003執行後驗證,結果一樣。

你的**是什麼?能不能發給我學一下?

19樓:匿名使用者

完整的**才好說,c語言如果無運算子的優先順序式子是從左向右算,變數為整型,則只存整數位,小數位去掉,9.9則為9。

20樓:曾經風情

a,b,h是哪個型別的?整型?

C語言中p的運算過程。求解,c語言中,p1的計算優先順序

也是等效於bai p a k 你寫成這樣 執行,會發現du結果相同 p 並不是zhi先自dao加 再取值。對於後內建自加,括號容的用途只是和誰結合,而不說運算順序 不管有沒有括號,後置自加,都是先取值 再自加。也就是賦值 p之後 再自加。只能說是有 號 c語言中,p 1的計算優先順序 這是複合賦值表...

C語言中輸出身高時怎樣在1 78後面加m

後面加了個m,應該是在printf 函式裡直接加上去的 printf mr.ah q s age and height n d fm n iage,fheight 程式有warning是出現在 fheight 1.78 因為fheight 是float型,而1.78是常數,預設是double型的,直...

在c語言中複合的賦值運算子怎麼處理

x x x x 你要正確拆開這個式子很重要 首先是 x x x 然後是 x 36 繼續 x x 36 x 30 x 30 x 30 30 60 c語言的這個運算應該從右向左賦值。對,頂樓說的對 把x 6代入公式,然後從右向左算。要點1 等符號的應用是同道理的 即把左邊的移過右邊運算 右邊用括號包住,...