案例一:计算阶乘
案例背景
阶乘是一个数学概念,用于表示一个正整数与其所有正整数乘积的结果。例如,5的阶乘(5!)等于5×4×3×2×1=120。
案例代码
#include <stdio.h>
// 函数声明
unsigned long long factorial(int n);
int main() {
int number;
printf("Enter a positive integer: ");
scanf("%d", &number);
printf("Factorial of %d is %llu\n", number, factorial(number));
return 0;
}
// 函数定义
unsigned long long factorial(int n) {
if (n == 0)
return 1;
else
return n * factorial(n - 1);
}
案例解析
这个案例展示了递归函数的使用。递归是一种编程技巧,允许函数在执行过程中调用自身。
案例二:判断素数
案例背景
素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。例如,2、3、5、7等都是素数。
案例代码
#include <stdio.h>
#include <stdbool.h>
// 函数声明
bool isPrime(int n);
int main() {
int number;
printf("Enter a positive integer: ");
scanf("%d", &number);
if (isPrime(number))
printf("%d is a prime number.\n", number);
else
printf("%d is not a prime number.\n", number);
return 0;
}
// 函数定义
bool isPrime(int n) {
if (n <= 1)
return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0)
return false;
}
return true;
}
案例解析
这个案例使用了循环结构来判断一个数是否为素数。循环是一种控制结构,用于重复执行一系列操作。
案例三:字符串反转
案例背景
字符串反转是将字符串中的字符顺序颠倒,例如,”hello”反转后为”olleh”。
案例代码
#include <stdio.h>
#include <string.h>
// 函数声明
void reverseString(char *str);
int main() {
char str[100];
printf("Enter a string: ");
scanf("%99s", str);
reverseString(str);
printf("Reversed string: %s\n", str);
return 0;
}
// 函数定义
void reverseString(char *str) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
char temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
}
案例解析
这个案例展示了字符串处理函数strlen和指针操作。指针是C语言中的一个重要概念,用于访问和操作内存地址。
案例四:冒泡排序
案例背景
冒泡排序是一种简单的排序算法,通过比较相邻的元素并交换它们的顺序来对数组进行排序。
案例代码
#include <stdio.h>
// 函数声明
void bubbleSort(int arr[], int n);
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
printf("Sorted array: \n");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
// 函数定义
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
案例解析
这个案例展示了冒泡排序算法的实现。冒泡排序是一种简单的排序算法,但效率较低,适用于小规模数据排序。
案例五:查找最大元素
案例背景
查找最大元素是数组处理中的一个基本问题,即从给定的数组中找到最大的元素。
案例代码
#include <stdio.h>
// 函数声明
int findMax(int arr[], int n);
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
int max = findMax(arr, n);
printf("Maximum element in the array is %d\n", max);
return 0;
}
// 函数定义
int findMax(int arr[], int n) {
int max = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max)
max = arr[i];
}
return max;
}
案例解析
这个案例展示了如何遍历数组并找到最大元素。遍历是数组处理中的一个基本操作,用于访问数组中的每个元素。
案例六:合并两个有序数组
案例背景
合并两个有序数组是将两个已排序的数组合并为一个有序数组的过程。
案例代码
#include <stdio.h>
// 函数声明
void mergeArrays(int arr1[], int n1, int arr2[], int n2);
int main() {
int arr1[] = {1, 3, 5, 7};
int arr2[] = {2, 4, 6, 8};
int n1 = sizeof(arr1) / sizeof(arr1[0]);
int n2 = sizeof(arr2) / sizeof(arr2[0]);
mergeArrays(arr1, n1, arr2, n2);
printf("Merged array: \n");
for (int i = 0; i < n1 + n2; i++)
printf("%d ", arr1[i]);
printf("\n");
return 0;
}
// 函数定义
void mergeArrays(int arr1[], int n1, int arr2[], int n2) {
int i = 0, j = 0, k = 0;
while (i < n1 && j < n2) {
if (arr1[i] < arr2[j]) {
arr1[k++] = arr1[i++];
} else {
arr1[k++] = arr2[j++];
}
}
while (i < n1) {
arr1[k++] = arr1[i++];
}
while (j < n2) {
arr1[k++] = arr2[j++];
}
}
案例解析
这个案例展示了如何合并两个有序数组。合并操作是数组处理中的一个常见任务,需要仔细处理元素的顺序。
案例七:计算平均值
案例背景
计算平均值是统计学中的一个基本概念,用于表示一组数据的中心趋势。
案例代码
#include <stdio.h>
// 函数声明
double calculateAverage(int arr[], int n);
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
double average = calculateAverage(arr, n);
printf("Average of the array is %f\n", average);
return 0;
}
// 函数定义
double calculateAverage(int arr[], int n) {
double sum = 0;
for (int i = 0; i < n; i++)
sum += arr[i];
return sum / n;
}
案例解析
这个案例展示了如何计算数组的平均值。平均值是统计学中的一个重要指标,可以用来描述数据的集中趋势。
案例八:计算最大公约数
案例背景
最大公约数是指两个或多个整数共有的约数中最大的一个数。例如,12和18的最大公约数是6。
案例代码
#include <stdio.h>
// 函数声明
int gcd(int a, int b);
int main() {
int num1, num2, result;
printf("Enter two positive integers: ");
scanf("%d %d", &num1, &num2);
result = gcd(num1, num2);
printf("GCD of %d and %d is %d\n", num1, num2, result);
return 0;
}
// 函数定义
int gcd(int a, int b) {
if (b == 0)
return a;
return gcd(b, a % b);
}
案例解析
这个案例展示了使用递归函数计算最大公约数。递归是一种编程技巧,允许函数在执行过程中调用自身。
案例九:计算最小公倍数
案例背景
最小公倍数是指两个或多个整数共有的倍数中最小的一个数。例如,12和18的最小公倍数是36。
案例代码
#include <stdio.h>
// 函数声明
int lcm(int a, int b);
int main() {
int num1, num2, result;
printf("Enter two positive integers: ");
scanf("%d %d", &num1, &num2);
result = lcm(num1, num2);
printf("LCM of %d and %d is %d\n", num1, num2, result);
return 0;
}
// 函数定义
int lcm(int a, int b) {
return (a * b) / gcd(a, b);
}
案例解析
这个案例展示了如何计算最小公倍数。最小公倍数是数学中的一个重要概念,可以用来描述整数之间的关系。
案例十:计算斐波那契数列
案例背景
斐波那契数列是一个著名的数列,其中的每个数都是前两个数的和。数列的前几项为1、1、2、3、5、8、13等。
案例代码
#include <stdio.h>
// 函数声明
void fibonacci(int n);
int main() {
int n;
printf("Enter the number of terms: ");
scanf("%d", &n);
printf("Fibonacci Series: \n");
fibonacci(n);
return 0;
}
// 函数定义
void fibonacci(int n) {
int first = 0, second = 1, next;
printf("%d %d ", first, second);
for (int i = 2; i < n; i++) {
next = first + second;
printf("%d ", next);
first = second;
second = next;
}
}
案例解析
这个案例展示了斐波那契数列的计算方法。斐波那契数列是数学中的一个著名问题,具有广泛的应用。
案例十一:计算逆序数
案例背景
逆序数是指将一个整数的数字顺序颠倒后得到的数。例如,123的逆序数是321。
案例代码
#include <stdio.h>
// 函数声明
int reverseNumber(int n);
int main() {
int n, result;
printf("Enter an integer: ");
scanf("%d", &n);
result = reverseNumber(n);
printf("Reversed number: %d\n", result);
return 0;
}
// 函数定义
int reverseNumber(int n) {
int reversed = 0;
while (n > 0) {
reversed = reversed * 10 + n % 10;
n /= 10;
}
return reversed;
}
案例解析
这个案例展示了如何计算一个整数的逆序数。逆序数是数学中的一个基本概念,可以用来描述整数的性质。
案例十二:计算阶乘
案例背景
阶乘是一个数学概念,用于表示一个正整数与其所有正整数乘积的结果。例如,5的阶乘(5!)等于5×4×3×2×1=120。
案例代码
#include <stdio.h>
// 函数声明
unsigned long long factorial(int n);
int main() {
int number;
printf("Enter a positive integer: ");
scanf("%d", &number);
printf("Factorial of %d is %llu\n", number, factorial(number));
return 0;
}
// 函数定义
unsigned long long factorial(int n) {
if (n == 0)
return 1;
else
return n * factorial(n - 1);
}
案例解析
这个案例展示了递归函数的使用。递归是一种编程技巧,允许函数在执行过程中调用自身。
案例十三:判断素数
案例背景
素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。例如,2、3、5、7等都是素数。
案例代码
#include <stdio.h>
#include <stdbool.h>
// 函数声明
bool isPrime(int n);
int main() {
int number;
printf("Enter a positive integer: ");
scanf("%d", &number);
if (isPrime(number))
printf("%d is a prime number.\n", number);
else
printf("%d is not a prime number.\n", number);
return 0;
}
// 函数定义
bool isPrime(int n) {
if (n <= 1)
return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0)
return false;
}
return true;
}
案例解析
这个案例使用了循环结构来判断一个数是否为素数。循环是一种控制结构,用于重复执行一系列操作。
案例十四:字符串反转
案例背景
字符串反转是将字符串中的字符顺序颠倒,例如,”hello”反转后为”olleh”。
案例代码
#include <stdio.h>
#include <string.h>
// 函数声明
void reverseString(char *str);
int main() {
char str[100];
printf("Enter a string: ");
scanf("%99s", str);
reverseString(str);
printf("Reversed string: %s\n", str);
return 0;
}
// 函数定义
void reverseString(char *str) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
char temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
}
案例解析
这个案例展示了字符串处理函数strlen和指针操作。指针是C语言中的一个重要概念,用于访问和操作内存地址。
案例十五:冒泡排序
案例背景
冒泡排序是一种简单的排序算法,通过比较相邻的元素并交换它们的顺序来对数组进行排序。
案例代码
#include <stdio.h>
// 函数声明
void bubbleSort(int arr[], int n);
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
printf("Sorted array: \n");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
// 函数定义
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
案例解析
这个案例展示了冒泡排序算法的实现。冒泡排序是一种简单的排序算法,但效率较低,适用于小规模数据排序。
案例十六:查找最大元素
案例背景
查找最大元素是数组处理中的一个基本问题,即从给定的数组中找到最大的元素。
案例代码
#include <stdio.h>
// 函数声明
int findMax(int arr[], int n);
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
int max = findMax(arr, n);
printf("Maximum element in the array is %d\n", max);
return 0;
}
// 函数定义
int findMax(int arr[], int n) {
int max = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max)
max = arr[i];
}
return max;
}
案例解析
这个案例展示了如何遍历数组并找到最大元素。遍历是数组处理中的一个基本操作,用于访问数组中的每个元素。
案例十七:合并两个有序数组
案例背景
合并两个有序数组是将两个已排序的数组合并为一个有序数组的过程。
案例代码
”`c
#include
// 函数声明 void mergeArrays(int arr1[], int n1, int arr2[], int n2);
int main() {
int arr1[] = {1, 3, 5, 7};
int arr2[] = {2, 4, 6, 8
