二维数组删除指定元素

AC_YE 2020-06-09 07:56:31
#include <stdio.h> int main(){     int i,j,count=0,num;     int a[5][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7},{0,1,2,3,4},{6,7,8,9,0}};     scanf("%d",&num);     for(i=0;i<5;i++)            for(j=0;j<5;j++)                   if(a[i][j]!=num){【1】//请填入一行或多行代码                   }                for(i=0;i<5;i++){//输出            【2】//请填入一行或多行代码            printf("\n");     }     return 0; } 怎样实现删除指定元素然后前移
...全文
690 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
AC_YE 2020-06-10
  • 打赏
  • 举报
回复
引用 12 楼 自信男孩的回复:
删除其实就可以理解为覆盖,即将后面的元素直接以此覆盖前面的元素,这样可以打到删除的目的。注意要修改数组长度,不然,最后的元素还是上次元素的值。
还有其他的做法?
自信男孩 2020-06-10
  • 打赏
  • 举报
回复
删除其实就可以理解为覆盖,即将后面的元素直接以此覆盖前面的元素,这样可以打到删除的目的。注意要修改数组长度,不然,最后的元素还是上次元素的值。
qq_1457346882 2020-06-10
  • 打赏
  • 举报
回复
引用 13 楼 其实一开始我是拒绝的 的回复:
[quote=引用 12 楼 自信男孩的回复:]删除其实就可以理解为覆盖,即将后面的元素直接以此覆盖前面的元素,这样可以打到删除的目的。注意要修改数组长度,不然,最后的元素还是上次元素的值。

还有其他的做法?[/quote]
总的来说都一样的,只是先删除再赋值和直接把后面的值赋给前面的区别,你要是想写,这是规定了不能加变量,如果没规定都可以新建一个一维数组得到二维数组所有的值,然后对一维数组操作,最后再依次赋给二维数组
AC_YE 2020-06-09
  • 打赏
  • 举报
回复
引用 10 楼 qybao的回复:
【1】 *a[count++] 改为 (*a)[count++]; //用(*a)取a[0]地址优先 或者改为 a[0][count++]; //直接用a[0]地址
谢谢,我懂了
qybao 2020-06-09
  • 打赏
  • 举报
回复
【1】 *a[count++] 改为 (*a)[count++]; //用(*a)取a[0]地址优先 或者改为 a[0][count++]; //直接用a[0]地址
qybao 2020-06-09
  • 打赏
  • 举报
回复
*a[count++]是把二维数组改成一维数组,二维数组第一个元素地址&a[0][0]==(a[0]+0)==(*a+0),即a[0][0]==(*a)[0],第二个元素地址&a[0][1]==(a[0]+1)==(*a+1)即a[0][1]==(*a)[1],第三个元素a[0][2]==(a[0]+2)==(*a+2)即a[0][2]==(*a)[2],等等,可见第n个元素就是(*a)[n] 纠正一下 【1】 *a[count++] 改为 (*a)[count++]
AC_YE 2020-06-09
  • 打赏
  • 举报
回复
引用 7 楼 qybao的回复:
那是二维数组下标和一维数组下标的换算关系。也就是二维数组下标转成一维数组下标。 比如二维数组第一行第二个元素,i为0,j为1,i*5+j=1,所以转成一维数组就是第二个元素(一维数组下标为1对应的元素) 再比如第三行第四个元素,i为2,j为3,i*5+j=13,所以转成一维数组就是第十四个元素(一维数组下标为13对应的元素),你可以自己数数,二维数组第二行结束就有10个元素,再加上第三行的第四个元素,是不是就是第14个元素? 所以 ,一维数组的下标=二维数组的行下标*每行的元素个数+二维数组的列下标 因为有删除,所以最终数组只有count个元素,所以换算成一维数组下标后不能超过count,超过count以后的元素属于被删除的垃圾元素(删除挪位后,count以后的元素属于多余的,不应该打印,所以用了个if判断)
那*a【count++】这不是将a【i】【j】赋给它,也就是有count行,这个*a【count++】是每一行第一个元素?
qybao 2020-06-09
  • 打赏
  • 举报
