c语言 求解谭浩强第三版第六章课后6.5提的改版

来源:百度知道 编辑:UC知道 时间:2024/06/07 05:49:12
原题是 求解 1到100的和+1到50各数平方和+1到10各倒数的和

老师改成 ∑(1~100)k+∑(1~50)(-1)k*k2+∑(1~20)(-1)k/k

就是变为 1到100的和+1到50的-1的k次方乘以K方的和+1到20的倒数乘以-1的k次方的和

也就是后两项叠加里面多乘了-1的k次方,

这样叠加起来就单数负双数正了,那要怎么做呢?

#include "stdio.h"
void main()
{
int k;
/*sum1为第一项结果,sum2为第二项结果,sum3为第三项结果,sum保存总结果*/
double sum,sum1,sum2,sum3;
/*计算第一项结果,直接用高斯公式,FOR循环将增加时间复杂度*/
sum1=(1.0+100.0)/2.0*100;
sum2=0;
sum3=0;
printf("sum1=%f\n",sum1);
/*计算第二项结果,存入sum2,更据K奇偶性判断套用表达式*/
for (k=1;k<=50;k++)
{
if (k%2==1)
{
sum2-=k*k;

}
else
{
sum2+=k*k;

}
}
printf("sum2=%f\n",sum2);
/*计算第三项结果,存入sum3,更据K奇偶性判断套用表达式*/
for (k=1;k<10;k++)
{
if (k%2==1)
{
sum3-=1.0/k;

}
else
{
sum3+=1.0/k;

}

}
printf("sum3=%f\n",sum3);
sum=sum1+sum2+sum3;
printf("the result of sum=%f\n",sum);

}
k对2取余判断奇偶后,用if语句选择表达式即可。