进制转换器V1.0_Beta
一.截图部分
二.代码部分:
char2num()
作用:将字符转化成对应的数字
e.g. '9'->9 'A'->10
int char2num(char ch) {
if (ch >= '0' && ch <= '9') {
return ch - '0';
}
else {
return ch - 'A' + 10;
}
}
char
num2char()
作用:将数字转化成对应的字符
e.g. 9->'9' 10->'A'
char num2char(int num) {
if (num >= 0 && num <= 9) {
return (char)('0' + num);
}
else {
return (char)('A' + num - 10);
}
}
is_false()
作用:判断输入是否正确,对返回0,错返回1
int is_flase(char ch[], int n) {
int i, len, flag = 0;
len = strlen(ch);
for (i = 0; i < len; i++) {
if (char2num(ch[i]) < 0 || char2num(ch[i]) >= n)
flag = 1;
}
return flag;
}
any2ten()
作用:将任意进制转化为十进制
int any2ten(char str[],int key) {
int cnt, len, i, sum = 0, item = 1;
len = strlen(str);
for (i = 1; i < len; i++) {
item *= key;
}
for (i = 0; i < len; i++) {
cnt = char2num(str[i]);
sum += cnt * item;
item /= key;
}
return sum;
}
ten2any()
作用:将十进制转化为任意进制
void ten2any(int n,int key) {
int i, len = 0;
char a[10000];
while (n) {
a[len] = num2char(n % key);
n /= key;
len++;
}
switch (key) {
case 2:printf(" -->二进制是:"); break;
case 8:printf(" -->八进制是:"); break;
case 16:printf(" -->十六进制是:"); break;
}
for (i = len - 1; i >= 0; i--) {
printf("%c", a[i]);
}
printf("\n");
}
main()
int main() {
int n, result, flag = 1, now, k;
char a[10000];
printf("--------------------------------------------------\n");
while (flag) {
printf("--------------------------------------------------\n");
printf(" 请输入当前进制:");
scanf("%d", &now);
printf(" 请输入你要转换的数:");
switch (now) {
case 2:
getchar();
gets_s(a);
if (is_flase(a, now)) {
printf(" 输入错误!请重试!\n");
goto lab;
}
ten2any(any2ten(a, now), 8);
printf(" -->十进制是:%d\n", any2ten(a, now));
ten2any(any2ten(a, now), 16);
break;
case 8:
getchar();
gets_s(a);
if (is_flase(a, now)) {
printf(" 输入错误!请重试!\n");
goto lab;
}
ten2any(any2ten(a, now), 2);
printf(" -->十进制是:%d\n", any2ten(a, now));
ten2any(any2ten(a, now), 16);
break;
case 10:
getchar();
gets_s(a);
if (is_flase(a, now)) {
printf(" 输入错误!请重试!\n");
goto lab;
}
ten2any(any2ten(a, now), 2);
ten2any(any2ten(a, now), 8);
ten2any(any2ten(a, now), 16);
break;
case 16:
getchar();
gets_s(a);
if (is_flase(a, now)) {
printf(" 输入错误!请重试!\n");
goto lab;
}
ten2any(any2ten(a, now), 2);
ten2any(any2ten(a, now), 8);
printf(" -->十进制是:%d\n", any2ten(a, now));
break;
}
lab:
printf(" 继续请按1,退出请按0:");
scanf("%d", &k);
printf("--------------------------------------------------\n");
if (k == 0) {
printf("--------------------------------------------------\n");
break;
}
}
return 0;
}
三.思维导图
四.问题解决过程
1.刚开始写了很多函数,都是分开的,后来我发现我写的太冗长了,好几个函数其实都是合并在一个的,于是我又重新写了ten2any()和any2ten()这两个函数,来解决这个代码过长的问题。
2.开始写十六进制的时候,确实是被ABCDEF卡了一下,后面想想,要将字符转换成数字,于是联想到了ASCII码,将字符强制转换类型一下,再经过加减就可以实现数字转字符和字符转数字,而且还有几次调用,那我就直接写成了两个函数。
3.最后看到还要报错的要求,想想也对,那我就直接按照字符转数字的思路,n进制下,字符转化为数字的值要是超过了n-1,就直接报错,但是报错是在主函数实现的。
4.还有关于界面和美观的问题,刚开始是想写一堆数字,让用户去选择具体是几进制转到几进制,后来写出来自己用了一下,都快吐了,所以我就直接否决掉了。然后我就想到了输入一个进制,不管有没有用,反正就把其他的都输出出来,给用户使用,比较方便,不用转好几次。然后我又觉得每次转一次就没了,又要重新开一遍程序,很烦,所以我就在最外面直接套了一个while循环,要不要退出让用户自己选择。关于界面乱的问题..就直接在开头结尾加了一个分割线..本来就加一个..后面觉得不够明显,又加了一层,不加的话界面就会很乱,用户哪次转哪个都会乱掉。
五.代码互评
#include <stdio.h>
#include <math.h>
#include <string.h>
void transform_2_8(int n);
int transform_2_10(int n);
void transform_2_16(int n);
void transform_8_2(int n);
int transform_8_10(int n);
void transform_8_16(int n);
void transform_10_2(int n);
void transform_10_8(int n);
void transform_10_16(int n);
void transform_16_2(char *s);
void transform_16_8(char *s);
int transform_16_10(char *s);
这位同学把以上代码分别写成以下头文件
#include "Header.h"
#include "tr2.c"
#include "tr8.c"
#include "tr10.c"
#include "tr16.c"
这样使得调用那些函数比较方便,但我觉得可以把那些函数再浓缩一下,所以也没有必要去写那么多行。
六.总结
1.函数是个好东西!
2.函数是真的棒!!
3.棒得不得了!!!
1.函数方便编程、方便调试、方便升级,而且当一个过程需要重复在你的程序时,这时候函数就可以发挥很大的作用。
2.当我们在写一个需要用户去跟程序交互的东西时,需要考虑到程序美观性,还有对用户来说的简单操作。
3.再吹一遍函数~
进制转换器V1.0_Beta的更多相关文章
- 第二次博客作业: 函数+进制转换器v1.0beta
一:运行截图 二:介绍函数 1, int panduan1(int n,char a[],int count,int sign)//判断用户是否输入了除数字和a-f范围外的字符 { int i; ; ...
- C语言dos程序源代码分享(进制转换器)
今天给大家分享一个dos程序的源代码 这个程序是本人在学习中的经验分享 如果有问题或者建议,欢迎大家一起交流 源代码: /*本程序为一个进制转换器 本程序不作为商业用途,完全为技术交流 喜欢C语言的同 ...
- 进制转换器(十进制转n进制)
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 /*链栈类型定义*/ typedef struct node ...
- java进制转换器 图形用户界面 十进制及其相反数分别转化为二,四,八,十六进制
package com.rgy.Test; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout; ...
- 使用qt写的进制转换器
没有使用什么数据结构,直接使用qt自带的进制转换函数, 实时出结果,代码在后面的链接中,由于初学qt,好多不会,代码构造就有点乱 截图如下
- JAVA基础学习之命令行方式、配置环境变量、进制的基本转换、排序法、JAVA文档生成等(1)
1.命令行方式 dos命令行,常见的命令: dir:列出当前目录下的文件以及文件夹 md:创建目录 rd:删除目录 cd:进入指定目录 cd..:退回到上一级目录 cd/:退回到根目录 del:删除文 ...
- Java的浮点数和整数的进制转换
整数的表达 –原码:第一位为符号位(0为正数,1为负数) –反码:符号位不动,原码取反 –负数补码:符号位不动,反码加1 –正数补码:和原码相同 -6 5 原码 10000110 0 ...
- 基于visual Studio2013解决面试题之1203转16进制输出
题目
- Hex Workshop(16进制编辑利器) 6.7.2绿色版
软件名称: Hex Workshop 6.7.2绿色版(16进制编辑利器) 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 1.8MB 图片预览: 软件简介 ...
随机推荐
- JPEG文件编/解码详解
JPEG文件编/解码详解(1) JPEG(Joint Photographic Experts Group)是联合图像专家小组的英文缩写.它由国际电话与电报咨询委员会CCITT(The Interna ...
- SpringAOP在web应用中的使用
之前的aop是通过手动创建代理类来进行通知的,但是在日常开发中,我们并不愿意在代码中硬编码这些代理类,我们更愿意使用DI和IOC来管理aop代理类.Spring为我们提供了以下方式来使用aop框架 一 ...
- Python爬虫基础——XPath语法的学习与lxml模块的使用
XPath与正则都是用于数据的提取,二者的区别是: 正则:功能相对强大,写起来相对复杂: XPath:语法简单,可以满足绝大部分的需求: 所以,如果你可以根据自己的需要进行选择. 一.首先,我们需要为 ...
- (Concurrent)HashMap的存储过程及原理。
1.前言 看完咕泡Jack前辈的有关hashMap的视频(非宣传,jack自带1.5倍嘴速,高效),收益良多,所以记录一下学习到的东西. 2.基础用法 源码的注释首先就介绍了哈希表是基于Map接口,所 ...
- LeetCode刷题总结-哈希表篇
本文总结在LeetCode上有关哈希表的算法题,推荐刷题总数为12题.具体考察的知识点如下图: 1.数学问题 题号:149. 直线上最多的点数,难度困难 题号:554. 砖墙,难度中等(最大最小边界问 ...
- Intent知识详解
Intent知识详解 一.什么是Intent 贴一个官方解释: An intent is an abstract description of an operation to be performed ...
- 基于XML的开发
基于XML的开发 1.定义一个切面类 /** * Created by zejian on 2017/2/20.*/ public class MyAspectXML { public void be ...
- js 从两道面试题加深理解闭包与箭头函数中的this
壹 ❀ 引 在本文之前我已经花了两个篇幅专门介绍了JavaScript中的闭包与this,正好今早地铁上看到了两道面试题,试着做了下发现挺有意思,所以想单独写一篇文章来记录解析过程.若你对于闭包与t ...
- Spring Boot 异常处理静止trace
概述 在spring boot 2.2 中 默认状态为status 999 private void addStatus(Map<String, Object> errorAttribut ...
- Dynamic Code Evaluation:Unsafe Deserialization 动态代码评估:不安全反序列化