看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《doggingg (doggingg)》之銘言: : Please rewrite the code segment shown below in a "while" statement : and a "for" statement in C++: : total=0; : do{ : cin>>grade; : if(grade!=-1) : total+=grade; : }while(grade!=-1); : 這題我的想法是: total=0; : while(grade!=-1) : { : cin>>grade; : total+=grade; : } : 不知道這樣有符合題目要求並且維持原意嗎? 先了解程式碼在做什麼, 寫出對應的 pseudocode 1.把總和初始化為0 2.輸入一個數字 3.假如輸入的數字不為 -1, 總和 = 總和 + 輸入的數字 4.重複 2~3 直到輸入的數字為 -1 為止 然後回來看你的程式碼: total=0; grade = 0; // 執行至此, 為了能讓程式至少有讀取數字的 // 動作一次, 你的 grade首先要用一個"非-1" // 的整數來初始化才可以 while(grade!=-1) { cin>>grade; if( grade != -1 ) // 假如輸入了一個 -1, total 的值將是 -1, total+=grade; // 然後迴圈結束, 這個結果是很怪異的, 你還 } // 是需要 if 來避免這種情況發生 do-while 是至少執行一次的 while, 所以內容不用什麼改, 你要擔心的 就是"該怎麼讓他至少跑一次", 雖然 for 不適用於這種情況 (步進、對 某一範圍的物件作相同的事情), 不過題目要求還是得做 total = 0; // 與步進無關的內容最好擺在外面 for( ; ; ) // 無限迴圏 { cin >> grade; // 輸入錯誤或是輸入-1就跳出迴圏 if( cin.good() == false || grade == -1 ) break; total += grade; } 記得養成時常檢查 IO 狀態的好習慣! 我不認為判斷 grade的值應該放 在迴圈的測試裡, 因為會造成重複的程式碼. 而且除非速度的考量, 我 也會比較傾向於一次輸入完把整數都放容器裡, 之後再對容器作操作, 這樣迴圈的任務也會單純很多. -- ◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去 ████◢█████s ~> T-ara ███ █ ◢██ 歡迎您的光臨 ███████████恩靜智妍孝敏 ███ ██ 素妍居麗寶藍 ████◥██◤ █████花英 ψmakigoto123 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115
doggingg:謝謝回答 02/10 18:46
abzxcx:小弟初到貴寶地,發現這邊好多強者 @@! 02/10 20:21