本章重點 - Kun Shan...

53
本章重點 3-1 C++程式架構 3-2 變數宣告與資料型態 3-3 基本運算子介紹 3-4 資料型態轉換

Transcript of 本章重點 - Kun Shan...

  • 本章重點

    3-1 C++程式架構

    3-2 變數宣告與資料型態

    3-3 基本運算子介紹

    3-4 資料型態轉換

  • C++程式架構

    基本的程式架構

    C++檔案可再分成「宣告區」、「主程式」,

    以及「函數定義區」這三個部份。

    宣告區

    主程式

    函數定義區

    程式註解

    載入標頭檔

    函數原型宣告

    敘述

  • 如何編寫C語言程式1.一個C語言程式一定有主程式,名稱為main,程式內

    容用大括弧{ }包含起來,即使程式沒有內容也要用空

    括弧表示。

    2.所有的變數(variables)必須先宣告其型態。

    3.每一行程式敘述後,必須加一個分號(;)表示結

    束。

    4.每一區塊的程式敘述,是以{ }來包含。

    5.程式碼除非另有規定,否則最好一律用小寫。

  • 程式註解(comment)註解的主要作用是對原始程式碼做說明。雖然註解是程式碼的一部份,但是C++編譯器會忽略註解。

    // 註解文字

    在雙斜線(//)之後到該行結束之間的文字將會被視為註解文字,稱為「單行註解」。

    // 宣告變數int Sum, Counter;Sum = 0; // 設定Sum變數的值Counter = 0; // 設定Counter變數的值

  • C++也支援C語言中的「多行註解」格式。所有包含於「/*」及「*/」之間的文字,也會被視為註解。

    /* 宣告變數

    Sum用來存放加總的數值

    Counter是執行迴圈的計數值 */

    int Sum, Counter;

  • 載入標頭檔C++內建許多標準函數供我們使用,這些函數被分門別類放置於副檔名為「.h」的標頭檔(header file)中。標頭檔類型

    C++中的標頭檔有新型標頭檔及舊型標頭檔的分別。

    標頭檔 說明

    包含數學運算函數

    包含標準輸出入函數

    包含字串處理函數

    包含時間、日期的處理函數

    包含標準輸出入函數

    包含檔案輸出入的處理函數

  • 標頭檔 說明

    的新型標頭檔

    的新型標頭檔

    的新型標頭檔

    的新型標頭檔

    的新型標頭檔

    的新型標頭檔

    包含例外處理的類別

    包含標準函式庫(std)中String類別的定義及處理函數

    新型標頭檔

  • 名稱空間(namespace)C++的新型標頭檔幾乎都定義於std名稱空間裡,這表示您在使用新型標頭檔所提供的函數時,都必須在前面加上std。#include // 載入新型標頭檔iostream

    void main()

    {

    int Num1;

    std::cout Num1;

    std::cout

  • namespace的主要作用是在區隔函數名稱。它的概念與檔案目錄十分類似。以下圖來說:

  • main()主程式

    主程式main()是一個特殊的函數,代表著程式的進入點,並且只能使用main做為函數名稱。

    主程式的傳回值是傳給作業系統,而使用

    者自訂函數的傳回值則是傳給呼叫者,可

    能是其它函數或主程式。

  • 輸出與輸入函數

    cin及cout是C++語言中的標準輸出入函數,使用語法如下:

    使用前在程式前面加上引入的宣告

    #include

    cout 變數2 ... >> 變數n ;

  • 表3.3 特殊字元格式

    插入反斜線‘\\’插入雙引號‘\”’插入單引號‘\’’跳到該行起點‘\r’換行‘\n’移到下一個定位點‘\t’倒退一格‘\b’產生嗶聲‘\a’產生空格‘\0’說 明字元格式

  • 變數宣告與資料型態

    大致了解C++程式的架構之後,接著要為

    您介紹變數的宣告方式及資料型態。

  • 變數(variable)與常數 (constant)

    變數

    變數是具備名稱的一塊記憶體空間,

    用來儲存可變動的資料。當程式需要存取某個記憶體內容時,就可透過變數名稱將資料由記憶體中取出或寫入。

    常數常數也是具備名稱的一塊記憶體

    空 間,但是當您宣告並設定常數的初。

  • 常數

    資料型態

    整數(integer)例如:10, -23, 0, 65500……等

    浮點數(float point)例如:2.13, 0.2, -87.0, 1.2E-3, 3.4E+4 ……等

    字元(character)例如:‘a’, ‘z’, ‘0’, ‘9’……等

  • 資料表示方法

    常數

    整數常數:12、-452、100000、0、……。十進位整數常數:直接寫出數值。如:2345為十進制的2345。八進位整數常數:以0(零)為開頭的數字。如:02732為八進制之2732。十六進位整數常數:以0x(零X)為開頭的數字。如0x2A9為十六進制之2A9。

    字元常數:’A’、’Z’、……。浮點數常數:8.23、0.1232、0.001、……

    1.2E-3、3.4E+4。

  • 變數與常數宣告

    指定變數或常數的資料型態,並配置所需的記憶體空間,這個過程稱為繫結(binding)。避免兩個不同的變數或常數使用相同的名稱。

    C++中的內建資料型態(build-in data type)可分成整數型態(integer)、浮點數型態(float)、字元型態(character),以及布林值型態(boolean)四種。

  • 變數宣告方式

    方式1:資料型態 變數名稱1 , 變數名稱2 , ...... , 變數名稱n ;

    方式2:資料型態 變數名稱=初始值;

    常數宣告方式

    const 資料型態 常數名稱1 =數值1 , 常數名稱2 =數值2 , ...... ,

    常數名稱n =數值n

  • 變數命名原則

    變數命名原則

    變數第一個字元不可使用數字及特殊符號(如:/、@、#、...)。為避免與C++函數名稱相同,變數第一個字元應避免使用底線(_)。C++是區分英文大小寫(case sensitive)的程式語言,因此Num1及num1是不同的變數名稱。不可使用C++的關鍵字(Keyword)做為變數名稱。儘量為變數取個有意義的名稱,讓使用者能一眼就明白該變數的作用。

  • 整數資料型態(integer)整數資料型態是用來儲存整數型態的資料,並依據其是否帶有正負符號來劃分,可以分為「有號整數」(signed)及「無號整數」(unsigned)兩種。若以資料大小來區分,則有「短整數」(short)、「整數」(int)及「長整數」(long)三種類型。

  • 有號整數(singed)資料型態 長度 數值範圍 說明

    signed short int

    2 Byte -32,768~32,767 可簡寫為short

    signed int

    4 Byte -2,147,483,648~2,147,483,647

    可簡寫為int

    signed long int

    4 Byte -2,147,483,648~2,147,483,647

    可簡寫為long

    1位元組=8位元,1字組=2位元組1 Byte= 8 bits, 1 Word= 2 Bytes

  • 無號整數(unsigned)

    資料型態 長度 數值範圍 說明

    unsigned short int

    2 Byte

    0~65,535 可簡寫為unsigned short

    unsigned int

    4 Byte

    0~4,294,967,295

    可簡寫為unsigned

    unsigned long int

    4 Byte

    0~4,294,967,295

    可簡寫為unsigned long

  • 範例程式CH03_02.CPP#include

    void main(){

    int Num,OctNum,HexNum; // 宣告整數變數Num=100; // 以10進位值設定變數值OctNum=0200; // 以8進位值設定變數值HexNum=0x33f; // 以16進位值設定變數值

    cout

  • 浮點數(float)

    308

    308

    10E7.1~10E7.1

    +

    ±

    ±

    38

    38

    10E4.3~10E4.3

    +

    ±

    ±

    資料型態 長度 數值範圍 說明

    float 4 Byte

    單精確浮點數,有效位數7位數

    double 8 Byte

    雙精確浮點數,有效位數15位數

    long double

    8 Byte

    長雙精確浮點數,有效位數15位數4932

    4932

    10E7.1~10E7.1

    +

    ±

    ±

  • 範例程式CH03_03.CPP#include

    void main(){

    float Num1; // 宣告並設定float變數的值double Num2; // 宣告並設定double變數的值double Num3=3.144E10; // 宣告並設定double變數的值Num1=1.742f;Num2=4.1592;

    cout

  • 字元資料型態(character)

    字元型態主要的作用是儲存單一字元。

    資料型態 長度大小 說明

    char 1 Byte 宣告字元

    字元資料型態

  • 範例程式CH03_04.CPP#include

    void main(){

    char char1=67; // 以10進位ASCII碼設定字元變數char char2='r'; // 以字元設定字元變數char char3='\111'; // 以8進位ASCII碼設定字元變數char char4='\x61'; // 以16進位ASCII碼設定字元變數

    cout

  • 布林資料型態(boolean)

    布林資料型態是用來儲存真(true)或偽(false)的結果,它的宣告型態、長度大小、數值範圍如下表所示:

    資料型態 長度大小 數值範圍

    bool 1 Byte 0(false)或1(true)

    布林資料型態

  • 布林資料型態

    #include void main(){

    bool Num1=1;bool Num2=0;bool Num3=true;bool Num4=false;bool Num5=128;bool Num6=-43;

    cout

  • 基本運算子介紹

    C++中的運算子(operater)可分成指派運算子、算數運算子、比較運算子、邏輯運算子、遞增遞減運算子,以及位元運算子等六種。

  • 名詞解釋

    名詞解釋所謂的運算子就是指數學運算符號,例如基本的「+」、「-」、「*」、「/」四則運算符號,或是比較大小的>=、

  • 指派運算子(Assignment Operator)

    「=」符號就是指派運算子,它的主要作用是將等號右方的值指派給等號左方的變數或常數。

    A = A + 5; // 將A值加5後指派給變數A

    A = 3; // 將常數3指派給變數A

    A = B // 將變數B的值指派給變數A

  • 算術運算子(Arithmetic Operators)運算子 說明 使用語法 執行結果

    (A=15,B=7)+ 加 A + B 15+7=22

    - 減 A - B 15-7=8

    * 乘 A * B 15*7=105

    / 除 A / B 15/7=2

    % 取餘數 A % B 15%7=1

    15.0/7=2.1428615/7.0=2.14286

  • 4.34 (捨去小數)5.3-1=減運算-6

    7.77 (捨去小數)5.7+2=加運算+5

    22 (取餘數)5%3=餘數運算%4

    1.66661 (捨去小數)5/3=除運算/3

    4.24 (捨去小數)2.1*2=乘運算*2

    -4.3-5 (捨去小數,取最大值)-5.3+1=負數運算-1

    取浮點數結果取整數結果範例算術運算子優先

  • 比較運算子(Comparison Operators)比較運算子主要是在比較兩個數值之間的大小關係,並產生布林型態的比較結果。

    運算子 說明 使用語法 執行結果(A=15,B=7)

    > 大於 A > B 15>7,結果為ture

    < 小於 A < B 15= 大於等於 A >= B 15>=7,結果為true

  • >(大於)、=(大於等於)和

  • 邏輯運算子(Logical Operators)

    !比較運算式A進行NOT運算!

    比較運算式A || 比較運算式B進行OR運算||

    比較運算式A&&比較運算式B進行AND運算&&

    使用語法說明運算子

  • 邏輯運算子&&、||、!&&代表AND(及閘) , ||代表OR(或閘) , !代表NOT(反閘)

    AND(及閘):當所有的輸入都是1時,輸出為1 ,其他情況輸出為0。當有一輸入為0時,輸出為0 ,其他情況輸出為1 。

    OR(或閘) :當所有的輸入都是0時,輸出為0 ,其他情況輸出為1 。當有一輸入為1時,輸出為1 ,其他情況輸出為0 。

    NOT(反閘) :輸出為輸入的反相。

    OR(或閘)

    101110

    111

    000輸出輸入2輸入1

    NOT(反閘)

    0110

    輸出輸入

    AND(及閘)

    001010

    111

    000輸出輸入2輸入1

  • 範例程式CH03_05.CPP#include

    void main(){

    int A,B;cout > A >> B; // 設定變數A及變數B的值cout

  • 遞增遞減運算子(Increment and Decrement Operators)

    「++」、「--」是C++中的遞增及遞減運算子,它們的作用是將變數值做加1或減1的動作。例如:

    i++; // 將i值加1,相當於i = i + 1;

    j--; // 將j值減1,相當於j = j - 1;

  • 依據運算子在運算元前後位置的不同,遞增與邊減運算可以分成「前置型式」及「後置型式」兩種。如下所示:

    前置型式:N=++i; i=i+1, N=i

    或 N=--i; i=i-1, N=i

    後置型式:N=i++; N=i, i=i+1

    或 N=i--; N=i , i=i-1

  • a先存入i ,再執行a-1i=a--

    i=a, a=a-1a--

    先執行a-1,再使用a數值i=--a

    a=a-1, i=a--a

    a先存入i,再執行a+1i=a++

    i=a, a=a+1a++

    先執行a+1,再使用a數值i=++a

    a=a+1, i=a++a

    說明動作遞加和遞減運算子

  • 範例程式CH03_06.CPP#include

    void main(){

    int Num1,Num2,A,B;A=5,B=10; // 初始化變數A及變數B的值cout

  • 3-3-8複合指定運算子

    A = A >> BA >>= B>>=位元右移A = A % BA %= B%=餘數設定

    A = A

  • 範例程式CH03_08.CPP#include

    void main(){

    int n1,n2,n3,n4,n5,n6,Y;n1=n2=n3=n4=n5=n6=34; // 初始化變數值Y=4; // 初始化變數Y的值cout

  • 範例程式CH03_09.CPP#include

    void main(){

    int A,B,C;A=5,B=8,C=10; // 設定變數初始值cout

  • 資料型態轉換

    資料型別轉換(Data Type Conversion)的

    情況在程式中經常會出現,例如將整數

    (int)轉換成倍精確浮點數(double)。而型

    態轉換可分成自動型態轉換與強制型態轉

    換兩種。

  • 自動型態轉換

    自動型態轉換是由編譯器來判斷應轉換成何種

    資料型態,因此也稱為「隱含轉換」。

    1. 若運算式中含有兩個不同的浮點數型態運算元,則有

    效範圍較小的會轉換成有效範圍較大者。

    2. 如果運算式中含有整數與浮點數型態的運算元,則會

    將整數轉換成浮點數型態。

    3. 若運算式中含有不同型態的整數運算元,那麼有效範

    圍較小的會轉換成有效範圍較大的。

  • 範例程式CH03_10.CPP#include

    void main(){

    int A;double B,Result;A=130; // 設定整數變A的值B=4.5; // 設定倍精確浮點數的變數值

    Result=(A*3)/B; // 執行計算

    cout

  • 強制型態轉換

    可以使用「型態轉換運算子」(cast operator)來強制轉換資料型態,它的使用語法如下:

    方式1:(資料型態) 運算式或變數

    方式2:資料型態 (運算式或變數)

  • 範例程式CH03_11.CPP#include

    void main(){

    double Result;int a,b,c;cout a >> b >> c; // 輸入變數值

    Result=(float)(b*b-4*a*c)/(float)(4*a); // 執行計算

    cout

  • 常用數學函數,標頭檔為math.h

    計算x的反正切值double atan(double x)

    計算x的反餘弦值double acos(double x)

    計算x的反正弦值double asin(double x)

    計算x三角函數tan(正切)值,x為徑度量double tan(double x)

    計算x三角函數cos(餘弦)值,x為徑度量double cos(double x)

    計算x三角函數sin(正弦)值,x為徑度量double sin(double x)

    計算x的10為底對數值double log10(double x)

    計算x的自然對數值double log(double x)

    計算x的y次方值double pow(double x, double y)

    計算雙精確浮點數的平方根值double sqrt(double x)

    計算雙精確浮點數的絕對值double fabs(double x)

    計算整數n的絕對值int abs(int n)

    數學功能函數原型

  • 範例程式CH03_12.CPP#include #include

    void main(){

    double R1, R2, R3, R4, a,b,c;const double pi=3.14159;cout a >> b >> c; // 輸入變數值

    R1=sqrt(a);R2=pow(a, b);R3=log(c);R4=2*pi*c;

    cout