【问题标题】:Why is is series a int when Im declaring it as a float?当我将它声明为浮点数时,为什么系列是 int ?
【发布时间】:2019-12-17 21:17:40
【问题描述】:

给定 x 和项数。 显示序列的总和 [ 1+x+x^2/2!+x^3/3!+....]。

我尝试过使用 float、double 类型。 我对整数使用了强制转换。 我已经尝试了很多东西。

#include <stdio.h>
#include <math.h>
int main()
{
int termos;
float series, x, fact;//I have tried it with double because of pow 
                 //function


printf("Input x:"); scanf("%f",&x);
printf("\nInput nº termos:"); scanf("%d",&termos);

for(int i=1,series=1;i<termos;i++)
{
      for(int k=1,fact=1;k<=i;k++)
      {
        fact=fact*(float)k;
        //printf("fact=%f ",fact);
    }

 series= series + pow(x,i)/fact;
 printf("%f.....", series);//line 29

  }
    printf("\n\nFinal:%f \n", series);

return 0;
 }

c:29:23: 警告:格式指定类型“双”,但参数的类型为“整数” [-W格式] printf("%f.....", 系列);

【问题讨论】:

  • 您还需要验证使用 scanf 读取的输入。

标签: c


【解决方案1】:

这一行:for(int i=1,series=1;i&lt;termos;i++),声明了一个名为 series 的新 int,它隐藏了原来的 float series

一种可能的解决方法是将初始化移出for,例如:

series = 1;
for(int i=1;i<termos;i++)

【讨论】:

    【解决方案2】:

    你用

    声明一个整数 series
    for(int i=1,series=1;i<termos;i++)
    

    这个int series 具有for 循环内的元素范围。同for(int k=1,fact=1;k&lt;=i;k++)

    一个可能的解决方法是在循环之前设置series 的值

    series = 1;
    for(int i=1;i<termos;i++)
    

    您应该始终使用-Wall 编译代码以捕获此类错误。

    【讨论】:

    • 感谢您的更正以及额外的建议。再次感谢您。
    • series的赋值放在循环之前比将i的声明移到循环之前更好,因为后者不必要地扩大了i的范围。跨度>
    猜你喜欢
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多