什么是函数?
函数就像是一个小机器,你给它一些材料(输入),它按照特定的方式加工后,给你一个成品(输出)。比如,f(x) = x + 1 就是一个简单的函数,输入1,输出2。
## 函数的基本结构
一个C语言函数由两部分组成:
```c
返回值类型 函数名(参数列表) // 函数头
{
// 函数体
return 结果; // 返回处理后的结果
}
```
1. 函数头
- **返回值类型**:函数处理后的结果是什么类型(int, float等)
- 如果不需要返回值,可以用`void`
- 如果不写返回值类型,默认是`int`
- **函数名**:给函数起个好名字,一看就知道它是干什么的
- **参数列表**:函数需要哪些材料来工作
2. 函数体
- 这里是函数具体工作的代码
- 最后用`return`把结果送出来
如何设计一个函数?
让我们用加法函数为例:
1. **想名字**:这个函数做什么?做加法 → 叫`add`
2. **需要什么材料**:两个整数 → `int a, int b`
3. **怎么处理**:a + b → `sum = a + b`
4. **返回什么**:sum → `return sum`
最后写出来就是:
```c
int add(int a, int b)
{
int sum = a + b;
return sum;
}
```
如何使用函数?
设计好函数后,这样使用它:
```c
int result = add(3, 5); // 结果是8
```
函数的放置位置
函数可以放在:
- main函数之前:直接能用
- main函数之后:需要在前面声明一下(把函数头复制过来加分号)
```c
// 声明
int add(int a, int b);
int main()
{
// 使用函数
}
// 定义
int add(int a, int b)
{
return a + b;
}
```
函数的好处
1. 避免重复写代码
2. 让程序更有条理
3. 主程序变得更简洁
练习时间
试着写这些函数练练手:
1. 找两个数中的最大值
2. 判断某年是否是闰年
3. 获取某个月的天数
4. 打印100以内的所有素数
递归:函数自己调用自己
递归就像俄罗斯套娃,大问题分解成小问题:
```c
// 计算1到n的和
int sum(int n)
{
if(n == 1) // 结束条件
return 1;
else
return sum(n-1) + n; // 自己调用自己
}
```
递归要注意:
1. 必须有结束条件
2. 问题要能越变越小
3. 效率不如循环高,但写起来简单
数组作为函数参数
传递整个数组时,通常这样写:
```c
// 打印整型数组
void printArray(int arr[], int length)
{
for(int i=0; i<length; i++)
printf("%d ", arr[i]);
}
// 使用
int nums[5] = {1,2,3,4,5};
printArray(nums, 5);
```
变量作用域
- **全局变量**:在所有函数外面定义,整个程序都能用
- **局部变量**:在函数或{}内定义,只在那个范围内有效
规则:
1. 先定义后使用
2. 同一个范围内不能重名
3. 不同范围内重名时,里面的会"挡住"外面的
static关键字
`static`可以让局部变量"活"得更久:
```c
void count()
{
static int num = 0; // 只会初始化一次
num++;
printf("%d", num);
}
// 第一次调用输出1
// 第二次输出2
// 第三次输出3
```
总结
函数是C语言的重要部分,它让代码:
- 更清晰
- 更易维护
- 更少重复
记住设计函数的步骤:想名字→要什么材料→怎么处理→返回什么。多练习写函数,编程能力会快速提升!