1:在数组最后一个元素后面插入元素 2:在数组指定元素后面插入插入元素 3:在数组指定单元中面插入元素 4:在数组删除指定下标单元的元素 5:在数组删除指定元素 6:在数组修改指定元素的值 7:显示所有的数据 使用c语言实现,并使用while和switch的嵌套使用实现用户的选择

时间: 2025-03-07 12:06:55 浏览: 12

好的,下面是一个完整的 C 语言程序示例,该程序实现了对一维整型数组的各种操作,并通过 whileswitch 的嵌套让用户选择所需的操作。

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 100

void displayArray(int arr[], int size) {
    printf("当前数组内容: ");
    for (int i = 0; i < size; ++i)
        printf("%d ", arr[i]);
    printf("\n");
}

// 插入元素到数组最后一个位置之后
void insertAtEnd(int arr[], int *size, int element) {
    if (*size >= MAX_SIZE - 1) {
        printf("数组已满,无法再添加新元素\n");
        return;
    }
    arr[(*size)++] = element;
}

// 在指定索引后的下一个位置插入元素
void insertAfterIndex(int arr[], int *size, int index, int element) {
    if (*size >= MAX_SIZE || index < 0 || index > *size - 1){
        printf("非法的位置!\n");
        return;
    } else{
        // 如果不是在最后一位,则需要将后续元素向后移动一位
        if(index != *size-1){
            for(int i=*size;i>index+1 ;--i){
                arr[i] = arr[i-1];
            }
            arr[index + 1]=element;
            (*size)++;
        }else{//如果是最后一位则直接赋值即可
            arr[*size]=element;
            (*size)++;
        }
        
    }
}

// 直接覆盖的方式,在特定单元格内插入(替换)数据
void insertAtIndexDirectly(int arr[], int* size, int pos, int elem) {
    if(pos<0||pos>=MAX_SIZE){
        printf("非法的位置!\n");
        return ;
    }

    arr[pos]=elem;

    
    // 若插入位置超过原大小 则更新长度
    if(pos>=*size){
        *size=pos+1;
    }
   
}


// 根据给定的下标删除对应元素
void deleteByIndex(int arr[], int *size, int index) {
    if (index < 0 || index >= *size ) {
        printf("无效的下标.\n");
        return;
    }
    for (int i = index; i < *size - 1; i++)
        arr[i] = arr[i + 1];
    --(*size);
}

// 删除第一次出现的目标值所在的元素
void removeElement(int arr[], int* size , int target){
    for(int idx=0;idx<*size;++idx){
        if(arr[idx]==target){
           deleteByIndex(arr,size,idx); 
           break;
        }
    }
}
// 修改指定位置处的数据项
void updateItemAtPosition(int arr[], int* size,int position , int newValue ){
     if(position<0 ||position>*size-1){
         printf("错误的位置.");
         return ;
     }
      arr[position]=newValue;
     
}

