---
# System prepended metadata

title: c/c++變數與常數\

---

---
title: c/c++變數與常數\
tage: c++程式設計實習
---

# 演算法(Alogrithm)

## 認識演算法
演算法（algorithm）就是一組用來解決特定問題的有限指令或步驟，我們可依循這些步驟來逐步解決問題或完成特定工作。演算法中的每一個步驟都必須非常明確，不可以模稜兩可。

## 演算法的特性
演算法通常都有如下所示的5項特性。
1. 輸入（input）：演算法中經常需要輸入資料。
2. 輸出（output）：演算法至少要有一個以上的輸出資料。
3. 有限性（finiteness）：演算法應該要在有限的處理步驟內得到結果。
4. 明確性（definiteness）：每個步驟都必須明確，不能有模稜兩可的情況。
5. 有效性（effectiveness）：每個步驟都必須是可實際做到或執行的。

## 流程圖表示法

![](https://i.imgur.com/s87UfYm.png)
![](https://i.imgur.com/wXgsAuq.png)

##  敘述表示法

1. 敘述表示法是使用虛擬碼，來表達演算法的處理步驟。 虛擬碼（pseudo code）是一種以簡潔扼要的文字，來設計程式邏輯的工具
2. 
3. 範例
![](https://i.imgur.com/bPlnJzI.png)
:::success
程式執行簡易說明
:::

![](https://i.imgur.com/lpPxbMY.png)


:::success
<font color='red'>**變數就是一塊記憶體空間**</font>
:::

1. 使用前必須先宣告: 從電腦取得一塊記憶體空間
2. 範例: 宣告一個可以儲存整數(integer)的記憶體空間

    int x;     // 記憶體空間的別名為x

3. 變數命名規則
- 第一個字元: $A\sim Z, a\sim z, \_$ 共 $53$個可用字元
- 第二個之後到結束字元: $A\sim Z, a\sim z, \_, 0\sim 9$

4. 駝峰命名法:
- 第一個單字的第一個字元為小寫
- 第二個單字的第二個字元為小寫，其餘為小寫
    myAge, todayIsMyDay

5. 範例: 宣告一個能儲存學生英文成績的變數。
 int engrade;`
6. ![](https://i.imgur.com/o5utmD5.png)

   ![](https://i.imgur.com/mfh7iaA.png)

   ![](https://i.imgur.com/iw6ZBkC.png)

   ![](https://i.imgur.com/LPINQur.png)

## 資料的種類:資料型別(Data Type)
### 整數: integer,沒有小數點的數字 

1. chat: 字元型態的變數型態,可以表示1 byte大小的數字
- 範圍:$-128\sim 127$,共256$數字
- unsigend char:$0\sim255$,共$256數字


3. short:可表示$2$ byte大小的數字 
4. int:可表示$4$ byte大小的數字
5.  long:可表示$4$ byte大小的數字
6.   long long:可表示$8$ byte大小的數字

:::info 
以上的整數型態最前方加上unsingned修篩字,代表儲存的資料為正整數
::: konichiwa tadaimasu

### 浮點數
:::success
有小數點的數字
:::
1. float: 4 bytes， $-3.402e^{38} \sim 3.402e^{38}$。<font color='red'>**精確到小數點後第$6$位**</font>
2. double: 8 bytes，$-1.7976e^{308} \sim 1.7976e^{308}$。<font color='red'>**精確到小數點後第$15$位**</font>
3. long double: 8 bytes，$-1.7976e^{308} \sim 1.7976e^{308}$。<font color='red'>**精確到小數點後第$15$位**</font>

1. char:1byte的字元,可記錄一班的英文,數字或標點符號
2. wchar_t2bytes,可記錄中日韓文字

### 字元
:::success
只要是可以從鍵盤輸入的都可以是字元，例如 Aa~Zz、0~9、?/,....等
:::

1. char: 1 byte的字元，可記錄一般的英文、數字或標點符號
2. wchar_t: 2 bytes，可以記錄 中日韓文字

:::info
ASCII code: https://en.wikipedia.org/wiki/Character_encoding
:::

1. 文字在電腦中也是以數值的方式來表示，為讓所有電腦系統都用一致的方式表示相同的字元，
2. 例如以65代表大寫A、97代表小寫a，這種以特定數值代表某個字元的方法就稱為編碼，
3. 目前資訊界一般所用的編碼為 美國標準資訊交換碼（American Standard Code for Information Interchange, ASCII）

![](https://i.imgur.com/h2p38SW.png)

### 布林
:::success
1: 代表ture(真),0:代表false(假)
:::
1. bool:1byte
2. 請注意在c語言中沒有true與false

## 設定變數的初始值
:::success
語法:<font color='red'>**資料型態 變數名稱=出值;**</font>
:::

1. 範例:宣告一個變數處存你的英文成績為60
'int engscore=60'
2. 範例:宣告一個變數處存你的英文成績為60分+你上課出席的分數(y)
'''cpp=1
int y=50;
int engscore=60+y;
'''

3. 由鍵盤輸入處存到變數中:<font color='red'>**要存入資料的變數必須先宣告,否則會產生錯誤**</font>
'''cpp=1
int engscore;
cin>>engscore;
'''


# 常數
:::success
在程式中不能被改變諾嘗試去改變會產生錯誤**</font>
:::

1.使用const:<font color='red'>**constfloat PI=3.14159;**</font>
2.使用#define:<font color='bule'>**define PI3.14159**</font>
 
## 跳脫字元(\字元)
:::success
格式:\+字元:例如單引號 雙引號等等
:::

1. 顯示單引號'\''
2. 顯示引號:'\"'
3. 自動輸入Enter(換行):""/n"

# 用字元編碼指定字元
1. \+8進為數值:表示ASCII所代表的字元
'\144'代表a
2. \+或\X:x或X代表16進為數值,表示16進位值得ACLL,顯示ACLL所代表的字元
'\X61'代表a

# 程式練習
cpp:;#include <iostream>

using namespace std;

int main()
{
     /*測試資料型別所佔的記憶體空間大小:使用sizeof()*/
       cout << "char 所占記憶體空間大小"
             <<sizeof(char)<<"byte\n";
    cout <<"float所占記憶體大小:"
             <<sizeof(float)<<"bytes\n";
     cout <<"long long 所占記憶體大小:"
              <<sizeof(unsigned long long)<<"bytes\n";
    /*宣告變數測試
    1. 整數型態的最大值+1=整數型態的最小值
    2. 整數型態的最小值-1=整數型態的最大值
        */
    short x=32767;     // x short 最大值
    x=x+1;              // x 變成 short 最小值 -32768
    cout<<"short最大值+1="<<x<<",會變成short 最小值\n";
    x=x*-1;           // x 變成 short 最大值 32767
    cout<<"short最大值-1="<<x<<",會變成short 最小值\n";


    /*ASCII編碼*/
    cout<<"輸出字元A; "<<'A'
         <<"(char)65"  <<char(65)<<"\n";
    //輸出ABCD...XYZ:(數字)轉為字元
    x=65;
    for(int i=0; i<26; i++){
        cout<<char(x+i);
    }
    cout<<"\n";

    //輸出abc....xyz
    for(int i=0; i<26; i++){
        cout<<char(x+i+32);
    }
    //將字元轉為ASCII(數字)
    cout<<"\n輸出A的ASCII code:"<<(int)'A'<<"\n";
    cout<<"輸出A的ASCII code:"<<(int)'Z'<<"\n";

    /*浮點數的精準度測試*/
    float f =1.123456789;
    double d =1.123456789;

    cout.precision(16);
    cout<<"float value="<<f<<"\ndouble="<<d;


    /*布林測試*/
    cout<<boolalpha;
    cout<<"\nture的值="<<int(true)<<t1的值為"<<"<<Bool(1);
    cout<<"\nflase的值="<<int(false)<<"t0的值為"<<<Bool(0)

    return 0;

    }
