这个结果如何全是0

这个结果怎么全是0
#include<stdio.h>
#include<math.h>
int main()
{
int i,n;
printf("请输入n\n");
scanf("%d",&n);
for(i=1;i<=n;i++)

printf("%d %d\n",i,pow(3,i));

return 0;

}
改成这样结果是是对的 上面的哪错了
#include<stdio.h>
#include<math.h>
int main()
{
int i,n,sum;
printf("请输入n\n");
scanf("%d",&n);
for(i=1;i<=n;i++){
  sum=pow(3,i);

printf("%d %d\n",i,sum);
  }

return 0;

}


------解决方案--------------------
C/C++ code
#include<stdio.h>
#include<math.h>
int main()
{
int i,n;
printf("请输入n\n");
scanf("%d",&n);
for(i=1;i<=n;i++)

printf("%d %d\n",i,(int)pow(3,i));   //  pow函数的输出不是int型的,需要转换

return 0;

}

------解决方案--------------------
C/C++ code

#include<stdio.h>
#include<math.h>
int main()
{
int i,n;
printf("请输入n\n");
scanf("%d",&n);
for(i=1;i<=n;i++)

printf("%d %d\n",i,(int)pow(3,i));   //  pow函数的输出不是int型的,需要转换

return 0;

}

------解决方案--------------------
pow函数原型
C/C++ code
double pow( double x, double y );

------解决方案--------------------
探讨

意思是说我下面的已经 将pow(3,i)赋给int型sum强制转换了 是吗