# 二.函数及其对应功能

### 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("\n");
}


### 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("\n");
}


### 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("\n");
}


### 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("您输入的不是二进制数，请重新输入：\n");
return TwoToTen ();
}
n /= 10;
sum += m * pow(2, i);
i++;
}
printf("二进制数%d转为十进制数为：%d\n", 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("您输入的数不为八进制数，请重新输入：\n");
return EightToTen();
}
n /= 10;
sum += m * pow(8, i);
i++;
}
printf("八进制数%d转换为十进制数为%d\n", a, sum);
}


### 6.十六进制转十进制

void SixteenToTen() {
int num = 0;
printf("输入一个十六进制数：");
scanf("%x", &num);
printf("十六进制数%x转换为十进制数为%d\n", num, num);
}


void mune() {
printf("请选择\n");
printf("1.十进制转换为二进制\n");
printf("2.十进制转换为八进制\n");
printf("3.十进制转换为十六进制\n");
printf("4.二进制转换为十进制\n");
printf("5.八进制转换为十进制\n");
printf("6.十六进制转换为十进制\n");
printf("0.退出\n");
}


# 三.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("您的选择错误！\n");
break;
}
}
}


# 五.遇到的问题

1.起初对于怎样转没有思路，然后先搞懂各个进制之间怎样转换，然后开始写函数，并通过用数组使得简单很多。
2.十进制转十六进制不会，然后通过百度知道可以使用%x直接转。
3.如果输入的值不是自己选择的进制需要提醒并重新输入，然后返回时没懂怎样写，使得返回不了，进入了死循环，之后才懂如果返回函数不需要前面的void，只需要直接写函数即可。

# 五.代码互评

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.通过调用函数使得程序简单，提高运行速率，并使程序更易理解。

posted @ 2019-11-10 17:32  h_hhh  阅读(208)  评论(0编辑  收藏  举报