c语言编程问题,编写函数实现给定功能

编写一个已经从小到大排好序的一维数组目的是把里面重复的删除例如原来的数组是
2 2 2 3 3 4 5 5 6 6 6 6 7 8 9 10 10,程序运行完为2 3 4 5 6 7 8 9 10,我自己写出来了,但是不知道哪里出错了,求各位大神帮帮忙
int i;
n=0;
for(i=0;i<N;i++)
{
if(a[i]<a[i+1])
{a[n]=a[i];n++;}
}
return n;
}
这里的a数组是题目给出来的,N是a数组里面元素个数,n是程序结束后a数组里面还有多少个元素。在线等,谢谢!

6个回答

循环到数组最后一位会发生越界错误,需要对最后一位单独判断,试试下面的:
int i;
n=0;
for(i=0;i<N-1;i++)
{
if(a[i]<a[i+1])
{a[n]=a[i];n++;}
}
if(a[N-2]<a[N-1])
a[n]=a[N-1];
n++;
return n;
}

图片说明不知道这样行不行,

bianchengxz
bianchengxz 谢谢
2 年多之前 回复
qq_36432186
行走在地球的喵星人 回复bianchengxz: 尴尬了,是输出N,剩下的啊,那就是printN,9个》。。
2 年多之前 回复
bianchengxz
bianchengxz 回复bianchengxz: 我知道了,我把题目看错了,总共17个数
2 年多之前 回复
bianchengxz
bianchengxz i为什么要小于17而不是20?
2 年多之前 回复

循环到最后一位的时候 会越界么?

会,那该怎么改才能实现那个功能?

bianchengxz
bianchengxz 回复das白: 那样结果还会少一个数
2 年多之前 回复
qq_38204686
das白 for(i=0;i<N;i++) 这个循环改成for(i=0;i<N-1;i++) 这样就不会越界了
2 年多之前 回复

定义一个变量保存当前a[n],初始值为a[0], 用这个变量去比较就行

for(i=0;i<N;i++) 改成 for(i=0;i<N-1;i++) 改成

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问