PTA-循环结构2

文章讲述了多个C语言编程题目,涉及从基础的整数区间累加到高级的交错序列、分数序列求和,以及计算阶乘和自然数的拆分组合,展示了编程解决数学问题的方法。
摘要由CSDN通过智能技术生成

7-1 Camp0104-累加1+2+...+100

作者 王和兴

单位 东北大学秦皇岛分校

高斯在小时候很顽皮,但是也显示出极高的天赋。

有一次放学后,因为全班同学整队时纪律不好,集体被老师留在教室里罚写作业。

老师要求所有同学完成从1至100的加法后才可返学离开,高斯很快写出了答案5050后离开学校了。但是他的小伙伴可就没这么幸运了,老老实实的做加法。

现在请你帮助高斯的同学们,编写一个程序,来计算表达式1+2+3+...+100的值并输出。

输入格式:

本题无输入

输出格式:

在一行中输出1+2+3+...+100的值。

输入样例:

输出样例:

在这里给出相应的输出。例如:

5050

解答:

#include <iostream>
using namespace std;
int main()
{
    int i,sum=0;
    for(int i = 1;i<=100;i++)
    {
        sum = sum + i;
    }
    cout<<sum<<endl;
    return 0;
}

 

7-2 Camp0105-累加从a到b区间的和

作者 王和兴

单位 东北大学秦皇岛分校

本题给出整数区间[a,b],请计算并输出从a至b区间内所有的整数的和,题目保证运算结果在整数范围内。

输入格式:

在一行中给出2个整数a和b(a<b)。

输出格式:

在一行中输出从a累加到b和值。

输入样例:

1 100

输出样例:

5050

解答:

#include <iostream>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    int sum = 0;
    if(a<b)
        for(int i = a;i<=b;i++)
        {
            sum = sum + i;
        }
    cout<<sum<<endl;
    return 0;

7-3 求N分之一序列前N项和

作者 C课程组

单位 浙江大学

本题要求编写程序,计算序列 1 + 1/2 + 1/3 + ... 的前N项之和。

输入格式:

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

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

输入样例:

6

输出样例:

sum = 2.450000

解答:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    double sum=0;
    for(int i=1;i<=n;i++)
    {
        sum=sum+1.0/i;
    }
    cout<<"sum = "<<fixed<<setprecision(6)<<sum<<endl;
    return 0;
}

7-4 求奇数分之一序列前N项和

作者 C课程组

单位 浙江大学

本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。

输入格式:

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

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

输入样例:

23

输出样例:

sum = 2.549541

 解答:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    double sum=0;
    for(int i=1;i<=n;i++)
    {
        sum=sum+1.0/(2*i-1);
    }
    cout<<"sum = "<<fixed<<setprecision(6)<<sum<<endl;
    return 0;
}

7-5 求简单交错序列前N项和

作者 C课程组

单位 浙江大学

本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和。

输入格式:

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

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后三位。题目保证计算结果不超过双精度范围。

输入样例:

10

输出样例:

sum = 0.819

解答:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int flag=1;
    double sum=0;
    double item;
    for(int i=1;i<=n;i++)
    {
        item=flag*1.0/(3*i-2);
        sum=sum+item;
        flag=-flag;
    }
    cout<<"sum = "<<fixed<<setprecision(3)<<sum<<endl;
    return 0;
}

7-6 求平方与倒数序列的部分和

作者 C课程组

单位 浙江大学

本题要求对两个正整数m和n(m≤n)编写程序,计算序列和m2+1/m+(m+1)2+1/(m+1)+⋯+n2+1/n。

输入格式:

输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。

输入样例:

5 10

输出样例:

sum = 355.845635

 解答:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int m,n;
    cin>>m>>n;
    double sum=0;
    for(int i=m;i<=n;i++)
    {
        sum=sum+i*i+1.0/i;
    }
    cout<<"sum = "<<fixed<<setprecision(6)<<sum<<endl;
    return 0;
}

7-7 求交错序列前N项和

作者 陈建海

单位 浙江大学

本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。

输入格式:

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

输出格式:

在一行中输出部分和的值,结果保留三位小数。

输入样例:

5

输出样例:

0.917

解答:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    double flag=1.0;
    double sum=0;
    double item;
    for(int i=1;i<=n;i++)
    {
        item=i*flag/(2*i-1);
        sum=sum+item;
        flag=-flag;
    }
    cout<<fixed<<setprecision(3)<<sum<<endl;
    return 0;
}

7-8 分数序列前n项之和

作者 王和兴

单位 东北大学秦皇岛分校

有一分数序列:

12​,23​,35​,58​,813​,1321​,......

求出这个数列前n项之和。

输入

在一行中输入一个整数n。

输出格式:

数列前n项之和,精度为小数点后4位。

输入样例:

10

输出样例:

16.4799

 解答:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[n+1]={0,1,2};
    int b[n+1]={0,2,3};
    double sum=3.5;
    double item;
    for(int i=3;i<=n;i++)
    {
        a[i]=a[i-1]+a[i-2];
        b[i]=b[i-1]+b[i-2];
        item=b[i]*1.0/a[i];
        sum=sum+item;
    }
    cout<<fixed<<setprecision(4)<<sum<<endl;
    return 0;
}

7-9 计算n的阶乘

作者 崔孝凤

单位 山东理工大学

编写程序,求自然数1至n(n>1)的累乘积(即阶乘)。其中n的值从键盘输入(n<=12)。

输入格式:

输入一个正整数。

输出格式:

输出一个正整数,最后换行。

输入样例:

8

输出样例:

40320

解答:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    long long m=1;
    for(int i=1;i<=n;i++)
    {
        m=m*i;
    }
    cout<<m<<endl;
    return 0;
}

7-10 循环-拆分成和

作者 叶青

单位 长春理工大学

输入一个自然数,拆分成两个非负整数的和,输出所有组合

输入格式:

输入一个自然数

输出格式:

拆分成两个非负整数的和,输出所有可能的两个数相加的表达式

输入样例:

7

输出样例:

0+7=7
1+6=7
2+5=7
3+4=7

 解答:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<=n;i++)
    {
        for(int j=0;j<=n;j++)
        {
            if((i+j)==n&&i<=j)
            {
                cout<<i<<"+"<<j<<"="<<n<<endl;
            }
        }
    }
    return 0;
}

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值