C 语言函数:入门指南

C 语言中的函数声明和定义

您可以通过以下方式创建并调用函数:

// 创建一个函数
void myFunction() {printf("我刚被执行了!");
}int main() {myFunction(); // 调用函数return 0;
}

一个函数包括两个部分:

  • 声明:函数名称、返回类型和参数(如果有)
  • 定义:函数体(要执行的代码)
void myFunction() { // 声明// 函数体 (定义)
}

为了优化代码,建议将函数的声明和定义分开。

您经常会看到 C 程序在 main() 之前有函数声明,在 main() 之后有函数定义。这将使代码更整齐,更易于阅读:

// 函数声明
void myFunction();// 主方法
int main() {myFunction(); // 调用函数return 0;
}// 函数定义
void myFunction() {printf("我刚被执行了!");
}

另一个例子:

int myFunction(int x, int y) {return x + y;
}int main() {int result = myFunction(5, 3);printf("Result is = %d", result);return 0;
}// 输出 8 (5 + 3)

相反,最好写成这样:

// 函数声明
int myFunction(int, int);// 主方法
int main() {int result = myFunction(5, 3); // 调用函数printf("Result is = %d", result);return 0;
}// 函数定义
int myFunction(int x, int y) {return x + y;
}

这是一种很好的实践,因为它可以使代码更易于阅读和理解。它还允许您在其他文件或模块中使用函数声明,而无需包含整个函数定义。

C 语言中的递归

递归是指使函数调用自身的技巧。这种技术提供了一种将复杂问题分解为更易于解决的简单问题的途径。

递归可能有点难懂。弄清楚它如何工作的最佳方法是进行试验。

递归示例

将两个数字相加很容易,但将一系列数字相加就比较复杂了。在以下示例中,递归用于通过将问题分解为将两个数字相加的简单任务来将一系列数字相加:

int sum(int k);int main() {int result = sum(10);printf("%d", result);return 0;
}int sum(int k) {if (k > 0) {return k + sum(k - 1);} else {return 0;}
}

示例解释

当调用 sum() 函数时,它将参数 k 添加到所有小于 k 的数字的和中并返回结果。当 k 变成 0 时,函数只返回 0。程序运行时,会遵循以下步骤:

  • 10 + sum(9)
  • 10 + (9 + sum(8))
  • 10 + (9 + (8 + sum(7)))
  • 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + sum(0)
  • 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0

由于函数在 k 为 0 时不调用自身,因此程序在此停止并返回结果。

开发人员应该非常小心地使用递归,因为它很容易写出永远不会终止的函数,或者会使用过多的内存或处理器资源的函数。然而,当正确编写时,递归可以成为一种非常高效和数学上优雅的编程方法。

C 语言中的数学函数

C 语言中还提供了一系列数学函数,允许您对数字进行数学运算。

要使用它们,您必须在程序中包含 math.h 头文件:

#include <math.h>

平方根

要找到某个数字的平方根,请使用 sqrt() 函数:

printf("%f", sqrt(16));

四舍五入

ceil() 函数将数字向上舍入到最接近的整数,floor() 函数将数字向下舍入到最接近的整数,并返回结果:

printf("%f", ceil(1.4));
printf("%f", floor(1.4));

幂次

pow() 函数返回 x 的 y 次方 (xy) 的值:

printf("%f", pow(4, 3));

其他数学函数

以下表格列出了 <math.h> 库中其他常用的数学函数:

函数描述
abs(x)返回 x 的绝对值
acos(x)返回 x 的反正弦
asin(x)返回 x 的反正切
atan(x)返回 x 的反正切
cbrt(x)返回 x 的立方根
cos(x)返回 x 的余弦
exp(x)返回 Ex 的值
sin(x)返回 x 的正弦 (x 以弧度为单位)
tan(x)返回某个角度的正切

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/11593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单页源码加密屋zip文件加密API源码

