Tải bản đầy đủ (.pdf) (227 trang)

Ngôn ngữ hệ thống A

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.63 MB, 227 trang )

TRNG I HC CN TH
KHOA CÔNG NGH THÔNG TIN VÀ TRUYN THÔNG
B MÔN VIN THÔNG & K THUT IU KHIN



Giáo trình


NGÔN NG
H THNG A





Biên son:

ThS. Nguyn Ha Duy Khang
Ks. Trn Hu Danh







-HCT-
10-2006
Ngôn Ng H Thng A Ni dung



NI DUNG


NI DUNG
GII THIU MÔN HC......................................................................................1
1. i tng môn hc...............................................................................................1
2. Ni dung ct lõi....................................................................................................1
3. Kin thc liên quan...............................................................................................2
4. Danh mc tài liu tham kho................................................................................2
PHN A - NGÔN NG C
Chng 1 – C BN V NGÔN NG C............................................................ 3
1. Tng quan v ngôn ng lp trình C...................................................................... 3
2. Câu lnh................................................................................................................4
1.1. Khái nim câu lnh............................................................................................ 4
1.2. Phân loi ............................................................................................................4
3. Các lnh đn.........................................................................................................4
3.1. Lnh gán ............................................................................................................4
3.2. Lnh nhp giá tr t bàn phím cho bin (hàm scanf)......................................... 6
3.3. Lnh xut giá tr ca biu thc lên màn hình (hàm printf)................................ 8
4. Bài tp...................................................................................................................10
4.1. Mc đích yêu cu...............................................................................................10
4.2. Ni dung ............................................................................................................10
Chng 2 - CÁC LNH CÓ CU TRÚC............................................................12
1. Khi lnh ..............................................................................................................12
2. Cu trúc r nhánh.................................................................................................. 14
3. Cu trúc la chn.................................................................................................. 19
4. C
u trúc vòng lp.................................................................................................. 23
4.1. Vòng lp for....................................................................................................... 23

4.2. Vòng lp while ..................................................................................................25
4.3. Vòng lp do… while .........................................................................................28
4.4. So sánh các vòng lp ......................................................................................... 30
5. Các câu lnh đc bit............................................................................................30
6. Bài tp...................................................................................................................31
6.1 Mc đích yêu cu................................................................................................ 31
6.2 Ni dung .............................................................................................................31
Chng 3 - HÀM và CU TRÚC CHNG TRÌNH .......................................34
1. Khái nim v hàm trong C....................................................................................34
ThS. Nguyn Ha Duy Khang, Ks. Trn Hu Danh i
Ngôn Ng H Thng A Ni dung
1.1. Hàm th vin .....................................................................................................35
1.2. Hàm ngi dùng................................................................................................ 36
2. Xây dng mt hàm ...............................................................................................36
2.1 nh ngha hàm ..................................................................................................36
2.2 S dng hàm....................................................................................................... 37
2.3 Nguyên tc hot đng ca hàm .......................................................................... 38
3. Truyn tham s cho hàm ......................................................................................38
4. Hàm đ quy...........................................................................................................41
4.1. nh ngha ......................................................................................................... 41
4.2. c đim cn lu ý khi vit hàm đ quy........................................................... 42
5. Bài tp...................................................................................................................42
5.1 Mc đích yêu cu................................................................................................ 42
5.2 Ni dung .............................................................................................................42
Chng 4 - KIU MNG VÀ CON TR............................................................44
1. Gii thiu kiu d liu “kiu mng” trong C .......................................................44
2. Mng m
t chiu....................................................................................................44
2.1. Khai báo............................................................................................................. 44
2.2 Truy xut tng phn t ca mng....................................................................... 45

3. Mng nhiu chiu ................................................................................................. 48
3.1 Khai báo.............................................................................................................. 48
3.2 Truy xut tng phn t ca mng 2 chiu..........................................................49
4. Gii thiu kiu d liu con tr..............................................................................51
5. Khai báo và s dng bin con tr......................................................................... 52
5.1. Khai báo bin con tr ........................................................................................52
5.2. Các thao tác trên con tr.................................................................................... 52
6. Con tr và mng ................................................................................................... 56
6.1 Con tr và mng 1 chiu.....................................................................................56
6.2 Con tr và mng nhiu chiu..............................................................................59
7. Con tr và tham s hình thc ca hàm................................................................. 60
8. Bài tp...................................................................................................................62
8.1 Mc đích yêu cu................................................................................................ 62
8.2 Ni dung .............................................................................................................62
Chng 5 - CHUI KÝ T VÀ CÁC HÀM X LÝ CHUI........................... 64
1. Khái nim .............................................................................................................64
2. Khai báo................................................................................................................ 64
2.1 Khai báo theo mng............................................................................................64
2.2 Khai báo theo con tr ......................................................................................... 64
2.3 Va khai báo va gán giá tr ..............................................................................64
3. Các thao tác trên chui ký t................................................................................65
3.1. Nhp xut chui.................................................................................................65
ThS. Nguyn Ha Duy Khang, Ks. Trn Hu Danh ii
Ngôn Ng H Thng A Ni dung
3.2 Mt s hàm x lý chui (trong string.h).............................................................66
4. Bài tp...................................................................................................................69
4.1 Mc đích yêu cu................................................................................................ 69
4.2 Ni dung .............................................................................................................69
Chng 6 - KIU CU TRÚC..............................................................................71
1. Kiu cu trúc trong C ...........................................................................................71

