1:在数组最后一个元素后面插入元素 2:在数组指定元素后面插入插入元素 3:在数组指定单元中面插入元素 4:在数组删除指定下标单元的元素 5:在数组删除指定元素 6:在数组修改指定元素的值 7:显示所有的数据 使用c语言实现,并使用while和switch的嵌套使用实现用户的选择
时间: 2025-03-07 12:06:55 浏览: 12
好的,下面是一个完整的 C 语言程序示例,该程序实现了对一维整型数组的各种操作,并通过 while
和 switch
的嵌套让用户选择所需的操作。
#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,¤tSize,value);
break;
case'A':case'a':
printf("输入待插入数字及其前面的一个有效序列号:\n");
scanf("%d%d",&index,&value );
insertAfterIndex(array,¤tSize,index-1,value);//注意这里实际处理的是用户给出的index-1对应的真正存储地址
break;
case'B':case'b':
printf("输入想要设置的坐标以及希望填放进去的新量程\n");
scanf("%d%d",&index,&value );
insertAtIndexDirectly(array,¤tSize,index,value);
break;
case'D':case'd':
printf("提供欲清除条目的标识符(即它所属列表内的排位):\n");
scanf("%d",&index);
deleteByIndex(array,¤tSize,index-1); //同样地, 这里减去了一来适应人类从一开始计数的习惯.
break;
case'E':case'e':
printf("告知要消除的对象具体是多少?\n");
scanf("%d",&value);
removeElement(array,¤tSize,value);
break;
case'U':case'u':
printf("指出应更改哪一行并指明替换成怎样的成员变量?\n");
scanf("%d%d",&index,&value);
updateItemAtPosition(array,¤tSize,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
) 实现针对不同类型请求作出适当响应的功能逻辑划分.
需要注意的是,对于每个选项的具体实现函数都考虑到了边界情况检查以防止越界访问等问题的发生。此外,“显示”功能可以直观展示现有集合的状态方便调试与验证其他各部分是否工作正常。
阅读全文
相关推荐

















