求解一道C语言基础编程题。
关于ascii码的解释:
首先得知道每个字符和数值的对应关系(图不清晰可看
戳这里:ascii编码对应表
好了,现在看程序中的第一个if语句,在用大于、小于这些运算比较符比较char的时候,会自动转换为整数比较,也就是说‘0’会转换成48,‘1’转换成49……以此类推,最后是‘9’转换成57,你会发现把这些char减去48就会得到它们各自相对应的整数数值,这就是第一个if里面减去48的目的。同理,接下来的else-if语句,‘A’到‘F’也会转换成整数数值,具体对应的数值可以参看ascii表,一样的道理减去‘A’然后加10的目的也是转换成数值,因为在大于10的进制下,A代表10,B代表11……以此类推,因为这个程序最高就16进制了,所以判断到F就可以了。
然后我们来看进制的解释:
所谓进制,其实就是
组合数字的方式
,理解了这一点就很好说了。比如说10进制,为什么198等于198(好像很傻一问题)?其实是因为在十进制下,198(10)=1*10^2+9*10^1+8*10^0=198(好像是这么回事,(?ì_í?)),同一个数字,放在不同的位置,它所代表的分量也不一样,即
组合数字的方式
会影响数字的值,1后面还有2个数字,所以这个1实际上是1*10^2=100,而不是1,其它位置的数字同理,然后把这些值加起来,就得到了整个数字所代表的最终的值,因此我们才有了198=198(好像很有道理)。
但是,198也可能不等于198,什么时候不等于呢?
在不同的进制下
。比如说假如我们的这个198是在16进制下的198,那么198(16)=1*16^2+9*16^1+8*16^0=408(10)=408。
为什么会产生这种差别呢?因为16进制下的那个1代表的分量是1*16^2了,而不是1*10^2了,同理,在其它进制下只需要把乘的数字换成对应的进制的数就好了,比如在9进制下那个1就是1*9^2等等。
这样一来上面程序里面的for语句就好理解了,之所以用for是因为要算出次方(这个应该不用解释),一个数要乘的次方是它后面跟着的数字的个数,所以是“j=0;j
然后把这些值加起来,就得到这个数字对应的十进制下的数值,也就完成了最终的转换。
题主可以随便写些不同进制下的数字,然后自己算出十进制下对应的数值,和网站上得出的结果比较比较,这样也可以加深对进制的理解,同时提高计算能力。
戳这里:在线进制转换
这里给出了一个链接,这种网页到处都是,随便搜一下就可以找到。
本回答由提问者推荐
c语言程序设计基础选择填空题
同意1楼,就第一题选D,其它都正确RTtI5558886652225
计算机编程C语言的基础题
什么叫标注的c格式