c语言经典

本文介绍了C语言中五个经典问题:判断水仙花数、递归实现斐波那契数列、打印杨辉三角、汉诺塔问题以及检查回文数的方法,并给出了相应的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言的经典问题以及它们的示例代码:

 

1. 水仙花数

```c

#include <stdio.h>

 

int main() {

    int num, originalNum, remainder, n = 0;

    

    printf("请输入一个三位数: ");

    scanf("%d", &num);

    

    originalNum = num;

    

    while (originalNum != 0) {

        remainder = originalNum % 10;

        n = n * 10 + remainder;

        originalNum /= 10;

    }

    

    if (n == originalNum)

        printf("%d 是一个水仙花数。\n", num);

    else

        printf("%d 不是一个水仙花数。\n", num);

    

    return 0;

}

```

 

2. **斐波那契数列** (递归实现)

```c

#include <stdio.h>

 

// 定义斐波那契数列的递归函数

unsigned int fibonacci(unsigned int n) {

    if (n <= 1)

        return n;

    else

        return fibonacci(n - 1) + fibonacci(n - 2);

}

 

int main() {

    int i, n = 10;

    

    printf("The first %d Fibonacci numbers are:\n", n);

    for (i = 0; i < n; i++) {

        printf("%u ", fibonacci(i));

    }

    printf("\n");

    

    return 0;

}

```

 

3. **杨辉三角**

```c

#include <stdio.h>

#include <stdlib.h>

 

void printTriangle(int n) {

    int i, j, k;

    

    // 为杨辉三角的每一行分配内存

    int *triangle = (int *)malloc((n * (n + 1)) / 2 * sizeof(int));

    

    // 打印上三角

    for (i = 0; i < n; i++) {

        for (j = 0; j < n - i; j++)

            printf(" ");

        for (k = 0; k <= i; k++) {

            if (i == 0 || k == 0)

                triangle[(i * (i + 1)) / 2 + k] = 1;

            else

                triangle[(i * (i + 1)) / 2 + k] = triangle[(i - 1) * i / 2 + k - 1] + triangle[k];

            printf("%4d", triangle[(i * (i + 1)) / 2 + k]);

        }

        printf("\n");

    }

    

    // 释放内存

    free(triangle);

}

 

int main() {

    int n;

    

    printf("Enter the number of rows: ");

    scanf("%d", &n);

    

    printTriangle(n);

    

    return 0;

}

```

 

4. **汉诺塔问题** (递归实现)

```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; // Number of disks

    hanoi(n, 'A', 'C', 'B'); // hanoi(n, source, destination, auxiliary)

    return 0;

}

```

 

5. **回文数** (检查函数)

```c

#include <stdio.h>

#include <stdbool.h>

 

bool isPalindrome(int x) {

    int n = 0;

    int original = x;

    

    if (x < 0) {

        x = -x;

    }

    

    // 计算x的位数

    while (x != 0) {

        x = x / 10;

        n++;

    }

    

    // 如果x是偶数位的,则直接进行比较

    // 如果x是奇数位的,则进行比较前需要先去掉中间的数字

    int rev = 0;

    int temp = x;

    while (n > 0) {

        int pop = temp % 10;

        rev = rev * 10 + pop;

        temp = temp / 10;

        n--;

    }

    

    if (original == rev) {

        return true;

    } else {

        return false;

    }

}

 

int main() {

    int x = 121;

    if (isPalindrome(x)) {

        printf("%d 是一个回文数。\n", x);

    } else {

        printf("%d 不是一个回文数。\n", x);

    }

    return 0;

}

```

 

请注意,上述代码示例仅供参考,并且假设了输入的正确性。在实际的应用程序中,您可能需要添加额外的错误检查和边界条件处理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值