算法笔记学习记录

算法笔记学习记录

地址
前面的题目没什么难度,所以从题目G开始
问题 G: 例题5-7 求圆周率pi的近似值
题目描述
用如下公式
在这里插入图片描述
求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加)。

要求输出的结果总宽度占10位,其中小数部分为8位。

程序中使用浮点型数据时,请定义为双精度double类型。

如果需要计算绝对值,可以使用C语言数学库提供的函数fabs,如求x的绝对值,则为fabs(x).

输入

输出
PI=圆周率的近似值

输出的结果总宽度占10位,其中小数部分为8位。

末尾输出换行。

样例输入

样例输出
PI=3.14159065

附上自己的代码

#include
int main()
{
    const double cnt = 1e-6;
    double pi=0,i=1;
    double num=1;
    int cn=1;
    while(i>cnt)
    {
        if(cn%2==0)
        {
            pi=pi-i;
        }
        else
        {
            pi=pi+i;
        }
        num++;
        cn++;
        i=1/(2*num-1);
    }
    pi=4*pi;
    printf("PI=%10.8f",pi);
    return 0;
}

问题 H: 例题5-8 Fibonacci数列
题目描述
输入一个正整数n,求Fibonacci数列的第n个数。Fibonacci数列的特点:第1,2个数为1,1。从第3个数开始,概述是前面两个数之和。即:
算法笔记学习记录_第1张图片
要求输入的正整数n不超过50.

输入
一个不超过50的正整数
输出
Fibonacci数列的第n个数,末尾输出换行。
样例输入
20
样例输出
6765

这题自己设置一下递归函数就很好解决了
附上自己写的c代码

#include
int Fib(int n)
{
    if(n==2||n==1) return 1;
    else return Fib(n-1)+Fib(n-2);
};
int main()
{
    int n;
    scanf("%d",&n);
    int result =Fib(n);
    printf("%d",result);
    return 0;
}

问题 I: 习题5-10 分数序列求和
题目描述
有如下分数序列
在这里插入图片描述
求出次数列的前20项之和。

请将结果的数据类型定义为double类型。

输入

输出
小数点后保留6位小数,末尾输出换行。
**样例输入 **

**样例输出 **
32.660261

也是很简单的一个循环

#include
int main()
{
    double sum=0,i=1,j=2;
    for(int m=0;m<20;m++)
    {
        sum+=(j/i);
        double temp=j;
        j=j+i;
        i=temp;
    }
    printf("%.6f",sum);
    return 0;
}

你可能感兴趣的:(算法笔记学习记录)