c語言函式的行參是變數,請高手指點

2022-10-26 07:25:20 字數 4768 閱讀 3572

1樓:匿名使用者

你要輸出的是s(a+b)和a+b,但是你只給了一個"%.2f\n%f"。所以,計算機會取第一個,也就是說,他只輸出s(a+b)。

因為 s(x)=pt*x*x ,所以s(a+b)=pt*a+b*a+b=5.5*1+2*1+2=5.5+2+2=9.50

2樓:養海瑤

這個問題是典型的使用#define的「邊緣效應」問題,原因樓上的都已經解釋了,這裡給你說下原理及解決辦法。例如如下定義:

#define n 2+3 //我們預想的n值是5,我們這樣使用n

int a = n/2; //我們預想的a的值是2.5,可實際上a的值是3.5

原因在於在預處理階段,編譯器將 a = n/2處理成了 a = 2+3/2;這就是巨集定義的字串替換的「邊緣效應」因此要如下定義

#define n (2+3)

回到你這個題目來說,如果你想達到你的目的,這個題就應該這樣使用#define:

#include

#define pt 5.5

#define s(x) (pt*(x)*(x))

void main()

如果還不清楚,就hi我。

3樓:

#include

#define pt 5.5

#define s(x) pt*(x)*(x) //define只是替換,也就是說pt*a+b*a+b

void main()

還有我執行你的是

9.50

0.000000

執行我修改的是

49.50

0.000000

4樓:匿名使用者

printf("%.2f\n%f",s(a+b),a+b);

s(a+b) = pt*a+b*a+b=5.5*1+2*1+2=9.5 因為是以.2f格式輸出的 解果就是 9.50

a+b = 3 由於數太小 以浮點型輸出的話 就是-0.000000不是你要的4.95呀

c語言函式呼叫時,實參和形參是如何傳遞的?什麼時候要寫指標型變數?求高手指點~

5樓:匿名使用者

形參bai在函式定義時表示的du一種佔位符zhi,實參就是裡面存有實際變數dao值或者版

常量,函式呼叫時,實參權值會自動傳遞給形參變數。指標比較複雜了。是變數的地址,如果引數型別是指標型別,則必須把實參變數的地址傳遞過去。當然在函式內也是間接引用實參變數的。

比如void f(int * p) //形參是指標型別變數下面是呼叫形式

f(&a); //呼叫函式,實參是變數a的地址。

6樓:孟於清

比如void main(void)是形參···· void main(unsigned int m)是實參

7樓:jyw金

回答:1.傳值呼叫,形參是實參的一個拷貝,形參和實參不是同一個儲存單元。

2.傳地址呼叫,將實參的地址傳給形參,形參和實參操作同一儲存單元。

8樓:巢秀榮容子

這程式是你寫的嗎?

要是你寫的話

你就看下面的三段話

就能找出。

1.比如你定義一個函式專void

add(int

a,int

b),這裡的屬a和b就是形參。

2.當你進行函式呼叫的時候,add(1,

2),這裡的1和2就是實參。

3.形參就是沒有賦值的變數,實參就是有賦值的變數

c語言中,函式的行參與實參之間的關係是什麼

9樓:流年清淺_小豪

就是,實參是主函式呼叫函式的時候傳進去的那個,形參就是在被呼叫函式中的,代表那個實參的值。

#include

int fun(int n)

int main()

a就是實參,函式中的 int n 就是形參。

形參出現在函式定義中,在整個函式體內都可以使用, 離開該函式則不能使用。實參出現在主調函式中,進入被調函式後,實參變數也不能使用。 形參和實參的功能是作資料傳送。

發生函式呼叫時, 主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。

1.形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時, 即刻釋放所分配的記憶體單元。因此,形參只有在函式內部有效。 函式呼叫結束返回主調函式後則不能再使用該形參變數。

2.實參可以是常量、變數、表示式、函式等, 無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。

3.實參和形參在數量上,型別上,順序上應嚴格一致, 否則會發生「型別不匹配」的錯誤。

4.函式呼叫中發生的資料傳送是單向的。 即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函式呼叫過程中,形參的值發生改變,而實參中的值不會變化。

c語言規定,呼叫一個函式時,實參變數和形參變數之間的資料傳遞方式是什麼 5

10樓:四舍**入

函式只有兩種傳遞方式:

1、值傳遞,又稱單向傳遞,只能把實引數值傳給形參 ,形參最後的結果不影響實參(形參改變大小 ,實參大小不變)。

2、址傳遞,通過指標,把實參的地址給形參,形參的大小可以影響實參。

