c语言函数调用数组_第七讲:C语言基础之函数,第二节,实现汉诺塔
本文約2200字,主要講了C語言基礎之函數,遞歸,數組作為函數參數以及案例、練習題等。
帶你進入C語言的世界,入門C語言,后邊將持續更新。可以收藏學習。想了解C語言基礎之函數,函數的基本概述,函數的調用關系,函數的一般形式,函數參數和函數的值以及例題等,請點擊該處跳轉閱讀。
本文全干貨,新手必備,感謝你的閱讀,祝你學有所成,生活愉快!
一、函數的嵌套調用
嵌套定義就是在定義一個函數時,其函數體內又包含另一個函數的完整定義。然而,C語言不能嵌套定義函數,但可以嵌套調用函數,也就是說,在調用一個函數的過程中,又調用另一個函數。
main(){
a();
}
a(){
b();
}
b(){
return;
}
二、遞歸
在調用一個函數的過程中又出現直接或間接地調用該函數本身,稱為函數的遞歸調用。C語言的特點之一就在于允許函數的遞歸調用。
例如:
int f(int x)
{
int y,z;
z=f(y);
return(2*z);
}
案例1:漢諾塔問題
由上面的分析可知:將n個盤子從A座移到C座可以分解為以下3個步驟:
(1) 將A上n-1個盤借助C座先移到B座上。
(2) 把A座上剩下的一個盤移到C座上。
(3) 將n-1個盤從B座借助于A座移到C座上。
#include
main()
{
void hanoi(int n,char one,char two,char three); /* 對hanoi函數的聲明 */
int m;
printf("input the number of diskes:");
scanf("%d", &m);
printf("The step to moveing %d diskes:", m);
hanoi(m, 'A', 'B', 'C');
}
void hanoi(int n, char one, char two, char three) /* 定義hanoi函數, 將n個盤從one座借助two座,移到three座 */
{
void move(char x, char y); /* 對move函數的聲明 */
if( n==1 )
{
move(one, three);
}
else
{
hanoi(n-1, one, three, two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
void move(char x, char y) /* 定義move函數 */
{
printf("%c-->%c", x, y);
}
三、數組作為函數參數
數組可以作為函數的參數使用,進行數據傳送。數組用作函數參數有兩種形式。
一種是把數組元素(下標變量)作為實參使用;另一種是把數組名作為函數的形參和實參使用。
1.數組元素作函數實參
數組元素就是下標變量,它與普通變量并無區別。因此它作為函數實參使用與普通變量是完全相同的,在發生函數調用時,把作為實參的數組元素的值傳送給形參,實現單向的值傳送。
2.數組名作函數參數
用數組名作函數參數與用數組元素作實參有幾點不同:
1) 用數組元素作實參時,只要數組類型和函數的形參變量的類型一致,那么作為下標變量的數組元素的類型也和函數形參變量的類型是一致的。因此,并不要求函數的形參也是下標變量。換句話說,對數組元素的處理是按普通變量對待的。
然而,用數組名作函數參數時,則要求形參和相對應的實參都必須是類型相同的數組,都必須有明確的數組說明。當形參和實參二者不一致時,即會發生錯誤。
2) 在普通變量或下標變量作函數參數時,形參變量和實參變量是由編譯系統分配的兩個不同的內存單元。在函數調用時發生的值傳送是把實參變量的值賦予形參變量。
在用數組名作函數參數時,不是進行值的傳送,即不是把實參數組的每一個元素的值都賦予形參數組的各個元素。
3.數據的傳送實現
數組名就是數組的首地址。因此在數組名作函數參數時所進行的傳送只是地址的傳送,也就是說把實參數組的首地址賦予形參數組名。
形參數組名取得該首地址之后,也就等于有了實在的數組。實際上是形參數組和實參數組為同一數組,共同擁有一段內存空間。
例如:
void test(int b[10]);
void main()
{
int a[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
test(a);
putchar('');
}
void test(int b[10])
{
int i = 0;
for( ; i < 5; i++ )
{printf("%d ", b[i]);}}
4.內存數組的存儲:
例題2:有一個一維數組score,內放10個學生成績,求平均成績(寫一個average函數求平均成績)。
#include
double average(double array[10]); /* 函數聲明 */
main()
{
double score[10] = {82, 100, 87.5, 89, 78, 85, 67.5, 92.5, 93, 94}, result;
result = average(score);
printf("average score is %5.2lf", result);
putchar('');
}
double average(double array[10])
{
double result = 0;
int i = 0;
for( i=0; i < 10; i++ )
{
result += array[i];
}
result /= 10;
return result;
}
感謝您的閱讀,希望有所收獲!會持續更新!
總結
以上是生活随笔為你收集整理的c语言函数调用数组_第七讲:C语言基础之函数,第二节,实现汉诺塔的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都大熊猫基地直通车用提前买票么
- 下一篇: 根据录入的计算公式计算_污水处理工程设计