Transcript Document

if 格式
if(condition)
to do something;
if-else格式
if(condition)
to do something;
else
to do other thing;
Nested if-else



Else永遠對應距離最近的if(往前找)
並非每個if都有相對應的else
Page100
判斷式與邏輯運算


Ex3_01.cpp
Ex3_03.cpp
條件運算子



condition ? expression1 : expression2
c=a>b?a:b
if (a>b)
c=a;
else
c=b;
switch敘述



包含一個運算式
由運算式結果決定執行選項
都不同時執行default
Example


Ex3_05.cpp
Ex3_06.cpp
重複敘述-for

for(initial_value; stop_condition; step_value)
to do something;



迴圈計數器初始化
測試條件, 決定迴圈是否繼續執行
迴圈計數器遞增或遞減
Example
for(i=1; i<=max; i++)
sum+=i;
for(int i=1; i<=max; i++)
sum+=i;
for(i=1; i<=max; sum+=i++);
Example
for(i=1, power=1; i<=max; i++, power+=power)
…


for迴圈測試區也可加入多個測試條件
以最右邊的測試決定是否繼續執行
for無限迴圈

for(;;)
continu and break

continue;


跳過尚未執行的迴圈敘述, 執行下一次迴圈敘述
break;

跳出迴圈執行
Figure (page 117)
Example (Ex3_11.cpp)
// EX3_11.CPP
// Display ASCII codes for alphabetic characters
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
for(char capital='A', small='a'; capital<='Z'; capital++, small++)
cout << endl
<< "\t" << capital
// Output capital as character
<< hex << setw(10) << static_cast<int>(capital) // Output capital as hex
<< dec << setw(10) << static_cast<int>(capital) // Output capital as decimal
<< " " << small
// Output small as character
<< hex << setw(10) << static_cast<int>(small) // Output small as hex
<< dec << setw(10) << static_cast<int>(small); // Output small as decimal
cout << endl;
return 0;
}
Example (Ex3_11.cpp) (cont.)



hex
dec
static_cast<int>
while迴圈



while(Condition)
to do something;
當Condition成立時,迴圈就會不斷執行直到
Condition不成立為止
用於事先不知要執行幾次的重複結構
figure (p120)
while無限迴圈

while(1)
{
…
}
do-while迴圈

do
{

to do something;
}while(Condition);
do-while迴圈至少會被執行1次,才進行while
圓括號裡的執行條件判斷
figure (p122)
Nexted loops

迴圈裡面包含另一個迴圈
Example (Ex3_14.cpp)
Homework

習題3-2
Chapter 4
陣列指標和參數
In this chapter







何謂陣列?如何使用陣列?
多維陣列
何謂指標?如何使用指標?
各種不同型態的指標宣告及初始化
陣列與指標的關係
何謂參考值?如何宣告?參考值初始化概念
如何動態建置變數及配置記憶體
陣列 (Array)






一些記憶體位置
資料項目
型態相同
相同變數名稱
陣列大小=元素各數*元素資料型態
儲存在連續記憶體中
Array (conts.)
陣列名稱
索引值
Height[0] Height[1] Height[2] Height[3] Height[4] Height[5]
73
62
51
42
41
34
陣列宣告


資料型別 陣列名稱[元素個數];
Ex:
Double Height[6];
陣列初始化
int cubic_inches[5]={200, 250, 300, 350, 400};



初始值各數不能超過陣列元素個數(可少於)
沒分配到的會設定為0
若沒有初始化,初值為原來記憶體內的資料
Ex4_02.cpp
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int value[5] = { 1, 2, 3 };
int Junk [5];
cout << endl;
for(int i=0; i<5; i++)
cout << setw(12) << value[i];
cout << endl;
for(i=0; i<5; i++)
cout << setw(12) << Junk[i];
cout << endl;
return 0;
}
字元陣列




char型態的陣列稱之
一串字元
最後加上字串結束字元‘\0’
每個字元佔1 Byte
Example
M
a
g
i
c
0
1
2
3
4
5
w
o
r
l
d
\0
6
7
8
9
10
11
char name[ ]=“Magic world”;
輸入字串


函式getline():將字串讀入字元陣列
cin.getline( name, MAX, ‘\n’);
char 形態的陣
列名稱, cin 讀
入後儲存在此
讀入最多個數設
定
停止讀取字元
(這個字不會被
儲存)
多維陣列


double beans [12][10];
beans[2][4]=10.7;
多維陣列初使化
long data[2][4]={
{1, 2, 3, 5},
{7, 11, 13, 17}
};
long data[2][4]={
{1, 2, 3 },
{7, 11 }
};
注意

宣告多維陣列時, 至少要保留最右邊的維度
pointer 指標


指標中所儲存的則是指標所指向變數的位址
指向某個記憶體位址的變數
宣告指標



long* pnumber;
long *pnumber;
long* pnumber, number=99;
取址運算子 -- &




又稱為參考運算子(reference)
一元運算子
可以取得變數位址
必須有型態相同的指標變數來儲存
取址運算子


指標中所儲存的則是指標所指向變數的位址
指向某個記憶體位址的變數
Ex: pnumber=&number;
&number
記憶體位址: 1008
number
pnumber
2000
1008
99
間接運算子 -- *




又稱為反參考運算子(de-reference)
一元運算子
可以取得指標所指的變數的內容
間接方式存取
程式閱讀



Ex4_04.cpp
Ex4_06.cpp
Ex4_07.cpp
使用指標的原因



執行較陣列快
讓函式可存取定義在函式外的資料
動態配置變數空間
Ex4_05.cpp
初始化指標



可能覆寫到任意記憶體
int* pnumber=NULL;
指向NULL為無效值, 此時de-reference會導致
程式立即結束
Example-指向字元的指標


Ex4_06.cpp
解決陣列版本記憶體浪費的問題
指標陣列

每個元素都是一個指標