7-34 求分数序列前N项和 (15 分) 本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和PTA:中M2021春C、Java入门练习第I段——变量、表达式、分支、循环

本文介绍了一个计算特定分数序列前N项之和的C语言程序。该序列从第二项开始,每一项的分子为前一项分子与分母之和,分母为前一项的分子。文章提供了完整的代码实现及样例输入输出。

7-34 求分数序列前N项和 (15 分)

本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。

输入样例:

20

输出样例:

32.66

代码如下:

#include<stdio.h>
int main(){
    int N;
    scanf("%d",&N);
    double a=2;
    double b=1;
    double sum=0;
    double exchange=0;
    for (double i=1;i<=N;i++){
        sum+=a/b;
        exchange=a;
        a+=b;
        b=exchange;
    }
    printf("%.2f",sum);
    return 0;
}
以下是几种用C语言编写的程序来计算序列 2/1 + 3/2 + 5/3 + 8/5 + ...N: ### 方法 ```c #include <stdio.h> int main(){ double sum = 0; int n = 0; double x1 = 1, x2 = 2; double t; scanf("%d", &n); while(n--){ sum += x2 * 1.0 / x1; t = x2; x2 = x1 + x2; x1 = t; } printf("%.2lf", sum); return 0; } ``` 该方法通过`while`循环,不断更新母的值,并累加每的值到`sum`中,最后输出结果,精确到小数点后两位 [^1]。 ### 方法二 ```c #include <stdio.h> #include <stdlib.h> double print_s(int a) { double p1[50], p2[50], Sn[50]; int i = 0; p1[0] = 2; p2[0] = 1; Sn[0] = p1[0] / p2[0]; for(i = 1; i < a; i++) { p1[i] = p1[i - 1] + p2[i - 1]; p2[i] = p1[i] - p2[i - 1]; Sn[i] = Sn[i - 1] + (p1[i] / p2[i]); } return(Sn[a - 1]); } int main() { int a; printf("请输入您要打印这个分数序列:"); scanf("%d", &a); printf("本序列%dSn=%2.5f\n", a, print_s(a)); system("pause"); return 0; } ``` 此方法定义了个函数`print_s`,使用数组来存储每子、n,通过`for`循环计算n,最后在`main`函数中调用该函数并输出结果 [^2]。 ### 方法三 ```c #include <stdio.h> int main(){ double a = 2, b = 1, c; double factor; double sum = 2; int count; int x; scanf("%d", &x); for(count = 2; count <= x; count++){ c = a; a = a + b; b = c; factor = a / b; sum += factor; } printf("%.2f", sum); } ``` 该方法使用`for`循环,从第二开始计算的值并累加到`sum`中,最后输出结果,精确到小数点后两位 [^3]。 ### 方法四 ```c #include <stdio.h> int main() { int N; double a = 2.00, b = 1.00; double sum = 0.0; double c; scanf("%d", &N); for(int i = 1; i <= N; i++){ sum += a * 1.0 / b; c = b; b = a; a = a + c; } printf("%.2f", sum); return 0; } ``` 此方法同使用`for`循环,不断更新母的值,累加每的值到`sum`中,最后输出结果,精确到小数点后两位 [^4]。 ### 方法五 ```c #include <stdio.h> int main(){ int N; scanf("%d", &N); double a = 2; double b = 1; double sum = 0; double exchange = 0; for (double i = 1; i <= N; i++){ sum += a / b; exchange = a; a += b; b = exchange; } printf("%.2f", sum); return 0; } ``` 该方法使用`for`循环,通过临时变量`exchange`交换母的值,累加每的值到`sum`中,最后输出结果,精确到小数点后两位 [^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值