问题描述
- c语言else break;的问题
-
用插入排序法对10个数进行降序排列#define A 10 #include <stdio.h> int main() { int a[A+1],i,j,t; for(i=1;i<=A;i++) scanf("%d",&a[i]); for(i=2;i<=A;i++) {for(j=i-1;j>=1;i--,j--) if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;} ** else break;** } for(i=1;i<=A;i++) printf("%d ",a[i]); printf("n"); return 0; }
中间这个 else break;必须要加上吗?我觉得不用呀,,因为如果不满足if的话应该能进行下一次循环呀,,,可我去掉之后运行不了。。。为啥
解决方案
你不觉得你的这个程序已经进入一个死循环了吗。。。。。那个break只是纠正这个死循环,让你误以为程序是没有问题的,但是实际的问题是:
因为你的i是在循环体外面申明的变量,所以在你的嵌套循环中,里面循环结束后,i的值都会减小为1,然后外层循环又给i加了1,到了里面的循环
又减小到1,于是就无限循环了下去。。。。。
解决方案二:
必须加。内层有个i--,影响到外层循环。如果没有break,内层总会i--,外层i++,就会进入死循环。
你自己找10个数,单步执行几个循环就明白了。
时间: 2024-11-16 00:53:03