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

 我来答
自我编程
2021-09-24 · 科技优质答主
自我编程
采纳数:1481 获赞数:4272

向TA提问 私信TA
展开全部

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

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

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

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

下面是演示代码:

#include <stdio.h>

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<len;i++) printf("%d ",a[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;j++) a[j]=a[j+1];

    len--;

    return 1;

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式