c语言 数组的合并 内存不能应用。。。
程序代码:
//两个数组合并 #include "stdio.h" int d; //用于记录数组c的大小,和数组c的输出类的一些操作 void main() { int a[50],b[50],c[100]; int i,j,k; //i表示a数组的大小 j表示b数组的大小 k用于数组的输出 printf("数组a的输入,输入一个数,表明你要输入多少个数到数组a中\n"); scanf("%d",&i); for(k=0;k<i;k++) scanf("%d",a[k]); printf("数组b的输入,输入一个数,表明你要输入多少个数到数组b中\n"); scanf("%d",&j); for(k=0;k<j;k++) scanf("%d",b[k]); void px(int *p,int n); //声明 排序 冒泡法 px(a,i); //调用 px(b,j); //调用 void prin(int *p,int n); //声明 数组的输出函数 prin(a,i); prin(b,j); void hb(int *o,int *p,int *q,int m,int n); //声明 两个数组的合并函数 前提:这俩个数组必须是排好序的 hb(c,a,b,i,j); prin(c,i+j); } void px(int *p,int n) //自定义函数 排序 冒泡法 {int i,j,t,leap; for(i=0;i<n-1;i++) //外层循环n-1次,一次循环沉淀一个数 { leap=0; //leap作为标记,是否两数相换 for(j=0;j<n-i-1;j++) //内循环n-i-1次 { if(p[j]>p[j+1]) //比较两个数 { t=p[j]; p[j]=p[j+1]; p[j+1]=t; //来两个数交换 leap=1; //交换了,标记leap=1 } } if(leap==0) break; //经历了一个内for循环,leap==0的话,表明排序成功了,不需要接下来在排序了。 } } void prin(int *p,int n) //自定义函数 数组输出函数 { int k,sum=0; for(k=0;k<n;k++) { printf("%d ",p[k]); sum++; if(sum%10==0) printf("\n"); } printf("\n"); } void hb(int *o,int *p,int *q,int m,int n) //m为p指向数组的大小 n为q指向数组的大小 指针o指向合并的数组 { int i=0,j=0,k; //i为p指向数组的大小 j为q指向数组的大小 while(1) { if(p[i]<q[j]) { o[d]=p[i]; i++; } else { o[d]=q[j]; j++; } d++; if(i==m||j==n) break; } if(i==m) { for(k=j;k<n;k++) { o[d]=q[k]; d++; } } if(j==n) { for(k=i;k<m;k++) { o[d]=q[k]; d++; } } }求大神帮忙啊