第二次博客作业

1.运行截图

(1).二进制转其他进制

(2).十进制转其他进制

(3).八进制转其他进制

2.函数

(1).二进制转十进制和八进制

void TWOto810(int a)//二进制转八进制和十进制
			{
				int decimalNumber = 0, i = 0, remainder;
				while (a != 0) {
					remainder = a % 10;   //取余数,
					a /= 10;    //取剔除最后一位的数。
					decimalNumber += remainder * pow(2, i); //1111,result = 1+1*2+1*2*2+1*2*2*2
					++i;
				}
			printf("所转换的十进制数为:%d\n", decimalNumber);
			printf("所转换的八进制为:%o\n", decimalNumber);
		}

(2).十进制转二进制和八进制

	void TENto28(int b)
	{
		printf("所转换的八进制数为:%o\n", b);
		int a[1000];
		int i=0;
		int t = 0;
		int sum = 0;
		while (b != 0)
		{
			a[i] = b % 2;
			i++;
			b = b / 2;
			t++;
		}
		printf("所转换的二进制数为:");
		for (i = t - 1; i >= 0; i--)
		{
			printf("%d", a[i]);
		}
	}

(3).八进制转二进制和十进制

void EIGHTto210(int c)
	{
		int sum = 0;
		int A;
		int i = 0;
		while (c != 0) {
			A = c % 10;
			sum = sum + A*pow(8, i);
			i++;
			c = c / 10;
		}
		printf("所转换的十进制数为:%d\n", sum);
		int D = sum;
		int a[1000];
		int I = 0;
		int t = 0;
		int sum1 = 0;
		while (D != 0)
		{
			a[I] = D % 2; 
			I++;
			D = D / 2;
			t++;
		}
		printf("所转换的二进制数为:");
		for (I = t - 1; I >= 0; I--)
		{
			printf("%d", a[I]);
		}
	}

3.main函数

#include<stdio.h>
#include<math.h>
void TWOto810(int a);
void TENto28(int b);
void EIGHTto210(int c);
int main()
{
	int n;
	int a, b, c;
	printf("进制转换器\n");
	printf("输入1,表示二进制转八进制和十进制\n");
	printf("输入2,表示十进制转八进制和二进制\n");
	printf("输入3,表示八进制转十进制和二进制\n");
	printf("请输入\n");
	scanf("%d", &n);
	if (n == 1) {
		printf("您选择了二进制转八进制和十进制\n");
		printf("请输入您需要转换的数:\n");
	end1:
		scanf("%d", &a);
		int B = a;
		while (a != 0) {
			int A;
			A = a % 10;
			a = a / 10;
			if (A != 0 && A != 1) {
				printf("您输入的数不是二进制数,请重新输入!!\n");
				goto end1;
			}
		}
		TWOto810(B);
	}
	if (n == 2) {
		printf("您选择了十进制转八进制和二进制\n");
		printf("请输入您需要转换的数:\n");
		printf("请输入0-9的数字\n ");
		scanf("%d", &b);
		TENto28(b);
	}
	if (n == 3) {
		printf("您选择了八进制转十进制和二进制\n");
		printf("请输入您需要转换的数:\n");
	end:
		scanf("%d", &c);
		int D = c;
		while (c != 0) {
			int C;
			C = c % 10;
			c = c / 10;
			if (C == 8 || C == 9) {
				printf("您输入的数不是八进制数,请重新输入!!\n");
				goto end;
			}

		}
		EIGHTto210(D);
	}
	if(n!=1&&n!=2&&n!=3) printf("输入有误\n");
	return 0;
}

关于如何判断是什么进制我只能简单的判断输入数字的情况,如果输入其他的我还不知道怎么写,问了室友说用到了字符串,还有待完善。

4.思维导图

5.问题

十六进制不会写,还有就是好多同学用到了字符串,我还不会,还有就是在如何判断是什么进制的时候考虑了很久,每次只能运行一次,效率比较低。

6.代码互评(杨涛)

int Tennum(char a[],int b)//将输入的数字转换为10进制数
{
    int len, i, num;
    int sum = 0;
    len = strlen(a);//求字符长度
    for (i = 0; i < len; i++) 
    {
        if (a[i] >= '0' && a[i] <= '9')
        {
            num = a[i] - '0';
        }
        else if (a[i] >= 'A' && a[i] <= 'F')
        {
            num = a[i] - 'A' + 10;
        }
        sum = sum * b + num;
    }
    return sum;
}

他的思路是转化为十进制,十分的巧妙。看了杨涛同学的作业,发现他写得非常的不错,好多我都看不懂!!

7.总评

1.看了其他同学的作业,学到了很多不一样的思路,每一位同学都有自己的见解,取长补短。
2.通过室友的帮助完成了好多自己不能独立完成的,不懂就要多问!!
3.学到了两个新东西,%o可以直接将十进制转换为八进制,还有就是学会了如何使用goto语法。
4.关于函数我自己还了解得不够深入,还有很多不懂的地方,还需要多加练习。

posted @ 2019-11-10 21:03  ……,  阅读(146)  评论(0编辑  收藏  举报