课外天地 李树青学习天地C语言程序设计 → [推荐]第八课代码讲义:函数


  共有12384人关注过本帖树形打印复制链接

主题:[推荐]第八课代码讲义:函数

帅哥哟,离线,有人找我吗?
admin
  1楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1939 积分:26594 威望:0 精华:34 注册:2003/12/30 16:34:32
[推荐]第八课代码讲义:函数  发帖心情 Post By: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;

}

 

 

 

 

 

 

 


 回到顶部