int i=0,a[]={3,4,5,4,3}; do{a[i++];{while (a[++i]<5); for(i=0;i<5;i++) printf("%d",a[i]);求详细解
4个回答
展开全部
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, 我已运行确认是这结果, 跟你的结果不一样, 看看是不是哪里还输入错了.
程序并不会出问题, 因为第一次循环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.
展开全部
int i=0,a[]={3,4,5,4,3};//数据的定义并初始化
do {
a[i++];
} while(a[++i] < 5) //执行一步a[i++],然后判断a[++i] 是否大于5,大于5则执行下面的语句,否则,继续循环;唯一要区别的是 i++,是先把i用了在把i+1;++i是先把i+1,再使用i;
//do {}while()是先执行循环体后,后进行条件检查,而while(){}是先检查条件后执行;
for(i=0;i<5;i++)
printf("%d",a[i]);
//就是从数组第一个位置(或者说成0号位置)开始顺序打印出这个5个元素,打印的格式是 整形10进制
do {
a[i++];
} while(a[++i] < 5) //执行一步a[i++],然后判断a[++i] 是否大于5,大于5则执行下面的语句,否则,继续循环;唯一要区别的是 i++,是先把i用了在把i+1;++i是先把i+1,再使用i;
//do {}while()是先执行循环体后,后进行条件检查,而while(){}是先检查条件后执行;
for(i=0;i<5;i++)
printf("%d",a[i]);
//就是从数组第一个位置(或者说成0号位置)开始顺序打印出这个5个元素,打印的格式是 整形10进制
追问
a[i++]弄错了是a[i]++啊 答案输出是 45535...当i=1的时候 while语句里 就变成了a[2]==5<5.然后怎么执行的啊?求解释
追答
那我就不用回答了 呵呵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
int main()
{
int i=0,a[]={3,4,5,4,3};
do //do..while();循环,先执行一次循环体
{
a[i++]; //a[i++]; 第一次相当于 3; 所以什么都不做,反正不管怎么循环始终都没做任何事
}
while (a[++i]<5); //第一次来判断 4<5成立了,继续循环 第二次。。以下省略
for(i=0;i<5;i++) //循环5次
printf("%d\n",a[i]); //输出a[i]的值,也就是把a[]中的所有值都输出一遍了
return 0;
}
希望能帮助你,望采纳。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-04
展开全部
当中那个花括号什么啊,这不就是把这个数组输出吗,do a[i++];while (a[++i]<5);这个循环没有意义吧
追问
打错了 晕死 是 do a[i]++ 其他不变 求解释
追答
有前置运算符++i ,所以当a[1]<5时 a[0]+1=4;因为a[2]=5,所以当a[2]<5是条件不成立,所以数组变成了 4,4,5,4,3 ,while(a[++i]<5) 判断的是大于等于5是跳出循环
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询