1.1 Khái nim ........................................................................................................... 71
1.2 nh ngha kiu cu trúc..................................................................................... 71
1.3 Khai báo bin cu trúc........................................................................................ 73
2. Các thao tác trên bin kiu cu trúc......................................................................73
2.1 Truy xut đn tng trng ca bin cu trúc .....................................................73
2.2 Khi to cu trúc ................................................................................................76
3. Con tr cu trúc .................................................................................................... 76
3.1 Khai báo.............................................................................................................. 76
3.2 S dng các con tr kiu cu trúc ......................................................................76
3.3 Truy cp các thành phn c
a cu trúc đang đc qun lý bi con tr ...............76
4. Bài tp...................................................................................................................77
4.1 Mc đích yêu cu................................................................................................ 77
4.2 Ni dung .............................................................................................................77
Chng 7 - KIU TP TIN ..................................................................................79
1. Mt s khái nim v tp tin ..................................................................................79
2. Các thao tác trên tp tin........................................................................................80
2.1. Khai báo bin tp tin..........................................................................................80
2.2. M tp tin ..........................................................................................................80
2.3. óng tp tin .......................................................................................................81
2.4. Kim tra đn cui tp tin hay cha?..................................................................81
2.5 Di chuyn con tr tp tin v đu tp tin - Hàm rewind()....................................81
3. Truy cp tp tin vn bn ....................................................................................... 81
3.1. Ghi d liu lên t
p tin vn bn .......................................................................... 81
3.2. c d liu t tp tin vn bn ...........................................................................83
4. Truy cp tp tin nh phân......................................................................................84
4.1 Ghi d liu lên tp tin nh phân - Hàm fwrite().................................................. 84
4.2 c d liu t tp tin nh phân - Hàm fread().................................................... 84
4.3 Di chuyn con tr tp tin - Hàm fseek().............................................................84

4.4 Ví d ...................................................................................................................85
5. Bài tp...................................................................................................................88
5.1 Mc đích yêu cu................................................................................................ 88
5.2 Ni dung .............................................................................................................88

ThS. Nguyn Ha Duy Khang, Ks. Trn Hu Danh iii
Ngôn Ng H Thng A Ni dung
PHN B – HP NG (ASSEMBLY)
Chng 1 - T CHC B X LÝ INTEL-8086............................................... 89
1.1. B x lý Intel-8086 (CPU-8086).......................................................................89
1.1.1. Cu trúc tng quát ..........................................................................................89
1.1.2. Các thanh ghi ca 8086 ..................................................................................90
1.1.3. Trng thái tràn: ...............................................................................................93
1.2. B nh trong ca Intel-80x86............................................................................93
1.2.1. T chc d liu............................................................................................... 93
1.2.2. S phân đon b nh trong.............................................................................94
1.3. a ch các ngoi vi ...........................................................................................95
1.4. Các b x lý Intel khác......................................................................................96
1.4.1. B x lý Intel-80386.......................................................................................96
1.4.2. Tp thanh ghi ca b x lý Intel-80386: ........................................................96
1.4.3. Các ch đ vn hành ca b x lý Intel-80386 ..............................................97
1.4.4. B x lý Intel-80486: ..................................................................................... 98
1.4.5. B
x lý Intel PENTIUM:..............................................................................99
BÀI TP CHNG 1 ............................................................................................. 101
Chng 2 - HP NG...........................................................................................103
2.1. Ngôn ng máy và hp ng................................................................................103
2.2. c tính tng quát ca hp ng.........................................................................104
2.2.1. Cu trúc ca mt dòng lnh hp ng. ............................................................104
2.2.2. Macro..............................................................................................................105

2.2.3. Chng trình con............................................................................................105
2.2.4. Bin toàn cc (global), bin đa phng (local)............................................. 106
2.2.5. Các bng, thông báo: ...................................................................................... 106
2.2.6. Hp ng chéo (cross assembler) ....................................................................107
2.3. Hp ng MASM (hp ng ca CPU-8086)......................................................107
2.3.1. Cu trúc ca mt hàng lnh............................................................................107
2.3.2. Tên.................................................................................................................. 107
2.3.3. T gi nh mã lnh, l
nh gi.......................................................................... 108
2.3.4. Toán hng và toán t ......................................................................................115
2.4. Cu trúc ca chng trình hp ng MASM...................................................... 118
2.4.3. Tp tin thi hành dng COM và dng EXE .....................................................119
2.4.4. Ví d ...............................................................................................................120
2.5. Cách to chng trình hp ng.........................................................................121
Chng 3 - TP LNH CPU-8086 N GIN và KIU NH V ................124
3.1. Tp lnh ca CPU-8086 ....................................................................................124
3.1.1. Lnh sao chép d liu, đa ch:.......................................................................124
3.1.2. Lnh tính toán s hc. .................................................................................... 126
3.1.3. Nhóm lnh logic và ghi dch .......................................................................... 127
ThS. Nguyn Ha Duy Khang, Ks. Trn Hu Danh iv
Ngôn Ng H Thng A Ni dung
3.1.4. Nhóm lnh vào ra ngoi vi. ............................................................................ 130
1.3.5. Nhóm lnh h thng .......................................................................................131
3.2. Kiu đnh v ....................................................................................................... 131
3.2.1. nh v tc thì:................................................................................................131
3.2.2. nh v thanh ghi............................................................................................ 132
3.1.3. nh v trc tip (b nh):.............................................................................. 132
3.1.4. nh v gián tip thanh ghi............................................................................. 132
3.1.5. nh v nn ..................................................................................................... 133
3.1.6. nh v ch s.................................................................................................. 133

3.1.7. nh v ch s nn...........................................................................................134
3.1.8. nh v chui .................................................................................................. 134
3.1.9. nh v cng vào/ra ........................................................................................135
BÀI TP CHNG 3 ............................................................................................. 135
Chng 4 - H
 THNG NGT MM ................................................................138
