news 2026/5/1 7:49:44

三、函数(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/5/1 6:45:11

告别手动更新:阿里云DDNS自动化方案对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请比较分析五种不同的阿里云DDNS自动化实现方案&#xff0c;包括&#xff1a;1.原生Shell脚本方案&#xff1b;2.Python脚本方案&#xff1b;3.使用DDNS客户端工具&#xff1b;4.Do…

作者头像 李华
网站建设 2026/4/18 9:12:14

Visual C++运行库在游戏开发中的实际应用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个游戏安装包检测工具&#xff0c;能够分析游戏安装包中是否包含必要的Visual C运行库&#xff0c;并提供自动打包运行库的功能。工具应支持检测常见的游戏引擎&#xff08;如…

作者头像 李华
网站建设 2026/4/30 10:28:37

5分钟用链式前向星构建图算法原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请快速实现一个基于链式前向星的图算法验证平台。要求&#xff1a;1. 支持快速导入图数据(边列表)&#xff1b;2. 预置DFS、BFS、Dijkstra等算法&#xff1b;3. 可视化算法执行过程…

作者头像 李华
网站建设 2026/4/23 11:53:21

27、PHP 代码优化与 PDF 生成扩展使用指南

PHP 代码优化与 PDF 生成扩展使用指南 在 PHP 开发过程中,代码效率和资源管理是至关重要的。同时,利用 PHP 扩展可以为项目增添更多强大的功能。下面将详细介绍 PHP 代码优化的方法以及如何使用 PDFLib 扩展来生成 PDF 文件。 代码优化技巧 if..elseif 语句和 switch 语句…

作者头像 李华
网站建设 2026/5/1 0:50:20

28、PHP 实现 PDF 简历生成与图像操作

PHP 实现 PDF 简历生成与图像操作 1. PDF 简历生成 我们可以使用 PHP 结合 MySQL 数据库来生成简单的 PDF 简历。以下是具体的代码示例: <?php // Specify string constants and positioning variables. define("CASE_CATEGORY", "Category"); de…

作者头像 李华