从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组。。
编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接收数组及其元素个数作为参数,函数...
编写函数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[],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);
} 展开
3个回答
2011-12-06
展开全部
#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]);
}
}
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]);
}
}
追问
不好意思 我问的是我的错哪儿了
追答
主要就是主程序里面没有定义和初始化数组
展开全部
#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没写对也多余。
还有就是外部的输入部分没有写对
#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没写对也多余。
还有就是外部的输入部分没有写对
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if(a[i]!=0)
a[j++]=a[i];
这句话有问题,一边操作一边在当前数组存储,可能不会达到预期的结果
另外
printf("please input your number:\n");
scanf("%d",&a[i]);
这句话都读入数组中的各个元素吗
a[j++]=a[i];
这句话有问题,一边操作一边在当前数组存储,可能不会达到预期的结果
另外
printf("please input your number:\n");
scanf("%d",&a[i]);
这句话都读入数组中的各个元素吗
更多追问追答
追问
scanf("%d",&a[i])
是要设计一个循环。。。?
scanf("%d",&a[i])
是要设计一个循环。。。?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询