C 语言函数:入门指南

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

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

1// 创建一个函数 2void myFunction() { 3 printf("我刚被执行了!"); 4} 5 6int main() { 7 myFunction(); // 调用函数 8 return 0; 9}

一个函数包括两个部分:

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

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

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

1// 函数声明 2void myFunction(); 3 4// 主方法 5int main() { 6 myFunction(); // 调用函数 7 return 0; 8} 9 10// 函数定义 11void myFunction() { 12 printf("我刚被执行了!"); 13}

另一个例子:

如果我们使用上一章关于函数参数和返回值的示例:

1int myFunction(int x, int y) { 2 return x + y; 3} 4 5int main() { 6 int result = myFunction(5, 3); 7 printf("Result is = %d", result); 8 return 0; 9} 10 11// 输出 8 (5 + 3)

相反,最好写成这样:

1// 函数声明 2int myFunction(int, int); 3 4// 主方法 5int main() { 6 int result = myFunction(5, 3); // 调用函数 7 printf("Result is = %d", result); 8 return 0; 9} 10 11// 函数定义 12int myFunction(int x, int y) { 13 return x + y; 14}

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

C 语言中的递归

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

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

递归示例

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

1int sum(int k); 2 3int main() { 4 int result = sum(10); 5 printf("%d", result); 6 return 0; 7} 8 9int sum(int k) { 10 if (k > 0) { 11 return k + sum(k - 1); 12 } else { 13 return 0; 14 } 15}

示例解释

当调用 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 头文件:

1#include <math.h>

平方根

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

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

四舍五入

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

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

幂次

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

1printf("%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,关注后即可获取最新文章推送

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

点赞
收藏

评论区

加载中...

相关推荐

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

SQL利用函数或存储过程求男或女的总分平均分

!(https://oscimg.oschina.net/oscnet/633e11621f3e13e713cf063db00d72c8aa0.png)函数alterfunctionxb(@xingbievarchar(2))returnstableas

C语言

主函数程序的入口main函数不可没有,也不可出现多行main函数,main有且仅有一个。intmain()return0main前面的int指的是函数调用后返回一个整型值。int是整形。返回0,0是整数voidmain是过时的函数。库函数C语言本身提供给我们使用的函数。数据类型:char字符型

初探 Objective

作者:Cyandev,iOS和MacOS开发者,目前就职于字节跳动0x00前言异常处理是许多高级语言都具有的特性,它可以直接中断当前函数并将控制权转交给能够处理异常的函数。不同语言在异常处理的实现上各不相同,本文主要来分析一下ObjectiveC和C这两个语言。为什么要把ObjectiveC和

go 的匿名函数和闭包

匿名函数匿名函数是指不需要定义函数名的一种函数实现方式。在Go语言中,函数可以像普通变量一样被传递或使用,这与C语言的回调函数比较类似。不同的是,Go语言支持随时在代码里定义匿名函数。匿名函数由一个不带函数名的函数声明和函数体组成,如下所示:!(https://

PHP匿名函数及闭包

匿名函数在编程语言中出现的比较早,最早出现在Lisp语言中,随后很多的编程语言都开始有这个功能了,目前使用比较广泛的Javascript以及C,PHP直到5.3才开始真正支持匿名函数,C的新标准C0x也开始支持了。匿名函数是一类不需要指定标示符,而又可以被调用的函数或子例程,匿名函数可以方便的作为参数传递给其他函数,最常见应用是作为回调函数