2012-06-13 54 views
0

我已经编写了一个C程序来执行冒泡排序,但在执行它时IDE会挂起。 这是为什么发生?代码如下:Turbo C在执行C冒泡排序程序时挂起

#include<stdio.h> 
    main() 
    { 
      int i[3],temp,n,x; 
      printf("Enter 4 positive numbers"); 
      for(n=0;n<=3;n++) 
      { 
       scanf("%d",&i[n]); 
      } 
      recheck: 
      for(x=0;x<=2;x++) 
      { 
       if(id[x]>i[x+]) 
       { 
       temp=i[x]; 
       i[x]=i[x+1]; 
       i[x+1]=temp; 
       } 
      } 
      if(i[0]>i[1]&&i[1]>i[2]&&i[2]>i[3]) 
      { 
       for(n=0;n<=3;n++) 
       { 
         printf("%d",i[n]); 
       } 
      } 
      else 
      { 
       goto recheck; 
      } 
      getche(); 
} 
+4

Turbo C真的还存在吗? –

+6

'int i [3]'只有3个元素。我[2]是最后一个。 –

+1

诠释我[3]有3个元素,你正在阅读4从用户 – obo

回答

0

此代码有4个错误。

1)您声明变量为i[3]。所以它只需要三个值。从i[0]i[2]。你正在阅读四个值。所以数组被限制为三个,它不能读取四个值。如果您想读取四个值,则将i[3]更改为i[4]

2)if(id[x]>i[x+])。这条线有两个错误。这里您使用的是id[x]。但没有声明为id[]的变量。它应该是i[x]。第二个是i[x+]。这不是一个有效的声明。它应该是i[x++]

3)您按升序对值进行排序并按降序检查它们。 所以这导致了一个错误。改变if(i[0]>i[1]&&i[1]>i[2]&&i[2]>i[3])if(i[0]<i[1]&&i[1]<i[2]&&i[2]<i[3])或更改if(id[x]>i[x+])if(id[x]<i[x+])

4您正在使用goto声明在你的代码。但goto不被优先考虑,因为它是一种错误的编程习惯。无需任何函数调用就可以转发或恢复执行过程。这不符合结构化编程方法。所以不要更喜欢goto声明。 您可以使用两个for()循环轻松解决此问题。

+0

对不起theres没有id我打错it.its只有我 – Ananthakrishna

+0

并感谢您的帮助 – Ananthakrishna

6

你应该总是复制粘贴你的代码。你提供的代码有一些错别字,甚至不会编译。

忽视错别字有三个主要问题:

  1. int i[3]只有3个要素。 i[3]超出限制,访问它可能会导致意外的结果。

  2. 当按照升序顺序交换元素时,但在检查数组是否完全排序时,按降序排列。

  3. 您正在使用严格的不等式来检查数组是否已排序。如果有两个相同的元素,这将不起作用。

+0

谢谢。我不知道它应该是4,因为我认为它从0,1,2,3个位置开始 – Ananthakrishna