简介&#xff1a; 单页源码加密屋zip文件加密API源码 api源码里面的参数已改好&#xff0c;往服务器或主机一丢就行&#xff0c;出现不能加密了就是加密次数达到上限了&#xff0c;告诉我在到后台修改加密次数 点击下载

Spring事务-使用@Transactional在事务中立即提交部分数据库操作

目录 一、背景 二、需求 三、Spring事务的传播级别及失效场景 1.Spring事务的传播级别 2.失效场景及正确用法 一、背景 在项目中使用数据库锁表实现分布式锁&#xff0c;在方法A中调用方法B&#xff0c;方法B是一个多节点同步的方法&#xff0c;内部使用写锁表的逻辑实现分…

【文献阅读】企业ESG表现与创新——来自A股上市公司的证据

企业ESG表现与创新——来自A股上市公司的证据 1.引言 第一段——背景介绍 可持续发展 碳达峰、碳中和 ESG既是从微观层面解决全球性社会问题的必要&#xff0c;也是实现我国经济转型、促进高质量发展的有效手段。 2017.12证监会&#xff1a;重点排污企业的环境披露 2021.6证监…

【ARM Cortex-M 系列 2.1 -- Cortex-M7 Debug system registers】

请阅读【嵌入式开发学习必备专栏】 文章目录 Debug system registers中断控制状态寄存器&#xff08;ICSR&#xff09;Debug Halting Control and Status Register, DHCSR Debug 寄存器DCRSR与DCRDRCPU 寄存器读操作CPU 寄存器写操作CPU 寄存器选择CPU 寄存器读写示例 调试故障…

第十五篇:全面防护:构建不容侵犯的数据库安全策略与实战指南

全面防护&#xff1a;构建不容侵犯的数据库安全策略与实战指南 1. 引言&#xff1a;数据库安全的现代战略 1.1 简介&#xff1a;数据库安全在当今的数字化时代中的重要性 在数字化的浪潮中&#xff0c;数据已成为企业乃至国家的核心资产&#xff0c;其价值不亚于实体世界的黄…

第五百零三回

文章目录 1. 概念介绍2. 使用方法2.1 普通路由2.2 命名路由 3. 示例代码4. 内容总结 我们在上一章回中介绍了"使用get显示Dialog"相关的内容&#xff0c;本章回中将介绍使用get进行路由管理.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…

Kubernetes(k8s)的Network Policies解析

目录 1.关键特性2.示例配置3.最佳实践4.注意事项 Kubernetes&#xff08;k8s&#xff09;的Network Policies是一种资源对象&#xff0c;用于定义Pod之间的网络通信规则&#xff0c;以此来控制和隔离集群内部的网络流量。这为Kubernetes集群提供了更细粒度的网络安全控制能力。…

RAG应用中的路由模式

依据的用户查询意图在 RAG 应用程序使用“路由控制模式”可以帮助我们创建更强大的 RAG 应用程序。我们通常希望用户能够访问的数据可以来自各种来源,如报告、文档、图片、数据库和第三方系统。 对于基于业务的 RAG 应用程序,我们可能还希望用户能够与其它业务系统进行交互,…

spring注解使用(例子)

Dao层&#xff1a; 接口&#xff1a; public interface UserDao {public void save(); } 实现类&#xff1a; Component //声明为组件&#xff08;关键&#xff09; public class UserDaoIim implements UserDao {Overridepublic void save() {System.out.println("sa…

大模型微调方法汇总

微调方法 Freeze方法P-tuning方法 prefix-tuningPrompt TuningP-tuning v1P-tuning v2Lora方法 重要相关参数LoRA 的优势Qlora方法 相关参数微调经验 模型选择模型大小选择数据处理微调方案英文模型需要做词表扩充吗&#xff1f;如何避免灾难遗忘大模型的幻觉问题微调后的输出…

戴尔数据泄露影响近五千万用户,数据保护应该得到重视

