## C語言程式設計導論 ### 資料型態與輸入輸出 --- <!-- .slide: data-transition="fade" --> <h3 class="text-left"> Table of Content </h3> - 認識資料型態 - 資料型態的種類 - 資料型態的宣告 - 輸入與輸出 - 例題練習 <!-- .element: class="fragment" data-fragment-index="1" --> --- <!-- .slide: data-transition="fade" --> ### 認識資料型態 ---- <!-- .slide: data-transition="fade" --> **在電腦之中** **資料會存到記憶體(RAM)與硬碟(Hard Disk)當中** <!-- .element: class="fragment" data-fragment-index="1" --> **其中每一個儲存單位稱為位元(bit)** **每一個位元只能儲存$0$與$1$兩種資料** <!-- .element: class="fragment" data-fragment-index="2" --> **在傳統電路上就是通電與未通電兩種狀態** <!-- .element: class="fragment" data-fragment-index="3" --> ---- <!-- .slide: data-transition="fade" --> **所以說所有的資料都可以儲存成一堆$0$與$1$的形式** **至於如何把一堆$0$與$1$表達成數字** <!-- .element: class="fragment" data-fragment-index="1" --> **我們之後的章節再討論** <!-- .element: class="fragment" data-fragment-index="2" --> ---- <!-- .slide: data-transition="fade" --> **為了計算方便** **我們通常會把 $2^3=8$ bits 叫做 $1$ byte** <!-- .element: class="fragment" data-fragment-index="1" --> **有些書會把 bit 簡寫成 b** **byte 簡寫成 B** <!-- .element: class="fragment" data-fragment-index="2" --> ---- <!-- .slide: data-transition="fade" --> **文字、數字等等不同的資料** **對電腦而言要分配的空間也有所不同** <!-- .element: class="fragment" data-fragment-index="1" --> **接下來分別會介紹C語言中的基本資料型態** <!-- .element: class="fragment" data-fragment-index="2" --> --- <!-- .slide: data-transition="fade" --> ### 資料型態的種類 ---- <!-- .slide: data-transition="fade" --> <h3 class="text-left"> C語言常用的資料型態種類 </h3> 1. **整數 `int`:儲存正負整數** 2. **浮點數 `float`:存小數點後7位的數** 3. **雙精浮點數 `double`:存小數點後15位的數** 4. **字元 `char`:儲存英文字元及符號** ---- <!-- .slide: data-transition="fade" --> <h3 class="text-left"> 整數 int </h3> - **一個int是使用$32$bits也就是$4$bytes的空間** - **總共可以表達$2^{32}=4294967296$種不同的數字** - **範圍$[-2^{31},2^{31}-1]=[-2147483648,2147483647]$** ---- <!-- .slide: data-transition="fade" --> <h3 class="text-left"> 浮點數 float </h3> - **一個float是使用32bits也就是4bytes的空間** - **範圍是 $[-3.4\times 10^{-38}, 3.4\times 10^{38}]$** - **精度大概是小數點後6~7位** ---- <!-- .slide: data-transition="fade" --> <h3 class="text-left"> 雙精度浮點數 double </h3> - **一個float是使用64bits也就是8bytes的空間** - **範圍是 $[-1.7\times 10^{−308}, 1.7\times 10^{308}]$** - **精度大概是小數點後15位** ---- <!-- .slide: data-transition="fade" --> <h3 class="text-left"> 字元char </h3> **這種資料型態比較特別** **他並不是直接在儲存空間存資料** <!-- .element: class="fragment" data-fragment-index="1" --> **而是藉由「數字」對照成「符號」** <!-- .element: class="fragment" data-fragment-index="2" --> ---- <!-- .slide: data-transition="fade" --> <h3 class="text-left"> 字元char </h3> - **一個char是使用8bits也就是1byte的空間** - **儲存英文及一些奇怪的符號** - **總共可以表達$2^8=256$種不同的符號** - **根據ASCII的表 從$0$到$127$都有對應的符號** - **其中又以$32$到$126$最為常用** [延伸閱讀:認識中文字元碼](https://idv.sinica.edu.tw/bear/charcodes/Section02.htm) <!-- .element: class="fragment" data-fragment-index="1" --> ---- **如果不知道為什麼資料要這樣儲存** **可以看[這一篇](https://hackmd.io/@ShanC/H1a5yIh8A)淺談這件事** ---- <!-- .slide: data-transition="fade" --> ASCII表(來源:維基百科) ![image](https://upload.wikimedia.org/wikipedia/commons/c/cf/USASCII_code_chart.png) --- <!-- .slide: data-transition="fade" --> ### 資料型態的宣告 ---- <!-- .slide: data-transition="fade" --> **那麼在C語言要怎麼使用這些資料型態呢?** **我們需要透過「宣告」變數來達成** <!-- .element: class="fragment" data-fragment-index="1" --> ---- <!-- .slide: data-transition="fade" --> **除此之外 我們也要幫變數取名字** **來代替表示他在記憶體的位置** **但是必須遵守以下規定** <!-- .element: class="fragment" data-fragment-index="1" --> ---- <!-- .slide: data-transition="fade" --> <h3 class="text-left"> 變數名稱的規定 </h3> - **只能由英文字母、數字、_(底線)構成** - **第一個字元不可以為數字** ---- <!-- .slide: data-transition="fade" --> <h3 class="text-left"> 宣告一個變數 </h3> **可以定義一個變數名稱`number`** **並在前面加一個`int`告訴電腦這是整數** ```cpp int number; ``` **後面要加分號喔** <!-- .element: class="fragment" data-fragment-index="1" --> ---- <!-- .slide: data-transition="fade" --> **每一行指令都要在後面加分號代表結束** **這是C語言的爸爸規定的** **別問我為什麼** <!-- .element: class="fragment" data-fragment-index="1" --> ---- <!-- .slide: data-transition="fade" --> **想當然 其他的資料型態也是如此宣告** ```cpp int num; float f1, f2; double d_number; char c; ``` ---- <!-- .slide: data-transition="fade" --> **在宣告的時候也可以直接塞資料在該變數上** ```cpp int num = 87; float f1, pi = 3.1415; double d_number = 123.4567; char c = 'A' // 字元符號前後要加 '' 電腦才不會誤認是其他東西; ``` ---- <!-- .slide: data-transition="fade" --> **有時候在處理一些問題時** **會發現一個int根本不夠存放想存的數** **這時就可以在int前加一個long long** **範圍會變成$[-2^{63}, 2^{63}-1]$** ```cpp long long int num; ``` ---- <!-- .slide: data-transition="fade" --> ## 注意 ## 電腦很笨 <!-- .element: class="fragment" data-fragment-index="1" --> ## 你不告訴他正確的資料型態 <!-- .element: class="fragment" data-fragment-index="2" --> ## 他也猜不出來 <!-- .element: class="fragment" data-fragment-index="3" --> --- <!-- .slide: data-transition="fade" --> ### 輸入與輸出 ---- <!-- .slide: data-transition="fade" --> **當我們處理完資料之後** **要怎麼確認資料是正確的呢?** **我們勢必要叫電腦做點事情** <!-- .element: class="fragment" data-fragment-index="1" --> ---- <!-- .slide: data-transition="fade" --> **在前一個章節** **我們學了怎麼用`printf`來輸出Hello World!** ```cpp #include <stdio.h> int main() { printf("Hello World!"); return 0; } ``` **其實`printf`就是C語言輸出的語法喔** <!-- .element: class="fragment" data-fragment-index="1" --> ---- <!-- .slide: data-transition="fade" --> <h3 class="text-left"> printf 語法 </h3> ```cpp printf("一串文字"); ``` ---- <!-- .slide: data-transition="fade" --> **那麼要是我們想輸出儲存在變數裡的整數** **可以這樣寫** ```cpp #include <stdio.h> int main(){ int number = 4; printf("The number is %d", number); return 0; } ``` **其實就是在想文字中想加的地方加上%d而已** <!-- .element: class="fragment" data-fragment-index="1" --> ---- <!-- .slide: data-transition="fade" --> **如果是輸出其他資料型態** **%d的地方就要改成其他東西** ---- <h3 class="text-left"> 資料型態的輸入輸出 </h3> <!-- .slide: data-transition="fade" --> - int: %d - long long int: %lld - float: %f - double: %lf - char: %c - 字串: %s (之後的單元會提到) ---- **那如果是要輸入一個資料呢?** **我們可以用`scanf`來將資料輸入到變數裡** <!-- .element: class="fragment" data-fragment-index="1" --> ---- <!-- .slide: data-transition="fade" --> <h3 class="text-left"> scanf 語法 </h3> ```cpp int num; scanf("%d", &num); // remember & ``` **%d的地方與printf差不多** **注意前面要加個&代表儲存的位置** **之後講「指標」時會詳細說明** <!-- .element: class="fragment" data-fragment-index="1" --> ---- <!-- .slide: data-transition="fade" --> **寫一個輸入一整數 並輸出該整數的程式** **可以這樣寫** ```cpp #include <stdio.h> int main(){ int number; scanf("%d", &number); printf("The number is %d", number); return 0; } ``` ---- <!-- .slide: data-transition="fade" --> **如果要輸出一個小數點後2位的數字** ```cpp #include <stdio.h> int main(){ float num = 10.314; printf("The number is %.2f", num); return 0; } ``` ---- <!-- .slide: data-transition="fade" --> **如果要輸出一個小數點後8位的數字** ```cpp #include <stdio.h> int main(){ double num = 10.314159265354; // 這裡用double printf("The number is %.8f", num); return 0; } ``` ---- <!-- .slide: data-transition="fade" --> **如果要求輸出到小數點後幾位** **有可能會四捨五入或五捨六入** <!-- .element: class="fragment" data-fragment-index="1" --> **主要是跟小數點二進制的儲存方式有關** <!-- .element: class="fragment" data-fragment-index="2" --> **這方面我們下次再討論** <!-- .element: class="fragment" data-fragment-index="3" --> --- <!-- .slide: data-transition="fade" --> ### 例題練習 ---- <!-- .slide: data-transition="fade" --> [Zerojudge d483. hello, world](https://zerojudge.tw/ShowProblem?problemid=d483) **不要跟我說你不會** <!-- .element: class="fragment" data-fragment-index="1" --> --- <!-- .slide: data-transition="fade" --> ### 以上就是本章節的內容
{"description":"認識資料型態","title":"C程式設計導論-資料型態與輸入輸出","contributors":"[{\"id\":\"4f67a8cd-06ae-45dc-a8e3-62c6a41e5a37\",\"add\":8434,\"del\":913}]"}
    167 views