以下是C语言程序 将十进制转换成任意进制 有些地方不懂 还望指教
#include<stdio.h>voidmain(){intidec,i,idr,p=0,ibase;charstrdr[20],t;//为什么定义字符类型strdr[...
#include<stdio.h>
void main()
{
int idec,i,idr,p=0,ibase;
char strdr[20],t;//为什么定义字符类型 strdr[20]是什么意思 为什么是20?
printf("输入要转换的十进制数:");
scanf("%d",&idec);
printf("输入要转换的进制基数:");
scanf("%d",&ibase);
while(idec!=0)
{
idr=idec%ibase;
if(idr>=10)
strdr[p++]=idr-10+65;//为什么是strdr[p++] idr-10+65从何而来 ???为什么要有这一步????
else
strdr[p++]=idr+48;//idr+48从何而来???为什么要有这一步???
idec/=ibase;
}
for(i=0;i<p/2;i++)
{
t=strdr[i];
strdr[i]=strdr[p-i-1];
strdr[p-i-1]=t;
}
strdr[p]='\0';这是什么意思??可否省去
printf("转换成%d进制后的数为:%s",ibase,strdr);
printf("\n");
} 展开
void main()
{
int idec,i,idr,p=0,ibase;
char strdr[20],t;//为什么定义字符类型 strdr[20]是什么意思 为什么是20?
printf("输入要转换的十进制数:");
scanf("%d",&idec);
printf("输入要转换的进制基数:");
scanf("%d",&ibase);
while(idec!=0)
{
idr=idec%ibase;
if(idr>=10)
strdr[p++]=idr-10+65;//为什么是strdr[p++] idr-10+65从何而来 ???为什么要有这一步????
else
strdr[p++]=idr+48;//idr+48从何而来???为什么要有这一步???
idec/=ibase;
}
for(i=0;i<p/2;i++)
{
t=strdr[i];
strdr[i]=strdr[p-i-1];
strdr[p-i-1]=t;
}
strdr[p]='\0';这是什么意思??可否省去
printf("转换成%d进制后的数为:%s",ibase,strdr);
printf("\n");
} 展开
3个回答
展开全部
#include<stdio.h>
void main()
{
int idec,i,idr,p=0,ibase;
char strdr[20],t;//定义字符类型 strdr[20]用于存放字符串,至于下标是几无所谓,但要长一些,否则位数不够(特别是转为二进制数.
printf("输入要转换的十进制数:");
scanf("%d",&idec);
printf("输入要转换的进制基数:");
scanf("%d",&ibase);
while(idec!=0)
{
idr=idec%ibase;
if(idr>=10)
strdr[p++]=idr-10+65;//是strdr[p++] idr-10+65是为了表示数码大于10,要从字母'A'开始向后数(65是字符'A'的ASCII码).
else
strdr[p++]=idr+48;//idr+48是为了将数码以字符形式表示(48是字符'0'的ASCII码)
idec/=ibase;
}
for(i=0;i<p/2;i++)
{
t=strdr[i];
strdr[i]=strdr[p-i-1];
strdr[p-i-1]=t;
}
strdr[p]='\0';是字符串结束标志,防止出错,不可省去
printf("转换成%d进制后的数为:%s",ibase,strdr);
printf("\n");
}
void main()
{
int idec,i,idr,p=0,ibase;
char strdr[20],t;//定义字符类型 strdr[20]用于存放字符串,至于下标是几无所谓,但要长一些,否则位数不够(特别是转为二进制数.
printf("输入要转换的十进制数:");
scanf("%d",&idec);
printf("输入要转换的进制基数:");
scanf("%d",&ibase);
while(idec!=0)
{
idr=idec%ibase;
if(idr>=10)
strdr[p++]=idr-10+65;//是strdr[p++] idr-10+65是为了表示数码大于10,要从字母'A'开始向后数(65是字符'A'的ASCII码).
else
strdr[p++]=idr+48;//idr+48是为了将数码以字符形式表示(48是字符'0'的ASCII码)
idec/=ibase;
}
for(i=0;i<p/2;i++)
{
t=strdr[i];
strdr[i]=strdr[p-i-1];
strdr[p-i-1]=t;
}
strdr[p]='\0';是字符串结束标志,防止出错,不可省去
printf("转换成%d进制后的数为:%s",ibase,strdr);
printf("\n");
}
追问
strdr[p++]=idr-10+65 为什么是减10加65 而不是其他数字呢
strdr[p++]=idr+48 又为什么是加48呢
追答
10对应的是'A',不是0对应'A',也就是10-A
整数0和字符'0'对应则不然.
主要是起始值不同,从0开始对应,与从10开始对应是不一样的,
也许写成这样你就明白了:
strdr[p++]=idr-10+65
strdr[p++]=idr-0+48
展开全部
#include<stdio.h>
void main()
{
int idec,i,idr,p=0,ibase;
char strdr[20],t;//为什么定义字符类型 strdr[20]是什么意思 为什么是20?
//这个字符串数组就是存放转换后的数值ASCILL码,20这个倒没什么,够用就可以了,也可以30/40
printf("输入要转换的十进制数:");
scanf("%d",&idec);
printf("输入要转换的进制基数:");
scanf("%d",&ibase);
while(idec!=0)
{
idr=idec%ibase;
if(idr>=10)
strdr[p++]=idr-10+65;//为什么是strdr[p++] idr-10+65从何而来 ???为什么要有这一步????
//转换后当然要放到数组里面了,所以strdr[p++]。idr-10+65这个是把任意进制大于10部分用字母ABCDEFG...表示,不然大于10你怎么用一个符号表示出来。(65就‘A’的ASCILL码)
else
strdr[p++]=idr+48;//idr+48从何而来???为什么要有这一步???
//把转换的数值用ASCILL 0123456789表示出来。(48就‘0’的ASCILL码)
idec/=ibase;
}
for(i=0;i<p/2;i++)
{
t=strdr[i];
strdr[i]=strdr[p-i-1];
strdr[p-i-1]=t;
}
strdr[p]='\0';这是什么意思??可否省去
//字符串的结束符号,不能省。不然打印就不确定在哪里结束了
printf("转换成%d进制后的数为:%s",ibase,strdr);
printf("\n");
}
void main()
{
int idec,i,idr,p=0,ibase;
char strdr[20],t;//为什么定义字符类型 strdr[20]是什么意思 为什么是20?
//这个字符串数组就是存放转换后的数值ASCILL码,20这个倒没什么,够用就可以了,也可以30/40
printf("输入要转换的十进制数:");
scanf("%d",&idec);
printf("输入要转换的进制基数:");
scanf("%d",&ibase);
while(idec!=0)
{
idr=idec%ibase;
if(idr>=10)
strdr[p++]=idr-10+65;//为什么是strdr[p++] idr-10+65从何而来 ???为什么要有这一步????
//转换后当然要放到数组里面了,所以strdr[p++]。idr-10+65这个是把任意进制大于10部分用字母ABCDEFG...表示,不然大于10你怎么用一个符号表示出来。(65就‘A’的ASCILL码)
else
strdr[p++]=idr+48;//idr+48从何而来???为什么要有这一步???
//把转换的数值用ASCILL 0123456789表示出来。(48就‘0’的ASCILL码)
idec/=ibase;
}
for(i=0;i<p/2;i++)
{
t=strdr[i];
strdr[i]=strdr[p-i-1];
strdr[p-i-1]=t;
}
strdr[p]='\0';这是什么意思??可否省去
//字符串的结束符号,不能省。不然打印就不确定在哪里结束了
printf("转换成%d进制后的数为:%s",ibase,strdr);
printf("\n");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char strdr[20],t;//为什么定义字符类型 strdr[20]是什么意思 为什么是20?
是一个字符串;;。,(数组)0),至于20是自己随即定的 无所谓的
strdr[p++]=idr-10+65;//为什么是strdr[p++] idr-10+65从何而来 ???为什么要有这一步????
万一是十进制之上的使用字母 所以65是大写字母a的asic码
strdr[p++]=idr+48;//idr+48从何而来???为什么要有这一步???
48是0的asic码值
strdr[p]='\0';这是什么意思??可否省去
不可因为他是字符串结尾标志
是一个字符串;;。,(数组)0),至于20是自己随即定的 无所谓的
strdr[p++]=idr-10+65;//为什么是strdr[p++] idr-10+65从何而来 ???为什么要有这一步????
万一是十进制之上的使用字母 所以65是大写字母a的asic码
strdr[p++]=idr+48;//idr+48从何而来???为什么要有这一步???
48是0的asic码值
strdr[p]='\0';这是什么意思??可否省去
不可因为他是字符串结尾标志
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询