C語言程序設(shè)計(jì)(慕課版)函數(shù)_第1頁
C語言程序設(shè)計(jì)(慕課版)函數(shù)_第2頁
C語言程序設(shè)計(jì)(慕課版)函數(shù)_第3頁
C語言程序設(shè)計(jì)(慕課版)函數(shù)_第4頁
C語言程序設(shè)計(jì)(慕課版)函數(shù)_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

函數(shù)****************************************************#include<stdio.h>main(){inti;for(i=0;i<4;i++)printf("*************\n");}******************#include<stdio.h>main(){inti;for(i=0;i<3;i++)printf("******\n");}******************!!!!!!~~~~******************printf(“!!!!!!\n");

for(i=0;i<3;i++)printf("******\n");printf(“~~~~\n");

for(i=0;i<3;i++)printf("******\n");}******************#include<stdio.h>main(){inti;for(i=0;i<3;i++)printf("******\n");}******************!!!!!!~~~~******************printf(“!!!!!!\n");

for(i=0;i<3;i++)printf("******\n");printf(“~~~~\n");

for(i=0;i<3;i++)printf("******\n");}voidprintstar(){for(i=0;i<3;i++)printf("******\n");}inti;printstar();printstar();printstar();******************#include<stdio.h>main(){printf(“!!!!!!\n");printf(“~~~~\n");}!!!!!!******************************~~~~************

voidprintstar(){inti;for(i=0;i<n;i++)printf("******\n");}printstar(3);printstar(5);printstar(2);(intn)************!!!!!!****************************************~~~~****

考慮該如何實(shí)現(xiàn)呢?各模塊相對(duì)獨(dú)立、功能單一、程序結(jié)構(gòu)清晰,可讀性好;每個(gè)模塊簡單,所以可靠性高;減少重復(fù)編碼的工作量,縮短開發(fā)周期;易于維護(hù)和功能擴(kuò)充。使用函數(shù)的優(yōu)點(diǎn):是面向過程程序設(shè)計(jì)語言的核心??捎梢粋€(gè)或多個(gè)源程序文件組成;每個(gè)源程序文件又由若干函數(shù)構(gòu)成;但整個(gè)程序有且僅有一個(gè)主函數(shù);程序運(yùn)行時(shí)從main函數(shù)開始執(zhí)行,main函數(shù)可調(diào)用其它函數(shù),最終一律返回到main函數(shù)結(jié)束運(yùn)行。函數(shù)之間是獨(dú)立的,是非從屬關(guān)系的,即不可嵌套定義的,但可以互相調(diào)用.

C程序特點(diǎn):函數(shù)的分類按照函數(shù)定義的角度分為:1.標(biāo)準(zhǔn)庫函數(shù):2.用戶自定義的函數(shù)是由系統(tǒng)定義地,也不必在程序中進(jìn)行類型說明,要調(diào)用某個(gè)庫函數(shù),則要用預(yù)處理命令#include將該函數(shù)所在的頭文件包含到程序中。使用庫函數(shù)應(yīng)注意:1)函數(shù)功能2)函數(shù)參數(shù)的數(shù)目和順序,及各參數(shù)意義和類型3)函數(shù)返回值意義和類型4)需要使用的包含文件按照函數(shù)的參數(shù)傳遞形式分為:無參函數(shù)有參函數(shù)按照函數(shù)的返回值類型分為:有返回值無返回值按照函數(shù)的使用范圍分為:內(nèi)部函數(shù)外部函數(shù)函數(shù)的定義------無參函數(shù)的定義類型名函數(shù)名(){聲明部分執(zhí)行部分}說明:類型名為函數(shù)返回值類型,如果定義時(shí)未指定,系統(tǒng)默認(rèn)為int型;無返回值的函數(shù)的類型名應(yīng)為void。函數(shù)名須是合法標(biāo)識(shí)符,不能與其他函數(shù)或變量重名類型標(biāo)識(shí)符函數(shù)名(形參表列){聲明部分執(zhí)行部分}形參表列必須聲明形參的類型函數(shù)的定義------有參函數(shù)的定義形參類型說明表,一般格式為:數(shù)據(jù)類型1形參1,…,數(shù)據(jù)類型n形參n#include<stdio.h>floataverage(floatx,floaty,floatz)