据BleepingComputer报道&#xff0c;电脑制造商戴尔因网站漏洞遭黑客入侵&#xff0c;约4900万用户信息疑遭泄露。根据黑客发布的销售帖子&#xff0c;泄露数据最多的前五个国家分别是美国、中国、印度、澳大利亚和加拿大。 据BleepingComputer报道&#xff0c;电脑制造商戴尔因…

Nios实验使用串口输出“Hello Nios-II”字符到笔记本电脑

目录 实验过程 创建工程 修改程序 编译工程 运行项目 效果实现 总结 参考 实验过程 硬件设计见博主上篇博客 软件部分设计 下面使用 Nios II Software Build Tools for Eclipse 来完成当前项目的软件开发。 启动 Nios II SBT 按照下图所示点击 Nios II Software Build…

Swift—手写防抖、手写图片预加载与多张图片拼接

什么是防抖&#xff0c;为什么要防抖&#xff1f; 比如我们在文档在线编辑中修改文档内容&#xff0c;总不能打一个字就发送一次更新请求吧&#xff0c;用户疯狂点击一个按钮&#xff0c;总不能一直触发按钮的逻辑吧。防抖被用于避免频繁触发的事件。 Swift实现防抖代码&…

Cocos Creator 3.8.x报错:5302

在小游戏加载某个bundle后&#xff0c;如果报以下错误&#xff1a; 5302&#xff1a;Can not find class %s 说明bundle中某个预制件*.prefab引用了未加载的bundle的资源。 解决方法有两个&#xff1a; 1、将引用的资源移到预制件*.prefab相同的bundle下&#xff1b; 2、将…

编码器介绍与应用

一.概述 1.编码器 编码器&#xff0c;是一种用来测量机械旋转或位移的传感器。这种传感器能够测量机械部件在旋转或直线运动时的位移位置或速度等信息&#xff0c;并将其转换成一系列电信号。其可和电机组装到一起用&#xff0c;反馈电机方向、转换角度的&#xff0c;然后电机…

对语言模型的通用声学攻击

对语言模型的通用声学攻击主要涉及到通过生成对抗性扰动来干扰或欺骗语音识别系统。这种攻击可以通过多种方式实现&#xff0c;包括但不限于基于深度学习的方法和特定的攻击策略。 通用音频对抗性扰动生成器&#xff08;UAPG&#xff09;是一种有效的工具&#xff0c;它能够在任…

数据结构——循环队列(数组)

一、循环队列的定义 二、循环队列图示 三、循环队列使用规则 为解决队满和队空的判断条件相同。 我们 采用 损失一个单元不用的方法 即当循环队列元素的个数是MAXSIZE-1时&#xff0c;就认为队列已满&#xff08;front指向空的单元&#xff09; 这样循环队列的队满条件就变…

Spring框架深度解析:打造你的Java应用梦工厂

想要在Java企业级应用开发中大展身手&#xff1f;Spring框架的核心容器是你不可或缺的伙伴&#xff01; 文章目录 一. 引言1.1 介绍Spring框架的重要性1.2 阐述核心容器在Spring框架中的作用1.3 故事开端 二. 背景介绍2.1 描述Spring框架的发展历程2.2 概述Spring框架的主要特点…

汇昌联信:拼多多入驻条件是哪些?

在电商领域&#xff0c;拼多多以其独特的团购模式迅速崛起&#xff0c;吸引了众多商家的目光。想要在拼多多上开店&#xff0c;了解其入驻条件是必不可少的第一步。下面将详细解读拼多多的入驻条件&#xff0c;帮助有意加入的商家们做好准备。 一、企业资质要求 想要成功入驻拼…

Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器和Supervisor守护服务

在 CentOS 7 上部署 ASP.NET Core 应用程序并配置 Nginx 作为反向代理服务器以及 Supervisor 作为守护服务涉及几个步骤。以下是详细的步骤指南&#xff1a; 1. 安装 .NET Core SDK 首先&#xff0c;你需要在 CentOS 7 上安装 .NET Core SDK。你可以从 Microsoft 的官方文档中…