三十六以内的进制转换(加注释多多),小程序版

-

今天老师讲了进制转换,废话少说,下面是正文:


源代码+注释

//我把这个程序写成了小软件,大家可以运行试试!!!
#include<stdio.h>
#include<string.h>     //字符串头文件 
int len,shu=0,yu,n;     //yu是余数
int main()
{ 
    char shuru[666],shuchu[666],a[666];
    printf("十进制转其他进制(By STY)\n");
    printf("(其他进制小于等于三十六进制)\n\n"); 
    printf("输入要转换的进制:\n");
    printf("退出请按“Ctrl+Z”(在键盘上),并按回车,谢谢使用!\n");
    while(scanf("%d",&n)!=EOF)     //整个程序可循环使用 
    {
        memset(shuru,0,sizeof(shuru));     //清零字符串 
        memset(shuchu,0,sizeof(shuchu));
        memset(a,0,sizeof(a));
        shu=len=yu=0;    //清零变量 
        printf("\n");    //换行 
        printf("输入要转换的数字:\n");
        scanf("%s",shuru);     //输入数字(存在字符串中) 
        printf("\n");
        len=strlen(shuru);     //计算字符串长度 
        for(int i=0;i<len;i++)    //这个循环是把输入的字符转为数字 
        {
            shu*=10;
            shu+=shuru[i]-'0';    //这里使用了ASCII码表也可以写"-48"(0的ASCII码) 
        }
        if(shu==0)     //如果输入个数字为零,输出(0),不然会输出(空格) 
            printf("0\n");
        else
        {
            int j=0;    
            for(;shu!=0;j++)     //把十进制转换为其他进制 
            {
                yu=shu%n;     //下面就是算法了 
                if(yu>9)
                    shuchu[j]=yu+55;    //其实"yu+55"是"yu+'A'-10"
                else                     
                    shuchu[j]=yu+48;    //'0'的ASCII码为48 
                shu/=n;         //数变成商 
            }
            for(int ii=j-1;ii>=0;ii--)    //这里就需要理解了 
                a[j-ii-1]=shuchu[ii];     //将输出的数组倒过来赋值给a数组 
            a[j]='\0';     //加上字符串结束符(结束符的ASCII码为0,或NULL) 
            printf("结果:\n");
            printf("%s\n",a);    //输出 
            printf("\n");
        }
    printf("十进制转其他进制(By STY)\n");
    printf("其他进制小于等于三十六进制)\n\n"); 
    printf("输入要转换的进制:\n");
    printf("退出请按“Ctrl+Z”(在键盘上),并按回车,谢谢使用!\n");
    }
    return 0;
} 

突然发现自己好菜,只能转换三十六以内的进制转换,差呀!
希望大家喜欢这篇文章!!!
如有问题请留言,谢谢!!!

>>>我的博客<<<

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个C语言计算器程序,其中包含转换功能的示例代码,带有详细的注释说明。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> // 将一个十整数转换为二字符串 char* dec2bin(int dec) { char* result = (char*) malloc(33 * sizeof(char)); // 分配足够的空间,用于存储二字符串 int i = 0; do { result[i++] = (dec % 2) + '0'; // 取出二位,转为字符 dec /= 2; } while (dec != 0); result[i] = '\0'; strrev(result); // 翻转字符串 return result; } // 将一个二字符串转换为十整数 int bin2dec(char* bin) { int result = 0; int len = strlen(bin); for (int i = 0; i < len; i++) { result = result * 2 + (bin[i] - '0'); // 将字符转为数字,累结果 } return result; } // 将一个十整数转换为十六字符串 char* dec2hex(int dec) { char* result = (char*) malloc(9 * sizeof(char)); // 分配足够的空间,用于存储十六字符串 sprintf(result, "%X", dec); // 使用 sprintf 函数将整数转为十六字符串 return result; } // 将一个十六字符串转换为十整数 int hex2dec(char* hex) { int result = 0; int len = strlen(hex); for (int i = 0; i < len; i++) { int digit = 0; if (isdigit(hex[i])) { digit = hex[i] - '0'; // 如果是数字,直接转换为数字 } else { digit = toupper(hex[i]) - 'A' + 10; // 如果是字母,转为相应的数字 } result = result * 16 + digit; // 累结果 } return result; } int main() { int a, b; char op; printf("请输入一个表达式(例如:10+20):\n"); scanf("%d%c%d", &a, &op, &b); // 读取表达式中的三个部分 switch (op) { case '+': printf("%d + %d = %d\n", a, b, a + b); break; case '-': printf("%d - %d = %d\n", a, b, a - b); break; case '*': printf("%d * %d = %d\n", a, b, a * b); break; case '/': printf("%d / %d = %d\n", a, b, a / b); break; case '%': printf("%d %% %d = %d\n", a, b, a % b); break; case '&': printf("%d & %d = %d\n", a, b, a & b); // 位与运算 break; case '|': printf("%d | %d = %d\n", a, b, a | b); // 位或运算 break; case '^': printf("%d ^ %d = %d\n", a, b, a ^ b); // 位异或运算 break; case '~': printf("~%d = %d\n", a, ~a); // 位取反运算 break; case '<': printf("%d << %d = %d\n", a, b, a << b); // 左移运算 break; case '>': printf("%d >> %d = %d\n", a, b, a >> b); // 右移运算 break; case 'b': printf("%d 的二表示为:%s\n", a, dec2bin(a)); // 十转二 break; case 'd': printf("%s 的十表示为:%d\n", (char*) b, bin2dec((char*) b)); // 二转十 break; case 'x': printf("%d 的十六表示为:%s\n", a, dec2hex(a)); // 十转十六 break; case 'h': printf("%s 的十表示为:%d\n", (char*) b, hex2dec((char*) b)); // 十六转十 break; default: printf("无效的运算符!\n"); } return 0; } ``` 该程序首先读取一个表达式,例如 `10+20`,然后使用 `scanf` 函数分别读取表达式中的三个部分,即两个操作数和一个运算符。然后根据运算符行相应的计算或转换,最后输出结果。 其中,转换部分主要使用了 C 语言的字符串处理函数和数值转换函数。例如,将一个十整数转换为二字符串,可以使用 `do...while` 循环和 `strrev` 函数实现。将一个二字符串转换为十整数,可以使用 `for` 循环和字符转数字的方法。将一个十整数转换为十六字符串,可以使用 `sprintf` 函数实现。将一个十六字符串转换为十整数,可以使用 `for` 循环和字母转数字的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值