第二次博客作业
一、运行截图
二、函数
int mypow(int x,int n) {//一个简单的幂函数//
int i, result = 1;
for (i = 0; i < n; i++) {
result = result * x;
}
return result;
}
功能:一个简单的幂函数,用来计算进制转换。
void turntwo(int n) {//将十进制转换成二进制//
int i = 0, a[30];
do {
a[i] = n % 2;//利用数组将二进制存储//
n = n / 2;
i++;
} while (n != 0);
while (i > 0) {
printf("%d", a[--i]);
}
printf("\n");
}
功能:将十进制转换成二进制并输出。
void menu() //菜单~//
{
printf("----------------------------------------------------\n");
printf("[1] 二进制 -> 八进制 [7] 十进制 -> 二进制\n");
printf("[2] 二进制 -> 十进制 [8] 十进制 -> 八进制\n");
printf("[3] 二进制 -> 十六进制 [9] 十进制 -> 十六进制\n");
printf("[4] 八进制 -> 二进制 [10] 十六进制 -> 二进制\n");
printf("[5] 八进制 -> 十进制 [11] 十六进制 -> 八进制\n");
printf("[6] 八进制 -> 十六进制 [12] 十六进制 -> 十进制\n");
printf("[0] 退出\n");
printf("----------------------------------------------------\n");
}
菜单。。嫌主函数太长。
void twoturn(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 != 0 && x != 1) {
printf("输入错误!!!请重新输入。\n");
flag = 1;
break;
}
item /= 10;
}
} while (flag == 1);//若输入的数不符合进制就重新循环//
while (n != 0) {//将二进制转换成十进制//
item = n % 10;
result = result + item * mypow(2, i);
i++;
n /= 10;
}
printf("转换的数:\n");
if (choice == 1) printf("%o\n", result);//输出八进制
else if (choice == 2) printf("%d\n", result);//输出十进制
else printf("%x\n", result);//输出十六进制
printf("感谢你的使用!");
}
功能:将二进制转换成十进制在根据所作的选择输出不同进制的数。
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("感谢你的使用!");
}
功能:将八进制转换成十进制在根据所作的选择输出不同进制的数。
void tenturn(int choice) {
int n;
printf("输入你要转换的数:\n");
scanf("%d", &n);
printf("转换的数:\n");
if (choice == 7) turntwo(n);
else if (choice == 8) printf("%o\n", n);
else printf("%x\n", n);
printf("感谢你的使用!");
}
功能:将输入的十进制转换成其他进制。
void sixteenturn(int choice) {
char n[50];
int i, length, flag, item, result = 0, j = 0;
do {
flag = 0;
printf("输入你要转换的数:(英文要大写)\n");
scanf("%s", &n);
length = strlen(n);//获取数组长度//
for (i = 0; i < length; i++) {//判断输入的十六进制是否正确//
if (n[i]<'0' || n[i]>'9' && n[i]<'A' || n[i]>'F') {
printf("输入错误!!!请重新输入。\n");
flag = 1;
break;
}
}
} while (flag == 1);
i = length-1;
while (i >= 0) {//将十六进制转换成十进制//
if (n[i] >= 'A' && n[i] <= 'F') {
item = n[i] - 'A' + 10;
}
else {
item = n[i] - '0';
}
result = result + item * mypow(16, j);
i--;
j++;
}
printf("转换的数:\n");
if (choice == 10) turntwo(result);
else if (choice == 11) printf("%o\n", result);
else printf("%d\n", result);
printf("感谢你的使用!");
}
功能:将十六进制转换成十进制在根据所作的选择输出不同进制的数。
三、main函数
#include<stdio.h>
#include <string.h>
void menu();
int mypow(int x, int n);
void turntwo(int n);
void twoturn(int choice);
void eightturn(int choice);
void tenturn(int choice);
void sixteenturn(int choice);
int main()
{
int n, choice;
menu();//输出菜单//
printf("输入你的选择:\n");
scanf("%d", &choice);
switch (choice) {//选择进制转换//
case 0: break;
case 1: twoturn(choice); break;
case 2: twoturn(choice); break;
case 3: twoturn(choice); break;
case 4: eightturn(choice); break;
case 5: eightturn(choice); break;
case 6: eightturn(choice); break;
case 7: tenturn(choice); break;
case 8: tenturn(choice); break;
case 9: tenturn(choice); break;
case 10: sixteenturn(choice); break;
case 11: sixteenturn(choice); break;
case 12: sixteenturn(choice); break;
}
return 0;
}
四、思维导图
五、问题
1.定义函数的类型定义错
解决:多次尝试,了解不同定义之间的差别。
2.二进制不能直接像其他利用 ”%o“ 或 ”%x“ 输出
解决:写一个将十进制转换成二进制的函数。
3.十六进制的转换
解决:查阅资料和请教同学。
六、代码互评
1913 罗吉洋
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;
}
他用逆序输出来将二进制输出是我没有想到的方法,这是一个不错的思路,可以是函数更加简洁易懂。
七、总结
1.更加了解函数类型和更好的使用函数,明白了函数之间的关系, 加强对字符串的利用;
2.提高代码的可读性,在代码巨大的时候也能时使代码更加简洁。