c语言一道循环题

#include <stdio.h>

void main(){
int a[6]={12,4,17,25,27,16},b[6]={27,13,4,25,23,16},i,j;
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
if(a[i]==b[j]) break;
if(j<6) printf("%d",a[i]);

}

printf("\n");

}

这题执行的过程有点没明白,我用vc6.0得到的结果是4252716
可是答案上写的是4 25 16, 这个循环顺序让有点混乱,j在任何时候不都小于6吗,怎么还有等于6的时候,而且a[6]我用debug为什么是12呢?

4252716 答案应该是这个吧,J是在任何时候都小于6,这里没有等于6啊,
b[5]={27,13,4,25,23,16}这个了
你定义的 b[6]是这个样子的 b[6]={27,13,4,25,23,16,0}
第一个数就是 b[0]=27 b[1]=13 以此类推 b[5]=16了,知道了吧
还有循环是
第一个FOR循环,给i赋初值0,即 i=0
第二个FOR循环式嵌套在第一个FOR里面的,给j赋初值0,即j=0
第一个if语句,是嵌套在第二个FOR循环里面的。进行比较,第一次先比较a[0]和b[0]是否相等,不相等的话,就再进行第二个FOR语句的j++,使J=1,然后再进行第一个if语句的比较,直到它们相等,就从break跳出去,进行第二个if语句。。第二个if语句是和第二个for语句并列的,即第二个if语句只是嵌套在第一个FOR语句里面。然后输出a[0]。但是当FOR语句循环完了,也没有使a[0]和b[j]相等的话,这个时候j是等于6的,进行第二个if条件语句,因为j=6,不符合if(j<6),所以就不输出a[0],之后就再进行第一个FOR循环,i++,使i=1,然后再一次进行循环。

使你更容易明白点,可以把程序看成这个样子
#include <stdio.h>

void main()
{
int a[6]={12,4,17,25,27,16},b[6]={27,13,4,25,23,16},i,j;
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
if(a[i]==b[j]) break;
}
if(j<6) printf("%d",a[i]);
}
printf("\n");
}

改成这样,容易理解了吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-20
结果是4252716
啊,j可以可等于6,等于6时循环就结束了。这个程序的意思是求两个数组中相同的数并输出。答案上写4 25 16是i和j的位置相同,实际上i和j可以不同,我认为vc调试的答案是对的。你后面的a[6]错了,没有a[6],最多就a[5]
第2个回答  2011-03-20
应该是4252716
先a[i]=4,b[j]中有4,就输出,然后i+1,只要b中有与之相等的,就输出,得4252716
第3个回答  2011-03-20
上面的程序结果是4252716没错。
j 在for(j) 循环内是都小于6,但是正常循环完跳出时,j=6;
不正常跳出就是在 if(a[i]==b[j]) break; 此时跳出循环时,j<6;
所以后面一句 判断 就是指 两个数组有相等的数的时候输出。
如果没有相等的数的时候,前面的循环就会循环到 j=6时结束循环。
a[0]--a[5]才是有意义的。a[6]这个下标本身就超限了。
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{ if(a[i]==b[j]) break; }
if(j<6) printf("%d",a[i]);
}
第4个回答  2011-03-20
首先,这道题的意思很清楚:找到b数组中与a中相等的数字输出。所以输出结果应该是4 25 27 16没错。
其次,那句if(j<6)是为了确定b[j]与a中某个元素相等,因为如果没有相等的话j的那个for循环会执行6次,到“if(j<6) printf("%d",a[i]);”时j就等于6,就没有输出了。
第三,你定义的数组a[6]只有a[0]到a[5]六个元素,是没有a[6]的。本回答被提问者采纳