C语言学习第五天(函数、存储类型)

本文介绍了C语言中递归函数的使用,包括求年龄序列的递归计算和求阶乘的方法。此外,还展示了如何将数组作为参数传递,并通过实例演示了多维数组的应用,如构建直角杨辉三角形。同时,详细解释了不同存储类型的变量在函数调用前后的行为区别,以及在C语言中变量存储类型的概念。

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的阶乘

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值