以文本方式查看主题

-  课外天地 李树青  (http://www.njcie.com/bbs/index.asp)
--  C语言程序设计  (http://www.njcie.com/bbs/list.asp?boardid=29)
----  [推荐]第八课代码讲义:函数  (http://www.njcie.com/bbs/dispbbs.asp?boardid=29&id=1585)

--  作者:admin
--  发布时间:2015/11/17 7:48:36
--  [推荐]第八课代码讲义:函数

封装功能,可以反复调用,在代码更新时也希望尽量减少修改量
int main()
{
        int i;
        scanf("%d",&i);
        printf("%d\\n",i);
       
       
        scanf("%d",&i);
        printf("%d\\n",i);
       
       
        scanf("%d",&i);
        printf("%d\\n",i);
}


函数代码
int main()
{
    func();
    func();
}

func()
{
    int i;
    scanf("%d",&i);
    printf("%d\\n",i);
}


主函数也是函数


使用参数:
int main()
{
    int i,j;
    scanf("%d",&i);
    scanf("%d",&j);
    printf("最大值为:%d\\n",(i>j)?i:j);

    scanf("%d",&i);
    scanf("%d",&j);
    printf("最大值为:%d\\n",(i>j)?i:j);
}


函数使用:
int main()
{
    func();
    func();
}

func()
{
    int i,j;
    scanf("%d",&i);
    scanf("%d",&j);
    printf("最大值为:%d\\n",(i>j)?i:j);
}

使用参数可以让调用者自己决定数值的输入方式
int main()
{
    int i,j;
    scanf("%d",&i);
    scanf("%d",&j);
    func(i,j);

    func(j,i);
}

func(int i,int j)
{

    printf("最大值为:%d\\n",(i>j)?i:j);
}

返回值
既然参数可以决定如何获取数值,为什么不可以调用者自主决定结果值的处理方式呢?

int main()
{
    int i,j;
    scanf("%d",&i);
    scanf("%d",&j);
    printf("最大值为:%d\\n",func(i,j));

    int temp=func(j,i);
    func(func(j,i),i);
    printf("temp=%d\\n",temp);
}

int func(int i,int j)
{
    return (i>j)?i:j;
}


内存分配原理解释
int main()
{
    int i,j;
    scanf("%d",&i);
    scanf("%d",&j);
    func(i,j);
    printf("%d<%d\\n",i,j);
}

void func(int i,int j)
{
    int temp;
    if(i>j)
    {
        temp=i;
        i=j;
        j=temp;
    }
}


建议在使用前声明函数原型
int main()
{
    void func(int ,int ,int)
    int i,j;
    scanf("%d",&i);
    scanf("%d",&j);
    func(i,j);
    printf("%d<%d\\n",i,j);
}

void func(int i,int j,int t)
{
    int temp;
    if(i>j)
    {
        temp=i;
        i=j;
        j=temp;
    }
}

函数嵌套调用
int main()
{
    int max4(int ,int ,int ,int);
    int num1,num2,num3,num4,max;
    scanf("%d,%d,%d,%d",&num1,&num2,&num3,&num4);
    max=max4(num1,num2,num3,num4);
    printf("max=%d\\n",max);
}

int max4(int num1,int num2,int num3,int num4)
{
    int max2(int num1,int num2);
    int max;
    max=max2(num1,num2);
    max=max2(max,num3);
    max=max2(max,num4);
    return max;
}

int max2(int num1,int num2)
{
    return (num1>num2)?num1:num2;
}

递归调用
int main()
{
    int num=4;
    printf("%d=%d\\n",num,factorial(num));
}

int factorial(int n)
{
    if(n>1)
        return n*factorial(n-1);
    else
        return 1;
}

全局变量(尽量不要使用)
int num;

int main()
{
    printf("%d\\n",num);
    func();
    printf("%d\\n",num);
}

void func()
{
    num=4;
}

静态变量
int main()
{
    printf("%d\\n",func());
    printf("%d\\n",func());
    printf("%d\\n",func());
}

int func()
{
    static int temp=1;
    temp++;
    return temp;

}