C语言数组运行求解

C语言数组运行求解,第1张

结果明颤没错。

貌似去掉数组中的重复数卜槐圆字型塌,但是当出现连续两个以上重复的数字时后出错。

如{1,2,2,2,3,4,2,2,3,5}结果就成了1 2 2 3 4 5

这是因为

for(k=jk<10-nk++)

a[k]=a[k+1]

没有考虑到连续数字的问题。

因为C语言是不检查数组越界的,你的排序程序访问了数组以外的元素,所以会排序后数组元素改变了.

排序程序哪里访问了数组外的元素呢,这里,在insert函数中,for循环,当i=num-1时,j>=num-i-1也就是j>=0当j等于0时,arr[j-1]就等伏前于arr[-1],就访问到数组外的元素了.

解决办法也很简单,把insert函数中,for-j循环中的 j>=num-i-1改成j>num-i-1去掉等于号就行了.

完整的C语言程序如下(改动的地方见注释)

#include <stdio.h>

#define N 10

void insert(int [],int)

int main()

{

 粗厅漏int arr[]={56,12,865,126,487,3,1323,657,34,6}

 int i

 printf("排序前:\n")

 for(i=0i<Ni++)

 {

 printf("%d ",arr[i])

 }

 insert(arr,N)

 printf("\n排序后:\n")

 for(i=0i<Ni++)

 {

 printf("%d ",arr[i])

 }

 printf("\n")

 return 0

}

void insert(int arr[],int num)

{

 int temp,i,j

 for(i=num-1i>=0i--)

 {

for(j=num-1j>num-i-1j--) //这里把j>岩烂=num-i-1改成j>num-i-1

 {

if(arr[j-1]<arr[j])

 {

 temp=arr[j-1]

 arr[j-1]=arr[j]

 arr[j]=temp

 }

 }

 }

}

运行结果


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12477696.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存