一.截图部分





二.代码部分:

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的更多相关文章

  1. 第二次博客作业: 函数+进制转换器v1.0beta

    一:运行截图  二:介绍函数 1, int panduan1(int n,char a[],int count,int sign)//判断用户是否输入了除数字和a-f范围外的字符 { int i; ; ...

  2. C语言dos程序源代码分享(进制转换器)

    今天给大家分享一个dos程序的源代码 这个程序是本人在学习中的经验分享 如果有问题或者建议,欢迎大家一起交流 源代码: /*本程序为一个进制转换器 本程序不作为商业用途,完全为技术交流 喜欢C语言的同 ...

  3. 进制转换器(十进制转n进制)

    #include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 /*链栈类型定义*/ typedef struct node ...

  4. java进制转换器 图形用户界面 十进制及其相反数分别转化为二,四,八,十六进制

    package com.rgy.Test; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout; ...

  5. 使用qt写的进制转换器

    没有使用什么数据结构,直接使用qt自带的进制转换函数, 实时出结果,代码在后面的链接中,由于初学qt,好多不会,代码构造就有点乱 截图如下

  6. JAVA基础学习之命令行方式、配置环境变量、进制的基本转换、排序法、JAVA文档生成等(1)

    1.命令行方式 dos命令行,常见的命令: dir:列出当前目录下的文件以及文件夹 md:创建目录 rd:删除目录 cd:进入指定目录 cd..:退回到上一级目录 cd/:退回到根目录 del:删除文 ...

  7. Java的浮点数和整数的进制转换

    整数的表达 –原码:第一位为符号位(0为正数,1为负数) –反码:符号位不动,原码取反 –负数补码:符号位不动,反码加1 –正数补码:和原码相同     -6      5 原码 10000110 0 ...

  8. 基于visual Studio2013解决面试题之1203转16进制输出

     题目

  9. Hex Workshop(16进制编辑利器) 6.7.2绿色版

    软件名称: Hex Workshop 6.7.2绿色版(16进制编辑利器) 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 1.8MB 图片预览: 软件简介 ...

随机推荐

  1. ARTS-S docker里程序通过ip访问外部数据库

    要先确保外部数据库能通过ip访问,然后启动docker的时间加参数--network host,如 docker run \ --name fcheck_async_worker \ -it \ -v ...

  2. Dubbo源码分析之 SPI(一)

    一.概述 dubbo SPI 在dubbo的作用是基础性的,要想分析研究dubbo的实现原理.dubbo源码,都绕不过 dubbo SPI,掌握dubbo SPI 是征服dubbo的必经之路. 本篇文 ...

  3. Mysql数据库优化一:集群(读写分离)之主从服务器的安装与配置

    Mysql数据库的集群(读写分离),说白了就是将读操作和写操作分开在不同的服务器上实现,以达到提高效率的目的. 大致原理如下: 数据库中的所有操作都是有日志记录的(前提是要打开这个日志记录功能) 1. ...

  4. rsync实现服务器之间同步目录文件

    一般情况下 服务环境一般有三种 dev 开发环境 test 测试环境 prod   生产环境 环境多了,不可避免的事是一些重复的操作,部署什么的 能不能在开发环境打包后,直接同步到测试环境呢?(毕竟重 ...

  5. Socket与系统调用深度分析

    学习一下对Socket与系统调用的分析分析 一.介绍 我们都知道高级语言的网络编程最终的实现都是调用了系统的Socket API编程接口,在操作系统提供的socket系统接口之上可以建立不同端口之间的 ...

  6. Soc常见问题

    SOC常见问题解答 1.SOC FPGA中的ARM是软核还是硬核?ARM核的外设是软核还是硬核? SOC FPGA 中的ARM核是硬核.所以简称HPS,Hardware Processor Syste ...

  7. Android Studio 中java 文件报错红色J

    用常用的方法清除Android Studio的缓存然后重启,"File" -> "Invalidate Cashes / Restart" -> & ...

  8. IIS中部署网站

    1.安装开IIS,打开IIS(Win+R -->inetmgr.exe) 2.进入IIS主界面,右键网站,选择“添加网站”. 3.在“添加网站”对话框中,添加网站名称. 4.点击应用程序池选择, ...

  9. 《Java知识应用》Java Json说明和使用(fastjson)

    工具包下载:链接: https://pan.baidu.com/s/1dn5uNwiJ1ICkbPknlMmkHQ 提取码: ayzn 复制这段内容后打开百度网盘手机App,操作更方便哦 1.JSON ...

  10. 《Java基础知识》Java包的概念

    一.什么是java中的包 Java程序中,为了开发方便,会将功能相似的类放入一个文件夹中,这个文件结构就是包. 二.java中的包的命名规范 域名反写,例如:com.baidu. 三.java中的包的 ...