铜锣烧学电子 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 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?