数制转换问题(完整)
数制转换练习-答案

数制练习填空1. 两个8位二进制数和01001011进行逻辑加的结果为。
2. 十六进制数对应的十进制数字是。
3. 已知一个带符号整数的补码由两个1和六个0组成,则该补码能够表示的最小整数是-127 。
4. 二进制数和进行逻辑“与”运算,结果再与进行逻辑“或”运算,最终结果的十六进制形式为()。
5.Pentium处理器中的一个16位带符号整数,如果它的十六进制表示为FEDCH,那么它的十进制值为(-292)。
5. 对两个逻辑值1施行逻辑加操作的结果是1 。
6. .若A=1100,B=0010,A与B运算的结果是1110,则其运算可以是算术加,也可以是逻辑加判断1.每个十进制整数都可以精确的转换为二进制整数形式。
N2. 一个整数的补码就是其原码除符号位外取反加1。
Y单选1. 下面关于计算机中定点数与浮点数的一些叙述, 正确的是____B______A. 定点数只能表示纯小数B. 浮点数尾数越长, 数的精度就越高C. 定点数的数值范围一定比浮点数的数值范围大D. 定点数就是用十进制表示的数2. 下列有关" 权值" 表述正确的是____B______A. 权值是指某一数字符号在数的不同位置所表示的值的大小B. 二进制的权值是" 二", 十进制的权值是" 十"C. 权值就是一个数的数值D. 只有正数才有权值3. 下列有关" 基数" 表述正确的是____B______A. 基数是指某一数字符号在数的不同位置所表示的值的大小B. 二进制的基数是" 二”,十进制的基数是" 十"C. 基数就是一个数的数值D. 只有正数才有基数4. 十进制数"13", 用三进制表示为____C______B.1105. 下列各数都是五进制数, 其中____B______对应的十进制数是偶数。
B. 1016. 一个某进制的数"lAl”,其对应十进制数的值为300, 则该数为 CA. 十一进制B.十二进制C. 十三进制D. 十四进制7. 做无符号二进制加法:()2+(0000100l)2=_____C_____A. .11010101 1010011 D.8. 做无符号二进制减法:()2 -(000010Ol)2=____B______A. B.11000001 C. D.9. 做下列逻辑加法: V 00001001=____D______.11000001 D.10. 做下列逻辑乘法:1100101O∧00001001=_____A_____1000001 D.11. 根据两个一位二进制数的加法运算规则, 其和为1 的正确表述为_____C_____A. 这两个二进制数都为1B. 这两个二进制数都为OC. 这两个二进制数不相等D. 这两个二进制数相等12. 根据两个一位二进制数的加法运算规则, 其进位为1 的正确表述为____A______A. 这两个二进制数都为1B. 这两个二进制数中只有一个lC. 这两个二进制数中没有1D. 这两个二进制数不相等13. 用八进制表示一个字节的无符号整数, 最多需要____C______位位位位14. 用十六进制表示一个字节的无符号整数, 最多需要____B______位位位位15. 用八进制表示32 位二进制地址, 最多需要____C______位位位位16. 用十六进制表示32 位二进制地址, 最多需要___D_______位位位位17. 下列数中, 最大的数是____C______A.(00101011)2B.(052)8C.(44 ) 10D.(2A)1618. 下列数中, 最小的数是____A______A.(213)4B.(132)5C.(123)6D.(101)719. 下列关于"lkB" 准确的含义是___D_______个二进制位个字节个二进制位个字节20. 下列关于"lkb/s" 准确的含义是___A_______s 字节/s s 字节/s21. 十进制数"-43" 用8 位二进制补码表示为___A_______A. B.11010101 C.22.用8个bit位表示二进制带符号整数,在补码表示中表示整数、在原码表示中表示整数 B 。
数制练习题

