题目如下:
习题2-3 求平方与倒数序列的部分和
分数 15
全屏浏览
切换布局
作者 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
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
错误代码如下:
#include<stdio.h>
double sum(n)
{
return n*n+1.0/n;
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
double sum=0.0;
for(int i=m;i<=n;i++)
{
sum+=sum(i);
}
printf("sum = %.6lf",sum);
return 0;
}
错误原因:
①:在main函数中,由于已经定义了全局变量sum和函数sum,因此在循环中对这两者重复使用会导致混淆。 建议将全局变量sum更名为其他名称,以避免冲突。
②:需要注意整数除法可能产生截断问题,需要确保计算的准确性。
最后,在scanf函数中应添加格式控制符号“%d”,以确保读取的是整数。
正确代码如下:
#include <stdio.h>
double calculateSum(int num)
{
return num * num + 1.0 / num;
}
int main() {
int m, n;
double totalSum = 0.0;
scanf("%d %d", &m, &n);
for (int i = m; i <= n; i++)
{
totalSum += calculateSum(i);
}
printf("sum = %.6lf", totalSum);
return 0;
}