c 语言去除数组中指定的数字

本文介绍了一种在C语言中删除数组中特定元素的方法。通过三种不同的方式实现,包括直接跳过目标元素、循环替换非目标元素以及从后向前替换元素,确保数组中不再包含指定值。代码实例展示了如何高效地进行元素移除操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
int arr[]={1,2,3,4,5,6,4,4,7,4};
int delNum=4;


int main(void)
{
	int i,j;
	int len=sizeof(arr)/4;
	for(i=0;i<len;i++)
		printf("%5d",arr[i]);
	printf("\n=======================\n");
/*	for(i=0;i<N;)//方法之一
	{
		if(arr[i]==delNum)
		{
		i++;
		}
		else
		{
		printf("%5d",arr[i]);
		i++;
		}
	}
*/

/*	for(i=0;i<len;i++)//方法之二
	{
		if(arr[i]==delNum)
		{
			for(j=i;j<len-1;j++)
			{
				arr[j]=arr[j+1];
			}
			i--;//
			len--;
		}
	}
*/
//1,2,3,4,5,6,4,4,7,4
	for(i=len-1;i>=0;i--)//方法之三
	{
		if(arr[i]==delNum)
		{
		for(j=i;j<len-1;j++)
			{
				arr[j]=arr[j+1];
			}
		len--;
		}
	}
	for(i=0;i<len;i++)
		printf("%5d",arr[i]);
	printf("\n=======================\n");

	return 0;

}

 
好的,下面是个完整的 C 语言程序示例,该程序实现了对维整型数组的各种操作,并通过 `while` 和 `switch` 的嵌套让用户选择所需的操作。 ```c #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`) 实现针对不同类型请求作出适当响应的功能逻辑划分. 需要注意的是,对于每个选项的具体实现函数都考虑到了边界情况检查以防止越界访问等问题的发生。此外,“显示”功能可以直观展示现有集合的状态方便调试与验证其他各部分是否工作正常。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值