int main() {

    int array[MAX_SIZE], currentSize = 0;
    char choice;
    int value,index;

    while (choice!='Q') {  
        printf("\nP菜单:\n"
               "I - 向数组末尾追加元素\n"               
               "A - 指定位置前加入新的数值\n"
               "B - 覆盖方式写入目标槽位 \n"
               "D - 移除某编号上的项目\n"
               "E - 去掉首个匹配值\n"
               "U - 更新选定位置的内容\n"
               "V - 查看所有记录\n"
               "Q - 程序结束退出\n");

       scanf(" %c",&choice);

        switch(choice){
             case 'I':case'i':
                   printf("请输入要添加的新数:");
                  scanf("%d", &value );
                    insertAtEnd(array,&currentSize,value);
                   break;

              case'A':case'a':
                     printf("输入待插入数字及其前面的一个有效序列号:\n");                    
                     scanf("%d%d",&index,&value );                   
                      insertAfterIndex(array,&currentSize,index-1,value);//注意这里实际处理的是用户给出的index-1对应的真正存储地址
                      break;

              case'B':case'b':

                 printf("输入想要设置的坐标以及希望填放进去的新量程\n");
                   scanf("%d%d",&index,&value );

                 insertAtIndexDirectly(array,&currentSize,index,value);
                
                  break;


             case'D':case'd':
                printf("提供欲清除条目的标识符(即它所属列表内的排位):\n");
                 scanf("%d",&index);
                  deleteByIndex(array,&currentSize,index-1); //同样地, 这里减去了一来适应人类从一开始计数的习惯.
                  break;

             
              case'E':case'e':
                 printf("告知要消除的对象具体是多少?\n");
                 scanf("%d",&value);
                   removeElement(array,&currentSize,value);
                 
                   break;
              
               case'U':case'u':
                  printf("指出应更改哪一行并指明替换成怎样的成员变量?\n");
                  scanf("%d%d",&index,&value);
                  updateItemAtPosition(array,&currentSize,index-1,value);
                  
                   break;

            
             case'V':case'v':
                 displayArray(array,currentSize);
                  break;
           
             case 'Q':case'q':
                  exit(EXIT_SUCCESS); 

             default:
                puts("未识别指令!");
          }
      
   }  

return EXIT_SUCCESS;
}

说明

上述代码片段创建了一个简单的交互式命令行应用程序。 它支持基本的一维动态数组管理任务,如插入、移除及查看等动作;同时运用了循环结构 (while) 来持续接收用户的输入直到他们明确表示愿意停止为止('Q') , 并利用条件分支语句 (switch-case) 实现针对不同类型请求作出适当响应的功能逻辑划分.

需要注意的是,对于每个选项的具体实现函数都考虑到了边界情况检查以防止越界访问等问题的发生。此外,“显示”功能可以直观展示现有集合的状态方便调试与验证其他各部分是否工作正常。

阅读全文
向AI提问 loading 发送消息图标

相关推荐

大家在看

recommend-type

Toolbox使用说明.pdf

Toolbox 是快思聪公司新近推出的一款集成多种调试功能于一体的工具软件,它可以实现多种硬件检 测, 调试功能。完全可替代 Viewport 实现相应的功能。它提供了有 Text Console, SMW Program Tree, Network Device Tree, Script Manager, System Info, File Manager, Network Analyzer, Video Test Pattern 多个 检测调试工具, 其中 Text Console 主要执行基于文本编辑的命令; SMW Program Tree 主要罗列出相应 Simpl Windows 程序中设计到的相关快思聪设备, 并可对显示出的相关设备进行效验, 更新 Firmware, 上传 Project 等操作; Network Device Tree 主要使用于显示检测连接到 Cresnet 网络上相关设备, 可对网络上设备进行 ID 设置,侦测设备线路情况; Script Manager 主要用于运行脚本命令; System Info 则用于显示联机的控制系统 软硬件信息,也可对相应信息进行修改,刷新; File Manager 显示控制系统主机内存文件系统信息,可进行 修改,建立等管理操作; Video Test Pattern 则用于产生一个测试图调较屏幕显示; Network Analyzer 用于检 测连接到 Cresnet 网络上所有设备的通信线路情况。以上大致介绍了 Toolbox 中各工具软件的用途,下面将 分别讲述一下各工具的实际用法
recommend-type

基于Informix+External+Table实现数据快速加载

基于Informix+External+Table实现数据快速加载
recommend-type

得利捷DLCode软件使用手册V1.3.pdf

datalogic固定式读码器调试软件使用手册
recommend-type

栈指纹OS识别技术-网络扫描器原理

栈指纹OS识别技术(一) 原理:根据各个OS在TCP/IP协议栈实现上的不同特点,采用黑盒测试方法,通过研究其对各种探测的响应形成识别指纹,进而识别目标主机运行的操作系统。根据采集指纹信息的方式,又可以分为主动扫描和被动扫描两种方式。
recommend-type

雅安市建筑物百度地图.zip

雅安市建筑物百度地图.zip