C语言基础八:函数

函数
    1.实现某种特定功能的指令序列
    2.作用:
        a)模块化的设计
        b)代码的复用 printf/gets
    3.函数的设计
        需求分析:
            a)明确实现的功能
            b)需要的资源
            c)算法思路
            d)完成情况的结果
        
            ex.求整型数组中的最大值       ex1.统计字符串中有几个字母?
                资源:数组、数组长度        资源:字符串、字符串的长度
                思路:max                    思路:('a'<=a[i]&&a[i]<='z')||('A'<=a[i]&&a[i]<='A')
                结果:max                    结果:几个字母
                
            
            
    4.函数实现
            4.1格式:
                    返回值类型 函数名(参数列表)
                    {
                        声明语句;
                        实现语句;
                        return;
                    }
                    “返回值类型”:必须单值类型,可以返回指针类型 
                    “函数名”    :只要是合法的标识符即可
                    “参数列表”  :(数据类型1 变量名1,数据类型2 变量名2)
                    return 返回值:
                            1.结束函数
                            2.返回一个与返回值类型一致的值(假设返回值类型是void  ,直接用return;)
                        
                    /*                                    /*                
                        功能:求数组的最大值                 ex.写一个函数,求2个数的最大值            
                    */                                    */
                    int maxFun(int a[],int length)        
                    {
                        int max=a[0];
                        int i;
                        for(i=0;i<length;i++)
                        {
                            if(max<a[i])
                            {
                                max=a[i];
                            }
                        }
                        return max;
                    }
            4.2函数的调用
                1.直接调用,作为一个单独的语句调用
                    函数名(参数列表);
                    "函数名":调用的函数名字
                    "参数列表":(变量名1,变量名2):变量名的类型与函数定义的类型一致
                                参数列表:里面可以是常量,变量,表达式,只要类型一致即可
                        maxFun(a,b);
                2.作为一个表达式出现在另一个表达式中
                    int c=maxFun(a,10);
                3.作为另一个函数的实参调用
                    maxFun(maxFun(a,b),10);
                    
           4.3基础概念
                主调函数:主动调用别的函数的函数
                被调函数:被别的函数调用的函数
                形    参:定义函数时参数列表的参数
                实    参:调用函数时传入的参数
         ☆4.4函数的调用过程
                .函数只有在被调用的时候才会分配空间。
                1.把实参的值赋值给形参
                2.执行函数体内的内容
                3.使用return返回,函数执行结束,所有形参以函数里定义的变量都会被释放
                4.最后把返回值返回给主调调函数。
           4.5
                主调函数--->被调函数 通过实参
                被调函数--->主调函数  通过返回值
                主调函数<---->被调函数  全局变量
        ex1.写一个函数求3个数的和,在main中调用。
            main中输入数据
            main中输出结果
            ps:1)函数名不能与变量名相同
                2)函数名不能使用关键字(int double long if/while static extern)
    5.递归函数
        函数自己直接或者间接的调用自己
        a)问题模型要符合递推
        b)问题模型的解到一定层次是显而易见的
        c)明确功能与需求的关系
        ex.要用递归来实现菲波那切数列
                功能:求菲波那切数列的第n项的值
                参数:
                结果:第n项的值
        ex1.
            a1=10
            An=A(n-1)+2
            a)使用递归求第n项的值。
                    功    能:求第n项的值
                    输入参数:n项
                    结    果:第n项的值
                    int A(int n)
                    {
                        if(n==1)
                        {
                            return 20;
                        }
                        else
                        {
                            return A(n-1)+2;
                        }
                    }
            b)求前n项的和
                s1=10;
                S(n)=S(n-1)+A(n);
        hanoi问题:
            有ABC三座塔,有64从小到大个盘子放在塔A上,要把塔A上的盘子移到塔C上
                1.每一次只能移到一个盘子
                2.盘子只能按照上面是小的下面是大来放置。

    5.变量的存储类别
            1.从作用范围内来讲
                1.全局变量
                    在函数外定义,一开始就会分配内存空间,并在整个程序/或者说整个工程内都有效
                    extern int a;//告诉编译器,我文件后面定义了一个变量
                    static修饰全局变量:该全局变量仅能在定义它的文件中使用
                2.局部变量
                    在函数体内部定义,它的作用范围从定义开始,到第一个{}结束
                    static 局部变量:一直存在,并且初始化只执行一次
                    
                    
            1.同名问题:只要作用域不同,就可以同名,名字相同,就近原则输出
            2.static作用:
                static修饰全局变量,函数:只能在当前文件中使用
                static修饰局部变量:只初始化一次,并且变量一致存在
            3.生存期:从定义开始到最后被释放(消失)
                        全局变量:从定义开始,整个工程;
                        局部变量:从定义开始,到第一个{}
                        static修饰的局部变量:程序运行开始就存在,直到程序结束。
                

猜你喜欢

转载自blog.csdn.net/qq_26128879/article/details/82820558