《算法笔记》——基础篇习题循环结构

循环结构

第二章 C/C++快速入门——2.4循环结构

【习题G】 一元二次方程求根

Problem Description

用如下公式
在这里插入图片描述

求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加)。

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

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

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

Input

Output
PI=圆周率的近似值
输出的结果总宽度占10位,其中小数部分为8位。
末尾输出换行。

Sample Input

Sample Output
PI=3.14159065

Thinking Notes

  • for循环第二个式子为空相当于while(1),无条件循环,和break配合实现循环退出
  • 找数列规律【1,1/3,1/5】——1/(2*i-1)
  • pow函数求幂,控制加减跳变
  • 科学计数法106——1e-6
  • 注意整形变量i和double型运算时的类型强制性转换
  • pow函数的两个参数都是double型,(i-1)作为参数要乘一个1.0转换类型

Code Implementation(C)

#include<stdio.h>
#include<math.h>
int main(){
    double pi=0;
    for(int i=1;;i++){
        if(1/(2.0*i-1)<1e-6) break;
        pi+=1/(2.0*i-1)*pow(-1.0,1.0*(i-1));
    }
    printf("PI=%10.8f\n",4*pi);
    return 0;
}

【习题H】 Fibonacci数列

Problem Description

输入一个正整数n,求Fibonacci数列的第n个数。Fibonacci数列的特点:第1,2个数为1,1。从第3个数开始,概述是前面两个数之和。即:
在这里插入图片描述
要求输入的正整数n不超过50.

Input
一个不超过50的正整数

Output
Fibonacci数列的第n个数,末尾输出换行。

Sample Input
20

Sample Output
6765

Thinking Notes

没到用递归的程度,求每一项需要之前两项,用数组存储

Code Implementation(C)

自己写的

#include<stdio.h>
int main(){
    int n,f[50];
    scanf("%d",&n);
    f[0]=1;
    f[1]=1;
    for(int i=2;i<=n;i++){
        f[i]=f[i-1]+f[i-2];
    }
    printf("%d\n",f[n-1]);
    return 0;
}

或 看看大佬

#include <cstdio>
long long dp[50];
int main()
{
	dp[0]=dp[1]=1;
	for(int i=2;i<=50;++i)
		dp[i]=dp[i-1]+dp[i-2];
	int a;
	scanf("%d",&a);
	printf("%lld\n",dp[a-1]);
	return 0;
}

【习题I】分数序列求和

Problem Description

有如下分数序列
在这里插入图片描述
求出次数列的前20项之和。
请将结果的数据类型定义为double类型。

Input

Output
小数点后保留6位小数,末尾输出换行。

Sample Input

Sample Output
32.660261

Thinking Notes

找规律

Code Implementation(C)

#include<stdio.h>
int main(){
    double sum;
    double z=2.0,m=1.0,mt;
    for(int i=1;i<=20;i++){
        sum+=z/m;
        mt=m;
        m=z;
        z=z+mt;
    }
    printf("%.6f\n",sum);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值