引言

北理工C语言乐学15题是针对C语言初学者设计的练习题,旨在帮助学生巩固C语言基础知识,提高编程技巧。本文将详细解析这15道题目,帮助读者轻松掌握编程技巧。

题目一:输出“Hello, World!”

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

解析:这是C语言最基础的程序,用于输出“Hello, World!”。

题目二:计算两个整数的和

#include <stdio.h>

int main() {
    int a, b, sum;
    scanf("%d %d", &a, &b);
    sum = a + b;
    printf("Sum: %d\n", sum);
    return 0;
}

解析:通过scanf函数读取两个整数,计算它们的和,并输出结果。

题目三:判断一个数是否为偶数

#include <stdio.h>

int main() {
    int num;
    scanf("%d", &num);
    if (num % 2 == 0) {
        printf("Even\n");
    } else {
        printf("Odd\n");
    }
    return 0;
}

解析:通过取余运算符判断一个数是否为偶数。

题目四:计算阶乘

#include <stdio.h>

int main() {
    int n, i, factorial = 1;
    scanf("%d", &n);
    for (i = 1; i <= n; i++) {
        factorial *= i;
    }
    printf("Factorial: %d\n", factorial);
    return 0;
}

解析:使用循环计算阶乘。

题目五:计算斐波那契数列

#include <stdio.h>

int main() {
    int n, i, a = 0, b = 1, c;
    scanf("%d", &n);
    for (i = 1; i <= n; i++) {
        c = a + b;
        a = b;
        b = c;
    }
    printf("Fibonacci: %d\n", b);
    return 0;
}

解析:使用循环计算斐波那契数列。

题目六:冒泡排序

#include <stdio.h>

void bubbleSort(int arr[], int n) {
    int i, j, temp;
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main() {
    int n, i;
    scanf("%d", &n);
    int arr[n];
    for (i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
    bubbleSort(arr, n);
    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

解析:使用冒泡排序算法对数组进行排序。

题目七:选择排序

#include <stdio.h>

void selectionSort(int arr[], int n) {
    int i, j, min_idx, temp;
    for (i = 0; i < n - 1; i++) {
        min_idx = i;
        for (j = i + 1; j < n; j++) {
            if (arr[j] < arr[min_idx]) {
                min_idx = j;
            }
        }
        temp = arr[min_idx];
        arr[min_idx] = arr[i];
        arr[i] = temp;
    }
}

int main() {
    int n, i;
    scanf("%d", &n);
    int arr[n];
    for (i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
    selectionSort(arr, n);
    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

解析:使用选择排序算法对数组进行排序。

题目八:插入排序

#include <stdio.h>

void insertionSort(int arr[], int n) {
    int i, j, key;
    for (i = 1; i < n; i++) {
        key = arr[i];
        j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = key;
    }
}

int main() {
    int n, i;
    scanf("%d", &n);
    int arr[n];
    for (i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
    insertionSort(arr, n);
    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

解析:使用插入排序算法对数组进行排序。

题目九:计算字符串长度

#include <stdio.h>
#include <string.h>

int main() {
    char str[100];
    scanf("%s", str);
    printf("Length: %d\n", strlen(str));
    return 0;
}

解析:使用strlen函数计算字符串长度。

题目十:字符串反转

#include <stdio.h>
#include <string.h>

void reverseString(char *str) {
    int len = strlen(str);
    int i;
    for (i = 0; i < len / 2; i++) {
        char temp = str[i];
        str[i] = str[len - i - 1];
        str[len - i - 1] = temp;
    }
}

int main() {
    char str[100];
    scanf("%s", str);
    reverseString(str);
    printf("Reversed String: %s\n", str);
    return 0;
}

解析:使用循环交换字符串首尾字符,实现字符串反转。

题目十一:判断字符串是否为回文

#include <stdio.h>
#include <string.h>

int isPalindrome(char *str) {
    int len = strlen(str);
    int i;
    for (i = 0; i < len / 2; i++) {
        if (str[i] != str[len - i - 1]) {
            return 0;
        }
    }
    return 1;
}

int main() {
    char str[100];
    scanf("%s", str);
    if (isPalindrome(str)) {
        printf("Palindrome\n");
    } else {
        printf("Not Palindrome\n");
    }
    return 0;
}

解析:通过比较字符串首尾字符,判断字符串是否为回文。

题目十二:计算两个整数的最大公约数

#include <stdio.h>

int gcd(int a, int b) {
    if (b == 0) {
        return a;
    }
    return gcd(b, a % b);
}

int main() {
    int a, b;
    scanf("%d %d", &a, &b);
    printf("GCD: %d\n", gcd(a, b));
    return 0;
}

解析:使用递归算法计算最大公约数。

题目十三:计算两个整数的最大公倍数

#include <stdio.h>

int lcm(int a, int b) {
    return (a * b) / gcd(a, b);
}

int main() {
    int a, b;
    scanf("%d %d", &a, &b);
    printf("LCM: %d\n", lcm(a, b));
    return 0;
}

解析:使用最大公约数计算最大公倍数。

题目十四:计算阶乘的阶乘

#include <stdio.h>

int factorial(int n) {
    if (n == 0) {
        return 1;
    }
    return n * factorial(n - 1);
}

int main() {
    int n;
    scanf("%d", &n);
    printf("Factorial of Factorial: %d\n", factorial(factorial(n)));
    return 0;
}

解析:使用递归算法计算阶乘的阶乘。

题目十五:计算斐波那契数列的第n项

#include <stdio.h>

int fibonacci(int n) {
    if (n <= 1) {
        return n;
    }
    return fibonacci(n - 1) + fibonacci(n - 2);
}

int main() {
    int n;
    scanf("%d", &n);
    printf("Fibonacci: %d\n", fibonacci(n));
    return 0;
}

解析:使用递归算法计算斐波那契数列的第n项。

总结

通过以上15道题目的解析,相信读者已经对C语言编程技巧有了更深入的了解。希望这些题目能够帮助读者巩固C语言基础知识,提高编程能力。