{floataver;aver=(x+y+z)/3;return(aver);}main(){floata,b,c,ave;a=6.5;b=4.2;c=25.3;

ave=average(a,b,c);

printf(“average=%f”,ave);}void函數(shù)名(){}函數(shù)體可以沒有,表示占個(gè)位置,實(shí)現(xiàn)功能以后補(bǔ)寫。函數(shù)的定義------空函數(shù)的定義函數(shù)參數(shù)和函數(shù)的值函數(shù)參數(shù)分為:實(shí)際參數(shù)和形式參數(shù)在函數(shù)定義的函數(shù)首部,函數(shù)名后的括號(hào)中說明的變量,簡稱形參。形參的個(gè)數(shù)可以有多個(gè),多個(gè)形參之間用逗號(hào)隔開。形式參數(shù):實(shí)際參數(shù):函數(shù)被調(diào)用時(shí),在調(diào)用處給出對(duì)應(yīng)的參數(shù),簡稱實(shí)參,實(shí)參往往是具有明確值的常量、變量或表達(dá)式等。#include<stdio.h>floataverage(floatx,floaty,floatz)

{floataver;aver=(x+y+z)/3;return(aver);}main(){floata,b,c,ave;a=6.5;b=4.2;c=25.3;

ave=average(a,b,c);

printf(“average=%f”,ave);}形式參數(shù)(形參)實(shí)際參數(shù)(實(shí)參)說明:1.形參在未出現(xiàn)函數(shù)調(diào)用時(shí),他們并不占內(nèi)存,只有發(fā)生函數(shù)調(diào)用時(shí)才會(huì)被分配空間,而且在該函數(shù)結(jié)束后,它所占的所有內(nèi)存也被釋放;2.實(shí)參必須是具有確定值的常量,變量或表達(dá)式;3.形參必須在定義時(shí)就聲明其類型;6.實(shí)參與形參的類型應(yīng)相同或賦值兼容;7.C語言規(guī)定,實(shí)參與形參之間必須是單向的值傳遞。4.實(shí)參的個(gè)數(shù)和形參的個(gè)數(shù)應(yīng)該相等;5.實(shí)參與形參在順序上應(yīng)該一一對(duì)應(yīng);例如:編一程序,將主函數(shù)中的兩個(gè)變量的值傳遞給swap函數(shù)中的兩個(gè)形參,交換兩個(gè)形參的值。#include<stdio.h>voidswap(intx,inty){intz;z=x;x=y;y=z; printf("\nx=%d,y=%d",x,y);}main(){inta=10,b=20;swap(a,b);printf("\na=%d,b=%d\n",a,b);}形式參數(shù)(形參)實(shí)際參數(shù)(實(shí)參)單向值傳遞例如:編一程序,將主函數(shù)中的兩個(gè)變量的值傳遞給swap函數(shù)中的兩個(gè)形參,交換兩個(gè)形參的值。#include<stdio.h>voidswap(intx,inty){intz;z=x;x=y;y=z; printf("\nx=%d,y=%d",x,y);}main(){inta=10,b=20;swap(a,b);printf("\na=%d,b=%d\n",a,b);}程序輸出結(jié)果:x=20,y=10a=10,b=20mainswap20b10az10y20x101020交換失敗函數(shù)的值即函數(shù)的返回值,是通過函數(shù)中的return語句獲得的.return語句的一般形式:return(表達(dá)式);return表達(dá)式;執(zhí)行過程:執(zhí)行return語句后,如果該表達(dá)式的類型與函數(shù)首部中定義的函數(shù)類型一致,則直接將結(jié)果返回主調(diào)函數(shù);否則,系統(tǒng)自動(dòng)將結(jié)果的類型轉(zhuǎn)換成定義的函數(shù)類型。通過return語句只能返回一個(gè)數(shù)值。函數(shù)內(nèi)可有多條返回語句,但每條返回語句的返回值只有一個(gè)。當(dāng)函數(shù)不需指明返回值時(shí),可以寫成:

