第二次博客作业

一.运行截图

二.所有函数

int twoToten(int a)//定义求二进制转十进制
{
	int  c;
	int sum = 0;
	int i = 0;;
	while (a != 0) {
		c = a % 10;
		sum = sum + pow(2, i) * c;//
		a /= 10;
		i++;
	}
	return sum;
}

这是一个二进制转换为十进制的函数,此函数用到了库pow,每一次循环时进行取余,然后在在除去个位,转换为十进制时从2的0次方开始相加,每一位数乘以它的对应次方直到i=0;

int eightTotwo(int a)//定义求八进制转二进制
{
	int  c;
	int sum = 0;
	int i = 0;
	while (a != 0) {
		c = a % 10;
		sum = sum + pow(8, i) * c;
		a /= 10;
		i++;
	}
	return tenToeight(sum);//八进制转十进制在转二进制,引用十进制转二进制函数
}

这是求八进制转为二进制的函数。但直接从八进制转为二进制有点困难所以,我先用此函数求出十进制的的数,在调用int tenTotwo(int n)
就可以将八进制转为二进制了,

int tenTotwo(int a)//定义十进制转二进制
{
	int   item, ret;
	int sum, count, result;
	sum = count = result = 0;
	while (a > 0)
	{
		item = a % 2;
		a = a / 2;
		sum = sum * 10 + item;//求二进制
		count++;//计算位数
	}
	do {
		ret = sum % 10;
		result = result * 10 + ret;//逆序输出
		sum = sum / 10;;
		count--;
	} while (count != 0);
	return result;
}

这是一个十进制求二进制函数,第一个while循环求二进制的正序,第二个循环将正序逆序输出,从而得到真正的二进制数;

三,main函数

int main()
{
	int n, a;
	int w = 1;//进入循环的条件
		printf("----------------------------------\n");//菜单
		printf("       进制转换器\n");
		printf("注意:(1)本进制只支持二,八,十进制转换\n");
		printf("     (2)本进制只支持正整数转换\n");
		printf("----------------------------------\n");
		printf("\n====请选择你的进制<===============\n");
		printf("    请选择相应的序号:\n");
		printf("[2]二进制\n[8]八进制\n[10]十进制\n[0]退出 \n");
		printf("==================================\n");
      while(w)
	  {
		printf("你的选择是:");
		scanf("%d", &n);//输入序号

		if (n == 2)
		{
			printf("你的二进制数:");
			scanf("%d", &a);
			printf("十进制:%d\n", twoToten(a));
			printf("八进制:%o\n", twoToten(a));//十进制转成八进制
		}

		else if (n == 8)
		{
			printf("你的八进制数:");
			scanf("%o", &a);
			printf("二进制:%d\n", eightTotwo(a));
			printf("十进制:%d\n", a);//用"%d"输出十进制
		}
		else if (n == 10)
		{
			printf("你的十进制数:");
			scanf("%d", &a);
			printf("二进制:%d\n", tenToeight(a));
			printf("八进制:%o\n", a);//直接用"%o"就可以让十进制转成八进制
		}
		else if (n == 0)
		{
			printf("你已退出进制转换器...........");
			break;
		}
		else
		{
			printf("亲,要输入正确的序号哦");//错误提示
		}
	} 
	return 0;
}

四,思维导图

五,问题

1:在函数调用时,出现了一些问题,就是形参和实参应用有些模糊,形参和实参一定要跟主函数相关联,尽量要一样.这样才能保证不错,
2,再编译程序时一定要先分别写使用的函数,这样出错就可以很快改善,
3,一定要先弄清楚进制转换,在编写程序,这样才能高效率的写代码,不然会很累
4,一定要写程序注释,这样才会使程序更加清楚明了,

六,代码互评

这是王昕同学的代码

void eightturn(int choice)
{
	int n, i = 0, item, x, flag, result = 0;
	do {
		flag = 0;
		printf("输入你要转换的数:\n");
		scanf("%d", &n);
		item = n;
		while (item) {//判断输入进制
			x = item % 10;
			if (x > 9) {
				printf("输入错误!!!请重新输入。\n");
				flag = 1;
				break;
			}
			item /= 10;
		}
	} while (flag == 1);
	while (n != 0) {//转换成十进制
		item = n % 10;
		result = result + item * mypow(8, i);
		i++;
		n /= 10;
	}
	printf("转换的数:\n");
	if (choice == 4) turntwo(result);//输出二进制
	else if (choice == 5) printf("%d\n", result);
	else printf("%x\n", result);

	printf("感谢你的使用!");
}

点评:王昕同学的代码写的非常好,他先判定输入是不是八进制数,这个我一直都没想到,他用到了递归的方法,这个一直是我的弱项
我要向王昕同学学习,多请教;

七,总结

1,大作业不像平常的pta作业,一定要用心的去做,要多花时间,不要等快到结束之后在做,这样是不好,不但会让你心疲力竭,也不好
2,一定一定要向别人请教,不要害羞,不然会浪费大量的时间
3,对于函数,一直是一个难点,我认为最难的点在与函数的调用问题,因为稍不小心就会弄错,特别是和数组一起使用的时候;调用函数要进行必要的注释
不要弄错,不然很难改,最后一定要会设置断点,这会省大量的时间,我的总结结束,,

posted @ 2019-11-10 22:50  JYangYang  阅读(122)  评论(0编辑  收藏  举报