news 2026/10/24 1:31:55

三、函数(C语言)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
三、函数(C语言)

1、库函数

注意:使用时必须调用头文件。

学习库函数的软件:MSDN/zh.cppreference/en.cppreference

2、自定义函数

注意:与库函数一样,包含函数名,返回值类型与函数参数。

(1)求两数较大值

int get_max(int x, int y) { return x > y ? x : y; } //函数名前的数据类型为返回值类型,如果函数没有返回值,类型可以设置为void int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); //求较大值 int max = get_max(a, b); printf("%d", max); return 0; }

(2)交换两变量的数值

错误方法:传值调用

注意:x和y是形参,主函数中的a、b是实参。当实参传递给形参时,形参是实参的临时拷贝。
对形参的修改不会影响实参,因为形参与实参的存储位置不同,形参在函数调用结束后会自动销毁

void swap1(int x, int y) { int z = 0; z = x; x = y; y = z; } int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); printf("交换前:a=%d,b=%d", a, b); swap1(a, b); printf("交换后:a=%d,b=%d", a, b); return 0; }

正确方法:传址调用

int swap2(int* px, int* py) { int z = *px; *px = *py; *py = z; } int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); printf("交换前:a=%d,b=%d", a, b); swap2(&a, &b); printf("交换后:a=%d,b=%d", a, b); return 0; }

3、函数的嵌套调用和链式访问

(1)嵌套调用

函数和函数之间可以根据实际需求进行组合的,也就是互相调用。

//打印hehe void new_line() { printf("hehe\n"); } void three_line() { int i = 0; for (i = 0; i < 3; i++) { new_line(); } } int main() { three_line(); return 0; }

(2)链式访问

注意:将其他函数的返回值作为该函数的参数。因此只有有返回值的函数能够使用链式调用。

int main() { int len = strlen("abcdef"); printf("%d\n", len); //链式访问: printf("%d\n", strlen("abcdef")); return 0; }

典型链式访问:printf()函数的返回值为打印字符的个数。

printf("%d",printf("%d",printf("%d",43))); //输出4321

4、函数声明与定义

(1)函数声明

注意:告诉编译器有一个函数叫什么,参数是什么,返回类型是什么,但是具体存不存在,函数声明决定不了。函数声明一般在函数使用之前,要满足先声明后使用。函数声明一般放在头文件中。

int Add(int x, int y); int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); int sum = Add(a, b); printf("%d", sum); return 0; } int Add(int a, int b) { return a + b; }
//调用自定义的头文件 #include"add.h"

(2)函数定义

注意:函数的具体实现,交代函数的功能实现。如果只有函数声明,没有函数定义,则声明为假。

5、函数递归

注意:程序调用自身的编程技巧称为递归。主要思想——大事化小。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。优点是大大减少了程序的代码量。

void print(unsigned int x) { if (x > 9) { print(x / 10); //123 } printf("%d ", x % 10);//4 } int main() { unsigned int num = 0; scanf("%d",&num); print(num); return 0; }

递归存在的两个必要条件

A 存在限制条件,当满足这个限制条件的时候,递归便不再继续

B 每次递归调用之后越来越接近这个限制条件。

6、函数迭代

(1)n的阶乘

int fac(int x) { if (x <= 1) return 1; else return x * fac(x - 1); } int main() { int n = 0; scanf("%d", &n); int ret = fac(n); printf("ret=%d\n",ret); return 0; }

(2)斐波那契数列

提示:前两个数相加等于第三个数。

int Fib(int n) { if (n <= 2) return 1; else return Fib(n - 1) + Fib(n - 2); } int main() { int a = 0; scanf("%d", &a); int ret = Fib(a); printf("ret=%d\n", ret); return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/24 6:31:06

MySQL权限危机:AI解决方案vs传统方法效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个效率对比工具&#xff0c;展示处理MySQL --skip-grant-tables问题的两种方法&#xff1a;1) 传统手动修复流程&#xff1b;2) AI辅助快速修复。工具应记录并可视化每个步骤…

作者头像 李华
网站建设 2026/10/24 1:21:57

AI如何帮你快速选择嵌入式数据库?H2、HSQL和Derby对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个AI辅助决策工具&#xff0c;能够根据用户输入的项目需求&#xff08;如数据量大小、并发性能要求、内存占用限制等&#xff09;&#xff0c;自动比较H2、HSQL和Derby三种嵌…

作者头像 李华
网站建设 2026/10/23 15:25:50

企业IT实战:5步彻底解决0x80004005共享故障

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个企业级共享故障排查指南应用&#xff0c;包含&#xff1a;1. 分步骤诊断流程图 2. 域控制器与成员服务器的特殊配置说明 3. 组策略冲突检测模块 4. SMB协议版本兼容性测试工…

作者头像 李华
网站建设 2026/10/24 8:02:27

18、Apache配置与功能拓展:认证、SSL及WebDAV应用

Apache配置与功能拓展:认证、SSL及WebDAV应用 1. Apache与mod_auth_mysql认证 在使用Apache和mod_auth_mysql模块时,可以针对 apacheauth 数据库对用户进行认证。Apache会使用之前创建的 apache 账户登录数据库,同时, mod_auth_mysql 会在将给定密码与数据库中的值…

作者头像 李华
网站建设 2026/10/22 15:30:29

24、服务器性能优化全攻略

服务器性能优化全攻略 1. 服务器性能指标监测 1.1 负载平均值 理想情况下,服务器的负载平均值应略低于处理器数量,这样能预留一定处理能力应对突发高负载。短暂的负载激增是可以接受的,但 15 分钟负载不应出现激增。若 15 分钟负载激增,意味着服务器繁忙时过于繁忙,会形…

作者头像 李华
网站建设 2026/10/24 15:23:36

25、PHP 代码风格与效率优化

PHP 代码风格与效率优化 1. 常见代码缩进风格 在编写代码时,不同的缩进风格会影响代码的可读性和美观度。常见的几种代码缩进风格如下: - K&R 风格(“One True Brace” 风格) :由 C 语言设计者 Kernighan 和 Ritchie 所使用,示例代码如下: for($i=0; $i<1…

作者头像 李华