C 语言函数:入门指南

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

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

c 复制代码
// 创建一个函数
void myFunction() {
  printf("我刚被执行了!");
}

int main() {
  myFunction(); // 调用函数
  return 0;
}

一个函数包括两个部分:

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

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

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

c 复制代码
// 函数声明
void myFunction();

// 主方法
int main() {
  myFunction(); // 调用函数
  return 0;
}

// 函数定义
void myFunction() {
  printf("我刚被执行了!");
}

另一个例子:

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

c 复制代码
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)

相反,最好写成这样:

c 复制代码
// 函数声明
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 语言中的递归

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

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

递归示例

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

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

c 复制代码
#include <math.h>

平方根

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

c 复制代码
printf("%f", sqrt(16));

四舍五入

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

c 复制代码
printf("%f", ceil(1.4));
printf("%f", floor(1.4));

幂次

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

c 复制代码
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,关注后即可获取最新文章推送

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

相关推荐
nuo5342021 分钟前
The 2024 ICPC Kunming Invitational Contest
c语言·数据结构·c++·算法
小王同学的C++6 分钟前
移动语义和拷贝语义有什么区别?
c++
霁月风16 分钟前
设计模式——装饰器模式
c++·设计模式·装饰器模式
叫我龙翔18 分钟前
【项目日记】仿mudou的高并发服务器 --- 实现缓冲区模块,通用类型Any模块,套接字模块
linux·运维·服务器·网络·c++
誓约酱1 小时前
(动画)Qt控件 QLCDNumer
开发语言·c++·git·qt·编辑器
@小博的博客1 小时前
C++初阶学习第十三弹——容器适配器和优先级队列的概念
开发语言·数据结构·c++·学习
离歌漠1 小时前
C#调用C++ DLL方法之P/Invoke
c++·c#·p/invoke
尘浮生1 小时前
Java项目实战II基于SpringBoot的共享单车管理系统开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·微信小程序·小程序
xiaowu0801 小时前
MFC线程-通过CWinThread派生类实现
c++·mfc
huaxiaorong1 小时前
如何将旧的Android手机改造为家用服务器
后端