兄弟们!一道关于数值的数制转换有关问题的疑问 多谢大家
兄弟们!一道关于数值的数制转换问题的疑问 谢谢大家
例题 数值的数制转换。将一个十进制数转换为指定数制的值。即输入两个十进制数,第一个是要被转换的数,第二个是转换时所用的数制。数制限定为2-16。
例题中的程序如下
/* Note:Your choice is C IDE */
#include "stdio.h "
void display (char Data [],int count,int numb,int base);
void Backward (char Data[],int count);
int convert (char *pDigitChar,int mumb,int mumeric,char *pData);
main()
{
char DigitChar [16]={ '0 ', '1 ', '2 ', '3 ', '4 ', '5 ', '6 ', '7 ', '8 ', '9 ', 'A ', 'B ', 'C ', 'D ', 'E ', 'F '};
int numb,numeric,count;
char Data [50]={ '\0 '};
printf ( "The program convert a inteager with a given base.\n ");
printf ( "please input a inteager and a base:\n ");
scanf ( "%d%d ",&numb,&numeric);
count=convert (DigitChar,numb,numeric,Data);
Backward (Data,count);
display (Data,count,numb,numeric);
}
int convert (char *pDigitChar,int numb,int numeric,char *pData)
{
int cnt=0;
int rest;
do
{
rest =numb%numeric;
pData [cnt]=pDigitChar [rest];
cnt++;
numb=numb/numeric;
}
while (numb> 0);
return cnt;
}
void Backward (char Data [],int count)
{
int k,m;
char t;
for (k=0,m=count-1;k <m;k++,m--)
{
t=Data [k];Data [k]=Data [m];Data [m]=t;
}
}
void display (char Data [],int count,int numb,int base)
{
int k;
printf ( "The digit in %d base of the number %d is: ",base,numb);
for (k=0;k <count;k++)
printf ( "%c ",Data [k]);
printf ( "\n ");
}
请问在这个函数中
void Backward (char Data [],int count)
{
int k,m;
char t;
for (k=0,m=count-1;k <m;k++,m--)
{
t=Data [k];Data [k]=Data [m];Data [m]=t;
}
他的逻辑似乎表达的是把原数组按逆序数排列,但是。。。不太理解k++和m--的循环条件k <m, 在我的想法是 循环条件是k <m为前提 那末 k在不断的增大 m在不断的减小 总有一个地方k=m吧 那该数组就无法完全都按照逆序排列了 。。。请各位大虾 不吝赐教!谢谢!
------解决方案--------------------
恩,这个函数就是把原数组按逆序数排列.
以数组中间为分界线,k=m时交换完毕了.
------解决方案--------------------
请楼主参考以下程序:
记着看后别忘加分哦!
#include <stdio.h>
main()
{
int i,radix;
long n;
char a[33]; /*存放结果的数组*/
void trans10_2_8_16(char *p,long m,int base); /*转换函数说明*/
printf( "\n input radix(2,8,16:) "); /*输入转换基数*/
scanf( "%d ",&radix);
printf( "\n input a positive integer: "); /*输入被转换数*/
scanf( "%ld ",&n);
trans10_2_8_16(a,n,radix); /*调用转换函数*/
for(i=strlen(a)-1;i> =0;i--) /*逆向输出字符串*/
例题 数值的数制转换。将一个十进制数转换为指定数制的值。即输入两个十进制数,第一个是要被转换的数,第二个是转换时所用的数制。数制限定为2-16。
例题中的程序如下
/* Note:Your choice is C IDE */
#include "stdio.h "
void display (char Data [],int count,int numb,int base);
void Backward (char Data[],int count);
int convert (char *pDigitChar,int mumb,int mumeric,char *pData);
main()
{
char DigitChar [16]={ '0 ', '1 ', '2 ', '3 ', '4 ', '5 ', '6 ', '7 ', '8 ', '9 ', 'A ', 'B ', 'C ', 'D ', 'E ', 'F '};
int numb,numeric,count;
char Data [50]={ '\0 '};
printf ( "The program convert a inteager with a given base.\n ");
printf ( "please input a inteager and a base:\n ");
scanf ( "%d%d ",&numb,&numeric);
count=convert (DigitChar,numb,numeric,Data);
Backward (Data,count);
display (Data,count,numb,numeric);
}
int convert (char *pDigitChar,int numb,int numeric,char *pData)
{
int cnt=0;
int rest;
do
{
rest =numb%numeric;
pData [cnt]=pDigitChar [rest];
cnt++;
numb=numb/numeric;
}
while (numb> 0);
return cnt;
}
void Backward (char Data [],int count)
{
int k,m;
char t;
for (k=0,m=count-1;k <m;k++,m--)
{
t=Data [k];Data [k]=Data [m];Data [m]=t;
}
}
void display (char Data [],int count,int numb,int base)
{
int k;
printf ( "The digit in %d base of the number %d is: ",base,numb);
for (k=0;k <count;k++)
printf ( "%c ",Data [k]);
printf ( "\n ");
}
请问在这个函数中
void Backward (char Data [],int count)
{
int k,m;
char t;
for (k=0,m=count-1;k <m;k++,m--)
{
t=Data [k];Data [k]=Data [m];Data [m]=t;
}
他的逻辑似乎表达的是把原数组按逆序数排列,但是。。。不太理解k++和m--的循环条件k <m, 在我的想法是 循环条件是k <m为前提 那末 k在不断的增大 m在不断的减小 总有一个地方k=m吧 那该数组就无法完全都按照逆序排列了 。。。请各位大虾 不吝赐教!谢谢!
------解决方案--------------------
恩,这个函数就是把原数组按逆序数排列.
以数组中间为分界线,k=m时交换完毕了.
------解决方案--------------------
请楼主参考以下程序:
记着看后别忘加分哦!
#include <stdio.h>
main()
{
int i,radix;
long n;
char a[33]; /*存放结果的数组*/
void trans10_2_8_16(char *p,long m,int base); /*转换函数说明*/
printf( "\n input radix(2,8,16:) "); /*输入转换基数*/
scanf( "%d ",&radix);
printf( "\n input a positive integer: "); /*输入被转换数*/
scanf( "%ld ",&n);
trans10_2_8_16(a,n,radix); /*调用转换函数*/
for(i=strlen(a)-1;i> =0;i--) /*逆向输出字符串*/