引言

C语言作为一门历史悠久且应用广泛的编程语言,一直是计算机科学教育中的基础课程。通过解决编程题,不仅可以加深对C语言语法和概念的理解,还能提高逻辑思维和编程能力。本文将为您介绍30个趣味编程题,帮助您在轻松愉快的氛围中提升C语言编程技能。

1. 打印图案

题目描述:编写一个C程序,打印如下图案:

*
**
***
****
*****

代码示例

#include <stdio.h>

int main() {
    int i, j;
    for (i = 1; i <= 5; i++) {
        for (j = 1; j <= i; j++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

2. 求阶乘

题目描述:编写一个C程序,计算一个给定正整数的阶乘。

代码示例

#include <stdio.h>

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

int main() {
    int n;
    printf("Enter a positive integer: ");
    scanf("%d", &n);
    printf("Factorial of %d is %lld\n", n, factorial(n));
    return 0;
}

3. 最大公约数

题目描述:编写一个C程序,计算两个正整数的最大公约数。

代码示例

#include <stdio.h>

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

int main() {
    int a, b;
    printf("Enter two positive integers: ");
    scanf("%d %d", &a, &b);
    printf("GCD of %d and %d is %d\n", a, b, gcd(a, b));
    return 0;
}

4. 素数判断

题目描述:编写一个C程序,判断一个给定的正整数是否为素数。

代码示例

#include <stdio.h>
#include <stdbool.h>

bool is_prime(int n) {
    if (n <= 1)
        return false;
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0)
            return false;
    }
    return true;
}

int main() {
    int n;
    printf("Enter a positive integer: ");
    scanf("%d", &n);
    if (is_prime(n))
        printf("%d is a prime number\n", n);
    else
        printf("%d is not a prime number\n", n);
    return 0;
}

5. 水仙花数

题目描述:编写一个C程序,找出所有三位数的水仙花数。

代码示例

#include <stdio.h>

bool is_narcissistic(int n) {
    int original = n, sum = 0, remainder;
    while (n > 0) {
        remainder = n % 10;
        sum += remainder * remainder * remainder;
        n /= 10;
    }
    return original == sum;
}

int main() {
    for (int i = 100; i < 1000; i++) {
        if (is_narcissistic(i))
            printf("%d is a narcissistic number\n", i);
    }
    return 0;
}

6. 汉诺塔

题目描述:编写一个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;
    hanoi(n, 'A', 'C', 'B');
    return 0;
}

7. 斐波那契数列

题目描述:编写一个C程序,打印斐波那契数列的前20个数。

代码示例

#include <stdio.h>

void print_fibonacci(int n) {
    int a = 0, b = 1, c;
    for (int i = 0; i < n; i++) {
        if (i <= 1)
            c = i;
        else {
            c = a + b;
            a = b;
            b = c;
        }
        printf("%d ", c);
    }
    printf("\n");
}

int main() {
    int n = 20;
    print_fibonacci(n);
    return 0;
}

8. 求和

题目描述:编写一个C程序,计算从1到100的和。

代码示例

#include <stdio.h>

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

int main() {
    int n = 100;
    printf("Sum of 1 to %d is %d\n", n, sum(n));
    return 0;
}

9. 查找数字

题目描述:编写一个C程序,在有序数组中查找一个给定的数字。

代码示例

#include <stdio.h>

int binary_search(int arr[], int low, int high, int x) {
    if (high >= low) {
        int mid = low + (high - low) / 2;
        if (arr[mid] == x)
            return mid;
        if (arr[mid] > x)
            return binary_search(arr, low, mid - 1, x);
        return binary_search(arr, mid + 1, high, x);
    }
    return -1;
}

