电脑语言课件第3讲_数组及其应用.ppt
文本预览下载声明
数制转换:编程输入十进制N(N:-32767~32767),请输出它对应的二 进制、八进制、十六进制数。例如: INPUT N(-32767~32767):222 222 TURN INTO 2 222 TURN INTO 8:336 222 TURN INTO 16:DE [解]十进制数转化为某进制数的转换方法,如下图示: 除x逆序取余法 十进制数 x进制数(x=2,8,16等) 例中n=222(十进制数),转换成x进制数的过程如下图示: (1)十进制数→二进制数 (2)十进制数→八进制数 (3)十进制数→十六进制数 x=2 222 被除数(最大商) x=8 222 6 x=16 222 E … (14)10 2 111 0 低位 8 27 3 16 13 D … (13)10 2 50 1 逆 8 3 3 0 2 25 0 余 序 0 2 12 0 数 取 2 6 0 余 2 3 1 数 2 1 1 高位 0 (最大商为0时停止) 将每次所得的余数由下至上排列(逆序取余数),即有: (222)10 转换成二进制数得到:1100010 (222)10 转换成八进制数得到:336 (222)10 转换成十六进制数得到:13、14 这时得到的逆序余数串(在数组B[1]、B[2]、……、B[k]中)的每位数均为十进制数。程序中利用字符串A来计算x进制数的位数(即COPY(A,B[i]+1,1)),见下表: Program jj; var N,k:integer; B:array[1..1000] of integer; Procedure chg10(N,x:integer); {将十进制数N转换成x进制数} Begin k:=0; {转换后的x进制数位的长度} while N0 do {N不为0时} begin B[k]:=N mod x; {除以x取余数} N:=N Div x; {取最大商N} k:=k+1; {x进制数位加1} end; end;{chg10} Procedure Sput(N,x:integer);{进制数输出} VAR i:integer; A:string; Begin A:=0123456789ABCDEF; {表示x进制数的位数串} write(N:6, Turn into ,x:2,:); for i:=k-1 downto 0 do write(copy(A,B[i]+1,1));{逆序输出x进制数} writeln; end; {Sput} begin {MAIN} write(Input N(-32767 to 32767):);readln(N); if (N=-32767)or(N32767) then begin writeln(Input error!);halt;end; chg10(N,2);Sput(N,2); {十进制数转换成2进制数,并输出} chg10(N,8);Sput(N,8); {十进制数转换成8进制数,并输出} chg10(N,16);Sput(N,16); {十进制数转换成16进制数,并输出} var num,t:array[1..100] of integer; n,i,j,sum,tem:integer; begin readln(n); for i:=1 to n do read(t[i]); for i:=1 to n do num[i]:=i;
显示全部