注册 登录
编程论坛 C++教室

请看看这个小程序

壮志在我胸 发布于 2009-10-09 18:32, 406 次点击
#include"stdio.h"
main(void)
{
    int i,j,k=0,data1[10],data2[10],data3[20];
    printf("请输入10个数(从小到大):");
    for(i=0;i<10;i++)
        scanf(" %d",&data1[i]);
    printf("请输入10个数(从小到大):");
    for(j=0;j<10;j++)
        scanf(" %d",&data2[j]);
    i=0;j=0;
    while(i<10&&j<10)
    {
        if(data1[i]<data2[j])
        {
            data3[k]=data1[i];
            k++;
            i++;
        }
        else
        {
            data3[k]=data2[j];
            k++;
            j++;
        }
    }
    if(i<10)
        for(;i<10;i++)
        {
            data3[k]=data1[i];
            k++;
        }
    if(j<10)
        for(;j<10;j++)
        {
            data3[k]=data2[j];
            k++;
        }
     for(k=0;k<20;k++)
        printf(" %d",data3[k]);
}
我先解释下代码的大意,请输入两组从小到大的数据,然后把两组数据再在data3按从小到大的顺序排列出来
我不明白的地方时,红色部分内容,去掉不行吗?起什么作用呢?
3 回复
#2
Chost2009-10-09 20:02
  不行
  因为只有在下面2中情况下while才会结束:(1):data1[i]执行到data1[9]后,data2[j]没有执行完,这时循环结束应该把data2[]剩下的数据补充到data3[]
  后面。就是您写的红字部分的第2个if语句; 同理可能就是data2[j]执行到data2[9]后,data1[i]还没有执行完,这时循环结束应该把data1[]剩下的数据补充到 data3[]
  后面。就是您写的红字部分的第1个if语句。
         
#3
flyingcloude2009-10-09 20:21
看看这个特殊的例子:
data[1]={1,2,3,4,5,6,7,8,9,10};
data[2]={11,12,13,14,15,16,17,18,19,20};
#4
壮志在我胸2009-10-09 21:49
谢谢二楼,我明白了,我加你好友了,如果你看见了,加我吧,呵呵,以后有问题咱共同探讨啊
1