4.1. Nhng c s ca ngt mm...............................................................................138
4.2. S dng ngt trong hp ng..............................................................................138
4.3. Ngt MS-DOS ................................................................................................... 139
4.4 Các ví d.............................................................................................................144
Chng 5 - LNH NHY VÀ VÒNG LP.........................................................148
5.1. Lnh nhy (chuyn điu khin).........................................................................148
5.1.1. Lnh nhy không điu kin ............................................................................148
5.1.2. Lnh nhy có điu kin: .................................................................................149
5.2. Vòng lp ............................................................................................................ 152
BÀI TP CHNG 5 ............................................................................................. 155
Chng 6 - NGN XP VÀ CHNG TRÌNH CON.......................................157
6.1. Ng
n xp............................................................................................................157
6.1.1. T chc và vn hành....................................................................................... 157
6.1.2. Truy xut ngn xp.........................................................................................158
6.2. Chng trình con............................................................................................... 159
6.2.1. Khai báo chng trình con (Th tc).............................................................159
6.2.3. Gi th tc ......................................................................................................160
6.3. Các ví d............................................................................................................160
BÀI TP CHNG 6 ............................................................................................. 164
Chng 7 - X LÝ KÝ S VÀ X LÝ CHUI................................................. 164
7.1. X lý ký t.........................................................................................................165
7.1.1. Nhp xut s nh phân (Binary)......................................................................165
7.1.2. Nhp xut s thp lc phân (Hexa) ................................................................ 166

7.2. X lý chui ........................................................................................................167
7.2. Lnh x lý chui................................................................................................167
7.2.1. Hng x lý chui.......................................................................................... 168
ThS. Nguyn Ha Duy Khang, Ks. Trn Hu Danh v
Ngôn Ng H Thng A Ni dung
7.2.2. Các tin t lp REP (Repeat)..........................................................................168
7.2.3. Lnh Ghi vào chui ........................................................................................169
7.2.4. Lnh Np t chui..........................................................................................170
7.2.5. Lnh di chuyn chui .....................................................................................170
7.2.6. Lnh So sánh hai chui...................................................................................172
7.2.7. Lnh dò tìm trong chui .................................................................................174
BÀI TP CHNG 7 ............................................................................................. 176
Ph lc 1 – Môi trng biên dch TURBO C 3.0 ................................................ 177
Ph lc 2 - Hng Dn S Dng Emu8086 .........................................................187
Ph lc 3 - Môi trng phát trin hp ng RadASM........................................192
Ph lc 4 Complete 8086 instruction set .............................................................. 196
Ph lc 5 – Bng mã ASCII...................................................................................220

ThS. Nguyn Ha Duy Khang, Ks. Trn Hu Danh vi


GII THIU MÔN HC
I. MC ÍCH YÊU CU
Môn Ngôn Ng H Thng A (TH407) cung cp cho sinh viên nhng kin thc
c bn v lp trình h thng trên máy tính thông qua ngôn ng lp trình C và Hp Ng
(Assembly). Môn hc này là nn tng đ tip thu hu ht các môn hc khác trong
chng trình đào to. Mt khác, nm vng ngôn ng C là c s đ phát trin các ng
dng.
Hc xong môn này, sinh viên phi nm đc các vn đ sau:
- Tng quan v Ngôn ng

 lp trình C.
- Các kiu d liu trong C.
- Các lnh có cu trúc.
- Cách thit k và s dng các hàm trong C.
- Mt s cu trúc d liu trong C.
- T chc b x lý Intel-8086
- Cu trúc chng trình Hp ng
- Tp lnh ca Intel-8086
- H thng ngt mm trên máy tính IBM/PC
- Lnh nhy và vòng lp trong Hp ng
- Ngn xp và Th tc
- X lý s và Chui
II. I TNG MÔN HC
Môn hc đc dùng đ ging dy cho các sinh viên sau:
- Sinh viên nm th 3 chuyên ngành Tin hc, Toán Tin, Lý Tin
- Sinh viên nm th 3 chuyên ngành in t (Vin thông, iu khin…)
III. NI DUNG CT LÕI
Trong khuôn kh 45 tit, cu trúc giáo trình đc t chc thành 2 phn chính:
- Phn A trình bày các ni dung c bn ngôn ng lp trình C, các câu lnh,
các kiu d liu….
- Phn B trình bày cu trúc b x lý Intel-8086 và các vn đ v lp trình
Hp ng trên máy tính IBM/PC
PHN A: Ngôn ng C (15 tit)
Chng 1: C bn v Ngôn ng C
Chng 2: Các lnh r nhánh và vòng lp
Chng 3: Hàm và cu trúc chng trình
Ch
ng 4: Mãng và con tr
Chng 5: Chui và các hàm x lý chui
Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 1

Ngôn Ng H Thng A Gii thiu môn hc
Chng 6: Kiu d liu cu trúc
Chng 7: Truy xut tp tin
PHN B: Hp Ng (30 tit)
Chng 1: T chc b x lý Intel-8086
Chng 2: Hp ng
Chng 3: Tp lnh và Kiu đnh v
Chng 4: H thng ngt mm
Chng 5: Lnh nhy và Vòng lp
Chng 6: Ngn xp và Chng trình con
Chng 7: X lý s và Chui
IV. KIN THC LIÊN QUAN
 hc tt môn Ngôn Ng H Thng A, sinh viên cn phi có các kin thc
nn tng sau:
- Kin thc K thut s.
- Kin thc Kin trúc máy tính
- Kin thc Ngôn ng lp trình cp cao: Pascal, Delphi ...
- K nng thao tác s dng máy tính.
V. DANH MC TÀI LIU THAM KHO
[1] Nguyn Vn Linh, Lâm Hoài Bo, Dng Vn Hiu, Giáo trình Lp trình cn bn
A, Khoa Công Ngh Thông Tin, i hc Cn Th, 2005.
[2] Nguyn ình Tê, Hoàng c Hi , Giáo trình lý thuyt và bài tp ngôn ng C;
Nhà xut bn Giáo dc, 1999.
[3] Nguyn Cn, C – Tham kho toàn din, Nhà xut bn ng Nai, 1996.
[4] Brain W. Kernighan & Dennis Ritchie, The C Programming Language, Prentice
Hall Publisher, 1988.
[5] Võ Vn Chín, Bài ging Ngôn ng h thng, Khoa Công Ngh Thông Tin, i hc
Cn Th
, 1994.


Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 2

