news 2026/8/28 16:52:46

三、函数(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/8/28 5:53:02

1小时验证:用快马快速原型M3U8创意工具

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个M3U8创意工具原型&#xff0c;功能包括&#xff1a;1. M3U8链接有效性检测 2. 视频预览功能 3. 自动生成下载报告 4. 分享功能 5. 基础数据分析。要求使用最简实现&#xf…

作者头像 李华
网站建设 2026/8/27 5:53:41

制造系统前端架构演进:从业务挑战到技术决策

制造系统前端架构演进&#xff1a;从业务挑战到技术决策 【免费下载链接】tmom 支持多厂区/多项目级的mom/mes系统&#xff0c;计划排程、工艺路线设计、在线低代码报表、大屏看板、移动端、AOT客户端...... 目标是尽可能打造一款通用的生产制造系统。前端基于最新的vue3、ts、…

作者头像 李华
网站建设 2026/8/28 17:06:18

29、PHP图像与Flash处理:从基础到应用

PHP图像与Flash处理:从基础到应用 在PHP开发中,图像和Flash处理是常见的需求。本文将详细介绍如何使用PHP进行图像的旋转、添加字幕、添加logo等操作,以及如何使用Ming扩展创建Shockwave Flash文件。 图像旋转 在PHP中,使用GD库可以方便地对图像进行旋转操作。以下是一个…

作者头像 李华
网站建设 2026/8/28 18:22:30

1小时搞定!用Spring IOC快速验证微服务架构原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 生成一个微服务原型的Spring IOC实现&#xff0c;包含&#xff1a;1. 用户服务&#xff1b;2. 订单服务&#xff1b;3. 商品服务。要求&#xff1a;1. 服务间通过FeignClient通信&a…

作者头像 李华
网站建设 2026/8/25 5:45:24

终极指南:免费获取杭州市完整GIS底图数据资源

终极指南&#xff1a;免费获取杭州市完整GIS底图数据资源 【免费下载链接】ArcGIS杭州市底图数据Shp资源介绍 本开源项目提供了一组详细的ArcGIS格式杭州市底图数据&#xff0c;涵盖市区轮廓、街道、国道、省道、高速、铁路、县道及河流等丰富图层信息。这些Shp格式的数据为杭州…

作者头像 李华
网站建设 2026/8/28 19:41:16

一个QT开发的简易版图片查看器

基于QT开发的ImageViewer轻量级图片查看器 前言: 学习QT的时候&#xff0c;简单实现了一个好玩的图片查看器,这个是基于QT开发的,无边框、可拖动、支持全屏以及本地目录加载。方便学习一些事件的简单处理. 一、环境要求 Qt 5.15c11windows上的vs2022 二、项目的学习点 Qt资…

作者头像 李华