# ch10.字元型態 >作者:柯筑苓、楊椀婷 >搭配[green judge解題系統](http://www.tcgs.tc.edu.tw:1218/) >Special thanks to [台中女中sagit老師](http://www.tcgs.tc.edu.tw/~sagit/index.htm) --- >上一章:[ch9.迴圈的綜合練習及補充](https://hackmd.io/s/r1-hqjFa7) >下一章: >回到目錄:[2018 國立科學園區實驗中學高一資訊課程講義](https://hackmd.io/s/Hktk4-2Dm) --- ## <font color='darkblue'>介紹</font> 字元型態佔有 1 個位元組(8 bits),可以儲存英文字母、符號等等字元 電腦處理字元型態時,是把這些字元當成不同的整數來看待,嚴格來說,字元型態也算是一種整數型態。 其中字元和數字的對應關係中,最常用的是 ASCII 碼 關於ASCII碼的介紹,可以參考以下的維基百科: https://zh.wikipedia.org/wiki/ASCII ## <font color='darkblue'>宣告及給值</font> #### 宣告 ```cpp= char c; //宣告一個字元型態的變數叫做 c ``` #### 宣告並給值 有兩種方法 <font color='blue'>第一種:直接將表示的字元寫出來</font> 要注意該字元需用<font color='red'>單引號</font>包起來,且只能放一個字元。 ```cpp= //宣告一個字元型態的變數叫做 c,它的值為英文字母的h char c = 'h'; ``` <font color='blue'>第二種:用字元所代表的數字表達</font> ```cpp= //宣告一個字元型態的變數叫做 c,它的值為ASCII碼為104的字元(也就是h) char c = 104; ``` ## <font color='darkblue'>範例 1 </font> 輸入一個字元,並印出該字元的ASCII碼 ```cpp= char c; cin >> c; int a = c; cout << c << " 的ASCII碼為 " << a; ``` ## <font color='darkblue'>範例 2 </font> 剛剛說過字元型態也算是一種整數型態 因為字元型態只有 8 bits,所以表達的範圍只有0~255 如果我們將大於255的整數以字元型態印出,會發生什麼事呢? 例如說 ```cpp= char ch = 369; cout<<"ch = "<<ch; ``` 我們會得到 ``` ch = q ``` 這個結果 這是因為整數(int)型態可以表達 4 個位元組(也就是 32 個bits),所以當字元變數給超過255的值的時候,只會截取後面 1 個位元組(也就是 8 個 bits)的資料。 以上面的例子來說,369的二進位為101110001,截取後面 8 個 bits後變成01110001,也就是十進位的113,ASCII碼113就是英文字母 q ## <font color='darkblue'>複習:跳脫字元</font> 在ch1輸出及註解時,我們已經學過了直接在cout以字串的方式輸出跳脫字元 跳脫字元也可以用字元型態儲存喔! 例如: ```cpp= char c='\\'; ``` 單引號中的第一個反斜線是表達它是跳脫序列,而第二個反斜線是表達它要表達的符號 ## <font color='darkblue'>進階:數字和字元一起輸入</font> 假設我們現在輸入 ```cpp= 123+45 ``` 希望電腦可以印出結果 我們可以這樣寫: ```cpp= int num_1,num_2; char c; cin>>num_1>>c>>num_2; if(c == '+') { cout<<num_1+num_2; } ``` 程式的第 3 行,cin這樣寫是因為電腦會知道'+'這個符號不是數字,所以num_1就會存成123,接下來因為字元只有 8 個bits可以儲存,所以接下來的輸入的 8 bits 就會被當成字元儲存,也就是 c現在等於'+'這個字元,接下來的輸入就會存入num_2 ><font color="darkgreen"> 【學生練習題】</font> > - [ ] [Green Judge a032: 小小綠的數學習題 ](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a032) ## <font color='darkblue'>範例 3 </font> 剛剛說過字元型態也算是一種整數型態,所以字元可以做運算喔 例如: ```cpp= char c='A'+3; cout<<c; ``` 我們會得到結果為'D' 又例如大寫字母轉換成小寫字母 ```cpp= char c='A'+32; cout<< c; ``` 我們會得到結果為'a' ><font color="darkgreen"> 【學生練習題】</font> > >題目:英文字母大小寫轉換 > >先輸入一個正整數 N 表示等一下會輸入的字元個數 >再輸入N個字元,可能為大寫英文字母、小寫英文字母、數字、符號 >請輸出剛剛的N個字元當中是英文字母的字元,同時把小寫字母轉成大寫字母輸出 >注意:只能用字元(char)型態、整數(int)型態、條件判斷以及迴圈的概念完成此題,其他型態及函式等還未教過的概念不能使用,不確定的就問老師 > >例如: ![](https://i.imgur.com/5fRPBhr.jpg) ><font color="darkgreen"> 【學生練習題】</font> > >題目:傳紙條 > >小明在上課的時候很愛跟小華傳紙條,但在傳到對方手中之前要先經過好幾位同學轉傳,他們不希望紙條的內容被其他人知道,所以他們約定了一個簡單的暗號,就是把要表達的英文字母順移兩位,例如要表達字母A,就會寫成C,如果要表達B,就會寫成D,……,如果要表達X就會寫成Z,如果要表達Y就會寫成A,如果要表達Z就會寫成B >小華現在想傳一個單字給小明,請你幫他寫成正確的暗號 > >輸入:先輸入一個正整數 N 表示等一下會輸入的字元個數 >再輸入N個字元,字元必為大寫字母 > >輸出:正確的紙條內容 > >例如: >![](https://i.imgur.com/gR6tjLM.jpg) >注意:只能用字元(char)型態、整數(int)型態、條件判斷以及迴圈的概念完成此題,其他型態及函式等還未教過的概念不能使用,不確定的就問老師 --- >上一章:[ch9.迴圈的綜合練習及補充](https://hackmd.io/s/r1-hqjFa7) >下一章: >回到目錄:[2018 國立科學園區實驗中學高一資訊課程講義](https://hackmd.io/s/Hktk4-2Dm)