题目:分别编写把十进制整数转化为二进制和把二进制整数转化为十进制整数的函数,并编写主程序调用它们,以验证其正确性。
【算法】:将十进制整数转化为二进制整数的算法是:将十进制数除以2,得到一个商数和一个余数;再将商数除以2,又得到一个商数和一个余数;继续这个过程,直到商数为0为止。每次得到的余数(必定是0或1)就是对应二进制的各位数字。最后一次得到的余数为二进制的最高位,第一次得到的为二进制的最低位。
将二进制数转化为十进制数的算法是:将二进制数的各位数字乘以2的n次方再相加,其中n等于相应二进制数数字的位序号(从该整数的末位数起)减1;这样得到的和就是所求的十进制数。
【流程图】
shi_zhuan_er的流程图
i=0,静态数组a[24]
输出提示(printf (将十进制转换为二进制(n ) ); )
n0
k=n%2; n=(n-k )/2; a[i]=k; I;
i=23
输出a[i](printf('%d ',a[I] ); )
i=i-1
换行
返回
er_zhuan_shi的流程图:
m=0
输出提示(printf(2 (将二进制转换为十进制(n ) ); )
i=0
i=n
k=n-I-1; m=a[I]*pow(2,k ) m;
i=i 1
输出m(printf('%d ',m ); )
返回
因为主函数很简单,所以省略流程图。
【程序列表】:
/*5.c*/
#include'stdio.h '
#include'math.h '
void shi_zhuan_er(int n )
{int k; int i=0;
静态int a [ 24 ]
printf (将十进制转换为二进制(n );
wile(N0 ) )。
{k=n%2; n=(n-k )/2; a[i]=k; I; }
for(I=23; i=0; I----)
printf('%d ',a[i] );
printf((n );
返回;
}
voider_Zhuan_Shi(inta[],int n ) )。
{int k,I; int m=0;
printf(2 (将二进制数转换为十进制数(n );
for(I=0; i=n-1; I )
{k=n-i-1; m=a[I]*pow(2,k ) m; }
printf('%d ',m );
返回;
}
Void主() )
{char c; int n,I; int a[24];
printf ((将n十进制转换为二进制,或将二进制转换为十进制(se ) :(n ) );
扫描((n % c )、c );
if(c=='s ' )
{printf (输入数据:n ); scanf('%d ',n );
Shi_Zhuan_er(n;
}
elseif(c=='e ' ) )。
{printf (输入数据的位数:(n ) );
scanf('%d ',n );
printf ('输入数据(输入数字后请用空格分隔) :n );
for(I=0; in; I ) scanf('%d ',a[i];
er_Zhuan_Shi(a,n );
}
}
【运转结果】
是将十进制转换为二进制还是将二进制转换为十进制(se ) :
s
输入数据:
123
将十进制转换为二进制:
000000000000000001111011
重新运行:
是将十进制转换为二进制还是将二进制转换为十进制(se ) :
e
输入数据的位数:
6
输入数据(输入数字后请用空格分隔) :
1 0 1 0 1 1
将二进制数转换为十进制数:
43
转载于:https://www.cn blogs.com/sxmcacm/p/3388915.html