第二次博客作业
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.关于函数我自己还了解得不够深入,还有很多不懂的地方,还需要多加练习。