线性表的合并问题,其中判断数据的合法性难以实现
程序如下,请高手调试一下/*程序人:李辉
时间:2008年10月8日
*/
#include<stdio.h>
#include<stdlib.h>
int M,N;
int a;
void one(int a1[],int a2[],int a3[]);
void law(int e[],int f);
void Input(int u[],int g);
//主函数
void main()
{ int *arrA,*arrB,*arrC;
int d;
arrA=(int*)malloc(M*sizeof(int));
arrB=(int*)malloc(N*sizeof(int));
arrC=(int*)malloc((M+N)*sizeof(int));//动态分配内存
//输入arrA中元素的个数及值
printf("\nPlease input the num of the arrA:M=");
scanf("%d",&M);
printf("\ninput the data of arrA:\n");
a=1;
while(a==1)
{ Input(arrA,M);
law(arrA,M);
}
system("pause");
//输入arrB中元素的个数及值
printf("\nPlease input the num of the arrB:N=");
scanf("%d",&N);
printf("\ninput the data of arrB:\n");
a=1;
while(a==1)
{ Input(arrB,N);
law(arrB,N);
}
system("pause");
one(arrA, arrB, arrC);
//输出arrC
printf("\narrC=\n");
for(d=0;d<M+N;d++)
printf("%10d",arrC[d]);
printf("\n");
}
//整合输入的两组数据为一组新的非递减数
void one(int a1[],int a2[],int a3[])
{ int x=0,y=0;
int k=0;
while((x<M)&&(y<N))
{
if(a1[x]<=a2[y])
a3[k++]=a1[x++];
else
a3[k++]=a2[y++];
}
while(x<M)
a3[k++]=a1[x++];
while(y<N)
a3[k++]=a2[y++];
}
//输入一组数据
void Input(int u[],int g)
{ int i;
for(i=0;i<g;i++)
scanf("%d",&u[i]);
printf("\n");
}
//判断输入数据的合法性
void law(int e[],int f)
{ int z;
for(z=0;z<f;z++)
{
if((e[z]<=e[z+1])||(f==1))
{
a=0;
}
else
{ printf("\n此为非法数据!!!!!!!!!!!!\n Please input again!\n");
a=1;
break;
}
}
}