在C中将数组的元素放在另一个上

时间:2018-01-06 02:14:56

标签: c arrays

我是C的新人我有关于数组的问题

我有两个数组,其中元素的存储量逐渐减少:

int a[]={50, 40, 25, 8, 6};

int b[] = {38, 25, 2};

我假装将两个数组中较大的元素存储在数组a中,并丢弃其余数组。制作这样的东西

int a[]={50, 40, 38, 25, 25}

我知道我必须使用循环,但我不知道该放什么,像这样

#include<stdio.h>

int main(){
    int a[]={50, 40, 25, 8, 6};
    int b[] = {38, 25, 2};
    int i, j, w, x;

    for(i=0; i<3; i++){

        for(j=0; j<5; j++){
            x=b[i];
            w=j;
            while(w>0 && a[j-1]<b[i]){
                 a[w]=a[w-1];
                 j--;
            }
            a[w]=x;
        }
    }


    for(i=0;i<5; i++){
        printf("[%d]", a[i]);
    }
return 0;
}

但是不行。谢谢:))

1 个答案:

答案 0 :(得分:0)

由于您正在完成填充数组5的任务,因此您只需要1个循环到5

#include <stdio.h>

int main(){

    int a[]={50, 40, 25, 8, 6};
    int b[] = {38, 25, 2};
    int i, val[5];
    int ai = 0, bi = 0; //current a index and b index

    for(i=0; i<5; i++){ 

        if (a[ai] > b[bi]) { 
            val[i] = a[ai]; 
            ai++;
        }
        else {
            val[i] = b[bi];
            bi++;
        }
    }

    for(i=0;i<5; i++){
        printf("[%d]", val[i]);
    }
return 0;
}

编辑:

就像有人提到的那样,你还需要注意一个阵列中元素耗尽的情况。 例如,如果b的所有元素都被加载到val中,则索引bi将最终为3,这超出了界限,if (a[ai] > b[3])的检查可能会导致问题。

要解决此问题,在比较之前添加一个简单的检查就足够了 由于这是一些功课和数组a与结果数组大小相同,您只需检查bi

if ((bi < 3) && (a[ai] > b[bi])) {
//...