奧林匹亞資訊班

6/21

講師:吳崇維(wayne)

一年的課程結束了!

來回顧我們學了什麼東西~

並針對你們常常犯的錯誤檢討!

變數 (variable)

 

回想剛剛遇到的, 各種類別

  1. 整數 (int)
  2. 字元 (char)

 

我們可以以一種類別『宣告』一個變數, 例如:

int x;

意思就是:跟電腦說我設定了一個叫做『 x 』的整數

宣告完變數後就可以開始利用這個變數了!

變數 (variable)

 

常見錯誤:

將不同的變數類別混用

 

 

函式的回傳值類別: void , int , char ... 都要想清楚!

for (char i = 0; i < n; i++) {
    ...
}

if - else if - else

 

if - else if - else

這樣的語法可以再延伸!

語法:

 

 

 

 

 

 

 

if (condition) {
    statement;
} else if (condition2) {
    statement;
} else if (condition3) {
    statement;
} else {
    statement;
}

多個敘述由上往下判斷

一定只會執行一個!

if - else if - else

常見錯誤:

 

if (x >= 10) {
    x += 10;
    break;
} else {
    continue;
}

問題在哪裡呢?

if - else if - else

常見錯誤:

 

if (x >= 10) {
    x += 10;
    break;
} else {
    continue;
}

我們邏輯上可以理解這段程式碼,不過!

break 以及 continue,基本上只能用在迴圈 

while

語法:

 

 

 

condition 是真偽的邏輯判斷

大括號裡頭想做什麼都可以!

 

這個迴圈會持續到condition為假

while (不懂迴圈) {
    好好複習;
}

for

 

更為精準,高級的迴圈!

語法 :

 

 

 

initialization: 初始化                     (第一次進入會跑)

condition : 條件( 類似while )       (每次都會檢查)

adjustment : 每次迴圈的調整      (第二次之後會跑)

基本的 () {} 架構不變。

for ( initialization ; condition ; adjustment) {
    statement;
} 

while

  1. 寫法較為簡潔
  2. 主體僅包含一個判斷式
  3. 迴圈每次的調整需要另外寫(迴圈每輪應該都需要一點點的不一樣)

for

  1. 寫法較為複雜
  2. 主體包含:                         初始式、判斷式、調整式
  3. 基本上可以取代while       (while 特別情況才很難取代)

你是設計師,可以自行決定怎麼寫!

迴圈常見錯誤

考慮長度為n的陣列 arr(有n個數字)

那麼陣列的內容應該從 arr[0] ... arr[n-1]

因此迴圈應該寫

 

 

或是更常寫

for (int i = 0; i <= n-1; i++) {
    ...
}
for (int i = 0; i < n; i++) {
    ...
}

陣列

 

一個陣列把相同類別

的變數串在一起 :

Ex : int a[10];   串起10個整數

 

觀念釐清:

int a[10];   //  陣列宣告

a[1] = 3;     // 這時候a[1]是一個整數變數

陣列重點

 

發現多維陣列較難理解

所以寫程式時要盡量在腦袋圖像化!

 

int a[2][3][4];

1) 我們一共宣告了2*3*4 = 24個整數

 

2) a[1][2][2] 就是裡面其中一個整數

 

3) a[1][2] 是一個一維陣列 !

 

4) a[1] 是一個二維陣列

 

5) a 就是個三維陣列啦~

 * 符號

*(變數)   // 變數需為一個位址

Ex: *(0x7ffee2b159bc)

取用一個位址所指到的變數值

符號

&(變數)

Ex : &b

上面這東西代表一個

變數的位址

兩個互為反運算

很困難的指標TnT

函式 function

一個函式負責處理單一目的事情,接受(吃進)一個參數,並回傳(吐出)一個結果!

 

常見問題:沒有好好的定義函式的參數類別,回傳值類別

字元 (char)

 

這邊介紹新的變數型態 char

一般的可見字元(0~9, a~z, +-*/)

都是字元的一種。

電腦使用一個位元組儲存字元

使得一個字元會對應到一個數字!

Ex  :   'a' <=> 97

          'b' <=> 98

          'A' <=> 65

字串的宣告與指定

 

不多說,上圖

 

注意cin >> a的部分

 

程式需要知道a字串的頭的指標

 

並以此為出發點輸入。

strlen

函式原型:

int strlen(char* s1)

 

功能:輸入一個字串

           回傳字串的長度

 

遞迴 recursion

遞迴最基礎的定義就是在

自己的函式裡面呼叫 (call)自己

 

這樣可以造成同一個函式裡面

不斷去呼叫相同函式的效果。

 

像是看著兩面在前與後的鏡子,會看到無窮多個人,一樣的道理

理解函式:

 

void func(int x);

----------

此函式接收一個整數參數

將整數參數的值印出來

若此值為0 => 回傳 (終止條件)

否則處理func(x-1);

回傳

演算法

 

對於一個固定形式的問題,

產生一套流程->

對於任何的輸入組合

皆能產生預期的答案!

 

簡單的帶過 brute force 

資料結構

 

使用特殊的陣列或是指標結構,達到可以維護某些特定需求的結構。最終目的是達成更好的算法效率!

 

也簡單的帶過了 stack

以上!

掌握了這些技巧,就可以寫出90%的程式了

Part not mentioned

  • struct (結構)
  • pointer operation(指標操作)
  • bit operation (位元運算)

若未來還有深入的接觸程式,可以先補齊這些地方!

運用所有技巧!

寫一個對談程式,細節如下!

程式詢問你要註冊還是登入

註冊

輸入帳號密碼,並由程式記住,重複命名的問題都不用考慮

註冊成功

登入

輸入帳號密碼,嘗試登入!

登入

失敗

登入成功

程式結束

寫出一個簡易的帳號頁面

往程式設計師又進了一大步 :)

感謝各位一年的配合!不過暑假還有課程XD

FeedBack!

一起努力快樂寫程式吧!

6/21 期末回顧

By Wayne Wu

6/21 期末回顧

  • 58