|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
|
评分
-
查看全部评分
|