• C语言学习13(函数的调用)


    函数的调用

    //函数的调用
    /*
    单行语句的调用,如:max(x,y);
    在表达式中调用,如:k=max(x,y);
    */
    //实例5-2:计算代数式1+1/2!+1/3!+.....+1/m!
    #include"stdio.h"
    #include"conio.h"
    double jie(int m);
    void main()
    {
    int i,m;
    float sum;
    printf("请输入m的最大值:");
    scanf("%d",&m);
    sum=0;
    for(i=1;i<=m;i++)
    {
    sum=sum+1/(float)jie(i);
    }
    printf("1+1/2!+1/3!+...+1/%d!的结果为:%f\n",m,sum);
    getch();
    }
    double jie(int m)
    {
    int i;
    double k=1;
    for(i=1;i<=m;i++)
    {
    k=k*i;
    }
    return k;
    }

     

    //函数参数的传递
    //赋值调用
    /*
    赋值调用时,函数将实参得知复制一份,传递给形参,从而实现参数的传递,在程序运行过程中,形参的变化不会影响实参*/
    /*需要注意的是,形参只在定义它的函数中存在,当从函数返回时,将释放形参所占的存储空间*/

    /*实例5-3 无效的数值交换
    在这个实例中,我们将要验证如下结论:在赋值调用中,形参的改变不会对实参产生影响。
    */

    #include"stdio.h"
    #include"conio.h"
    void fu(int x,int y);
    main()
    {
    int x=10,y=11;
    printf("在调用之前,x,y的值分别为:%d,%d\n",x,y);
    fu(x,y);
    printf("调用之后,x,y的值分别为:%d,%d\n",x,y);
    getch();
    }
    void fu(int x,int y)
    {
    int t;
    t=x;
    x=y;
    y=t;
    printf("在调用时,x,y的值分别为:%d,%d\n",x,y);
    }

     

    //传址调用
    /*
    语句格式:
    void swap(int *m,int *n);
    main()
    {
    int a,b;
    ...
    swap(&a,&b);
    ....
    }
    void swap(int *m,int *n)
    {
    ....
    }
    */
    /*传址调用时,函数将把实参的地址传递给形参,通过对地址的内容进行访问,可以在被调用函数中对该地址内容进行调用和修改。
    这是由于实参和形参都是指向同一存储空间,因此对形参的内容进行改变时,实参的内容也会发生变化。
    */


    //实例5-4 传址调用对实参的影响
    #include"stdio.h"
    #include"conio.h"
    void swap(int *n,int *m);
    main()
    {
    int n=10,m=11;
    printf("进行传址调用之前,n,m的值分别为:%d,%d\n",n,m);
    swap(&n,&m);
    printf("传址调用之后,n,m的值分别为:%d,%d\n",n,m);
    getch();
    }
    void swap(int *n,int *m)
    {
    int t;
    t=*n;
    *n=*m;
    *m=t;
    printf("进行传址调用时,n,m的值分别为:%d,%d\n",*n,*m);
    }

     

    //函数的递归调用

    //实例5-6 累加求和
    //计算代数式:1+2+3+...+n的结果

    #include"stdio.h"
    int add(int n);
    void main()
    {
    long sum;
    int n;
    printf("\t求代数式1+2+3+...+n的和\n");
    printf("请输入n的值:");
    scanf("%d",&n);
    sum=add(n);
    printf("1+2+3+...+%d=%d\n",n,sum);
    }
    int add(int n)
    {
    int m;
    if(n>1)
    {
    m=n+add(n-1);
    }
    else
    m=1;
    return m;
    }
    //函数的递归调用
    //实例5-7:菲波那契数列
    /*
    菲波那契数列是这样的一个数列:1,1,2,3,5,8....,n
    表达式为: f(n)= f(n-1)+f(n-2) n>2
    1 n=1 or 2
    */


    #include"stdio.h"
    #include"conio.h"
    int f(int m);
    void main()
    {
    int l,m;
    long i;
    printf("\t菲波那契数列\n");
    printf("请输入数列的长度:");
    scanf("%d",&l);
    for(m=1;m<=l;m++)
    {
    i=f(m);
    printf("%20d",i);
    }
    printf("\n ");
    getch();
    }
    int f(int m)
    {
    long n;
    if(1==m||2==m)
    {
    n=1;
    }
    else
    n=f(m-1)+f(m-2);
    return n;
    }
    //实例5-7:菲波那契数列(拓展,用循环来做)
    /*
    菲波那契数列是这样的一个数列:1,1,2,3,5,8....,n */

    #include"stdio.h"
    #include"conio.h"
    void main()
    {
    int l,i,n,m,a1,a2;
    printf("\t菲波那契数列\n");
    printf("请输入数列的长度:");
    scanf("%d",&l);
    for(i=1;i<=l;i++)
    {
    for(n=1;n<=i;n++)
    {
    if(1==n||2==n)
    {
    m=1;
    a1=1;
    a2=1;
    }
    else
    {
    m=a1+a2;
    a1=a2;
    a2=m;
    }
    }
    printf("%5d",m);
    }
    printf("\n");
    getch();
    }




  • 相关阅读:
    字符串,format格式化及列表的相关进阶操作---day07
    利用wiile双层循环打印各种星星---day06
    双层循环练习,pass_break_continue,和for循环---day06
    类型判断,代码块,流程控制及循环---day05
    频繁项集算法
    Unity 物体移动的理解
    Game1---游戏设计
    精读Hadamard Response论文
    java 创建线程
    Unity游戏开发面试基础知识
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/2202973.html
Copyright © 2020-2023  润新知