C語言初級階段5——函數2
址傳遞
1.地址:在定義變量,數組,函數等等,系統會自動給分配他們的內存區域(地址),把這個數據放到這個地址上面。
2.&:&a 得到a的地址編號
3.*:定義指針變量的一個標志;解引用 取內容。
指針變量:存儲地址的變量
整型變量:存儲整數的變量
int *d =地址
#include<stdio.h>
void fun(int a)
{
}
void fun1(int* p1)
{
printf("%d\n", *p1);
*p1 = 100;
}
int main() {
fun(10);
int a = 10;
int x = 100;
char b = 'a';
float c = 1.1f;
int* d = &a;
fun1(&a);
printf("%d\n", x);
return 0;
}
4.怎么定義一個變量來存儲地址==》指針變量
5.怎么獲取一個變量的地址 &
6.怎么通過指針變量訪問指針變量上所保存的地址內部數據。
7.址傳遞能夠通過形參改變實參的值
數組作為函數的參數
#include<stdio.h>
void fun(int arr[], int len)
{
for (int i = 0; i < len; i++)
{
printf("%d\n", arr[i]);
}
}
int main() {
int a[10] = { 1,2,3,4,5,6 };
int b[5] = { 11,22,33,44,55 };
int c[40] = { 0 };
fun(a, 10);
fun(b, 5);
fun(c, 40);
return 0;
}
函數的遞歸
1.定義:在一個函數中,重復的調用自己本身(自身調用自身)
#include<stdio.h>
void fun()
{
printf("111111\n");
fun();
}
int main() {
fun();
return 0;
}
#include<stdio.h>
void fun1()
{
static int i = 10;
if (i != 0)
{
i--;
fun1();
}
printf("%d\n", i);
}
void fun2(int n)
{
if (n != 0)
{
fun2(n - 1);
printf("%d\n", n);
}
}
int main() {
fun1();
fun2(4);
return 0;
}
2.遞歸逆向輸出一個數
#include<stdio.h>
void fun3(int n)
{
if (n != 0)
{
printf("%d\n", n % 10);
fun3(n /= 10);
}
}
int main() {
fun3(1234);
return 0;
}
3.斐波那契數列
1 1 2 3 5 8 13... 第n個元素的值=第n-1個元素的值+第n-2個元素
#include<stdio.h>
int fun4(int n)
{
if (n == 1 || n == 2)
return 1;
else
return fun4(n - 1) + fun4(n - 2);
}
int main() {
printf("%d\n", fun4(10));//括號內的數不能超過最大讀取數列
return 0;
}
作業1:猴子吃桃:第一題摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。第二天,又將剩下的桃子吃掉了一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半多吃一個。到最后第十天的時候,還想吃,結果發現就只剩下一個桃子了,請問第一天的時候總共摘了多少桃子,用遞歸的方式寫程序來求結果。
作業2:遞歸輸出10-1
浙公網安備 33010602011771號