作业帮 > 综合 > 作业

int i=0,a[]={3,4,5,4,3}; do{a[i++];{while (a[++i]

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/06/11 09:42:22
int i=0,a[]={3,4,5,4,3}; do{a[i++];{while (a[++i]
while前的括号打反了?

程序并不会出问题, 因为第一次循环a[i++];执行后, i = 1; while条件中先++i, 导致i = 2, 而a[2] < 5 条件是不成立的, 直接跳出了do {} while循环. 执行for循环遍历打印a数组.

这里如果a[] = {2,3,4,5,4,3}就出问题了, 正好把a[3]=5跳过去了, 会再次进入循环, 结果是数组越界了. 结果就不一定了, 越界后如果那段内存不可读, 程序就崩溃了, 如果可读读则读到一个随机值, 正好是大于5的, 也就碰巧出循环了.

a[i]++ ?
那分析是这样:
第一次: a[i]++; 此时a[0] = 4; i = 0;
while (a[++i] < 5); 此时i = 1, 判断的是a[1] < 5, 条件成立
第二次:a[i]++; 此时a[1] = 5; i = 1;
while (a[++i] < 5); 此时i = 2; 判断的是a[2] < 5, 条件不成立, 跳出循环.

数据变成45543, 我已运行确认是这结果, 跟你的结果不一样, 看看是不是哪里还输入错了.
再问: 哦哦 答案是45543没错 额 跳出循环之后怎么是输出5543啊咳咳 初学者 不太懂啊求详细的后面是如何执行的
再答: 跳出循环后, 只有数组下标0和下标1加了1, a[0] 从3变成4, a[1]从4变成5, 第三次条件不成立了, 所以a[2] = 5, a[3] = 4, a[4] = 3都没有变, 结果自然就是45543了 后面的for循环是就是遍历整个数组,从下标0打印到下标4.