我是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;
}
但是不行。谢谢:))
答案 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])) {
//...