函数的基本

什么是函数?

函数的定义

维基百科中对函数的定义是:子程序
子程序是大型程序中某部分代码,由一个或者多个语句块组成,负责完成某个特定的任务,而且具有相对的独立性。一般具有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常呗集成为软件库。
数组与函数 - 图1

C语言中的函数

库函数

为什么会有库函数?
频繁大量被使用的功能,放入基础库中,这些被大量使用的功能函数被称为库函数!!
怎么学习库函数?
1.www.cplusplus.com/reference
2.软件MSDN

自定义函数

函数的组成: 返回类型+函数名+函数参数

  1. ret_type fun_name(para1, *)
  2. {
  3. statement;//语句项;函数体!
  4. }
  5. ret_type 返回类型
  6. fun_name 函数名
  7. para1 函数参数
  1. int get_max(int x ,int y)
  2. {
  3. int z = 0;
  4. if (x > y)
  5. z = x;
  6. else
  7. z = y;
  8. return z;//返回较大值
  9. }
  10. 或者
  11. int get_max(int x ,int y)
  12. {
  13. return (x>y)?(x):(y);
  14. }
  15. :是一个三目运算符
  16. 先判断‘ ?’前面的,若为真,执行‘?’后面语句
  17. 否则执行‘ :’后面语句!
  1. #include<stdio.h>
  2. //交换函数设置,传址调用
  3. void swap(int* pa,int* pb)
  4. {
  5. int z = 0;
  6. z = *pa;
  7. *pa = *pb;
  8. *pb = z;
  9. }
  10. int main()
  11. {
  12. int a = 10;
  13. int b = 20;
  14. printf("交换前:a=%d,b=%d\n", a, b);
  15. swap(&a, &b);
  16. printf("交换后:a=%d,b=%d\n", a, b);
  17. return 0;
  18. }

函数的调用

传值调用

函数的形参和实参分别占有不同的内存块,对形参的修改不会影响到实参

  1. void swap1 (int x , int y)
  2. {
  3. int z = 0;
  4. z = x ;
  5. x = y ;
  6. y = z ;
  7. }
  8. int main()
  9. {
  10. int a = 10;
  11. int b = 20;
  12. printf("交换前:a=%d,b=%d\n", a, b);
  13. swap1(a, b);//传值调用
  14. printf("交换后:a=%d,b=%d\n", a, b);
  15. return 0;
  16. }

传址调用

传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式
这种传参方式可以让函数和函数外边的变量建立真正的联系,也就是函数内部可以直接操作函数外部的变量。

void swap2 (int *pa , int *pb)
{
    int z = 0;
    z = *pa ;
   *pa = *pb ;
   *pb = z ; 
}
int main()
{
    int a = 10;
    int b = 20;
    printf("交换前:a=%d,b=%d\n", a, b);
    swap2(&a, &b);//传址调用
    printf("交换后:a=%d,b=%d\n", a, b);
    return 0;
}

相关练习

写一个函数可以判断一个数是不是素数

什么是素数?
大于1的自然数中,除了1和该数本身以外,无法被其他自然数整除。

#include<stdio.h>
#include<math.h>
int is_prime(int n)
{
    int j = 0;
    for (j = 2; j < = sqrt(n); j++)//sqrt (n) 表示给n开平方
    {
        if (n % j == 0)
            return 0;
    }
    return 1;
}

写一个函数判断一年是不是闰年

写一个函数,实现一个整型有序组的二分查找

写一个函数,每次调用一次这个函数,就会将num的值增加1