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


    一.运行结果截图

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

  • 相关阅读:
    CRoss IndustryStandard Process- for Data Mining 跨行业数据挖掘标准流程(中)
    CRoss IndustryStandard Process- for Data Mining 跨行业数据挖掘标准流程(上)
    window下安装pip工具,再利用pip安装工具来安装其他的python包
    采用ubuntu系统来安装tensorflow
    eclipse中添加python开发环境
    分类器的评价指标
    HBase的基本架构及其原理介绍
    快速排序的递归方式和非递归方式
    DeepCTR专题:DeepFM论文学习和实现及感悟
    DeepCTR专题:Neural Factorization Machines 论文学习和实现及感悟
  • 原文地址:https://www.cnblogs.com/123123-/p/11830876.html
Copyright © 2020-2023  润新知