鱼C论坛

 找回密码
 立即注册
查看: 56|回复: 1

[学习笔记] 每日一学11

[复制链接]
发表于 2024-12-5 19:14:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 6bingame 于 2024-12-5 19:14 编辑

编程练习


练习题

题1:1英寸等于2.54cm。编写一个程序,要求输入您的年身高(以厘米为单位),然后显示该身高值等于多少英寸(结果保存小数点后两位)。

解:
#include<stdio.h>

int main()
{
    double inch,cm;

    printf("请输入您身高的值:"); // 提示用户输入身高的值

    scanf("%lf",&cm);

    inch = cm /2.54;        // 将厘米转换为英寸

    printf("您的身高为%.2f英寸。",inch);   // 输出结果

    return 0;
}

例题分析:程序需要将输入的厘米值转换为英寸值。转换公式为:1英寸 = 2.54厘米。因此,转换公式可以表示为 英寸 = 厘米 / 2.54。



题2:用递归法求Fibonacci数列

解:
#include<stdio.h>

long fibonacci(int n)       //求fibonacci中第n个数的值
{
    if(n==1||n==2)      //fibonacci数列中前两项均为1,终止递归的语句

        return 1;

    else

        return(fibonacci(n-1)+fibonacci(n-2));      //从第3项开始,下一项是前两项的和
}

main()
{
    int n,i;

    long y;

    printf("Input n:");

    scanf("%d",&n);

    for(i=1;i<=n;i++)
    {
        y=fibonacci(i);

        printf("%d ",y);
    }

    printf("\n");
}


例题分析:
本例题采用了递归方法输出前n项的Fibonacci数列。Fibonacci数列的前两项都为1,从第3项开始,每一项都是前两项的和。n表示第几项,函数值Fibonacci(n)表示第n项的值。当n的值大于2时,每一项的计算方法都一样,因此可以定义一个函数f(n)来计算第n项的值,递归的终止条件是当n=1或n=2时。



题3:hanoi(汉诺)塔问题。
这是一个典型只能用递归方法解决的问题。
有3根针A、B、C,A针上有64个盘子,盘子大小不等,大的在下,小的在上。
要求把这64个盘子从A针移到C针,在移动过程中可以借助B针,每次只允许移动一个盘子,且在移动过程中,在3根针都大盘在下,小盘在上。要求编程序打印处移动的步骤。

解:
#include<stdio.h>

void printdisk(char x,char y)       //定义打印函数
{
    printf("%c----->%c\n",x,y);
}

void hanoi(int n,char a,char b,char c)      //定义递归函数hanoi完成移动
{
    if(n==1)    //如果A针上的盘子数只剩下最后一个,移到C针上

        printdisk(a,c);

    else    //如果A针上的盘子数多余一个,执行以下语句
    {
        hanoi(n-1,a,c,b);       //将A针上的n-1个盘子借助C针先移到B针上

        printdisk(a,c);         //将A针上剩下的一个盘子移到C针上,即打印出来移动方式

        hanoi(n-1,b,a,c);       //将n-1个盘从B针借助A针移到C针上
    }
}

int main()
{
    int n;

    printf("Input n:");

    scanf("%d",&n);     //由键盘输入盘子数

    hanoi(n,'A','B','C');

    return 0;
}

例题分析:
将n个盘子从A针移到C针可以分解为以下3个步骤。
(1)将A上n-1个盘子借助C针先移到B针上。
(2)把A针上剩下的一个盘子移到C针上。
(3)将n-1个盘子从B针借助A针移到C针上。
这3个步骤分为两种操作。
(1)当n>1时,将n-1个盘子从一个针移到另一个针上,这是一个递归的过程。
(2)将最后一个盘子从一个针移到另一个针上。
本程序分别用两个函数实现上面的两类操作,用 hanoi() 函数实现 n>1 时的操作,用 printf() 函数实现将一个盘子从一个针移到另一个针上。



题4:编写函数prime(),判断给定的整数x是否为素数。在主函数输出一个整数,输出是否为素数。

解:
#include <stdio.h>

#include <math.h>

// 定义布尔类型(或者你可以简单地使用int类型,并用0和1表示false和true)
typedef enum { false, true } bool;

// 判断给定的整数x是否为素数的函数
int prime(int x)
{
    int i;

    if(x<=1)
    {
        return false;
    }

    for(i=2; i<=(int)sqrt((double)x); i++)
    {
        if(x%i==0)
        {
            return false;
        }
    }

    return true;
}

int main()
{
    int num;

    // 提示用户输入一个整数
    printf("请输入一个整数: ");

    scanf("%d", &num);

    // 判断并输出结果
    if(prime(num))
        {
            printf("%d 是素数\n", num);
        }
    else
        {
            printf("%d 不是素数\n", num);
        }

    return 0;
}


评分

参与人数 1鱼币 +2 收起 理由
小甲鱼的二师兄 + 2 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-12-5 20:40:30 | 显示全部楼层
棒棒,感谢分享!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 02:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表