#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define ARR_SIZE 20 //array数组大小
int getkey(int key[]);
int getarray(int array[]);
int insert(int array[],int key,int vol);
int result(int flag);
int main()
{
int M,n,flag,vol;
int array[ARR_SIZE];
int *key;
memset(array,0,sizeof(array));//初始化数组为0
printf("请输入M:\n");
scanf("%d",&M);
while(M)//循环M次
{
getarray(array);
printf("请输入n:\n");
scanf("%d",&n);
key=(int *)malloc(n);//根据输入n申请数组大小
//将数组大小放入数组首位,主要由于你给的 getkey(int key[])只
//有一个参数,无法传递数组大小,因此放到手位置传递
key[0]=n;
getkey(key);
for(int i=0;i!=n;i++)//key[]中有n个值,因此n次判断
{
result(insert(array,key[i],ARR_SIZE));
}
memset(array,0,sizeof(array));//清空数组,为下次数据准备
M--;
}
}
int getarray(int array[])
{
printf("\n请输入array[](<=%d):\n",ARR_SIZE);
int tmp,i=0;
while(1)
{
scanf("%d",&tmp);
if(tmp==0)
return 0;
array[i]=tmp;
i++;
}
}
int getkey(int key[])
{
int num=key[0];
for(int i=0;i!=num;i++)
scanf("%d",key++);
}
int insert(int array[],int key,int vol)
{
int now_size=0,p=0;
for(int i=0;i!=ARR_SIZE;i++)
{
if(array[i])
now_size++;//统计array[]数组值的个数
if(array[i]==key)
return -2;// The key is already in this array!
if(key>array[i]&&array[i])
p++; //该位置就是需要插入的位置
}
if(now_size==ARR_SIZE)
return -1;//The array if full!
for(int i=now_size;i>=p;i--)
array[i+1]=array[i];
array[p]=key;
return p; //返回插入位置
}
int result(int flag)
{
if(flag==-1)
printf("The array if full! ");
else if(flag==-2)
printf("The key is already in this array! ");
else
printf("The key is inserted in position %d ",flag);
}
昨天写好没测试,今天测了才发给你。这道题目确实不难,只是题目长。另外关于输出格式有点含糊,如果我理解有偏差,你看了我的代码改下就好。主要逻辑都已经实现了。
追问没这么复杂!这个题只是书上的习题!