1. c語言中如何調用子程序
在c/c++中,沒有子程序的說法,而叫做函數。函數可以有返回值,不需要時,可定義為void類型。
函數的使用與子程序的用法相同,沒有什麼特殊之處。例如
.............................................................................
int
max(int
a,
int
b)
{
/*
返回a和b的最大值
*/
return
(a
>
b)
?
a
:
b;
}
.............................................................................
int
a
=
5,b
=
8,c
=
3;
printf("a,b,c中的最大值是
:
%d\n",max(max(a,b),c);
2. c語言子函數的調用格式是什麼
調用子函數的目的是程序代碼的可讀性,如果一個函數超過了20行那就考慮調用子函數來完成了。
3. c語言中子函數能不能調用子函數
函數可以調用自身,這叫做函數的遞歸調用
一、基本內容:
C語言中的函數可以遞歸調用,即:可以直接(簡單遞歸)或間接(間接遞歸)地自己調自己。
要點:
1、C語言函數可以遞歸調用。
2、可以通過直接或間接兩種方式調用。目前只討論直接遞歸調用。
二、遞歸條件
採用遞歸方法來解決問題,必須符合以下三個條件:
1、可以把要解決的問題轉化為一個新問題,而這個新的問題的解決方法仍與原來的解決方法相同,只是所處理的對象有規律地遞增或遞減。
說明:解決問題的方法相同,調用函數的參數每次不同(有規律的遞增或遞減),如果沒有規律也就不能適用遞歸調用。
2、可以應用這個轉化過程使問題得到解決。
說明:使用其他的辦法比較麻煩或很難解決,而使用遞歸的方法可以很好地解決問題。
3、必定要有一個明確的結束遞歸的條件。
說明:一定要能夠在適當的地方結束遞歸調用。不然可能導致系統崩潰。
三、遞歸實例
例:使用遞歸的方法求n!
當n>1時,求n!的問題可以轉化為n*(n-1)!的新問題。
比如n=5:
第一部分:5*4*3*2*1 n*(n-1)!
第二部分:4*3*2*1 (n-1)*(n-2)!
第三部分:3*2*1 (n-2)(n-3)!
第四部分:2*1 (n-3)(n-4)!
第五部分:1 (n-5)! 5-5=0,得到值1,結束遞歸。
源程序:
fac(int n)
{int t;
if(n==1)||(n==0) return 1;
else
{ t=n*fac(n-1);
return t;
}
}
main( )
{int m,y;
printf(「Enter m:」);
scanf(「%d」,&m);
if(m<0) printf(「Input data Error!\n」);
else
{y=fac(m);
printf(「\n%d! =%d \n」,m,y);
}
}
四、遞歸說明
1、當函數自己調用自己時,系統將自動把函數中當前的變數和形參暫時保留起來,在新一輪的調用過程中,系統為新調用的函數所用到的變數和形參開辟另外的存 儲單元(內存空間)。每次調用函數所使用的變數在不同的內存空間。
2、遞歸調用的層次越多,同名變數的佔用的存儲單元也就越多。一定要記住,每次函數的調用,系統都會為該函數的變數開辟新的內存空間。
3、當本次調用的函數運行結束時,系統將釋放本次調用時所佔用的內存空間。程序的流程返回到上一層的調用點,同時取得當初進入該層時,函數中的變數和形參 所佔用的內存空間的數據。
4、所有遞歸問題都可以用非遞歸的方法來解決,但對於一些比較復雜的遞歸問題用非遞歸的方法往往使程序變得十分復雜難以讀懂,而函數的遞歸調用在解決這類 問題時能使程序簡潔明了有較好的可讀性;但由於遞歸調用過程中,系統要為每一層調用中的變數開辟內存空間、要記住每一層調用後的返回點、要增加許多額外的 開銷,因此函數的遞歸調用通常會降低程序的運行效率。
五、程序流程
fac(int n) /*每次調用使用不同的參數*/
{ int t; /*每次調用都會為變數t開辟不同的內存空間*/
if(n==1)||(n==0) /*當滿足這些條件返回1 */
return 1;
else
{ t=n*fac(n-1); /*每次程序運行到此處就會用n-1作為參數再調用一次本函數,此處是調用點*/
return t; /*只有在上一句調用的所有過程全部結束時才運行到此處。*/
}
}
4. 簡述c語言屬於程序語言哪種運行方式及其運行步驟
編譯方式:將所有的源程序(後綴為.c的文件)編譯成目標程序(這時會生成一個.obj的文件)後,再執行,執行完後會生成一個後綴為.exe的可執行文件
5. 求教:c語言子函數調用的方法(詳細點)(例如:A,B,C,D都是子函數,想實現他們之間隨時互相調用,可以么
他們之間可以相互調用,只是傳值的問題,最簡單的就是只調用一個函數,然後你可以以此類推。
max(int x,int y) //聲明函數
{
int z;
z=x>y?x:y;
return(z);
}
main()
{
int a,b,c;
scanf("%d,%d",&a,&b);
c=max(a,b); //調用函數
printf("Max is %d",c);
}
利用參數進行值的傳遞。
如果max();需要再調用其他的函數,同樣利用值的傳遞方法,或者無值也可以調用其他函數,函數本身也可以調用自己本身。
令者,如果a函數在執行過程中要調用b函數,而在調用b函數的同時又要調用a函數,這些屬於間接調用,是無終止的,顯然,程序中不應出現這種無終止的遞歸調用,而只應該出現有限次數的、有終止的遞歸調用,這可以用if語句來控制,只有在某一條件成立時候才繼續執行遞歸調用,否則就不再繼續。
希望以上能夠幫助到你
6. c語言中 如何單獨運行一個子函數啊或者說怎樣驗證一個子函數的正確性、以及其功能啊求助···
我寫了八年的C語言,竟不知道如何回答你的問題。
要單獨運行一個函數,只需直接調用就可以了。為了驗證子函數的正確性,可以先生成一些數據與期望的結果(包括邊界條件),測試子函數的輸出是否滿足期望。
或者你說的是軟體工程的東西?有白盒測試和黑盒測試兩種,像上面那種就是黑盒測試。白盒測試需要逐句審查語句,有多種方法,書里講得很明白。
7. C語言中一個子函數怎麼調用另一個子函數的運算
方法很多。
主要是要將不同類型傳遞給fun2處理。
最簡單float類型最大,fun2的參數類型就定義為float,然後運算結果返回float類型。在main函數用a3,b3,c3接收的時候強轉型。
另一種方法,把變數都轉換成一種類型傳遞。這里用union共用體類型就比較適合。還方便擴展,如果想添加其他類型還可以在union里添加。
我這里代碼就用第二種方法寫。
#include <stdio.h>
typedef union data{
char c;
int i;
float f;
}DA;
void fun1(void);
DA fun2(DA n1,DA n2,int nType);//nType=1:char類型。nType=2:int類型。nType=3:float類型。
int main()
{
fun1();
return 0;
}
void fun1(void)
{
char a1=1,a2=2;
int b1=100,b2=300;
float c1=5.1,c2=6.8;
DA n1,n2;
n1.c=a1,n2.c=a2;
char a3=fun2(n1,n2,1).c;
n1.i=b1,n2.i=b2;
int b3=fun2(n1,n2,2).i;
n1.f=c1,n2.f=c2;
float c3=fun2(n1,n2,3).f;
printf("a3=%c b3=%d c3=%.2f ",a3,b3,c3);
}
DA fun2(DA n1,DA n2,int nType)//nType=1:char類型。nType=2:int類型。nType=3:float類型。
{
DA n3;
switch(nType)
{
case 1:n3.c=n1.c+n2.c;break;
case 2:n3.i=n1.i+n2.i;break;
case 3:n3.f=n1.f+n2.f;break;
}
return n3;
}
8. C語言如何同時運行兩個子函數
同時執行,使用線程了
C語言本身沒有提供線程的功能,只能調用平台的線程來實現
如果在 WINDOWS 下面,可以參考一下 CreateThread 方法
9. C語言運行兩個子函數
不用線程或進程,cpu是無法調用時間片來執行兩個並行的程序的,只能順序往下執行。
10. C語言中的子函數和主函數有什麼聯系啊它們是怎麼編寫的
在C語言中主函數調用子函數,子函數被主函數調用,這就是它們之間的聯系。編寫函數主要有以下步驟,首先對函數進行定義,語法格式為:
類型說明符 函數名 (含類型說明的形式參數表)
{
語句序列
}
形式參數的作用是實現主函數和被調函數之間的聯系。通常將函數所處理的數據、影響函數功能的因素或函數處理的結果作為形參。
然後還要確定函數的返回值及類型,格式為:
return 表達式;
這個語句的另一個作用是結束當前函數的執行。一個函數可以不將任何值返回主函數,此時它的類型標識符為void,可以不寫return語句,也可以寫一個不帶表達式的return;語句。
(10)c語言子函數的運行方式擴展閱讀
C語言編程書寫規則:
1、一個說明或一個語句佔一行。
2、用{} 括起來的部分,通常表示了程序的某一層次結構。{}一般與該結構語句的第一個字母對齊,並單獨佔一行。
3、低一層次的語句或說明可比高一層次的語句或說明縮進若干格後書寫。以便看起來更加清晰,增加程序的可讀性。在編程時應力求遵循這些規則,以養成良好的編程風格。