如下图所示,题目要求填写空缺程序。非空缺部分已经了解,但空缺成分不是很会做,希望得到指点
区别应该在于每一项有符号位,分子和分母三个部分组成的不同。
然后具体实现可以用循环控制计算的次数,再在循环中分别计算每一项分子,分母的值,然后结合符号位计算出当前项数列的值,再把当前项数列的值累加到和中,循环结束则可计算出数列的和。
代码如下:
#include <stdio.h>
double fun(int n,double x){
//printf("fun\n");
double s=1; // 将数列初始化为第一项的值
double numerator=1; // 分子
double denominator=1; // 分母
double single; // 临时存储数列每一项的值
int i;
int flag=-1; // 符号位
for(i=2;i<=n;i++){ // 从数列第二项开始计算到指定项
numerator*=x; // 分子为x的次方
denominator*=(i-1); // 分母为 (当前项数-1 )的阶乘
single = flag*numerator/ denominator; // 数列的每一项为符号位乘以分子再除以分母
s+=single; // 把数列当前项的值累加到和中
flag*=-1; // 符号位变化
//printf("i=%d,分子=%.2lf,分母=%.2lf,当前项=%.2lf,s=%.2lf\n",i,denominator,numerator,single,s);
}
return s; // 返回数列和
}
int main(void){
int n;
double x,s;
scanf("%d %lf",&n,&x);
// printf("n=%d,x=%lf\n",n,x);
s=fun(n,x);
printf("%lf\n",s);
return 0;
}
我们看以下定义,p是一个函数内的局部变量,则p的值是随机的,也就是说p是一个野指针。
int func()
{
int *p;
...
}
再看以下函数,p是一个局部变量,分配在栈上的地址,p的值是(void *)0
,实际就是0x00000000
,意思就是指针p指向内存的0x00000000
地址处。这时候p就不是野指针了。
int func()
{
int *p = NULL;
...
}
数学问题