C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015
課程大綱 C語言入門 資料型態與變數 基本資料處理 基本輸出入函式
C語言執行過程 程式語言? 語法介於人與電腦之間,用來命令電腦 做事的一種語言! 原始程式 原始程式 原始程式 目的檔 目的檔 目的檔 人類: 中文, 英文, … 電腦: 00100111… 運算 (數學,邏輯) 控制 (程式流程) 儲存資料 人與電腦之間的一種語言 原始程式 SOURCE.C 原始程式 SOURCE.C 原始程式 SOURCE.C 目的檔 SOURCE.OBJ 目的檔 SOURCE.OBJ 目的檔 SOURCE.OBJ 執行檔 SOURCE.EXE 編譯器 COMPILER 連結器 LINKER 需要被翻譯 CPU才看的懂 多個翻譯好的檔案連起來 成為一個可執行的檔案
標準C語言格式 要點 程式有開始與結束 一個口令一個動作 (以分號 ; 代表一個動作的結束) 標準C語言格式 要點 程式有開始與結束 一個口令一個動作 (以分號 ; 代表一個動作的結束) 宣告要用的資料(記憶體), 然後寫程式操作它們(CPU) #include <stdio.h> ----> 呼叫標準輸入輸出函式庫 int main() ----> 主程式 (開始程式) { [宣告要用到的資料] [寫程式] return 0; ----> 回傳0 (結束程式) }
第一個C程式 HelloWorld 使用Visual C++ 2010 或 2012 編譯並執行 第一個C程式 HelloWorld 使用Visual C++ 2010 或 2012 編譯並執行 #include <stdio.h> int main() { printf("Hello World !\n"); return 0; }
註解 單行註解: // 內容 將一範圍註解: /* 內容 */ 單行註解: // 內容 將一範圍註解: /* 內容 */ #include <stdio.h> //這行是呼叫標準輸入輸出函式庫 int main() //這行是主程式 { printf("Hello World !\n"); //printf("這行不會真的印出來!\n"); /*printf("這行跟下行也是!\n"); printf("不會印!\n");*/ return 0; }
課程大綱 C語言入門 資料型態與變數 基本資料處理 基本輸出入函式
資料型態 字元(char) 整數 (int) 浮點數 (double) 資料可以透過變數存取! Ex. ‘A’ Ex. 123 資料型態 字元(char) Ex. ‘A’ 整數 (int) Ex. 123 浮點數 (double) Ex. 123.456 資料可以透過變數存取! A (字元) 123 (整數) 123.456 (浮點數) …
變數 (Variable) 用途:暫存資料以便後續運算 注意事項: 使用對的資料型態的變數存放對的資料! 使用等號儲存 規則: 先宣告, 再使用! 123 (整數) 123.456 (浮點數) 'A' (字元)
宣告變數 語法: 變數宣告後可使用等號存放資料或運算結果 宣告一個變數: 資料型態 變數名稱; 宣告變數 語法: 宣告一個變數: 資料型態 變數名稱; 宣告多個變數: 資料型態 變數名稱1, 變數名稱2, …, 變數名稱n; 宣告變數並初始化: 資料型態 變數名稱 = 內容; 變數宣告後可使用等號存放資料或運算結果 Ex: 變數名稱 = … ; #include <stdio.h> int main() { int num1 = 123; //宣告num1為整數變數 double num2 = 123.456; //宣告num2為小數變數 char ch1 = 'A'; //宣告ch1為字元變數 double num3; //宣告num3為小數變數 num3 = num1 + num2; //將num1+num2之結果存到num3 return 0; }
變數命名的原則 開頭必須是英文字母或底線 字元的大 寫小寫所代表的意義不同 . 不得使用關鍵字 #include <stdio.h> int main() { int abc = 10; int ABC = 20; int 123a = 30; //錯誤: 變數開頭為數字 int char = 40; //錯誤: 變數為關鍵字char return 0; }
變數的資料型態種類 1 byte可放0~255大小之任一數字 不同變數能存的值之範圍有限 操作資料請注意所宣告的變數特性 類 別 符號位元 容量(bytes) 表 示 法 數 值 範 圍 整 數 有 2 short -32768~32767 4 int -2147483648~2147483647 無 unsigned short 0~65535 unsigned int 0~4294967295 浮點數 float 10-38~1038 8 double 10-308~10308 字元 1 char -128~127 unsigned char 0~255
課程大綱 C語言入門 資料型態與變數 基本資料處理 基本輸出入函式
算數運算子 加、減、乘、除、負數及餘數運算子 運算子的優先權 加(+)、減(-)、乘(*)、除(/)為一般的四則運算 算數運算子 加、減、乘、除、負數及餘數運算子 加(+)、減(-)、乘(*)、除(/)為一般的四則運算 而餘數運算(%)是經由兩整數相除所得的餘數稱之。負數是在 某個常數前面加個減號所成的組合稱之。 運算子的優先權 運算子,其運算的優先順序如下: 使用括號 ( ) 改變優先順序! 負號 (-) 高優先順序 乘 ( * )、除 ( / )、餘數( % ) 中優先順序 加 ( +)、減 ( - ) 低優先順序
整數與小數的除法 注意以下範例之整數之除法!! 整數除法結果為整數 使用型態轉換語法改變運算結果: (資料型態) 運算式 整數與小數的除法 注意以下範例之整數之除法!! 整數除法結果為整數 使用型態轉換語法改變運算結果: (資料型態) 運算式 #include<stdio.h> int main() { int a1=46, a2=5; double b1=46, b2=5; double x, y; x = a1/a2; // x = 9 y = b1/b2; // y = 9.2 //使用型態轉換把a1/a2用小數運算表示 x = (double)a1/a2; // x = 9.2 return 0; }
特殊運算式 C/C++常用的特殊運算式: 特殊運算式 基本運算式 a++ a = a + 1 a-- a = a - 1 a += b 特殊運算式 C/C++常用的特殊運算式: 特殊運算式 基本運算式 a++ a = a + 1 a-- a = a - 1 a += b a = a + b a -= b a = a – b a *= b a = a * b a /= b a = a / b a %= b a = a % b 遞增 遞減
特殊運算式 觀察下面整數a的變化 #include<stdio.h> int main() { int a = 0; a+=5; 特殊運算式 觀察下面整數a的變化 #include<stdio.h> int main() { int a = 0; a+=5; a++; a/=3; a*=5; a-=4; a%=3; return 0; }
邏輯與關係運算子 一般用於控制流程等有條件的敘述當中 常用來比較或判斷變數內容資料為多少 運算子 功能敘述 && AND(且) || 邏輯與關係運算子 一般用於控制流程等有條件的敘述當中 常用來比較或判斷變數內容資料為多少 運算子 功能敘述 && AND(且) || OR(或) ! NOT(非) 關 係 運 算 子 運算子 功能敘述 < 小於 <= 小於等於 > 大於 >= 大於等於 == 等於 != 不等於
基本運算子優先順序表 可使用括號改變優先順序 !, 負號 (-), ++, -- 乘 ( * )、除 ( / )、餘數( % ) 基本運算子優先順序表 可使用括號改變優先順序 高 !, 負號 (-), ++, -- 乘 ( * )、除 ( / )、餘數( % ) 加 ( +)、減 ( - ) <, <=, >, >= ==, != && || 低
課程大綱 C語言入門 資料型態與變數 基本資料處理 基本輸出入函式
基本輸入輸出 123 (整數) scanf 預設為鍵盤輸入 printf 預設為螢幕輸出 123
基本輸入輸出 範例:用鍵盤輸入一個整數,再將它由螢幕輸出 #include <stdio.h> int main() { 基本輸入輸出 範例:用鍵盤輸入一個整數,再將它由螢幕輸出 #include <stdio.h> int main() { int num; scanf("%d", &num); //鍵盤輸入之整數存到num printf("%d\n", num); //將整數num由螢幕輸出 return 0; }
基本輸出函數 格式化輸出函數 printf( ) 語法如下: Ex. 在螢幕印一整數變數內容並斷行 基本輸出函數 格式化輸出函數 printf( ) 語法如下: printf(“格式化輸出內容”, 參數1,參數2, ...參數n); 格式化輸出內容, 可加入列印格式、控制字元、修飾子 參數, 為對應格式之資料內容 (可為變數, 運算式, 常數) 要訣: 參數: 一個%對應一個參數 列印格式: %後可加對應參數型態之列印格式 修飾子: %後可加修飾子對列印格式做排版 控制字元: 一般鍵盤無法輸入的字元要用控制字元 Ex. 在螢幕印一整數變數內容並斷行 printf(“%d\n”, num);
列印格式、控制字元 格式化輸出內容 - 控制字元 功能 \a 警告音 \b 倒退 \f 換頁 \n 換行 \r 歸位 \t 跳格 \’ - 列印格式、控制字元 格式化輸出內容 列印格式 輸出敘述 %c 字元 %s 字串 %d 十進位整數 %u 無號十進位整數 %o 無號八進位整數 %x 無號十六進位整數,以 0 ~ f 表示 %X 無號十六進位整數,以 0 ~ F 表示-- %f 浮點數(float),小數點型式 %lf 浮點數(double),小數點型式 %e 浮點數,指數e型式 %E 浮點數,指數E型式 %g 印出 %f 與 %e 較短者 %G 印出 %F 與 %E 較短者 %p 指標位址 %% 印出百分比符號 控制字元 功能 \a 警告音 \b 倒退 \f 換頁 \n 換行 \r 歸位 \t 跳格 \’ 印出單引號 \” 印出雙引號 \\ 反斜線 \/ 斜線 \d 八進位 Ascii 碼 \x 十六進位 Ascii 碼--
修飾子 格式化輸出內容 - 修飾子 功能 範例 - 向左對齊 %-3d + 將數值的正負號顯示出來 %+5d 空白 - 修飾子 格式化輸出內容 修飾子 功能 範例 - 向左對齊 %-3d + 將數值的正負號顯示出來 %+5d 空白 數值為正值時,留一格空白;為負值時,顯示負號 % 6f 將固定欄位長度的數值前空白處填上 0;與 - 修飾子同時使用時,此修飾子無效 %07.2f 數字 欄位長度,當數值的位數大於所定的欄位長度時,欄位會自動加寬它的長度 %9d . 數值以 %e, %E, %f 型式表示時,決定小數點後所要顯示的位數 %4.3f h 表示 short int 或是 unsigned short int %5h l 表示 long int 或是 unsigned long int
基本輸出函數 範例: #include <stdio.h> int main() { int x=42; 基本輸出函數 範例: #include <stdio.h> int main() { int x=42; double y=12.345; char c='A'; printf("%d %lf %c\n",x, y, c); printf("|%15d|\n", x); printf("|%-15d|\n", x); printf("|%015d|\n", x); printf("|%10lf|\n", y); printf("|%10.3lf|\n", y); return 0; }
基本輸入函數 格式化輸入函數 scanf( ) 語法如下: Ex. 將鍵盤輸入之兩個整數存到兩個整數變數 基本輸入函數 格式化輸入函數 scanf( ) 語法如下: scanf(“格式化輸入內容”, &參數1, &參數2, ...&參數n); 格式化輸入內容, 格式與printf同 &參數, 為對應格式之變數記憶體位置 要訣: &參數: 一個%對應一個變數記憶體位置, 輸入時以空白鍵, TAB, Enter區隔, 以Enter做 為輸入結束 列印格式: %後可加對應參數型態之格式 修飾子: 一般不使用 控制字元: 一般不使用 Ex. 將鍵盤輸入之兩個整數存到兩個整數變數 scanf(“%d%d”, &num1, &num2);
基本輸入函數 範例: #include <stdio.h> int main() { int num1; 基本輸入函數 #include <stdio.h> int main() { int num1; double num2; char ch; scanf("%c", &ch); scanf("%d", &num1); scanf("%lf", &num2); printf("%c\n", ch); printf("%d\n", num1); printf("%lf\n", num2); return 0; } 範例:
練習 輸入兩個小數, 印出兩者加,減,乘,除的結果 (輸出小 數後兩位) 例如: 輸入: 5.1 2.3 練習 輸入兩個小數, 印出兩者加,減,乘,除的結果 (輸出小 數後兩位) 例如: 輸入: 5.1 2.3 輸出: 5.10 + 2.30 = 7.40 5.10 - 2.30 = 2.80 5.10 * 2.30 = 11.73 5.10 / 2.30 = 2.22