第二次博客作业进制转换器

一.运行结果截图

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

7.menu函数

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,只需要直接写函数即可。

五.代码互评

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

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