给定程序modil.c中函数fun()的功能是将一个十进制整数n转换成r(二~十六)进制形式。 例如,输入125 16,则输出7D。 输入9 2,则输出1001。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main()函数,

admin2023-02-27  34

问题 给定程序modil.c中函数fun()的功能是将一个十进制整数n转换成r(二~十六)进制形式。
  例如,输入125 16,则输出7D。
  输入9 2,则输出1001。
  请改正程序中的错误,使它能得出正确的结果。
  注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!
1 #include
2 void fun(int num,int r)
3 (int i=0,a[32];
4  char b[16]={’0'),’1','2','3','4','5','6','7','8’,'9','A','B','C','D','E’,'F'};
5    do
6    {
7    a=num%r;
8  /*********found*********/
9    num%=r;
10    i++;
11  /*********found*********/
11    }while(num==0);
12  /*********found*********/
13    for(i; i>0; --i)
14    printf("%c",b[a]);
15  }
16  int main()
17  {  int num,r;
18    prfntf("\n请输入整数和进制:");
19    scanf("%d%d",&num,&r);
20    fun(num,r);
21    prfntf("\n");
22    return 0;
23 }

选项

答案(1)num/=r;或者num=num/r; (2)while(num>0);或者while(num!=0); (3)for( --i;i>=0; --i)或者for(i --;i>=0: --i)

解析 将十进制整数转换为R进制数可以采用基数除法,即除基数取余法,余数逆序排列。
    (1)数组a中存放变量num除以r的余数。num等于变量num除以r的商,此处将num%=r;修改为num/=r;或者num=num/r;。
    (2)当变量hum的值为0时循环退出。正常进行循环的条件为num不等于0,或者num>0,此处将while(num==0)修改为while(num>0);或者while(num!=0);。
    (3)将得到的余数逆序存放,此时的i为余数的个数,此处需要i减1后,作为循环变量遍历数组a,循环条件为i>=0,此处将for(i;i>0;--i)修改为for( --i;i>=0; --i)或for(i --;i>=0; --i)。  
转载请注明原文地址:https://kaotiyun.com/show/3J0D777K
0

最新回复(0)