计算机二级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) 。
A、16 B、10 C、12 D、1
(18) 程序运行时,输入1a0#,输出 (18) 。
A、264 B、10 C、1 D、12
(19) 将第16行改为“;”后,程序运行时,输入a*0#,输出 (19) 。
A、0 B、120 C、10 D、12
(20) 将第16行改为“else break;”后,删除第15行,程序运行时,输入160#,输出 (20) 。
A、10 B、12 C、216 D、1

#include <stdio.h>

#define MAXLEN 80

int main(void)
{
int k=0,number=0;
char str[MAXLEN];

while((str[k]=getchar())!='#')
k++;
str[k]='\0';

for(k=0;str[k];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);

return 0;
}

---- 分析如下 ----
第17题
程序输入10#,
第一步 number=0*12+1=1
第二步 number=1*12+0=12

第18题
程序输入1a0#
第一步 number=0*12+1=1
因为 a 不在 A 和 Z范围内,所以跳出循环,此时number=1

第19题,程序修改第16行
程序输入a*0#
因为a和*都不是 0到9,A 和 B 范围内,所以不能进行计算 number 值
所以 number=0*12+0=0

第20题,程序删除第15行,恢复第16行
这时的作用和第19题差不多,因为不会执行 else break;LZ自行分析
第一步:num=0*12+1=1
第二步:num=1*12+6=18
第三步:num=18*12+0=216

LZ自己再好好思考下。。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-11-05
这是输入 12 进制数 ,转换为 10 进制数 ,并输出。
/*第15行*/ 属于 内层 if ,用于计算这个数的十进制;
/*第16行*/ 属于外层 if ,用于终止计算,即出现非法字符时停止计算,跳出循环。
将第16行改为“;”后,出现非法字符仅仅忽略,并不跳出循环,继续读入计算直至串结束。
所以结果为:
17) C 1*12^1 + 0*12^0 = 12
18) A 1*12^2 + a*12^1 + 0*12^0 = 264
19) B a*12^1 + 0*12^0 = 120
20) C 1*12^2 + 6*12^1 + 0*12^0 = 216
a 相当于 10 ,b 相当于 11
相似回答