下面程序的运行结果是 。

#include <stdio.h>

int main()

{ char ch[7] = {“12ab56”};

int i, s =0;

for (i =0; ch[i]>=’0’ &&ch[i]<=’9’;i+=2 ) s =10*s +ch [ i ]- ‘0’; printf (“ %d\n” , s);

return 0;

}

A. 1
B. 1256
C. 12ab56
D.
1

2

5

6

参考答案: A
怎么做的,不会,谁能讲一下吗,谢啦

你应该就这一句不好理解吧?
for (i =0; ch[i]>=’0’ &&ch[i]<=’9’;i+=2 )
s =10*s +ch [ i ]- ‘0’;
printf (“ %d\n” , s);
分下格式,容易看。
for循环,循环进行的条件是 ch[i]是'0'字符到'9'字符之间。首先i=0,ch[0]就是 char ch[7] = {“12ab56”}; 这个字符串的第一个字符,就是'1'符合条件,进入循环的下一条语句s =10*s +ch [ i ]- ‘0’; s = 0,所以10*s是0,ch[0]-'0'='1'-'0' =1,2个字符串进行算术运算,取他们的asc 编码进行运算,你查下编码表就知道了,‘1’比‘0’大1.然后相加 s = 0+1 =1。
然后进入循环更新式,也就是i+=2 这一条了,这个简单吧,i = i+2,开始i = 0, 现在 i=2了,然后i=2代入测试式ch[i]>=’0’ &&ch[i]<=’9’,ch [2]这次是字符数组的的第3个元素,也就是'a'了,不满足循环条件,所以不执行循环的下一条语句s =10*s +ch [ i ]- ‘0’,循环结束。
然后输出s的值,s = 1,输出1
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-02
首先这里的for循环没有打{}号括起代码来,所以他只是循环紧跟着下面的一句代码,也就是这句,s =10*s +ch [ i ]- ‘0’;这里的整形运算加字符还是整形
i == 0,s == 0,for第一次循环:ch[0] =‘1’满足for循环条件, s = 10*s +ch[i]- '0'; 所以s=10*0+1-0,s的结果为1,再运算 i+=2 ,所以i=i+2,i的结果为2
i==2,s==1,for第二次循环:ch[2] =‘a’不满足循环条件,循环结束,执行下一句,printf (“ %d\n” , s);所以打印结果为1
希望能对你有所帮助,建议你去用调试的工具,来运行代码,你加了我为好友的,呵呵
第2个回答  2011-06-01
放到程序里调试一下就知道了。追问

要笔试的,要那样我还不知道为什么啊

追答

调试啊你看for循环是怎么执行的啊。

追问

就是做不下去啊???

追答

搞程序是要有耐心的。

追问

我知道,我不会啊,你能帮我讲解一下吗,快考试啦

追答

明天吧,今天有点晚了。

追问

恩,好的,那谢你啦

相似回答