c語言程式怎麼理解,這個C語言程式,怎麼理解??

2021-12-19 09:44:44 字數 3066 閱讀 8937

1樓:慎恕甘儀

函式型別為空,所以函式fun對這個程式沒作用。指標變數*s仍指向陣列a的首元素1.1的地址,輸出格式為%5.2f,保留兩位小數,所以輸出1.10

2樓:郭蘭環戌

你只要弄明白指標的用法就可以了(建議看看《c與指標》)。我解釋一下:

fun(a,b,s);傳入陣列a,b的地址,以及s的地址,此時s指向陣列的第一個值,即是1.10。

s=(float

*)calloc(1,sizeof(float));把s的指向改變了,即是改變了指標的值。

*s=*p1+*p2++;運算,不管

但是返回的時候,s指向的位置沒有變,還是1.10,所以輸入是1.10關鍵在於理解c語言的直傳遞,對於指標,傳遞的是地址的值,所以,地址的值的修改也是對資料沒有影響的。

去掉s=(float

*)calloc(1,sizeof(float));結果就是相加的了。

3樓:匿名使用者

這裡有一個巢狀函式addc,程式編譯到r=addc(addc(x,y,c))時,跳到開頭的程式,計算出結果c時返回,把c賦值給r,原理都類似,不一一解釋啦,希望能幫到你

4樓:匿名使用者

主函式中定義了一個addc函式,該函式實現的功能為實現x+y,並且把結果放在z中

5樓:劉劉

首先z=x+y=6..主要是這個函式的呼叫r=addc(addc(x,y,z),addc(y,z,x),z);先執行這個addc(x,y,z)並返回值為6,再呼叫這個addc(y,z,x)並返回值為8,最後呼叫addc(addc(x,y,z),addc(y,z,x),z);即addc(6,8,6);最終返回值為14.。

最好自己在r=addc(addc(x,y,z),addc(y,z,x),z);這個地方設定斷點除錯一下,看一下計算機內部是怎麼執行的,這樣有助於你理解。。

6樓:丙暖

addc函式的意思就是c儲存a+b的結果

z = x+y沒什麼作用,以為被再次賦值了r就是z儲存x+y+x+y+y的值,結果應該是14你就按照函式的定義去進行簡單的替換就可以得出結果的最後給你說一下,是\n

7樓:周慧彬

這種程式是學校讓學生加深c語言語法的理解的吧,要知道c語言是傳值呼叫的,所以函式呼叫不會影響實參的值,所以addc函式只是計算兩個數的和而已。此外c語言是可以遞迴的,預設的呼叫約定是__cdecl,將引數從右到左入棧,不過這裡最終的值不受這個概念的影響,所以最終的值就是

2*x + 3*y = 14

8樓:解0人

int addc(int a,int b,int c)是個求和函式,函式呼叫後返回a+b的和,也就是c主函式中,x=4,y=2

z=x+y=6,

對於r=addc(addc(x,y,z),addc(y,z,x),z)

r的值是通過addc函式計算的,其中的兩個引數又是通過addc計算的,如果你的編譯器讀取引數的順序是從左到右,那麼

先計算addc(x,y,z),結果是6,

再計算addc(y,z,x),結果是8,

最後r=addc(6,8,z),結果是14。

另外,printf("%d/n",r);應該改為printf("%d\n",r);

9樓:

return的是前兩個引數的和 但是第三個引數的值不會改變

程式輸出14

這個c語言程式,怎麼理解??

10樓:匿名使用者

這是一個字串陣列, s[0]是指向第一個字串的指標,strlen函式是求字串的長度,

第一次strlen(s[1])-1=3,printf函式列印出來的是 s[0]+3,就是指標向後偏移3位,所以輸出一個*

第二次strlen(s[1])-1=2,printf函式列印出來的是 s[0]+2就是指標向後偏移2 位,就是指向第三個*,輸出第三,第四個*。後面道理一樣

11樓:龍__鳳

這是程式執行的結果,顯然答案是d、c、b、a。

程式有問題,改正之後如下:

#include

#include

void main( )

char  *s[2] = ; //這裡定義的s是一個指標陣列,也就是說陣列s的每個元素都是一個指標

//初始化後,指標s[1]指向字串"****",指標s[1]指向字串「****」

while (*s[1] != '\0') {//當字元指標s[1]不為空時

printf("%s\n", s[0]+strlen(s[1])-1);//strlen(s[1])是計算指標s[1]所指向的字串長度

s[1]++;//使指標s[1]指向記憶體中的下一個位置

12樓:yd_淹死的魚

char *s[2] = ;其實是定義了個字串陣列,為了理解這個題,可以將s[0]看成str0,s[1]看成str2,:

str0 = "****"

str1 = "****" strlen(str1) = 4下面就簡單了:

第一行為 printf("%s\n", str0+(4-1)); 即 prinf("%s\n",str[3]);列印*

依次為:* ** *** ****。

主要掌握s[0] s[1]為地址。*s[0]和*s[1]表示取地址內的字元。

13樓:程式猿的救贖

答案是d,c,b,a

下面這個c語言程式怎麼理解?

14樓:天雨下凡

一般不建議用巨集定義來模擬函式功能,因為容易出錯,巨集定義在執行時,會直接替換,不會加上括號:

h(20+6,8-4)=20+6*8-4=20+48-4=64

c的值是64

15樓:匿名使用者

用20+6替換上面的a,用8-4替換上面的b,可得

h(20+6,8-4) 為 20+6*8-4 也就是64

最後列印出來的c就是64

c語言秒錶程式,C語言秒錶程式

下面程式你試下,延時函式自己加一下,幾毫秒到幾十毫秒 include quot reg51 h quot unsigned char i,j,m,xa 4 unsigned char table1 0x01,0x02,0x04,0x08 unsigned char table2 0x3fev0x06...

C語言程式程式設計,如何編寫C語言程式

把你的思路想好,想要達到什麼樣的功能,思路清晰後就可以一個一個功能的去寫,出錯了不用急,想一下自己錯在什麼地方,好好的看一下 雖然這樣做會花很多 的時間,但是這樣做會提高自己的閱讀分 能力,啊?書上不是有麼 自己學著寫啊 10.include main printf n 如何編寫c語言程式?首先,你...

c語言程式填空問題,C語言程式填空問題

很明顯,第bai一個是開啟檔案du,因為下面提 zhi示了開啟失dao敗。已經給出了迴檔案指標file fp,必然答最後是判斷fp的值,但是fp一開始就是空,所以肯定不會直接判斷,必然是要求寫fopen函式,已經提示檔名稱,且明說了要寫檔案所以肯定是fopen f1.dat 但是問題出來了,是w什麼...