今天練了手冒泡排序,初始程序代碼如下(偽隨機):
#include <iostream> using namespace std; int main() { int a[100]; for (int i=0;i<100;i++){ a[i]=rand()%900+100; } a[0]=0; //自主設定數組最前面的值,測試break效果 a[1]=1; a[2]=2; int temp=0; //冒泡排序中暫存需要交換的值 int count=0; //記錄到break為止最外層for循環進行的次數 bool change=false; //設定參數判定終止for循環的條件 for(int j=99;j>0;j--) { for(int k=0;k<=j-1;k++) { if(a[k]>a[k+1]) { temp = a[k]; a[k] = a[k+1]; a[k+1] = temp; change=true; } } count=100-j; if (change==false) break; else change = false; } for(int i=0;i<100;i++) { cout<<a[i]<<" "; } cout<<endl; cout<<"排序在第"<<count<<"遍冒泡結束后終止"<<endl; system("PAUSE"); return 0; }
但是程序運行結果中,總是顯示“排序在第99遍冒泡結束后終止”,即最外層for循環全部運行了一遍,break沒有起到效果……
找了半天沒看出哪里有錯誤,后知后覺,是if判定中的連等號寫成了等號……應為如下:
if (change==false) break; else
想必是從前學VB的習慣吧。那里邊判定就是等號,所以怎么看也看不出來
就目前所知,連等“==”一般用於判定/比較兩邊的值,等號“=”則一般在賦值過程中使用
這種不屬於編譯錯誤,很難查錯,一般需要逐行分析各變量的值才能發覺(尤其是存在上述知識錯覺的情況下)
**謹記養成良好語法記憶與習慣的重要性**
