作者kobala (悠閒)
看板C_and_CPP
標題Re: [問題] c++ while指令
時間Thu Apr 9 02:02:52 2009
: 不超過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
1F:推 VictorTom:把n++;這行換成n+1;沒有語法錯誤??那就是我誤解原po的意 04/09 02:23
2F:→ VictorTom:思了, 我的意思是要寫也是 n+=1; 或n=n+1; 這樣....Orz 04/09 02:23
3F:→ VictorTom:不過我以為我有描述到 n+1 vs n++ => n=n+1 這邊了. 04/09 02:25
4F:推 VictorTom:對不起我錯了, 真的沒有error, 只是單寫 n+1 不會有 04/09 02:27
5F:→ VictorTom:n = n+1的效果; 原本來以為會需要一個lvalue的Orz 04/09 02:28
6F:推 VictorTom:對了, 他貼的code是練習題的答案吧?? 初學階段先求語法 04/09 02:34
7F:→ VictorTom:了解會用, 對於看到的問題先求有再求好, 處理完程式核 04/09 02:35
8F:→ VictorTom:心再來處理程式介面; 不是要求初學者就寫的很完善吧Orz 04/09 02:36
9F:→ VictorTom:不過好習慣/觀念的養成, 能從一開始就培養倒是最好的:) 04/09 02:37