奧林匹亞資訊班

11/30

講師:吳崇維(wayne)

今日目標~

 

  • 指標複習
  • 陣列練習
  • 泡沫排序法
  • 浮點數 / 其他變數類別

指標 (pointer)

recall)以下程式的結果是?

重新理解陣列

 

當我們宣告 int arr[10];

 

這時候 arr 是一個指標

指向arr[0]。

而arr[0], arr[1], ... arr[9] 

都是一個整數

arr

recall)以下程式的結果是?

&(取出變數位址)

對於一個變數 (也可以是指標變數) 取出他的位址

 

其中指標變數可以記住位址

 

int *p = &x; 

p的就是x的位址

int **q = &p;

q的就是p的位址
(指標也可以有位址)

*(找出位址主人)

對於一個"位址" , 找出其位址的地方的主人。

 

常常用在指標變數前面

 

int x = 1;

int *p = &x;

*p = 3;

這時x就會等於3 (隔空改值)

陣列最後練習~

可愛的潘潘有著一堆石頭,每顆石頭上面都有一個正整數編號。接著,她又利用複製機器把每顆石頭都複製了兩個,而編號當然跟原來那個一樣。

可是有一天,她不小心掉了一顆石頭,現在她想要找出她掉的那一顆石頭的編號。

題目:

輸入:先給你一個數字n 代表有幾顆石頭

接著給你n個數字,代表每一個石頭的編號

輸出:輸出他掉的那一顆石頭編號!

Ex:

8 2 2 1 2 2 2 2 1

Ex:

1

泡沫排序法

問題:排序一個陣列?

Ex: 1 5 3 4 2 -> 1 2 3 4 5

初次接觸演算法

 

思路:先把最大的放到後面

接著再放第二大的...排序完所有數字!

 

如何把實際想法換成程式呢?

本次作業:看影片,資料!

浮點數~a.k.a小數

浮點數

 

相較於整數(int) , 這種類別的數可以記下如: 123.123

有小數點的數字。

 

一般浮點數有兩種類別:

1) float :  佔4個位元組

 

2) double:佔8個位元組,較    為精準

Q:如果整數跟浮點數作四則運算呢?

A:採用升級的概念!

類別升級

 

當一個整數 int x 跟一個 double y 一起運算,x 會先被升級成double (等級較高)

 

這樣的處理方式可以避免整數自動去掉小數的機制

但是!

不能依賴升級

 

舉例:如右圖所示,會輸出多少呢?

 

 

不能依賴升級

 

舉例:如右圖所示,會輸出多少呢?

 

他會輸出1 !

 

因為 5 / 3 都是整數,因此並沒有升級過,因此啟動整數機制

砍成1之後,再指定給 d 

調整小技巧 (1)

 

對於一個很多整數的運算

在最前面加入 * 1.0

這樣後面的運算就被升級成

double了 !

調整小技巧 (2)

 

在任何變數前面加上(類別)

 

就可以強制轉型囉!

調整小技巧 (2)

 

在任何變數前面加上(類別)

 

就可以強制轉型囉!

 

當然這個對變數x, y也行得通

調整小技巧 (3)

 

在任何變數前面加上(類別)

 

就可以強制轉型囉!

 

試試看double -> int

最後注意:

浮點數不能完全精確的表示數字!總會有一點誤差

再一個練習~

連續輸出

1/2, 1/4, 1/8, 1/16 ....

輸出20項!

Homework!

看影片,下次上課重點:)

FeedBack!

一起努力快樂寫程式吧!

Made with Slides.com