1. 数制转换将十进制数 123 转换为二进制数。
将二进制数 110101 转换为十进制数。
将十六进制数 A3 转换为十进制数。
将十进制数 255 转换为十六进制数。
2. 数制运算计算 (1010)2 + (1101)2。
计算 (1001)2 (0110)2。
计算(1111)2 × (1010)2。
计算(1011)2 ÷ (110)2。
3. 二进制逻辑运算执行逻辑与运算:A = (1100)2, B = (1011)2,求 A & B。
执行逻辑或运算:A = (1100)2, B = (1011)2,求 A | B。
执行逻辑异或运算:A = (1100)2, B = (1011)2,求 A ⊕ B。
执行逻辑非运算:A = (1100)2,求 ~A。
4. 八进制与十六进制运算计算 (123)8 + (456)8。
计算 (ABC)16 (DEF)16。
计算(1A2)16 × (345)16。
计算(789)16 ÷ (123)16。
5. 数制表示与编码将 ASCII 码 'A' 转换为二进制数。
将二进制数 1100101 转换为 ASCII 码。
将十进制数 65 转换为八进制数。
将八进制数 123 转换为十进制数。
6. 数制应用一个十六进制数表示为 1A3F,求它的二进制表示。
一个二进制数表示为 11010101,求它的十六进制表示。
一个八进制数表示为 456,求它的十进制表示。
一个十进制数表示为 255,求它的二进制表示。
7. 复杂数制转换将十进制数 789 转换为二进制、八进制和十六进制。
将二进制数 11101101 转换为十进制、八进制和十六进制。
将十六进制数 1F2E 转换为二进制、八进制和十进制。
将八进制数转换为二进制、十六进制和十进制。
8. 数制错误与纠正9. 数制应用题一个十六进制数表示的内存地址为 1F2E,求它的下一个地址。
进制转化练习题

进制转化练习题一、十进制转二进制1. 将十进制数25转换为二进制数。
2. 将十进制数102转换为二进制数。
3. 将十进制数47转换为二进制数。
4. 将十进制数128转换为二进制数。
5. 将十进制数345转换为二进制数。
二、十进制转八进制1. 将十进制数56转换为八进制数。
2. 将十进制数123转换为八进制数。
3. 将十进制数432转换为八进制数。
4. 将十进制数789转换为八进制数。
5. 将十进制数1024转换为八进制数。
三、十进制转十六进制1. 将十进制数255转换为十六进制数。
2. 将十进制数4096转换为十六进制数。
3. 将十进制数65535转换为十六进制数。
4. 将十进制数10000转换为十六进制数。
5. 将十进制数56转换为十六进制数。
四、二进制转十进制1. 将二进制数1101转换为十进制数。
2. 将二进制数101010转换为十进制数。
3. 将二进制数111111转换为十进制数。
4. 将二进制数1000000转换为十进制数。
5. 将二进制数101010101转换为十进制数。
五、八进制转十进制1. 将八进制数67转换为十进制数。
2. 将八进制数123转换为十进制数。
3. 将八进制数456转换为十进制数。
4. 将八进制数7654转换为十进制数。
5. 将八进制数5转换为十进制数。
六、十六进制转十进制1. 将十六进制数1A转换为十进制数。
2. 将十六进制数FF转换为十进制数。
3. 将十六进制数ABC转换为十进制数。
4. 将十六进制数DEF转换为十进制数。
5. 将十六进制数转换为十进制数。
七、二进制转八进制1. 将二进制数110101转换为八进制数。
2. 将二进制数111000转换为八进制数。
3. 将二进制数10101010转换为八进制数。
4. 将二进制数11001100转换为八进制数。
5. 将二进制数11110000转换为八进制数。
八、二进制转十六进制1. 将二进制数1101转换为十六进制数。
数制转换(含答案)