Chng 1
C BN V NGÔN NG C

Ni dung chng 1 trình bày các vn đn nh sau:
• Tng quan v ngôn ng lp trình C.
• Câu lnh là gì?
• Cách s dng câu lnh gán giá tr ca mt biu thc cho mt bin.
• Cách s dng lnh scanf đ nhp giá tr cho bin.
• Cách s dng lnh printf đ xut giá tr ca biu thc lên màn hình và
cách đnh dng d liu.

1. TNG QUAN V NGÔN NG LP TRÌNH C
C là ngôn ng lp trình cp cao, đc s dng rt ph bin đ lp trình h thng
cùng vi Hp ng (Assembly) và phát trin các ng dng.
Vào nhng nm cui thp k 60 đu thp k 70 ca th k XX, Dennish Ritchie
(làm vic ti phòng thí nghim Bell) đã phát trin ngôn ng lp trình C da trên ngôn
ng BCPL (do Martin Richards đa ra vào nm 1967) và ngôn ng B (do Ken
Thompson phát trin t ngôn ng BCPL vào nm 1970 khi vit h
 điu hành UNIX
đu tiên trên máy PDP-7) và đc cài đt ln đu tiên trên h điu hành UNIX ca
máy DEC PDP-11.
Nm 1978, Dennish Ritchie và B.W Kernighan đã cho xut bn quyn “Ngôn
ng lp trình C” và đc ph bin rng rãi đn nay.
u tiên, C đc thit k nhm lp trình trong môi trng ca h điu hành
Unix nhm mc đích h tr cho các công vic lp trình phc tp. Nhng v sau, vi
nhng nhu cu phát trin ngày mt tng ca công vic lp trình, C đã vt qua khuôn
kh ca phòng thí nghim Bell và nhanh chóng hi nhp vào th gii lp trình đ ri
các công ty lp trình s dng mt cách rng rãi. Sau đó, các công ty sn xut phn

mm ln lt đa ra các phiên bn h tr cho vic lp trình bng ngôn ng C và chun
ANSI C cng đc khai sinh t đó.
Ngôn ng lp trình C là m
t ngôn ng lp trình h thng rt mnh và rt “mm
do”, có mt th vin gm rt nhiu các hàm (function) đã đc to sn. Ngi lp
trình có th tn dng các hàm này đ gii quyt các bài toán mà không cn phi to
mi. Hn th na, ngôn ng C h tr rt nhiu phép toán nên phù hp cho vic gii
quyt các bài toán k thut có nhiu công thc phc t
p. Ngoài ra, C cng cho phép
ngi lp trình t đnh ngha thêm các kiu d liu tru tng khác. Tuy nhiên, điu
mà ngi mi va hc lp trình C thng gp “rc ri” là “hi khó hiu” do s “mm
do” ca C. Dù vy, C đc ph bin khá rng rãi và đã tr thành mt công c lp
trình khá mnh, đc s dng nh là mt ngôn ng lp trình ch y
u trong vic xây
dng nhng phn mm hin nay.
Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 3
Ngôn Ng H Thng A C bn v ngôn ng C
Ngôn ng C có nhng đc đim c bn sau:
• Tính cô đng (compact): C ch có 32 t khóa chun và 40 toán t chun,
nhng hu ht đu đc biu din bng nhng chui ký t ngn gn.
• Tính cu trúc (structured): C có mt tp hp nhng ch th ca lp trình nh
cu trúc la chn, lp… T đó các chng trình vit bng C đc t chc
rõ ràng, d hiu.
• Tính tng thích (compatible): C có b tin x lý và mt th vin chun vô
cùng phong phú nên khi chuyn t máy tính này sang máy tính khác các
chng trình vit bng C vn hoàn toàn tng thích.
• Tính linh đng (flexible): C là mt ngôn ng rt uyn chuyn và cú pháp,
chp nhn nhiu cách th hin, có th thu gn kích thc ca các mã lnh
làm chng trình chy nhanh hn.
• Biên dch (compile): C cho phép biên dch nhiu t

p tin chng trình riêng
r thành các tp tin đi tng (object) và liên kt (link) các đi tng đó li
vi nhau thành mt chng trình có th thc thi đc (executable) thng
nht.

2. CÂU LNH
2.1. Khái nim câu lnh
Mt câu lnh (statement) xác đnh mt công vic mà chng trình phi thc
hin đ x lý d liu đã đc mô t và khai báo. Các câu lnh đc ngn cách vi
nhau bi du chm phy (;).

2.2. Phân loi
Có hai loi lnh: lnh đn và lnh có cu trúc.
Lnh đn là mt lnh không cha các lnh khác. Các lnh đn gm: lnh gán,
các câu lnh nhp xut d liu…
Lnh có cu trúc là lnh trong đó cha các lnh khác. Lnh có cu trúc bao
gm: cu trúc điu kin r nhánh, cu trúc điu kin la chn, cu trúc lp và cu trúc
l
nh hp thành. Lnh hp thành (khi lnh) là mt nhóm bao gm nhiu khai báo bin
và các lnh đc gom vào trong cp du {}.
3. CÁC LNH N
3.1. Lnh gán
Lnh gán (assignment statement) dùng đ gán giá tr ca mt biu thc cho mt
bin.
Cú pháp: <Tên bin> = <biu thc>
Ví d:
int main()
{
int x,y;
x =10; /* Gán hng s 10 cho bin x */

Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 4
Ngôn Ng H Thng A C bn v ngôn ng C
y = 2*x; /* Gán giá tr 2*x=2*10=20 cho x */
return 0;
}
Nguyên tc khi dùng lnh gán là kiu ca bin và kiu ca biu thc phi ging
nhau, gi là có s tng thích gia các kiu d liu. Chng hn ví d sau cho thy mt
s không tng thích v kiu:
int main()
{
int x,y;
x = 10; /*Gán hng s 10 cho bin x*/
y = “Xin chao”; /*y có kiu int, còn “Xin chao” có kiu char */
return 0;
}
Khi biên dch chng trình này, C s báo li "Cannot convert ‘char *’ to ‘int’"
tc là C không th
 t đng chuyn đi kiu t char * (chui ký t) sang int.
