进制转换器

运行截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、函数功能介绍

1.

int step_1(char m[],int n){
 int a,b=0,c,i;
 c=n+48;
 a=strlen(m);
 for(i=0;i<a;i++){
  if(n<=10){
   if(m[i]<0||m[i]>=c){
    b=1;
    break;
   }
  }else{
   if(m[i]<'0'||m[i]>'9'&&m[i]<'A'||m[i]>'F'){
    b=1;
    break;
   }
  }
 }
 return b;
}

分析所输入的数字是否符合所输入进制的格式

2

void step_2(int m,int n){
 int a,b;
 if(n==2){
  printf("八进制:");
  unchange10(m,8);
  printf("十进制:");
  printf("%d\n",m);
  printf("十六进制:");
  unchange10(m,16);
 }else if(n==8){
  printf("二进制:");
  unchange10(m,2);
  printf("十进制:");
  printf("%d\n",m);
  printf("十六进制:");
  unchange10(m,16);
 }else if(n==10){
  printf("二进制:");
  unchange10(m,2);
  printf("八进制:");
  unchange10(m,8);
  printf("十六进制:");
  unchange10(m,16);
 }else if(n==16){
  printf("二进制:");
  unchange10(m,2);
  printf("八进制:");
  unchange10(m,8);
  printf("十进制:");
  printf("%d\n",m);
 }
}

根据所输入的进制来输出所需要的进制

3

int change10(char m[],int n){
 int a,i,b=0;
 a=strlen(m);
 if(n!=16){
  for(i=a-1;i>=0;i--){
   b += (m[i]-'0')*pow(n,i);
  }
 }else if(n==16){
  for(i=a-1;i>=0;i--){
   if(m[i]<10){
    b += m[i]*pow(n,i);
   }else{
    m[i]=m[i]-'A'+10;
    b += m[i]*pow(n,i);
   }
  }
 }
 return b;
}

将所输入的数转换为十进制

4

void unchange10(int m,int n){
 int b=100;
 int a[b],sum=0,i;
 for(i=0;m>0;m/=n){
  a[i]=m%n;
  i++;
 }
 i--;
 for(;i>=0;i--){
  if(a[i]<10){
   printf("%d",a[i]);
  }else{
   printf("%c",a[i]+55);
  }
 }
 printf("\n");
}

将十进制的数转换为其他进制

三.main函数

#include<stdio.h>
#include<math.h>
#include<string.h>
int main(){
 int n=100;
 char a[n];
 int b,c,d;
 printf("请输入所转换数的进制数:\n");
 printf("二进制  八进制  十进制  十六进制\n");
 scanf("%d",&b);
 printf("请输入所要转换的数:\n");
 scanf("%s",&a);
 if(step_1(a,b)==1){
  printf("输入了错误的数\n");
 }else{
  printf("数经过转换后为:\n");
  c=change10(a,b);
  step_2(c,b);
 }
 return 0;
}

定义一个字符串数组来更好的转换进制

四.思维导图

在这里插入图片描述

五.问题分析

在试着运行的时候发现数值过大,原来是字符串没有理解深透,‘0’没有减去,在对于十六进制的转换和转出的时候思考耗费时间过长。

六.代码互评

网络1914 黄家雯

void decimalism_to_hexadecimal(int num)         /*十进制转十六进制*/
{
 int op[100];                        /*定义一个数组来储存每个位子上数字的位子*/
 char hex[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };                                     //定义一个标志字符串,用来将原十进制数转换成对应的字符
 int i;
 int m;                       //用来存放原数除16的余数,便于后面在数组hex中对应字符的取用
 int count = 0;
 while (num != 0)                  //正序求余,存放进数组op中
 {
     op[count++] = num % 16;
     num /= 16;
 }
 for (i = count - 1; i >= 0; i--)   //倒序取余数
 {
     m = op[i];
     printf("%c", hex[m]);         //让每位子数字输出对应的字符
 }
 printf("\n");
}

取余的思想更有利于取数。

七.总结

这次的题目让我对函数的运用和数学思维运用更上一层楼,主要还是在字符串的使用,与代码的简化和缩减上面游侠很大功夫。

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编

posted @ 2019-11-12 22:12  字圣大人  阅读(342)  评论(0编辑  收藏  举报