全国计算机等级考试一级——数制转换练习1)二进制数11000000对应的十进制数是A)384 B)192C)96 D)3202)二进制数1010.101对应的十进制数是A)11.33 B)10.625C)12.755 D)16.753)十进制整数100转换为二进制数是A)1100100B)1101000 C)1100010 D)11101004)八进制数345对应的十进制数是A)225 B)265 C)235 D)2295)与十进制数4625等值的十六进制数为A)1211B)1121 C)1122 D)12216)十进制数269转换为十六进制数为A)10E B)10D C)10C D)10B7)十六进制数1A2H对应的十进制数是A)418B)308 C)208 D)5788)与十六进制数26CE等值的二进制数是A)011100110110010 B)0010011011011110 C)10011011001110D)1100111000100110 9)二进制数10100101011转换成十六进制数是A)52B B)D45D C)23C D)5E10)二进制数1111101011011转换成十六进制数是A)1F5B B)D7SD C)2FH3 D)2AFH11)为了避免混淆,十六进制数在书写时常在后面加上字母A)H B)Q C)D D)B12)下列4种不同数制表示的数中,数值最小的一个是A)八进制数247 B)十进制数169 C)十六进制数A6D)二进制数10101000 13)与十进制数1023等值的十六进制数为A)3FDH B)3FFH C)2FDH D)3FFH14)16个二进制位可表示整数的范围是A)0~65535 B)-32768~32767C)-32768~32768 D)-32768~32767或0~6553515)下列4种不同数制表示的数中,数值最小的一个是A)八进制数52 B)十进制数44 C)十六进制数2B D)二进制数101001 16)有一个数是123,它与十六进制数53相等,那么该数值是A)八进制数B)十进制数C)五进制D)二进制数17)下列4种不同数制表示的数中,数值最大的一个是A)八进制数227 B)十进制数789C)十六进制数1FF D)二进制数1010001 18)下列4种不同数制表示的数中,数值最小的一个是A)八进制数36B)十进制数32 C)十六进制数22 D)二进制数10101100 19)下列4个无符号十进制整数中,能用8个二进制位表示的是A)257 B)201 C)313 D)296第 1 页共2 页20)计算机内部采用的数制是A)十进制B)二进制C)八进制D)十六进制21)下列4种不同数制表示的数中,数值最大的一个是A)八进制数110 B)十进制数71 C)十六进制数4A D)二进制数1001001 22)二进制数101101011转换为八进制数是A)553B)554 C)555 D)56323)一个非零无符号二进制整数后加两个零,新数的值是原数值的A)4倍B)2倍C)1/4 D)1/224)一个非零无符号二进制整数后加一个零,新数的值是原数值的A)4倍B)2倍C)1/4 D)1/225)如果删除一个非零无符号二进制偶数后的2个0,则此数的值为原数A)4倍B)2倍C)1/2 D)1/426)一个字长为5位的无符号二进数能表示的十进制数值范围是A)1~32 B)0~31C)1~31 D)0~3227)一个字长为8位的无符号二进数能表示的十进制数值范围是A)0~256 B)0~255C)1~256 D)1~25528)已知a=00111000B和b=2FH,则两者比较的正确不等式是A)a>b B)a=b C)a<b D)不能比较29)已知A=10111110B和B=AEH,C=184D,则关系成立的不等式是A)A<B<C B)B<C<A C)B<A<C D)C<B<A30)设任意一个十进制数D,转换成对应的无符号二进制数为B,那么就这两个数字的长度即位数)而言,B与D相比A)B的数字位数一定小于D的数字位数B)B的数字位数一定大于D的数字位数C)B的数字位数小于或等于D的数字位数D)B的数字位数大于或等于D的数字位数第 2 页共2 页。
第13章数制转换问题

