碧海潮声大学生网

标题: 求C语言高手,有谁能解答详细一点 [打印本页]

作者: 一流品质    时间: 2011-3-13 15:21
标题: 求C语言高手,有谁能解答详细一点

#include <stdio.h>

#define MAXLEN 80

main()

{int k=0,number=0;

char str[MAXLEN];

while((str[k]=getchar())!='#')


k++;

str[k]='\0';

for(k=0;str[k]!='\0';k++)


if(str[k]>='0'&& str[k]<='9'||str[k]=='A'||str[k]=='B')


if(str[k]>='0'&& str[k]<='9')


number=number*12+str[k]-'0';


else if(str[k]=='A'||str[k]=='B')


number=number*12+str[k]-'A'+10;


else ;//
15


else break;
//
16


printf("%d\n",number);

}

17)、程序运行时,输入10#,输出
17

A16
B
10

C12
D
1

为什么选A

18)、程序运行时,输入1a0#,输出
18

A264
B
10

C1
D
12

为什么选C


作者: 一流品质    时间: 2011-3-13 17:52
海院难道没有人才了吗?
作者: 一流品质    时间: 2011-3-13 21:53
不会吧,好大学与差大学差别实在是太大了,我感觉很悲哀......................
作者: rubby38324    时间: 2011-3-18 12:11
回复 3# 一流品质


     你好,我知道这是浙江省计算机二级的题目,但是我想说这个题目有点问题,出题人是想把一个以字符串显示的16进制转换成十进制的数字。但是number=number*16+str[k]-'0';和number=number*16+str[k]-'A'+10;他都把写成了12.这就导致第一个题目的运行结果是12而不是16.至于第二题嘛,为什么是1?因为当外层for循环进入第二次时,str[1]='a';不满足if的条件,而与第一个if配对的else是else break;结束了整个循环,所以输出1.浙江省计算机二级还有一些错题。你到时可以联系我,我有个c语言群,你加下吧,群号码:74045607
作者: rubby38324    时间: 2011-3-18 12:24
我在补充下,number=number*12+str[k]-'0';和number=number*12+str[k]-'A'+10;你也可以不改,这样就是把12进制的数转化成十进制。这样第一题就选C.但是数字后加个#在汇编语言里就是16进制,出题人搞成12进制,真不知道怎么想的。




欢迎光临 碧海潮声大学生网 (http://www.zjoubbs.com/) Powered by Discuz! X3.2