#include "stdio.h"
void main()
{
int n,i;
float s=1/3;
scanf("%d",&n);
for(i=0;i<=n;i++)
{
s=s*3;
printf("pow(3,%d) = %.0f\n",i,s);
}
}
你的问题就在float s=1/3;这个语句这里,在计算机中,同类型相互运算的结果也是同种类型,1/3是两个int型在运算,所以的到的结果是0.33333无限循环取整数部分,也就是1/3是等于0的,所以s的值一开始就是0。然而,两个不同类型进行运算,自动向高精度转化,你可以把1/3改成1/3.0,就代表一个int除以一个double,结果才是真正的三分之一。
再者,main函数的返回值只能是int,不要写成void main(即便有些老编译器支持这样),因为C语言只给出了int main()和int main(int argc,char *argv[]) 两者形式的主函数。最后对于浮点数(float、double),我建议用双精度的double而不是单精度的float。
优化代码如下:
int main()
{
int n = 0,flag = 0;
double sum = 1;
scanf("%d",&n);
if(0 == n){
printf("结果为:1\n");
return 0;
}
if(n < 0){ //如果是负数,先将n取绝对值,算出3的n平方
n = 0 - n;
flag = 1;
}
for(int i=0;i<n;i++) //3的正数n平方
sum = sum*3;
if(1 == flag){ //n是负数
sum = 1/sum;
}
printf("结果为:%lf\n",sum);
return 0;
}