//将base(8)进制数a转换成十进制数
考
int sum = 0;
// sum存放a对应的十制数
代
int len = strlen(a); //计算a的位数
码
int weight = 1;
//存放base进制数各位上的位权值
for(int i = len - 1;i >= 0;i--)
{
sum += (a[i]-'0')*weight;
考
int len = 0, r ; do
//存放mnum的下标,及d%m的值
代
{
码
r = d % m ; mnum[len++] = r + '0';
d /= m;
}while(d != 0);
mnum[len] = '\0';
char t;
for(int i = 0, j= len - 1 ; i < j; i++, j--)
weight *= base;
}
return sum;
}
函数int OcToDec(char *a , int base)
方法二:对a从高位(左)向低位(右)扫描各个位 上数字,对应秦九韶算法。初始sum = 0,然后每次 循环执行sum=sum*base+a[i]-'0';
函数参考代码如下:
//输入十进制数d
char Mnum[100];
//存放d对应的M进制数
DToM(d, M, Mnum);
//将十进制数d转换成八进制数,存在Mnum中
printf("%s\n", Mnum);
数制的转换练习题

数制的转换练习题1. 将下列二进制数转换为八进制和十六进制:a) 11010b) 101101c) 111100112. 将下列八进制数转换为二进制和十六进制:a) 56b) 731c) 36733. 将下列十六进制数转换为二进制和八进制:a) ABb) CD7c) 3E94. 将下列十进制数转换为二进制、八进制和十六进制:a) 158b) 493c) 10235. 将下列二进制数转换为十进制、八进制和十六进制:a) 11011b) 101010c) 11111110答案:1.a) 11010的八进制为32,十六进制为1Ab) 101101的八进制为55,十六进制为2Dc) 11110011的八进制为363,十六进制为F32.a) 56的二进制为101110,十六进制为36b) 731的二进制为111011001,十六进制为1D9c) 3673的二进制为111110111011,十六进制为EFB3.a) AB的二进制为10101011,八进制为253b) CD7的二进制为11001110111,八进制为1577c) 3E9的二进制为1111101001,八进制为7624.a) 158的二进制为10011110,八进制为236,十六进制为9Eb) 493的二进制为111101101,八进制为755,十六进制为1EDc) 1023的二进制为1111111111,八进制为1777,十六进制为3FF5.a) 11011的十进制为27,八进制为33,十六进制为1Bb) 101010的十进制为42,八进制为52,十六进制为2Ac) 11111110的十进制为254,八进制为376,十六进制为FE通过以上练习题,我们可以学会将不同数制之间进行转换。
这对于计算机科学和电子工程领域的学习至关重要。
数制转换能够帮助我们更好地理解计算机内部的运算原理和数据存储方式。
掌握数制转换的技巧,不仅可以提高我们的计算能力,还可以帮助我们更深入地理解数字世界的运作机制。
数制及其转换-习题

第一节数制及其转换一、二、八、十六进制转十进制的方法:乘权相加法。
例如:(11010110)2 = 1×27 + 1×26 + 0×25 + 1×24 + 0×23 + 1×22 + 1×21 + 0×20 = (214)10(2365)8 = 2×83 + 3×82 + 6×81 + 5×80 = (1269)10(4BF)16 = 4×162 + 11×161 + 15×160 = (1215)10带小数的情况:(110.011)2 = 1×22 + 1×21 + 1×20 + 0×2-1 + 1×2-2 + 1×2-3 = (6.375)10(5.76)8= 5×80 + 7×8-1 + 6×8-2 = (5.96875)10(D.1C)16= 13×160+ 1×16-1 + 12*16-2 = (13.109375)10二、十进制化二进制的方法:整数部分除二取余法,小数部分乘二取整法。
例一:(43)10 = (101011)2例二:(0.375)10 = (0.011)2三、二进制转八进制的方法1位数八进制与二进制对应表八进制二进制0 0001 0012 0103 0114 1005 1016 1107 111转换方法:对二进制以小数点为分隔,往前往后每三位划为一组,不足三位补0,按上表用对应的八进制数字代入即可。
例如:(10111011.01100111) = 010,111,011.011,001,110 = (273.36)8三、二进制转十六进制的方法1位数十六进制与二进制对应表转换方法:对二进制以小数点为分隔,往前往后每四位划为一组,不足四位补0,按上表用对应的十六进制数字代入即可。
数制转化练习题

