6bingame 发表于 2024-12-5 19:14:36

每日一学11

本帖最后由 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;
}



小甲鱼的二师兄 发表于 2024-12-5 20:40:30

棒棒,感谢分享!!
页: [1]
查看完整版本: 每日一学11