回复
那是二维数组下标和一维数组下标的换算关系。也就是二维数组下标转成一维数组下标。 比如二维数组第一行第二个元素,i为0,j为1,i*5+j=1,所以转成一维数组就是第二个元素(一维数组下标为1对应的元素) 再比如第三行第四个元素,i为2,j为3,i*5+j=13,所以转成一维数组就是第十四个元素(一维数组下标为13对应的元素),你可以自己数数,二维数组第二行结束就有10个元素,再加上第三行的第四个元素,是不是就是第14个元素? 所以 ,一维数组的下标=二维数组的行下标*每行的元素个数+二维数组的列下标 因为有删除,所以最终数组只有count个元素,所以换算成一维数组下标后不能超过count,超过count以后的元素属于被删除的垃圾元素(删除挪位后,count以后的元素属于多余的,不应该打印,所以用了个if判断)
AC_YE 2020-06-09
  • 打赏
  • 举报
回复
引用 5 楼 其实一开始我是拒绝的的回复:
[quote=引用 4 楼 其实一开始我是拒绝的的回复:][quote=引用 3 楼 qybao的回复:][quote=引用 2 楼 其实一开始我是拒绝的 的回复:][quote=引用 1 楼 qybao的回复:]【1】 *a[count++] = a[i][j]; 【2】 for(j=0; j<5; j++) if (i*5+j < count) printf(“%3d”, a[i][j]);
题目还说每输出5个换行,这怎么搞?[/quote]题目给出的代码里不是自带换行了吗 for i 循环下不是有个 printf(“\n”); 吗,意思就是for i 循环5行,每行都打印一个换行 [/quote] 为什么二维数组可以用一维的表示?[/quote] *a【count++】这一步是这么搞的[/quote] i*5+j能不能解释一下?
AC_YE 2020-06-09
  • 打赏
  • 举报
回复
引用 4 楼 其实一开始我是拒绝的的回复:
[quote=引用 3 楼 qybao的回复:][quote=引用 2 楼 其实一开始我是拒绝的 的回复:][quote=引用 1 楼 qybao的回复:]【1】 *a[count++] = a[i][j]; 【2】 for(j=0; j<5; j++) if (i*5+j < count) printf(“%3d”, a[i][j]);
题目还说每输出5个换行,这怎么搞?[/quote]题目给出的代码里不是自带换行了吗 for i 循环下不是有个 printf(“\n”); 吗,意思就是for i 循环5行,每行都打印一个换行 [/quote] 为什么二维数组可以用一维的表示?[/quote] *a【count++】这一步是这么搞的
AC_YE 2020-06-09
  • 打赏
  • 举报
回复
引用 3 楼 qybao的回复:
[quote=引用 2 楼 其实一开始我是拒绝的 的回复:][quote=引用 1 楼 qybao的回复:]【1】 *a[count++] = a[i][j]; 【2】 for(j=0; j<5; j++) if (i*5+j < count) printf(“%3d”, a[i][j]);
题目还说每输出5个换行,这怎么搞?[/quote]题目给出的代码里不是自带换行了吗 for i 循环下不是有个 printf(“\n”); 吗,意思就是for i 循环5行,每行都打印一个换行 [/quote] 为什么二维数组可以用一维的表示?
qybao 2020-06-09
  • 打赏
  • 举报
回复
引用 2 楼 其实一开始我是拒绝的 的回复:
[quote=引用 1 楼 qybao的回复:]【1】 *a[count++] = a[i][j]; 【2】 for(j=0; j<5; j++) if (i*5+j < count) printf(“%3d”, a[i][j]);
题目还说每输出5个换行,这怎么搞?[/quote]题目给出的代码里不是自带换行了吗 for i 循环下不是有个 printf(“\n”); 吗,意思就是for i 循环5行,每行都打印一个换行
AC_YE 2020-06-09
  • 打赏
  • 举报
回复
引用 1 楼 qybao的回复:
【1】 *a[count++] = a[i][j]; 【2】 for(j=0; j<5; j++) if (i*5+j < count) printf(“%3d”, a[i][j]);
题目还说每输出5个换行,这怎么搞?
qybao 2020-06-09
  • 打赏
  • 举报
回复
【1】 *a[count++] = a[i][j]; 【2】 for(j=0; j<5; j++) if (i*5+j < count) printf(“%3d”, a[i][j]);

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