题目2 进制转换
本帖最后由 一世轻尘 于 2020-12-22 18:55 编辑求助2{:10_332:} 本帖最后由 风过无痕1989 于 2020-12-23 13:17 编辑
我晕,我选了一个最不好做的题目
// 十进制数转换为二进制数
#include <stdio.h>
char binaryNum; // 存放转换后得到的字符二进制码
int n, count = 0; // 计数十进制整数被2除的次数
int binary_num; // 存放转换过程中的数字二进制码
void main()
{
int i, num;
printf("输入一个十进制的整数:");
scanf("%d", &num);
while ((num / 2) != 1) // 判断条件为:除以2之后的商不等于1
{
binary_num = num % 2;// 取余后的数字存入数组
num /= 2; // num = num/2; 进行下一轮的判断
count++; // 此变量用来指定数组下标
}
binary_num = 1; // 最后一次除法做完以后,剩下的商一定是1,所以在最后手动添加一个1
printf("二进制数值为:");
for (i = count; i >= 0; i--)
{
binaryNum = binary_num + '0';
printf("%c", binaryNum);
}
printf("\n");
}
// 二进制数转换为十进制数
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0, j, k, l, m, n, num = 0;
double sum = 0;
printf("请输入二进制数的位数:");
scanf("%d", &n);
char ch, binaryNum; // 对于支持C99的编译器,元素个数用n
while ((ch = getchar()) != '\n') // 输入二进制数
{
binaryNum = ch;
i++;
}
n = i;
// 二进制转十进制
for(i = 0;i < 20;i++)
{
if(binaryNum != '0')
sum += pow(2,(20 - i - 1));
}
printf("转换成十进制数为:");
printf("%lf\n", sum);
}
// 二进制数转换成八进制数、十六进制数
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0, j, k, m, n = 20, num = 0;
double sum = 0;
printf("请输入二进制数的位数:");
scanf("%d", &n);
getchar();
char ch, binaryNum; // 对于支持C99的编译器,元素个数用n
char binary_Num; // 存放反序的二进制数
char Num8; // 存放八进制数
char Num16; // 存放十六进制数
while ((ch = getchar()) != '\n')// 输入二进制数
{
binaryNum = ch;
i++;
}
n = i;
printf("输入的二进制数为:");
for (i = 0;i < n;i++)
{
if (i % 4 != 0)
{
printf("%c", binaryNum);
}
else
{
printf(" ");
printf("%c", binaryNum);
}
}
printf("\n");
// 二进制数组反序
i = 0;
while ((n - i) > 0)
{
binary_Num = binaryNum;
i++;
}
binary_Num = '\0';
// 二进制转八进制
k = 0;
for (i = 0;i < n;i += 3)
{
for(j = 0;j < 3;j++)
{
m = binary_Num - '0'; // 将字符转换为数字
if (j == 0 && (m == 0 || m == 1)) // 多加的m条件是防止结束符参与计算
num = m * 1;
if (j == 1 && (m == 0 || m == 1))
num += m * 2;
if (j == 2 && (m == 0 || m == 1))
num += m * 4;
}
ch = num + '0'; // 将数字转换为字符
Num8 = ch;
num = 0;
k++;
}
Num8 = '\n';
i = 0; // 将反序的8进制数再反序回来
while ((k - i) > k / 2)
{
ch = Num8;
Num8 = Num8;
Num8 = ch;
i++;
}
printf("转换为8进制数为:");
for (i = 0;i < k;i++)
printf("%c", Num8);
printf("\n");
// 二进制转十六进制
k = 0;
for (i = 0;i < n;i += 4)
{
for (j = 0;j < 4;j++)
{
m = binary_Num - '0'; // 将字符转换为数字
if (j == 0 && (m == 0 || m == 1)) // 多加的m条件是防止结束符参与计算
num = m * 1;
if (j == 1 && (m == 0 || m == 1))
num += m * 2;
if (j == 2 && (m == 0 || m == 1))
num += m * 4;
if (j == 3 && (m == 0 || m == 1))
num += m * 8;
}
if (num >= 10 && num <= 16) // 将数字转换为字符
ch = (num - 10) + 'A';
else
ch = num + '0';
Num16 = ch;
num = 0;
k++;
}
Num16 = '\n';
i = 0; // 将反序的16进制数再反序回来
while ((k - i) > k / 2)
{
ch = Num16;
Num16 = Num16;
Num16 = ch;
i++;
}
printf("转换为16进制数为:");
for (i = 0;i < k;i++)
printf("%c", Num16);
printf("\n");
} 本帖最后由 jackz007 于 2020-12-22 21:13 编辑
#include <stdio.h>
#include <string.h>
//字符串倒序
void reverse(char s[])
{
char c ;
int i , m ;
for(m = 0 ; s ; m ++) ;
for(i = 0 ; i < m / 2 ; i ++) {
c = s ;
s = s ;
s = c ;
}
}
// 二进制字符串转换为整型数
int frombin(char s[])
{
int i , m, r ;
for(m = 0 ; s ; m ++) ;
for(r = i = 0 ; i < m ; i ++) r = r * 2 + s - '0' ;
return r ;
}
// 八进制字符串转换为整型数
int fromoct(char s[])
{
int i , m, r ;
for(m = 0 ; s ; m ++) ;
for(r = i = 0 ; i < m ; i ++) r = r * 8 + s - '0' ;
return r ;
}
// 十六进制字符串转换为整型数
int fromhex(char s[])
{
int i , m, r ;
char c ;
for(m = 0 ; s ; m ++) ;
for(r = i = 0 ; i < m ; i ++) {
c = s ;
if(c >= 'A' && c <= 'F') c += ' ' ;
if(c > '9') c = 10 + c - 'a' ;
else c = c - '0' ;
r = r * 16 + c ;
}
return r ;
}
//整型数转换为二进制字符串
char * tobin(char s[] , int d)
{
int i , m ;
for(i = 0 ; d ; d /= 2 , i ++) s = (d % 2) + '0';
s = '\0' ;
reverse(s) ;
return s ;
}
//整型数转换为八进制字符串
char * tooct(char s[] , int d)
{
int i , m ;
for(i = 0 ; d ; d /= 8 , i ++) s = (d % 8) + '0';
s = '\0' ;
reverse(s) ;
return s ;
}
//整型数转换为十六进制字符串
char * tohex(char s[] , int d)
{
char c ;
int i , m ;
for(i = 0 ; d ; d /= 16 , i ++) {
c = d % 16 ;
if(c > 9) s = c - 10 + 'a' ;
else s = c + '0' ;
}
s = '\0' ;
reverse(s) ;
return s ;
}
// 二进制字符串到八进制字符串转换
// s[]- 二进制字符串输入 ,t[] - 八进制字符串输出
char * bin2oct(char s[] , char t[])
{
return tooct(t , frombin(s)) ;
}
// 八进制字符串到十六进制字符串转换
// s[]- 八进制字符串输入 ,t[] - 十六进制字符串输出
char * bin2hex(char s[] , char t[])
{
return tohex(t , frombin(s)) ;
}
// 八进制字符串到二进制字符串转换
// s[]- 八进制字符串输入 ,t[] - 二进制字符串输出
char * oct2bin(char s[] , char t[])
{
return tobin(t , fromoct(s)) ;
}
// 八进制字符串到十六进制字符串转换
// s[]- 八进制字符串输入 ,t[] - 十六进制字符串输出
char * oct2hex(char s[] , char t[])
{
return tohex(t , fromoct(s)) ;
}
// 十六进制字符串到二进制字符串转换
// s[]- 十六进制字符串输入 ,t[] - 二进制字符串输出
char * hex2bin(char s[] , char t[])
{
return tobin(t , fromhex(s)) ;
}
// 十六进制字符串到八进制字符串转换
// s[]- 十六进制字符串输入 ,t[] - 八进制字符串输出
char * hex2oct(char s[] , char t[])
{
return tooct(t , fromhex(s)) ;
}
int main(void)
{
char s , t ;
int d ;
strcpy(s , "10101010") ;
printf("bin : %s\n" , s) ;
printf("oct : %s\n" , bin2oct(s , t)) ;
printf("dec : %d\n" , fromoct(t)) ;
printf("hex : %s\n" , oct2hex(t , s)) ;
} 风过无痕1989 发表于 2020-12-22 19:22
我晕,我选了一个最不好做的题目
擦,记得我们刚学一个月C的时候,这就是我们的作业{:10_266:} 一世轻尘 发表于 2020-12-23 10:54
擦,记得我们刚学一个月C的时候,这就是我们的作业
十进制转二进制,二进制转十进制不难,二进制转八进制,手动转很容易,程序转,绕得头晕,差不多花了两个小时,准备再发过来时,发现已经有人回答了,我也就不好意思再发过来了。
现在既然被你选为最佳答案,我还是发过来,补全这道题目吧
谢谢了! 风过无痕1989 发表于 2020-12-23 13:07
十进制转二进制,二进制转十进制不难,二进制转八进制,手动转很容易,程序转,绕得头晕,差不多花了两个 ...
这是之前的作业,我已经做一遍了,就是感觉有点绕,想看看别人的。{:10_264:}
页:
[1]