从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组。。

编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接收数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。

输入时首先读入数组长度,再依次读入每个元素。

将调用此函数后得到的数组和函数返回值输出。
下面程序错哪儿了?请帮忙修改
#include<stdio.h>
int Compactlntegers(int a[],unsigned int n)
{
int i,j;
for(i=0;i<n;i++)
{
if(a[i]!=0)
a[j++]=a[i];
}
printf("%d",&j);
return j;
}
void main(int a[],int n)
{
int i;
printf("please input your number:\n");
scanf("%d",&a[i]);
Compactlntegers(a,&n);
}

#include<stdio.h>
int Compactlntegers(int a[], int *m)
{
int i,j,n;//这里我使用C编译器做的,所以修改了一下,
//如果是C++应该可以直接使用引用传值,按你原来写的应该可以修改主程序中n的值
n=*m;
for(i=0;i<n;i++)
{
if(a[i]==0)
{
for(j=i;j<n;j++)
a[j]=a[j+1];
n--;
}
}
*m=n;
return j;
}
void main()
{
int i,n,a[100];
printf("please input your number:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("please input the %d number:",i+1);
scanf("%d",&(a[i]));
}
Compactlntegers(a,&n);
for(i=0;i<n;i++)
{
printf("the %d number is: %d\n",i+1, a[i]);
}
}追问

不好意思 我问的是我的错哪儿了

追答

主要就是主程序里面没有定义和初始化数组

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-06
#include<stdio.h>
#include<stdlib.h>
int Compactlntegers(int a[],unsigned int n)
{
int i,j=0;
for(i=0;i<n;i++)
if(a[i]!=0) a[j++]=a[i];
return j;
}

int main(){
int *a;
unsigned int n,i;
printf("How many numbers: ");
scanf("%u",&n);
a=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
//printf("%u: ",i+1);
scanf("%u",a+i);
}
n=Compactlntegers(a,n);
for(i=0;i<n;i++)
printf("%u. %u\n",i+1,a[i]);
free(a);
return 0;
}
=====================
How many numbers: 20
1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10
11
1. 1
2. 2
3. 3
4. 4
5. 5
6. 6
7. 7
8. 8
9. 9
10. 10
11. 11
==========
你写的原Compactlnteger函数本身没有大错,就一句printf没写对也多余。
还有就是外部的输入部分没有写对
第2个回答  2011-12-06
if(a[i]!=0)
a[j++]=a[i];
这句话有问题,一边操作一边在当前数组存储,可能不会达到预期的结果
另外
printf("please input your number:\n");
scanf("%d",&a[i]);
这句话都读入数组中的各个元素吗追问

scanf("%d",&a[i])
是要设计一个循环。。。?

scanf("%d",&a[i])
是要设计一个循环。。。?

追答

对,要确定一个终止条件,例如输出一个特殊数结束

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网