题目:
int main()
{
char a[1000];
int i;
for(i=0; i<1000; i++)
{
a[i] = -1-i;
}
printf("%d",strlen(a));
return 0;
}
思路分析:
已知条件:
- 通过循环遍历,我们得到的结果是 -1、-2、-3、-4等等。这些是数组内部的存储的元素,但题目要求的是以%d形式打印出 strlen(a),a是一个char类型的数组。
- strlen:是求字符串中,在\0之前的字符个数。
- \0在ASCII中的数值是0
将已知条件进行整合,我们可以直到该代码的意思:求出在遇见字符'0'之前的字符个数。
而这里需要的就是char的数据范围。
char的范围,详情:http://t.csdn.cn/6gfRy
根据char的范围 -128~127 我们得知非0的数是-1~-128以及1~127,总共255,又因为-128 减去1,根据二进制数位的加减1我们得到-128 减去1等于127
又可根据char的范围是一个循环的圆形原理(http://t.csdn.cn/v2H8p)得出计算结果。
又因为题目是从-1开始进入循环的,所以是求从-1开始到0之间的数,一共是255个。