The C Programming Language

Download Report

Transcript The C Programming Language

Introduction to the C
Programming Language
CSIM, PU
C Language
程式碼的編譯
 一般來說,程式碼編輯完成後,必須轉換成機器所能
理解的語言(即機器碼,machine code)後,才能正確
的執行。
 所有的程式語言中,都附有這種轉換的程式,而轉換
程式可概分成兩種,即直譯器(interpreter)與編譯器
(compiler)。
C語言是屬於編譯器的一種。
CSIM, PU
C Language
2
C語言的編譯及連結過程
撰寫程式
原始程式
編譯器
(xxx.c)
(Compiler)
函數庫
目的檔
(Library)
(xxx.obj)
連結程式
(Linker)
執行檔
(xxx.exe)
CSIM, PU
C Language
3
簡單的C程式範例
/* prog1_1 , 第一個C程式碼 */
#include<stdio.h>
原始的程式碼
#include<stdlib.h>
void main(void)
{
printf("First C program!\n"); /*在螢幕上印出 ””內的字串*/
printf("享受C的樂趣\n!");
system("pause");
/*暫停程式的執行*/
}
CSIM, PU
C Language
4
程式碼的編輯、撰寫
下面視窗為鍵入程式碼之後的情形:
CSIM, PU
C Language
5
程式碼的編輯、撰寫
選擇『檔案』功能表裡的『儲存』即可儲存檔案。
存檔類型需存成 .c 檔
CSIM, PU
C Language
6
程式碼的編譯、執行
 程式碼寫完後,接下來就是要將原始程式碼變成可執
行的程式碼。
 以Dev C++為例,有下列幾種方式進行編譯與執行:
1. 選擇『執行』功能表中的『編譯』來編譯程式,
然後選擇『執行』功能表裡的『執行』來執行它。
2. 選擇『執行』功能表裡的『編譯並執行』,此時
Dev C++在編譯完程式之後,會自動執行程式。
CSIM, PU
C Language
7
簡單的C程式範例
#include<stdio.h>
#include<stdlib.h>
void main(void)
/* 將stdio.h這個檔案含括(include)進來*/
/*將stdlib.h這個檔案含括(include)進來*/
定義了main函數,{}內為main的主體
{
int num;
/* 宣告一個名為num的整數型態變數 */
num=2;
/* 把num的值設為2 */
printf("I have %d dogs\n",num);
/* 呼叫printf()函數 */
printf("You have %d dogs,too\n",num);
C語言的註解。
C是以 " /* "及 " */ “
記號來包圍註解文字.
system("pause");
}
printf函數會先把『%d』這個符號以num的值來取代。
再將雙引號內的文字輸出到螢幕上。
CSIM, PU
C Language
8
解析C語言
include指令與標頭檔:
 在C語言裡,性質相近的格式定義會放在同一個標頭檔裡。
 我們可以使用include指令將這些標頭檔含括進程式裡。
main()函數:
 每ㄧ個C程式都必有一個main()函數,而且只能有一個。
 所有C程式都是由main()函數開始執行,所執行的是{ }內的
內容。
 大括號、本體
 以main()函數而言,左大括號({)與右大括號(})之間的程式
碼就是main()函數的本體(body)。
 本體內的每個指令敘述需以分號『;』做結尾。
CSIM, PU
C Language
9
變數與常數
 變數(variables):
是一個記憶體空間,主要用途是讓程式設計者,暫時存
放一個數值,並於需要時可以隨時取用它或改變它.
 變數一定要宣告過才能使用,否則將產生錯誤.
 當我們宣告一個變數(variable)時,compiler會在記憶
體內配置一個空間給此變數。
 常數(constant)不同於變數,它的值是固定的。
例如:整數常數12400、浮點常數5.1
CSIM, PU
C Language
10
變數與常數
 變數可用來存放資料。不同類型的資料需要不同型態的
