合肥市庐阳区住房和城乡建设局网站,织梦 营销型网站,社区网站搭建,全球搜官网函数 1.什么是函数2.函数的分类1.库函数2.自定义函数 3.函数的参数1.实际参数#xff08;实参#xff09;2.形式参数#xff08;形参#xff09; 4.函数的声明1.同一个文件的函数声明2.多文件的函数声明 5.函数的调用6.函数的嵌套调用和链式访问1.嵌套调用2.链式访问 7.函数… 函数 1.什么是函数2.函数的分类1.库函数2.自定义函数 3.函数的参数1.实际参数实参2.形式参数形参 4.函数的声明1.同一个文件的函数声明2.多文件的函数声明 5.函数的调用6.函数的嵌套调用和链式访问1.嵌套调用2.链式访问 7.函数递归 1.什么是函数 函数也称为子程序在计算机科学中子程序是一个大型程序中的某部分代码 由一个或多个语句块组成。它负责完成某项特定任务而且相较于其他代码具备相对的独立性。 一般会有输入参数并有返回值提供对过程的封装和细节的隐藏。这些代码通常被集成为软 件库。 2.函数的分类
1.库函数 库函数就是C语言本身给我们已经定义好的函数作为程序员我们可以直接使用就像printf()和scanf()。 注意使用库函数必须包含头文件例如我们使用printf()与scanf()时要引用stdio.h头文件即我们通常写的#includestdio.h 常见的库函数有IO函数字符串操作函数字符操作函数内存操作函数时间/日期函数数学函数其他库函数后期用到的时候具体讲解。
2.自定义函数 自定义函数就是程序员自己定义用于实现特定功能的函数这给程序员一个很大的发挥空间。 格式
return_type function_name( parameter list )
{body of the function
}返回类型一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值在这种情况下return_type 是关键字 void。函数名称这是函数的实际名称。函数名和参数列表一起构成了函数签名。参数参数就像是占位符。当函数被调用时您向参数传递一个值这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的也就是说函数可能不包含参数。函数主体函数主体包含一组定义函数执行任务的语句。
根据有无返回值可将函数分为有返回值函数无返回值函数 有返回值的函数就返回一个值而无返回值的函数就执行某些操作 根据有无参数可将函数分为有参函数无参函数
例如无参有返回值的函数 有参有返回值的函数
3.函数的参数
1.实际参数实参 真实传给函数的参数叫实参。 实参可以是常量、变量、表达式、函数等。 2.形式参数形参 形式参数是指函数名后括号中的变量因为形式参数只有在函数被调用的过程中才实例化分配内存单元所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。 4.函数的声明
1.同一个文件的函数声明 一般如果把自定义函数写在了主函数后一般要进行声明。函数声明会告诉编译器函数名称及如何调用函数 格式
return_type function_name( parameter list );上面的add函数声明为 写在主函数main()的上面。
int add(int a,int b);正确示例
2.多文件的函数声明 我们在设计多文件程序的时候一般在以.h为结尾的头文件内放置函数的声明在.c源文件内放置函数的定义。 math.h的内容 放置函数的声明 #ifndef __MATH_H__
#define __MATH_H__ int max(int x, int y); int min(int x, int y);
#endif math.c的内容 放置函数的实现 #include math.h
int max(int x, int y) { return x y ? x : y;}
int min(int x, int y) { return x y ? x : y;
} 主函数为 #includestdio.h
#includemath.c
int main() { int a 10; int b 20; printf(max%d\n, max(a, b)); printf(min%d\n, min(a, b));
} 5.函数的调用 创建 C 函数时会定义函数做什么然后通过调用函数来完成已定义的任务。 当程序调用函数时程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务当函数的返回语句被执行时或到达函数的结束括号时会把程序控制权交还给主程序。 调用函数时传递所需参数如果函数返回一个值则可以存储返回值。例如 6.函数的嵌套调用和链式访问
1.嵌套调用 特别注意C语言中函数可以嵌套调用但是不能嵌套定义
2.链式访问 通俗来讲链式访问就是把一个函数的返回值作为另外一个函数的参数。 貌似与嵌套调用挺像的但两者是存在区别的嵌套调用是在函数中调用函数而链式访问则是将一个函数的返回值作为另一个函数的参数。 #include stdio.h
int main()
{printf(%d, printf(%d, printf(%d, 43)));//结果是啥//注printf函数的返回值是打印在屏幕上字符的个数return 0;
}打印结果是什么呢最后的打印结果是4321为什么呢此处给大家普及一个知识点printf()函数的返回值是正确输出在屏幕上的字符数例如输出在屏幕上的数字是43此时函数的返回值就是2如果打印在屏幕上的数字是2的话返回值就是1那么此处输出的结果也就不难理解了。
另外一个给大家补充的点是在上面这个函数中究竟是如何进行执行的呢首先执行的是最外层的printf()函数而最外层函数的返回值依赖于次外层函数的返回值而次外层函数的返回值又依赖于内层函数的返回值就是层层向内调用然后层层返回。printf(“%d”,43)的返回值是2而printf(“%d”,2)的返回值是1所以最终输出在屏幕上的就是4321因为最内层函数先执行进行输出的所以也可以理解成是由内向外进行执行的但调用的顺序却是由外向内的。
7.函数递归 程序调用自身的编程技巧称为递归 recursion。 递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的 一种方法它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解 递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算大大地减少了程序的代码量。 递归的条件 1存在限制条件当满足这个限制条件的时候递归便不再继续。 2每次递归调用之后越来越接近这个限制条件。
int factorial(int n)
{if (n 1)return 1;elsereturn n * factorial(n - 1);
}