#include<stdio.h>
int shuru(int a[]);
void paixu(int *p,int n);
void shuchu(int a[],int n);
void hebing(int a[],int b[],int c[],int na,int nb);
int main()
{
int a[100], b[100], c[200],na,nb;
na=shuru(a);//na,nb记录数组的有效数字的长度
paixu(a,na);
shuchu(a,na);
nb=shuru(b);
paixu(b,nb);
shuchu(b,nb);
hebing(a,b,c,na,nb);
shuchu(c,na+nb);
return 0;
}
int shuru(int a[])
{
int i=0;
static int x=0;//控制输出的文字
char k;//用来控制输入结束
if(x==0)
printf("输入数组a的整数(输入回车可退出输入):\n");
if(x==1)
printf("输入数组b的整数(输入回车可退出输入):\n");
x=1;
for(i=0;i<100;i++)
{
scanf("%d",&a[i]);
if((k=getchar())=='\n')
{
printf("该数组的有效长度:%d\n",i+1);
return i+1;
}
}
}
void paixu(int *p,int n)
{
int i=0,j=0, min=0;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(*(p+i)>*(p+j))
{
min=*(p+j);
* (p+j)=* (p+i);
* (p+i)=min;
}
}
}
}
void shuchu(int a[],int n)
{
int i=0;
static int x=0;
if(x==0)
{
printf("按升序排序后的a数组为:\n");
x=1;
}
else if(x==1)
{
printf("按升序排序后的b数组为:\n");
x=-1;
}
else if(x==-1)
printf("合并了a,b数组的c数组为:\n");
for(i=0;i<n;i++)
{
printf("%-5d",a[i]);
if((i)%10==0&&i!=0)
printf("\n");//每输出10个数换行一次
}
printf("\n");
}
void hebing(int a[],int b[],int c[],int na,int nb)
{
int i=0,j=0,k=0;
if(na>=nb)
{
for(i=0;i<nb+1;i++)
for(;j<nb+1;j++)
if(a[i]<=b[j])
{
c[k++]=a[i];
break;//a大于b跳出内层,用下一个a
}
else
{
c[k++]=b[j];//当a的这个元素小于b后,把b的元素给c,同时继续用a的这个元素与b的下一个作比较,直到a的大于b,a就到下一个元素
}
while(i<na)
c[k++]=a[i++];//当b的元素都比较完后直接将a的依次给c
}
else if(na<nb)
{
for(i=0;i<na+1;i++)
for(;j<na+1;j++)
if(a[i]<=b[j])
{
c[k++]=a[i];
break;//a大于b跳出内层,用下一个a
}
else
{
c[k++]=b[j];//当a的这个元素小于b后,把b的元素给c,同时继续用a的这个元素与b的下一个作比较,直到a的大于b,a就到下一个元素
}
while(j<nb)
c[k++]=b[j++];//当a的元素都比较完后直接将b的依次给c
}
}//将a,b数组合并到c数组且c数组按升序排序,a数组与b数组有相同元素时a在前
合并的逻辑太乱了。参考如下:如有帮助,请采纳一下,谢谢。
int ina = 0; //a的起始索引
int inb = 0; //b的起始索引
int inc = 0; //c的起始索引
while(ina < na && inb < nb)
{
if(ina == na && inb < nb)
{
c[inc] = b[inb];
inc++;
inb++;
}else if (ina < na && inb == nb)
{
c[inc] = a[ina];
inc++;
ina++;
}else
{
if (a[ina] < b[inb])
{
c[inc] = a[ina];
inc++;
ina++;
}else
{
c[inc] = b[inb];
inc++;
inb++;
}
}
}
看下判断的地方,是不是少考虑了临界情况
最后一个数丢了
搞这么复杂干啥呢,把a,b先合并到c,然后对c进行paixu()不就行了么
在程序中试了一下,还是那样,最后一个输出是0
不知道你这个问题是否已经解决, 如果还没有解决的话: