• 第二次博客园作业


    一.运行截图

    1.启动界面

    2.输入运行

    3.输入无效

    4.退出

    二.

    三.函数介绍

    int translate(int number, int system);//在2转8进制或8转2进制时先转为十进制数
    int _2to8(int number, int system);//将二进制转为八进制
    int _2to10(int number, int system);//将二进制转为八进制
    int _8to2(int number, int system);//将八进制转为二进制
    int _8to10(int number, int system);//将八进制转为十进制
    int _10to2(int number, int system);//将十进制转为二进制
    int _10to8(int number, int system);//将十进制转为八进制
    int pow(int num, int n);//调用指数函数
    int judge(int number, int system);//判断输入数字与进制是否对应
    

    函数translate

    int translate(int number, int system) {
    	if (system == 2) {
    		return _2to10( number, system);//将二进制数转为十进制
    	}
    	if (system == 8) {
    		return _8to10(number,system);//将八进制数转为十进制
    	}
    }
    

    函数 _2to8(int number, int system)

    int _2to8(int number, int system) {
    	number = translate(number, system);//先转为十进制数
    	return _10to8(number, system);//将转换后的数转为八进制
    }
    

    函数 _2to10(int number, int system)

    int _2to10(int number, int system) {
    	int num[20] = {};
    	int sum = 0;
    	int i = 0, count = 0;
    	do {                               //将每一位数储存
    		num[i] = number % 10;
    		number = number / 10;
    		i++;
    		count++;
    	} while (number != 0);
    	for (i = 0; i < count; i++) {
    		sum = sum + num[i] * pow(2, i);//调用pow函数计算
    	}
    	return sum;
    }
    

    函数 _8to2(int number, int system)

    int _8to2(int number, int system) {
    	number = translate(number, system);//先转为十进制数
    	return _10to2(number, system);将转换后的数转为二进制
    }
    

    函数 _8to10(int number, int system)

    int _8to10(int number, int system) {
    	int num[20] = {};
    	int sum = 0;
    	int i = 0, count = 0;
    	do {
    		num[i] = number % 10;
    		number = number / 10;
    		i++;
    		count++;
    	} while (number != 0);
    	for (i = 0; i < count; i++) {
    		sum = sum + num[i] * pow(8, i);
    	}
    	return sum;
    }
    

    函数 _10to2(int number, int system)

    int _10to2(int number, int system) {
    	int a = 1, b = 0, r;
    	while (1)
    	{
    		r = number % 2;
    		number = number/2;
    		b += r * a;
    		a = a * 10;
    		if (number < 2)
    		{
    			b = b+number * a;
    			break;
    		}
    	}
    	return b;
    }
    

    函数_10to8(int number, int system)

    int _10to8(int number, int system) {
    	int a = 1, b = 0, r;
    	while (1)
    	{
    		r = number % 2;
    		number = number/2;
    		b =b + r * a;
    		a = a * 10;
    		if (number < 2)
    		{
    			b = b+number * a;
    			break;
    		}
    	}
    	return b;
    }
    

    四.main函数

    int main()
    {
    	int number, system;
    	int i = 1;//记录输入次数
    	printf("                                进制转换器
    欢迎您的使用
    ");
    	while (1) {//死循环进行连续输入
    		printf("%d.请输入数字及其对应进制(中间以空格间隔,输入进制为0时退出):", i);		
    		scanf("%d %d", &number, &system);
    			if (system == 0) break;//输入0时退出
    			if (judge(number, system) == 0) {//判断是否输入数字与进制匹配
    				if (system == 2) {
    					printf("八进制:%d
    ", _2to8(number, system));
    					printf("十进制:%d
    ", _2to10(number, system));
    				}
    				else if (system == 8) {
    					printf("二进制:%d
    ", _8to2(number, system));
    					printf("十进制:%d
    ", _8to10(number, system));
    				}
    				else if (system == 10) {
    					printf("二进制:%d
    ", _10to2(number, system));
    					printf("八进制:%d
    ", _10to8(number, system));
    				}
    
    				else printf("输入进制错误,请重新输入!
    ");//输入2,8,10,0以外的进制
    			}
    			else printf("您的数字与进制不匹配,请重新输入!
    ");
    			i++;
    			printf("
    
    ");
    	}
    	printf("谢谢使用!
    ");
    }
    

    五.

    六.遇到的问题

    1.在调用函数时将主函数变量名用于函数里

    解决:通过翻看vs错误列表找到原因

    2.在八进制转二进制和二进制转八进制时想着八进制1位对二进制三位的规则,但发现有些繁琐

    解决:在纸上举例计算,想起一般先转为十进制后再转换位目标进制

    3.在二进制转十进制函数中将用于记录二进制数位数的count变量在循环中赋值

    解决:在函数中用printf逐个变量逐个位置进行输出来寻找问题

    七.代码互评
    李永福

    void sixteen(int n)//输入十六进制数
    {
        char str[1000];
        printf("请输入您的数字:");
        scanf("%s", str);
        for (int i = 0; i < strlen(str); i++)
            if (islower(str[i]))str[i] = toupper(str[i]);
        if (!judge(n, str))printf("ERROR
    ");
        else
        {
            sixteen_to_two(str);
            sixteen_to_eight(str);
            sixteen_to_ten(str);
        }
    }
    

    我之前字符串不熟想不出如何输入十六进制数,而永福用字符串输入十六进制让我对字符串有了更好理解。他还使用<ctype.h> 头文件,将小写改为大写是对不久前课上内容学以致用。

    八.总结

    1.收获:对函数里再调用函数有了更深体会;体会到函数的便捷性;锻炼了对函数的整体思考,函数间的关联。

    2.理解:函数是一种可以简化主函数的好方法,使主函数思路可以更好理解。而且函数间互相调用可以大大简化代码。

  • 相关阅读:
    闻彭水诗人醉酒攀岩写诗
    点滴记录:管理工作的50点亲身感悟(分享!)
    激发潜能 成就梦想:抱着积极的心态开发你的潜能
    成功者的十二项核心因素——最切实的成功法则
    free buffer waits等待事件
    latch: library cache pin等待事件
    ksfd: async disk IO等待事件
    latch:library cache lock等待事件
    library cache latch等待事件
    在Fedora 15上使用Vmware Server 2.0.2
  • 原文地址:https://www.cnblogs.com/jmuchenyunfei/p/11830713.html
Copyright © 2020-2023  润新知