一.运行结果截图
1.十进制转二进制
2.十进制转八进制
3.十进制转十六进制
4.十六进制转十进制
5.当输入错误时给予提示
二.函数及其对应功能
1.十进制转二进制
void TenToTwo() {
int num, m, x, i;
i = 0;
int n = 2;
int a[32];
printf("输入一个整数:");
scanf("%d", &num);
m = num;
while (num > 0) {
x = (num % n);
a[i] = x;
num /= n;
i++;
}
printf("十进制数%d转换为二进制数为:", m);
for (i--;i >= 0;i--) {
printf("%d", a[i]);
}
printf("
");
}
2.十进制转八进制
void TenToEight() {
int num, m, x, i;
i = 0;
int n = 8;
int a[32];
printf("输入一个整数:");
scanf("%d", &num);
m = num;
while (num > 0) {
x = (num % n);
a[i] = x;
num /= n;
i++;
}
printf("十进制数%d转换为八进制数为:", m);
for (i--;i >= 0;i--) {
printf("%d", a[i]);
}
printf("
");
}
3.十进制转十六进制
void TenToSixteen() {
char arr[] = "0123456789ABCDEF";
char hex[16];
int i = 0;
int j = 0;
int num = 0, a = 0;
printf("输入一个整数:");
scanf("%d", &num);
a = num;
while (num) {
hex[i++] = arr[num % 16];
num /= 16;
}
printf("十进制数%d转换为十六进制数为:", a);
for (j = i - 1;j >= 0;j--) {
printf("%c", hex[j]);
}
printf("
");
}
4.二进制转十进制
void TwoToTen() {
int n, a;
int sum = 0, i = 0, m;
printf("输入一个二进制数:");
scanf("%d", &n);
a = n;
while (n != 0) {
m = n % 10;
if (m >= 2) {
printf("您输入的不是二进制数,请重新输入:
");
return TwoToTen ();
}
n /= 10;
sum += m * pow(2, i);
i++;
}
printf("二进制数%d转为十进制数为:%d
", a, sum);
}
5.八进制转十进制
void EightToTen() {
int n, a;
int sum = 0, i = 0, m;
printf("输入一个八进制数:");
scanf("%d", &n);
a = n;
while (n != 0) {
m = n % 10;
if (m > 7) {
printf("您输入的数不为八进制数,请重新输入:
");
return EightToTen();
}
n /= 10;
sum += m * pow(8, i);
i++;
}
printf("八进制数%d转换为十进制数为%d
", a, sum);
}
6.十六进制转十进制
void SixteenToTen() {
int num = 0;
printf("输入一个十六进制数:");
scanf("%x", &num);
printf("十六进制数%x转换为十进制数为%d
", num, num);
}
7.menu函数
void mune() {
printf("请选择
");
printf("1.十进制转换为二进制
");
printf("2.十进制转换为八进制
");
printf("3.十进制转换为十六进制
");
printf("4.二进制转换为十进制
");
printf("5.八进制转换为十进制
");
printf("6.十六进制转换为十进制
");
printf("0.退出
");
}
三.main函数
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main() {
int n = 0;
while (1) {
mune();
printf("请选择:");
scanf("%d", &n);
switch (n) {
case 1:TenToTwo();
break;
case 2:TenToEight();
break;
case 3:TenToSixteen();
break;
case 4:TwoToTen();
break;
case 5:EightToTen();
break;
case 6:SixteenToTen();
break;
case 0:
exit(0);
break;
default:
printf("您的选择错误!
");
break;
}
}
}
四.思维导图
五.遇到的问题
1.起初对于怎样转没有思路,然后先搞懂各个进制之间怎样转换,然后开始写函数,并通过用数组使得简单很多。
2.十进制转十六进制不会,然后通过百度知道可以使用%x直接转。
3.如果输入的值不是自己选择的进制需要提醒并重新输入,然后返回时没懂怎样写,使得返回不了,进入了死循环,之后才懂如果返回函数不需要前面的void,只需要直接写函数即可。
五.代码互评
网络1913杨涛
void Numchange(int m, int b)//将10进制数转化为任意进制数
{
int n = m;
int count = 0;
if (m == 0) printf("0");
while (n != 0)
{
n = n / b;
count++;
}
int number;
for (int i = count; i >= 1; i--)
{
number = m / (int)pow(b, i - 1);
if (number < 10) {
printf("%d", number);
}
else {
printf("%c", number + 55);
}
m = m % (int)pow(b, i - 1);
}
}
他先将所有转换为十进制然后继续再转换为任意进制数,代码很简洁明了,并且输入一个就可输出其他所有进制数。与他相比,我的代码就很复杂。
六.总结
1.通过写这次作业,让我对进制转换更加熟悉,并知道使用数组等使代码更加简单,同时我也注意到了有一个好的思路可以使得代码更加的简单明了,节省许多时间。
2.通过调用函数使得程序简单,提高运行速率,并使程序更易理解。