return;當(dāng)函數(shù)中無返回語句時(shí),表示最后一條語句執(zhí)行完后遇

}

自動(dòng)返回。說明:函數(shù)的調(diào)用函數(shù)調(diào)用是使函數(shù)進(jìn)行一次實(shí)際的執(zhí)行。格式:函數(shù)名(實(shí)際參數(shù)表)說明實(shí)參在調(diào)用時(shí)必須有確定的值,可以是常量、變量和表達(dá)式。函數(shù)的實(shí)參和形參應(yīng)在個(gè)數(shù)、類型和順序上一一對(duì)應(yīng),否則會(huì)發(fā)生類型不匹配的錯(cuò)誤。對(duì)于無參函數(shù),調(diào)用時(shí)實(shí)參表列為空,但()不能省 。按函數(shù)在程序中出現(xiàn)的位置有以下3種函數(shù)調(diào)用方式:函數(shù)調(diào)用的方式

1.函數(shù)語句調(diào)用把函數(shù)調(diào)用作為一個(gè)語句不要求函數(shù)帶回明確的返回值只完成一定的操作#include<stdio.h>voidprintstar(){printf("*************\n");}voidprint_message(){printf("Howareyou!\n");}main(){printstar();print_message();printstar();}2.函數(shù)表達(dá)式調(diào)用以表達(dá)式形式出現(xiàn)在程序中要求函數(shù)必須帶回確定的返回值c=2*max(a,b);3.函數(shù)參數(shù)調(diào)用作為參數(shù)出現(xiàn)在程序中要求函數(shù)必須帶回確定的返回值m=max(a,max(b,c));函數(shù)的調(diào)用過程1.根據(jù)函數(shù)名找到被調(diào)函數(shù),若沒找到,系統(tǒng)將報(bào)告出錯(cuò)信息;若找到,為形參開辟存儲(chǔ)空間;2.計(jì)算實(shí)參的值。將實(shí)參的值傳遞給形參;3.保護(hù)主調(diào)函數(shù)的現(xiàn)場(chǎng),中斷主調(diào)函數(shù),轉(zhuǎn)到被調(diào)函數(shù)的函數(shù)體中開始執(zhí)行;4.遇到return語句或函數(shù)結(jié)束的花括號(hào)時(shí),返回主調(diào)函數(shù);5.釋放形參和調(diào)用函數(shù)中臨時(shí)變量的內(nèi)存空間;6.恢復(fù)現(xiàn)場(chǎng)從主調(diào)函數(shù)的中斷處繼續(xù)執(zhí)行。函數(shù)開始調(diào)用函數(shù)結(jié)束調(diào)用#include<stdio.h>floataverage(floatx,floaty,floatz)

{floataver;aver=(x+y+z)/3;return(aver);}main(){floata,b,c,ave;a=6.5;b=4.2;c=25.3;

ave=average(a,b,c);

printf(“average=%f”,ave);}mainaverage12.0ave25.3c4.2b6.5aaver12.0z25.3y4.2x6.5函數(shù)之間的位置關(guān)系在一個(gè)程序中有多個(gè)函數(shù),那么,各函數(shù)之間的前后位置關(guān)系規(guī)定如下:(1)被調(diào)函數(shù)在前面,主調(diào)函數(shù)在后面。

即先定義后調(diào)用。(2)主調(diào)函數(shù)在前面,被調(diào)函數(shù)在后面。這時(shí),必須在調(diào)用的語句之前,對(duì)被調(diào)用的函數(shù)進(jìn)行原型聲明(說明),可在主調(diào)函數(shù)的說明部分,也可在程序的開始處的說明部分進(jìn)行。常用的函數(shù)原型聲明方法是:

用函數(shù)定義中的函數(shù)首部,再加上一個(gè)分號(hào)。也可以省略函數(shù)首部中的形參名,但必須保留形參的類型。