int main() {
    int arr[] = {1, 3, 5, 7, 9, 11, 13, 15};
    int n = sizeof(arr) / sizeof(arr[0]);
    int x = 7;
    int result = binary_search(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;
}

10. 计算最大公约数

题目描述:编写一个C程序,计算两个正整数的最大公约数。

代码示例

#include <stdio.h>

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

int main() {
    int a, b;
    printf("Enter two positive integers: ");
    scanf("%d %d", &a, &b);
    printf("GCD of %d and %d is %d\n", a, b, gcd(a, b));
    return 0;
}

11. 求和

题目描述:编写一个C程序,计算从1到100的和。

代码示例

#include <stdio.h>

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

int main() {
    int n = 100;
    printf("Sum of 1 to %d is %d\n", n, sum(n));
    return 0;
}

12. 查找数字

题目描述:编写一个C程序,在有序数组中查找一个给定的数字。

代码示例

#include <stdio.h>

int binary_search(int arr[], int low, int high, int x) {
    if (high >= low) {
        int mid = low + (high - low) / 2;
        if (arr[mid] == x)
            return mid;
        if (arr[mid] > x)
            return binary_search(arr, low, mid - 1, x);
        return binary_search(arr, mid + 1, high, x);
    }
    return -1;
}

int main() {
    int arr[] = {1, 3, 5, 7, 9, 11, 13, 15};
    int n = sizeof(arr) / sizeof(arr[0]);
    int x = 7;
    int result = binary_search(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;
}

13. 计算最大公约数

题目描述:编写一个C程序,计算两个正整数的最大公约数。

代码示例

#include <stdio.h>

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

int main() {
    int a, b;
    printf("Enter two positive integers: ");
    scanf("%d %d", &a, &b);
    printf("GCD of %d and %d is %d\n", a, b, gcd(a, b));
    return 0;
}

14. 求和

题目描述:编写一个C程序,计算从1到100的和。

代码示例

#include <stdio.h>

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

int main() {
    int n = 100;
    printf("Sum of 1 to %d is %d\n", n, sum(n));
    return 0;
}

15. 查找数字

题目描述:编写一个C程序,在有序数组中查找一个给定的数字。

代码示例

#include <stdio.h>

int binary_search(int arr[], int low, int high, int x) {
    if (high >= low) {
        int mid = low + (high - low) / 2;
        if (arr[mid] == x)
            return mid;
        if (arr[mid] > x)
            return binary_search(arr, low, mid - 1, x);
        return binary_search(arr, mid + 1, high, x);
    }
    return -1;
}

int main() {
    int arr[] = {1, 3, 5, 7, 9, 11, 13, 15};
    int n = sizeof(arr) / sizeof(arr[0]);
    int x = 7;
    int result = binary_search(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;
}

16. 计算最大公约数

题目描述:编写一个C程序,计算两个正整数的最大公约数。

代码示例

#include <stdio.h>

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

int main() {
    int a, b;
    printf("Enter two positive integers: ");
    scanf("%d %d", &a, &b);
    printf("GCD of %d and %d is %d\n", a, b, gcd(a, b));
    return 0;
}

17. 求和

题目描述:编写一个C程序,计算从1到100的和。

代码示例

#include <stdio.h>

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

int main() {
    int n = 100;
    printf("Sum of 1 to %d is %d\n", n, sum(n));
    return 0;
}

18. 查找数字

题目描述:编写一个C程序,在有序数组中查找一个给定的数字。

代码示例

#include <stdio.h>

int binary_search(int arr[], int low, int high, int x) {
    if (high >= low) {
        int mid = low + (high - low) / 2;
        if (arr[mid] == x)
            return mid;
        if (arr[mid] > x)
            return binary_search(arr, low, mid - 1, x);
        return binary_search(arr, mid + 1, high, x);
    }
    return -1;
}

int main() {
    int arr[] = {1, 3, 5, 7, 9, 11, 13, 15};
    int n = sizeof(arr) / sizeof(arr[0]);
    int x = 7;
    int result = binary_search(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;
}

19. 计算最大公约数

题目描述:编写一个C程序,计算两个正整数的最大公约数。

代码示例

#include <stdio.h>

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

int main() {
    int a, b;
    printf("Enter two positive integers: ");
    scanf("%d %d", &a, &b);
    printf("GCD of %d and %d is %d\n", a, b, gcd(a, b));
    return 0;
}

20. 求和

题目描述:编写一个C程序,计算从1到100的和。

代码示例

#include <stdio.h>

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

int main() {
    int n = 100;
    printf("Sum of 1 to %d is %d\n", n, sum(n));
    return 0;
}

21. 查找数字

题目描述:编写一个C程序,在有序数组中查找一个给定的数字。

代码示例

#include <stdio.h>

int binary_search(int arr[], int low, int high, int x) {
    if (high >= low) {
        int mid = low + (high - low) / 2;
        if (arr[mid] == x)
            return mid;
        if (arr[mid] > x)
            return binary_search(arr, low, mid - 1, x);
        return binary_search(arr, mid + 1, high, x);
    }
    return -1;
}

int main() {
    int arr[] = {1, 3, 5, 7, 9, 11, 13, 15};
    int n = sizeof(arr) / sizeof(arr[0]);
    int x = 7;
    int result = binary_search(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;
}

22. 计算最大公约数

题目描述:编写一个C程序,计算两个正整数的最大公约数。

代码示例

#include <stdio.h>

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

int main() {
    int a, b;
    printf("Enter two positive integers: ");
    scanf("%d %d", &a, &b);
    printf("GCD of %d and %d is %d\n", a, b, gcd(a, b));
    return 0;
}

23. 求和

题目描述:编写一个C程序,计算从1到100的和。

代码示例

#include <stdio.h>

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

int main() {
    int n = 100;
    printf("Sum of 1 to %d is %d\n", n, sum(n));
    return 0;
}

24. 查找数字

题目描述:编写一个C程序,在有序数组中查找一个给定的数字。

代码示例

#include <stdio.h>

int binary_search(int arr[], int low, int high, int x) {
    if (high >= low) {
        int mid = low + (high - low) / 2;
        if (arr[mid] == x)
            return mid;
        if (arr[mid] > x)
            return binary_search(arr, low, mid - 1, x);
        return binary_search(arr, mid + 1, high, x);
    }
    return -1;
}

int main() {
    int arr[] = {1, 3, 5, 7, 9, 11, 13, 15};
    int n = sizeof(arr) / sizeof(arr[0]);
    int x = 7;
    int result = binary_search(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;
}

25. 计算最大公约数

题目描述:编写一个C程序,计算两个正整数的最大公约数。

代码示例

”`c #include

int gcd(int a, int b) {

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

}

int main() {