目录
实现语言:C
编译器:gcc
题目链接:
题目详情 - 7-2 求给定精度的简单交错序列部分和 (pintia.cn)
题目:
2022-高级语言程序设计练习——循环结构程序设计
7-2 求给定精度的简单交错序列部分和
分数 15
作者 C课程组
单位 浙江大学
本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。
输入格式:
输入在一行中给出一个正实数eps。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。
输入样例1:
4E-2
输出样例1:
sum = 0.854457
输入样例2:
0.02
输出样例2:
sum = 0.826310
代码长度限制16 KB
时间限制400 ms
内存限制64 MB
AC代码:
#include <stdio.h>
#include <math.h>
int main()
{
double eps; // 输入在一行中给出一个正实数eps
scanf("%lf", &eps); // 双精度浮点数输入%lf
// 计数控制用for,计算值和输入值控制一般用while.
// 本题属于计算值控制,是最后一项精度控制到一定范围结束循环的类型
// – 计算值控制框架
// tem = 1.0;
// while (fabs (item) >= eps)
//{
// item = flag * 1.0 / denominator;
// ……
// }
double item = 1.0; // 1,-1/4,1/7...记录每一项
double sum = 0.0; // 求和类初始化为0,求积类初始化为1
int flag = 1; // 符号位控制
int denominator = 1; // 分母初始化为1每次加3
item = flag * 1.0 / denominator; // 注意要乘1.0而不是1,乘1.0能让item自动类型转换为实数,乘1则为整型,整型除整型结果为整型,则除了第一项后面都是0
sum = sum + item;
while (fabs(item) > eps) // fabs()函数要用math.h库
{
// 当计算值精确度达不到精度要求,所有进行下一项更新
flag = -flag; // 符号改为相反数
denominator = denominator + 3; // 分母每次加3
item = flag * 1.0 / denominator; // 计算item;
sum = sum + item;
}
printf("sum = %lf\n", sum); // 在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围.
//%m.nlf表示以m位宽度输出小数点后为n位的双精度浮点数,默认为6位,故就写%lf即可
return 0;
}