intadd(intx,inty){return(x+y);}main(){inta=10,b=24,sum;printf("inputa,b:");sum=add(a,b);printf(”sum=%d\n",sum);}main(){inta=10,b=24,sum;

printf("inputa,b:");sum=add(a,b);printf(”sum=%d\n",sum);}intadd(intx,inty){return(x+y);}intadd(intx,inty);intadd(intx,inty);指針變量作為函數(shù)的參數(shù)(引用傳遞)以指針類型為函數(shù)的參數(shù),作用是將變量的地址傳入函數(shù)。intx,y;int*pt1;*pt2;x=8;y=6;pt1=&x;pt2=&y;if(x>y)swap(pt1,pt2);printf("x=%d,y=%d\n",x,y);swap(int*p1,int*p2)p=*p1;*p1=*p2;*p2=p;{intp;p8pt1pt2xy

{

}

main(){

}&x&yp1p2&x&y8668運(yùn)行結(jié)果:

x=6,y=8intx,y;int*pt1;*pt2;x=8;y=6;pt1=&x;pt2=&y;if(x>y)swap(pt1,pt2);swap(int*p1,int*p2)p=*p1;*p1=*p2;*p2=p;{intp;printf("x=%d,y=%d\n",x,y);如:main(

)f(inta[],intn){intarray[10];{......f(array,10)}...}數(shù)組作為函數(shù)參數(shù)

數(shù)組元素作函數(shù)實(shí)參

一維數(shù)組名作函數(shù)參數(shù)

多維數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù)——地址傳遞在主調(diào)函數(shù)與被調(diào)函數(shù)分別定義數(shù)組,且類型應(yīng)一致。形參數(shù)組大小(多維數(shù)組第一維)可不指定,但[]不能省。編譯程序并不為形參數(shù)組分配空間。數(shù)組名表示數(shù)組在內(nèi)存中的起始地址。例:計(jì)算數(shù)組中相鄰兩元素之間的差值。數(shù)組元素作函數(shù)實(shí)參——值傳遞intdif(intx,inty){returnx-y;}main(){inti,a[4]={0,1,2,3};for(i=0;i<3;i++){printf("thediffbetween%dand%dis",i,i+1);

printf("%d\n",dif(a[i],a[i+1])

);}}thediffbetween0and1is-1thediffbetween1and2is-1thediffbetween2and3is-1例:從鍵盤輸入8學(xué)生的成績,編寫函數(shù)使用簡

單選擇排序?qū)⒊煽冇筛叩降团判颍⑤敵龀煽儭?defineN10voidSelectSort(inta[],intn);voidInputArray(inta[],intn);voidOutputArray(inta[],intn);main(){ intn=8,score[N];

InputArray(score,n); SelectSort(score,n); OutputArray(score,n);}voidInputArray(inta[],intn){ inti; printf("Input%dscores:\n",n); for(i=0;i<n;i++) scanf("%d",&a[i]);}voidOutputArray(inta[],intn){ inti; printf("Thesortedscores:\n"); for(i=0;i<n;i++) printf("%4d",a[i]);}voidSelectSort(inta[],intn){ inti,j,k,t; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) { if(a[k]<a[j]) k=j; } if(k!=i) { t=a[i];a[i]=a[k]; a[k]=t;} }}用數(shù)組名作函數(shù)參數(shù),應(yīng)該在主調(diào)函數(shù)和被調(diào)函數(shù)分別定義數(shù)組,不能只在一方定義;實(shí)參數(shù)組與形參數(shù)組類型應(yīng)一致;形參數(shù)組也可以不指定大小,在定義數(shù)組時(shí)在數(shù)組名后面跟一個(gè)[];為了在被調(diào)用函數(shù)中處理數(shù)組元素的需要,將數(shù)組個(gè)數(shù)作為一個(gè)參數(shù);用數(shù)組名作函數(shù)實(shí)參時(shí),不是把數(shù)組的值傳遞給形參,而是把實(shí)參數(shù)組的起始地址傳遞給形參數(shù)組,這樣兩個(gè)數(shù)組就共占同一段內(nèi)存單元。說明:例:求二維數(shù)組中所有元素的最大值。intgetmax(intb[3][4])/*或intgetmax(intb[][4])*/{inti,j,max=b[0][0];for(i=0;i<3;i++);{for(j=0;j<4;j++)if(max<b[i][j])max=b[i][j];}returnmax;}main(){inta[3][4],i,j;printf(“\nEnter6integers:");for(i=0;i<3;i++)for(j=0;j<4;j++) scanf("%d",&a[i][j]);printf(“\nMax=%d”,getmax(a));}由于數(shù)組名代表首地址,能接收并存放地址值的只能是指針變量。故編譯系統(tǒng)將形參數(shù)組名作為指針變量來處理。例中函數(shù)首部f(inta[],intn)可寫成

f(int*a,intn)兩種完全等價(jià)。歸納起來,如果有一個(gè)數(shù)組,想在被調(diào)用的函數(shù)中改變其元素的值,實(shí)參與形參的對(duì)應(yīng)關(guān)系有以下四種:(1).實(shí)參和形參都用數(shù)組名。(2).實(shí)參用數(shù)組名,形參用指針變量。(3).實(shí)參用指針變量,形參用數(shù)組名。(4).實(shí)參和形參都用指針變量。實(shí)質(zhì)都是地址值的傳遞通過調(diào)用函數(shù),將整型數(shù)組的所有元素加10。參數(shù)傳遞用四種方法實(shí)現(xiàn)。voidadd(intb[],intn){inti;for(i=0;i<n;i++)b[i]+=10;}main(){inti,a[10]={1,2,3,4,5,6,7,8,9,10};add(a,10);for(i=0;i<10;i++)printf("%4d",a[i]);}voidadd(int*p,intn){int*pend=p+n;for(;p<pend;p++)*p+=10;}main(){inti,a[10]={1,2,3,4,5,6,7,8,9,10};add(a,10);for(i=0;i<10;i++)printf("%4d",a[i]);}voidadd(intb[],intn){inti;for(i=0;i<n;i++)b[i]+=10;}main(){inti,a[10]={1,2,3,4,5,6,7,8,9,10};int*q=a;add(q,10);for(i=0;i<10;i++)printf("%4d",a[i]);}voidadd(int*p,intn){int*pend=p+n;for(;p<pend;p++)*p+=10;}main(){inti,a[10]={1,2,3,4,5,6,7,8,9,10};int*q=a;add(q,10);for(i=0;i<10;i++)printf("%4d",a[i]);}用字符數(shù)組或指針做函數(shù)參數(shù)傳遞字符串將字符串從一個(gè)函數(shù)傳遞到另一個(gè)函數(shù),可以用地址傳遞的方法,即用字符數(shù)組名或用字符指針變量作參數(shù)。在被調(diào)用的函數(shù)中可以改變字符串中的內(nèi)容,在主調(diào)函數(shù)中可以得到改變了的字符串。字符串復(fù)制函數(shù)主要功能的實(shí)現(xiàn)。voidstrcpy(chars1[],chars2[]){inti=0;while(s2[i]!='\0'){s1[i]=s2[i];i++;}s2[i]='\0';}main(){chara[20]="Iamateacher.";charb[]="youareasrudent.";printf("stringa=%s\nstringb=%s\n",a,b);strcpy(a,b);printf("\nstringa=%s\nstringb=%s\n",a,b);}(2)形參用字符指針變量。程序如下:voidstrcpy(char*s1,char*s2){for(;*s2!='\0';s2++,s1++)*s1=*s2;*s1='\0';}main(){chara[20]="Iamateacher.";char*b="youareasrudent.";printf("stringa=%s\nstringb=%s\n",a,b);strcpy(a,b);printf("\nstringa=%s\nstringb=%s\n",a,b);}{while((*s1=*s2)!='\0'){s1++;s2++;}*s1='\0';}{while(*s2!='\0')*s1++=*s2++;*s1='\0';}{while(*s2)*s1++=*s2++;*s1='\0';}{

while((*s1++=*s2++)!='\0')}{

while(*s1++=*s2++)}函數(shù)的嵌套調(diào)用在C語言中,函數(shù)調(diào)用允許嵌套,所謂函數(shù)的嵌套調(diào)用是指在主調(diào)函數(shù)調(diào)用被調(diào)函數(shù)的過程中,被調(diào)函數(shù)又調(diào)用了另一被調(diào)函數(shù)。

a函數(shù)

main()調(diào)用函數(shù)a

調(diào)用函數(shù)b

b函數(shù)

結(jié)束

例:求三個(gè)數(shù)中最大數(shù)和最小數(shù)的差值。intdif(intx,inty,intz){return

max(x,y,z)-min(x,y,z);

}main(){inta,b,c,d;scanf("%d%d%d",&a,&b,&c);

d=dif(a,b,c);printf("Max-Min=%d\n",d);}intmax(intx,inty,intz){intr;r=x>y?x:y;return(r>z?r:z);}intmin(intx,inty,intz){intr;r=x<y?x:y;return(r<z?r:z);}例:求圓環(huán)的面積。#include<math.h>#definePI3.1415926floatarea_ring(floatx,floaty);floatarea(floatr);main(){floatr,r1;printf(“inputtowfigure:\n”);scanf(“%f%f”,&r,&r1);printf(“area_ringis%f”,area_ring(r,r1));}floatarea_ring(floatx,floaty){floatc;c=fabs(area(x)-area(y));return(c);}floatarea(floatr){return(PI*r*r);}

函數(shù)的遞歸調(diào)用

在函數(shù)的執(zhí)行過程中又直接或間接調(diào)用該函數(shù)本身

直接遞歸調(diào)用在函數(shù)中直接調(diào)用函數(shù)本身間接遞歸調(diào)用在函數(shù)中調(diào)用其它函數(shù),其它函數(shù)又調(diào)用原函數(shù)intf1(intx){inty,z;……

z=f2(y);…….return(2*z);}intf2(intt){inta,c;……

c=f1(a);…….return(3+c);}intf(intx){inty,z;……

z=f(y);…….return(2*z);}C編譯系統(tǒng)對(duì)遞歸函數(shù)的自調(diào)用次數(shù)沒有限制。f()調(diào)f調(diào)f2調(diào)f1f1()f2()例:計(jì)算n!。分析:求解n的階乘實(shí)際上有兩種方法,一種是連乘法,它基于階乘定義公式:

n!=1*2*3*…*n實(shí)現(xiàn)方法是用循環(huán)完成。另一種方法基于階乘遞歸定義公式:n!=1(n=0)n*(n-1)!(n>1)用函數(shù)的直接遞歸調(diào)用實(shí)現(xiàn)main(){intn;longy;printf("\ninputaintegernumber:\n");scanf("%d",&n);

if(n<0)printf("dataerror\n");

else{y=fac(n);

printf("%d!=%ld",n,y);}}longfac(intn){longf;

if(n==0)f=1;elsef=n*fac(n-1);

return(f);}main()n=1n=2n=3n=4f=24f=6f=2f=1f=4*fac(3)f=3*fac(2)f=2*fac(1)f=1fac(4)遞歸算法的兩要素:問題分解:將問題分解為相同性質(zhì)且規(guī)模更小的問題。遞歸結(jié)束條件:必須給出遞歸的結(jié)束條件,否則遞歸會(huì)無限循環(huán)下去。例:Hanoi塔問題。一塊板上有三根桿,a,b,c。a桿上套有64個(gè)圓盤,大的在下,小的在上。要把這64個(gè)圓盤從a桿移動(dòng)c桿上,每次只能移動(dòng)一個(gè)圓盤,b桿可以暫時(shí)存放。但在任何時(shí)候,任何桿上的圓盤都必須保持大盤在下,小盤在上。將A塔上的紅、黃兩盤移動(dòng)到B上藍(lán)盤放到C上將紅、黃兩盤從B移動(dòng)到C盤上。(完成)A問題分析:n=1時(shí),直接將其從A--->C

;n>1時(shí),只要先將前n-1個(gè)借助C從A--->B,那么可以把第n個(gè)直接從A--->C;將剩下的n-1個(gè)借助A從B--->C,問題性質(zhì)相同,因此適合采用遞歸過程!遞歸結(jié)束條件問題分解BC設(shè)將n個(gè)盤從a借助b移到c桿的算法為move(n,a,b,c),則:移動(dòng)盤子算法如下:①把a(bǔ)上面的n-1個(gè)盤借助c移到b,記做

move(n-1,a,c,b);②把最下面的1個(gè)盤從a直接移到c;③把b上的n-1個(gè)盤借助a移到c,記做

move(n-1,b,a,c);顯然這是一個(gè)遞歸算法,按此算法編程如下:main(){intm;printf("\nInputnumber:");scanf("%d",&n);printf("thesteptomoving%2ddiskes:\n",m);

move(n,'a','b','c');}voidmove(intn,intx,inty,intz){if(n==1)printf("%c->%c\n",x,z);

else{move(n-1,x,z,y);printf("%c--->%c\n",x,z);move(n-1,y,x,z);}}…...move(3,'a','b','c');…...move(n,x,y,z);3,'a','b','c'n!=1move(n-1,x,z,y);printf("->",x,z);move(n-1,y,x,z);move(n,x,y,z);2,'a',‘c',‘b'n!=1move(n-1,x,z,y);printf("->",x,z);move(n-1,y,x,z);move(n,x,y,z);1,'a',‘b',‘c'2,'a',‘c',‘b'1,'a',‘b',‘c'n=1printf("->",x,z);1.a->c2.a->bmove(n,x,y,z);1,‘c',‘a(chǎn)',‘b'1,‘c',‘a(chǎn)',‘b'n=1printf("->",x,z);3.c->b4.a->cmove(n,x,y,z);2,‘b',‘a(chǎn)',‘c'2,‘b',‘a(chǎn)',‘c'n!=1move(n-1,x,z,y);printf("->",x,z);move(n-1,y,x,z);move(n,x,y,z);1,‘b',‘c',‘a(chǎn)'1,‘b',‘c',‘a(chǎn)'n=1printf("->",x,z);5.b->a6.b->cmove(n,x,y,z);1,‘a(chǎn)',‘b',‘c'1,‘a(chǎn)',‘b',‘c'n=1printf("->",x,z);7.a->c指針與函數(shù)返回值為指針類型的函數(shù)指針函數(shù)的定義格式如下:類型名*函數(shù)名(參數(shù)表)例如:int*f(intx)指向函數(shù)的指針指針變量的另一的重要用途是,它可以指向一個(gè)函數(shù)(存儲(chǔ)函數(shù)入口地址),通過它可以調(diào)用指向的函數(shù),改變它的值就可以動(dòng)態(tài)的調(diào)用不同的函數(shù)。指向函數(shù)的指針和函數(shù)參數(shù)指向函數(shù)的指針的定義一般形式:數(shù)據(jù)類型(*指針變量名)()例如:int(*p)();說明:1.在給函數(shù)指針變量賦值時(shí),只需給出函數(shù)名;2.用函數(shù)指針調(diào)用函數(shù)時(shí),只需用*p代替函數(shù)名即可.例:#include<stdio.h>intf(intx){return3*x*x+5*x-7;}voidmain(){int(*p)();

inta;

p=f;printf("Inputx=");scanf("%d",&a);printf("(*p)(a)=%d\n",(*p)(a));printf("p(2a)=%d\n",p(2*a));}

局部變量和全局變量根據(jù)變量作用域不同,變量分為局部變量和全局變量。所謂變量的作用域,

是指該變量定義和使用的范圍。局部變量,

是指作用域在某程序塊(函數(shù))中的變量。說明:局部變量的使用

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論