程序員考試補課筆記-第七天
今天終于都講到C語言比較后的范圍了,"函數(shù)"說是C語言的一切真的沒錯(可能有吧,我不知道)。很多書上都說著函數(shù)是C語言根本,就是說函數(shù)是構(gòu)成C語言的??匆韵逻@個程序:
main()
{
printf("Hello World");
}
main()就是C語言里特殊的一個函數(shù),是構(gòu)成整個程序的關(guān)鍵。在C編譯器里首先就是要找出這個主函數(shù)才開始執(zhí)行編譯,好了,說了一些書上原來的東西?,F(xiàn)在我們就來看看C語言里的函數(shù)究竟是怎么的,如果我們從基礎(chǔ)的說起也沒有什么意思。那么我們就從函數(shù)的另一個特點說起,"遞歸函數(shù)"相信很多人都知道這個吧,看過老潭的教程應(yīng)該都知道他經(jīng)典的第一個遞歸程序吧:
int abc(int n)
{
int s;
if(n >1) s= n*abc(n-1);
else s=1;
return (s);
}
從這個源程序很容易就看出有一個同自己名字的函數(shù)在里面,所以以后我們看到一個函數(shù)里面調(diào)用自己就是遞歸函數(shù)了。而且我們看一個遞歸函數(shù)就主要就是看它是否一個返回的條件,就好像一條又黑又深的山洞,我們前去探險如果往到底就一定要回頭,就算是更深的也要返回?。∷晕覀兣卸ㄒ粋€遞歸函數(shù)是否成立也常常是看它的返回條件。至于上面的那個源程序我也不想多說了,應(yīng)該大家也看得明白。
這里就看看另一個利用遞歸函數(shù)做的題目吧,就是諾漢塔(老潭的書上也是有的)。
#include
void move(char x,char y)
{
printf("%c-->%c\n",x,y);
}
void hanoi (int n,char one ,char two,char three)
{
if(n==1) move (one ,three);
else
{
hanoi (n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
main()
{
int m;
printf("input the number of diskes:");
scanf("%d",&m);
printf("the step to moving %3d diskes:\n",m);
hanoi(m,'A','B','C');
}
/*運行情況如下:
input the number of diskes:3 回車
the step to moving 3 diskes:
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
書上說hanoi(n-1,one,three,two);是把"one"上的n-1個往"two"上移,接著move(one,three);然后是hanoi(n-1,two,one,three)即把"two"上的n-1個往"three"上移;
|h(2,1,3,2)|h(1,1,2,3)=>move(1,3) move(3,2) move(2,1) move(1,3) j)
{
int k=1,i=2,j=3;
pirntf("%d\n",i*3);
printf("%d\n",j*10);
}
printf("%d",k);
}
今天終于都講到C語言比較后的范圍了,"函數(shù)"說是C語言的一切真的沒錯(可能有吧,我不知道)。很多書上都說著函數(shù)是C語言根本,就是說函數(shù)是構(gòu)成C語言的??匆韵逻@個程序:
main()
{
printf("Hello World");
}
main()就是C語言里特殊的一個函數(shù),是構(gòu)成整個程序的關(guān)鍵。在C編譯器里首先就是要找出這個主函數(shù)才開始執(zhí)行編譯,好了,說了一些書上原來的東西?,F(xiàn)在我們就來看看C語言里的函數(shù)究竟是怎么的,如果我們從基礎(chǔ)的說起也沒有什么意思。那么我們就從函數(shù)的另一個特點說起,"遞歸函數(shù)"相信很多人都知道這個吧,看過老潭的教程應(yīng)該都知道他經(jīng)典的第一個遞歸程序吧:
int abc(int n)
{
int s;
if(n >1) s= n*abc(n-1);
else s=1;
return (s);
}
從這個源程序很容易就看出有一個同自己名字的函數(shù)在里面,所以以后我們看到一個函數(shù)里面調(diào)用自己就是遞歸函數(shù)了。而且我們看一個遞歸函數(shù)就主要就是看它是否一個返回的條件,就好像一條又黑又深的山洞,我們前去探險如果往到底就一定要回頭,就算是更深的也要返回?。∷晕覀兣卸ㄒ粋€遞歸函數(shù)是否成立也常常是看它的返回條件。至于上面的那個源程序我也不想多說了,應(yīng)該大家也看得明白。
這里就看看另一個利用遞歸函數(shù)做的題目吧,就是諾漢塔(老潭的書上也是有的)。
#include
void move(char x,char y)
{
printf("%c-->%c\n",x,y);
}
void hanoi (int n,char one ,char two,char three)
{
if(n==1) move (one ,three);
else
{
hanoi (n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
main()
{
int m;
printf("input the number of diskes:");
scanf("%d",&m);
printf("the step to moving %3d diskes:\n",m);
hanoi(m,'A','B','C');
}
/*運行情況如下:
input the number of diskes:3 回車
the step to moving 3 diskes:
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
書上說hanoi(n-1,one,three,two);是把"one"上的n-1個往"two"上移,接著move(one,three);然后是hanoi(n-1,two,one,three)即把"two"上的n-1個往"three"上移;
|h(2,1,3,2)|h(1,1,2,3)=>move(1,3) move(3,2) move(2,1) move(1,3) j)
{
int k=1,i=2,j=3;
pirntf("%d\n",i*3);
printf("%d\n",j*10);
}
printf("%d",k);
}