改错题
给定程序MODI1.c中函数fun的功能:将十进制正整数m转换成k(2≤k≤9)进制数,并按高位到低位顺序输出。
例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
请改正fun函数中的错误,使它能得出正确的结果。
注意:不要改动main函数。不得谱行或删行,也不得更改程序的结构!
给定源程序如下:
#include <conio.h>
#include <stdio.h>
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)aa[i]=m%k; (2)printf('%d',aa[i-1]); 答案考生文件夹
【答案解析】(1)将十进制正整数转换为任意进制的数与十进制正整数转换成二进制数的方法是一样的。从整数n移出它的各位k进制数值,需采用除k取余的方法,即求n除k的余数,得到它的k进制的个位数,接着将n除以k。在n不等于0的状况下循环,能顺序求出n的k进制的各个位上的数。 (2)在进行for(i=0;m;i++)循环结束时,i已经多加了一个1,所以这里要减去1。