Tuy nhiên trong đa s trng hp s t đng bin đi kiu đ s tng thích v
kiu s đc thc hin. Ví d:
int main()
{
int x,y;
float r;
char ch;
r = 9000;
x = 10; /* Gán hng s 10 cho bin x */
y = 'd'; /* y có kiu int, còn ‘d’ có kiu char*/
r = 'e'; /* r có kiu float, ‘e’ có kiu char*/
ch = 65.7; /* ch có kiu char, còn 65.7 có kiu float*/

return 0;
}
Trong nhiu tr
ng hp đ to ra s tng thích v kiu, ta phi s dng đn
cách thc chuyn đi kiu mt cách tng minh.
Cú pháp:
(Tên kiu) <Biu thc>
Chuyn đi kiu ca <Biu thc> thành kiu mi <Tên kiu>. Chng hn nh:
float f;
f = (float) 10/4; /* f lúc này là 2.5*/
Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 5
Ngôn Ng H Thng A C bn v ngôn ng C
Chú ý:
- Khi mt biu thc đc gán cho mt bin thì giá tr ca nó s thay th giá tr
c mà bin đã lu gi trc đó.
- Trong câu lnh gán, du = là mt toán t; do đó nó có th đc s dng là mt
thành phn ca biu thc. Trong trng hp này giá tr ca biu thc gán
chính là giá tr ca bin.
Ví d:
int x, y;
y = x = 3; /* y lúc này cùng bng 3*/
- Ta có th gán tr cho bi
n lúc bin đc khai báo theo cách thc sau:
<Tên kiu> <Tên bin> = <Biu thc>;
Ví d: int x = 10, y=x;
3.2. Lnh nhp giá tr t bàn phím cho bin (hàm scanf)
Là hàm cho phép đc d liu t bàn phím và gán cho các bin trong chng
trình khi chng trình thc thi. Trong ngôn ng C, đó là hàm scanf nm trong th vin
stdio.h.
Cú pháp: scanf(“Chui đnh dng”, đa ch ca các bin);

Gii thích:
- Chui đnh dng: dùng đ qui đnh kiu d
liu, cách biu din, đ rng, s
ch s thp phân... Mt s đnh dng khi nhp kiu s nguyên, s thc, ký t.
nh dng Ý ngha
%[s ký s]d Nhp s nguyên có ti đa <s ký s>
%[s ký s] f Nhp s thc có ti đa <s ký s> tính c du chm
%c Nhp mt ký t
- a ch ca các bin: là đa ch (&) ca các bin mà chúng ta cn nhp giá tr
cho nó. c vit nh sau: &<tên bin>.
Ví d:
scanf(“%d”,&bien1);/*c giá tr bien1 có kiu nguyên*/
scanf(“%f”,&bien2);/*c giá tr cho bien2 có kiu thc*/
scanf(“%d%f”,&bien1,&bien2); /*c giá tr cho bien1 có
kiu nguyen, bien2 có kiu thc*/
scanf(“%d%f%c”,&bien1,&bien2,&bien3); /*bien3 có kiu
char*/
Lu ý
:
o Chui đnh dng phi đt trong cp du nháy kép (“”).
o Các bin (đa ch bin) phi cách nhau bi du phy (,).
o Có bao nhiêu bin thì phi có by nhiêu đnh dng.
o Th t ca các đnh dng phi phù hp vi th t ca các bin.
Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 6
Ngôn Ng H Thng A C bn v ngôn ng C
o  nhp giá tr kiu char đc chính xác, nên dùng hàm fflush(stdin) đ loi b
các ký t còn nm trong vùng đm bàn phím trc hàm scanf().
o  nhp vào mt chui ký t (không cha khong trng hay kt thúc bng
khong trng), chúng ta phi khai báo kiu mng ký t hay con tr ký t, s
dng đnh dng %s và tên bin thay cho đa ch bin.

o  đc vào mt chu
i ký t có cha khong trng (kt thúc bng phím Enter)
thì phi dùng hàm gets().
Ví d:
int biennguyen;
float bienthuc;
char bienchar;
char chuoi1[20], *chuoi2;

Nhp giá tr cho các bin:
scanf(“%3d”,&biennguyen);
Nu ta nhp 1234455 thì giá tr ca biennguyen là 3 ký s đu tiên (123). Các
ký s còn li s còn nm li trong vùng đm.
scanf(“%5f”,&bienthuc);
Nu ta nhp 123.446 thì giá tr ca bienthuc là 123.4, các ký s còn li s còn
nm trong vùng đm.
scanf(“%2d%5f”,&biennguyen, &bienthuc);
Nu ta nhp liên tip 2 s cách nhau bi khong trng nh sau: 1223 3.142325
- 2 ký s đu tiên (12) s đc đc vào cho biennguyen.
- 2 ký s tip theo trc khong trng (23) s đc đc vào cho bienthuc.
scanf(“%2d%5f%c”,&biennguyen, &bienthuc,&bienchar)
Nu ta nhp liên tip 2 s
 cách nhau bi khong trng nh sau: 12345
3.142325:
- 2 ký s đu tiên (12) s đc đc vào cho biennguyen.
- 3 ký s tip theo trc khong trng (345) s đc đc vào cho bienthuc.
- Khong trng s đc đc cho bienchar.
Nu ta ch nhp 1 s gm nhiu ký s nh sau: 123456789:
- 2 ký s đu tiên (12) s đc đc vào cho biennguyen.
- 5 ký s tip theo (34567) s đc đc vào cho bienthuc.

