M084

02-程序修改题 软件154 范金瑞 1184浏览

所属年份:2010.9;2011.3;2011.9;

下列给定程序中,函数fun的功能是:将十进制正整数m转换成k(2≤k≤9)进制数,并按位输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。

请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!

#include <stdio.h>
#include <conio.h>
/*************found**************/
void fun(int m,int k);
{
    int aa[20], i;
    for(i=0; m; i++)
    {
        /*************found**************/
        aa[i]=m/k;
        m/=k;
    }
    for(; i; i--)
        /*************found**************/
        printf("%d",aa[i]);
}
main()
{
    int b,n;
    printf("\nPlease enter a number and a base:\n");
    scanf("%d%d",&n,&b);
    fun(n,b);
    printf("\n ");
}

【参考答案】

(1)void fun(int m, int k)
(2)aa[i]=m%k;
(3)printf("%d", aa[i-1]);

【解题思路】
(1)函数定义的格式错误,不应带有”;”。

(2)将十进制正整数转换为任意进制的数与十进制正整数转换成二进制的数的方法是一样的。从整数n译出它的各位k进制数值,需采用除k取余的方法,即求n除k的余数,得到它的k进制的个位数,接着将n除以k。在n不等于0的状况下循环,能顺序求出n的k进制的各个位上的数。

(3)在进行for(i=0;m;i++)循环结束时,i已经多加了一个1,所以这里要减去1。