铜锣烧学电子 2021-11-06 18:16 采纳率: 78.6%
浏览 33
已结题

输出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

  • 写回答

1条回答 默认 最新

  • 冷0_O 2021-11-06 18:38
    关注

    你的问题就在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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月14日
  • 已采纳回答 11月6日
  • 创建了问题 11月6日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)