考點分析七函數(shù)_第1頁
考點分析七函數(shù)_第2頁
考點分析七函數(shù)_第3頁
考點分析七函數(shù)_第4頁
考點分析七函數(shù)_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

考點分析七函數(shù)1、庫函數(shù)考點1、函數(shù)的基本概念在c語言中,函數(shù)是程序的基本組成單位,因此可以利用函數(shù)作為程序模塊來實現(xiàn)c語言程序。一個C語言程序由一個主函數(shù)(main()函數(shù))和其它若干函數(shù)構成。主函數(shù)可以調用其它函數(shù),其它函數(shù)之間也可以互相調用。這些函數(shù)可以是C語言提供的庫函數(shù),也可以是用戶自定義的函數(shù)。例如:#include<stdio.h>voidhello(){printf(“Hello,howdoyoudo?\n”);}main(){hello();}程序輸出:Hello,howdoyoudo?

hello是用戶自定義函數(shù),它調用了庫函數(shù)printf,功能是輸出字符串Hello,howdoyoudo?main函數(shù)又調用了hello函數(shù)。注意:函數(shù)之間可以相互調用,但所有函數(shù)都是相互獨立的,一個函數(shù)并不屬于其它函數(shù)。其它函數(shù)不能調用主函數(shù)??键c2、標準庫函數(shù)的調用

C語言提供了豐富的庫函數(shù),如數(shù)據輸入/輸出,數(shù)學計算,字符串處理等,編程時可以調用這些函數(shù),而無須自己再定義。調用標準庫函數(shù)需要以下兩個步驟:

1)包含頭文件;

2)調用庫函數(shù)。調用庫函數(shù)的格式是:函數(shù)名(參數(shù)表)在c語言中庫函數(shù)的調用可以出現(xiàn)在表達式中,例如a=fab(b);表示將b的絕對值賦給a。也可以作為單獨語句使用,這個時候需要在末尾加上分號,例如:printf(“hello!”);2、函數(shù)的定義和聲明考點3、函數(shù)定義

c語言中的庫函數(shù)實現(xiàn)的只是一些通用的功能,當程序有特定需求時,用戶要編寫程序實現(xiàn)這些功能。這就是自定義函數(shù)。函數(shù)定義的一般形式:返回值類型說明符函數(shù)名(形式參數(shù)表)

{函數(shù)體內定義的變量類型說明語句

}

例1:定義一個函數(shù),求兩個數(shù)中較小的數(shù)。intmin(inta,intb){intt;

if(a>b)returnt=b;elset=a;returnt;}其中,min是函數(shù)名,min前的int是返回值類型,min后面圓括號內的a、b是形式參數(shù),語句returnt;是將t作為函數(shù)的返回值帶回給主調函數(shù)。說明:

1)函數(shù)名和參數(shù)都是用戶自定義的標識符,因而其必須符合標識符的命名規(guī)則。

2)函數(shù)可以沒有返回值,這時應將返回值類型定義為void類型。返回值類型也可以省略不寫,這時系統(tǒng)默認返回值類型為int型。

3)函數(shù)可以沒有參數(shù)表,即無參函數(shù)。例如上面的hello()函數(shù)就是沒有參數(shù)。

4)函數(shù)也可以沒有說明部分和語句。例如draw()

{}

這稱為空函數(shù),沒有任何實際意義,在程序中多用于功能的擴充。

5)不能在函數(shù)中定義函數(shù)。因為函數(shù)之間是相互獨立的,沒有哪個函數(shù)屬于另一個函數(shù)??键c4、函數(shù)聲明在c語言中,除main函數(shù)之外,用戶定義的其他函數(shù)必須遵循“先定義,后使用”的原則。因此,如果調用在前定義在后,就必須在調用之前對函數(shù)進行聲明。即向編譯器表明該函數(shù)將會被調用,并將函數(shù)的有關信息通知編譯器。函數(shù)聲明的形式如下:返回值類型函數(shù)名(類型名,類型名…)或返回值類型函數(shù)名(類型名參數(shù)1,類型名參數(shù)2..)

說明:

1)函數(shù)聲明中的參數(shù)名稱可以和函數(shù)定義的參數(shù)名不同,它甚至可以和程序中的其他標識符同名。但聲明中的返回值類型必須與定義中的一致。為了增強程序的可讀性,建議使用帶參數(shù)的函數(shù)聲明方式。

