在编程的世界里,C语言以其高效、灵活和强大的功能而闻名。对于初学者来说,掌握C语言不仅仅是学习一门编程语言,更是锻炼逻辑思维和解决问题的能力。本文将带领大家通过50个经典编程实例,深入解析C语言的应用,帮助大家更好地理解和掌握这门语言。
1. 计算阶乘
实例描述:编写一个C语言程序,计算一个给定整数的阶乘。
#include <stdio.h>
long long factorial(int n) {
if (n == 0) return 1;
return n * factorial(n - 1);
}
int main() {
int num;
printf("Enter a number: ");
scanf("%d", &num);
printf("Factorial of %d is %lld\n", num, factorial(num));
return 0;
}
2. 求最大公约数
实例描述:编写一个C语言程序,计算两个整数的最大公约数。
#include <stdio.h>
int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
int main() {
int num1, num2;
printf("Enter two numbers: ");
scanf("%d %d", &num1, &num2);
printf("GCD of %d and %d is %d\n", num1, num2, gcd(num1, num2));
return 0;
}
3. 字符串反转
实例描述:编写一个C语言程序,实现字符串的反转。
#include <stdio.h>
#include <string.h>
void reverseString(char str[]) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
char temp = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = temp;
}
}
int main() {
char str[100];
printf("Enter a string: ");
scanf("%s", str);
reverseString(str);
printf("Reversed string: %s\n", str);
return 0;
}
4. 冒泡排序
实例描述:编写一个C语言程序,使用冒泡排序算法对数组进行排序。
#include <stdio.h>
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;
}
}
}
}
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;
}
5. 二分查找
实例描述:编写一个C语言程序,使用二分查找算法在有序数组中查找一个元素。
#include <stdio.h>
int binarySearch(int arr[], int l, int r, int x) {
while (l <= r) {
int m = l + (r - l) / 2;
if (arr[m] == x) return m;
if (arr[m] < x) l = m + 1;
else r = m - 1;
}
return -1;
}
int main() {
int arr[] = {2, 3, 4, 10, 40};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 10;
int result = binarySearch(arr, 0, n - 1, x);
if (result == -1)
printf("Element is not present in array");
else
printf("Element is present at index %d", result);
return 0;
}
6. 斐波那契数列
实例描述:编写一个C语言程序,打印斐波那契数列的前N个数。
#include <stdio.h>
void printFibonacci(int n) {
int a = 0, b = 1, c;
if (n < 1) return;
for (int i = 1; i <= n; i++) {
printf("%d ", a);
c = a + b;
a = b;
b = c;
}
printf("\n");
}
int main() {
int n;
printf("Enter the number of terms: ");
scanf("%d", &n);
printFibonacci(n);
return 0;
}
7. 水仙花数
实例描述:编写一个C语言程序,找出所有的水仙花数。
#include <stdio.h>
int isNarcissistic(int num) {
int originalNum, remainder, result = 0;
originalNum = num;
while (originalNum != 0) {
remainder = originalNum % 10;
result += remainder * remainder * remainder;
originalNum /= 10;
}
return result == num;
}
int main() {
int num;
printf("Enter a number: ");
scanf("%d", &num);
if (isNarcissistic(num))
printf("%d is a Narcissistic number.\n", num);
else
printf("%d is not a Narcissistic number.\n", num);
return 0;
}
8. 阶乘分解
实例描述:编写一个C语言程序,将一个正整数分解为质因数的乘积。
#include <stdio.h>
void factorialize(int n) {
if (n <= 1) return;
factorialize(n / 2);
printf("%d ", n);
}
int main() {
int num;
printf("Enter a number: ");
scanf("%d", &num);
printf("Factorial decomposition of %d: ", num);
factorialize(num);
printf("\n");
return 0;
}
9. 合并两个有序数组
实例描述:编写一个C语言程序,合并两个有序数组。
#include <stdio.h>
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]) {
printf("%d ", arr1[i]);
i++;
} else {
printf("%d ", arr2[j]);
j++;
}
}
while (i < n1) {
printf("%d ", arr1[i]);
i++;
}
while (j < n2) {
printf("%d ", arr2[j]);
j++;
}
}
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]);
printf("Merged array: ");
mergeArrays(arr1, n1, arr2, n2);
printf("\n");
return 0;
}
10. 汉诺塔问题
实例描述:编写一个C语言程序,解决汉诺塔问题。
#include <stdio.h>
void hanoi(int n, char from_rod, char to_rod, char aux_rod) {
if (n == 1) {
printf("Move disk 1 from rod %c to rod %c\n", from_rod, to_rod);
return;
}
hanoi(n - 1, from_rod, aux_rod, to_rod);
printf("Move disk %d from rod %c to rod %c\n", n, from_rod, to_rod);
hanoi(n - 1, aux_rod, to_rod, from_rod);
}
int main() {
int n = 3;
printf("The sequence of moves involved in the Tower of Hanoi are :\n");
hanoi(n, 'A', 'C', 'B');
return 0;
}
11. 检查素数
实例描述:编写一个C语言程序,检查一个数是否为素数。
#include <stdio.h>
#include <stdbool.h>
bool isPrime(int num) {
if (num <= 1) return false;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) return false;
}
return true;
}
int main() {
int num;
printf("Enter a number: ");
scanf("%d", &num);
if (isPrime(num))
printf("%d is a prime number.\n", num);
else
printf("%d is not a prime number.\n", num);
return 0;
}
12. 寻找最小元素
实例描述:编写一个C语言程序,找出数组中的最小元素。
#include <stdio.h>
int findMin(int arr[], int n) {
int min = arr[0];
for (int i = 1; i < n; i++)
if (arr[i] < min)
min = arr[i];
return min;
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
printf("The minimum element in the array is %d\n", findMin(arr, n));
return 0;
}
13. 累加和
实例描述:编写一个C语言程序,计算数组中所有元素的和。
#include <stdio.h>
int sumArray(int arr[], int n) {
int sum = 0;
for (int i = 0; i < n; i++)
sum += arr[i];
return sum;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Sum of array elements: %d\n", sumArray(arr, n));
return 0;
}
14. 最大子数组和
实例描述:编写一个C语言程序,找出数组中最大子数组的和。
#include <stdio.h>
int maxSubArraySum(int arr[], int n) {
int max_so_far = arr[0], max_ending_here = arr[0];
for (int i = 1; i < n; i++) {
max_ending_here = (arr[i] > max_ending_here + arr[i]) ? arr[i] : max_ending_here + arr[i];
max_so_far = (max_so_far > max_ending_here) ? max_so_far : max_ending_here;
}
return max_so_far;
}
int main() {
int arr[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Maximum subarray sum is %d\n", maxSubArraySum(arr, n));
return 0;
}
15. 寻找重复元素
实例描述:编写一个C语言程序,找出数组中的重复元素。
#include <stdio.h>
void findDuplicates(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (arr[i] == arr[j])
printf("%d ", arr[i]);
}
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 2, 4};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Duplicate elements in the array are: ");
findDuplicates(arr, n);
printf("\n");
return 0;
}
16. 字符串匹配
实例描述:编写一个C语言程序,实现字符串匹配算法。
#include <stdio.h>
#include <string.h>
void stringMatch(char str1[], char str2[]) {
int m = strlen(str1);
int n = strlen(str2);
for (int i = 0; i <= n - m; i++) {
int j;
for (j = 0; j < m; j++)
if (str1[j] != str2[i + j])
break;
if (j == m)
printf("Pattern found at index %d\n", i);
}
}
int main() {
char str1[] = "ABABDABACDABABCABAB";
char str2[] = "ABABCABAB";
printf("String matching results:\n");
stringMatch(str1, str2);
return 0;
}
17. 逆波兰表达式求值
实例描述:编写一个C语言程序,计算逆波兰表达式的值。
#include <stdio.h>
#include <stdlib.h>
int precedence(char op) {
if (op == '+' || op == '-') return 1;
if (op == '*' || op == '/') return 2;
return 0;
}
int applyOp(int a, int b, char op) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
}
}
int evaluateRPN(char* exp) {
int stack[100];
int top = -1;
int i = 0;
while (exp[i] != '\0') {
if (exp[i] >= '0' && exp[i] <= '9') {
int val = 0;
while (exp[i] >= '0' && exp[i] <= '9')
val = (val * 10) + (exp[i++] - '0');
if (top >= 0) {
stack[top] = applyOp(stack[top], val, exp[i - 1]);
top--;
} else {
stack[++top] = val;
}
} else {
int val = applyOp(stack[top - 1], stack[top], exp[i]);
top--;
stack[++top] = val;
}
i++;
}
return stack[top];
}
int main() {
char exp[] = "3 4 + 5 * 2 / 1 - 5 +";
printf("Result: %d\n", evaluateRPN(exp));
return 0;
}
18. 检查括号匹配
实例描述:编写一个C语言程序,检查字符串中的括号是否匹配。
#include <stdio.h>
#include <stdbool.h>
bool areBracketsBalanced(char exp[]) {
int n = strlen(exp);
bool stack[n];
int top = -1;
for (int i = 0; i < n; i++) {
if (exp[i] == '(' || exp[i] == '{' || exp[i] == '[') {
stack[++top] = exp[i];
} else {
if (top == -1) return false;
char popChar = stack[top--];
if ((popChar == '(' && exp[i] != ')') ||
(popChar == '{' && exp[i] != '}') ||
(popChar == '[' && exp[i] != ']'))
return false;
}
}
return (top == -1);
}
int main() {
char exp[] = "{[()]}";
if (areBracketsBalanced(exp))
printf("Balanced\n");
else
printf("Not Balanced\n");
return 0;
}
19. 求矩阵的转置
实例描述:编写一个C语言程序,计算矩阵的转置。
#include <stdio.h>
void transposeMatrix(int mat[3][3]) {
int transposed[3][3];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
transposed[j][i] = mat[i][j];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
printf("%d ", transposed[i][j]);
printf("\n");
}
}
int main() {
int mat[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
printf("Original matrix:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
printf("%d ", mat[i][j]);
printf("\n");
}
printf("Transposed matrix:\n");
transposeMatrix(mat);
return 0;
}
20. 字符串搜索
实例描述:编写一个C语言程序,实现KMP字符串搜索算法。
”`c
#include
void computeLPSArray(char* pat, int M, int* lps) {
int len = 0;
lps[0] = 0;
int i = 1;
while (i < M) {
if (pat[i] == pat[len]) {
len++;
lps[i] = len;
i++;
} else {
if (len != 0) {
len = lps[len - 1];
} else {
lps[i] = 0;
i++;
}
}
}
}
void KMPSearch(char* pat, char* txt) {
