函数+进制转换器

一.运行截图

注释:二进制转化为八进制,十进制,十六进制

注释:八进制转化为二进制,十进制,十六进制

注释:十进制转换为二进制,八进制,十六进制

注释:十六进制转换为二进制,八进制,十进制

注释:错误示范

二.函数介绍

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;
}
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 step_1(char m[],int n);
void step_2(int m,int n);
int change10(char m[],int n);
void unchange10(int m,int n);
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;
}

 

(自己很菜,在别人的帮助下完成的)

四.思维导图

 

 五.问题和解决

1.问题:对于进制的理解还很吃力   解决方法:借助网络和书本尽快掌握

2.问题:代码的编写总会出现一些缺缺漏漏   解决方法:仔细

3.问题:进度落后,自己编写代码比较吃力  解决方法:疯狂肝就对了

六.代码互评

网络1914安省龙

 

int main()
{
    int first, sum;
    printf("请选择当前要被转换的进制\n");
    printf("二进制【1】\n");
    printf("八进制【2】\n");
    printf("十进制【3】\n");
    printf("你的选择:");
    scanf_s("%d", &first);
    switch (first)
    {
    case 1:
    {
        sum = two_to_others(number_2(), choose());
        if (sum != 0)
            printf("%d", sum);
    }
    break;
    case 2:
    {
        sum = eight_to_others(number_8(), choose());
        if (sum != 0)
            printf("%d", sum);
    }
    break;
    case 3:
    {
        sum = ten_to_others(number_10(), choose());
        if (sum != 0)
            printf("%d", sum);
    }
    break;

    }
}
int number_2()//输入一个二进制函数 
{
    int result;
part1:printf("请输入二进制数:");
    scanf_s("%d", &result);
    for (int i = result; i > 0; i = i / 10)
    {
        if (i % 10 > 1)
        {
            printf("这是无效的二进制,请重新输入\n");
            goto part1;
        }
    }
    return result;
}
int number_8()//输入一个八进制函数 
{
    int result;
    printf("请输入八进制数:");
    scanf_s("%d", &result);
    return result;
}
int number_10()//输入一个十进制函数 
{
    int result;
    printf("请输入十进制数:");
    scanf_s("%d", &result);
    return result;
}
int choose()//选择要二进制被转换的进制 
{
    int result;
    printf("请选择当前要转换的进制\n");
    printf("二进制【1】\n");
    printf("八进制【2】\n");
    printf("十进制【3】\n");
    printf("你的选择: ");
    scanf_s("%d", &result);
    return result;
}

int  two_to_others(int number_2, int choose)//二进制!!!!!!
{
    int sum = 0, t = 0;
    if (choose == 1)                                       //二进制:输入1(二进制),则仍然是二进制输出;
    {
        if (number_2 == 0)
            printf("%04d", number_2);
        return number_2;
    }
    if (choose == 2)//二进制:输入2(八进制),则取三合一,每三位按权相加,如:110=0*1+1*2+1*4=6,按权相加的方式可以将那三位转为十进制,
    {                                                                                      //可以理解为那三位二进制转为十进制
        if (number_2 == 0)
            printf("%d", number_2);
        while (number_2 > 0)
        {
            sum = sum + two_to_others((number_2 % 1000), 3) * pow(10, t);
            number_2 = number_2 / 1000;
            t++;
        }
        return sum;
    }
    if (choose == 3)//二进制转十进制,按权相加。
    {
        if (number_2 == 0)
            printf("%d", number_2);
        while (number_2 > 0)
        {
            sum += (number_2 % 10) * pow(2, t);
            number_2 /= 10;
            t++;
        }
        return sum;
    }

}

 评论:

1.该同学代码解释比我的清楚,并且能够单独的转换代码,而我的是一次性把一个代码转为三个

2.他的代码感觉能让别人更容易看懂

七.自我总结

 

 1.写代码对全局能力要求还是高,需要思维足够清晰,前后思路一致

2.自己的能力还是比较欠缺,然后进度有点跟不上进度,需要在好好学习

posted @ 2019-11-10 22:26  祖国庇佑我  阅读(218)  评论(0编辑  收藏  举报