栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言:模拟人工进制转换系统的实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言:模拟人工进制转换系统的实现



第一种方法

#include
#include
#include
int TenNum(char a[],int B);              //将输入的数字转换成10进制数
void Numchange(int m, int B);            //将转换好了的10进制数转换为所需进制数

int Menu();//主菜单
void choice (int ch);//选择
int ch;
int TenNum(char a[],int B)
{
    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;
}
void Numchange(int m, int B)
{
    int n;
    if (m)
    {
        Numchange(m / B, B);
        n = m % B;
        if (n < 10)
            printf("%d", n);           //小于10直接输出
        else
            printf("%c", n + 55);      //大于10转换成字符输出
    }
}
int main()
{
        while (1) {
                ch = Menu();
                choice(ch);
                ch = -1;
            }
        return 0;
}
int Menu()
{
    int ch;
    printf("**********************┕------------------------┙ *********************n");
    printf(".......       1.十进制数转换成其他进制        .....          n");
    printf(".......       2.其他进制数转换成十进制        .....            n");
    printf(".......       3.二进制数转换成八进制        .....              n");
    printf(".......       4.八进制数转换成二进制        .....              n");
    printf(".......       5.二进制数转换成十六进制        .....              n");
    printf(".......       6.十六进制数转换成二进制        .....              n");
    printf(".......       7.八进制数转换成十六进制        .....              n");
    printf(".......       8.十六进制数转换成八进制        .....              n");
    printf(".......       9.退出系统        .....              n");
    printf("**********************┕------------------------┙ *********************n");
    printf("请选择:n");
    scanf("%d", &ch);
    return ch;
}

void choice(int ch)
{   char a[20];  //存储原数
    int B;  //存储原数制
    int b;  //存储目标数制
    int m;  //存储目标数
    int item = 1;  //是否退出程序或继续
    while (item)
        
    {switch (ch)
    {
    case 1:
        printf("转换前的十进制数是:n");
        getchar();
        gets(a);
        B = 10;
        m = TenNum(a, B);//将输入的数字转换成十进制数
        printf("转换后的其他进制是:n");
        scanf("%d",&b);
        printf("%d进制数%s转换为%d进制数的结果为:n",B,a,b);
        Numchange(m, b);
        printf("n继续请输入1,否则输入0:n");
        scanf("%d", &item);
        break;
    case 2:
        printf("转换前的其他进制数是:n");
        getchar();
        gets(a);
        m = TenNum(a, B);//将输入的数字转换成十进制数
        b=10;
        printf("其他进制数%s转换为%d进制数的结果为:n",a,b);
        Numchange(m, b);
        printf("n继续请输入1,否则输入0:n");
        scanf("%d", &item);
        break;
    case 3:
        printf("转换前的二进制数是:n");
        getchar();
        gets(a);
        B=2;
        m = TenNum(a, B);//将输入的数字转换成十进制数
        b=8;
        printf("%d进制数%s转换为%d进制数的结果为:n",B,a,b);
        Numchange(m, b);
        printf("n继续请输入1,否则输入0:n");
        scanf("%d", &item);
        break;
    case 4:
        printf("转换前的八进制数是:n");
        getchar();
        gets(a);
        B=8;
        m = TenNum(a, B);//将输入的数字转换成十进制数
        b=2;
        printf("%d进制数%s转换为%d进制数的结果为:n",B,a,b);
        Numchange(m, b);
        printf("n继续请输入1,否则输入0:n");
        scanf("%d", &item);
        break;
    case 5:
        printf("转换前的八进制数是:n");
        getchar();
        gets(a);
        B=2;
        m = TenNum(a, B);//将输入的数字转换成十进制数
        b=16;
        printf("%d进制数%s转换为%d进制数的结果为:n",B,a,b);
        Numchange(m, b);
        printf("n继续请输入1,否则输入0:n");
        scanf("%d", &item);
        break;
    case 6:
        printf("转换前的十六进制数是:n");
        getchar();
        gets(a);
        B=16;
        m = TenNum(a, B);//将输入的数字转换成十进制数
        b=2;
        printf("%d进制数%s转换为%d进制数的结果为:n",B,a,b);
        Numchange(m, b);
        printf("n继续请输入1,否则输入0:n");
        scanf("%d", &item);
        break;
    case 7:
        printf("转换前的八进制数是:n");
        getchar();
        gets(a);
        B=8;
        m = TenNum(a, B);//将输入的数字转换成十进制数
        b=16;
        printf("%d进制数%s转换为%d进制数的结果为:n",B,a,b);
        Numchange(m, b);
        printf("n继续请输入1,否则输入0:n");
        scanf("%d", &item);
        break;
    case 8:
        printf("转换前的十六进制数是:n");
        getchar();
        gets(a);
        B=16;
        m = TenNum(a, B);//将输入的数字转换成十进制数
        b=8;
        printf("%d进制数%s转换为%d进制数的结果为:n",B,a,b);
        Numchange(m, b);
        printf("n继续请输入1,否则输入0:n");
        scanf("%d", &item);
        break;
    case 9:
        printf("项目结束!n");
        item=0;
        exit(0);
        break;
    default: printf("输入错误!n");
    }
        
    }
}

第二种方法

#include
#include
#define MAXCHAR 101  
 
int Menu();
void choose (int ch);
int char_to_num(char ch);  
char num_to_char(int num);  
long source_to_decimal(char temp[], int source);  
int decimal_to_object(char temp[], long decimal_num, int object);  
void output(char temp[], int length);  
int ch = -1;
int main()
{
    while (1) {
            ch = Menu();
            choose(ch);
            ch = -1;
        }
    return 0;
}

