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

大家快点看看啊!我怎么也找不出错误!

壮志在我胸 发布于 2009-09-30 17:39, 533 次点击
#include"stdio.h"
void main()
{
    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;i++)
        scanf(" %d",&data2[j]);
    for(i=0;i<10;i++)
        for(j=0;j<10;j++)
        {    if(data1[i]<data2[j])
            {
                data3[k]=data1[i];
                k++;
            }
            else
            {
                data3[k]=data2[j];
                k++;
            }
        }
     for(k=0;k<20;k++)
        printf(" %d",data3[k]);
}
              
帮忙看看哪里错了!!
我的意图是:有两个顺序排列的数组,希望把两个数组按从小到大的顺序排列到DATA3中!
4 回复
#2
flyingcloude2009-09-30 18:29
for(j=0;j<10;i++)
        scanf(" %d",&data2[j]);
这里的 i  应该改成  j

还有你下面的这样的比较是做不到你想要的结果的
比如给你一组测试数据:
data1[10]={1,2,3,4,5,6,7,8,9,10};
data2[10]={11,12,13,14,15,16,17,18,19,20};
那么你的代码就排不出来了

参考一下下面的代码

#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]);
}
#3
a26960262009-10-01 22:22
我觉的做的程序应该在调试   

一般长出错的地方  都会有提示
#4
jolixiaoai2009-10-02 14:38
让我无语一下,第二个for循环应该是j++,而不是i++
………………汗
#5
yxb00012009-10-03 00:43
分为2部分:
1.数组A与数组B中的元素没有重复的,则谁小谁先排入数组C;(因是顺序数组只需比较A、B两数组的首尾元素即可)
2.有重复的则先排重复之前小的,再排重复的(注意,重复的部分需排2次),最后再排数字大于重复的那部分。

[ 本帖最后由 yxb0001 于 2009-10-3 00:47 编辑 ]
1