- bienchar s có giá tr là ký s tip theo ‘8’.
scanf(“%s”,chuoi1); hoc scanf(“%s”,chuoi2)
Nu ta nhp chui nh sau: Nguyen Van Linh ↵ thì giá tr ca bin chuoi1 hay
chuoi2 ch là Nguyen .
scanf(“%s%s”,chuoi1, chuoi2);
Nu ta nhp chui nh sau: Duong Van Hieu ↵ thì giá tr ca bin chuoi1 là
Duong và giá tr ca bin chuoi2 là Van.
Vì sao nh vy? C s đc t đu đn khi gp khong trng và gán giá tr cho
bin đu tiên, phn còn li sau khong trng là giá tr ca các bin tip theo.
Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 7
Ngôn Ng H Thng A C bn v ngôn ng C
gets(chuoi1);
Nu gõ trên bàn phím: Tran Huu Danh ↵ thì giá tr ca bin chuoi1 là Tran
Huu Danh
3.3. Lnh xut giá tr ca biu thc lên màn hình (hàm printf)
Hàm printf (nm trong th vin stdio.h) dùng đ xut giá tr ca các biu thc
lên màn hình.
Cú pháp: printf(“Chui đnh dng ”, Các biu thc);
Gii thích:
- Chui đnh dng: dùng đ qui đnh kiu d liu, cách biu din, đ rng, s
ch s
 thp phân... Mt s đnh dng khi đi vi s nguyên, s thc, ký t.

nh dng Ý ngha
%d Xut s nguyên
%[.s ch s thp phân] f Xut s thc có <s ch s thp phân> theo quy tc
làm tròn s.
%o Xut s nguyên h bát phân
%x Xut s nguyên h thp lc phân
%c Xut mt ký t

%s Xut chui ký t
%e hoc %E hoc %g
hoc %G
Xut s nguyên dng khoa hc (nhân 10 m x)
- Các biu thc: là các biu thc mà chúng ta cn xut giá tr ca nó lên màn
hình, mi biu thc phân cách nhau bi du phy (,).
Ví d:
include<stdio.h>
int main(){
int bien_nguyen=1234, i=65;
float bien_thuc=123.456703;
printf(“Gia tri nguyen cua bien nguyen =%d\n”,
bien_nguyen);
printf(“Gia tri thuc cua bien thuc =%f\n”,
bien_thuc);
printf(“Truoc khi lam tron=%f \n Sau khi lam
tron=%.2f”,bien_thuc, bien_thuc);
return 0;
}
Kt qu in ra màn hình
nh sau:
Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 8
Ngôn Ng H Thng A C bn v ngôn ng C
Nu ta thêm vào dòng sau trong chng trình:
printf(“\n Ky tu co ma ASCII %d la %c”,i,i);
Kt qu ta nhn đc thêm:

printf(“ So nguyen la %d \n So thuc la %f”, i,
(float)i );


printf(“\n So thuc la %f \n So nguyen la %d”,
bien_thuc, int
)bien_thuc);

printf(“\n Viet binh thuong = %f \n Viet kieu khoa
hoc=%e”, bien_thuc, bien_thuc);
Kt qu in ra màn hình:


Lu ý: i vi các ký t điu khin, ta không th s dng cách vit thông thng đ
hin th chúng.
Ký t điu khin là các ký t dùng đ điu khin các thao tác xut, nhp d
liu.
Mt s ký t điu khin đc mô t trong bng:

Ký t điu
khin
Giá tr thp
lc phân
Ký t đc
hin th
Ý ngha
\a 0x07 BEL Phát ra ting chuông
\b 0x08 BS Di chuyn con tr sang trái 1 ký t
và xóa ký t bên trái (backspace)
\f 0x0C FF Sang trang
\n 0x0A LF Xung dòng
\r 0x0D CR Tr v đu dòng
\t 0x09 HT Tab theo ct (ging gõ phím Tab)
\\ 0x5C \ Du \

\’ 0x2C ‘ Du nháy đn (‘)
\” 0x22 “ Du nháy kép (“)
\? 0x3F ? u chm hi (?)
\ddd ddd Ký t có mã ACSII trong h bát phân là s ddd
\xHHH oxHHH Ký t có mã ACSII trong h thp lc phân là HHH
Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 9
Ngôn Ng H Thng A C bn v ngôn ng C
Ví d:
#include <stdio.h>
#include <conio.h>
int main()
{ clrscr();
printf("\n Tieng Beep \a");
printf("\n Doi con tro sang trai 1 ky tu\b");
printf("\n Dau Tab \tva dau backslash \\");
printf("\n Dau nhay don \' va dau nhay kep \"");
printf("\n Dau cham hoi \?");
printf("\n Ky tu co ma bat phan 101 la \101");
printf("\n Ky tu co ma Hexa 41 la \x041");
printf("\n Dong hien tai, xin go enter");
getch();
printf("\rVe dau dong");
getch();
return 0; }
Kt qu trc khi gõ phím Enter:



Kt qu sau khi gõ phím Enter:



4. BÀI TP
4.1. Mc đích yêu cu
Làm quen và nm vng các lnh đn gin (printf, scanf), các kiu d liu chun
(int, long, char, float...), các phép toán và các hàm chun ca ngôn ng lp trình C.
Thc hin vit các chng trình hoàn chnh s dng các lnh đn gin và các kiu d
liu chun đó.
4.2. Ni dung
1. Vit chng trình in lên màn hình mt thip mi d sinh nht có dng:
*******************************************
THIEP MOI
Thân mi bn : Nguy
n Mnh Hùng
Ti d l sinh nht ca mình
Vào lúc 19h ngày 12/10/2005
Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 10
Ngôn Ng H Thng A C bn v ngôn ng C
Ti 05/42 Trn Phú - Cn Th
Rt mong đc đón tip !
H Thu Hng
*******************************************
2. Vit chng trình nhp vào bán kính r ca mt hình tròn. Tính chu vi và din tích
ca hình tròn theo công thc :
Chu vi CV = 2*Pi*r
Din tích S = Pi*r*r
In các kt qu lên màn hình
3. Vit chng trình nhp vào đ dài 3 cnh a, b, c ca mt tam giác. Tính chu vi và
din tích ca tam giác theo công thc:
Chu vi CV = a+b+c
Din tích S = sqrt(p*(p-a)*(p-b)*(p-c))

