进制转换器

进制转换器

一.运行截图

1.

进制转换器

2.

进制转换器

3.

进制转换器

4.

进制转换器

5.

进制转换器

6.

进制转换器

7.

进制转换器

8.

进制转换器

二.函数功能介绍

1.

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

功能为将输入的数字通过字符串来存储,利用字符串的形式将不同的进制数转换为10进制数,并以整型将10进制数返回。

2.

void Numchange(int m, int b)//将10进制数转化为任意进制数
{
	
	int n = m;
	int count = 0;
	if (m == 0) printf("0");
	while (n != 0)
	{
		n = n / b;
		count++;
	}
	int number;
	for (int i = count; i >= 1; i--)
	{
		number = m / (int)pow(b, i - 1);
		if (number < 10) {
			printf("%d", number);
		}
		else {
			printf("%c", number + 55);
		}
		m = m % (int)pow(b, i - 1);
	}
}

功能为将10进制数转换为任意进制数。这个函数的思路是来自输出整数各位的数字,整数是十进制的,我改进了代码就可以实现转换成任意进制数。有用到数据类型的强制转换。

3.

int judge2810(char a[], int b)//用来判断2,8,10进制数是否正确
{
	int len, i;
	len = strlen(a);
	int flag = 0;
	int x = b - 1 + 48;
	for (i = 0; i < len; i++)
	{
		if (a[i] >= 48 && a[i] <= x) {
			flag = 1;
		}
		else {
			flag = 0;
			break;
		}
	}
	return flag;
}
int judge16(char a[]) //用来判断16进制数是否正确
{
	int len, i;
	len = strlen(a);
	for (i = 0; i < len; i++)
	{
		if (a[i] < '0' || a[i]>'9' &&a[i] < 'A' || a[i]>'F') {
			return 0;
		}
	}
	return 1;
}

这两个函数都是用来判断所输入的进制数是否符合相应的进制。由于16进制会更难写,所以没把两个函数合并在一起。

三.main函数

#include <stdio.h>
#include<string.h>
#include<math.h>
int main()
{
	int l = 1;
	while(l)
	{
		printf("进制转换器\n");
		printf("十六进制数字母大写\n");
		char a[100];
		int b;
		printf("请输入待转换数的进制:\n");
		scanf("%d", &b);
		printf("请输入待转换数\n");
		getchar();
		gets_s(a);
		int m;
		m = Tennum(a, b);
		if (b == 2) {
			if (judge2810(a, b))
			{
				printf("八进制数:\n");
				Numchange(m, 8);
				printf("\n");
				printf("十进制数:\n");
				printf("%d\n", m);
				printf("十六进制数:\n");
				Numchange(m, 16);
				printf("\n");
				l = 0;
			}
			else {
				printf("Error\n请重新输入\n");
				
			}
		}
		else if (b == 8) {
			if (judge2810(a, b))
			{
				printf("二进制数:\n");
				Numchange(m, 2);
				printf("\n");
				printf("十进制数:\n");
				printf("%d\n", m);
				printf("十六进制数:\n");
				Numchange(m, 16);
				printf("\n");
				l = 0;
			}
			else {
				printf("Error\n请重新输入\n");
			}
		}
		else if (b == 10) {
			if (judge2810(a, b))
			{
				printf("二进制数:\n");
				Numchange(m, 2);
				printf("\n");
				printf("八进制数:\n");
				Numchange(m, 8);
				printf("\n");
				printf("十六进制数:\n");
				Numchange(m, 16);
				printf("\n");
				l = 0;
			}
			else {
				printf("Error\n请重新输入\n");
			}
		}
		else if (b == 16) {
			if (judge16(a))
			{
				printf("二进制数:\n");
				Numchange(m, 2);
				printf("\n");
				printf("八进制数:\n");
				Numchange(m, 8);
				printf("\n");
				printf("十进制数:\n");
				printf("%d\n", m);
				l = 0;
			}
			else {
				printf("Error\n请重新输入\n");
			}
		}
	}	
	return 0;
}

利用字符串处理输入的进制数,根据用户所选进制来判断是否有错,如果没错就输出另外三种进制数。输错就重新返回界面。

四.思维导图

进制转换器

五.问题分析

1.刚开始时,写了几个函数,在用的时候,因为没有正确使用函数,点击运行就会报错,然后就去看书,找到自己的问题,函数括号里的变量表示不明确,运用函数时,把void,int,double也写上去等问题。在做函数题时,就只有编写函数的内容,不怎么注意函数的正确使用。

