练手的例题是之前的前n项+分母阶乘(虽然我知道怎么做
**自然常数e可以用级数1+1/1!+1/2!+⋯+1/n!来近似计算。本题要求对给定的非负整数n,求该级数的前n项和。
**
#include<stdio.h>
double denominator(double n);
int main()
{
double n, i, sum, item;
scanf("%lf", &n);
sum = 1;
item = 1/ denominator(n);
for (i = 1; i <= n; i++) {
sum = sum + item;
}
printf("%.6f", sum);
}
double denominator(double n)
{
double i, n, item;
for (i = 1; i <= n; i++)
{item = item * i;}
return item;
}
函数到底是咋写的呢?
看别人也会主函数和支函数参数都定义一样的啊,形参实参。。。好烦
这道题如果要用函数写,这么写应该没错吧...?
从书写的方式来说,是没有问题的。函数denominator的定义写在main作用域的外部,而main函数内部会使用该函数,因此需要在main中使用该函数denominator之前,进行声明,以告知编译器该函数是合法的,它有进行定义,同时告知编译器该函数的返回类型,函数名,函数参数个数和参数类型。这里之所以会报错,是因为你的函数**denominator**定义中,其函数体中的变量 **n **与函数的参数n重定义了。函数也是有作用域的,你在同一个作用域中定义两个同名的变量肯定是错误的。就好比在main函数中定义两个同名的变量也会报错。修改方法是修改denominator函数体内的变量n,另取一个名字。
修改如下:
double denominator(double n)
{
double i, item;
for (i = 1; i <= n; i++)
{item = item * i;}
return item;
}
函数定义方式为
返回值类型 函数名(形参列表){函数体}
如果你想在某个地方调用函数,就必须在这个地方之前就声明了该函数,就比如你给的例子在主函数中调用了denominator,要在主函数前声明该函数,而你是先声明了,函数的实际实现放到了main函数下方,另外,题目要去整数,用double就有点大材小用了
函数就像是一个加工厂,你把所需材料送进工厂,以获取成品,而形参就是我们预先规定好所需要的材料,实参就是我们实际送进工厂的东西,材料是什么(形参),我们就往工厂里塞什么(实参)