函数是C语言程序的基本构建块,用于组织和重用代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 函数声明
int add(int a, int b);
void swap(int *a, int *b);
int factorial(int n);
void printArray(int arr[], int size);
int* createArray(int size);
void freeArray(int *arr);
int compare(const void *a, const void *b);
void sortArray(int arr[], int size);
int binarySearch(int arr[], int size, int target);
void printFibonacci(int n);
int gcd(int a, int b);
void printPrimes(int n);
void reverseString(char *str);
// 主函数
int main() {
// 基本函数调用示例
printf("基本函数调用示例:\n");
int result = add(5, 3);
printf("5 + 3 = %d\n", result);
// 参数传递示例
printf("\n参数传递示例:\n");
int x = 10, y = 20;
printf("交换前:x = %d, y = %d\n", x, y);
swap(&x, &y);
printf("交换后:x = %d, y = %d\n", x, y);
// 递归函数示例
printf("\n递归函数示例:\n");
int n = 5;
printf("%d的阶乘是:%d\n", n, factorial(n));
// 数组操作示例
printf("\n数组操作示例:\n");
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int size = sizeof(arr) / sizeof(arr[0]);
printf("原始数组:");
printArray(arr, size);
// 排序示例
printf("\n排序示例:\n");
sortArray(arr, size);
printf("排序后数组:");
printArray(arr, size);
// 二分查找示例
printf("\n二分查找示例:\n");
int target = 25;
int index = binarySearch(arr, size, target);
if (index != -1) {
printf("找到%d,位置在:%d\n", target, index);
} else {
printf("未找到%d\n", target);
}
// 动态内存分配示例
printf("\n动态内存分配示例:\n");
int *dynamicArr = createArray(5);
if (dynamicArr != NULL) {
for (int i = 0; i < 5; i++) {
dynamicArr[i] = i + 1;
}
printf("动态数组:");
printArray(dynamicArr, 5);
freeArray(dynamicArr);
}
// 斐波那契数列示例
printf("\n斐波那契数列示例:\n");
printFibonacci(10);
// 最大公约数示例
printf("\n最大公约数示例:\n");
int a = 48, b = 36;
printf("%d和%d的最大公约数是:%d\n", a, b, gcd(a, b));
// 素数示例
printf("\n素数示例:\n");
printPrimes(20);
// 字符串反转示例
printf("\n字符串反转示例:\n");
char str[] = "Hello, World!";
printf("原始字符串:%s\n", str);
reverseString(str);
printf("反转后字符串:%s\n", str);
return 0;
}
// 函数定义
int add(int a, int b) {
return a + b;
}
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
}
return n * factorial(n - 1);
}
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int* createArray(int size) {
return (int*)malloc(size * sizeof(int));
}
void freeArray(int *arr) {
free(arr);
}
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
void sortArray(int arr[], int size) {
qsort(arr, size, sizeof(int), compare);
}
int binarySearch(int arr[], int size, int target) {
int left = 0;
int right = size - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
}
if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
void printFibonacci(int n) {
int a = 0, b = 1;
printf("斐波那契数列前%d项:", n);
for (int i = 0; i < n; i++) {
printf("%d ", a);
int temp = a + b;
a = b;
b = temp;
}
printf("\n");
}
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
void printPrimes(int n) {
printf("小于%d的素数:", n);
for (int i = 2; i < n; i++) {
int isPrime = 1;
for (int j = 2; j * j <= i; j++) {
if (i % j == 0) {
isPrime = 0;
break;
}
}
if (isPrime) {
printf("%d ", i);
}
}
printf("\n");
}
void reverseString(char *str) {
int length = strlen(str);
for (int i = 0; i < length / 2; i++) {
char temp = str[i];
str[i] = str[length - i - 1];
str[length - i - 1] = temp;
}
}