问一道关于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,但是我算不出这个 结果,求给位帮忙解答(要解答思路),谢谢大家!如有写法错误,纯属笔误 展开
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,但是我算不出这个 结果,求给位帮忙解答(要解答思路),谢谢大家!如有写法错误,纯属笔误 展开
2个回答
展开全部
首先,我说一下,你这个题很难搭洞,我猜想你的运行环境是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了,呵呵。
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了,呵呵。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询