鱼C论坛

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

[学习笔记] 每日一学11

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

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

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

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

编程练习


练习题

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

解:
  1. #include<stdio.h>

  2. int main()
  3. {
  4.     double inch,cm;

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

  6.     scanf("%lf",&cm);

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

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

  9.     return 0;
  10. }
复制代码


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



题2:用递归法求Fibonacci数列

解:
  1. #include<stdio.h>

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

  5.         return 1;

  6.     else

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

  9. main()
  10. {
  11.     int n,i;

  12.     long y;

  13.     printf("Input n:");

  14.     scanf("%d",&n);

  15.     for(i=1;i<=n;i++)
  16.     {
  17.         y=fibonacci(i);

  18.         printf("%d ",y);
  19.     }

  20.     printf("\n");
  21. }
复制代码



例题分析:
本例题采用了递归方法输出前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根针都大盘在下,小盘在上。要求编程序打印处移动的步骤。

解:
  1. #include<stdio.h>

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

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

  9.         printdisk(a,c);

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

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

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

  17. int main()
  18. {
  19.     int n;

  20.     printf("Input n:");

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

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

  23.     return 0;
  24. }
复制代码


例题分析:
将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是否为素数。在主函数输出一个整数,输出是否为素数。

解:
  1. #include <stdio.h>

  2. #include <math.h>

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

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

  9.     if(x<=1)
  10.     {
  11.         return false;
  12.     }

  13.     for(i=2; i<=(int)sqrt((double)x); i++)
  14.     {
  15.         if(x%i==0)
  16.         {
  17.             return false;
  18.         }
  19.     }

  20.     return true;
  21. }

  22. int main()
  23. {
  24.     int num;

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

  27.     scanf("%d", &num);

  28.     // 判断并输出结果
  29.     if(prime(num))
  30.         {
  31.             printf("%d 是素数\n", num);
  32.         }
  33.     else
  34.         {
  35.             printf("%d 不是素数\n", num);
  36.         }

  37.     return 0;
  38. }
复制代码



评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-12-5 20:40:30 | 显示全部楼层
棒棒,感谢分享!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-7 15:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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