int Menu()
{
    int ch;
    printf("**********************┍ -----------------------┑ *********************n");
    printf("********************** 欢迎使用进制转换系统系统  *********************n");
    printf("**********************┕------------------------┙ *********************n");
    printf("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx菜单xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxn");
    printf("======================================================================n");
    printf(".......       1.十进制数转换成其他进制度        .....          n");
    printf(".......       2.其他进制数转换成十进制        .....            n");
    printf(".......       3.二进制数转换成八进制        .....              n");
    printf(".......       4.八进制数转换成二进制        .....              n");
    printf(".......       5.二进制数转换成十六进制        .....              n");
    printf(".......       6.十六进制数转换成二进制        .....              n");
    printf(".......       7.八进制数转换成十六进制        .....              n");
    printf(".......       8.十六进制数转换成八进制        .....              n");
    printf(".......       9.退出系统        .....              n");

    printf("请输入你的选择:n");
    scanf("%d", &ch);
    return ch;
}
void choose(int ch)
{   int source;  
    int object;  
    int length;  
    long decimal_num;  
    char temp[MAXCHAR];  
    int flag = 1;  
    while (flag)
        
    {switch (ch)
    {
    case 1:
        printf("转换前的十进制数是:");
        scanf("%s", &temp);
        source = 10;
        printf("转换后的进制是:");
        scanf("%d", &object);
        printf("转换后的数是:");
        decimal_num = source_to_decimal(temp, source);
        length = decimal_to_object(temp, decimal_num, object);
        output(temp, length);
        printf("继续请输入1,否则输入0:n");
        scanf("%d", &flag);
        break;
    case 2:
        printf("转换前的其他进制数是:");
        scanf("%s", &temp);
        printf("转换前的进制是:");
        scanf("%d", &source);
        printf("转换后的进制是:");
        scanf("%d", &object);
        printf("转换后的数是:");
        decimal_num = source_to_decimal(temp, source);
        length = decimal_to_object(temp, decimal_num, object);
        output(temp, length);
        printf("继续请输入1,否则输入0:n");
        scanf("%d", &flag);
        break;
    case 3:
        printf("转换前的二进制数是:");
        scanf("%s", &temp);
        source = 2;
        object = 8;
        printf("转换后的八进制数是:");
        decimal_num = source_to_decimal(temp, source);
        length = decimal_to_object(temp, decimal_num, object);
        output(temp, length);
        printf("继续请输入1,否则输入0:n");
        scanf("%d", &flag);
        break;
    case 4:
        printf("转换前的八进制数是:");
        scanf("%s", &temp);
        source = 8;
        object = 2;
        printf("转换后的二进制数是:");
        decimal_num = source_to_decimal(temp, source);
        length = decimal_to_object(temp, decimal_num, object);
        output(temp, length);
        printf("继续请输入1,否则输入0:n");
        scanf("%d", &flag);
        break;
    case 5:
        printf("转换前的二进制数是:");
        scanf("%s", &temp);
        source = 2;
        object = 16;
        printf("转换后的十六进制数是:");
        decimal_num = source_to_decimal(temp, source);
        length = decimal_to_object(temp, decimal_num, object);
        output(temp, length);
        printf("继续请输入1,否则输入0:n");
        scanf("%d", &flag);
        break;
    case 6:
        printf("转换前的十六进制数是:");
        scanf("%s", &temp);
        source = 16;
        object = 2;
        printf("转换后的二进制数是:");
        decimal_num = source_to_decimal(temp, source);
        length = decimal_to_object(temp, decimal_num, object);
        output(temp, length);
        printf("继续请输入1,否则输入0:n");
        scanf("%d", &flag);
        break;
    case 7:
        printf("转换前的八进制数是:");
        scanf("%s", &temp);
        source = 8;
        object = 16;
        printf("转换后的十六进制数是:");
        decimal_num = source_to_decimal(temp, source);
        length = decimal_to_object(temp, decimal_num, object);
        output(temp, length);
        printf("继续请输入1,否则输入0:n");
        scanf("%d", &flag);
        break;
    case 8:
        printf("转换前的十六进制数是:");
        scanf("%s", &temp);
        source = 16;
        object = 8;
        printf("转换后的八进制数是:");
        decimal_num = source_to_decimal(temp, source);
        length = decimal_to_object(temp, decimal_num, object);
        output(temp, length);
        printf("继续请输入1,否则输入0:n");
        scanf("%d", &flag);
        break;
    case 9:
        printf("项目结束!");
        flag=0;
        exit(0);
        break;
    default: printf("输入错误!n");
    }
        
    }
}



int char_to_num(char ch)
{
    if(ch>='0' && ch<='9')
        return ch-'0';  
    else
        return ch-'A'+10;  
}
char num_to_char(int num)
{
    if(num>=0 && num<=9)
        return (char)('0'+num-0);  
    else
        return (char)('A'+num-10);  
}
long source_to_decimal(char temp[], int source)
{
    long decimal_num = 0;  
    int length;
    int i;
    for( i=0; temp[i]!=''; i++ );
    length=i;
    for( i=0; i<=length-1; i++ )  
        decimal_num = (decimal_num*source) + char_to_num(temp[i]);
    return decimal_num;
}
int decimal_to_object(char temp[], long decimal_num, int object)
{
    int i=0;
    while(decimal_num)
    {
        temp[i] = num_to_char(decimal_num % object);  
        decimal_num = decimal_num / object;  
        i++;
    }
    temp[i]='';
    return i;
}
void output(char temp[], int length)
{
    int i;
    for( i=length-1; i>=0; i--)  
        printf("%c", temp[i]);
    printf("n");
}

对我的博客或其他方面有任何见解或问题的话都可以私信我
或者联系本人QQ:3128909688
微信:DreamHerome
欢迎致电

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429579.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号