第二次博客作业

一、运行截图





二、函数

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.提高代码的可读性,在代码巨大的时候也能时使代码更加简洁。

posted @ 2019-11-10 21:23  王明け  阅读(163)  评论(0编辑  收藏  举报