跳到主要內容

C++ How to Program 7/E 筆記 -- 第四章 控制敘述:第一部份

C++  How to Program 7/E 筆記
第四章 控制敘述:第一部份
學習目標
  • 基本的問題解決技術
  • 以由上而下,逐步修改的程序,開發演算法
  • 使用if  和 if ...else 選擇敘述選擇要執行的動作
  • 使用while重複敘述反覆執行程序中的敘述
  • 技術控制重複與警示控制重複
  • 使用遞增、遞減和指定運算子



  1. 演算法、虛擬碼
  2. 控制結構、if 、if … else、while
  3. 規劃演算法
  4. 指定運算子
  5. 遞增和遞減運算子


任何一個可解的運算問題,均可用特定順序執行一連串的動作來解決。解決問題的程序(procedure)是由以下兩個部分組成。
  1. 要執行的動作(action)
  2. 執行這些動作的順序(order)


⇒⇒ 這種程序就稱為演算法(algorithm)




指定電腦程式中敘述式(動作)執行的順序,即程式控制(program control)。


虛擬碼
Pseudocode(虛擬碼,假碼)是人工的非正式語言,可協助開法演算法,而不必操心程式語法的嚴謹性。虛擬碼通常只會描述可執行的敘述(executable statements),通常不會寫上變數宣告,不過有些程式設計師會在虛擬碼的開頭列出變數並說明用途。


  1. Prompt the user to enter the first integer(告訴用戶輸入第一個整數)
  2. Input the first integer(輸入第一個整數)
  3. Prompt the user to enter the second integer(告訴用戶輸入第一個整數)
  4. Input the second integer(輸入第一個整數)
  5. Add first integer and second integer, store result (將第一個整數加上第二個,並儲存結果)
  6. Display result(顯示結果)
加法程式的虛構碼


控制結構


1960年代,人們發現任意使用控制權轉換是造成軟體開法小苦問擾的根本原因,goto 敘述成了眾矢之的,因為它可以讓控制權轉換到程市中幾乎任何一個地方,把程式搞得複雜。結構化程式設計(structured programming)幾乎成了「消除goto(goto elimination)」的同義字。


1970以後,Böhm和Jacopini證明所有程式都可以只用三種控制結構(control structure)撰寫。
  1. 循序結構(sequence structure)
  2. 選擇結構(selection structure)
  3. 重複結構(repetition structure)
循序結構


選擇結構
主要有三種敘述:
if(單一選擇敘述)選擇敘述中,若條件true則會執行某動作,若條件false則會略過動作。
if … else(雙重選擇敘述)則是true執行某動作,false則執行另一個動作。
switch(多重選擇敘述)遠則結構則會一某個整數運算設值,執行不同動作的其中一個。
重複結構
特色是只要條件仍為true則會不斷地執行敘述。
同樣也有三種敘述:
while
do … while
for
while、 for兩項若一開始就是false就不會執行動作。
do … while 則至少會在主體內執行一次動作。


在C++程式的演算法僅由三種敘述組成,組成方法只有兩種:
三種敘述即:循序敘述、選擇敘述、重複敘述
兩種組成:堆疊控制敘述(control-statement stacking)、巢狀控制敘述(control-statement nesting)


if 選擇敘述
如果grade >=60,程市便會在螢幕印出「passed」,然後轉換到此活動的最終狀態;如 grade < 60程式則會自動轉換到最終狀態,不顯示任何訊息。


if … else 雙重選擇敘述
特色是條件true 或 false食,則會有不同的執行動作。
條件運算子(?:)
C++提供條件運算子(?:),是C++中唯一的三元運算子(ternary operator),包含三個三個運算元,當這些運算元加上條件運算子==>==>條件運算式。


巢狀if ...else 敘述
朝逛if ...else敘述的執行速度會比一連串單一選擇if 敘述快許多,因為前者只要條件一符合就可能提早離開。


區塊
if ...else的兩個部分中包含數行敘述,我們可將這些敘述放在大括號內({ 和}),放在大括號內的敘述稱為複合敘述(compond statement)或區塊(block)。有時若在其中不放入任何敘述則稱null 敘述(null statement)或空敘述(empty statement)。


while 重複敘述
在條件為true時會持續執行,直到條件是成為false才會停下來。


規劃演算法:技術控制重複
利用counter來限定重複
*在GradeBook類別中時做計數控制重複


題目:
某個班級有十位學生參加測驗。您已知道考試的分數(範圍從0到100的整數)計算並顯示所有學生的成績總和,以及班級小考平均成績


虛擬碼
技術控制重複也常稱為限定重複(definite repetition),因為執行迴圈前,程式就已知道迴圈執行的次數。


  1. Set total to zero(設定總數=0)
  2. Set grade counter to one(設定計數器=1)
  3. While grade counter is less than or equal to ten (當計數器<=10)
  4.       Prompt the user to enter the next grade(要求輸入下個成績)
  5.      Input the next grade(輸入下個成績)
  6.      Add the grade into the total(將成績加入總成績)
  7.      Add one to the grade counter (將計數器加一)
  8. Set the class average to the total divided by ten (設定平均為總數/10)
  9. Print the total grades for all students in the class(印出總成績)
  10. Print the class average(印出平均)


*total 與 counter概念說明,total 是用來將一串數值累加起來的變數,counter 是用來計算次數的變數。



留言

這個網誌中的熱門文章

第一章 電腦、網際網路與全球資訊網簡介

C++  How to Program 7/E 筆記 第一章 電腦、網際網路與全球資訊網簡介 學習目標 基本軟硬體觀念 物件技術觀念(類別、物件、屬性、行為、封裝、繼承) 程式語言的種類 典型的C++開發環境 業界標準物件導向素模語言——UML 沿革 網際網路、球球資訊網與Web 2.0現象的沿革 在Linux 的GNU C++ 與在Microsoft Visual C++環境中測試C++ 應用程式 *結構化程式設計(structured programming) *物件導向程式設計

【Quora 翻譯&整理】對於程式初學者嘗試解決問題的好網站推薦

原文出處: What are some suggested websites to solve programming problems for beginners? (2016/5/15) 此篇文章強調的是去參加project的那種網站推薦