Re: [問題] c++ while指令

看板C_and_CPP作者 (悠閒)時間15年前 (2009/04/09 02:02), 編輯推噓3(306)
留言9則, 1人參與, 最新討論串2/2 (看更多)
: 不超過10000的最大次方 : 對於每個小於10000的正整數A 一定有一個正整數N : 使得A的N次方小於或等於10000 而A的N+1次方則超過10000 : 現在要寫一個程式 輸入一個整數A 印出對應的N以及A的N次方的值 : int a,b=1,n=0;/*宣告3個變數 並且給定初始值*/ : cout<<"請輸入一個數字"<<endl; : cin>>a; : while(a*b<=10000)/*當條件a*b<=10000成立時 跳進去loop執行裡面動作*/ : { : b=a*b; : n++; : } : cout<<n<<" "<<b<<endl; : system("PASUE"); : return 0; : } : 我的疑問: : 1.第一行的b=1還有n=0是什麼意思? : 我沒打指令說n代表次方的次數 為什麼程式知道那是次方的次數? b=1 n=0都只是為了要達到任何數的1次方都等於本身 還有很多種表示法 可以寫出次方 舉例 a=10時則b=10*1 ->b=10 這樣下次進入loop之前就會變成a*b就變成a的二次方 10*10來判斷是否小於10000 依序變成a的三次方 四次方 電腦 不會知道你的變數是什麼意義 只有人才知道 對他而言 他只是做運算而已 管他是什麼 我們所做的只不過是把人類簡化思考的數學計算方式 變成單純的加減乘除 : 2.while條件為什麼是a*b 不是a*a? 如果你直接a*a就會變成a的兩次方為開頭 你a的一次方就會沒有考慮到(第一次要進入loop就是用a*a來看是否小於10000 可是你a的一次方 還是要算 編譯會過 因為沒有語法錯誤 但是 會有邏輯上的錯誤 也就是答案會有錯 也許不是全錯 但是當某些情況下 你的輸出就會是錯的 : 3.while那邊的大括號裡面的n++為什麼不能打n+1? 至於這點 我不知道推文的那位大大 為什麼說有語法錯誤 因為在邏輯上n++的確等於n+1 那n=n+1也是正確的語法使用 我自己實際測試也沒發現輸出不一樣的地方 有待推文的大大詳細說明 : 我是c++的初學者 昨天從剛開始一直看到switch 到還看的懂 : 就今天看到while 我卡住了 感覺差很多 都不知道為什麼要打那些碼 loop是否執行 都取決於附加條件 條件符合才會進入loop 因此 如何訂定loop條件就是看個人功力 沒有為什麼要打 因為這就是loop的使用語法 : 拜託 c++的大大們替我解說一下 謝謝... 另外 你的解答寫的不是很好 因為光輸出就不知道你輸出什麼東西 光看你輸入一個數字 跑出兩個數字 你知道程式是幹麻用的嗎? 說實在 沒題目 還真不知道是再寫什麼 程式不要只求過 要寫的完善 讓看的人也知道 你再寫什麼 思考上 也要全方面的考慮 不要只侷限於某個條件下會拿到題目要的答案 的圈圈裡 因為這種程式 沒意義 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.164.120.194

04/09 02:23, , 1F
把n++;這行換成n+1;沒有語法錯誤??那就是我誤解原po的意
04/09 02:23, 1F

04/09 02:23, , 2F
思了, 我的意思是要寫也是 n+=1; 或n=n+1; 這樣....Orz
04/09 02:23, 2F

04/09 02:25, , 3F
不過我以為我有描述到 n+1 vs n++ => n=n+1 這邊了.
04/09 02:25, 3F

04/09 02:27, , 4F
對不起我錯了, 真的沒有error, 只是單寫 n+1 不會有
04/09 02:27, 4F

04/09 02:28, , 5F
n = n+1的效果; 原本來以為會需要一個lvalue的Orz
04/09 02:28, 5F

04/09 02:34, , 6F
對了, 他貼的code是練習題的答案吧?? 初學階段先求語法
04/09 02:34, 6F

04/09 02:35, , 7F
了解會用, 對於看到的問題先求有再求好, 處理完程式核
04/09 02:35, 7F

04/09 02:36, , 8F
心再來處理程式介面; 不是要求初學者就寫的很完善吧Orz
04/09 02:36, 8F

04/09 02:37, , 9F
不過好習慣/觀念的養成, 能從一開始就培養倒是最好的:)
04/09 02:37, 9F
文章代碼(AID): #19tERDli (C_and_CPP)
文章代碼(AID): #19tERDli (C_and_CPP)