黄可豪的实验四报告作业

1.以下代码是某个同学的作品,请用你学习到的调试技巧修改以下代码。保证他的运行结果是正确的。

/******************************
  求pi,利用莱布尼茨公式,即 pi/4 = 1 - 1/3 + 1/5 - 1/7 + ...  
*******************************/

#include <stdio.h>
#include <math.h>
int main()
{
    int k = 0,a = 1,isprime = 0;
    double Pi,pi,sum = 0;  //pi表示莱布尼茨公式最后一项;Pi表示圆周率的值; 
    for (k = 0; isprime == 0; k++)     
    {
        pi = a*1.0/(2*k + 1);
        printf("%lf\n", pi);
        if(fabs(pi) <= fabs(1e-7)){   
        	isprime = 1;
        	break;
        }else{
        	isprime = 0;
		}
        sum += pi;
        a *= -1;
    }
    Pi = 4 * sum;              
    printf("%lf",Pi);
    return 0;
}

(代码截图+运行结果截图):

2.斐波那契数列(用递归法完成)

题目描述: 用递归的方法求解该数列的第n项。

输入格式: 输入整数n,n小于41。

输出格式:  输出一个数,数列的第n项

输入样例:  1

输出样例: 1

(代码截图+运行结果截图):

3. 十进制转二进制(迭代法)

题目描述: 编写一个迭代函数,其参数是一个整数N,返回值也是一个整数(假设是R)。规则:整数R是整数N的二进制形式。

输入格式:  输入一个整数值。

输出格式:  输出该整数值的二进制值。

输入样例:  15

输出样例:  1111

(代码截图+运行结果截图):

4.十进制转二进制(递归法)

(代码截图+运行结果截图):

5.二进制转十进制(递归法)

(代码截图+运行结果截图):

6.超级跳跳跳 (递归法)

有一超级楼梯,共无限级。刚开始时你在地面,你可以一步跨上第一级,也可以一步跨上第二级。
假设你每次只能向上跨一级或二级,那么你要走上第N级,共有多少种走法?

(代码截图+运行结果截图):

实验结果分析

第一小题 (不少于20字):

当执行该程序时,它会计算使用莱布尼茨公式来逼近圆周率 Pi 的值。莱布尼茨公式如下:
Pi = 4 * (1 - 1/3 + 1/5 - 1/7 + 1/9 - ...)
程序中的变量k, a, isprime, Pi, pi, 和 sum 分别表示循环计数器,系数,是否达到精度要求,圆周率的值,莱布尼茨公式的最后一项,以及和。
在for循环中,程序通过计算莱布尼茨公式的每一项pi,并检查其绝对值是否小于等于1e-7。一旦条件满足,程序会跳出循环并计算Pi的值,然后以10位小数的精度输出。
最后sum*4得出Pi是多少
因此,当执行该程序时,它将输出Pi的值,精确到小数点后10位。

第二小题 (不少于20字):

在这个程序中,huang函数通过递归来计算斐波那契数列的第n个数字。如果输入的数字是1或2,函数将返回1,否则它将递归调用自己来计算前两个数字之和。递归的过程中,会不断调用自身来计算前两个数字的和,直到递归的终止条件(num为1或2)满足。然后将这些返回值相加得到最终的结果。

第三小题 (不少于20字):

这个程序将输入的十进制整数转换为二进制数并输出。在main函数中,用户输入一个整数a,然后调用huang函数来将该整数转换为二进制数,并将结果打印出来。

在huang函数中,使用了一个while循环来计算二进制数。在循环中,首先取输入数c的余数,然后将该余数与e相乘并加到b上,接着e乘以10,c除以2。当c不再大于0时,循环结束,返回b,即为转换后的二进制数。

所以如果输入的a是10,程序将输出1010,因为10的二进制表示为1010。

第四小题 (不少于20字):

这个程序使用递归法将输入的十进制整数转换为二进制数并输出。在main函数中,用户输入一个整数number,然后调用huang函数来将该整数转换为二进制数,并将结果打印出来。

在huang函数中,如果输入的数为0,则返回0;否则,将递归调用自身来计算商的二进制表示并乘以10,再加上余数的二进制表示。递归的过程中,会不断调用自身来计算商的二进制表示,直到递归的终止条件(num为0)满足。然后将这些返回值相加得到最终的结果。

第五小题 (不少于20字):

这个程序使用递归法将输入的二进制数转换为十进制数并输出。在main函数中,用户输入一个整数number,然后调用huang函数来将该整数转换为十进制数,并将结果打印出来。

在huang函数中,如果输入的数为0,则返回0;否则,将递归调用自身来计算余数乘以2的幂次方并加上商的十进制表示。递归的过程中,会不断调用自身来计算商的十进制表示,直到递归的终止条件(N为0)满足。然后将这些返回值相加得到最终的结果。

第六小题 (不少于20字):

这个程序使用递归法来计算爬楼梯的方法数量。在main函数中,用户输入一个整数n,然后调用climbStairs函数来计算爬到第n级楼梯的方法数量,并将结果打印出来。

在climbStairs函数中,如果n小于等于2,则返回n,因为在这种情况下,只有1级楼梯有1种方法,2级楼梯有2种方法。否则,使用递归调用自身来计算爬到第n级楼梯的方法数量,方法数量等于爬到第n-1级楼梯的方法数量加上爬到第n-2级楼梯的方法数量。

六、实验总结 (不少于50字)

递归函数的用法逐渐熟练,但是有时候写编程还是要思考递归的过程,得一步步推演,时间浪费有点多。总体上我觉得实验先用迭代法推演一遍,之后再根据迭代法过程来编写迭代代码。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值