函数
2024-12-07
Update history
Date | Version | Author | Update content |
---|---|---|---|
2024-12-07 | 1.0.0 | 老怪鸽 | 更新了基本文档 |
函数的定义与调用
在C语言中,函数是执行特定任务的代码块。
以下是函数定义的格式:
返回类型 函数名(参数类型 参数名) {
// 函数体
// 执行的操作
}
例如,一个计算两个整数和的函数:
int add(int a, int b) {
return a + b;
}
调用函数
函数定义后,可以在代码中的任何位置调用它:
int result = add(5, 3); // 调用add函数,并将返回值赋给result变量
函数参数与返回值
参数
函数参数是传递给函数的值,用于函数内部的计算或操作。
- 形参:函数定义中的参数称为形参。
- 实参:函数调用时传递的参数称为实参。
返回值
函数执行完成后,可以通过return语句返回一个值给调用者。
int multiply(int a, int b) {
return a * b; // 返回a和b的乘积
}
作用域与生命周期
作用域
变量的作用域是指变量可以被访问和使用的代码区域。
- 局部变量:在函数内部定义的变量,其作用域仅限于该函数。
- 全局变量:在所有函数外部定义的变量,其作用域为整个程序。
生命周期
变量的生命周期是指变量从创建到销毁的时间段。
- 局部变量:在函数调用时创建,函数返回时销毁。
- 全局变量:在程序开始时创建,程序结束时销毁。
递归函数
递归函数是调用自身的函数。以下是一个计算阶乘的递归函数示例:
unsigned long long factorial(unsigned int n) {
if (n <= 1) {
return 1; // 递归的基本情况
} else {
return n * factorial(n - 1); // 递归调用
}
}
库函数简介
C语言标准库提供了一系列预定义的函数,用于执行常见任务。
数学库函数
#include <math.h>
double sqrt(double x); // 计算平方根
double pow(double x, double y); // 计算x的y次幂
输入输出库函数
#include <stdio.h>
int printf(const char *format, ...); // 格式化输出到标准输出
int scanf(const char *format, ...); // 格式化输入
字符串处理库函数
#include <string.h>
size_t strlen(const char *s); // 计算字符串长度
char *strcpy(char *dest, const char *src); // 复制字符串
作业
编写一个C语言程序,实现以下功能:
- 定义一个函数calculateAverage,该函数接收一个整型数组和数组的大小,计算并返回数组元素的平均值(作为浮点数)。
- 定义一个递归函数printArray,该函数接收一个整型数组、数组的大小和当前索引,从当前索引开始打印数组中的所有元素。
- 在main函数中,创建一个包含至少10个整数的数组,并使用calculateAverage函数计算其平均值。
- 使用printArray函数打印数组中的所有元素。
- 使用C标准库函数对数组进行排序(升序),并再次使用printArray函数打印排序后的数组。
答案代码
#include <stdio.h>
// 函数声明
float calculateAverage(int arr[], int size);
void printArray(int arr[], int size, int index);
void sortArray(int arr[], int size);
int main() {
int numbers[10] = {34, 78, 12, 9, 87, 66, 88, 99, 56, 45};
int size = sizeof(numbers) / sizeof(numbers[0]);
// 计算平均值
float average = calculateAverage(numbers, size);
printf("数组元素的平均值是:%.2f\n", average);
// 打印数组
printf("原始数组:\n");
printArray(numbers, size, 0);
// 排序数组
sortArray(numbers, size);
// 打印排序后的数组
printf("排序后的数组:\n");
printArray(numbers, size, 0);
return 0;
}
// 计算平均值的函数实现
float calculateAverage(int arr[], int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += arr[i];
}
return (float)sum / size;
}
// 递归打印数组的函数实现
void printArray(int arr[], int size, int index) {
if (index < size) {
printf("%d ", arr[index]);
printArray(arr, size, index + 1); // 递归调用
} else {
printf("\n");
}
}
// 数组排序的函数实现(使用简单的冒泡排序算法)
void sortArray(int arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换元素
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}