變數來儲存。
 使用變數前必須先宣告此變數所欲儲存的資料型態。
 例如:班級的人數ㄧ定是整數,因此可利用整數型態的
變數來儲存班級的人數。
 例如: int num;
num=54;
宣告ㄧ個變數num為整數資料型態
num的值設為54
CSIM, PU
C Language
11
基本資料型態
 C語言常用的四種資料型態:
 char(字元)
character
 int(整數)
integer
 float(浮點數)
single-precision floating point
 double(倍精度浮點數)
 例如: char name;
int num;
float grade;
CSIM, PU
double-precision floating point
/*宣告一個變數name為字元資料型態*/
/*宣告一個變數num為整數資料型態*/
/*宣告一個變數grade為浮點資料型態*/
C Language
12
基本資料型態
 下表列出了C語言中各種基本資料型態所佔的記憶體空間及範圍
資料型態
型態說明
位元組
4
-2147483648 ~ 2147483647
int
長整數
整數
4
-2147483648 ~ 2147483647
short int
短整數
2
-32768 ~ 32767
char
字元
1
0 ~ 255(256個字元)
float
浮點數
4
1.2E-38 ~ 3.E38
double
倍精度浮點數
8
2.2E-308 ~ 1.8E308
long int
整數
類型
浮點數
類型
表示範圍
 不同的編譯程式裡,整數類的變數所佔的位元組可能會有所不同
CSIM, PU
C Language
13
整數資料型態
 在Dev C++中,int 與 long int 都佔了4個位元組.
 在其它編譯器裡(如:Turbo C), int 可能只佔了2個位元組.
 在宣告長整數或短整數變數時,可以省略 int .
short int a=1000;
可寫成
short a=1000;
long int b=2000 ;
可寫成
long b=2000;
 若儲存的資料絕對不會出現負數的時候,可以使用無號整數來儲存
CSIM, PU
資料型態
型態說明
位元組
表示範圍
unsigned long int
無號長整數
4
0 ~ 4294967295
unsigned int
無號整數
4
0 ~ 4294967295
unsigned short int
無號短整數
2
0 ~ 65535
C Language
14
字元資料型態
 字元型態在記憶體中佔有 1 個位元組,可用來儲存字元.
 通常字元會被編碼,亦即替每一個字元編上一個整數碼
,以方便處理這些字元.
 ASCII是較為人知的編碼系統(請參閱附A).
 在 ASCII 編碼系統中,數字 0 到 127 分別代表不同的常
用符號。
 例如:英文大寫 A 的 ASCII 碼是 65
英文小寫 a 的 ASCII 碼是 97
符號 % 的 ASCII 碼是37
CSIM, PU
附錄A
C Language
15
字元常數(Character Constants)
 字元常數必須放在單引號裡面.
 例如: ’A’ , ’a’ , ‘7’ , ‘*’
 也可以使用ASCII code來表示字元常數
 範例:
CSIM, PU
char ch=‘A’; 同等於
char ch=65;
char ch=‘7’;
同等於
char ch=55;
char ch=‘%’
同等於
char ch=37;
C Language
16
字串常數(String Constants)
 字串常數是以ㄧ對雙引號包圍.
 例如: “holiday” , “Hello” , ”Jane Wang” …等
 “a” 會被視為包含了一個字元的字串.
 在C語言中處理字元和字串的方式是不ㄧ樣的.
CSIM, PU
C Language
17
變數宣告(Declarations)
 宣告的語法如下:
資料型態 變數名稱;
例如:
int num1; /* 把變數num1宣告為 int 型態 */
char a; /* 把變數a宣告為 char 型態 */
float f; /* 把變數f宣告為 float 型態 */
 變數命名原則:
