输出3的n次方,这个怎么改,不用pow函数


#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);
    }
}

img

你的问题就在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取绝对值,算出3n平方
        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;
}