Trong đó: p=CV/2
In các kt qu lên màn hình
4. Vit chng trình tính log
a
x vi a, x là các s thc nhp vào t bàn phím, và x>0,
a>0, a != 1.( dùng log
a
x=lnx/lna)
5. Vit chng trình nhp vào ta đ ca hai đim (x1, y1) và (x2, y2)
a) Tính h s góc ca đng thng đi qua hai đim đó theo công thc:
H s góc = (y2 - y1) /(x2 - x1)
b) Tính khong cách gia hai đim theo công thc:
Khong cách =
()()
2
12
2
12
xxyy −+−

6. Vit chng trình nhp vào mt ký t:
a) In ra mã Ascii ca ký t đó.
b) In ra ký t k tip ca nó.
7. Vit chng trình nhp vào các giá tr đin tr R1, R2, R3 ca mt mch đin :
Tính tng tr theo công thc:
321
1111
RRRR
++=


8. Vit chng trình nhp vào đim ba môn Toán, Lý, Hóa ca mt hc sinh. In ra
đim trung bình ca hc sinh đó vi hai s l thp phân.
9. Vit chng trình nhp vào ngày, tháng, nm. In ra ngày tháng nm theo dng
dd/mm/yy. (dd: ngày, mm: tháng, yy : nm. Ví d: 20/11/99 )
10. Vit chng trình đo ngc mt s nguyên dng có đúng 3 ch s.


Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 11

Chng 2
CÁC LNH CÓ CU TRÚC

Hc xong chng này, sinh viên s nm đc các vn đ sau:
• Khi lnh trong C.
• Cu trúc r nhánh.
• Cu trúc la chn.
• Cu trúc vòng lp.
• Các câu lnh “đc bit”.

I. KHI LNH
Mt dãy các khai báo cùng vi các câu lnh nm trong cp du ngoc móc { }
đc gi là mt khi lnh.
Ví d 1:
{
char ten[30];
printf(“\n Nhap vao ten cua ban:”);
scanf(“%s”, ten);
printf(“\n Chao Ban %s”,ten);
}


Ví d 2:
#include <stdio.h>
#include<conio.h>
int main ()
{ /*đây là đu khi*/
char ten[50];
printf("Xin cho biet ten cua ban !");
scanf("%s",ten);
getch();
return 0;
} /*đây là cui khi*/

Mt khi lnh có th cha bên trong nó nhiu khi lnh khác gi là khi lnh
lng nhau. S lng nhau ca các khi lnh là không hn ch.
Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 12
Ngôn Ng H Thng A Các lnh có cu trúc trong C
Minh ha:
{
… lnh;
{
… lnh;
{
… lnh;
}
… lnh;
}
… lnh;
}

Lu ý v phm vi tác đng ca bin trong khi lnh lng nhau:

- Trong các khi lnh khác nhau hay các khi lnh lng nhau có th khai báo
các bin cùng tên.
Ví d 1:
{
… lnh;
{
int a,b; /*bin a, b trong khi lnh th nht*/
… lnh;
}
…lnh;
{
int a,b; /*bin a,b trong khi lnh th hai*/
… lnh;
}
}
Ví d 2:

{
int a, b; /*bin a,b trong khi lnh “bên ngoài”*/
… lnh;
{
int a,b; /*bin a,b bên trong khi lnh con*/
}
}
- Nu mt bin đc khai báo bên ngoài khi lnh và không trùng tên vi bin
bên trong khi lnh thì nó cng đc s dng bên trong khi lnh.
Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 13
Ngôn Ng H Thng A Các lnh có cu trúc trong C
- Mt khi lnh con có th s dng các bin bên ngoài, các lnh bên ngoài
không th s dng các bin bên trong khi lnh con.

Ví d:
{
int a, b, c;
…lnh;
{
int c, d;
…lnh;
}
}

2. CU TRÚC R NHÁNH
Cu trúc r nhánh là mt cu trúc đc dùng rt ph bin trong các ngôn ng
lp trình nói chung. Trong C, có hai dng: dng không đy đ và dng đy đ.
2.1. Dng không đy đ
Biu thc
iu Kin
CÔNG VIC

S
Cú pháp:
if (<Biu thc điu kin>)
<Công vic>

Gii thích:
<Công vic> đc th hin bng 1 câu lnh hay 1
khi lnh.
Kim tra Biu thc điu kin tr
c.
Nu điu kin đúng (!= 0) thì thc hin câu lnh
hoc khi lnh lin sau điu kin.

Nu điu kin sai thì b qua lnh hoc khi lnh
lin sau điu kin (nhng lnh và khi lnh sau
đó vn đc thc hin bình thng vì nó không
ph thuc vào điu kin sau if).
Hình A2.1: Lu đ r nhánh

Ví d 1: Yêu cu ngi th
c hin chng trình nhp vào mt s thc a. In ra màn hình
kt qu nghch đo ca a khi a

0.
#include <stdio.h>
#include <conio.h>
int main ()
{
float a;
Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 14
Ngôn Ng H Thng A Các lnh có cu trúc trong C
printf("Nhap a = "); scanf("%f",&a);
if (a !=0 )
printf("Nghich dao cua %f la %f",a,1/a);
getch();
return 0;
}

Gii thích:
- Nu chúng ta nhp vào a

