第二次博客作业

一、运行截图

  1. 十进制转二进制
  2. 十进制转八进制
  3. 二进制转十进制
  4. 八进制转十进制

二、代码介绍

  1. 十转二
    void ten_two()
    {
    printf("请输入一个十进制数:\n");
    int n, a[100], item, m;
    scanf("%d", &n);
    item = 0;
    int i = 0;
    m = n;
    while (n > 0)
    {
    a[i] = n % 2;
    n = n / 2;
    i++;
    }
    int j;
    printf("%d的二进制数为:\n", m);
    for (j = i - 1; j >= 0; j--)
    printf("%d", a[j]);
    }

  2. 十转八
    void ten_eight()
    {
    printf("请输入一个十进制数:\n");
    int n, a[100], item, m;
    scanf("%d", &n);
    item = 0;
    int i = 0;
    m = n;
    while (n > 0)
    {
    a[i] = n % 8;
    n = n / 8;
    i++;
    }
    int j;
    printf("%d的八进制数为:\n", m);
    printf("0");
    for (j = i - 1; j >= 0; j--)
    printf("%d", a[j]);
    }

  3. 二转十
    void two_ten()
    {
    printf("请输入一个二进制数:\n");
    char str[50];
    scanf("%s", str);
    int item, i, lenght;
    int sum = 0;
    lenght = strlen(str);
    for (i = 0; i < lenght; i++)
    {
    item = str[i] - '0';
    sum = sum * 2 + item;
    }
    printf("%s的十进制数为:\n%d", str, sum);
    }

  4. 八转十
    void eight_ten()
    {
    printf("请输入一个八进制数:\n");
    printf("0");
    char str[50];
    scanf("%s", str);
    int item, i, lenght;
    int sum = 0;
    lenght = strlen(str);
    for (i = 0; i < lenght; i++)
    {
    item = str[i] - '0';
    sum = sum * 8 + item;
    }
    printf("0%s的十进制数为:\n%d", str, sum);
    }

三、main函数
int main()
{
printf("请选择:\n");
printf("(1) 十进制转二进制;\n");
printf("(2) 十进制转八进制;\n");
printf("(3) 十进制转十六进制;\n");
printf("(4) 二进制转十进制;\n");
printf("(5) 八进制转十进制;\n");
printf("(6) 十六进制转十进制;\n");
int choice;
scanf("%d", &choice);
switch (choice)
{
case 1:ten_two(); break;
case 2:ten_eight(); break;
case 3:ten_sixteen(); break;
case 4:two_ten();break;
case 5:eight_ten();break;
case 6:sixteen_ten();break;
default:printf("ERROR!"); break;
}
return 0;
}

四、函数关系图

五、问题
1.基础不好,刚开始的时候对题目无从下手。后来借鉴了同学的代码并在网上参考之后才开始着手。
2.函数定义和使用错误,没有写出正确的函数并且使用时报错。然后就去了解更多函数的用法,看一些例题,解决了该问题。

六、代码互评
钟雄飞
void shierba(int m) { //十进制转换成二、八进制
int number, d, i = 0;
int a[100];
printf("输入一个正整数:");
scanf("%d", &number);
while (number > 0)
{
d = (number % m);
a[i] = d;
number = number / m;
i++;
}
printf("进制转化结果是:");
for (i--; i >= 0; i--) //将数组倒序输出
printf("%d", a[i]);
printf("\n");

}

void erbashi(int m) { //二、八进制转换成十进制
int i, p = 0, sum = 0, e = 0, q = 0;
int b[100];
printf("输入需要转换的进制数位数:");
scanf("%d", &p);
printf("按位输入需要转换的进制数(以空格分开):\n");
for (i = 1; i <= p; i++) {
scanf("%d", &b[i]);
}
for (i = p; i > 0; i--) {
sum += b[i] * pow(m, e);
e++;
}
for (i = 1; i <= p; i++) { //判断输入的数是否符合二、八进制的要求
if (b[i] >= m) { //若有不合要求的令q++
q++;
}
}
if (q == 0) {
printf("进制转化结果是:%d\n", sum);
}
else { //只要至少有一个不合要求的数就输出"输入错误!"
printf("输入错误!");
fault ++;
}
}
钟雄飞只用了一个函数就实现了十进制对二进制和八进制之间的转换,而我需要用两个函数才能实现。他的代码明显比我要简洁许多。而且增加了十进制、二进制、八进制对十六进制间的转换,更加高级。

posted @ 2019-11-10 16:53  唐五  阅读(118)  评论(0编辑  收藏  举报