数组合并。用户输入两个有序(从小到大)的数组,合并后仍然成为一个有序(从小到大)数组输出。(要求使用函数和指针作为参数传递完成)
自己写的运行结果不对,dalao帮忙改改错
#include<stdio.h>
void hb(int a[], int b[], int c[]);
int main()
{
int a[5] = { 0 }, b[5] = { 0 };
int c[10] = { 0 };
int* pi = a, * pj = b, * pk = c;
printf("请输入数组a\n");
for (pi =a; pi < a+5; pi++)
scanf_s("%d", pi);
printf("请输入数组b\n");
for (pj =b; pj <b+5; pj++)
scanf_s("%d", pj);
hb(a, b,c);
for (pk = c; pk < c + 10; pk++);
{
printf("%d ", *pk);
}
}
void hb(int a[], int b[],int c[])
{
int* pa, * pb, * pc;
pa = a, pb = b, pc = c;
for (;(pa<a+5)&&(pb<b+5);pa++,pb++)
{
if (*pa> *pb) {
pc = pb, pc++;
pc = pa, pc++;
}
else {
pc = pa, pc++;
pc = pb, pc++;
}
}
}
我这个运行过了的,你对比下,你的程序有3点问题,其中前面的已经说了一个就是要用星号代表对值做改变,但是
要认识到,你逻辑是排序,而不是直接交叉;第三个问题,你输出c数组那个for循环有冒号,后面输不出了
#include <stdio.h>
void hb(int a[], int b[], int c[]);
int main()
{
int a[5] = { 0 }, b[5] = { 0 };
int c[10] = { 0 };
int* pi = a, * pj = b, * pk = c;
printf("请输入数组a\n");
for (pi = a; pi < a + 5; pi++)
scanf_s("%d", pi);
printf("请输入数组b\n");
for (pj = b; pj < b + 5; pj++)
scanf_s("%d", pj);
hb(a, b, c);
for (pk = c; pk < c + 10; pk++)
{
printf("%d ", *pk);
}
}
void hb(int a[], int b[], int c[])
{
int* pa, * pb, * pc;
pa = a, pb = b, pc = c;
for (; (pa < a + 5) && (pb < b + 5);)
{
if (*pa > * pb)
{
*pc = *pb, pb++; pc++;
}
else
{
*pc = *pa, pa++; pc++;
}
}
while (pa < a + 5) {
*pc = *pa, pa++; pc++;
}
while (pb < b + 5) {
*pc = *pb, pb++; pc++;
}
}
pc = pb, pc++;
pc = pa, pc++;
…………………………………………
(* pc)=* pb;
pc++;
…………………………………………
以此类推。你在这里面应该改的是数值,你把指针的位置改了没用
if (*pa> *pb) {
*pc = *pb, pc++;
*pc = *pa, pc++;
}
else {
*pc = *pa, pc++;
*pc = *pb, pc++;
}
定位一个字母键,用胶布贴紧。在重启。