下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
程序設(shè)計基礎(chǔ)(C語言)東北大學(xué)高級語言程序設(shè)計課程組課程網(wǎng)站:程序設(shè)計基礎(chǔ)(C語言)函數(shù)的基本概念3模塊化結(jié)構(gòu)一個用C語言開發(fā)的軟件由許多功能組成從組成上看,各個功能模塊彼此有一定的聯(lián)系,功能上各自獨立,從開發(fā)過程上看,不同的模塊可能由不同的程序員開發(fā)提出模塊化設(shè)計怎樣將不同的功能模塊連接在一起,成為一個程序怎樣保證不同的開發(fā)者的工作既不重復(fù),又能彼此銜接支持這種設(shè)計方法的語言稱為模塊化程序設(shè)計語言4模塊化結(jié)構(gòu)C語言提供了模塊化設(shè)計的功能模塊化設(shè)計在程序設(shè)計中分而治之的策略將一個大的程序自上向下進行功能分解成若干個子模塊模塊對應(yīng)了一個功能有自己的界面有相關(guān)的操作完成獨立的功能各個模塊可以分別由不同的人員編寫和調(diào)試將不同的模塊組裝成一個完整的程序?qū)⑺械某绦蚰K象積木一樣裝配起來5模塊化結(jié)構(gòu)C采用函數(shù)實現(xiàn)功能模塊C語言中一個函數(shù)實現(xiàn)一個特定的功能一個C語言程序可以由一個主函數(shù)和若干個其它函數(shù)構(gòu)成由主函數(shù)調(diào)用其它函數(shù)其它函數(shù)也可以相互調(diào)用同一個函數(shù)可以被一個函數(shù)或多個函數(shù)調(diào)用任意多次在設(shè)計時,往往將一些常用的功能模塊編寫成為函數(shù),放在函數(shù)庫中,供大家選用或多次調(diào)用,以減少重復(fù)性的編寫程序
C程序的功能可以通過函數(shù)之間的調(diào)用實現(xiàn)方便的利用函數(shù)作為程序模塊實現(xiàn)C語言程序設(shè)計的模塊化6模塊化結(jié)構(gòu)C采用函數(shù)實現(xiàn)功能模塊一個完整的C程序可以由多個源程序文件組成一個文件中可以包含多個函數(shù)C程序源程序文件1源程序文件i源程序文件n預(yù)編譯命令函數(shù)1函數(shù)n函數(shù)體函數(shù)首部7模塊化結(jié)構(gòu)C采用函數(shù)的特點允許將一個程序?qū)懭氩煌脑次募恳粋€源文件可以獨立編譯一個源文件可以被不同的程序使用函數(shù)是最小的功能單位一個函數(shù)可以被不同的源文件的其他函數(shù)調(diào)用一個源文件由多個函數(shù)組成主函數(shù)可以放在任何一個源文件中一個C程序只有一個主函數(shù)main()不同源文件的組裝可以通過工程文件實現(xiàn)8模塊化結(jié)構(gòu)C采用函數(shù)的優(yōu)點程序設(shè)計變得簡單和直觀提高程序的易讀性和可維護性C語言提供了豐富的庫函數(shù)減少程序員的代碼工作量允許用戶根據(jù)需要定義函數(shù)提高了程序的開發(fā)速度和靈活性9什么是函數(shù)?什么是函數(shù)?函數(shù)是一段完成特定功能的程序可以用簡單的方法為其提供必要的數(shù)據(jù)自動執(zhí)行這段程序能保存執(zhí)行后的結(jié)果將程序回到原處繼續(xù)將程序中反復(fù)使用的程序定義為函數(shù)的形式10函數(shù)的種類用戶使用的角度庫函數(shù)在C語言的編譯系統(tǒng)中,提供了很多若干已經(jīng)編制好的函數(shù),用戶可以直接使用用戶定義函數(shù)用戶根據(jù)需求自己編寫的一段程序,實現(xiàn)特定的功能函數(shù)的形式無參函數(shù)使用該函數(shù)時,不需提供數(shù)據(jù),直接使用該程序段提供的功能,通常完成某一個處理任務(wù)有參函數(shù)使用該函數(shù)時,必須提供必要的數(shù)據(jù),根據(jù)提供數(shù)據(jù)的不同,可能獲得不同的結(jié)果11說明本例中共包含了兩個函數(shù)主函數(shù)main()用戶定義函數(shù)max()主函數(shù)可以定義在程序的任意位置函數(shù)的定義是平行的彼此相互獨立不能嵌套定義在主函數(shù)中調(diào)用庫函數(shù)調(diào)用用戶函數(shù)例:求最大值函數(shù)#include<stdio.h>/*函數(shù)max()的原型說明*/intmax(intx,inty);
voidmain(){intn1,n2,n3,a;
scanf(“%d%d”,&n1,&n2,&n3);
a=max(n1,n2);
a=max(a,n3);
printf(“最大值是%d”,a);}/*函數(shù)max()的定義*/intmax(intx,inty){intz;
if(x>y)z=x;
elsez=y;
return(z);}函數(shù)舉例程序設(shè)計基礎(chǔ)(C語言)庫函數(shù)13庫函數(shù)C語言的庫函數(shù)由編譯系統(tǒng)提供的已設(shè)計好的函數(shù),用戶只需調(diào)用而無須實現(xiàn)C的庫函數(shù)極大地方便了用戶在編寫C語言程序時,應(yīng)當(dāng)盡可能多地使用庫函數(shù)提高程序的運行效率以及提高編程的質(zhì)量函數(shù)庫函數(shù)庫是由系統(tǒng)建立的具有一定功能的函數(shù)的集合庫中存放函數(shù)的名稱和對應(yīng)的目標(biāo)代碼,以及連接過程中所需的重定位信息用戶也可以根據(jù)自己的需要建立自己的用戶函數(shù)庫14庫函數(shù)庫函數(shù)存放在函數(shù)庫中的函數(shù)庫函數(shù)具有明確的功能、入口調(diào)用參數(shù)和返回值頭文件(又稱包含文件)C語言庫函數(shù)與用戶程序之間進行信息通信時要使用的數(shù)據(jù)和變量在使用某一庫函數(shù)時,使用#include對應(yīng)該函數(shù)所在頭文件提示不同版本的C語言具有不同的庫函數(shù)用戶使用時應(yīng)查閱有關(guān)版本的C的庫函數(shù)參考手冊15庫函數(shù)如何使用庫函數(shù)?函數(shù)的功能及所能完成的操作參數(shù)的數(shù)目和順序,以及每個參數(shù)的意義及類型返回值的意義及類型需要使用的包含文件要調(diào)用某個庫函數(shù),則需在程序的頭部用包含命令(#include)將說明該函數(shù)原型的頭文件包含進本程序中例如:include<math.h>16【例】庫函數(shù)使用的例子#include<stdio.h>#include<stdlib.h>main(){inti,j,num;for(i=0;i<10;i++){num=rand()%10+1;for(j=0;j<num;j++)printf("*");printf("\n");}printf("\n");
}
本例是在屏幕上輸出10行*,每一行*的個數(shù)是1~20之間的隨機數(shù),程序中用到了一個可以產(chǎn)生隨機數(shù)的庫函數(shù)——rand(),這個函數(shù)的調(diào)用格式為:
rand();調(diào)用結(jié)果返回一個隨機數(shù)。庫函數(shù)rand的原型說明在頭文件stdlib.h中。庫函數(shù)17隨機函數(shù)的應(yīng)用:
#include<stdlib.h>#include<stdio.h>#include<time.h>main(){inti;srand(time(NULL));
for(i=1;i<=20;i++){printf("%10d“,1+(rand()%10));
if(i%5==0)printf("\n");
}printf("\n");
}在隨機函數(shù)時常見的錯誤是:使用srand()代替rand()函數(shù)產(chǎn)生隨機數(shù)。庫函數(shù)程序設(shè)計基礎(chǔ)(C語言)函數(shù)定義19函數(shù)的定義概念就是為實現(xiàn)某一具體功能而編寫的函數(shù)的程序塊用戶自定義函數(shù)程序員自行定義和設(shè)計的函數(shù)庫函數(shù)一般只能提供一些低層服務(wù)的功能用戶自定義的函數(shù)則能針對具體的應(yīng)用實現(xiàn)一些特殊的功能20函數(shù)的定義函數(shù)定義的一般形式例
函數(shù)類型函數(shù)名(形參表說明)/*函數(shù)首部*/
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}intmax(intx,inty)
{intz;
if(x>y)z=x;
elsez=y;
return(z);
}21函數(shù)的定義函數(shù)定義的一般形式說明類型類型規(guī)定該函數(shù)返回值的類型函數(shù)返回值可以是除數(shù)組和函數(shù)外的任何合法的數(shù)據(jù)類型例:int、long、float、char、指針、結(jié)構(gòu)體等系統(tǒng)默認(rèn)的類型是整類型如果未指定類型,則返回值為整型可用void表示如果函數(shù)沒有返回值
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}22函數(shù)的定義函數(shù)定義的一般形式說明函數(shù)名是用戶自定義的標(biāo)識符是C語言函數(shù)定義中唯一不可省略的部分需符合C語言命名規(guī)則的標(biāo)識符用在程序中標(biāo)識函數(shù),并用該標(biāo)識符調(diào)用函數(shù)一個好的函數(shù)名應(yīng)該能夠反映該函數(shù)的模塊的功能函數(shù)名本身代表數(shù)值它代表了該函數(shù)的入口地址
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}23函數(shù)的定義函數(shù)定義的一般形式說明形參表(也稱“形式參數(shù)”)形參表是用逗號分隔的一組變量說明作用是指出每一個形參的類型和形參的名稱包括形參的類型和形參標(biāo)識符當(dāng)調(diào)用函數(shù)時,接受來自主調(diào)函數(shù)的數(shù)據(jù),確定各參數(shù)的值形參表說明的兩種表示形式:
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}intfunc(intx,inty)
{……}
intfunc(x,y)
intx,y;
{……}24函數(shù)的定義函數(shù)定義的一般形式說明函數(shù)體用{}括起來的部分是函數(shù)的主體函數(shù)體是一段體現(xiàn)函數(shù)功能的程序函數(shù)內(nèi)部應(yīng)有自己的說明語句和執(zhí)行語句形式參數(shù)表中經(jīng)過說明的變量可以在函數(shù)體內(nèi)直接使用但函數(shù)內(nèi)定義的變量不可以與形參同名提示函數(shù)體部分可以沒有,空函數(shù),但是每個函數(shù)體外面的一對{}不能省略任何情況下不允許一個函數(shù)內(nèi)部定義另外一個函數(shù)(函數(shù)不能嵌套定義)
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}25函數(shù)的定義函數(shù)定義的一般形式說明函數(shù)返回值函數(shù)調(diào)用后函數(shù)體計算/執(zhí)行的結(jié)果稱為函數(shù)的返回值通過返回語句將計算結(jié)果帶回主調(diào)函數(shù)函數(shù)返回值類型函數(shù)定義時的類型就是函數(shù)返回值的類型C語言要求函數(shù)定義的類型應(yīng)當(dāng)與返回語句中表達(dá)式的類型保持一致當(dāng)兩者不一致時,系統(tǒng)自動進行轉(zhuǎn)換,將函數(shù)返回語句中表達(dá)式的類型轉(zhuǎn)換為函數(shù)定義時的類型提示函數(shù)的類型決定著返回值的類型系統(tǒng)進行自動的轉(zhuǎn)換會造成程序的不清晰、可讀性差等
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}26函數(shù)的定義函數(shù)定義的一般形式說明函數(shù)返回值分析程序的運行結(jié)果
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}#include<stdio.h>
main()
{floata,b;
intc;
scanf("%f%f",&a,&b);
c=max(a,b);
printf("MAXis%d\n",c);
}
max(floatx,floaty)
{floatz;
z=x>y?x:y;
return(z);
}運行時,若從鍵盤輸入:4.56.8結(jié)果為:627函數(shù)的定義函數(shù)定義的一般形式返回語句格式功能賦給當(dāng)前被調(diào)函數(shù)一個值結(jié)束當(dāng)前被調(diào)函數(shù)的執(zhí)行,將表達(dá)式的值帶回主調(diào)函數(shù)
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}return表達(dá)式;/*return(2*3)表示函數(shù)返回值為6
*/
return(表達(dá)式);/*return2*3表示函數(shù)返回值為6
*/
return;/*沒有返回值*/28函數(shù)的定義函數(shù)定義的一般形式返回值語句提示函數(shù)的返回值只能有一個當(dāng)函數(shù)中不需要指明返回值時可以寫成:return;并不是函數(shù)執(zhí)行后沒有值只是沒有被用戶指定并由系統(tǒng)分配函數(shù)一個隨機值函數(shù)中不需要指明返回值時可以不寫返回語句此時,并不意味該函數(shù)不帶回返回值,而是帶回一個不確定的值,有可能給程序帶來某種意外的影響
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}29函數(shù)的定義函數(shù)定義的一般形式返回值語句提示一個函數(shù)體內(nèi)可以有多個返回語句,不論執(zhí)行到哪一個,函數(shù)都結(jié)束,回到主調(diào)函數(shù)例如對帶有返回值的函數(shù),在調(diào)用時,可以將其作為同類型的一個變量一樣使用例如
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}sign(intx)
{if(x>0)return(1);if(x==0)return(0);
if(x<0)renturn(-1);
}inta,b,c,max;
max=max(c,max(a,b));30函數(shù)的定義函數(shù)定義的一般形式返回值語句提示為了保證函數(shù)不返回任何值,C語言規(guī)定,可以定義無類型(void類型)函數(shù),同時函數(shù)體可以省略使用return語句,如果使用也只能使用return;(不能帶任何參數(shù))
函數(shù)類型函數(shù)名(形參表說明)
{/*函數(shù)體*/
說明語句執(zhí)行語句
[return;函數(shù)返回值]
}31函數(shù)的定義空類型說明沒有返回值C語言規(guī)定,一個函數(shù)可以沒有返回值,函數(shù)類型應(yīng)明確定義為void(空)類型對于void(空)類型函數(shù),系統(tǒng)保證不使函數(shù)帶有任何值同時也禁止在調(diào)用函數(shù)中使用被調(diào)函數(shù)的值說明沒有形參形參表明確地寫明void,表示沒有形式參數(shù)例如:voidmain(void)32函數(shù)的定義空類型格式說明void類型的函數(shù)不是調(diào)用函數(shù)之后不再返回,而是調(diào)用函數(shù)在返回時沒有返回值void類型的函數(shù)與有返回值類型的函數(shù)在定義過程中沒有區(qū)別,只是在調(diào)用時不同void類型的函數(shù)不能將函數(shù)調(diào)用放在表達(dá)式之中,只能在語句中單獨調(diào)用void類型的函數(shù)一般用于完成一些規(guī)定的操作void函數(shù)名(形參表)
{……}33函數(shù)的定義空類型例題分析定義為“void”型的函數(shù),在調(diào)用時不返回任何值,所以不能將其使用在賦值語句后表達(dá)式中在主調(diào)程序中引用了void函數(shù)。編系統(tǒng)在編譯這個程序時,會提示錯誤信息:“notanallowedtypeinfunctionmain”例:voidprintchar(charc){
printf(“%c=%d”
,c,c);}main(){intk;
k=printchar(‘a(chǎn)’);
/*printchar沒有返回值*/printf(“%d\n”,k);
}34問題1:voidfun1(a,b,c){printf(“%d%d%d”,a,b,c);}——??正確格式:voidfun1(inta,intb,intc)問題2:
floatfun2(floata,floatb){floata,b,c;
c=a+b;
return(c);}——??形參被重復(fù)定義問題3:已知函數(shù)abc的定義格式為:
voidabc()
{……}則函數(shù)定義中void的含義是____。A.執(zhí)行函數(shù)abc后,函數(shù)沒有返回值B.執(zhí)行函數(shù)abc后,函數(shù)不再返回C.執(zhí)行函數(shù)abc后,可以返回任何類型D.以上答案都是錯誤的函數(shù)的定義35【例】指出如下程序段中的錯誤。intfun(void){printf(“insidefun\n”);intfun1(void){printf(“insidefun1\n”);}}intsum(intx,inty){intresult;result=x+y;}(c)intsum(intx){if(x==0)return0;elsex+sum(x-1);}錯誤:函數(shù)fun1定義在函數(shù)fun的內(nèi)部.改正:將函數(shù)fun1的定義移出函數(shù)fun之外.錯誤:函數(shù)應(yīng)該返回一個整數(shù)值,但卻沒有返回值語句.改正:添加一個return語句.returnresult;或刪除后returnx+y;錯誤:沒有返回x+sum(x-1)的結(jié)果.改正:把else塊中的語句改為:returnx+sum(x-1);函數(shù)的定義36函數(shù)的定義無參函數(shù)的定義例:編寫一個函數(shù),輸出“cprogramming."。#include<stdio.h>
func2()
{printf(“&&&&&&&&&&&&&&&\n");
printf("cprogramming.\n");
printf(“&&&&&&&&&&&&&&&\n");
}
main()
{func2();
}37函數(shù)定義小結(jié)C語言的程序中函數(shù)很多,main是唯一不可缺少的函數(shù)是整個程序的主函數(shù)程序運行時,從主函數(shù)開始執(zhí)行一個程序由多個函數(shù)組成時,主函數(shù)main與程序中其它函數(shù)的任意次序排列main作為最后一個函數(shù)放在文件結(jié)尾處,系統(tǒng)也總是要從main開始運行C語言的一個程序可以由多個文件組成每個文件可以單獨編譯將幾個文件一起聯(lián)接成一個可運行文件一個函數(shù)的定義不能跨越在兩個文件中函數(shù)在一個文件中必須保持完整一個程序的多個函數(shù)定義中,不允許存在相同的函數(shù)名38函數(shù)定義小結(jié)C語言的函數(shù)可以分為兩類帶返回值的函數(shù)通過調(diào)用可以得到一個確定的值,該值就是所調(diào)用函數(shù)的返回值不帶返回值函數(shù)不帶返回值的函數(shù)通常只是一個“過程”只是用來完成某種操作主調(diào)函數(shù)并不需要它有任何的信息返回調(diào)用時可將其作為C的一個語句直接調(diào)用函數(shù)不能嵌套定義一個函數(shù)的定義不能從屬與另外一個函數(shù)39無論有無形參,函數(shù)名后的()不能省略形式參數(shù)表中說明的形參,在函數(shù)體中不再需要說明可以同一般的變量完全一樣直接使用函數(shù)體內(nèi)部的變量說明與形參說明的含義不同前者說明函數(shù)體的一個局部變量,后者說明一個用于函數(shù)間傳送數(shù)據(jù)的形式變量最好在形參列表中列出每個參數(shù)的類型即使參數(shù)是默認(rèn)的int不應(yīng)省略對每個形參的類型說明例如:floatmax(floatx,floaty)不能寫成floatmax(foatx,y),此時y為系統(tǒng)缺省的int類型函數(shù)定義小結(jié)40應(yīng)盡可能多的使用系統(tǒng)提供的庫函數(shù)傳遞給函數(shù)的參數(shù)和函數(shù)定義中的相應(yīng)的參數(shù)盡量不使用相同的名字選擇有意義的參數(shù)名和函數(shù)名可以使程序具有良好的可讀性可以避免過多地使用注釋需要大量參數(shù)的函數(shù)可能包含較多的功能(任務(wù))應(yīng)該考慮將該函數(shù)分成完成單個任務(wù)的較小的函數(shù)函數(shù)原型、函數(shù)頭部和函數(shù)調(diào)用應(yīng)該具有一致的參數(shù)個數(shù)、參數(shù)類型、參數(shù)順序和返回值類型函數(shù)定義小結(jié)41常見錯誤如果指定了非整型int類型的返回值類型,則省略函數(shù)定義中的返回值類型會導(dǎo)致語法錯誤忘記從應(yīng)該返回一個值的函數(shù)返回該值會導(dǎo)致無法預(yù)料的錯誤ANSIC標(biāo)準(zhǔn)規(guī)定被省略的結(jié)果是不確定的、隨機的從返回類型為void的函數(shù)返回一個值會導(dǎo)致語法錯誤定義函數(shù)時,在其參數(shù)列表的)后以“;”結(jié)束是一種語法錯誤形參的類型說明一定放在函數(shù)體{}內(nèi)會導(dǎo)致語法錯誤在函數(shù)體內(nèi)部對形式參數(shù)再次定義是一種語法錯誤函數(shù)定義小結(jié)程序設(shè)計基礎(chǔ)(C語言)函數(shù)調(diào)用43函數(shù)調(diào)用定義一個函數(shù)調(diào)用另一個函數(shù)調(diào)用者稱為主調(diào)函數(shù)被調(diào)用的函數(shù)稱為被調(diào)函數(shù)主調(diào)函數(shù)使用被調(diào)函數(shù)的功能,稱為對被調(diào)函數(shù)的調(diào)用函數(shù)調(diào)用的基本形式通過函數(shù)名函數(shù)的參數(shù)例:求最大值函數(shù)#include<stdio.h>intmax(intx,inty);
voidmain(){intn1,n2,a;
scanf(“%d%d”,&n1,&n2);
a=max(n1,n2);
printf(“最大值是%d”,a);}intmax(intx,inty){intz;
if(x>y)z=x;
elsez=y;
return(z);}44函數(shù)調(diào)用函數(shù)調(diào)用方式一般形式函數(shù)名(實參表)[;]說明函數(shù)名確定了被調(diào)函數(shù)的對象實參表函數(shù)調(diào)用時()內(nèi)的變量名是執(zhí)行被調(diào)函數(shù)時主調(diào)函數(shù)傳遞給形參的實際參數(shù)提示參數(shù)的類型、個數(shù)和次序應(yīng)與函數(shù)要求的形式參數(shù)完全統(tǒng)一例:intfun3(){inti,j,k;
i=2;
j=i*i;
k=j*j;
printf(“%3d%3d%3d”
,
i,j,k);}
main()
{fun3();
}45函數(shù)調(diào)用函數(shù)調(diào)用方式按照函數(shù)在主調(diào)函數(shù)中的作用,函數(shù)的調(diào)用方式有以下三種形式函數(shù)語句函數(shù)表達(dá)式函數(shù)參數(shù)46函數(shù)調(diào)用函數(shù)調(diào)用方式函數(shù)語句作為C程序中的一條語句調(diào)用被調(diào)函數(shù)調(diào)用格式:
函數(shù)名(實參表);說明通常只完成一種操作,不帶回返回值常用于調(diào)用一個可以忽略返回值或沒有返回值的函數(shù)只要求函數(shù)完成一定的操作47函數(shù)調(diào)用函數(shù)調(diào)用方式函數(shù)表達(dá)式函數(shù)調(diào)用出現(xiàn)在一個表達(dá)式中,這個表達(dá)式稱為函數(shù)表達(dá)式將函數(shù)的調(diào)用結(jié)果作運算符的運算分量格式
變量名=函數(shù)表達(dá)式;說明這種方式用于調(diào)用帶有返回值的函數(shù)要求函數(shù)必須帶回一個確定的值參與表達(dá)式的運算48函數(shù)調(diào)用函數(shù)調(diào)用方式函數(shù)參數(shù)函數(shù)調(diào)用作為另外一個函數(shù)的實際參數(shù)格式fun1(x,fun2);說明這種方式要求函數(shù)必須帶回一個確定的值函數(shù)的參數(shù)也是表達(dá)式例m=max(max(a,b),c);或
printf(“%d”
,max(a,b));49函數(shù)聲明o被調(diào)函數(shù)的聲明一個函數(shù)要調(diào)用另外一個函數(shù)首先是被調(diào)用的函數(shù)必須存在其次還應(yīng)在主調(diào)函數(shù)中對所有被調(diào)函數(shù)加以說明否則,在連接時會出現(xiàn)找不到所調(diào)用函數(shù)的錯誤信息函數(shù)的調(diào)用也應(yīng)遵循“先定義后使用”的原則50函數(shù)聲明被調(diào)函數(shù)的聲明庫函數(shù)的聲明被調(diào)函數(shù)是C語言系統(tǒng)提供的標(biāo)準(zhǔn)庫函數(shù)在源程序文件的開頭處,使用#include命令,將存放所調(diào)用庫函數(shù)的有關(guān)“頭文件”包含到該程序文件中來#include命令的一般形式為
#include<math.h>#include”stdio.h”51函數(shù)聲明被調(diào)函數(shù)的聲明用戶自定義函數(shù)的聲明被調(diào)用函數(shù)為用戶自己定義的函數(shù)一般情況下,應(yīng)在主調(diào)用函數(shù)中對被調(diào)用函數(shù)(返回值)的類型進行說明形式說明為編譯系統(tǒng)進行類型檢查提供依據(jù)函數(shù)值是什么類型有多少個參數(shù),每一個參數(shù)是什么類型的函數(shù)類型函數(shù)名(形參類型1形參名1,形參類型2形參名2…)52函數(shù)聲明被調(diào)函數(shù)的聲明用戶自定義函數(shù)的聲明提示:在下列情況下可以省略函數(shù)聲明當(dāng)函數(shù)的返回值為整型或字符型時如果在同一個文件中既定義函數(shù),又調(diào)用該函數(shù)不論定義函數(shù)與調(diào)用函數(shù)在源程序中的位置關(guān)系如何,都可以省去函數(shù)說明此時系統(tǒng)對其自動按整型處理例:求兩個非負(fù)數(shù)的最大公約數(shù)分析:采用“轉(zhuǎn)輾相除”法若a>b,求a/b的余數(shù)r;若r=0,則b為最大公約數(shù);若r!=0,則r->b,b->a,再一次進行a/b求余數(shù)r,r=0,b為最大公約數(shù)53源程序:
main(){inta,b,r;
scanf("%d%d",&a,&b);
r=gcd(a,b);
printf("gcd(a,b)is%d\n",r);
}
intgcd(x,y)intx,y;
{inta,b,t;
if(x<y){t=x;x=y;y=t;}a=x;b=y;
while(b!=0){t=a%b;a=b;b=t;}return(a);}聲明的被調(diào)函數(shù)gcd(x,y)為int類型,所以在main()中未對gcd(x,y)類型(返回值的類型)進行說明。在主調(diào)函數(shù)main()中沒有出現(xiàn)intgcd();聲明語句。函數(shù)聲明54函數(shù)聲明被調(diào)函數(shù)的聲明用戶自定義函數(shù)的聲明提示:在下列情況下可以省略函數(shù)聲明當(dāng)被調(diào)函數(shù)的定義出現(xiàn)在主調(diào)函數(shù)的前面時如果被調(diào)用函數(shù)的返回值是其它類型(非整型或字符型)函數(shù)定義和函數(shù)調(diào)用在同一個文件中,且函數(shù)定義在源程序中的位置在調(diào)用該函數(shù)之前55源程序:
floatmax-value(x,y,z)
floatx,y,z;{floatmax;max=x>y?x:y;max=max>z?max:z;return(max);}
main(){floata,b,c,max;
scanf(“%f%f%f”,&a,&b,&c);
max=max_value(a,b,c);
printf(“%f”,max);}871。c被調(diào)函數(shù)max_value()的定義放在主調(diào)函數(shù)main()之前,所以在main()中不再進行對max_value()函數(shù)的說明。函數(shù)聲明56函數(shù)聲明被調(diào)函數(shù)的聲明用戶自定義函數(shù)的聲明提示:在下列情況下可以省略函數(shù)聲明當(dāng)全局聲明被調(diào)函數(shù)時在所有函數(shù)定義之前(即在文件的開始處),對函數(shù)類型進行了說明在主調(diào)用函數(shù)中不再對被調(diào)函數(shù)(返回值)的類型進行聲明這種方法最常用57樣式:
floatmax_value();
voidcpy();
intcount();
main(){
…
}
voidcpy(s1,s2)
chars1[30],s2[20];{…
}
intcount(charstr,intn){…
}函數(shù)聲明main()不必再聲明所調(diào)用的函數(shù)類型。因此沒有包含floatmax_value();voidcpy();intcount();的聲明語句,即沒有對這三個被調(diào)函數(shù)進行類型說明。58函數(shù)聲明被調(diào)函數(shù)的聲明用戶自定義函數(shù)的聲明提示:在下列情況下必須函數(shù)聲明如果函數(shù)定義在源程序中的位置在調(diào)用該函數(shù)之后必須在調(diào)用該函數(shù)的函數(shù)中給出被調(diào)用函數(shù)的說明如果函數(shù)的定義與調(diào)用在兩個不同的文件中不論函數(shù)返回值的類型是什么,在調(diào)用該函數(shù)時都必須給出函數(shù)聲明59函數(shù)聲明被調(diào)函數(shù)的聲明提示函數(shù)的聲明和函數(shù)的定義形式上十分相似,但兩者上有本質(zhì)上的不同的函數(shù)的定義是一個完整而獨立的函數(shù)單元在程序中,函數(shù)的定義只能有一次函數(shù)首部后沒有“;”函數(shù)的聲明僅是對編譯系統(tǒng)的一個說明是對已定義過的函數(shù)返回值的類型說明,以通知系統(tǒng)在本函數(shù)中所調(diào)用的函數(shù)是什么類型不包括函數(shù)體(或形參)是一個說明語句,必須以分號結(jié)束60函數(shù)聲明被調(diào)函數(shù)的聲明例main(){floata,b,c,max;
floatmax_value();/*對被調(diào)函數(shù)類型進行聲明*/scanf(“%f%f%f”,&a,&b,&c);
max=max_value(a,b,c);
printf(“%f”,max);}
floatmax-value(x,y,z)
floatx,y,z;{floatmax;max=x>y?x:y;max=max>z?max:z;return(max);}被調(diào)函數(shù)定義在主調(diào)函數(shù)之后,所以在主調(diào)函數(shù)的聲明部分對被調(diào)函數(shù)的類型(既返回值的類型)進行了說明。也可以寫成:
floatmax_value
(float,float,float);61函數(shù)聲明函數(shù)原型對被調(diào)函數(shù)的聲明編譯系統(tǒng)需知道被調(diào)函數(shù)有幾個參數(shù),各自是什么類型,而參數(shù)的名字是無關(guān)緊要的簡化對被調(diào)函數(shù)的聲明
上述方式稱為函數(shù)的原型例floatmax_value(float,float,float);
/*僅聲明形參的類型,不必指出形參的名*/通常將一個文件中需調(diào)用的所有函數(shù)原型寫在文件的開始函數(shù)類型標(biāo)識符函數(shù)名(形參類型1,形參類型2……);62函數(shù)聲明小結(jié)寫法上要注意函數(shù)定義的首部需要寫出所有形參名并給出其對應(yīng)的數(shù)據(jù)類型函數(shù)原型的主要目的在于聲明函數(shù)返回值的類型以及函數(shù)期望接收的參數(shù)的個數(shù)、參數(shù)類型和參數(shù)順序如果程序中沒有某個函數(shù)的函數(shù)原型(沒有說明),編譯系統(tǒng)就會用第一次出現(xiàn)的這個函數(shù)(函數(shù)定義或函數(shù)調(diào)用)構(gòu)造函數(shù)原型在缺省下編譯系統(tǒng)假設(shè)函數(shù)返回類型為int而對函數(shù)參數(shù)類型不做任何假設(shè)常見錯誤和函數(shù)原型不匹配的函數(shù)調(diào)用會導(dǎo)致語法錯誤函數(shù)原型和函數(shù)定義不一致,也會產(chǎn)生錯誤63函數(shù)執(zhí)行過程通過函數(shù)的調(diào)用實現(xiàn)函數(shù)的使用函數(shù)調(diào)用指定了被調(diào)用函數(shù)的名字和調(diào)用函數(shù)所需要的參數(shù)執(zhí)行過程程序在主調(diào)函數(shù)執(zhí)行過程中,執(zhí)行到調(diào)用被調(diào)函數(shù)的語句時,程序?qū)嶋H參數(shù)傳遞給形式參數(shù)執(zhí)行被調(diào)函數(shù)的函數(shù)體語句,直到遇到return語句或“}”,結(jié)束被調(diào)函數(shù)的執(zhí)行(帶值)返回到主調(diào)函數(shù)執(zhí)行主調(diào)函數(shù)的剩余語句部分64〖例〗]inti=10;
main(){intj=1;
j=fun();
printf(“%d”,j);
j=fun();
printf(“%d”,j);}
func(){intk=0;
k=k+i;
i=i+10;
return(k);}演示89。C執(zhí)行過程:(1)主調(diào)程序main()順序執(zhí)行,第一個函數(shù)調(diào)用語句j=fun();處理“=”右邊的調(diào)用函數(shù)fun()。(2)執(zhí)行fun()函數(shù)體,k=k+i=10;i=20;(3)執(zhí)行到return(k)語句,帶回返回值(k=10)。(4)被調(diào)函數(shù)fun()的返回值賦給“=”左邊的變量j,j=10;(5)執(zhí)行庫函數(shù)printf,打印j的值。(6)執(zhí)行第二個函數(shù)調(diào)用語句j=fun();(7)執(zhí)行fun()函數(shù)體,k=k+i=20;i=i+10=20;(8)執(zhí)行到return(k)語句,帶回返回值(k=20)。(9)被調(diào)函數(shù)fun()的返回值賦給“=”左邊的變量j,j=20;(10)執(zhí)行庫函數(shù)printf(),打印j的值。函數(shù)執(zhí)行過程程序設(shè)計基礎(chǔ)(C語言)參數(shù)傳遞66參數(shù)傳遞函數(shù)之間的數(shù)據(jù)傳遞C語言的一個源程序文件可以由多個函數(shù)組成每個函數(shù)在功能上是獨立的目地就是共同實現(xiàn)某一特定的功能,以解決某個具體的實際問題函數(shù)與函數(shù)之間通常要傳遞數(shù)據(jù)和計算結(jié)果C語言中采用三種方式進行數(shù)據(jù)傳遞參數(shù)傳遞實參與形參一一對應(yīng)方法在主調(diào)函數(shù)與被調(diào)函數(shù)之間傳遞多個數(shù)據(jù)返回值傳遞被調(diào)函數(shù)返回主調(diào)函數(shù)一個結(jié)果值全局變量傳遞在一個函數(shù)內(nèi)使用其他函數(shù)中的某些變量的結(jié)果67參數(shù)傳遞形參與實參形參是函數(shù)定義時由用戶定義的形式上的變量定義函數(shù)時函數(shù)名后()內(nèi)的變量列表形參與函數(shù)體內(nèi)定義的其它變量一樣在函數(shù)體內(nèi)引用這些變量在未調(diào)用函數(shù)之前并不實際占用內(nèi)存實參是函數(shù)調(diào)用時,主調(diào)函數(shù)為被調(diào)函數(shù)提供的原始數(shù)據(jù)調(diào)用函數(shù)時給該函數(shù)形參具體指定的值是常量、表達(dá)式或變量例如:
main()
{….a=max(num1,num2);
…..}intmax(intx,inty)68參數(shù)傳遞參數(shù)傳遞方式——"值傳遞”含義在調(diào)用函數(shù)時,將實參變量的值取出來,復(fù)制給形參變量C語言中的實參可以是一個表達(dá)式調(diào)用時先計算表達(dá)式的值,再將結(jié)果(值)復(fù)制到形參對應(yīng)的存儲單元中在函數(shù)內(nèi)部使用從實參中復(fù)制來的值進行處理形參是函數(shù)的局部變量僅在函數(shù)內(nèi)部才有意義不能用它來傳遞函數(shù)的結(jié)果一旦函數(shù)執(zhí)行結(jié)束形參存儲單元所保存的值不再保留69參數(shù)傳遞“傳值”特點數(shù)據(jù)在主調(diào)函數(shù)和被調(diào)函數(shù)中占用不同的存儲空間在函數(shù)內(nèi)部對形參的任何操作,其結(jié)果只能影響形式參數(shù)的值,而不影響實際參數(shù)的值可以避免被調(diào)用函數(shù)的操作對調(diào)用函數(shù)中的變量可能產(chǎn)生的副作用此種方式只能實現(xiàn)外部數(shù)據(jù)向函數(shù)內(nèi)部的傳遞,而不能實現(xiàn)函數(shù)內(nèi)部數(shù)據(jù)的傳出70例:
voidchange(intk){printf(“2·k=%d\n”,k);
k=k+10;printf(“4·k=%d\n”,k);}
main()
{inti;
i=10;
printf(“1·i=%d\n”,i);
change(i);
printf(“3·i=%d\n”,i);}實參i1010形參k10(調(diào)用開始時)20(調(diào)用結(jié)束時)調(diào)用之前參數(shù)傳遞“傳值”71例:分析下面程序結(jié)果
main(){inta,b;voidp(int,int);a=5;b=8;p(a,b);p(a+b,a);p(a/b,b);}voidp(intx,inty){y=x+y;printf("%d,%d\n",x,y);}
則程序的執(zhí)行結(jié)果為:A.5,13B.5,13C.5,13D.5,1313,1818,518,518,230,81,131,141,13參數(shù)傳遞“傳值”72例:求100~200之間的全部素數(shù)之和#include“math.h”main(){intm,sum=0;
for(m=101;m<=200;m=m+2)
sum+=sum(m);
printf(“%d\n”,s);}
intsum(intm){inti,k;
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)return(0);
return(m);}參數(shù)傳遞“傳值”73源程序:
#include<stdio.h>main(){intk=2,n=0;
do{if(isprime(k)&&isprime(k+2))
{n+=1;
printf(“%d,%d”,k,k+2);}k=k+1;
}while(n<15);
}isprime(inta);
{intk,j;j=1;k=2;
while((k<=a/2)&&j)
{if(a%k==0)j=0;
elsek=k+1;}return(j);
}參數(shù)傳遞例題孿生素數(shù)是指兩個相差為2的素數(shù),例如:3和5,5和7,11和13等。編程實現(xiàn)輸出15對孿生素數(shù)。74源程序:
main()
{intx,y;
x=3;y=5;
printf(“beforeswapx=%d,y=%d\n”,x,y);
swap(x,y);/*用變量x和y作為實際參數(shù)調(diào)用函數(shù)*/
printf(“afterswapx=%d,y=%d\n”,x,y);
}
swap(intm,intn)
{inttemp;/*借助臨時變量交換兩個形參變量m和n的值*/
temp=m;/*①*/
m=n;/*②*/
n=temp;/*③*/
printf("inswapm=%d,n=%d\n",m,n);
}參數(shù)傳遞例題若在主函數(shù)中變量x=3,y=5,編寫一個函數(shù)交換主函數(shù)中兩個變量的值,使變量x=5,y=3。
“傳值”beforeswapx=3,y=5
inswapm=5,n=3
afterswapx=3,y=575參數(shù)傳遞“傳址”傳遞地址在值傳遞方式下,每個形式參數(shù)僅能傳遞一個數(shù)據(jù)當(dāng)需要在函數(shù)之間傳遞大量數(shù)據(jù)時,值傳遞方式顯然不適用將數(shù)據(jù)的存儲地址作為實參傳遞給被調(diào)函數(shù)的形參允許被調(diào)用函數(shù)修改原始的變量值要求形參的數(shù)據(jù)類型應(yīng)是指針類型76參數(shù)傳遞“傳址”特點處理數(shù)據(jù)在主調(diào)函數(shù)和被調(diào)函數(shù)中占用相同的存儲空間形參和實參所指向的地址是同一個地址對形參的操作會直接影響到實參的結(jié)果此種方式即可以實現(xiàn)外部數(shù)據(jù)向函數(shù)內(nèi)部的傳遞,也可以實現(xiàn)加工后的數(shù)據(jù)從函數(shù)內(nèi)部向主調(diào)函數(shù)的傳遞詳細(xì)內(nèi)容參見指針77參數(shù)傳遞函數(shù)參數(shù)提示形參在被調(diào)函數(shù)中定義,實參在主調(diào)函數(shù)中定義形參是形式上的定義時編譯系統(tǒng)并不為其分配存儲空間函數(shù)調(diào)用時,臨時分配存儲空間,接受并處理實參函數(shù)調(diào)用結(jié)束,形參被釋放(數(shù)據(jù)消失)實參可以是變量名或表達(dá)式必須在函數(shù)調(diào)用之間有確定的值實參與形參必須類型相同,個數(shù)相等,一一對應(yīng)當(dāng)實參之間有聯(lián)系時,不同的編譯系統(tǒng)下實參的求值順序不同VC是從右向左78參數(shù)傳遞數(shù)組作函數(shù)參數(shù)兩種方式數(shù)組中的元素作函數(shù)的參數(shù)數(shù)組名作函數(shù)的參數(shù)例:inta[5];a[2]intxapaint*pa;或intb[5];a79參數(shù)傳遞數(shù)組作函數(shù)參數(shù)數(shù)組元素作函數(shù)的參數(shù)可以采用傳遞普通變量一樣的方式以單個元素的方式實現(xiàn)數(shù)組元素的傳遞“復(fù)制數(shù)據(jù)”的方法由于形參是在函數(shù)定義時定義,并無具體的值,因此數(shù)組元素只能在函數(shù)調(diào)用時,作函數(shù)的實參當(dāng)用數(shù)組中的元素作函數(shù)的實參時必須在主調(diào)函數(shù)內(nèi)定義數(shù)組,并賦值實參與形參之間是“值傳遞”的方式80參數(shù)傳遞數(shù)組作函數(shù)參數(shù)數(shù)組元素作函數(shù)的參數(shù)例:求一維數(shù)組a[4]的所有元素之和數(shù)組元素作實參floatsumall(floata,floatb,floatc,floatd);{
return(a+b+c+d);}
main(){floatsum;
staticfloata[4]={1,2,3,4};
sum=sumall(a[0],a[1],a[2],a[3]);
printf(“sum=%f\n”,sum);}演示8B。C在調(diào)用sumall函數(shù)時,將數(shù)組元素a[0]…a[3]作為實參把值傳遞給sumall函數(shù)的a,b,c,d的四個形參,是單向的按值傳遞。81參數(shù)傳遞數(shù)組作函數(shù)參數(shù)數(shù)組名作參數(shù)數(shù)組名作函數(shù)的參數(shù),必須遵循以下原則參數(shù)形式如果形參是數(shù)組名,則實參必須是實際的數(shù)組名如果實參是數(shù)組名,則形參可以是同樣維數(shù)的數(shù)組名或指針數(shù)組定義要在主調(diào)函數(shù)和被調(diào)函數(shù)中分別定義數(shù)組形參數(shù)組可以不指明長度82參數(shù)傳遞數(shù)組作函數(shù)參數(shù)數(shù)組名作參數(shù)提示C語言允許將整個數(shù)組作為函數(shù)的參數(shù)進行傳遞數(shù)組名代表了該數(shù)組在內(nèi)存中的首地址采用的是按址傳遞方式調(diào)用方式只需將數(shù)組名作為參數(shù)直接調(diào)用函數(shù)即可,無須使用下標(biāo)實參數(shù)組名將該數(shù)組的起始地址傳遞給形參數(shù)組,兩個數(shù)組共享一段內(nèi)存單元83參數(shù)傳遞數(shù)組作函數(shù)參數(shù)數(shù)組名作參數(shù)例:分析程序的執(zhí)行過程分析調(diào)用時,實參數(shù)組將首地址string賦值給形參數(shù)組str兩個數(shù)組共同占用相同的內(nèi)存單元,共享數(shù)組中的數(shù)據(jù)string[0]與str[0]代表同一個元素#include<stdio.h>
print(charstr[])
{printf("%s",str);
}
main()
{charstring[20]="CProgramming";
print(string);/*數(shù)組名做函數(shù)的實參*/
}84參數(shù)傳遞數(shù)組作函數(shù)參數(shù)演示:傳遞整個數(shù)組和傳遞一個數(shù)組元素之間的差別#include<sdtio.h>#defineSIZE5
voidmodifyarray(int[],int);
voidmodifyelement(int);main(){inta[SIZE]={0,1,2,3,4};inti;pritnf(“\nThevaluesoftheoriginalarrayare:\n”);for(i=0;i<=SIZE-1;i++)printf(“%3d”,a[i]);printf(“\n”);
modifyarray(a,SIZE);/*以傳址方式傳遞數(shù)組a*/pritnf(“Thevaluesosthemodifiedarrayare:\n”);
85for(i=0;i<=SIZE-1;i++)printf(“%3d”,a[i]);printf(“\nThevaluesofa[3]is%3d\n”,a[3]);
modifyelement(a[3]);printf(“Thevaluesofa[3]is%3d\n”,a[3]);}
voidmodifyarray(intb[],intsize){intj;for(j=0;j<=size-1;j++)b[j]*=2;}
voidmodifyelement(intx){printf(“Velueinmodifyelementis%3d\n”,x*=2);}
參數(shù)傳遞86參數(shù)傳遞數(shù)組作函數(shù)參數(shù)例題【例】求任意輸入10個數(shù)的平均值。(數(shù)組名作實參)
#include“stdio.h”main(){inti;
floata[10],ave;
floataver(floata[10]);
for(i=0;i<10;i++)
scanf(“%f”,&a[i]);
ave=aver(a);
printf(“\naver=%6.2f\n”,ave);}
floataver(floatb[10]){inti;floats=0.0,ave;
for(i=0;i<10;i++)
s+=b[i];
ave=s/10;
return(ave);}87參數(shù)傳遞數(shù)組作函數(shù)參數(shù)例題下面程序的輸出結(jié)果是().
#include<stdio.h>intfun(intx[],intn){inti,s=1;for(i=0;i<=n;i++)s*=x[i];returns;}main(){inta[]={1,2,3,4,5,6};intx=fun(a,4);printf(“%d”,x);}A.24B.120C.720D.5本題主要測試數(shù)組在函數(shù)之間傳遞的用法。在函數(shù)間傳遞數(shù)組時,通常傳遞的是數(shù)組的首地址。由于數(shù)組元素是連續(xù)存放的,因此可以根據(jù)該地址找到數(shù)組的所有的元素。由于傳遞數(shù)組的長度為4,因此函數(shù)
fun中的計算只包括元素1,2,3,4,5,函數(shù)返回的值是1*2*3*4*5=120。所以輸出是120。88參數(shù)傳遞數(shù)組作函數(shù)參數(shù)例題編寫一個函數(shù),分別求兩個浮點數(shù)數(shù)組元素的平均值。并在主調(diào)函數(shù)中輸出floataverage(arrary,n)
intn;
floatarrary[];{inti;
floataver,sum=0.0;
for(i=0;i<n;i++)
sum+=arrary[i];
aver=sum/n;
return(aver);}定義形參時未指明數(shù)組大小,而且引進一個參數(shù)n,以便兩次調(diào)用average函數(shù)時,兩個實參數(shù)組的長度可以先后傳遞給n,從而在average函數(shù)體中能分別訪問兩個數(shù)組的所有元素.89參數(shù)傳遞數(shù)組作函數(shù)參數(shù)例題編寫一個函數(shù),分別求兩個浮點數(shù)數(shù)組元素的平均值。并在主調(diào)函數(shù)中輸出main(){floata[8],b[9];
inti;
for(i=0;i<8;i++)
scanf(“%f”,&a[i]);
for(i=0;i<9;i++)
scanf(“%f”,&b[i]);
printf(“aver=%7.2f\n”,average(a,8));
printf(“aver=%7.2f\n”,average(b,9));}程序設(shè)計基礎(chǔ)(C語言)參數(shù)的嵌套調(diào)用91函數(shù)嵌套調(diào)用嵌套調(diào)用C語言中的函數(shù)定義是平行的函數(shù)間沒有主從關(guān)系函數(shù)不允許進行函數(shù)的嵌套定義在一個函數(shù)體中再定義一個新的函數(shù)函數(shù)之間的調(diào)用可以是任意的函數(shù)允許嵌套調(diào)用允許在一個函數(shù)體內(nèi)再調(diào)用其他函數(shù)函數(shù)嵌套定義指一個函數(shù)在被其它函數(shù)調(diào)用的過程中,本身還被允許調(diào)用另一個函數(shù)在函數(shù)體中再調(diào)用其它函數(shù)92函數(shù)嵌套調(diào)用嵌套過程函數(shù)的嵌套調(diào)用為自頂向下、逐步求精及模塊化的結(jié)構(gòu)設(shè)計提供了有利的支持如果在實現(xiàn)一個函數(shù)的功能時需要用到其它函數(shù)的功能,就采用函數(shù)的嵌套調(diào)用main(){…num1();
…}num1(){…num2();
…}num2(){
…
}93#include<stdio.h>intdif(intx,inty,intz);intmax(intx,inty,intz);intmin(intx,inty,intz);voidmain(){inta,b,c,d;
scanf(“%d%d%d”,&a,&b,&c);
d=dif(a,b,c);
printf(“%d\n”
,d);}intdif(intx,inty,intz){return(max(x,y,z)-
min(x,y,z));}函數(shù)嵌套調(diào)用嵌套過程例:求三個數(shù)最大與最小的差值分析在這個程序中共定義三個函數(shù)dif()求差值max()求最大數(shù)min()求最小數(shù)在調(diào)用dif()時需要調(diào)用max()和min()分別求出最大和最小94intmin(intx,inty,intz){intr;
if(x>y){if(y<z)r=y;
elser=z;}
else{if(x<z)r=x;
elser=z;}
return(r);}intmax(intx,inty,intz){intr;
if(x>y){if(x>z)r=x;
elser=z;}
else{if(y>z)r=y;
elser=z;}
return(r);}函數(shù)嵌套調(diào)用95函數(shù)嵌套調(diào)用嵌套過程例:編寫程序輸出20以內(nèi)的全部素數(shù),并計算20以內(nèi)全部素數(shù)之積與全部素數(shù)之和的商96#include<stdio.h>#include<math.h>intisprime(int);
main(){inti,a,s;
floatb,c;
intadd(int);
floatm
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)學(xué)26.2《圓的對稱性》(滬科版九年級下)
- 2026年劇本殺運營公司員工宿舍管理制度
- 2026年劇本殺運營公司行業(yè)監(jiān)管對接管理制度
- 2026年劇本殺運營公司劇本與道具匹配管理制度
- 2025 小學(xué)四年級思想品德上冊公共場合禮儀訓(xùn)練課件
- 2026及未來5年中國郵票行業(yè)市場現(xiàn)狀調(diào)查及投資前景研判報告
- 2026年及未來5年中國數(shù)碼攝像機行業(yè)市場運營現(xiàn)狀及投資規(guī)劃研究建議報告
- 2025年數(shù)字孿生技術(shù)在城市規(guī)劃中的創(chuàng)新報告
- 光伏發(fā)電安全制度
- 保衛(wèi)安全制度
- 應(yīng)急預(yù)案批復(fù)意見
- 錦州市高三語文試卷及答案
- 化學(xué)品供應(yīng)商審核細(xì)則
- 冬季環(huán)衛(wèi)車輛安全培訓(xùn)課件
- 高速防滑防凍安全知識培訓(xùn)課件
- 電氣線路安全知識培訓(xùn)課件
- 瑞馬唑侖病例分享
- T-CSER-015-2023 場地環(huán)境信息地球物理探測技術(shù)指南
- 2025至2030中國背板連接器行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- T/CCMA 0173-2023流動式起重機用高性能平衡閥
- GB/T 18910.103-2025液晶顯示器件第10-3部分:環(huán)境、耐久性和機械試驗方法玻璃強度和可靠性
評論
0/150
提交評論