数制转化练习题1. 将十进制数63转换为二进制数。
解答:首先,用2去除63,得到商31和余数1。
然后,用2去除31,得到商15和余数1。
再接着,用2去除15,得到商7和余数1。
最后,用2去除7,得到商3和余数1。
将余数从下往上排列,得到二进制数111111。
所以,十进制数63转换为二进制数为111111。
2. 将十进制数128转换为八进制数。
解答:首先,用8去除128,得到商16和余数0。
然后,用8去除16,得到商2和余数0。
最后,用8去除2,得到商0和余数2。
将余数从下往上排列,得到八进制数200。
所以,十进制数128转换为八进制数为200。
3. 将二进制数110110转换为十进制数。
解答:将二进制数110110转换为十进制数的步骤如下:从右往左,第一位为0,第二位为1,第三位为1,第四位为0,第五位为1,第六位为1。
根据二进制数的权重规则,第一位权重为2^0,第二位权重为2^1,第三位权重为2^2,第四位权重为2^3,第五位权重为2^4,第六位权重为2^5。
将每一位的值与其对应的权重相乘,然后将它们相加,即可得到十进制数的值。
所以,二进制数110110转换为十进制数为54。
4. 将八进制数235转换为十进制数。
解答:将八进制数235转换为十进制数的步骤如下:从右往左,第一位为5,第二位为3,第三位为2。
根据八进制数的权重规则,第一位权重为8^0,第二位权重为8^1,第三位权重为8^2。
将每一位的值与其对应的权重相乘,然后将它们相加,即可得到十进制数的值。
所以,八进制数235转换为十进制数为157。
5. 将十六进制数3A转换为二进制数。
解答:将十六进制数3A转换为二进制数的步骤如下:首先,将十六进制数3A的每一位分别转换为四位的二进制数。
3转换为二进制数0011,A转换为二进制数1010。
将转换后的二进制数拼接在一起,得到二进制数00111010。
所以,十六进制数3A转换为二进制数为00111010。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计题目名称:数制转换问题课程名称:数据结构学生姓名:学号:学院名称:指导教师:目录一.需求分析………………………………………………………二.概要设计………………………………………………………三.详细设计………………………………………………………四.调试测试………………………………………………………五.总结……………………………………………………………一.需求分析应用环境设定:生活中我们需要将M进制的数转换为我们所需要的进制,从键盘任意输入一个M进制的数,对其进行转换成其他三种进制的数,然后再从电脑中显示出来,最终得到我们的结果。
用户界面:命令行界面,根据自己的要求,对界面的提示进行操作,正确输入我们需要的数据。
输入方式:首先输入将转换的进制数,回车确认;然后输入确定的数据,回车确认;接着选择要转换为的进制数,回车确认。
输出方式:界面直接输出,启动程序后,按照界面提示,输入数据,直接回车确认,显示屏即输出我们的数据结果。
数据储存方式:全部在内存存放,不使用硬盘上的文件或其他数据源,程序执行过程中和结束后不保存数据。
程序功能:1.根据界面提示输入M进制数据。
2.对任意M进制数据实行非M进制的转换。
二.概要设计在此说明数据结构设计和关键的算法设计思想1.用数组实现该问题D2M()函数和M2D()函数是实现该问题的主要函数。
D2M()函数是实现十进制转换为其它进制的函数,它是将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,接着通过递归调用D2M()函数依次将得到的整数部分依次先取余后取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。
而M2D()函数则是实现其他进制M转换为十进制,并将其转换为非M进制的数。
M进制转十进制则是从该M进制数的最后一位开始算,依次列为第0、1、2…n位并分别乘以M的0、1、2…n次方,将得到的次方相加便得到对应的十进制数,再调用D2M()函数将其转换为非M进制的数。
⑴i,j,y,n,s,m,r,reminder,x是定义的全局变量,初始值都为0;⑵D2M(int g,int h)是实现十进制数转换为M进制数的函数;⑶M2D(int e)是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非M进制数的转换;⑷H2D(int f)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非十六进制数的转换;⑸void main()是主函数,功能是给出测试的数据,并在特定条件下调用D2M()函数和M2D()函数。
使用简单一维数组int a[N],int b[N],int c[N]。
2.用栈实现该问题同样是利用D2M()和M2D()两个函数实现。
两个函数的思想同利用数组实现时相同。
只是栈具有后进先出的性质,故其用Pop()取数较数组的逆向取数方便些。
⑴SqStack定义栈,说明base为栈底指针,top为栈顶指针,stacksize为栈容量;⑵int InitStack(SqStack &S)到int DestroyStack(SqStack &S)六大模块分别表示构造一个空栈、用e表示栈元素、插入元素、删除元素、判断栈是否为空以及摧毁栈;⑶SqStack S是指定义栈S;⑷D2M(int a,int b)的功能是将十进制数转换成M进制的函数;⑸M2D()的功能是M进制转换为十进制的函数;⑹void main()是主函数。
其功能是输入需要测试的数据以及需要转换的进制,并在特定情形下调用D2M()函数和M2D()函数,而且实现M进制数向任意非M进制数的转换。
数据类型定义如下:typedef struct{int *base; 栈底int *top; 栈顶int stacksize;栈容量}SqStack;int InitStack(SqStack &S)构造一个个空栈int GetTop(SqStack S, int &e) 若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1int Push(SqStack &S , int e) 插入元素e为新的栈顶元素int Pop(SqStack &S, int &e) 若栈不空,则删除S的栈顶元素,用e返回其值,并返回0,否则返回1。
1.程序流程图若2.程序源代码A.用数组实现(文件名shuzu.cpp)#include<stdio.h>#include<math.h>#define N 1000int i,j,y,n,s;int m,r,reminder;int x; //全局变量默认初始化为0,不必再赋0了D2M(int g,int h) //十进制数转换为其他进制数{int c[N];i=0;reminder=g%h;g=g/h;if(reminder>9){c[i]=reminder+55;i++;}else{c[i]=reminder;i++;}if(g>0)D2M(g,h);for(j=i-1;j>=0;j--)if(c[j]>=65)printf("%c",c[j]);elseprintf("%d",c[j]);return 0;}M2D(int e) //二进制和八进制数转换为十进制数,并这转换为其他进制数{int a[N];printf("请输入%d进制位数:",m);scanf("%d",&n);printf("请输入%d进制的每位并使每位用空格隔开:",m);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=n-1;i>=0;i--){y+=(int)pow(e,j)*a[i]; //强制类型转换,以免造成数据丢失j++;}printf("需要转换的进制M:");scanf("%d",&s);printf("请输出转换成%d进制的结果:",s);D2M(y,s);return 0;}H2D(int f) //十六进制数转换为十进制数,并转换为其他进制数{int b[N];printf("请输入%d进制位数:",m);scanf("%d",&n);printf("请输入%d进制的每位并使每位用空格隔开:",m);for(i=0;i<n;i++)scanf("%x",&b[i]);for(i=n-1;i>=0;i--){y+=(int)pow(f,j)*b[i]; //强制类型转换,以免造成数据丢失j++;}printf("需要转换的进制M:");scanf("%d",&s);printf("请输出转换成%d进制的结果:",s);D2M(y,s);return 0;}void main(){printf("请给定一个需转换的进制M(2or8or10or16):");scanf("%d",&m);if(m==2||m==8) //二进制和八进制转换成十进制M2D(m);else if(m==16) //十六进制转换成十进制H2D(m);else if(m==10) //十进制转换成其它进制{printf("请输入一个%d进制数:",m);scanf("%d",&x);printf("请输入需要转换成的进制M(2or8or16):");scanf("%d",&r);printf("请输出转换成%d进制的结果:",r);D2M(x,r);}printf("\n");}B.用栈实现(文件名zhan.cpp)#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<math.h>#define STACK_INIT_SIZE 100 //存储空间初始分配量#define STACKINCREMENT 10 //存储空间分配增量int e,m,x,s,t; //x为要转换的十进制数,e 为临时用的的int 型变量int r,y,i,n;typedef struct{int *base; //栈底int *top; //栈顶int stacksize; //栈容量}SqStack;int InitStack(SqStack &S){ //构造一个空栈S.base=(int *)malloc(STACK_INIT_SIZE *sizeof(int));if(!S.base) exit(0); //存储空间失败S.top=S.base;S.stacksize=STACK_INIT_SIZE;return 0;}int GetTop(SqStack S, int &e){ //若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1if(S.top==S.base) return 1;e=*(S.top-1);return 0;}int Push(SqStack &S , int e){ //插入元素e为新的栈顶元素if(S.top-S.base>=S.stacksize){ //栈满,追加存储空间S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));if(!S.base) return 1 ; //存储分配失败S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;return 0;}int Pop(SqStack &S, int &e){ //若栈不空,则删除S的栈顶元素,用e返回其值,并返回0,否则返回1if(S.top==S.base) return 1;e=*--S.top;return 0;}int StackEmpty(SqStack S){ //若栈空,则返回1,否则返回0 if(S.top==S.base)return 1;return 0 ;}int DestroyStack(SqStack &S){ //销毁栈S,栈S不再存在free(S.base);S.top=NULL; //防止程序后面不小心使用了它S.base=S.top;return 0 ;}SqStack S; //定义栈SD2M(int a,int b) //十进制转换成其他进制的函数D2M(){while(a){r=a%b;if(r>9)r=r+55;Push(S,r); //压入栈a/=b; //转换成M进制printf("该数转换成%d进制的结果:",b);while(!StackEmpty(S)){Pop(S,e); //弹出栈if(e>=65)printf("%c",e);elseprintf("%d",e);}return 0;}M2D() //其他进制转换为十进制的函数M2D() {char c[1000];printf("请输入需要转换的数的位数:");scanf("%d",&n);printf("请输入需要转换的数的每位并用空格隔开:");for(i=0;i<n;i++){scanf("%x",&c[i]);Push(S,c[i]);i=0;while(!StackEmpty(S)){Pop(S,e);y+=(int)pow(m,i)*e;i++;}}void main(){InitStack(S); //构造一个空栈printf("请输入需要转换的进制M(2or8or10or16):");scanf("%d",&m);if(m==10) //十进制转换成其他进制{printf("请给定一个需要转换的10进制数:");scanf("%d",&x);printf("请输入需要转换成的进制数:");scanf("%d",&t);D2M(x,t);}if(m==2||m==8||m==16) //其他进制转换成十进制,且其他任意进制的相互转换{M2D();printf("给定要转换成的进制M:");scanf("%d",&s);D2M(y,s);}printf("\n");DestroyStack(S); //销毁栈S,栈S不再存在}四.调试测试1.十进制数365转换二进制数测试结果如下:(图1)图12.十六进制数1A2B3C转换十进制数测试结果如下:(图2)图23.二进制数11001100转换八进制数测试结果如下:(图3)图34.八进制数1234转换为十六进制数测试结果如下:(图4)图4 五.总结此次课程设计与以往不同:第一,时间是比较紧的,从题目分配到完成设计不足十天的时间,而且又是即将期末考试的这段时间;第二,人数和以往也不同,以前都是几个同学一起完成设计,而这次却是每个人单独完成自己的题目,所以人手也是比较紧的;第三,以前的课程设计是最后完成提交就行了,而这次我们必须时刻都提交自己课程设计的进程,中途随时交给指导老师批阅,避免同学最后时间才去完成作业的思想。