问答题
给定程序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]);
答案考生文件夹 [解析] 函数的功能是将十进制正整数m转换成k(2≤k≤9)进制数。
(1)第二个标识下的“aa[i]=m/k; ”是进制的转换,应该是取余,所以第二个标识下“aa[i]m/k; ”应该改为“aa[i]=m%k; ”。
(2)数制转换处理过程中所得的结果,和实际要输出的结果顺序是相反的,所以必须对存放余数的数组反向输出。原题中“printf("%d", aa[i]); ”的下标有误。因为下标i的起始值为0,故反向输出时应该从i-1开始,因此改为“printf("%d", aa[i-1]); ”。
[考点] 一维数组、顺序程序设计。