• LQ0250 n进制小数【程序填空】


    题目来源:蓝桥杯2011初赛 C++ A组D题

    题目描述
    本题为代码补全填空题,请将题目中给出的源代码补全,并复制到右侧代码框中,选择对应的编译语言(C/Java)后进行提交。若题目中给出的源代码语言不唯一,则只需选择其一进行补全提交即可。复制后需将源代码中填空部分的下划线删掉,填上你的答案。提交后若未能通过,除考虑填空部分出错外,还需注意是否因在复制后有改动非填空部分产生错误。

    将任意十进制正小数分别转换成 2,3,4,5,6,7,8,9 进制正小数,小数点后保留 8 位,并输出。

    例如:若十进制小数为 0.795,则输出:

        十进制正小数 0.795000 转换成 2 进制数为: 0.11001011
        十进制正小数 0.795000 转换成 3 进制数为: 0.21011011
        十进制正小数 0.795000 转换成 4 进制数为: 0.30232011
        十进制正小数 0.795000 转换成 5 进制数为: 0.34414141
        十进制正小数 0.795000 转换成 6 进制数为: 0.44341530
        十进制正小数 0.795000 转换成 7 进制数为: 0.53645364
        十进制正小数 0.795000 转换成 8 进制数为: 0.62702436
        十进制正小数 0.795000 转换成 9 进制数为: 0.71348853
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    以下代码提供了这个功能。其中,dTestNo 表示待转的十进制小数。iBase 表示进制数。请填写缺失的部分。

    源代码
    C

    #include 
    #include 
    void fun(double dTestNo, int iBase)
    {
        int iT[8];
        int iNo;
    
        printf("十进制正小数 %f 转换成 %d 进制数为: ",dTestNo, iBase);
    
        for(iNo=0;iNo<8;iNo++)
        {
            dTestNo *= iBase;
            iT[iNo] = ________________;
            if(___________________) dTestNo -= iT[iNo];
        }
        
        printf("0.");
        for(iNo=0; iNo<8; iNo++) printf("%d", iT[iNo]);
        printf("\n");
    }
    
    void main ( )
    {    
        double dTestNo= 0.795;
        int iBase;
    
        for(iBase=2;iBase<=9;iBase++)
            fun(dTestNo,iBase);
        printf("\n");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    问题分析
    2个空分别填入“(int)dTestNo”和“dTestNo > 0”
    函数main()的类型应该从“void”改为“int”,否则编译错误,原程序BUG。

    AC的C语言程序如下:

    #include 
    #include 
    void fun(double dTestNo, int iBase)
    {
        int iT[8];
        int iNo;
    
        printf("十进制正小数 %f 转换成 %d 进制数为: ",dTestNo, iBase);
    
        for(iNo=0;iNo<8;iNo++)
        {
            dTestNo *= iBase;
            iT[iNo] = (int)dTestNo;
            if(dTestNo > 0) dTestNo -= iT[iNo];
        }
        
        printf("0.");
        for(iNo=0; iNo<8; iNo++) printf("%d", iT[iNo]);
        printf("\n");
    }
    
    int main ( )
    {    
        double dTestNo= 0.795;
        int iBase;
    
        for(iBase=2;iBase<=9;iBase++)
            fun(dTestNo,iBase);
        printf("\n");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
  • 相关阅读:
    【教学类-12-08】20221111《连连看竖版6*6 (3套题目空心图案(中班教学)》(中班主题《》)
    高数值孔径(NA)物镜的聚焦分析
    web前端日常更新 8.16
    zblog翻译插件-zblog自动采集翻译插件免费
    Spring Boot Admin2 AdminServerAutoConfiguration详解
    最长重复子数组
    SOC设计:关于reset的细节
    Android7.1 ROOT权限的获取
    UEFI-PciHostBridge
    【板栗糖GIS】DOS—如何在目录文件中批量建立子文件夹
  • 原文地址:https://blog.csdn.net/tigerisland45/article/details/128030858