在编程的世界里,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 #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) {