1. 第一個字元必須是英文字母或底線
2. 大小寫代表不同的變數(如 : SUM, Sum, sum).
3. 可由字母,底線,阿拉伯數字所組成.
4. 不可為關鍵字(Keyword)或保留字(Reserve word).
Ex: 不合法的識別字: 2A , good! , $money, case
CSIM, PU
C Language
18
變數宣告(Declarations)
若想同時宣告一個以上相同型態的變數, 則可用逗號(,)隔開.
例如 :
int a;
int b;
int c;
可寫成
int a, b, c;
 在變數宣告完成後,可使用等號運算子(=)替變數設值。
例如: int a;
a=3;
/* 把變數a宣告為int型態 */
指定整數變數a的初值為3
a
 也可以在宣告的時候,替變數設值。
例如:
int num=3;
num
指定整數變數num的初值為3
Memory
CSIM, PU
C Language
19
溢位
 當數值的大小超過變數可以表示的範圍時,溢位(overflow)便
會發生。
 例如:
shot int num=32767;
num=num+1;
 解說:
設定num的初值為整數(integer)所容許的最大值(32767)。
當num的值加上1後,會發生溢位的現象。此時num的值
會變成-32768。
CSIM, PU
C Language
20
簡單的C程式範例
#include<stdio.h>
#include<stdlib.h>
void main(void)
{
int sum;
/* 宣告整數變數sum */
int a=5,b=9;
/* a的值為5 , b的值為9 */
float avg;
/* 宣告浮點變數avg */
sum = a + b;
avg = sum / 2;
將a與b的值相加,放到sum中
將sum的值除以2,放到avg中
printf(“The average = %f\n” , avg);
system("pause");
}
CSIM, PU
C Language
21
運算子(Operator )
 運算式是C語言的其中一種敘述,運算式是由運算元(Operand)
與運算子(Operator)所組成.運算元可以是常數,變數,甚至是
函數;而運算子就是數學上的算數符號,如+,-,*,/等.
 以運算式(num=a+10)為例,num、a與10都是運算元,
『=』與『+』則為運算子:
num
=
a
+
10
運算式
運算元 運算子 運算元 運算子 運算元
CSIM, PU
C Language
22
一元運算子與二元運算子
 一元運算子 :
一個運算子若在計算時,只操作一個運算元,將稱為一元運算子.
如負號“-”,當數字前加上“-”,其值將變為負值,例如: -10.
 二元運算子 :
一個運算子若在計算時,操作兩個運算元,將被稱為二元運算子.
例如:加號“+”在運算式“x+2”,操作左右兩邊的運算元,執行
x與 2的相加.
CSIM, PU
C Language
23
指派運算子(assignment operator)
 運算子符號 : =
範例1:
i = 14;
意義:將整數14指定給i這個變數.
範例2:
i = i + 2;
意義:將 i 內存放的數值,從記憶體取出,加2以後,再指派回原來的記憶空間裡.
CSIM, PU
C Language
24
算術運算子
運算子符號
名稱
當a=6,b=2時
結合規則 使用語法範例 前述範例的
運算結果
+
加法
由左而右
a+b
6+2=8
-
減法
由左而右
a–b
6–2=4
*
乘法
由左而右
a*b
6 * 2 = 12
/
除法
由左而右
a/b
6/2=3
取餘數 由左而右
a%b
6%2=0
%
CSIM, PU
C Language
25
算術運算子
 算數算子的運算規則:
 範例 :





