# 博客园作业2

### 二、介绍函数

###### 1.
void mune()
{
printf("请选择需要的进制转换\n");
printf("1、十进制转换二进制\n");
printf("2、二进制转换十进制\n");
printf("3、十进制转换八进制\n");
printf("4、八进制转换十进制\n");
printf("5、二进制转换八进制\n");
printf("6、八进制转换二进制\n");
printf("7、十进制转换十六进制\n");
printf("8、十六进制转换十进制\n");

###### 2.
void TenToTwo()

{
int number, m, c, i = 0, n = 2;
int a[32];
printf("输入一个整数：");
scanf("%d", &number);
m = number;
while (number > 0)
{
c = (number % n);
a[i] = c;
number = number / n;
i++;
}
printf("十进制数%d转换成二进制数是：", m);
for (i--; i >= 0; i--)
printf("%d", a[i]);
printf("\n");

###### 3.
void TwoToTen()
{
long long n, a;
int sum = 0, i = 0, m;
printf("输入一个二进制数: ");
scanf("%lld", &n);
a = n;
while (n != 0)
{
m = n % 10;
n /= 10;
sum += m * pow(2, i);
++i;
}
printf("二进制数 %lld 转换为十进制为 %d\n", a, sum);
}

###### 4.
void TenToEight()
{
int number, m, c, i = 0;
int n = 8;
int a[32];
printf("输入一个整数：");
scanf("%d", &number);
m = number;
while (number > 0)
{
c = (number % n);
a[i] = c;
number = number / n;
i++;
}
printf("十进制数%d转换成八进制数是：", m);
for (i--; i >= 0; i--)
printf("%d", a[i]);
printf("\n");
}

###### 5.
void EightToTen()
{
int n, a;
int sum = 0, i = 0, m;
printf("输入一个八进制数: ");
scanf("%d", &n);
a = n;
while (n != 0)
{
m = n % 10;
n /= 10;
sum += m * pow(8, i);
++i;
}
printf("八进制数 %d 转换为十进制为 %d\n", a, sum);
}

###### 6.
void TwoToEight()

{
long long n, a;
int sum = 0, j = 0, m;
printf("输入一个二进制数: ");
scanf("%lld", &n);
a = n;
while (n != 0)
{
m = n % 10;
n /= 10;
sum += m * pow(2, j);
++j;
}
int c;
int i = 0;
int b[32];
while (sum > 0)
{
c = (sum % 8);
b[i] = c;
sum = sum / 8;
i++;
}
printf("换成八进制数是：", sum);
for (i--; i >= 0; i--) {
printf("%ld", b[i]);
}
printf("\n");

###### 7.
void EightToTwo()
{
long long n, a;
int sum = 0, i = 0, m;
printf("输入一个八进制数: ");
scanf("%d", &n);
a = n;
while (n != 0)
{
m = n % 10;
n /= 10;
sum += m * pow(2, i);
++i;
}
int k, c, j = 0;
int b[32];
while (sum > 0)
{
c = (sum % 2);
b[j] = c;
sum = sum / 2;
j++;
}
printf("转换成二进制数是：", sum);
for (j--; j >= 0; j--)
printf("%d", b[j]);
printf("\n");
}

###### 8.
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 = num / 16;
}
printf("十进制数%d转换成十六进制数是：", a);
for (j = i - 1; j >= 0; --j)
printf("%c", hex[j]);
printf("\n");
}

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

### 三、main函数

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void TenToTwo();
void TwoToTen();
void TenToEight();
void EightToTen();
void TwoToEight();
void EightToTwo();
void TenToSixteen();
void SixteenToTen();

void mune()
{
printf("请选择需要的进制转换\n");
printf("1、十进制转换二进制\n");
printf("2、二进制转换十进制\n");
printf("3、十进制转换八进制\n");
printf("4、八进制转换十进制\n");
printf("5、二进制转换八进制\n");
printf("6、八进制转换二进制\n");
printf("7、十进制转换十六进制\n");
printf("8、十六进制转换十进制\n");

}
int main()
{
int choise = 0;
while (1)
{
mune();
printf("您的选择：");
scanf("%d", &choise);
switch (choise)
{
case 1:TenToTwo();
break;
case 2:TwoToTen();
break;
case 3:TenToEight();
break;
case 4:EightToTen();
break;
case 5:TwoToEight();
break;
case 6:EightToTwo();
break;
case 7:TenToSixteen();
break;
case 8:SixteenToTen();
break;

default:
printf("您的选择不正确\n");
break;
}
}
}

### 五、遇到的问题

1.一开始缺少函数说明导致编译错误；

2.二进制转八进制直接转太过复杂，通过百度查到了itoa函数但并不会用，经同学提醒先将二进制或八进制转成十进制，再转成八进制或二进制；

3.在编写函数时经常遇到重复定义，需要多加注意；

4.缺少错误提示

5.有些进制转化的方法一开始想不到，问同学后才想到

### 六、代码互评（曾广芝）

void turn3()
{
int a,b[30],c,i=0,d;
printf("请输入十进制数:");
scanf("%d",&a);
while(a!=0)
{
b[i]=a%16;
c=a/16;
a=c;
i++;
}
printf("转化为十六进制为:");
while(i>0)
{
d=b[--i];
if(d==10)
printf("A");
else
if(d==11)
printf("B");
else
if(d==12)
printf("C");
else
if(d==13)
printf("D");
else
if(d==14)
printf("E");
else
if(d==15)
printf("F");
else
printf("%d",d);
}
printf("感谢使用\n");
}

1.较多使用多分支结构较为繁琐

2.想到了将二、八进制先转成十进制在进行转化

3.有“感谢使用”和选择“是否继续使用”，比我的更像一个给别人使用的软件；

### 七、总结

posted on 2019-11-10 18:52  lim-M  阅读(151)  评论(0编辑  收藏  举报