c语言范例宝典里的一个转化进制的问题 范例003.c
发表在C语言图书答疑 2012-02-03
是否精华
版块置顶:
#include <stdio.h>
#include <string.h>
main()
{
    long t1;
    int i, n, t, t3;
    char a[100];
    printf("please input a number string:\n");
    gets(a); /*输入n进制数存到数组a中*/
    strupr(a); /*将a中的小写字母转换成大写字母*/
    t3 = strlen(a); /*求出数组a的长度*/
    t1 = 0; /*为t1赋初值0*/
    printf("please input n(2or8or16):\n");
    scanf("%d", &n); /*输入进制数*/
    for (i = 0; i < t3; i++)
    {
        if (a[i] - '0' >= n && a[i] < 'A' || a[i] - 'A' + 10 >= n) /*判断输入的数据和进制数是否相符*/
        {
            printf("data error!!"); /*输出错误*/
            exit(0); /*退出程序*/
        }
        if (a[i] >= '0' && a[i] <= '9') /*判断是否为数字*/
            t = a[i] - '0'; /*求出该数字赋给t*/
        else if (n >= 11 && (a[i] >= 'A' && a[i] <= 'A' + n - 10)) /*判断是否为字母*/
            t = a[i] - 'A' + 10; /*求出字母所代表的十进制数*/
        t1 = t1 * n + t; /*求出最终转换成的十进制数*/
    }
    printf("the decimal is %ld\n", t1); /*将最终结果输出*/


老师  您好!
我想问3个问题
1:循环语句里面的第一个 if(a[i] - '0' >= n && a[i] < 'A' || a[i] - 'A' + 10 >= n)语句里面的三个关系表达式的具体意义是怎样的?为什么要这样写?每一个表达式作用是什么呢?
2:t1 = t1 * n + t;  /*求出最终转换成的十进制数*/
这个表达式是依据什么公式搞出来的吧? 自己总是有点想不明白 这是依据什么写出来的呢?
3:exit()在我用vc++6.0 编译的时候出现了警告 就跟用了strupr函数时 在函数首部却没有加上#include<string.h>时出现的警告一样
期待老师的答复~谢谢!
分享到:
精彩评论 4
张小飞
学分:0 LV1
TA的每日心情
开心
2021-10-24 18:57:39
2012-02-04
沙发
读者你好!
(1)a[i]-‘0’表示a[i]这个字符的十进制数,在if语句中,首先判断这个十进制数是否是n进制数中的有效数字,并且,判断这个数是否小于字符‘A’,即是否为数字,再或(||)上后面的表达式,表示这个字符是否为字母。通过这样一个if语句,就可以判断输入的数据是否和n进制数相匹配。、
(2)t1 = t1 * n + t这条语句是在循环中对输入的每个字符都转换成十进制数后,再相加,t是当前循环中字符的十进制数。这个并不是公式,而是,通过推到得出的算法。
(3)exit()这个函数包含在<stdlib.h>这个头文件中,exit   <process.h>   or   <stdlib.h>   ANSI,   Win   95,   Win   NT   
_exit   <process.h>   or   <stdlib.h>   Win   95,   Win   NT 
 
何羽翼11
学分:0 LV1
TA的每日心情
qqq
2021-04-27 22:06:30
2012-02-04
板凳
老师 那if(a[i] - '0' >= n && a[i] < 'A' || a[i] - 'A' + 10 >= n)
里面的 && a[i] < 'A' 这个表达式是必须的吗? 可以去掉不? 好像没有不会有什么错误, 不知道可不可以以去掉?
去掉的话 会出什么错误呢? 老师能举一个例子不? 谢谢老师!
张小飞
学分:0 LV1
TA的每日心情
开心
2021-10-24 18:57:39
2012-02-04
地板
读者你好!
&& a[i] < 'A' 用于判断16进制数的A~F这几个字符,如果是A~F中的任意字符在16进制数范围内,但如果没有这条语句,就会执行if语句体中的内容。
你可以去掉&& a[i] < 'A' 试一试,运行出来后,在终端输入字符"D",以16进制数判断,看看运行效果。你就能明白这句话的作用了啊。
何羽翼11
学分:0 LV1
TA的每日心情
qqq
2021-04-27 22:06:30
2012-02-04
4L
恩 老师 现在搞懂了 老师谢谢你!^_^
首页上一页 1 下一页尾页 4 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照