在C中使用pow()

时间:2014-01-11 16:15:36

标签: c

我应该做这个家庭作业有这个问题。

[它说创建一个能够计算并显示 S 总和的程序

喜欢S = 1 + 1/4 + 1/8 + 1/16 ......直到1 / [2 pow n]

所以我研究了它并想出了这段代码

#include <stdio.h>
void main()
{
int n,i;
float p,s;
printf("Enter the maximum power n :");
scanf("%d",&n);
s=0;
p=0;
for (i=0;i<n;i++)
{
    p+=1/pow(2, i);
    s+=p;
    printf("s = %f\n",s);
}
printf("The sum of this equation is :%f",&s);
}

但是当我执行它时总是像S = 0。  我做错了什么?

6 个答案:

答案 0 :(得分:1)

您正在打印一个地址('&amp; s ) with%f`变量。使用错误的说明符会调用未定义的行为。您可能会得到任何内容。

此外,不需要变量s。删除行

s+=p;  

应该是这样的:

#include <stdio.h>
int main(void)
{
    int n,i;
    float p;
    printf("Enter the maximum power n :");
    scanf("%d",&n);
    p=0;
   for (i=0;i<n;i++)
   {
       p+=1/pow(2, i);
       printf("p = %f\n",p);
   }
   printf("The sum of this equation is :%f",p);
}

答案 1 :(得分:1)

您需要添加<math.h>才能获得pow()的正确原型。

您可能还需要链接到数学库gcc main.c -Wall -lm

答案 2 :(得分:1)

#include <math.h>
....
for (i=0;i<n;i++)
{
    p=1/pow(2, i);
    s+=p;
    printf("s = %f\n",s);
}
printf("The sum of this equation is :%f",s);

答案 3 :(得分:1)

您的程序存在多个问题。启用编译器警告应该告诉您其中一些警告。

  1. 您应该包含包含pow函数声明的C标头。
  2. 您每次添加两次加数。
  3. 在第二个printf语句中,您传递float。但%f格式说明符需要double参数。在第三个printf语句中,将指针传递给浮点数。
  4. 另一个美容问题是,您的main函数应返回int

答案 4 :(得分:0)

只是一个猜测,可以替换

p+=1/pow(2, i);

p+=1.0f/(float)pow(2, i);

printf("The sum of this equation is :%f",&s);

printf("The sum of this equation is :%f",s);

答案 5 :(得分:0)

错字可能是..但你会说%fs(不是&s

printf("The sum of this equation is :%f",s);

旁注:

包含<math.h>后,您将收到使用正确pow(..)原型的编译器警告。下面的代码是相关的。

p+=1.0f/(float)pow(2.0f, i);