0 thì câu lnh printf("Nghich dao cua
%f la %f",a,1/a) đc thc hin, ngc li câu lnh này không đc

thc hin.
- Lnh getch() luôn luôn đc thc hin vì nó không phi là “lnh lin sau”
điu kin if.

Ví d 2: Yêu cu ngi chy chng trình nhp vào giá tr ca 2 s a và b, nu a ln
hn b thì in ra thông báo “Gia tr ca a ln hn giá tr ca b”, sau đó hin th
giá tr c th ca 2 s
lên màn hình.
#include <stdio.h>
#include<conio.h>
int main () {
int a,b;
printf("Nhap vao gia tri cua 2 so a, b!");
scanf("%d%d",&a,&b);
if (a>b) {
printf("\n Gia tri cua a > b");
printf("\n a=%d, b=%d",a,b);
}
getch();
return 0;
}

Gii thích:
Nu chúng ta nhp vào giá tr ca a ln hn giá tr ca b thì khi lnh:
{
printf("\n Gia tri cua a > b");
printf("\n a=%d, b=%d",a,b);
}

s đc thc hin, ngc li khi lnh này không đc thc hin.

Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 15
Ngôn Ng H Thng A Các lnh có cu trúc trong C
2.2. Dng đy đ
Cú pháp:
if (<Biu thc điu kin>)
<Công vic 1>
else
<Công vic 2>
Lu đ cú pháp:

Gii thích:
Công vic 1, công vic 2 đc th hin là 1
câu lnh hay 1 khi lnh.
u tiên Biu thc điu kin đc kim tra
trc.
Nu điu kin đúng thì thc hin công vic 1.
Biu thc
iu Kin
CÔNG VIC 1

CÔNG VIC 2
Hình A2.2: Lu đ r nhánh
S
Nu đ
iu kin sai thì thc hin công vic 2.
Các lnh phía sau công vic 2 không ph thuc vào điu kin.
Ví d 1: Yêu cu ngi thc hin chng trình nhp vào mt s thc a. In ra màn hình
kt qu nghch đo ca a khi a

0, khi a =0 in ra thông báo “Khong the tim

duoc nghich dao cua a”
#include <stdio.h>
#include <conio.h>
int main ()
{
float a;
printf("Nhap a = "); scanf("%f",&a);
if (a !=0 )
printf("Nghich dao cua %f la %f",a,1/a);
else
printf(“Khong the tim nghich dao cua a”);
getch();
return 0;
}

Gii thích:
- Nu chúng ta nhp vào a

0 thì câu lnh printf("Nghich dao cua
%f la %f",a,1/a)đc thc hin, ngc li câu lnh printf(“Khong
the tim duoc nghich dao cua a”) đc thc hin.
- Lnh getch() luôn luôn đc thc hin.
Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 16
Ngôn Ng H Thng A Các lnh có cu trúc trong C
Ví d 2: Yêu cu ngi chy chng trình nhp vào giá tr ca 2 s a và b, nu a ln
hn b thì in ra thông báo “Gia tr ca a ln hn giá tr ca b, giá tr ca 2 s”,
ngc li thì in ra màn hình câu thông báo “Giá tr ca a nh hn hoc bng
giá tr ca b, giá tr ca 2 s”.
#include <stdio.h>
#include<conio.h>

int main ()
{
int a, b;
printf("Nhap vao gia tri cua 2 so a va b !");
scanf("%d%d",&a,&b);
if (a>b) {
printf("\n a lon hon b”);
printf("\n a=%d b=%d ",a,b);
}
else {
printf("\n a nho hon hoac bang b");
printf("\n a=%d b=%d",a,b);
}
printf("\n Thuc hien xong lenh if");
getch();
return 0;
}

Gii thích:
- Nu chúng ta nhp vào 40 30 ↵ thì kt qu hin ra trên màn hình là
a lon hon b
a=40 b=30
Thuc hien xong lenh if
- Còn nu chúng ta nhp 40 50 ↵ thì kt qu hin ra trên màn hình là
a nho hon hoac bang b
a=40 b=50
Thuc hien xong lenh if
Ví d 3: Yêu cu ngi thc hin chng trình nhp vào mt s nguyên dng là
tháng trong nm và in ra s ngày ca tháng đó.
- Tháng có 31 ngày: 1, 3, 5, 7, 8, 10, 12

- Tháng có 30 ngày: 4, 6, 9, 10
- Tháng có 28 hoc 29 ngày : 2
Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 17
Ngôn Ng H Thng A Các lnh có cu trúc trong C
#include <stdio.h>
#include<conio.h>
int main ()
{
int thg;
printf("Nhap vao thang trong nam !");
scanf("%d",&thg);
if
(thg==1||thg==3||thg==5||thg==7||thg==8||thg==10||thg==12)
printf("\n Thang %d co 31 ngay ",thg);
else if (thg==4||thg==6||thg==9||thg==11)
printf("\n Thang %d co 30 ngay",thg);
else if (thg==2)
printf("\n Thang %d co 28 hoac 29
ngay",thg);
else printf("Khong co thang %d",thg);
printf("\n Thuc hien xong lenh if");
getch();
return 0;
}
Gii thích:
- Nu chúng ta nhp vào mt trong các s 1, 3, 5, 7, 8, 10, 12 thì kt qu xut
hin trên màn hình s là
Thang <s> co 31 ngay
Thuc hien xong lenh if
- Nu chúng ta nhp vào mt trong các s 4, 6, 9, 11 thì kt qu xut hin

trên màn hình s là
Thang <s> co 30 ngay
Thuc hien xong lenh if
- Nu chúng ta nhp vào s 2 thì kt qu xut hin trên màn hình s là
Thang 2 co 28 hoac 29 ngay
Thuc hien xong lenh if
- Nu chúng ta nhp vào s nh hn 0 hoc l
n hn 12 thì kt qu xut hin
trên màn hình s là
Khong co thang <s>
Thuc hien xong lenh if
Trong đó <s> là con s mà chúng ta đã nhp vào.
Ths. Nguyn Ha Duy Khang, Ks. Trn Hu Danh 18

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×