1.運算子的優先順序
2.運算子的結合規則
優先順序
CSIM, PU
6 – 32 % 5 + 28 / 4 * 2
6 – 2 + 28 / 4 * 2
6–2+7*2
6 - 2 + 14
4 + 14
18
1
運算子符號
*(乘), /(除), %(取餘數)
結合規則
由左而右
2
+(加), -(減)
由左而右
C Language
26
算術指定運算子
運算子符號 結合規則
CSIM, PU
原 式
簡化寫法
當a=6時前
述範例的
運算結果
+=
由右而左
a=a+2
a += 2
8
-=
由右而左
a=a–2
a -= 2
4
*=
由右而左
a=a*2
a *= 2
12
/=
由右而左
a=a/2
a /= 2
3
%=
由右而左
a =a% 2
a %= 2
0
C Language
27
比較運算子
運算子
符號
名稱
==
等於
當a=6,b=2時
結合規則 使用語法範例 前述範例的
比較結果
由左而右
6 = = 2 , 0(假)
a==b
>
大於
由左而右
a>b
6 > 2 , 1(真)
<
小於
由左而右
a<b
6 < 2 , 0(假)
>=
大於或等於 由左而右
a >= b
6 >= 2 , 1(真)
<=
小於或等於 由左而右
a <= b
6 <= 2 , 0(假)
a != b
6 != 2 , 1(真)
!=
CSIM, PU
不等於
由左而右
C Language
28
邏輯運算子
運算子
符號
CSIM, PU
名稱
使用語法
結合規則
範例
&&
且
由左而右
a && b
||
或
由左而右
a || b
!
反
由右而左
!a
說
明
當a,b兩者均為真時,結
果為1(真),否則為0(假).
當a,b兩者期中一個為真
時結果就為1(真),當a,b
都為假時結果為0(假).
當a為真時,結果為0(假),
當a為假時,結果為1(真).
C Language
29
邏輯運算子
 當a=2, b=6時,下式的真假值 :
( ! ( a >= b ) ) && ( a == b )
 1 && 0
 0
優先順序
CSIM, PU
1
運算子符號
!(反)
結合規則
由左而右
2
&&(且)
由左而右
3
||(或)
由左而右
C Language
30
遞增 , 遞減運算子
運算子
符號
++
遞增運算子 由右而左
使用語法
範例
a++ 或 ++a
--
遞減運算子 由右而左
a-- 或 --a
名稱
結合規則
相當於
a=a+1
a=a–1
 範例 :
CSIM, PU
j = i ++;
 表示先將i值給j後, i值再加1
j = ++i;
 表示先將i值加1後, 再傳給j
C Language
31
條件運算子
運算子
符號
?:
CSIM, PU
名 稱
使用語法
範例
說 明
當條件式判斷
結果為1(真)
時,將執行程
條件運算子 (條件式) ? 程式敘述1 : 程式敘述2 式敘述1; 為0
(假)時,則執行
程式敘述2.
C Language
32
型態轉型
 C語言對於不同資料型態的算術運算式,它會自動轉變為
可包容性的型態,其轉型規則:
 所有的字元型態和短整數型態能轉型為 int
 所有的浮點型態float 能轉型為double
 對所有成對的運算元,一律依下列的順序轉型:




一旦有長雙倍精確度long double之運算元,則其他運算元皆轉型為長雙倍精確度
一旦有雙倍精確度double 之運算元,則其他運算元皆轉為雙倍精確度
一旦有長整數型態long之運算元,則其他運算元皆轉為長整數型態
一旦有未帶正負號整數型態,則其他運算元皆轉為未帶正負號整數型態
 範例: char ch;
int i ;
float f;
double d;
r=ch / i +f*d-(f+i);
問題: r應該宣告成何種資料型態? Ans: double
CSIM, PU
C Language
33
型態轉型 cont1.
 強迫式將運算式結果轉型:
(型態) 運算式 或
(型態) 變數
型態:指C語言上的基本型態,前後用小括號圍住
例如:
int i=7, j;
float f;
f=(float) i / 2;
j=(int) f ;
CSIM, PU
C Language
34
附錄A (Ascii碼)
附錄A (Ascii碼)
跳脫字元(Escape Sequences)
\a alert (bell) character
\\
backslash
\b backspace
\?
question mark
\f formfeed
\'
single quote
\n newline
\"
double quote
\r carriage return
\000
octal number
\t horizontal tab
\xhh
hexadecimal number
\0 null character
CSIM, PU
C Language
37