2.刚开始写将进制数变为10进制数这个函数的时候,就写了很多个函数,使得代码看起来很多,而且效率不高。然后我看了CSDN里面的一篇博客,他将16进制数转换的时候,运用字符串知识,之后我就将所有进制都用字符串来表示。

六.代码互评

网络1914 林洁颖

int binaryconversion(int number) {
	if (number / 2 == 0) {
		return number % 2;
	}
	else {
		return number % 2 + binaryconversion(number / 2) * 10;
	}
}

这个函数利用了递归来将二进制数转换为十进制数,而且这个思路也很不错。

int sum = 0;
			int product = 1;
			do {
				sum = sum + (number % 10) * product;
				number = number / 10;
				product = product * primitivesystem;
			} while (number);

这个部分在整个代码重复了很多次,其实可以把它写成一个函数。她的转换思路是我没有想到的,看到这个代码,就觉得还可以这样做。

她的代码让我收获最大的是可以利用%o,%x将十进制数转换为八进制数和十六进制数。虽然知道这个知识点,但是我却没有用过。我还去写10进制转换为八进制数和十六进制数的函数。

七.总结

1.

学会了怎么正确使用函数,如何利用变量类型转换解决问题。

对字符串的使用更加熟练。

面对bug,如何通过测试和改进代码,来实现功能的优化。

2.

每个函数是拥有自己独特的功能,能提高整体代码的可读性,变得简洁。当有相似功能的函数,可以合并成一个函数,使得函数功能更强大。函数的实参和形参,函数的调用,递归,嵌套等。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114453.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 加密原理详解:对称式加密 VS 非对称式加密[通俗易懂]

    加密原理详解:对称式加密 VS 非对称式加密[通俗易懂]一、前言在了解加密原理前,我们来看看这样一个故事。小红和小明是情侣,一天,小红给小明发短信说:“亲爱的,我银行卡上没有钱了,你给我转1万块吧。”有过上当受骗经历的人都知道这有可能是小偷偷了小红手提包,然后拿手机发的短信。不过我们小明学过加密原理,于是他回复说:“你直接拿我的银行卡刷吧,密码加上我们第一次约会的日期就是663156。”很明显,只有小明和小红知道他们第一次约会是什么时候,假设是2008年4月1号,那么小红就可以根据计算663156-200841=462315得到银行卡密码,就可以消费了。这

    2022年5月6日
    43
  • 怎样在pycharm中安装torch

    怎样在pycharm中安装torch1.方法一:首先尝试如下办法Pytorch安装及使用(Pycharm版)_OTip的博客-CSDN博客_pycharm安装pytorch2.方法二:其次尝试第二种办法windows中在pycharm中安装pytorch_垃圾就应该待在垃圾桶里的博客-CSDN博客_pycharm怎么安装pytorch3.方法三:最后尝试第三种方法torch包在pycharm里面的导入问题_木槿的世界-CSDN博客…

    2022年8月26日
    15
  • goland 激活码【最新永久激活】

    (goland 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    758
  • 2-ip地址分类「建议收藏」

    2-ip地址分类「建议收藏」1.ip地址的种类  我们在学习计算机网络时知道,计算机网络一般根据网络大小分对网络进行分门别类:一般有局域网,广域网,城域网,互联网等。对于拥有大量结点的少部分网络,他们创建了A类网络这个等级。另一个极端情况是C类网络,它包括只拥有较少结点的众多网络。那么介于在A类和C类之间的网络就是B类网络了。2.ip地址分类  在早期为了适应大型,中型,小型等不同的网络,ip地址在设计出…

    2022年6月3日
    37
  • 惊!我的 Redis 被挖矿脚本注入了

    惊!我的 Redis 被挖矿脚本注入了发现周五在个人服务器上新部署了redis做测试加了个几个key,过了个快乐周末,周一回来一看原key都没了,估计是用了flushall,而且多了这四个key。 k v backup1 */2****rootcd1-fsSLhttp://194.87.139.103/cleanfda/init.sh|sh backup2 */3****rootwget-q-

    2022年7月14日
    22
  • 获取实体类@注解信息_jquery获取class名称

    获取实体类@注解信息_jquery获取class名称通过包名和注解获取类Classimportjava.io.File;importjava.io.IOException;importjava.lang.annotation.Annotation;importjava.net.JarURLConnection;importjava.net.URL;importjava.net.URLDecoder;importjava.util.Enumeration;importjava.util.HashSet;importjav

    2025年6月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号