2)函數(shù)的聲明可以是一條獨立的說明語句:例如:intmin(intx,inty);也可以和同類型的其他變量出現(xiàn)在定義語句中,例如:inta,b,min(intx,inty);

3)c語言編譯程序會在編譯時按照函數(shù)聲明進行類型檢驗。當實參與形參類型不符時,編譯器會自動進行類型轉換,如果無法進行轉換則報錯;當實參與行參數(shù)目不符時,編譯器也會報錯。因此編譯時的錯誤代替了運行時的錯誤,便于程序員進行程序調試。

3、數(shù)據傳遞*考點5形式參數(shù)和實際參數(shù)

定義函數(shù)時,函數(shù)名后的參數(shù)被稱為形式參數(shù),簡稱行參。函數(shù)調用時,函數(shù)名后的參數(shù)稱為實際參數(shù),簡稱實參。通過行參和實參,可以在調用函數(shù)和被調用函數(shù)之間傳遞數(shù)據。

說明:1)實參可以是常量、表達式或函數(shù)。

2)實參與行參的類型必須相同或賦值兼容。

3)只有當函數(shù)被調用時,行參才被分配內存單元,否則不占存儲空間,調用結束后,行參所占的存儲空間被釋放。

4)實參對行參的數(shù)據傳遞是值傳遞,只能由實參傳給行參,而不能由行參傳遞給實參。而且在內存中,行參和實參占用不同的內存單元,因此行參的改變并不影響實參。例如:#include<stdio.h>voidmain(){voidswap(intx,inty);

inta=10,b=20;printf(“%d,%d\n”,a,b);swap(a,b);printf(“%d,%d\n”,a,b);}voidswap(int

x,inty){intt;t=x;x=y;y=t;}考點6、函數(shù)的返回值被調函數(shù)可以用return語句將函數(shù)值傳遞給調用函數(shù)。return語句的形式如下:

return表達式;或return(表達式);說明:1)當函數(shù)執(zhí)行到return語句時,return語句后的函數(shù)語句都不執(zhí)行,返回到調用該函數(shù)的地方,并帶回返回值。

2)return后的返回值可以是常量、變量或表達式。

3)表達式的類型必須和函數(shù)定義中的返回值類型一致,否則系統(tǒng)會自動將其轉換為定義類型。如果轉換無法進行,則編譯報錯。

4)函數(shù)可以沒有返回值,即返回值類型為void型,此時函數(shù)體內可以沒有return語句,一直執(zhí)行到函數(shù)結束。

5)函數(shù)體內可以有多個return語句,但只會有一個return語句被執(zhí)行,或者都不執(zhí)行。4、函數(shù)調用考點7、函數(shù)調用的形式和語法要求函數(shù)的調用形式如下:函數(shù)名(實參表)說明:1)調用函數(shù)時,函數(shù)名必須與所調用的函數(shù)名完全一致。

2)實參與行參的個數(shù)必須相同,類型一致或者可以兼容。當函數(shù)沒有參數(shù)時,函數(shù)的調用形式就變?yōu)?/p>

函數(shù)名()

3)函數(shù)調用可以作為表達式,出現(xiàn)在任何運行表達式的地方。例如:k=min(i,j);這種調用多出現(xiàn)在函數(shù)有返回值的情況下。

4)函數(shù)調用可以作為一條獨立語句。例如:

hello();注意:因為是語句,所以后面的分號不可遺漏。例如:編寫函數(shù)myupper(c),如果c不是大寫字母將其轉換成大寫字母并輸出,以#作為結束標志。#include<stdio.h>charmyupper(charc);voidmain(){charc;while((c=getchar())!='#'){c=myupper(c);

putchar(c);}}charmyupper(charc){if(c>='a'&&c<='z')c=c-32;returnc;}考點8、函數(shù)的嵌套調用被調用的函數(shù)又調用另一個函數(shù),稱為函數(shù)的”嵌套調用”。下列程序演示了函數(shù)嵌套調用的過程。#include<stdio.h>voidfun1();voidfun2();voidmain(){fun2();

printf("main\n");}voidfun1(){printf("fun1\n");}voidfun2(){printf("fun2\n");fun1();}*考點9、函數(shù)的遞歸調用函數(shù)直接或間接地調用該函數(shù)本身,稱為函數(shù)的遞歸調用??梢詫⑦f歸調用看做是嵌套調用的特殊形式。例:用遞歸的方法寫求階乘的函數(shù)。

