目录
1.函数是什么:
在维基百科中,对函数的定义是子程序。子程序是一个大型程序中的某部分代码,由一个或多个语句块组成,他们负责完成某项特定的任务,而且相较于其他代码,具备相对的独立性。
2.c语言中函数的分类:
2.1库函数
顾名思义,可理解为库里面的函数,这些函数都频繁被使用,为提高编程效率,,将一些常用的函数封装成库,后面直接使用。注意:使用库函数时必须包含#include对应的头文件。
2.2自定义函数:
顾名思义,由用户自己定义的函数,与库函数相同,有函数名,返回值类型和函数参数,不同之处在于由用户自己设计自定义函数的存在给程序员很大的发挥空间
函数的组成
int max(int a, int b)
{
return(a > b ? a : b);
}
返回值的类型int 函数名max 参数a参数b
3.函数的参数:
3.1实参
真实传给函数的参数叫实参,实参可以为(常量,变量,表达式,函数)。函数调用时,实参必须有确定的值传给形参。
3.2形参
形式参数是指函数名括号中的变量,只在函数调用的过程中有效,调用完成后即被销毁,形参的名字可与实参相同也可不同,函数的形参和实参占用不同的内存块,对形参的修改不会影响实参。
4.函数的调用:
4.1传值调用
将实参的的值传给形参,对形参的修改不会影响实参。如下:
void swap(int p1, int p2)
{
int tmp = 0;
tmp = p1;
p1 = p2;
p2 = tmp;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
printf("交换前,a = %d b = %d\n", a, b);
swap(a, b);
printf("交换后,a = %d b = %d\n", a, b);
return 0;
}
输入:2 3
输出:交换前,a = 2 b = 3
交换后,a = 2 b = 3
交换前后a,b的值并未交换。
4.2传址调用
将函数外部创建的变量的内存地址传给形参,让函数于函数外边的变量真正建立起联系,可通过函数内部操作函数外边的变量。
void swap(int* p1 , int* p2)
{
int tmp = 0;
tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
printf("交换前,a = %d b = %d\n", a, b);
swap(&a, &b);
printf("交换后,a = %d b = %d\n", a, b);
return 0;
}
输入:2 3
输出:交换前,a = 2 b = 3
交换后,a = 3 b = 2
传址调用中,将a,b的地址传给形参,形参用p1p1两个指针存储了a,b的地址,用操作符修改了其中的内容,实现了a,b值得交换。
5.函数的递归:
程序调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中应用广泛,一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可描述解题过程中所需要的多次计算,大大的减少了程序的代码量。核心(大事化小)
题目:接受一个整形值(无符号),按照顺序打印它们的每一位。例如 :输入:1234
输出:1 2 3 4
#include<stdio.h>
void print(int n)
{
if(n > 9)
{
print(n / 10);
}
printf("%d ",n % 10);
}
int main()
{
int n;
scanf("%d", &n);
print(n);
}
函数递归两个必要的条件:
1.存在限制条件,当满足这个限制条件的时候,递归不再继续。
2.每次递归调用之后越来越接近这个限制条件。