zoukankan      html  css  js  c++  java
  • 函数的解析

    函数:为了完成某些功能而编写若干行代码的集合。可以供同一个程序或其他程序调用。

    主要是帮助我们解决一些需要重复使用的代码动作,使之更方便,更优化,页面更整洁

    函数分为系统本身的函数和我们自定义的函数

    math.h

    系统本身的函数,今天主要了解了math.h函数库

    在引用这些函数库中的函数时,需要在代码的最前端添加#include <math.h>,这样才可以合理的被利用

    Math函数库中,比较常见的函数,天花板数double ceil(double x) 返回不小于x的最小整数,地板数double floor(double x) 返回不大于x的最大整数.

    比如:

      printf("%lf",ceil(12.1));//13,比12.1大的最小整数

      printf("%lf",ceil(12.8));//13

      printf("%lf",ceil(-12.1));//12

      printf("%lf",ceil(-12.8));//12

      printf("%lf",floor(12.1));//12

      printf("%lf",floor(12.8));//12

      printf("%lf",floor(-12.1));//-13

      printf("%lf",floor(-12.8));//-13

    天花板数就相当于,在它头顶比它大的离它最近那个整数

    地板数就相当于,在它脚下比它小的离它最近那个整数,这样就很好理解了

    还有常见的int rand()随机数,随机获取一个0-32768之间的int类型的值。需要注意的是它不是真正的随机数,只是一个伪随机数,为什么这样说呢,请看下面:

      int i;
      for(i=0;i<10;i++){
      printf("%d\t",rand()%100);
      }

    结果:41      67      34      0       69      24      78      58      62      64

    第二次运行:

    结果:41      67      34      0       69      24      78      58      62      64

    这两个一模一样,随机出来的固定了,因为rand()在运行的时候系统给一个默认的种子,在这个种子的基础上随机,随机结果就会固定如何改变呢?

    那就让它的种子处于变化中,在前面for循环上面加上一句srand((unsigned)time(NULL))这表示种子是当前时间的到电脑公元时间1970-01-01-00-00-00之间的毫秒数,时间处于变化之中,随机数就必然改变

    还有很多函数,比如double pow(double x,double y) 返回x^y的值,等等,比较常用的就是随机数了 

    自定义函数:

    函数的自定义格式:

    返回值类型 函数名称(数据类型 参数1,数据类型,参数2,...)...

    举个最常见的例子 void main(){}

    返回值类型void(空的)参数名称main,参数列表为空

    自定义函数使用的规范就是先在开头使用函数原型 返回值类型 函数名(参数列表);需要注意的是可以不使用参数列表中的参数名

    比如

    #include <stdio.h>
    int pieAdd(int);
    void main(){
      int i,n;

      printf("请输入数字:\n");

      scanf("%d",&n);
      i=pieAdd(n);
      printf("结果是%d",i);

    }

    int pieAdd(int n){
      int i,sum=0;
      for(i=1;i<=n;i++){
      sum+=i;
    }
      return sum;
    }

    这个函数pieAdd(int n)求的是1+2+...+n之间的和,使用之前现在开头加上int pieAdd(int),然后在main函数之中调用,这样以后有这种求和的情况,可以直接调用这个函数,而不是麻烦的再去写循环,有这个思路在就解决了很多不必要的重复代码

    写一个函数void rose(int n),判断某一个四位数是不是玫瑰花数(所谓玫瑰花数即该四位数各位数字的四次方和恰好等于该数本身。比如:1634=1^4+6^4+3^4+4^4

    void rose(int n);//判断N是否为玫瑰花数

    void main()

    {

       rose(1634);//函数调用

    }

    void rose(int n){

    int ge,shi,bai,qian,sum;

    //获取个位  //1234===>1234%10==>4

    ge=n%10;

    //获取十位 //1234==>1234/10==>123%10==>3

       shi=n/10%10;

    //获取百位 //1234==>1234/10==>123/10==>12%10==>2

    bai=n/10/10%10;

    //获取千位 //1234/10==>123/10==>12/10==>1

        qian=n/1000;

        sum=pow(ge,4)+pow(shi,4)+pow(bai,4)+pow(qian,4);

        if(sum==n){

            printf("%d是一个玫瑰花数\n",n);

        }else{

            printf("%d不是一个玫瑰花数\n",n);  

        }

    }

    函数还有一种经典用法,递归调用

    函数的递归调用:函数自身调用自身。

    使用递归实现计算N的阶乘

    #include <stdio.h>

    int factorinal(int a);//函数递归调用实现计算阶乘

    void main()

    {

      int sum = factorinal(5);

      printf("5的阶乘为%d",sum);

    }

    //计算a的阶乘

    int factorinal(int a)

    {

    if(a==1){

      return 1;

    }else{

      return a*factorinal(a-1);

    }

    }

    还有最有名的菲波那切数列: 1  1  2  3   5   8  13   21.... 

    公式:f(n)=f(n-1)+f(n-2); n>2

    下面关于递归表达菲波那切数列最经典的例子

    不死神兔:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月,后每个月又生一对兔子,假如兔子都不死,1年后总共有多少对兔子?

    #include <stdio.h>

    int fibonacii(int n);//斐波那契数列

    void main()

    {

    int num = fibonacii(12);

    printf("1年后共有%d对兔子",num);

    }

    int fibonacii(int n){

    if(n==1||n==2){

    return 1;

    }else{

    return fibonacii(n-1)+fibonacii(n-2);

    }

    }

  • 相关阅读:
    HTMLElement.dataset
    toLocaleString
    export,import ,export default是什么
    css鼠标禁用
    npm ERR! cb() never called! npm ERR! This is an error with npm itself.错误解决办法
    vue3的新特性
    el-dialog开启拖拽功能
    yarn config get registry
    JS中的函数防抖
    注入攻击的解决思路
  • 原文地址:https://www.cnblogs.com/jiawenxu/p/6606676.html
Copyright © 2011-2022 走看看