#include<stdio.h>longjc(intn){inti;longs1;if(n==1)s1=1;elses1=jc(n-1)*n;returns1;}

voidmain(){longs;s=jc(4);

printf(“%ld”,s);}函數(shù)遞歸調用時,系統(tǒng)將自動將函數(shù)中的當前變量和行參變量暫時保存起來,在新一輪的調用過程中,系統(tǒng)將為該次調用的函數(shù)所用到的變量和行參重新分配內存單元。因此,遞歸調用的層次越多,同名變量所占用的存儲單元就越多。5、變量的作用域考點10、局部變量作用域和生存期在函數(shù)內部或復合語句內部定義的變量,稱為局部變量。局部變量只在定義它的函數(shù)或復合語句內部才有效,在此之外不能使用。例如:

intfun1(inti){……}

intfun2(){intj;if(j>0){intk;…….}}變量i,j,k都是局部變量。i的作用域是整個fun1函數(shù),j的作用域是整個fun2函數(shù),k的作用域是整個if語句。說明:1)行參也是局部變量。例如fun1中的行參i,作用域僅限于fun1函數(shù)。

2)不同函數(shù)之間可以使用同名的局部變量。不同函數(shù)中的變量在內存中占不同的存儲單元,不會互相影響,因此可以同名。*考點11、全局變量作用域和生存期在函數(shù)外部定義的變量稱為外部變量,它的作用范圍是從定義位置到源文件結束,因而也稱為全局變量。例如:

intx;

intfun1(){……}

inty;

intfun2(){……}變量x和y都是全局變量,但它們的作用域和定義它們的位置有關,。在fun1函數(shù)中可以使用變量x,但不能使用變量y,在fun2函數(shù)中x、y都可以使用。說明:1)全局變量實際是在函數(shù)之間增加了一種數(shù)據傳遞的方式。函數(shù)只能有一個返回值,而通過改變全局變量的值,可以使函數(shù)有一個以上的返回值。因此,如果兩個函數(shù)必須共享某一個參數(shù),而它們又不會互相調用,這時候可以把共享數(shù)據定義為全局變量。但是注意,在全局變量有效的范圍內,任何一個函數(shù)都可以改變全局變量的值。

2)如果函數(shù)內部的局部變量與函數(shù)外的全局變量同名,則函數(shù)內被訪問的是內部變量。6、變量的生存期和存儲類別考點12、動態(tài)存儲和靜態(tài)存儲從變量的作用域,可以將變量分為全局變量和局部變量,從變量的生存期,可以將變量分為靜態(tài)存儲方式和動態(tài)存儲方式。靜態(tài)存儲是指,在程序運行期間為變量分配固定的內存空間,動態(tài)存儲是指在程序運行期間,根據需要動態(tài)的分配內存空間。具體包括auto、static、register、extern四種。

內存中一共為用戶提供了三種類型的存儲空間,分別為:

1)程序代碼區(qū)。用于存放源程序代碼。

2)靜態(tài)存儲區(qū)。用于存放數(shù)據,包括全局變量和靜態(tài)局部變量。程序執(zhí)行時,系統(tǒng)就為全局變量分配固定的內存空間,程序執(zhí)行結束時才釋放該空間。

3)動態(tài)存儲區(qū)。用于存放數(shù)據,包括函數(shù)行參、自動變量、函數(shù)調用的斷點信息和函數(shù)返回地址。在程序過程中,系統(tǒng)為這些變量分配和釋放的空間都是動態(tài)進行的,例如,在一個程序中多次調用同一個函數(shù)時,系統(tǒng)為函數(shù)中的局部變量分配的空間地址可能是不同的??键c13、auto(自動)變量由關鍵字auto聲明的變量稱為自動變量,當進入函數(shù)體時,系統(tǒng)在動態(tài)存儲區(qū)為auto變量分配空間,當退出函數(shù)體時釋放分配的空間,因此稱為自動變量。在定義局部變量時,如果沒有指定存儲類型,系統(tǒng)默認為auto型。因此,程序中大多數(shù)變量都是auto變量。*考點14、static(靜態(tài))變量用關鍵字static聲明的變量稱為靜態(tài)變量,static變量的存儲單元被分配在靜態(tài)存儲區(qū)。它具有下面兩個特點:

