问一道关于C语言的试题,在此先谢谢大家,试题在下面,如果正确的话我保证会给大家加分的

以下程序运行结果是()A,-5823B.22C.33D.693825main(){charch[2][5]={"693","825"},*p[2];inti,j,s=0;... 以下程序运行结果是()
A,-5823 B.22 C.33 D.693825
main()
{ char ch[2][5]={"693","825"},*p[2];
int i,j,s=0;
for(i=0;i<2;i++)
p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>='0'&&p[i][j]<='9';j+=2)
s=10*s+p[i][j];
printf("%d\n",s);
}
我看到的正确答案是A,但是我算不出这个 结果,求给位帮忙解答(要解答思路),谢谢大家!如有写法错误,纯属笔误
展开
 我来答
vanassembly
2009-09-13 · TA获得超过218个赞
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:117万
展开全部
首先,我说一下,你这个题很难搭洞,我猜想你的运行环境是TC,因为从结果看出了负值,也圆告就是占用了符号位,即你的int是两个byte。
1.二维字符数组用字符串常量赋值
最终结果为
'6','9','3','\0'(0),0
'8','2','5','\0'(0),0
注意字符串的末尾自动加'\0',还有啊,数组初始化时初始值少于维数时自动以0补齐
2.*p[2]为指针数组,即保存2个指针,负值后分别指向ch[0]和ch[1],相当于一维数组名即'6'和'8'所在位置
3.取字符运算,对于字符实际存储为ANSII码值,转换后为(十进制)橘枝明
54,57,51,0,0
56,50,53,0,0
两层循环运算取出的数分别为
54,51,56,53。运算过程
0*10+54=54
54*10+51=591
591*10+56=5966
5966*10+53=59713???
为什么选项中没有呢?
因为出题者的意思int为两个字节
5966*10=59660=0xe90c超出了int范围占用了符号位而解释成十进制的-5876
而怎么解释与运算无关,继续计算,最后得出的59713=0xe941也当然会被解释成-5823了。看不太清可以把二进制数写出,和int的范围一比较就很清楚了。
其实int的大小是与机器以及编译器相关的,现在基本上都是四个字节的
得出59713是很合理的,在这样的环境下不妨把s的类型改为short(多是2个自节),就得到-5823了,呵呵。
a4321559
2009-09-13 · TA获得超过521个赞
知道小有建树答主
回答量:236
采纳率:0%
帮助的人:288万
展开全部
不知道你的是什么环境下得的结果
我的环境是vc6.0 最后的结果是59713
是用ascii字符表么???
如果是的话 那字符的对应只能是正数啊。。
怎么可能计算出负数??
比液谨如 ‘0’=48 ‘9’=57
这样子的吵埋羡。。
我升拍的结果我还可以理解 但是他的答案。。理解不上去 哪里的题啊。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式