编写函数,把给定的整数数组中的0元素全部移到后面,且所有非0 元素顺序不变,用c语言编,谢谢各位大神

我是初学者,这个问题好困扰啊,我编的每次输出都会有个重复的值,而且0还移不干净

呵,给个特别点的方法,你拿来参考下吧。
#include "stdio.h"
void main()
{
int a[] = {1, 2, 0, 3, 4};
const iNum = sizeof(a) / sizeof(int);
int b[iNum];
int j = 0;
for(int i = 0; i < iNum; i++)
{
if(a[i] != 0)
{
b[j++] = a[i];
}
}
for(j < iNum; j++)//也可以用memset
{ b[j] = 0; }
//需要的话把数组b复制到a
}
温馨提示:内容为网友见解,仅供参考
无其他回答

将数组中的非零元素移到前面来,零元素移到后面去,各非零元素间的相对...
printf("\\n");}int main() {int a[] = {30,0,45,-20,16,0,8,0,

用C语言做这个题: 给定一个row行col列的整数数组array,要求从array...
实际从键盘向程序输入时,由于转换的是整形,因此我们输入“785 758”,scanf通过输入的空格来判断是不是一个整数输入是否结束,但在程序里调用的scanf函数的格式转换参数里,不能写进空格。这个就是原因。同样我们这样用:scanf("ab%c",&ch);如果实际输入是ab开头加任何字母的话,那scanf就会返回1,否...

用C语言怎么编写一个函数 删除数组中所有的0,并将其后元素往前移...
int del_zero(int *p,int n);int main(void){ int i,n,test[128];printf("请输入测试数组元素的个数n...\\n");scanf("%d",&n);printf("请输入%d个数组元素\\n",n);for(i=0;i<n;i++)scanf("%d",&test[i]);printf("\\n输入的数据元素为:\\n");for(i=0;i<n;i++)printf(...

如何用c语言编写一个函数,将一位数组中的的元素倒置
return是函数返回语句,比如你的函数如果定义为int fun(void ),意味着你的fun函数是需要返回一个int类型的值给调用它的函数,也就是说这里的return语句是必须的,而且还要求返回的变量是int类型的,你不写或者直接return都会报错。但返回值是void类型的函数return语句写与不写都可以,因为不要求它返回值...

C语言编写函数,从一个排好序的整型数组中删去某数
include <stdio.h>void deletex(int a[],int &n,int x){int i; for(i=0;i<n&&a[i]<x;i++); if(i==n||a[i]>x) {printf("fail!\\n"); return;} for(;i<n;i++)a[i]=a[i+1]; n--; for(i=0;i<n;i++) printf("%d ",a[i]); printf("\\n"); }int...

C语言填空题:编写函数将有n个整数的一维数组中下标从0到p(p<n-1)的...
void fun(int *w,int p,int n){ int i,j,t;for(i=0; i<=p; i++){ t=w[0];for(j=0; j<n-1; j++)w[j]=w[j+1];w[n-1]=t;} } main(){ int a[12]= {1,2,3,4,5,6,7,8,9,10,11,12};int i,m;scanf("%d",&m);fun(a,m,12);for(i=0; i<12;...

用C语言编写一个程序,将一个数组中的元素复制到另一个数组中?
include <stdio.h> int main(){ int i, array1[5], array2[5];printf("请输入第一个数组:");for(i=0; i<5; i++)scanf("%d", &array1[i]);printf("\\n第二个数组:");for(i=0; i<5; i++){ array2[i] = array1[i];printf("%d ", array2[i]);} return 0;} ...

c语言编写函数删除数字内所有为0的元素
printf("\\n删除0元素后的数组长度=%d,剩余元素为:",n);for(i=0;i<n;i++)printf("%d ",test[i]);return 0;} int del_zero(int *p,int n){ int i,j,temp,len=n;for(i=0;i<len;i++){ if(p[i]==0){ for(j=i;j<len;j++){ p[j]=p[j+1];} len--;} } retur...

c语言 将整型数组中左右小于0的元素放到所有大于0的元素的前面。
include <stdio.h>int main(void){ int num[10], i, j, temp; fputs("请输入10个整数 : ", stdout); for (i = 0; i < 10; ++i) scanf("%d", num + i); for (i = 0; i < 10-1; ++i) { for (j = 0; j < 9 - i; ++j) { if (num[j] > num[j ...

...中输入n个以0作为结束标志的元素,并将所有元素存入到栈中。Push...
\/* p移动到下一个结点 *\/} \/* 直到没有下一个结点 *\/}\/* 判断链栈是否为空 *\/\/* 初始条件:链栈S已存在。操作结果:若S为空链栈,则返回TRUE,否则返回FALSE *\/status stackIsEmpty (linkStack *S) {return S->top->next == NULL;}\/* 入栈 *\/\/* 操作结果:在S的栈顶插入新的...

相似回答