# 第二次博客园作业

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);//判断输入数字与进制是否对应


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


int _2to8(int number, int system) {
number = translate(number, system);//先转为十进制数
return _10to8(number, 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;
}


int _8to2(int number, int system) {
number = translate(number, system);//先转为十进制数
return _10to2(number, 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;
}


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;
}


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;
}


int main()
{
int number, system;
int i = 1;//记录输入次数
printf("                                进制转换器\n欢迎您的使用\n");
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\n", _2to8(number, system));
printf("十进制：%d\n", _2to10(number, system));
}
else if (system == 8) {
printf("二进制：%d\n", _8to2(number, system));
printf("十进制：%d\n", _8to10(number, system));
}
else if (system == 10) {
printf("二进制：%d\n", _10to2(number, system));
printf("八进制：%d\n", _10to8(number, system));
}

else printf("输入进制错误,请重新输入!\n");//输入2，8，10，0以外的进制
}
else printf("您的数字与进制不匹配，请重新输入！\n");
i++;
printf("\n\n");
}
printf("谢谢使用！\n");
}


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

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

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

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\n");
else
{
sixteen_to_two(str);
sixteen_to_eight(str);
sixteen_to_ten(str);
}
}


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

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

posted @ 2019-11-10 18:39  陈-----  阅读(144)  评论(0编辑  收藏  举报