谈谈函数

1. 函数

   C语言一门面向过程的语言,注重程序的执行过程,在程序中函数是主体
   函数本质就是一些语句的集合
   C程序中函数主要分为3类
      (1)主函数(main) 程序的入口
      (2)自定义函数
      (3)库函数 printf、scanf

1.1  函数的定义

  返回值 函数名(形式参数)
  {
     函数体;
  }
 

  函数的参数相当于函数的入口,函数的返回值相当于函数的出口,函数体就是函数的具体功能;

void表示不需要参数和 返回值,函数写完,记得要对函数进行声明,如果没有声明,编译器会默认声明返回值为int 的函数

  根据传入的两个数据,返回较大值
  int max(int num1,int num2)
  {
     if(num1 > num2)
     {
      return num1;
     }
     return num2;
     //return num1 > num2?num1:num2;
  }
  注意:
     (1)如果函数不需要参数,也不需要返回值,那么使用void表示
     (2)如果函数定义在主函数的后面,需要对函数进行声明,声明方法:把函数头拷贝过来,加个分号即可

     (3)定义的函数需要被主函数直接/间接 的调用才会实现具体的功能

 1.2函数的参数

  例子: 编程实现,编写一个函数,将传入的两个变量的值,进行交换;

  交换两个变量值的方法:

  int a = 3 ,b = 5;
  (1)int temp = a; a = b;b = temp;

  (2)  a = a^b;
              b = b^a;
              a = a^b;
   ( 3) a = a + b;b = a - b; a = a - b;
  

1.2.1形式参数 和 实际参数

   (1)形式参数:在函数的声明和定义的时候的参数,如果有多个形参时,使用逗号隔开。每个形参都必须指定数据类型
   (2)实际参数:在函数的调用时传递的参数

   注意:

      (1)在函数声明中,形参名是可以省略的;
    (2)实参名 和 形参名 可以相同也可以不同
    (3)C语言的潜规则:当自定义函数在声明的时候参数为空时,表示可以接受任意多个实参
     如:void fn();fn (num1,num2,num3,"hello");
    (4) 当函数的返回值类型 和return的数据类型不一致时,以函数的返回值类型为准
    double fn (){return 66;}

1.2.2值传递 和 址传递 的比较:

  (1)值传递表示将数据值传过去了,做了一个复制
  (2)址传递表示把数据的地址传递过去了,共用同一块内存;

 1.2.3数组作为参数时的处理方法:

  void fn (int arr [], int len);第一个参数为数组的首地址,第二个参数为数组的长度

1.3 库函数

     (1)rand 函数
      rand  随机 man 3 rand
        #include<stdlib.h>
        int rand(void);

        函数不需要参数,返回一个指定范围的伪随机数

 生成指定范围内的随机数
 
int res = rand()%n; 生成 0~ n-1之间的随机数

int res = rand()%n+1;生成1~ n-1之间的随机数

    (2)srand函数
        #include<stdlib.h>

        void srand(unsigned int seed)

      函数通过设置随机种子从而产生一个新的随机数,这个数由rand 函数返回               

 (3)time

     #include<time.h>

     time_t time(time_t *t)

     函数的作用返回1970-1-1 0:0:0 到现在的秒数,如果参数不为空,则返回值保存在t所指向的内存中,如果参数为NULL ,那么秒数由返回值返回
     time_t ->unsigned int
 生成随机数的方法步骤:
  (1)设置随机数的种子
  srand(time(0)); => int t = time(0);srand(t);


1.4常见的库函数以及头文件

  (1) C99 中封装了bool类型

  true false #include<stdbool.h> 

(2)sqrt 开平方的函数

  #include<math.h>  

编译的语句:gcc xxx.c -lm(-lm 表示链接到库函数)
 

 (3)exit 终止程序的函数

  #include<stdlib.h>
  void exit(int status);参数一般填0表示程序正常终止,-1表示非正常终止


4)exit 和 return 的区别

return -> 结束当前函数,return/return 0/return -1;
exit ->结束整个程序 exit(0)/exit(-1)   

(5)常见的头文件
stdio.h  —> 包含输入输出相关的函数
time.h  ->时间相关的函数
stdlib.h ->工具相关的函数,exit/srand
math.h ->数学函数
string.h -> 字符串处理相关函数
stdbool.h ->bool类型的头文件

头文件包含在:/usr/include 目录下
(6) 函数的设计应该遵循:"高内聚,低耦合"

在一个模块中,让每一个元素之间都尽可能的紧密相连,在一个 完整的系统中,模块与模块之间尽可能的独立

1.5.常量:

常量的定义和变量非常相似,只是使用const关键字修饰,表示这个变量的值不可改变
例子: const int num = 23;(推荐使用)
int const num = 66;
应用:
const 修改函数的形参的时候,表示这个参数的值在函数体内不可改变

1.6.递归:

   函数:
    f(3) = 5              x <= 0;
    = 2f(x - 1) + 3  x > 0;
   递归:如果一个函数调用自己本身,就说这个函数是递归的
   递归条件:
    (1)必须有退出条件
    (2)找到递归的规律


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值