介绍
数字系统是使用不同的符号和数学运算来表示数字的方式。在不同的数字系统之间进行转换是编程中的常见任务。在本实验中,我们将展示可以将数字从一个系统转换为另一个系统的程序。我们将涵盖以下内容:
- 二进制到十进制的转换
- 八进制到十进制的转换
- 十进制到二进制的转换(不使用递归)
- 十进制到二进制的转换(使用递归)
注意:你需要自己创建文件
~/project/main.c来练习编码,并学习如何使用 gcc 编译和运行它。
cd ~/project
## 创建 main.c
touch main.c
## 编译 main.c
gcc main.c -o main
## 运行 main
./main
二进制到十进制的转换
二进制是一种仅使用两个数字(0 和 1)的数字系统。十进制是一种使用十个数字(0 到 9)的数字系统。以下是将二进制数转换为其十进制等效值的 C 语言程序:
#include<stdio.h>
#include<math.h>
// 函数原型声明
int binary_decimal(int n);
int main()
{
printf("\n\n\t\tLabEx - 学习的最佳场所\n\n\n");
int n;
char c;
printf("请输入二进制数:");
scanf("%d", &n);
printf("\n\n\n%d 的十进制等效值为 %d\n\n", n, binary_decimal(n)); // 函数调用
printf("\n\n\t\t\t编程很有趣!\n\n\n");
return 0;
}
// 定义将二进制转换为十进制的函数
int binary_decimal(int n)
{
int decimal = 0, i = 0, rem;
while(n != 0)
{
rem = n%10; // 获取个位数字
n = n/10; // 获取除去个位数字后的数
/*
pow 是一个系统定义的函数,它接受
两个整数作为输入参数
*/
decimal += rem*pow(2, i++);
}
/*
将输入二进制数的十进制等效值
返回给函数调用
*/
return decimal;
}
八进制到十进制的转换
八进制是一种使用八个数字(0 到 7)的数字系统。以下是将八进制数转换为其十进制等效值的 C 语言程序:
#include<stdio.h>
#include<math.h>
int main()
{
printf("\n\n\t\tLabEx - 学习的最佳场所\n\n\n");
long int octal, val, decimal = 0;
int i = 0;
printf("请输入一个八进制数:");
scanf("%ld", &val);
octal = val;
while(octal != 0)
{
/*
i++ 是后置递增,即先赋值再递增
*/
decimal += (octal % 10)*pow(8, i++);
octal/=10; // 等同于 octal=octal/10
}
printf("\n\n\n%ld 的等效十进制值为 %ld\n\n\n", val, decimal);
printf("\n\n\t\t\t编程很有趣!\n\n\n");
return 0;
}
十进制到二进制的转换(非递归)
以下是将十进制数转换为其二进制等效值的 C 语言程序(不使用递归):
#include<stdio.h>
int main()
{
printf("\n\n\t\tLabEx - 学习的最佳场所\n\n\n");
int n,c,k;
printf("请输入一个十进制整数:");
scanf("%d", &n);
// 以 31 位格式输出
printf("\n\n\n十进制值 %d 的二进制等效值为:", n);
for(c = 31; c >= 0; c--)
{
k = n>>c;
/*
num&1 = 如果 num 的最后一位是 1,则返回 true
否则返回 false
*/
if(k&1)
printf("1");
else
printf("0");
}
printf("\n");
printf("\n\n\t\t\t编程很有趣!\n\n\n");
return 0;
}
十进制到二进制的转换(递归)
以下是将十进制数转换为其二进制等效值的 C 语言程序(使用递归):
#include<stdio.h>
// 函数原型声明
void decimal_binary(int );
void F(int );
void reverse(int );
int main()
{
printf("\n\n\t\tLabEx - 学习的最佳场所\n\n\n");
int n;
printf("\n\n请输入一个十进制整数:");
scanf("%d", &n);
// 以 31 位格式输出
printf("\n\n十进制值 %d 使用 decimal_binary 方法的二进制等效值为:", n);
decimal_binary(n); // 函数调用
printf("\n\n十进制值 %d 使用 F() 方法的二进制等效值为:", n);
F(n); // 函数调用
printf("\n\n值 %d 的二进制表示的反转为:", n);
reverse(n); // 函数调用
printf("\n\n\t\t\t编程很有趣!\n\n\n");
return 0;
}
// 函数定义
void decimal_binary(int i)
{
if(i <= 1)
printf("%d", i); // 以从上到下的格式打印
else
{
decimal_binary(i/2);
printf("%d", i%2);
}
}
void F(int j)
{
if(j/2)
{
F(j/2);
}
printf("%d", j%2);
}
void reverse(int k)
{
if(k <= 1)
printf("%d", k);
else
{
printf("%d", k%2);
F(k/2);
}
printf("\n\n");
}
总结
在本实验中,我们展示了可以在不同数字系统之间转换数字的程序。我们涵盖了二进制到十进制的转换、八进制到十进制的转换以及十进制到二进制的转换(使用和不使用递归)。我们希望本实验能帮助你理解如何在 C 语言编程中实现不同数字系统之间的转换。