1)static變量的生存期是從程序開始執(zhí)行到程序運行結束。在整個程序運行期間,靜態(tài)變量始終在靜態(tài)存儲區(qū)占用內存單元。因此,函數(shù)中的局部變量被聲明為靜態(tài)變量后,函數(shù)調用結束后該變量將保留原值,而不是消失,在下一次函數(shù)調用時該變量的值仍為存儲單元中的值。

2)static變量在編譯時賦值,而不是在程序運行時賦值。如果沒有顯式的賦初值,系統(tǒng)將默認給它賦值為0。#include<stdio.h>voidfun(intx){inty=0;staticz=0;

y++;z++;

printf("%d,%d\n",y,z);}voidmain(){inti;for(i=0;i<3;i++)

fun(i);}程序運行結果:1,11,21,3考點15、register(寄存器)變量用關鍵字register聲明的變量稱為寄存器變量,該類變量在CPU寄存器中分配空間。程序運行時,訪問寄存器的速度遠遠高于訪問內存的速度。因此,當程序運行效率要求較高時,可以將頻繁使用的變量聲明為寄存器類型。說明:1)只有局部auto變量和函數(shù)的行參才可以被聲明為寄存器變量,其它的不可以;

2)無論寄存器變量是否真的放在寄存器中,都不能對其進行求地址運算。考點16、extern(外部)變量全局變量的作用域是從變量定義到程序結束,為了擴展全局變量的作用域,c語言提供了extern關鍵字。如果全局變量定義在后,函數(shù)引用在前,只要在引用函數(shù)中用extern對該變量進行聲明,就可以使用該變量。因此,該變量的作用域擴展為從extern說明處起,到程序結束。注意:全局變量在定義時才對其分配空間,而extern說明不分配空間。因此,對同一個全局變量,程序中只能出現(xiàn)一次定義,而extern聲明可以多次出現(xiàn),并且在定義時不再出現(xiàn)extern聲明。例題:1、下列敘述中錯誤的是()。A)C程序必須由一個或一個以上的函數(shù)組成B)函數(shù)調用可以作為一個獨立的語句存在C)若函數(shù)有返回值,必須通過return語句返回D)函數(shù)形參的值也可以傳回給對應的實參2、若函數(shù)調用時的實參為變量時,下列關于函數(shù)形參和實參的敘述中正確的是()。A)函數(shù)的實參和其對應的形參共占同一存儲單元B)形參只是形式上的存在,不占用具體存儲單元C)同名的實參和形參占同一存儲單元D)函數(shù)的形參和實參分別占用不同的存儲單元3、在C語言中,函數(shù)返回值的類型最終取決于()。A)函數(shù)定義時在函數(shù)首部所說明的函數(shù)類型B)return語句中表達式值的類型C)調用函數(shù)時主調函數(shù)所傳遞的實參類型D)函數(shù)定義時形參的類型4、下列關于函數(shù)的敘述中正確的是()。A)每個函數(shù)都可以被其他函數(shù)調用(包括main函數(shù))B)每個函數(shù)都可以被單獨編譯C)每個函數(shù)都可以單獨運行D)在一個函數(shù)內部可以定義另一個函數(shù)5、若有代數(shù)式|nx+ex|(其中e僅代表自然對數(shù)的底數(shù),不是變量),則下列能夠正確表示該代數(shù)式的C語言表達式是()。A)sqrt(abs(n^x+e^x))B)sqrt(fabs(pow(n,x)+pow(x,e)))C)sqrt(fabs(pow(n,x)+exp(x)))D)sqrt(fabs(pow(x,n)+exp(x)))6、若各選項中所用變量已正確定義,fun()函數(shù)中通過return語句返回一個函數(shù)值,下列選項中錯誤的程序是()。A)main()B)floatfun(int

a,intb){……}{……main()x=fun(2,10);{…………}x=fun(i,j);floatfun(int

a,intb)……}{……}C)floatfun(int,int);D)main()main(){floatfun(int

i,intj);{……x=fun(2,10);……x=fun(i,j);……}……}floatfun(int

a,intb)floatfun(int

a,intb)

{……}{……}

7、已定義下列函數(shù):int

