50. 2018-10-25 07:48 采纳率: 100%
浏览 1799
已采纳

自学C的十。。来天)?到函数部分,什么形参实参好混乱,为什么我总被编译器提示形参有重定义?

练手的例题是之前的前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;

}

函数到底是咋写的呢?

看别人也会主函数和支函数参数都定义一样的啊,形参实参。。。好烦

这道题如果要用函数写,这么写应该没错吧...?

  • 写回答

2条回答 默认 最新

  • 内核之道 PostgreSQL领域优质创作者 2018-10-25 08:07
    关注

    从书写的方式来说,是没有问题的。函数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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥60 全一数分解素因子和素数循环节位数
  • ¥15 ffmpeg如何安装到虚拟环境
  • ¥188 寻找能做王者评分提取的
  • ¥15 matlab用simulink求解一个二阶微分方程,要求截图
  • ¥30 乘子法解约束最优化问题的matlab代码文件,最好有matlab代码文件
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导
  • ¥15 docker模式webrtc-streamer 无法播放公网rtsp
  • ¥15 学不会递归,理解不了汉诺塔参数变化