11樓:匿名使用者

看到很多都說是值傳遞,本人認為只能由使用者指定傳遞方式。

在c語言中,軌道引數傳遞方式有兩種(其實還有引用傳遞):值傳遞和地址傳遞,也就是說可以值傳遞,也可以地址傳遞。至於到底採取什麼傳遞方式應該得有使用者根據形參型別來指定了。

比如 函式 int f( int *p) 此處接收的只能是地址型別

在主函式中定義變數 a =3; 此時實參a的值為3,很明顯 如果這種採用值傳遞方式呼叫 f(a)肯定不合適,

正確的應該是地址傳遞方式呼叫 f(&a) ,也許有些會說,地址也是值。但c明確的規定,實參的值和實參的地址是有本質區別的

故本人認為 傳遞方式只能由使用者根據 形參來指定傳遞方式。

12樓:

函式只有兩種傳遞方式 一個是值傳遞 一個是址傳遞 址傳遞 是指傳的是地址 也就是說 是以陣列過指標作為引數傳遞 而值傳遞傳的是 數 可以是整形的 也可以是實行的

13樓:匿名使用者

資料傳遞是「值傳遞」,即單向傳遞,只由實參傳遞給形參,而不能由形參傳回來給實參。

14樓:匿名使用者

實參向形參的資料傳遞是「值傳遞」,單向傳遞,只由實參傳給形參,而不能由形參傳回給實參

有一個c語言函式,不知道設定什麼樣的返回值型別,請高手指點 5

15樓:

返回值只能返回一個,如果想返回多個,有以下兩種方法:

1、自定義型別,包含有所需要返回的所有值,返回自定義型別2、返回值隨便選一個,其他需要返回的以出參形式返回。

}如上,返回值為bool,表示建立失敗與否,出參int &nerrorcode,返回建立socket失敗時,錯誤**

使用時:

int nerrorcode =0;

if(donetsocket(nerrorcode))else

16樓:御含靈

錯誤儘量在出現錯誤的地方處理(比如就地輸出錯誤log等)

所以你返回一個bool表示不成功就行了

17樓:匿名使用者

如果想實現多種型別和資料型別的返回,最好的辦法是使用物件導向的思想進行。

c語言中如何將函式的多個返回值,應用於主程式中 啊?請高手指點

18樓:三國小風

把想返回值的變數的地址作為引數傳送,然後到函式裡再對引數賦值就可以了比如,想改變main函式中a的值

函式定義:

void f(int * pa,....)呼叫函式時

f(&a,...)

這樣就可以「返回」多個值了,只不過無法用return語句返回

19樓:草一樣堅強

函式應該只有一個返回值!return之後整個函式終止執行!

20樓:匿名使用者

哥們,一個函式只能有一個返回值,你可以試一下指標或陣列!

21樓:

函式最多 只能有1個返回值

你想修改多個應該得應用到指標

關於c語言巨集函式的定義問題,懇請高手指點!!

22樓:匿名使用者

sort(a)就好了

define就是簡單的替換,並且是在編譯之前完成,那些寫什麼int*在裡面的都是錯的!

23樓:

定義巨集函式時用指標作為引數,呼叫的時候就可以直接用sort(a)即可

24樓:匿名使用者

可以通過指標 sort(int *a)

25樓:匿名使用者

#define sort(int *a) .....

26樓:匿名使用者

有什麼問題?

直接上不就行了

一般函式中怎麼傳陣列的,巨集裡就怎麼傳陣列

C語言程式設計 請高手指點

問題出在你第2個迴圈裡的break上,你這樣寫 for i 99 i 0 i 就可以解決你的問題。順便勸你一句,注意編碼規範。一點一滴的養成,該打括號就打上,增加可讀性。看你的 真痛苦,還要自己眼睛去配對。初期不要考慮所謂的效率,你稍微編錯一句話,類似你出錯的地方,失去的效率資源都不止上百個括號失去...

怎樣定義C語言函式中的引數 實參 形參

int fun int x,int y x,y就是 du形zhi 參dao main include void add int x,int y 定義函式時候,函自數的參bai數就是形參,void main c語言中什麼是形參,什麼是實參?形參 全稱為 形式引數 是在定義函式名和函式體的時候使用的引數...

關於c語言的,請高手支招

下面這個就可以實現你說的功能了!仔細看看不難的。可以驗證當x取3.141592627 約為pi 時,結果很接近0 include include main while fabs s1 e fabs為對實數求絕對值的函式 你這個程式寫得很亂呀!這道題目可以這樣做 includ 先定義一個求階乘的函式 ...