C语言函数的原型:
函数类型函数名 (参数类型参数名)
使用函数前必须事先声明:函数类型 函数名 参数类型以便在遇到函数调用是编译系统正确识别函数并检查函数类型,如果函数出现在主调函数之前也可不必声明。
函数的递归调用:
/**
* 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比 * 第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,
* 说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
*/
#include <stdio.h>
int diguei(int);
main()
{
printf("%d",diguei(5));
getch();
}
int diguei(int peo){
int age,c;
if(peo==1) age=10;
else
age = diguei(peo-1)+2;
return age;
}
/*求某数的阶乘*/
#include <stdio.h>
main()
{
printf("%d",jiechen(3));
getch();
}
int jiechen(int num){
int sum;
if(num<1)
{
printf("error");
}
else if(num==1)
{
sum=1;
}
else
sum = jiechen(num-1)*num;
return sum;
}
上面是我实现的两个递归函数 其实不难 以前觉得很怕 做多了也就没感觉了。
当函数以数组的形式做为实参时 不是把数组的值传递给形参 而是把实参数组的起始地址传递给形参,这两个数组占用一个内存单元,因此形参发生改变时实参也将发生改变!这点是和PHP不同的 可自己测试。
多维数组:
#include <stdio.h>
#define NUM 10
main()
{
int i,j,arr[NUM][NUM];
for(i=0;i<NUM;i++)
{
for(j=0;j<=i;j++)
{
if(i==j||j==0)
{
arr[i][j]=1;
}
else
{
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
printf("%d ",arr[i][j]);
if(i==j)
printf("
");
}
}
}
上面是一个简单的直角杨辉三角形。
变量存储类型 :分为程序区,形态存储区,动态存储区
aoto:
C语言中不写存储类型的变量都视为auto类型,即动态存储区:在调用函数时系统会给他们分配空间,函数结束时自动释放这些存储空间。
aoto int a ;
|| /*两者存储类型相同*/
int a;
static:
变量的值在函数调用结束后不消失而保留原始值,即占用的存储单元不释放,在下一次调用时他的值就是最后调用时的值。
和PHP用法相同
#include <stdio.h>
main()
{
int a=2,i;
for(i=0;i<3;i++)
{
printf("%d
",staticF(a));
}
return 0;
}
int staticF(int a){
auto int b=0;
static c =3 ;
b=b+1;
c=c+1;
return a+b+c;
}
打印出 8 9 10
#include <stdio.h>
main()
{
int a = 5,i;
for(i=1;i<=a;i++)
{
printf("%d
",jic(i));
}
return 0;
}
int jic(int a){
static int x=1;
x = x*a;
return x;
}
这是个求1-5的阶乘
本文介绍了C语言中递归函数的使用,包括求年龄序列的递归计算和求阶乘的方法。此外,还展示了如何将数组作为参数传递,并通过实例演示了多维数组的应用,如构建直角杨辉三角形。同时,详细解释了不同存储类型的变量在函数调用前后的行为区别,以及在C语言中变量存储类型的概念。

被折叠的 条评论
为什么被折叠?