fun(int*p){return*p;)fun函數(shù)返回值是()。A)不確定的值B)一個整數(shù)C)形參p中存放的值D)形參p的地址值8、設fun()函數(shù)的定義形式為()。voidfun(char

ch,floatx){…}則下列對函數(shù)fun的調用語句中,正確的是A)fun("abc",3.0);B)t=fun('D',16.5);C)fun('65',2.8);D)fun(32,32);9、有下列程序:intfun1(doublea){returna*=a;}intfun2(doublex,doubley){doublea=0,b=0;a=fun1(x);b=fun1(y);return(int)(a+b);}main(){doublew;w=fun2(1.1,2.0);……}程序執(zhí)行后變量w中的值是()。A)5.21B)5C)5.0D)0.010、有下列程序:fun(intx){intp;if(x==0‖x==1)return(3);p=x-fun(x-2);returnp;}main(){printf("%d\n",fun(7));}執(zhí)行后的輸出結果是()。A)7B)3C)2D)011、有下列程序:int

fun(intn){if(n==1)return1;elsereturn(n+fun(n-1));}main(){intx;scanf("%d",&x);x=fun(x);printf("%d\n",x);}執(zhí)行程序時,給變量x輸入10,程序的輸出結果是()。A)55B)54C)65D)4512、在一個C源程序文件中所定義的全局變量,其作用域為()。A)所在文件的全部范圍B)所在程序的全部范圍C)所在函數(shù)的全部范圍D)由具體定義位置和extern說明來決定范圍13、有下列程序:voidfun2(chara,charb){printf("%c%c",a,b);}chara='A',b='B';voidfun1(){a='C';b='D';}main(){fun1();printf("%c%c",a,b);fun2('E','F');}程序的運行結果是()。A)CDEFB)ABEFC)ABCDD)CDAB14、有下列程序:fun(int

x,inty){staticintm=0,i=2;i+=m+1;m=i+x+y;returnm;}main(){intj=1,m=1,k;k=fun(j,m);printf("%d,",k);k=fun(j,m);printf("%d\n",k);}執(zhí)行后的輸出結果是()。A)5,5B)5,11C)11,11D)11,515、有下列程序:int

fun(intx[],intn){staticintsum=0,i;for(i=0;i<n;i++)sum+=x[i];returnsum;}main(){inta[]={1,2,3,4,5},b[]={6,7,8,9},s=0;s=fun(a,5)+fun(b,4);printf("%d\n",s);}程序執(zhí)行后的輸出結果是()。A)45B)50C)60D)5516、有下列程序:#include<stdio.h>inta=1;int

f(intc){staticinta=2;c=c+1;return(a++)+c;}main(){int

i,k=0;for(i=0;i<2;i++){inta=3;k+=f(a);}k+=a;printf("%d\n",k);}程序的運行結果是()。A)14B)15C)16D)1717、有下列程序:inta=4;int

f(intn){intt=0;staticinta=5;if(n%2){inta=6;t+=a++;}else{inta=7;t+=a++;}returnt+a++;}main(){ints=a,i=0;for(;i<2;i++)s+=f(i);printf("%d\n",s);}程序運行后的輸出結果是()。A)24B)28C)32D)3618、有下列程序:inta=2;int

f(intn){staticinta=3;intt=0;if(n%2){staticinta=4;t+=a++;}else{staticinta=5;t+=a++;}Returnt+a++;}main(){ints=a,i;for(i=0;i<3;i++)s+=f(i);printf("%d\n",s);}程序運行后的輸出結果是()。A)26B)28C)29D)24填空:1、下列程序中,fun()函數(shù)的功能是計算x2-2x+6,主函數(shù)中將調用fun()函數(shù)計算:y1=(x+8)2-2(x+8)+6y2=sin2(x)-2sin(x)+6請?zhí)羁铡?include"math.h"doublefun(double

x){return(x*x-2*x+6);}main(){doublex,y1,y2;printf("Enterx:");scanf("%lf",&x);y1=fun(_________);y2=fun(_________);printf("y1=%lf,y2=%lf\n",y1,y2);}2下列isprime

函數(shù)的功能是判斷形參a是否為素數(shù),是素數(shù),函數(shù)返回1,否則返回0。請?zhí)羁読nt

isprime(inta){inti;for(i=2;i<=a/2;i++)if(a%i==0)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論