求一下C 语言编程题的过程,谢谢

2024-12-18 21:59:42
推荐回答(1个)
回答1:

根据题意,对已定义的数组空间进行删除插入操作:

1、数组非动态,需要验证数组的大小,避免数组越界,由于题目中给的函数结构不包含数组最大长度,因此需要定义全局变量保存数组的实际元素个数和数组最大长度,用于判断数组越界。

2、插入函数和删除函数,都是对数组的循环移位。其中插入函数遇到数组已满时,多余元素将被挤出数组(舍弃最后位,避免越界)。

3、如不想使用全局变量来限制数组大小,需使用malloc、realloc和free函数来定义动态数组。

下面是演示代码:

#include

int *Get_elem(int a[],int i);//返回数组a中第i个元素,成功返回元素地址,失败返回NULL

int Insert_elem(int a[],int i,int x);//在a中第i个位置插入数值x。成功返回1,失败返回0

int Del_elem(int a[],int i);//删除a中第i个元素,成功返回1,失败返回0

void showArr(int a[]);

int size;//数组最大长度

int len=0;//数组a元素个数

int main()

{

    int i,x,a[10]={1,2,3,4,5,6,7,8,9};//初设a数组有9个元素,最大长度10

    size=10,len=9;

    printf("初始数组最大长度%d,实际存储有效元素个数%d,内容为:\n",size,len);

    showArr(a);

    printf("\n"),i=11;

    printf("获取第%d个元素的值为:%d\n",i,Get_elem(a,i)!=NULL?*Get_elem(a,i):-1);

    printf("\n"),i=8;

    printf("获取第%d个元素的值为:%d\n",i,Get_elem(a,i)!=NULL?*Get_elem(a,i):-1);

    printf("\n"),i=3,x=11;

    if(Insert_elem(a,i,x)) printf("在数组a中第%d个位置插入数值%d后数组变为:\n",i,x);

    showArr(a);

    printf("\n"),i=1,x=33;

    if(Insert_elem(a,i,x)) printf("在数组a中第%d个位置插入数值%d后数组变为:\n",i,x);

    showArr(a);

    printf("\n"),i=5;

    if(Del_elem(a,i)) printf("删除数组a中第%d个元素后数组变为:\n",i);

    showArr(a);

    return 0;

}

void showArr(int a[])

{

    int i;

    for(i=0;i

    printf("\n");

}

int *Get_elem(int a[],int i)

{

    if(i>size)

    {

        printf(" 错误:数组访问越界!\n");

        return NULL;

    }

    return &a[i-1];

}

int Insert_elem(int a[],int i,int x)

{

    int j;

    if(i>size)

    {

        printf(" 错误:数组访问越界!\n");

        return 0;

    }

    if(len==size)

    {

        printf("数组空间已满,继续插入,最后一个元素将被顶出数组\n");

        for(j=len-1;j>=i;j--) a[j]=a[j-1];

    }

    else

    {

        for(j=len;j>=i;j--) a[j]=a[j-1];

        len++;

    }

    a[i-1]=x;

    return 1;

}

int Del_elem(int a[],int i)

{

    int j;

    if(i>size)

    {

        printf(" 错误:数组访问越界!\n");

        return 0;

    }

    for(j=i-1;j

    len--;

    return 1;

}