我应该做这个家庭作业有这个问题。
[它说创建一个能够计算并显示 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。 我做错了什么?
答案 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)
您的程序存在多个问题。启用编译器警告应该告诉您其中一些警告。
pow
函数声明的C标头。printf
语句中,您传递float
。但%f
格式说明符需要double
参数。在第三个printf
语句中,将指针传递给浮点数。另一个美容问题是,您的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)
错字可能是..但你会说%f
和s
(不是&s
)
printf("The sum of this equation is :%f",s);
旁注:
包含<math.h>
后,您将收到使用正确pow(..)
原型的编译器警告。下面的代码是相关的。
p+=1.0f/(float)pow(2.0f, i);