我们来看一下这个求前n项的和的题目
f(n)=1+1/2+1/3+1/4+......+1/n
由于我们比较清楚的是,这个求和公式的开始的是第几项和结束的是第几项,所以我们使用for循环的话可能会更加好一些,但是还是前面经常提到的一句话,就是一个for可以写的一定可以变成while的语句。
我们在代码里面来具体的看一下是怎么写:
#include<stdio.h>
int main()
{
int i;//负责计数以及做每一轮的数字的加和。
int n;
double sum=0.0;//负责做一个专门算总和的变量。注意的是这里的总和由于是分数的和,所以结果一定是小数。
scanf_s("%d", &n);
for (i = 1; i <= n; i++)
{
sum += 1.0 / i;//注意这里的1.0是由于如果不加.0的话,一个1除以比他大的数字,如果是取整的话,那结果就都是0了。
}
printf("f(%d)=%f\n", n, sum);
return 0;
}
我们再换一道求和的题目:
f(n)=1-1/2+1/3-1/4+......+1/n
具体的解决方法就是,引入一个变量,让它等于1,然后控制好再每一个循环里面,sign值的大小,在每一次的循环当中根据次数来判断是1还是-1.
具体的代码如下:
#include<stdio.h>
int main()
{
int i;//负责计数以及做每一轮的数字的加和。
int n;
double sum=0.0;//负责做一个专门算总和的变量。注意的是这里的总和由于是分数的和,所以结果一定是小数。
int sign=1;
scanf_s("%d", &n);
for (i = 1; i <= n; i++)
{
sum +=sign* 1.0 / i;//注意这里的1.0是由于如果不加.0的话,一个1除以比他大的数字,如果是取整的话,那结果就都是0了。
sign = -sign;
}
printf("f(%d)=%f\n", n, sum);
return 0;
}
当然还有一个更加简便的方法:把sign设成1.0那么其他的都不用变,只用把在sun求和那块的取浮点数的1.0去掉就可以了。