- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数制转换程序设计算法.
设计要求:
?给定一个M进制的数x1)求出此数x的10进制值2)实现对x向任意的一个非M进制的数的转换Numtochar和chartonum,设定字符与数字之间的对应关系:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ……. 35 0 2 3 4 5 6 7 8 9 a b c d e f g h ……. z
函数调用关系图:
main
initstack numpush charpop
chartonum push pop numtochar
程序代码:
//数制转换程序的代码
#includestdio.h
#includestdlib.h
#define STACKSIZE 100
#define STACKINCR 10
#define OK 1
#define ERROR -1
typedef int elemint;
//栈的结构
typedef struct{
int *top;
int *base;
int stacksize;
}Number;
//栈的初始化
int initstack(Number s){
s.base=(elemint*)malloc(STACKSIZE*sizeof(elemint));
if(!s.base) return ERROR;
s.top=s.base;
s.stacksize=STACKSIZE;
return OK;
}
//入栈操作
int push(Number s,elemint e){
if((s.top-s.base)=s.stacksize){
s.base=(elemint*)realloc(s.base,(STACKSIZE+STACKINCR)*sizeof(elemint));
if(!s.base) return ERROR;
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCR;
}
*(s.top)=e;
s.top++;
return OK;
}
//出栈操作
void pop(Number s,elemint e)
{
if(s.base!=s.top)
{
s.top--;
e=*s.top;
}
else
printf(栈为空!\n);
}
//字符变量转换数值变量函数
void chartonum(char c,elemint n)
{
if(c=1c=9) n=c-1+1;
if(c==0) n=0;
if(c=ac=z) n=c-a+10;
}
//数值变量转换字符变量函数
void numtochar(elemint n,char c)
{
if(n==0) c=0;
if(n0n10) c=n-1+1;
if(n=10n=35) c=n-10+a;
}
//输入字符变量(M进制)并转换为数值变量(M进制),入栈
void numpush(Number s)
{
int m,n,i,j;
char a[50];
printf(输入M进制数(2~36):\n);
scanf(%d,m);
printf(输出N进制数(2~36):\n);
scanf(%d,n);
printf(输入%d进制数:\n,m);
scanf(%s,a);
for(i=0;a[i]!=\0;i++)
{
chartonum(a[i],j);
push(s,j);
}
push(s,m);
push(s,n);
}
//出栈,转换为数值变量并输出
void charpop(Number s)
{
int m,n,z=0,t=1,i;
char c;
pop(s,n);
pop(s,m);
while(s.base!=s.top)
{
pop(s,i);
z=z+t*i;
t=t*m;
}//出栈,M进制转换为十进制
while(z!=0){
i=z%n;
push(s,i);
z=z/n;
}//十进制转换为N进制
printf(输出的进制数为:\n);
while(s.top!=s.base)
{
pop(s,i);
numtochar(i,c);
printf(%c,c);
}
printf(\n);
scanf(%c);
}
void main()
{
Number s;
initstack(s);
numpush(s)
文档评论(0)