函数在我看来就是代码的最小单位,每调用一个函数就相当于实现一个功能。
函数的分类主要有:1)标准库函数:由C语言标准委员会制定编写的 使用C语言的人都能调用的
2)第三方函数:别人写好封装后 可以使用的
3)系统函数:操作系统提供的一些功能接口、内存管理、文件读写,进程通信等
4)自定义函数:程序员自己根据需求编写的函数
定义函数的格式: 返回值类型 函数名(参数类型 参数列表);
返回值类型 和 参数类型如果都为空 则可直接填写void 也可以不写
函数声明: (如果函数的定义在调用之后,则一定要加上函数声明)
格式: 类型 函数名(参数类型 参数列表);
函数调用: 函数名(实参);
函数名在定义时最好能准确表达你要实现的功能,做到见名知意,方便以后与他人合作时,别人也可以熟练地调用。
函数的返回值会直接放在函数的调用位置,调用的返回值可以用两种处理方式。
1、立即使用
2、使用变量保存,以便后期使用
否则返回值就丢失。
函数的命名空间:
不同的函数之间命名空间是独立的,函数中的变量名是可以相同的。
函数的传参:
当给函数传参和接收函数的返回值时,C语言是用值传递的方式处理的。
函数与递归配合使用,有时会达到意想不到的效果。
课后作业:设计函数实现杨辉三角形。
#include <stdio.h> int triangle(int x,int y) // x为行 y为列 递归调用x,y坐标 { if (y==1||y==x) //每行第一个和最后一个元素都是1 { return 1; } return triangle(x-1,y-1)+triangle(x-1,y); //否则为上一行y-1和y元素之和 } void get_trangle(int len) //输入行数得到杨辉三角形 { for (int i = 1; i <= len; i++) { for (int j = 1; j <= i ; j++) { printf("%d ",triangle(i,j)); } printf("\n"); } } int main(int argc, char const *argv[]) { int len; scanf("%d",&len); get_trangle(len); return 0; }
在用递归的时候要注意递归要满足两个条件:
一是,要有使递归进行下去的变量,在这里就是x和y(行和列);
二是,要有终止递归的条件,在这里就是当x==y或者y==1的时候。