C语言题目:用指针方法实现将两个有序的数组合并成一个有序数组#include<stdio.h> #define N 20 int main() { int a[N] ={ 0 }, b[N] ={ 0 }; int anum,bnum,c[N+N]; int *pi, *pj,*pk; scanf("%d",&anum); //输入数组a元素个数 for(pi=a;pi<a+anum;pi++) { scanf("%d",pi); } scanf("%d",&bnum); //输入数组b元素个数 for(pj=b;pj<b+bnum;pj++) { scanf("%d",pj); } /***** 在数组a和b都有数据时比较两个数组 *****/ /********** Begin *********/ /********** End **********/ /***** 如果数组a还有数据 *****/ /********** Begin *********/ /********** End **********/ /***** 如果数组b还有数据 *****/ /********** Begin *********/ /********** End **********/ /***** 输出数组c *****/ /********** Begin *********/ /********** End **********/ printf("\n"); return 0; }输入 第一行为n,表示输入数组a的n个整数。 第二行为从小到大的n个整数。 第三行为m,表示输入数组b的m个整数。 第四行为从小到大的m个整数。 输出 输出合并成后的有序数组 输入输出示例如下: 测试输入: 10 10 15 42 52 59 64 67 73 82 88 3 24 32 57 预期输出: 10 15 24 32 42 52 57 59 64 67 73 82 88
时间: 2023-06-29 18:07:06 浏览: 120
指针方法实现将两个有序的数组合并成一个有序数组的代码如下:
```c
#include <stdio.h>
#define N 20
int main() {
int a[N] = {0}, b[N] = {0};
int anum, bnum, c[N + N];
int *pi, *pj, *pk;
scanf("%d", &anum);
for (pi = a; pi < a + anum; pi++) {
scanf("%d", pi);
}
scanf("%d", &bnum);
for (pj = b; pj < b + bnum; pj++) {
scanf("%d", pj);
}
pi = a;
pj = b;
pk = c;
while (pi < a + anum && pj < b + bnum) {
if (*pi < *pj) {
*pk++ = *pi++;
} else {
*pk++ = *pj++;
}
}
while (pi < a + anum) {
*pk++ = *pi++;
}
while (pj < b + bnum) {
*pk++ = *pj++;
}
for (pk = c; pk < c + anum + bnum; pk++) {
printf("%d ", *pk);
}
printf("\n");
return 0;
}
```
代码思路:
1. 首先读入两个有序数组 a 和 b,以及它们的长度 anum 和 bnum;
2. 使用指针 pi、pj 和 pk 分别指向数组 a、b 和 c 的开头;
3. 比较 a 和 b 中当前位置的元素,将较小的元素放入 c 数组中;
4. 如果 a 或 b 数组中还有元素,将它们全部放入 c 数组中;
5. 遍历输出 c 数组中的元素,即为合并后的有序数组。
阅读全文