You are on page 1of 168

N

Biên

www.hutech.edu.vn
*1.2020.CMP1016*
này, xin -mai :
tailieuhoctap@hutech.edu.vn
I

M CL C
M C L C ...................................................................................................................I
NG D N .......................................................................................................... IV
BÀI 1: KI N TH NV MÁY TÍNH .................................................................... 1
............................................................................................ 1
1.1.1 Máy tính là gì? ................................................................................................ 1
1.1.2 ..................................................................................... 2
1.1.3 .......................................................................................... 2
1.1.4 ................................................................ 3
........................................... 3
1.2.1 .......................................................................... 3
1.2.2 ..................................................................................... 5
1.3 ......................................................................................... 5
1.3.1 y thông minh ......................................................... 5
1.3.2 ...................................................................................................... 6
1.3.3 .................................................................................................... 15
1.3.4 ....................................................................................... 19
1.3.5 ...................................................................... 21
CÂU H I ÔN T P .................................................................................................... 25
N L P TRÌNH MÁY TÍNH ....................................................................... 27
.................................................................. 27
..................................................................................................... 28
2.2.1 t ...................................................................................... 28
2.2.2 ........................................................................... 29
2.2.3 ......................................................................... 30
2.2.4 ...................................................... 31
.................................................................................................. 37
2.4 anguage) ........................................... 38
2.4.1 ............................................................................. 38
2.4.2 ............................................................ 39
2.4.3 ............................................................ 43
CÂU H I ÔN T P .................................................................................................... 45
BÀI 3: GI I THI U V NGÔN NG L P TRÌNH C ........................................................ 49
............................................................. 49
3.1.1 .......................................................................... 49
3.1.2 .......................................................................................... 50
3.1.3 ..................................................................................... 50
-C ........................................................................................ 52
II
3.3 .............................................................. 53
CÂU H I ÔN T P .................................................................................................... 56
BÀI T P NÂNG CAO................................................................................................ 59
BÀI 4: KI U D LI U VÀ BI U TH C TRONG C .......................................................... 60
................................................................ 60
4.1.1 .....................................................................60
4.1.2 .......................................................................................61
4.1.3 ...................................................................................62
4.1.4 ............................................................................................62
4.1.5 .............................................................................................................65
.................................................................................. 67
4.2.1 ...................................................................................67
4.2.2 .....................................................................................68
4. ...................................... 69
4.3.1 ........................................................................................69
4.3.2 .....................................................................................69
4.3.3 Phép gán (l .......................................................................................70
4.3.4 .....................................................................72
4.3.5 ....................................................................................74
4.3.6 ......................................................................................75
4.3.7 .........................................................................................76
4.3.8 Các phép toán thao tác trên bit ........................................................................77
4.3.9 ....................................................................................78
4.3.10 .....................................................................................79
........................................................................................ 80
4.4.1 ...........................................80
4.4.2 ...................................82
.................................................................... 85
4.5.1 ....................................................................................85
4.5.2 ............................................................................86
4.5.3 .......................................................................87
4.5.4 C ...................................88
4.5.5 ...............................................................89
4.5.6 .......................................................................90
CÂU H I ÔN T P .................................................................................................... 91
BÀI 5: CÁC TOÁN T U KHI N ............................................................................. 96
.............................................................. 96
5.1.1 .........................................................................................96
5.1.2 .......................................................................................................96
5.2 ...................................................................... 98
5.2.1 ..........................................................................................98
III
5.2.2 ............................................................................... 102
5.3 C ................................................................................................ 104
5.3.1 ............................................................................................ 104
5.3.2 ........................................................................................ 107
5.3.3 Vòng ...................................................................................... 109
5.3.4 .................................................................................... 110
............................................................................... 111
5.4.1 .................................................................................................. 111
5.4.2 ..............................................................................................112
CÂU H I ÔN T P .................................................................................................. 113
.................................................................................... 114
.............................................................................. 114
............................................................................................... 115
......................................................................................... 116
6.3.1 ....................................................................................... 116
6.3.2 ............................................................................................... 117
6.3.3 ...................................................................... 118
6.4 hàm................................................................................ 119
...................................... 124
6.5.1 ............................................................................................... 124
6.5.2 ................................................................................................. 124
CÂU H I ÔN T P .................................................................................................. 125
BÀI 7: M NG- CHU I KÝ T .................................................................................... 126
7. ..................................................................................................... 126
.......................................................................................... 127
7.2.1 Khai báo ..................................................................................................... 127
7.2.2 ............................................................... 128
7.2.3 .................................................................. 129
7.2.4 ................................................................... 130
7.2.5 .......................................................... 130
................................................ 132
7.3.1 ...................................................................................... 132
7.3.2 ......................................................................... 133
7.3.3 ...................................................... 134
CÂU H I ÔN T P .................................................................................................. 142
BÀI 8: KI U D LI U CÓ C U TRÚC ......................................................................... 147
..................................................................................................... 147
.................................................................... 148
.............................................. 150
................................ 150
8.4.1 ................................................................................................ 150
IV
8.4.2 ................................................................................................. 151
............................................................................................ 151
CÂU H I ÔN T P .................................................................................................. 154
TÀI LI U THAM KH O .......................................................................................... 160

NG D N
MÔ T MÔN H C
Môn ngôn ng l p trình C cung c p cho sinh viên nh ng ki n th c n v máy
tính, v l p trình thông qua ngôn ng l p trình C. Môn h c này là n n t ti p thu
h u h t các môn h c khác trong ch o. M t khác, n m v ng môn này
phát tri gi i các bài toán và các ng d ng
.

H c xong môn này, sinh viên ph i n m c các v sau:

- quan

- u trong C.

- h

N I DUNG MÔN H C
- Bài 1 KI N TH N V M Y T NH

- Bài 2 N M Y T NH
V
- Bài 3

- Bài 4 KI U D LI U V BI U TH C TRONG C

- Bài 5 C C TO N T U KHI N

- Bài 6 C NH CON (HÀM)

- Bài 7 M NG

YÊU C U MÔN H C
t v logic và ki n th c toán h n.

CÁCH TI P NH N N I DUNG MÔN H C


Ngôn ng l p trình C là môn h u tiên giúp sinh viên làm quen v i khái ni m
máy tính, l p trình trên máy tính, giúp sinh viên có khái ni m b nv
cách ti p c n và gi i quy t các bài toán tin h c, giúp sinh viên có kh p c n
v i l p trình, và là ti ti p c n v i các h c ph n quan
tr ng còn l i c a ngành Công ngh Thông tin. Vì v y, yêu c i h c ph i d h c
các bu i lên l p, làm bài t nhà, nghiên c u tài li n
l p và g ch chân nh ng v không hi c tài li nl i.

C
h c t t môn này, i h c c n ôn t p các bài h c, tr l i các câu h i và
bài t p c bài m n bài
h c.

i v i m i bài h ih c m c tiêu bài h c n i dung bài


h c. K t thúc m i ý c a bài h c tr l i câu h i ôn t p và k t thúc toàn b
bài h c làm các bài t p.

m 2 ph n

1. m quá trình (chuyên c n + bài t p)

2. m cu i k (bài thi trên gi y - t lu n).


BÀI 1: 1

BÀI 1: KI N TH NV
MÁY TÍNH

Sau khi h c xong bài này, sinh viên có th n cv n:

- máy tính

1.1 M T S KHÁI NI M
1.1.1 Máy tính là gì?

c ngày nay, máy


tí ng rãi trong nhi

báo

h, theo
Hình 1.1: Máy tính

n
tr u
2 BÀI 1:

1.1.2 Khái ni m v thông tin


-
ac

- Thông tin ý,

- (information system) là
chúng nên thông tin có ý )

N
Processing (Out put)
(Input)

1.1.3
BIT (BInary digiT)
ó 1

d ot

Byte B 8 bits
KiloByte KB 210 B
MegaByte MB 210 KB
GigaByte GB 210 MB
TetraByte TB 210 GB
Petabyte PB 210 TB
Exabyte EB 210 PB
Zettabyte ZB 210 EB
BÀI 1: 3

Yottabyte YB 210 ZB
Brontobyte BB 210 YB
Geopbyte GeB 210 BB

1.1.4 X lý thông tin b nt

thông tin:

- X l c

1.2 BI U DI N THÔNG TIN TRONG MÁY TÍNH


NT
1.2.1 Bi u di n s trong các h m
- p các u và q , ,

-
là b.

- (b là guyên, b ) mang

0 là (b-1).

bn.

tro ,

là: an×bn + an-1×b n-1 + + a1×b1 + a0×b0 + a-1×b-1 + a-2×b -2 + a-m×b-m.

- Trong ngành toán -


hân.
4 BÀI 1: ÍNH

1.2.1.1 H m th p phân

1.2.1.2 H m nh phân

i 2
BInary digiT

1.2.1.3 H m bát phân

6, 7.

1.2.1.4 H m th p l c phân

16 ký

A, B, C, D, E, F 15 tron
phân.

: Qui

0 0000 00 0
1 0001 01 1
2 0010 02 2
3 0011 03 3
4 0100 04 4
5 0101 05 5
6 0110 06 6
7 0111 07 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
BÀI 1: 5

12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F

1.2.2 Cách chuy s

1.2.2.1 it b 10

b
b ó.

Ví 1.1: 1(2)

1101(2) = 1×23 + 1×22 + 0×21 + 1×20 = 13(10)

1.2.2.2 it b

b (b
cho b
b

6(10) =110(2)

1.3 H TH NG MÁY TÍNH


1.3.1 Máy vi tính và thi t b c m tay thông minh

máy vi bàn và máy tính xách tay và

), siêu máy tính (supercomputers), và máy tính


nhúng (embedded computers).

hân lo c
6 BÀI 1:

phù ong tú

xách tay (Notebook computers), máy

Hình 1.3: C h (microcomputers)

và .

1.3.2 Ph n c ng

1.3.2.1 Ph n c ng máy tính

- - Central Processing Unit).

- ut).
BÀI 1: 7

CPU ( Central Processing Unit)

(Input) i
CU (Control Unit) ALU
(Arithmetic Logic Unit) (Output)

Các thanh ghi (Registers)

+ RAM)

ng máy tính

1.3.2.2 Kh i h th ng máy tính (Computer System Unit)

các thành ph ính c Mainboard, CPU, RAM, các thành


p
hình, c
p (in (storage).
Khi ta úng

n bo
mà h khác trong máy tính

Computer case Mainboard


Hình 1.5: Computer case và Mainboard
8 BÀI 1:

1. tâm (CPU)

tâm
phép tính. CPU có 3 b

2. (CU: Control Unit):

L ra các tín
áy

3. (ALU: Arithmetic-Logic Unit):

B a, ...), các
phép tính logic (AND, OR, NOT, XOR) và các phép tính q
nhau,...)

4. Các thanh ghi (Registers):

tin
trong máy tính. Ngoài t

c máy Pentium à 2.0 GHz, 2.2 GHz,


lý lõi kép (dual-

t chip duy n ng

5.

là th trình má

a. m ROM và RAM

ROM (Read Only Memory) là


-BIOS: ROM-Basic
BÀI 1: 9
Input/ Output System). T

RAM (Random Access Memory) là


ình trong quá trình thao tác và tính toán. RAM có

b. ài:

Là thi n, thông khi không


d

các lo

- ng (Ha

-
âm thanh v
trong các g ng (multime

- Card),
US n 8GB và

- - RPM

quay i phút có RPM càng cao,


i 5400

00 RPM.

- per second bit , bits


10 BÀI 1:

h l obit trên giây

Compact disk Compact Flash Card USB Flash Drive


Hìn

1.3.2.3 Các thi t b xu t/ nh p

1.

- Bàn phím
a 104 phím có các tác
ác nhau (hình 1.7).

- Nhóm phím ánh máy:


(~, !, @, #, $, %, ^, &, ?, ...).

- và các
hím PgUp (lên trang màn hình), PgDn
g trang màn hình), Insert

-
Scr

- phím t
(

- ng không chú ý và v
,
BÀI 1: 11

Hình 1.7: Mô hình bàn phím


- (Mouse): là t
n
trên màn
hì g a sáng

trên bàn phím.

i có 2
là và uang
c
wheel) và (3) Nút nh
thêm nh í khác nhau trên thâ
12 BÀI 1:

- Máy quét hình


c quét thành các tín
o thàn h (image file).

-
video và
t

- Webcam

n
và máy tính xách tay c

y (wireless). (hình 1.9)

Máy quét
Webcam
(Scanner) (Joystick)

2.

sau: (hình 1.10)

- Màn hình
Thông tin g pháp

Màn g là màn hình

- Máy in
BÀI 1: 13
in laser tr ho u.

- g thay
cho màn hình trong minar, báo cáo,

Màn hình Máy in (Printer)

Hình 1.10:
3.

t

Modem port
USB ports FireWire port
or RJ-11 port

DVI port
Monitor Speaker Ethernet
Parallel port port S-video port Microphone port
port

trên máy tính xách tay


- rial p ong song (parallel port)

t c công
14 BÀI 1:

nhanh

C song song

Hình 1.12

USB (universal serial bus) y có t gia thi


khác

-Speed

iây).

t l i giây),
2.0. (hình 1.13)

Hình 1.13: C à

i là nhanh chóng. FireWire


400 có

óng, c y
BÀI 1: 15

Hình 1.14: C à FireWire

g: ( Ethernet và modem,

ack RJ- t chu


. Các

Interne

nhiên, Gigabit E 1.000 Mbps

Hình 1.14: C à k n m

1.3.3 Ph n m m

1.3.3.1 Khái ni m ph n m m

máy t
máy
húng
16 BÀI 1:

t
trình trên màn

1.3.3.2 Ph n m m h th ng (Operating System Software)

ác ng d n. Nó
ình

giao ti Ph
trìn hành (operating system) và các c
(utility programs)

1.

các máy tí bàn ho máy t


thông mi

bao g và các t

ành
chính: Microsoft Windows, Mac OS, and Linux.

- ft Windows
chí
ft Windows,
3.0, Windows 95, Windows 98, Windows ME và Windows Vista, Windows 7,
Windows 8, Windows 10.

- S
, vì
. Tron

Mac OS X Tiger, MacOS Sierra.


BÀI 1: 17
- hành UNIX,

Ubuntu Linux, Linux Mint,


Arch Linux, Deepin, Fedora, Debian, openSUSE.

2.

ính, vì máy tính


khi k Tuy nhiên, các

ng trì ao

ng các
ích

Aladdin Easy U không mon . Các


o trì n

1.3.3.3 Ph n m m ng d ng (Application Software)

1. Ph

các tài
khác crosoft
chóng

khác. Microsoft Word, Lotus Pro, và Corel WordPerfect là


18 BÀI 1:

2.

th n các tính toán và các tác v

t quan t
n

osoft Excel, Lotus 1-2-3, và Corel


Quattro lý
ce Calc, OpenOffice Calc.

3.

n d

các báo cáo


có ý n
Approach, và Corel Paradox.

4. P

à slide
show, nó có trên
át cho

icrosoft PowerPoint, Lotus Freelance


Graph
c
OpenOffice Impress.

5. Ph

- à phát
BÀI 1: 19

mi hí.

- các h

- g ký
dõi ng g
t

i gian d

t các c bán

v nó vào a mình.

6. mã

trình ch h
Tuy nhiên, v

n hìn Linux.

1.3.4 Hi u n y tính
Nhìn chung,

máy tính bao g tâ

1.3.4.1 T c ab x lý trung tâm (CPU):

T
, v.v. i các CP
20 BÀI 1:

Intel Co CPU Intel Pentium 4 có t


PU còn -

g cache L2
(shared 128 KB, L2 là 256-512KB) giúp cho t

1.3.4.2 ng và t c b nh RAM:

D trong
l

du
chu

tro máy là PC100 (100MHz).


-
ng
(266MHz).

1.3.4.3 T a c ng (disk speed):

trong cách máy các g ngày nay q


rpm, máy tính xách tay

n
tính. khôn
BÀI 1: 21
1.3.4.4 T h a:

N i 3-D ho d
an máy tính. Card

khác.

1.3.5 M ng máy tính và truy n thông

1.3.5.1 Khái ni m m ng máy tính

M g máy máy

-ROM. Khi các Internet, -

a.

u cách. Có ha chính: M
(peer to peer - - - server).

p
T trên ao t
nút khác

hàng là là khá

Mang Máy khách g có ha

i nguyên là máy tính


trong i nguyên và yêu
22 BÀI 1:

Hình 1.16: M Server

- Các máy khách (client) là các má


e-ma
k

tài ng ó
nh

này hu server

1.3.5.2 M ng c c b (LAN) và m ng di n r ng (WAN)

local area network - LAN) khu


v

hòng l
cáp, switch, router và các thành p

(wide area network - WAN).


BÀI 1: 23

(Wide Area Network ng (WAN) là

n i nhánh

Hình 1

Internet
n t

n
24 BÀI 1:

. Inte hàn
s

ntranet anh ng
ch
tranet
sername ( n) và Password (m
u intranet

thông tin cho


g mà không rõ n
i nguyên máy

theo nhóm và h

g extranet: ranet l
m soát
anet là
ng int các doanh
BÀI 1: 25
CÂU H I ÔN T P
M u

- L trong máy
tính.

- t n,
phân.

- áy vi tính.

Câu 1: Hãy cho bi t t i sao em ch n ngành CNTT ?

Câu 2: Trình ng tin và quá trìn

Câu 3: ành toán -

Câu 4:

Câu 5: top computers),


máy tính xách tay (notebook comp omputers)

Câu 6:

Câu 7:

Câu 8: Hãy trì

Câu 9: Hãy so sánh rt) g

Câu 10:

Câu 11:

Câu 12: er to peer - P2P) và - máy


client - server)

Câu 13: P ng
26 BÀI 1:

Câu 14:

a. Bit b. Byte c. Kilobyte d.

Câu 15: n
th n:

a. 12 b. 13 c. 10 d. 14

Câu 16: t thông tin là gì?

a.

b.

c.

d.

Câu 17:

a. 733 MHz b. 286 MHz c. 2 GHz d. 2 GB

Câu 18: Nh

a. Bàn phím (keyboard) c.

b. Loa (speaker) d.

Câu 19: i t tc các s t n 20 t h th p phân ra h nh phân, bát phân


và th p l c phân.

Câu 20: chuy i s 101010 t h nh phân ra các h còn l i.


BÀI 2: 27

BÀI 2: C B N L P TRÌNH MÁY TÍNH

Sau khi h c xong bài này, sinh viên có th n cv n:

- Khái

- bi .

2.1 T BÀ
Gi s c n vi t gi c 2 có d ng ax2+bx + c = 0,
hay vi t m t c m tra xem m t s t nhiên có ph i là s nguyên
t hay không? Công vi u tiên là chúng ta ph i hi u và bi t cách gi i bài toán b ng
l i gi ng c a gi c bài toán trên b ng máy tính
(l p trình cho máy tính gi i) thì chúng ta c n ph i th c hi n qua các :

1. Mô t các c gi i bài toán.

2. V x lý d c.

3. D x vi lý b ng ngôn ng gi (ngôn ng bình


ng c a chúng ta).

4. Ch n ngôn ng l p trình và chuy nh t ngôn ng gi sang ngôn ng


l p trình t o thành m t ch nh.

5. Th c hi p vào các tham s , nh n k t qu .


28 BÀI 2:

Trong nhi ng h p, t bài toán th c t chúng ta ph i xây d ng mô hình toán


h c r i m c gi i. V này s c trình bày chi ti t
trong môn C u Trúc D Li u và gi i thu t.

Bài toán

Thu t gi i

Ngôn ng l p trình
Máy tính

2.2 GI I THU T
2.2.1 Khái ni m gi i thu t
Gi i thu t là m t h th ng ch t ch và rõ ràng các quy t c nh nh m t dãy
các thao tác trên nh ng d li u vào sao cho sau m t s h u h n b c th c hi n các
t c k t qu c a bài toán.

Ví d 1: Gi s có hai bình A và ng hai lo i ch t l ng khác nhau, ch ng h n


c m m. Gi i thu i (swap) ch t l ng
ng trong hai

Yêu c u ph i có thêm m t bình th ba g i là bình C.

- ình C.

Ví d 2: M t trong nh ng gi i thu c chung l n nh t c a hai s a và b là:

- ào h

-
4,
BÀI 2: 29
- y

- -

2.2.2 a gi i thu t

Khác v i các bài toán thu n túy toán h c ch c nh rõ gi thi t và k t lu n


ch không c nh yêu c u v l i gi i.

i v i nh ng bài toán tin h c ng d ng trong th c t chúng ta ch c n


tìm l i gi i t t t i m m chí t i m c ch p nh c n u l i gi i t
h i th i gian và chi phí.

Ví d 3: t các hàm s ph c t p trên máy tính. N u tính b ng cách khai


tri n chu i vô h chính xác cao ng t ch t nhi u so v i
px

Vi c x u bài toán là r t quan tr ng b i nó ng t i cách


th c gi i quy t và ch ng c a l i gi i. M t bài toán th c t ng cho b i nh ng
thông h và hình th c, ta ph i phát bi u l i m t cách chính xác và ch t
ch hi

Ví d 4: L p trình t ng cho bài toán gi t máy.

Vi a qu n áo c n gi t thì khá .

Trên th c t , ta nên xét m t vài ng h p c th thô hi c bài


h c c n thi t ph i ti n hành.

Khái ni m gi i thu t hay thu t gi i mà nhi u khi còn c g i là thu t toán dùng
ch h th gi i quy t v .

M t thu t gi i t t là thu t gi i ph i b o m:

1. Tính k t thúc: Gi i thu t ph i d ng sau m t s h u h c.

2. nh: Các thao tác máy tính ph i th c hi c và các máy tính khác
nhau th c hi n cùng m c c a cùng m t gi i thu t ph i cho cùng m t k t qu .

3. Tính ph d ng: Gi i thu t ph i "vét' h ng h p và áp d ng cho m t lo t


bài toán cùng lo i.
30 BÀI 2:

4. Tính hi u qu : M t gi i thu là t t n t hai tiêu chu n sau:

- .

Gi i thu t tìm UCLN nêu t t tính k t thúc b i vì qua m i l n th c hi c4


thì UCLN s gi cho nê ng h p x u nh t thì UCLN=1, gi i
thu t ph i d ng. Các tha c, máy tính u có th th c hi n
c nên nó có nh. Gi i thu t tính ph d c dùng
tìm UCLN cho hai s b b t k . Tuy nhiên tính hi u qu c a gi i
thu t có th th là th i gian ch y máy có th còn t n nhi u ts
gi i thu t khác mà chúng ta s có d p tr l i trong ph n l p trình C.

2.2.3 Ngôn ng bi u di n gi i thu t


bi u di n gi i thu t, c n ph i có m t t p h p các ký hi bi u di n,
m i ký hi u bi u di n cho m p h p các ký hi i t o
thành ngôn ng bi u di n gi i thu t.

1. Ngôn ng t nhiên (Natural language)

Là th ngôn ng d ng, chúng ta có th s d ng ngôn ng t


mô t gi i thu t gi d trên, s mô t không rõ
dàng trong ngôn ng d n n hi u sai gi i thu t.

Ví d 5: Ta có gi i thu t gi i ph c 1 ax + b = 0

-
a khác không thì làm

- N

- -b/a

2. Mã gi (pseudocode)

dùng m t ngôn ng gi l p ngôn ng l p trình g i là mã gi


(pseudocode) bi u di n gi i thu t cho m t bài toán
BÀI 2: H MÁY TÍNH 31
3. Ngôn ng - flow chart)

thu t toán là công c bi u di n thu i d ,


vi c mô t d li u nh p (input), d li u xu t (output) và lu ng x lý thông qua các
ký hi u hình h c.

M t d c chu n cho phép mô t cách x lý c t cách


tr c quan.

Các ký hi ng s d v

2.2.4 Các c u trúc suy lu n c a gi i thu t


Gi i thu t c thi t k theo ba c u trúc suy lu n sau

2.2.4.1 C u trúc Tu n t (Sequential)

Các công vi c th c hi n m t cách tu n t t trên xu ng, công vi c này n i


ti p công vi c kia.
32 BÀI 2:

Bài toán 1: Nh p vào 3 s nguyên a, b, c và xu t ra màn hình v i giá tr c a m i


s ên 1.

2.2.4.2 C u trúc l a ch n (Selection)

L a ch n m t công vi th c hi vào m u ki ts
d
BÀI 2: 33
C u trúc 1: N u u ki c hi n <công vi c>.

Sai

Bài toán 2: Nh p 1 s n, n u s , sau n th ra màn hình

Sai
34 BÀI 2:

C u trúc 2: N u ki c hi n <công vi cl u
ki n sai) thì th c hi n <công vi c 2>

Bài toán 3: Vi trình nh p vào 2 s th c, cho bi t 2 s u hay


khác d u
BÀI 2: 35
C u trúc 3: ng h p <i> th c hi n <công vi c i>

Bài toán 4: Vi ng trình gi i và bi n lu rình b c nh t ax+b=0

b 0

2.2.4.3 C u trúc l p (Repeating)

Th c hi n l p l i m t công vi c không ho c nhi u l vào m u ki n nào

- : là lo

- ng trì

trìn

Trong m t s ng h p dùng các c di n t


m t gi i thu t.
36 BÀI 2:

Bài toán 5: Nh p vào m t s nguyên n, xu t ra màn hình các s t n n.

i n

c 1: nh p s n

c 2: xu t ra màn hình các s t n n thì d ng.


BÀI 2: 37
2.3 KI U D LI U
- Trong và tính (Data type) hay
type là m h phân u cho trình
l
T , hay Boolean
(ví , hàm...)
có y giá t
l có trong máy tính.

- Có và k

, (primitive data type) là


rình là

Dung ng x là bit) vi
char 8 -
unsigned 8 255
signed char 8 -
int 16 -32,76
unsigned int 16
signed int 16
short int 16 - 27
unsigned short int 16 535
signed short int 16
long int 32 -2,147,483,648 2,147,483,647
signed long int 32 ng nt
unsigned long int 32
float 32
double 64
long double 128
38 BÀI 2: Y TÍNH

Ki u d li u ph c h p ct gi i quy t m t
bài toán, m t v n nà u d li b n không gi i quy c (chúng ta
s nghiên c u nó nh ng ph n sau).

2.4 NGÔN NG L P TRÌNH (PROGRAMMING LANGUAGE)


L
a the ng các quy t

c
riên ú pháp u trúc

ô pt.

2.4.1 Các lo i ngôn ng l p trình

- -level) - ow-level)
BÀI 2: 39
- p trình Khai báo (Declarative) - -

- (General-purpose) - -specific)

- bject-oriented) - Concurrent)

- Ngôn ng - -

Chú ý:
trình.

2.4.2 Danh sách ngôn ng l p trình máy tính

gôn ng rình khác n là

A-C D-K L-Q R-Z


ActionScript D LeLisp R
ALGOL DarkBASIC Lisp Racket
Ada Dart LiveScript Reia
AIML * Datalog LOGO RPG
Altair BASIC dBASE Lua Ruby
Assembly Dylan MACLISP Rust
AutoHotkey EuLisp Matlab Scala
Babel Elixir Metro Scheme
BASIC F MUMPS Scratch
Batch file F# Nim SGML
BCPL FORTRAN Objective-C Simula
BeanShell FoxPro OCaml Smalltalk
Brooks Franz Lisp Pascal SPL
C Go Perl SQL
C# GW Basic PHP Stanford LISP
C++ Haskell Pick Swift
CL HDML * PureBasic Tcl
Clojure HTML * Python Turbo Pascal
40 BÀI 2:

A-C D-K L-Q R-Z


COBOL InterLisp Prolog True BASIC
CoffeeScript ksh QBasic VHDL
Common Lisp Java Visual Basic
CPL JavaScript Visual FoxPro
CSS * JCL WML
Curl Julia WHTML
Curry Kotlin XLISP
XML
YAML
ZetaLisp

ý: anh sách trên không


là ngôn trình; chúng có th ngôn (markup), ngôn
(style sheet) là ngôn lý (database management),
i chúng là

ng n

c ngôn

2.4.2.1 Phát tri n ng d

Các và trình máy tính

trang web nà u

- C

- C#

- C++

- D
BÀI 2: 41
- Java

- Swift

- Tcl

- Visual Basic

2.4.2.2 Phát tri n Trí tu nhân t o

này liên quan Trí nhân các nhân


t có th tác tron
các

- AIML

- C

- C#

- C++

- Prolog

- Python

2.4.2.3 Phát tri d li u

Dành cho các nhà phát nghiên duy trì

- DBASE

- FoxPro

- MySQL

- SQL

- Visual FoxPro
42 BÀI 2:

2.4.2.4 Phát tri

Phát trò liên quan trò trên máy tính


trí khác

- C

- C#

- C++

- DarkBASIC

- Java

2.4.2.5 Phát tri n Driver máy tính

quan tâm phát driver giao cho


nên xem xét các ngô sau:

- Assembly

- C

2.4.2.6 Phát tri n website và Internet

c các liên qua

- HDML

- HTML

- Java

- JavaScript

- Perl

- PHP
BÀI 2: 43
- Python

- XML

2.4.2.7 Phát tri n Script

t cách l

gian
sau:

- AutoHotkey

- awk

- bash

- Batch file

- Perl

- Python

- Tcl

2.4.3 Ngôn ng l p trình nào ph bi n nh t?

t là vào GitHub -
10
cái tên hàng dành cho ngôn trình 2014
2018.
44 BÀI 2:

JavaScript, Java,
Python, PHP, C++, C#, TypeScript, Shell, C và Ruby.
BÀI 2: 45

CÂU H I ÔN T P
M u

Làm quen và n m v ng các cách mô t gi i thu t; t c m t bài toán


c th , sinh viên có th mô t th t chi ti gi i quy t v .

n nh:

Input (d li u nh p).

Output (d li u xu t).

Tìm thu t toán phù h p.

Bi t phân bi t m t s lo i ngôn ng l p trì ng ng d ng c a nó, t t ra


m c tiêu cho chính mình.

Câu 1: Hãy cho bi h v c l p trình nào mà em thích? k ho ch th c thi nó.

Câu 2: Hãy làm quen và li t kê các ch trên thanh toolbar c a Dev C/ Cfree

B ng ngôn ng t u , anh (ch ) hãy mô t gi i thu t cho các


bài toán sau:

Câu 3: Nh p vào m t s nguyên a, cho bi t a là s âm

ng d n:

So sánh a v i s 0 . N u a>0 thì a d n u a<0 thì a là s âm.


46 BÀI 2:

Câu 4: Gi i và bi n lu c nh t ax + b = 0.

ng d n:

- a, b
a, b.

- a = 0 và a 0.

a=0 - g trình có d ng 0x+b=0 chúng ta ph i xét ti p tr ng h p c a b

b=0 ???

b!=0 ????
BÀI 2: 47

Câu 5: Gi i và bi n lu c 2: ax2 + bx + c = 0.

ng d n:

- a, b, c a, b, c.

- Xét a = 0. g trìn bx + c=0 b, c

- Xét a 0. Tính delta, d = b*b-4*a*c d = 0, d < 0 và d > 0.

Câu 6: Tính t ng c a n s t u tiên S = 1+ 2 + 3 + +n

ng d n

- n

ví d n=5 ta ph i tính t ng c a các s 1+2+3+4+5

- S

T c là:
48 BÀI 2:

c ng 1 vào bi n S -> S =1

c ng 2 vào bi n S -> S = S +2

c ng 3 v tr vào bi n S -> S =S +3

Nh n xét : ta th y có s l p l i công vi c c ng d n các s 1,2,3...vào bi n S


t c chung S=S+i, i chính là các s ch y t n n. Gi i
thu t d ng khi i>n .

Câu 7: Tính t ng c a n s ch n t u tiê


BÀI 3: 49

BÀI 3: GI I THI U V NGÔN NG


L P TRÌNH C

3.1 KHÁI NI M V NGÔN NG L P TRÌNH


3.1.1 Khái ni m ngôn ng l p trình
Ngôn ng l p trình là m t ngôn ng vi
th chia ngôn ng l p trình thành các lo i sau: ngôn ng máy, h p ng và ngôn ng
c p cao.

Ngôn ng máy (machine language): Là các ch th i d ng nh phân, can thi p


tr c ti p vào trong các m n t c vi t b ng ngôn ng máy thì
có th c th c hi n ngay không c n qu c trung gian nào. Tuy nhi
trình vi t b ng ngôn ng máy d sai sót, c ng k c, khó hi u vì toàn
nh ng con s 0 và 1.

H p ng (assembly language): Bao g m tên các câu l nh và quy t c vi t các câu


l nh nh bao g m hai ph n: ph n mã l nh (vi t t a ti ng Anh) ch
phép toán c n th c hi a ch ch a toán h ng c

Ví d :

INPUT a; Nh p giá tr cho a t c giá tr a vào thanh ghi t ng


A PRINT a; Hi n th giá tr c a a ra màn hình. INPUT b

ADD b; C ng giá tr c a thanh ghi t ng A v i giá tr b

Trong các l nh trên thì INPUT, LOAD, PRINT, ADD là các mã l a


ch máy th c hi c m t b ng h p ng
ph c d ch sang ngôn ng máy. Công c th c hi n vi c d ch c g i là
Assembler.
50 BÀI 3:

Ngôn ng c p cao (High level language) i và phát tri n nh m ph n ánh cách


th i l t g n v i ngôn ng i (Anh ng
toán h c. Cùng v i s phát tri n c a các th h máy tính,
ngôn ng l p trình c c phát tri n r ng và phong phú, vi c l p
trình cho máy tính vì th ng khác nhau: l p trình c u
trúc, l ng, l p trình logic, l p trình hàm... M t ình vi t
b ng ngôn ng c c g máy
tính "hi u" và th c hi c các l n thì ph i có m t
d n (vi t b ng ngôn ng c p cao) thành
d h có kh c thi.

3.1.2 ch
n chuy n t
ph ng m i m t ngôn ng c u có m
trình d ch riên l i thì có hai cách d ch: Thông d ch và biên d ch

Thông d ch (interpreter): Là cách d ch t ng l nh m t, d ch t c hi n t

Ch ng h n ngôn ng LISP s d ng trình thông d ch.

Biên d ch (compiler): D ch toàn b trình ngu n thành ch i


i th c hi n. Các ngôn ng s d ng trình biên d

Gi a thông d ch và biên d ch có khác nhau ch : Do thông d ch là v a d ch v a


th ch là d ch xong toàn b ch ng trình r i m i th c thi
nên ình vi t b ng ngôn ng biên d ch th c hi t
b ng ngôn ng thông d ch.

M t s ngôn ng s d ng k t h p gi a thông d ch và biên d ch ch ng h


n c c biên d ch t o thành m i
ng (m t d ng mã trung gian) và khi th c hi n thì t ng l i
c thông d ch thành mã máy.

3.1.3 Ngôn ng l p trình C


C là ngôn ng l p trình c c s d ng r t ph bi l p trình h th ng
cùng v i Assembler và phát tri n các ng d ng.
BÀI 3: 51
Vào nh i th p k u th p k 70 c a th k XX, Dennish Ritchie
(làm vi c t i phòng thí nghi n ngôn ng l p trình C d a trên ngôn
ng r và ngôn ng B (do Ken
Thompson phát tri n t ngôn ng t h u hành UNIX
u tiên trên máy PDP- t l u tiên trên h u hành UNIX c a
máy DEC PDP-11.

t b n quy Ngôn ng
l p trình c ph bi n r n nay.

c thi t k nh m l ng c a h u hành
Unix nh m m tr cho các công vi c l p trình ph c t sau, v i
nh ng nhu c u phát tri n ngày m t c a công vi c l p trình, ã 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 r i
các công ty l p trình s d ng m t cách r n xu t ph n
m m l 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 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 m


d n g m r t nhi 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 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
i l p trình t nh thêm các ki u d li u tr u t u
i m i v ah cl ng g cr m
d a C. Dù v c ph bi n khá r thành m t công c l p
trình khá m c s d ng nh 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.

Nh n c a ngôn ng C

1. ng (compact): C ch có 32 t khóa chu n và 40 toán t chu


h uh c bi u di n b ng nh ng chu i ký t ng n g n.

2. Tính c u trúc (structured): C có m t t p h p nh ng ch th c a l c u


trúc l a ch n, l T tb c t ch c rõ ràng, d hi u.
52 BÀI 3:

3. : C có b ti n x lý và m i n chu n vô
cùng phong phú nên khi chuy n t máy tính này sang
trình vi t b ng C v

4. 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 c c a các mã l nh làm
trình ch y nhanh

5. Biên d ch (compile): C cho phép biên d ch nhi u t


thành các t ng (object) và liên k i v i nhau
thành m th c t c (executable) th ng nh t.

3.2 NG DEV-C
Dev-C là ph n m h c l p trình C. Ngoài ra còn ph n m m khác có th
s d ng là Turbo C, Borland C, m i nh ng
h c Pascal (vì cùng h ); tuy nhiên o di n Console
không thân thi n cho l m v ng th i s g p tr c tr c v i nh ng nh ng h u hành
64- -C++ h tr các ch n th
trình, d ch, th ên b c s d ng -C 5.11.

M Dev-C

Ch y Dev- ng gi ng n ch ng
Windows, màn hình s xu t hi n c a s Dev-
BÀI 3: 53
Dòng trên cùng g i là thanh menu (menu bar). M i m c trên thanh menu l i có
th có nhi u m c con n m trong m t menu kéo xu ng.

So n th trình m i

Mu n so n th o m i ta ch n File New Source File. Trên


màn hình s xu t hi n m t vùng tr cho ta so n th o n i dung c a ch
trình. Trong quá trình so n th s d ng các phím sau:

Quy t t tên t p tin c a ngôn ng C:

Tên c a t p tin g m 2 ph n: Ph n tên và ph n m r ng.

- oa th

- Ph .CPP

Ví d : bai_tap.cpp

Th c hi

Sau khi chúng ta vi t hoàn thi n m u mu n ch y th và xem k t


qu c a ch n t h p phím F11.

3.3 M T S GI N
Ví d 1 Vi nh xu t chu Xin chào b

M C-free/Dev-C, vào File/New/Source file.

v i ph n m r ng là .cpp (Ví d : Cau1.cpp)

#include<stdio.h> n stdio.h vì nó ch a hàm printf.

int main()
{
printf(" Xin chao ban !");
printf(" Xin chao ban!\n");
printf(" Chao ban !\n Toi ten la Hoa ");
printf(" Chao ban !\t Toi ten la Hoa !\n ");
return 0;
}
54 BÀI 3: HC

Hãy biên d ch và ch t qu hi n ra màn hình và rút ra nh n


xét.

Phím t t biên d ch và ch y ch (Compile and Run):

C-free: F5

Dev-C: F11

ng d n: Tìm hi u cách xu t chu i, \t (tab), \n (xu ng dòng) trong C.

Ví d 2: Vi c hi n:

- n

#include<stdio.h>
int main()
{
//câu a
int a;
guyen: a);

printf

//câu b
float b;

//câu c
char z;

fflush(stdin); //xoá b nh m
s
Ki tu da nh
BÀI 3: 55
//câu d
int x, y, z;
printf("Moi nhap hai so nguyen de cong: ");
scanf("%d%d", &x, &y);
z = x + y;
printf("Tong hai so la %d\n", z);
//ho c printf("Tong hai so la %d\n", x+y);
v i phép hi u, tích, th u d li u k t qu c a
phép chia */

return 0;
}
Ví d 3: Vi p và m t s nguyên, cho bi t nó là s âm hay s
.

Ví d 4: Vi t p và hai s nguyên, cho bi t hai s u hay


khác d u.
56 BÀI 3:

CÂU H I ÔN T P
M u

Làm quen và n m v ng các cách mô t gi i thu t; t c m t bài toán


c th , sinh viên có th mô t th t chi ti gi i quy t v .

nh:

Input (d li u nh p).

Output (d li u xu t).

Tìm thu t toán phù h p.

Làm quen v i ph n m m C, bi tm ts n trong


C

Câu 1: Làm quen v i c u trúc chung c a m n:

M C-free/Dev-C, vào File/New/Source file.

i ph n m r ng là .cpp (Ví d : Cau1.cpp)

//Khai báo t n stdio.h vì nó ch a hàm printf.


#include<stdio.h>

int main()

printf("Hello, World!");

printf("Hello, World!\n");

printf("Hello, \nWorld!\n");

printf("Hello, \tWorld!\n");

return 0;

Hãy biên d ch và ch g trình, xem k t qu hi n ra màn hình và rút ra nh n


xét.
BÀI 3: 57
Phím t t biên d ch và ch y c (Compile and Run):

- C-free: F5

- Dev-C: F11

Câu 2: Vi t thi p m i d sinh nh t có d ng:

*******************************************

THIEP MOI

Than moi ban:

Toi du le sinh nhat cua minh

Vao luc 19h ngay 20/10/2016

Tai: 05/42 Vinh Vien TP. HCM

Rat mong duoc don tiep!

Ho Le Thu

*******************************************

- \t (tab), \ \

Câu 3: Vi th c hi n:

- a màn hình

- và xu
a màn hình.

Câu 4: Vi 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. In các k t qu lên màn hình.

ng d n:

Khai báo bi n r bán kính c a hình tròn


58 BÀI 3:

Khai báo bi n: Ki u_ d _ li u Tên_bi n; VD: float r;

Khai báo h ng s PI = 3.14

- Cá

- Cách 2: = ;

VD: const int MAX=100;

Di n tích hình tròn: PI*r*r

Chu vi hình tròn: 2*PI*r.

Câu 5: Vi c hi n:

a. Nh p vào hai s nguyên. Xu t ra màn hình giá tr l n nh t.

b. Nh p vào ba s nguyên. Xu t ra màn hình giá tr l n nh t.

ng d n:

a. Nh p vào hai s nguyên. Xu t ra màn hình giá tr l n nh t.

- a, b

- Thông báo và cho ng uyên a và b (dùng printf, scanf).

- max max.

- a và b

- max

b. Nh p vào ba s nguyên. Xu t ra màn hình giá tr l n nh t.

- a, b, c và max

- a max = a.

- b, c max max
max au: hì m >max thì max=c.

- max.
BÀI 3: 59
BÀI T P NÂNG CAO
Câu 6: Nh p vào 3 s a, b, c. Gi s r ng 3 s v a nh p th a mãn
u ki dài ba c nh 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.

- sqrt(p*(p-a)*(p-b)*(p-
màn hình.

ng d n:

- a, b, c a, b, c unsigned int.

- th
a, b, c a+b>c và a+c>b và b+c>a.

- sqrt(x)
<math.h>.

Câu 7: Vi ì o c m t s nguy úng 3 ch s .

VD: Nh p vào n=234 In ra: 432

ng d n:

L t l y các ch s (s d ng phép chia / và phép chia l y ph


màn hình theo th t :

- m.
60 BÀI 4:

BÀI 4: KI U D LI U VÀ BI U TH C
TRONG C

H c xong bài này, sinh viên s n m rõ các v sau:

- , long, char, float...).

- Các phép toán và các hà trình C.

- Câ

- rình h

4.1 KI U D LI U N, BI N, H NG
4.1.1 Các ký t dùng trong ngôn ng C
M i ngôn ng l c xây d ng t m t t p ký t này
c ghép v t o thành các t ; các t c liên k t l i theo m t qui
t t o thành m t câu l nh. M m nhi u câu l nh và
c di t theo m t thu gi i quy t m t bài toán c th

T p ký t trong ngôn ng C bao g m nh ng ký t , ký hi u sau: (phân bi t ch in


ng):
BÀI 4: 61
- B, C..., Z

- b, c..., z.

- 1, 2..., 9.

- Cá n -, *, /, =, <, >, (,)

- . , ; : " ' _ @ # $ ! ^ [ ] { }...

- ch hay g.

4.1.2 Các t khoá trong C


T c s d khai báo các ki u d li u, vi t các toán t và các câu
l nh.

asm auto break case cdecl char


class const continue _cs default delete
do double _ds else enum _es
extern _export far _fastcall float for
friend goto huge if inline int
interrupt _loadds long near new operator
pascal private protected public register return
_saveregs _seg short signed sizeof _ss
static struct switch template this typedef
union unsigned virtual void volatile while

Ví d typedef.

#define TRUE 1

#define FALSE 0

typedef int boolean;

Chú ý:

-
62 BÀI 4:

4.1.3 Các ki u d li n

Ki u char chi m 1 c bi u di n thông qua b ng mã ASCII. Có hai ki u


char:

Ki u d li u Mi n giá tr (Domain)
unsigned char T 0 n 255 ( 256 ký t trong b ng mã ASCII)
Char T - 128 n 127

Ki u s nguyên
Ki u d li u Kích c Mi n giá tr (Domain)
char 1 byte - n 127 ho n 255
unsigned char 1 byte 0 n 255
signed char 1 byte - n 127
int 2 bytes - n 32,767
unsigned int 2 bytes 0 n 65,535
long 4 bytes -2,147,483,648 n 2,147,483,647
unsigned long 4 bytes 0 n 4,294,967,295

Ki u s th c: Ki u s th th c hay các s có d u ch m th p

phân g m có 3 ki u sau:

Ki u d li u c (Size) Mi n giá tr (Domain)

Float 4 bytes T 3.4 * 10-38 n 3.4 * 10 38

Double 8 bytes T 1.7 * 10-30 n 1.7 * 10308

long double 10 bytes T 3.4 *10-4932 n 1.1 *104932

Ngoài ra ta còn có ki u d li u void, ki ki u r ng không


ch a giá tr gì c .

4.1.4 H ng (Constant)

i trong su t quá trình th c thi c h.

H ng có th là m t chu i ký t , m t ký t , m t con s nh. Chúng có th


c bi u di n nh d ng (Format) v i nhi u d ng th c khác nhau.
BÀI 4: 63

Cú pháp: #define <ten hang> <gia tri hang>

Ví d :

#define MAX 253 /* khai báo m t h ng MAX có giá tr là 253 */

#define PI 3.141593 /* khai báo m t h ng PI có giá tr là 3.141593 */

H ng s th c
S th c bao g m các giá tr ki c th hi n theo 2
cách sau:

- Cách 1 n):
-3.726 275.0

- Cách 2 n là: ph

này các

Ví d :

183.21E-5 có giá tr là 183.21x10-5

0.24e+6 có giá tr là 0.24x106

-32.7E-2 có giá tr là 32.7x10-2

21e3 có giá tr là 21x103

H ng s nguyên
H ng s nguyên (2 byte) h th p phân:

Ví d : 546 -27 5021

H ng s nguyên (4 byte) long: là s c vi t thêm ký t L ho c l vào


t n cùng bên ph i

Ví d : 564L -27456l

- Chú ý:

Ví d : 123456L và 123456 là hai h ng long có cùng 1 giá tr .


64 BÀI 4:

Cách vi s t n 7.

Ví d : 05345 0721 là các h ng nguyên int h 8.

Cách vi

ci là các ký t t n 9, và t A n F (ho c t n f)

Ví d : 0x79 0X5A1 0X129 0x6c8

là các h ng s nguyên h 16.

H ng ký t

H ng ký t là m t ký t riêng bi c vi t trong c p d i m t
ký t ng v i m t giá tr trong b ng mã ASCII. H ng ký t c xem
tr s nguyên.

Ví d

Chúng ta có th th c hi n các phép toán s h c trên 2 ký t (th c ch t là th c


hi n phép toán trên giá tr ASCII c a chúng)

H ng chu i ký t

H ng chu i ký t là m t chu i hay m t xâu ký t t trong c p d

Ví d - -

Chú ý:

1. M t chu i không có n c g i là chu i r ng.

2. trong b nh , m t chu c k t thúc b ng ký t \


là 0).

3. C n phân bi t ký t trong vùng nh 1 byte,


t chu i ký t v trong vùng nh 2 byte.

4. bi u di n ký t c bi t bên trong chu i ta ph i thêm d u \ phía c

Ví d i vi \ c
thì ph i vi t \ \ c
BÀI 4: 65
4.1.5 Bi n

Bi n là m i l t tên thông qua


vi c khai báo bi n. Bi ch a d li u trong quá trình th c hi
và giá tr c a bi n có th b t tên bi n gi
các t tên n trên.

M i bi n thu c v m t ki u d li u xác nh và có giá tr thu c ki

Bi t vùng nh t tên. M i bi c khi s d ng c n


ph c khai báo.

Cú pháp: <kieu du lieu> <ten bien>;

Ví d : int a; /* khai báo bi n a có ki u d li u là int */

float x; /* khai báo bi n x có ki u d li u là float */

double y, z; /* khai báo 2 bi n y, z có ki u d li u là double */

long m, n, i; /* khai báo 3 bi n m, n, i có ki u d li u là long */

ý k t thúc 1 l nh ph i có d u ch m ph y (;) cu i l nh.

V trí khai báo bi n trong C


Trong ngôn ng l p trình C, ta ph i khai báo bi trí. N t
các bi n) không trí s d n nh ng sai sót ngoài ý mu i l p trình
c (hi u ng l t v trí c a bi

Các bi t bên ngoài t t c các hàm và nó có tác d ng hay ng


n toàn b i là bi n toàn c c).

Ví d : int i; /*Bien ben ngoai */

float pi; /*Bien ben ngoai*/

int main()
66 BÀI 4:

Khai báo bi n trong


Các bi t t kh i l nh. Các
bi n này ch có tác d ng hay n i l nh ch a
nó. Khi khai báo bi n, ph t các bi n này u c a kh i l nh c các l nh

Ví d 1:

#include <stdio.h>
#include<conio.h>
int bienngoai; /*khai bao bien ngoai*/
int main ()
{
int j, i; /*khai bao bien ben trong chuong trinh chinh*/ clrscr(); / * l nh xóa
màn hình */
i=1; j=2;
bienngoai=3;
printf ("\n Gia tri cua i la: %d ", i);
printf ("\n Gia tri cua bienngoai la %d ", bienngoai);
return 0;
}
Ví d 2:

#include <stdio.h>
#include<conio.h>
int main ()
{
int i, j; /*Bien ben trong*/
i=4;
j=5;
printf("\n Gia tri cua i la %d",i);
printf("\n Gia tri cua j la %d",j);
if(j>i)
BÀI 4: 67
{
int hieu = j-i; / * bi n bên trong */
u s c a j tr
}
else
{
int hieu = i j; /* bi n bên trong */
u s c a i tr ieu);
}
return 0;
}

Ví d : int a=10; /* khai báo bi n a có ki c kh i gán giá tr u


b ng 10 */

float x, y=3.1, z; /* khai báo 3 bi n x, y, z có ki u float và bi c kh i gán


giá tr u b ng 3.1 */

Bi u th c &x tr v a ch c a bi n x.

4.2 T TÊN TRONG C


nh các thành ph n khác nhau trong m ng trình.
Chúng h ng, tên bi n, tên m ng, tên c

4.2.1 Qui t c t tên trong C


Tên là m t dãy các ký t ch , s và d u g ch n i b u b ng
m t ch cái ho c d u g ch n c trùng v i t khóa.

Ví d 2: Cá

Bien_dem

X
68 BÀI 4:

_a1

Delta

pt_bac_2

Ví d 3: Các tên sai

5Bien b u b ng ký s 5

n! s d ng ký t ch m than !

while trùng v i t khóa

f(x) s d ng ký t ngo c tròn ()

del ta s d ng ký t tr ng

Chú ý:

- phân tên AB
tên ab, tên Delta delta.

4.2.2 C p d u ghi chú thích

Khi vi lúc ta c n ph i có vài l i ghi chú v m


d nh và d u ch nh sau này. Ph n n i dung ghi chú này ph i
không thu c v ch ph n này b b qua). Trong ngôn ng l p
trình C, n i dung chú thích ph c vi t trong c p d u /* và */ ho c //.

Ví d 4: Vi t ra màn hình chu i ký t "Hello, World!".

/* Chú thích trên nhi u dòng

*/

#include "stdio.h" //chú thích trên 1 dòng


#include "conio.h"
int main() // h
{
printf("\nHello, World !"); // xu t chu i Hello, World! Ra màn hinh return 0;
}
BÀI 4: 69
4.3 BI U TH C, PHÉP TOÁN, CHUY I KI U
D LI U
4.3.1 Khái ni m bi u th c

Bi u th c là m t s k t h p gi a các toán t (operator) và các toán h ng


t tr t t nh t nh, dùng di t m t công th c toán h c

Phép toán (toán t ): +, -,

Toán h ng: h ng, bi

Trong bi u th c ta có th dùng các d u ngo th hi th c


hi n c a các phép toán.

Ví d :

Bi u th c tính t ng c a n s t u tiên: n*(n+1)/2;

Bi u th c tính n a chu vi c a m t tam giác: p=(a+b+c)/2;

Bi u th c tính di n tích c a m t tam giác: s=sqrt(p*(p-a)*(p-b)*(p-c));

4.3.2 Các phép toán s h c

Phép toán 2 ngôi

Phép toán
+ Phép c ng
- Phép tr
* Phép nhân
/ Phép chia
% L y ph

Phép toán % ch áp d ng cho s nguyên, nó không s d c cho các s th c.


Ví d : bi u th c 25%3 có giá tr là 1
70 BÀI 4:

Phép toán 1 ngôi

- í : -3

1. Các phép toán +, -


/, %

2. Các phép t
ngôi

3. Các phép toán s h c th c hi n theo th t t trái


sang ph i.

4.3.3 Phép gán (l nh gán)


L 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 = 5; //Gán giá tr 5 cho bi n x
y = 2*x; //Gán giá tr 2*x = 2*5 =10 cho bi n y
return 0;
}
Nguyên t c khi dùng l nh gán thì 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 a các ki u d li u. Ch ng h n ví d sau cho th y
m ts ki u:

int main()

{
int x, y;
x = 10; //Gán h ng s 10 cho bi n x
ki u chu i ký t return 0;
BÀI 4: 71
}
Khi biên d ng trình này, C s báo l i " " t c là
C không th t ng chuy i ki u t char * (chu i ký t ) sang int.

Chú ý:

-
ó.

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 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;

Gi s ta có câu l nh gán sau: <bien> = <bien> + <bieu thuc>;

Ta có th vi t g n l i: <bien> += <bieu thuc>;

t gán s h c sau: +=, -=, *=, /=, %=

Ví d :

int i=5;

i += 3; c hi n câu l nh thì i=8

float x=1.1, y=3.0;

y *= x+1;

c hi n câu l nh thì y=6.3 và x=1.1


72 BÀI 4:

4.3.4 Các phép toán quan h và lý lu n

Ý ng chính c a phép toán quan h và toán t c sai. Trong C


m i giá tr c g i úng, còn sai là 0. Các bi u th c s d ng các toán t
quan h và Logic tr v 0 n u sai và tr v 1 n .

- cho
0).

- Các phép toán:

Phép toán
> L
>= L n ng
< Nh
<= Nh ng
== B ng nhau
!= Khác nhau

Ví d :

5>7 có giá tr 0(sai)


10>=10 có giá tr
6<6 có giá tr 0(sai)
7<=10 có giá tr 1
12==8 có giá tr 0(sai)
25!=9 có giá tr
có giá tr 0(sai)

a.

b.

c. Các phép toán m toán m c (2).


BÀI 4: 73
d. Các phép toán quan h i các phép toán s h c.

K t qu c a phép toán lu n lý cho ta giá tr ng 1) ho c giá tr sai (b ng


0).

Phép ph nh: (toán t m t ngôi) toán t !

Phép và: (toán t 2 ngôi) toán t &&

Phép ho c: (toán t 2 ngôi) toán t ||

A B !A A&&B A||B
Sai
(khác 0) (khác 0) (b ng 0) (b ng 1) (b ng 1)
Sai Sai Sai
(khác 0) (b ng 0) (b ng 0) (b ng 0) (b ng 1)
Sai Sai
(b ng 0) (khác 0) (b ng 1) (b ng 0) (b ng 1)
Sai Sai Sai Sai
(b ng 0) (b ng 0) (b ng 1) (b ng 0) (b ng 0)

5 && 8 có giá tr 1
! 12.5 có giá tr 0
!(9 < 2) có giá tr 1
('A' == 'B') || (7 > 3) có giá tr 1
('A' > 'Y') && (6 >= 1) có giá tr 0

- Các phép toán có

1. !, - (s âm)

2. *, /, %

3. +, -
74 BÀI 4:

4. >, >=, <, <=

5. ==, !=

6. &&, ||

4.3.5 Chuy i ki u giá tr


Cú pháp:

<(type)> <bieu thuc>

Ý ki u giá tr c a bi u th i thành ki u giá tr type

Ví d :

float x;

int n=5;

x= (float) n; /* giá tr c a bi n n có ki i sang ki u float và gán cho


bi n x */

Phép ép ki m t ngôi.

Ví d :

(int) 1.4*10 có giá tr 10

(int) (1.4*10) có giá tr 14

(float) 21/6 + 8.0 có giá tr 11.5

Khi 2 toán h ng trong m t phép toán có ki u giá tr khác nhau thì ki u giá tr th p
ct i sang ki u giá tr c khi th c hi n phép toán. K t
qu c a phép toán là m t giá tr có ki u giá tr cao nh t.

Ví d : Ki c i thành ki u long.

Ki u int và ki i thành ki u float.

Ki u float và ki c i thành ki u double.


BÀI 4: 75
Ví d : Bi u th c

11/2 có giá tr 5

1.5*(11/2) có giá tr 7.5

1.5*11/2 có giá tr 8.25

21/6 + 8.0 có giá tr 11.0

Ki u giá tr c a bi u th c bên v ph i sang ki u giá tr c a bi n bên v


trái v k t qu c a phép gán.

Ki i thành ki u int b ng cách b n sau d u ch m th p phân.

Ki i thành ki u float b ng cách làm tròn.

Ví d :

int n;

n = (float) 20/6 + 8.3; bi n n có giá tr 11

4.3.6 m
Phép

Ví d 1:

int n, i=3;

n = i++;

/* giá tr c a bi c gán cho bi i ;


sau khi th c hi n câu l nh thì n=3 và i=4 */

-
c
76 BÀI 4:

Ví d 2:

int n, i=3;

n = ++i;

/* giá tr c a bi , sa c a bi c gán
cho bi n n; sau khi th c hi n câu l nh thì n=4 và i=4 */

Ví d 1:

int n, i=2;

n = i--;

/* giá tr c a bi c gán cho bi n i b gi ; sau


khi th c hi n câu l nh thì n=2 và i=1 */

Ví d 2:

int n, i=2;

n = --i;

/* giá tr c a bi n i b gi c a bi c gán cho


bi n n; sau khi th c hi n câu l nh thì n=1 và i=1 */

Chú ý mm ch cs d ng v i bi n, mà không
s d c v i h ng.

4.3.7 Bi u th u ki n

Bi u th u ki n có d ng:

<bieu thuc 1>? <bieu thuc 2>: <bieu thuc 3>

-
<bieu thuc 1> g
BÀI 4: 77
-
2> và <bieu thuc 3>.

Ví d :

int a;

float b;

(a > b)? a:b

Bi u th c tr v giá tr l n nh t trong 2 giá tr avà b.

Ki u giá tr c a bi u th u ki n là float.

4.3.8 Các phép toán thao tác trên bit

thao tác trên t ng bit c a m t s nguyên ta có th dùng các phép toán sau:

PHÉP TOÁN
& Phép và theo bit (AND)
| Phép ho c theo bit (OR)
^ Phép ho c lo i tr theo bit (XOR)
<< Phép d ch trái theo bit
>> Phép d ch ph i theo bit
~ Phép l y ph n bù theo bit

Ví d

1&1=1 1|1=1 1^1=0

1&0=0 1|0=1 1^0=1

0&1=0 0|1=1 0^1=1

0&0=0 0|0=0 0^0=0

a << n /*d ch trái giá tr

a >> n /*d ch ph i giá tr

~1=0 /*ph nh c a 1 là 0*/

~0=1 /*ph nh c a 0 là 1*/


78 BÀI 4:

Chú ý:

- i: P
logic.

Ví d :

0x5b1c & 0x9a = 0x18

0x5b1c | 0x9a = 0x5b9e

0x5b1c ^ 0x9a = 0x5b86

~0x5b1c = 0xa4e3

int k=0xffe0;

k << 2 = 0xff80

unsigned int m=0x5b1c;

k << 3 = 0xd8e0

4.3.9 Toán t con tr & và *

M t con tr a ch trong b nh c a m t bi n. M t bi n con tr là m t bi n


c khai báo riê ch a m t con tr n m t i ng c a ki ra nó. Ta
s tìm hi u k con tr con tr . c p
ng n g n hai toán t cs d thao tác v i các con tr .

Toán t th nh t là & là m t toán t quy c tr v a ch b nh c a h s c a


nó.

Ví d : m = &count

t vào bi a ch b nh c a bi n count.
BÀI 4: 79
Ch ng h n, bi n count v trí b nh 2000, gi s count có giá tr là 100. Sau câu
l nh trên m s nh n giá tr 2000.

Toán t th hai là * là m t b t toán t qu c tr v giá


tr c a bi c c p phát t a ch

Ví d : q = *m

S t giá tr c a count vào q. Bây gi q s có giá tr t i


a ch 2000.

4.3.10 Toán t d u ph y (,)

Toán t d cs d k t h p các bi u th c l i v i nhau. Bên trái c a toán


t d c xem là ki u th c bên ph i tr thành
giá tr c a t ng các bi u th c phân cách b i d u ph y.

Ví d : x = (y=3, y+1);

c h t gán 3 cho y r i gán 4 cho x. C p d u ngo c là c n thi t vì toán t


d gán.

CÁC VÍ D :

Ví d 1:

Cho bi t giá tr c a bi u th c 5.6+2.7+20/6+8.0

: Giá tr c a bi u th c là: 19.3

Ví d 2:

Cho bi t int x=10, a;

Hãy cho bi t giá tr c a các bi n x, a sau khi th c hi n câu l nh:

a. a=3* x++ + 8;

b. a=3* ++x +8;

Câu a: x=11 và a=38

Câu b: x=11 và a=41


80 BÀI 4:

Ví d 3:

Hãy vi t m t câu l gán giá tr x cho y ch khi x n m trong kho ng t n


20. i y n u x không thu c kho : Câu l nh

y = (x >= 1 && x <= 20)? x: y;

4.4 NH P XU T D LI U
4.4.1 L nh nh p giá tr t bàn phím cho bi n (hàm scanf)

cd li u t bàn phím và gán cho các bi


g trình th c thi. Trong ngôn ng n
stdio.h.

Cú pháp: nh d a ch c a các bi n);

Gi i thích:

nh d ng nh ki u d li u, cách bi u di r ng, s ch s
th p phân...

M ts nh d ng khi nh p ki u s nguyên, s th c, ký t .

nh d ng
%d Nh p s nguyên ki u 2 byte
%f Nh p s th c
%c Nh p m t ký t
%ld Nh p s nguyên ki u 4 byte
%s Nh p chu i ký t

a ch c a các bi n a ch (&) c a các bi n mà chúng ta c n nh p giá tr cho


c vi &<tên bi n>.

Ví d :

/*Doc gia tri cho bien1 co kieu nguyen*/

/*Doc gia tri cho bien2 co kieu th c*/


BÀI 4: 81
/*Doc gia tri cho bien1 co kieu nguyen, bien2 co kieu thuc*/

char*/

ý:

- , nên dùng hàm fflush(stdin)

-
hay ký h
.

- thì
hàm gets().

Ví d :

Khai báo bi n:

int biennguyen;

float bienthuc;

char bienchar;

char chuoi1[20], *chuoi2;

Nh p giá tr cho các bi n:

nguyen,
&bienthuc,&bienchar) ;
82 BÀI 4:

4.4.2 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 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: nh d u th c);

Gi i thích:

M ts nh d i v i s nguyên, s th c, ký t .

nh d ng
%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>.
%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
%p Xu a ch c a bi n con tr

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;

uyen =%d\
cua bien thuc =%f\
BÀI 4: 83
\n Sau khi lam tron=
bien_thuc);

return 0;

K t qu in

N nh:

\nKy tu co ma ASCII %d la

K t qu ta nh c thêm:

\ float)i);

\nSo thuc la %f \ bien_thuc, (int)bien_thuc);

\nViet binh thuong =%f \n Viet kieu khoa

K t qu in ra màn hình:

i v i các ký t u khi n, ta không th s d ng cách vi ng


hi n th chúng.

Ký t u khi n là các ký t dù u khi n các thao tác xu t, nh p d li u.

M t s ký t u khi c mô t trong b ng:


84 BÀI 4:

Ký t Giá tr Ký t
u khi n th p l c phân c hi n th
\a 0x07 BEL Phát ra ti ng chuông
Di chuy n con tr sang trái 1 ký t và
\b 0x08 BS
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
\ 0x22 D
\? 0x3F ? D u ch m h i (?)
Ký t có mã ACSII trong h bát phân
\ddd Ddd
là s ddd
Ký t có mã ACSII trong h th p l c
xHHH oxHHH
phân là HHH

Ví d

#include <stdio.h>
#include<conio.h>
int main ()
{
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 thap luc phan 41 la \x041");
printf("\n Dong hien tai, xin go enter");
getch();
printf("\rVe dau dong");
return 0;
BÀI 4: 85
}
K t qu c khi gõ phím Enter:

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

4.5 C U TRÚC M
4.5.1 Ti n x lý và biên d ch
Trong C, vi c d ch (translation) m t t p tin ngu c ti n hành trên hai c
hoà c l p v i nhau:

c này trong ph n l n th c n i ti p v i nhau m t cách t ng


theo cách th c mà ta có ng r c th c hi t x lý duy
nh n vi c t n t i c a m t b ti n x lý (preprocessor?)
nh m ch c hi n vi c x c l i, các thu t ng trình
biên d ch hay s biên d ch v n còn nh p nh ng b i vì nó ch ra khi thì toàn b hai giai
n, khi thì l n th hai.
86 BÀI 4:

c ti n x g ng v i vi c c p nh n c
ngu n, ch y u d a trên vi c di n gi i các mã l nh r c bi t g i là các ch th d n
ng c a b ti n x lý (destination directive of preprocessor);

Các ch th c nh n bi t b i chúng b u b ng ký hi u (symbol) #.

Hai ch th quan tr ng nh t là:

- include

- define

Ch th cs d c h t là nh m g p vào n i dung c a các t p tin


c n có (header file), không th thi u trong vi c s d ng m t cách t t nh t các hàm
c n chu n, ph bi n nh t là:

#include<stdio.h>

Ch th th hai r c s d ng trong các t


nh n c khai thác b i các l p trình viên trong vi c

#define NB_COUPS_MAX 100

#define SIZE 25

4.5.2 C u trúc m

M t m các ph th ti n x lý, khai báo bi n


ngoài, các hàm t t o, h chính (hàm main).

C u trúc có th

Các ch th ti n x lý (Preprocessor directives)


#include <Tên t n>

ud li u (ph n này không b t bu t tên l i cho m t


ki u d li g i nh t 1 ki u d li u cho riêng mình d a trên các ki u
d li

Cú pháp: typedef <Tên ki u m i>


BÀI 4: 87
Ví d : typedef int SoNguyen; // Ki u SoNguyen là ki u int

Khai báo các prototype (tên hàm, các tham s , ki u k t qu tr v , a các


hàm (s t trong ph n sau, ph n này không b t bu c):

Ph n khai báo này ch là các khai u hàm, không ph i là ph n


hàm.

Khai báo các bi n ngoài (các bi n toàn c c) ph n này không b t bu c: ph n này


khai báo các bi n toàn c c s d ng trong c ch

n này b t bu c ph i có
<Ki u d li u tr v > main()
{
Các khai báo c c b trong hàm main: Các khai báo này ch t n t i trong hàm
mà thôi, có th là khai báo bi n hay khai báo ki u.
Các câu l nh ngh a hàm main return
<k t qu tr v >; // Hàm ph i tr v k t qu

t các hàm
<Ki u d li u tr v > Tên hàm (các tham s )
{
Các khai báo c c b trong hàm.
Các câu l
hàm return <k t qu tr v >;
}

M u th c thi t hàm m ng là t câu l u


n câu l nh cu i cùng).

4.5.3 Các t p n thông d ng

p tin ch a các hàm thông d ng khi l p trinh C, mu n s d ng các


hàm trong các t p tin header này thì ph i khai báo #include <Tên t p tin> ph n
uc
88 BÀI 4:

1. stdio.h: T các hàm vào/ra chu n (standard input/output). G m


các hàm in d li u (printf()), nh p giá tr cho bi n (scanf()), nh n ký t t bàn
phím (getc()), in ký t ra màn hình (putc()), nh n m t dãy ký t t bàm phím
(gets()), in chu i ký t ra màn hình (puts()), m bàn phím (fflush()),

2. conio.h: T p t DOS (DOS console).


G m các hàm clrscr(), , getche(), getpass(), cgets(), cputs(), putch()

3. math.h: T m các hàm abs(), sqrt(), log().


log10(), sin(), cos(), tan(), ac

4. alloc.h: T m liên quan n vi c qu n lý b nh . G m các


hàm calloc(),

5. io.h: T p th p. G m các hàm open(), _open(),


read(), _read(), close(), _close(), creat(), _creat(), creatnew(), eof(), filelength(),

6. graphics.h: T h a. G m initgraph(),

Còn nhi u t p tin khác n a.

4.5.4 Cú pháp khai báo các ph


trình C

Cú pháp:

#include <Tên t p tin> // Tên t t trong d u <>

hay ng d

Menu Option c a Borland C có m c INCLUDE DIRECTORIES, m c này dùng

ch nh các t c tron c nào.

N u ta dùng #include<Tên t p tin> thì Borland C s tìm t


m nh trong INCLUDE DIRECTORIES.
BÀI 4: 89
Ví d : include <stdio.h>

N ng d i ch rõ tên m c và
t p vi n.

Ví d : #include \\TC\\

ng h p t n n c hi n hành thì ta ch c
tên t n

Ví d :

#include <stdio.h>

#include <conio.h>

Cú pháp:

#define <Tên h ng> <Giá tr >

Ví d :

#define pi 3.14

Khai báo các prototype c a hàm


Cú pháp:

<Ki u k t qu tr v is )

Ví d :

long giaithua (int n); //Hàm tính giai th a c a s nguyên double x_mu_y (float
x, float y); /*Hàm tính x

4.5.5 C u trúc m n
n

#include<tên t n>

ng (không b t bu c)

chính
90 BÀI 4:

int main()
{
Khai báo bi n n u có (ch t n t i trong hàm);
Các câu l a hàm main; return 0;
}

4.5.6 M n

Ví d 1: Vi p vào m t s th r c a bi u
th c (x*x - 5*x + 4) và xu t k t qu ra màn hình.

#include "stdio.h"

int main()

float x, y;

printf("\nNhap x = ");

scanf("%f ",&x);

y= x*x-5*x+4;

printf("Gia tri bieu thuc: %f", y);

Ví d 2: Vi p vào m t chu i ký t xu t chu i ký t


ra màn hình.

#include "stdio.h"

int main()

char ChuoiKyTu[50];

printf("\nNhap chuoi ky tu: ");

gets(ChuoiKyTu);
BÀI 4: 91
printf("Chuoi da nhap: %s",ChuoiKyTu);

CÂU H I ÔN T P
Câu 1: Cho bi t ch sai c trình sau:

int main()

{
n=22;
printf("%d",n);
}
Câu 2: Cho bi t ch sai c

int main()
{
float x;
scanf("%f",x);
}
Câu 3: Hãy cho bi t các bi u th hay sai; N u t giá
tr c a bi u th

37/(5*2)

37/5/2

37(5/2)

37%(5%2)

37%5%2

37-5-2

(37-5)2

37/(5*2)
92 BÀI 4:

Câu 4: Gi s m=5, n=2. Hãy cho bi t giá tr c a m và n sau khi th c thi m i câu
l nh sau:

m *= n++;

m += --n;

Câu 5: Li t kê t t c cs c as ng N.

Ví d : Nh p n=6

K t qu : c s c a 6 là: 1 2 3 6

ng d n

Ta l y s n l t chia cho các s t nn.N us nào chia h t thì nó chính là


c c a n ( phép chia h t là phép chia l y ph

6 % 1 ==0 - cc a6

6 % 2 ==0 - cc a6

6 % 3 ==0 - cc a6

6 % 4 !=0 - cc a6

6 % 5 !=0 - cc a6

6 % 6 ==0 - cc a6

Nh n xét : ta th y l p l i 1 công vi c là l y n chia l y ph t


n n. N t lu n s c c a n.
BÀI 4: 93

Câu 6: cc am ts

Ví d : n=6

K t qu : S c s c a 6 là: 4

ng d n

Ta l y s n l t chia cho các s t n n . N u s nào chia h t thì nó chính là


cc an,l pt n c lên 1

6 % 1 ==0 - cc a6- m +1

6 % 2 ==0 - cc a6- m +1

6 % 3 ==0 - cc a6- m +1

6 % 4 !=0 -> 4 khôn cc a6

6 % 5 !=0 - cc a6

6 % 6 ==0 - cc a6- m +1

Nh n xét : ta th y l p p l i 1 công vi c là l y n chia l y ph t


n n. N .
94 BÀI 4:

Câu 7: V tính t cs c as

Ví d n =6 t c s=1+2+3+6

ng d n

Ta l y s n l t chia cho các s t nn.N us nào chia h t thì nó chính là


c c a n , l p t c ta c ng d n t ng

6 % 1 ==0 - c c a 6 -> S +1

6 % 2 ==0 - c c a 6 -> S +2

6 % 3 ==0 - c c a 6 -> S +3

6 % 4 !=0 -> 4 không cc a6

6 % 5 !=0 - cc a6

6 % 6 ==0 - c c a 6 -> S +6

Nh n xét : ta th y l p l i 1 công vi c là l y n chia l y ph s t


n n. N p t c c ng d n t ng.
BÀI 4: 95

Câu 8: Hoàn thi n các bài t p các bà c.

Câu 9: Vi ax 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 logax=lnx/lna).

Câu 10: Vi p vào t c m (x1, y1) và (x2, y2)

a. Tính h s góc c ng th n ó theo công th c: H s góc =


(y2 - y1)/(x2 - x1)

b. Tính kho ng cách gi m.

Câu 11: Vi 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ó.

Câu 12: Vi m ba môn Toán, Lý, Hoá c a m t h c sinh. In


m trung bình c a h i hai s l th p phân.
96 BÀI 5:

BÀI 5: CÁC TOÁN T U KHI N

Sau khi h c xong bài này, Sinh viên có th n c:

- C

5.1 KHÁI NI M CÂU L NH VÀ KH I L NH


5.1.1 Khái ni m câu l nh

5.1.2 Phân lo i

Có 3 lo i l nh: l h i l nh và l nh có c u trúc.

-
các câu

- các }.

Ví d : kh i l nh

{
float x;
printf("\nNhap x=");
scanf("%f",&x);
}
BÀI 5: 97

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 .

ph 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;
}
nh;
{
int a, b; /*bi n a, b trong kh i l nh th nh;
}
}
Ví d 2:

{
int a, b; /*bi n a, b trong kh i l
l nh;
{
int a, b; /*bi n a, b bên trong kh i l nh con*/
}
}
98 BÀI 5:

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 c s d ng bên trong kh i l nh.

M t kh i l nh con có th s d ng các bi n nh bên ngoài


không th s d ng các bi n bên trong kh i l nh con.

- u trúc

5.2 CÁC L NH R NHÁNH,L A CH N


5.2.1 C u trúc r nhánh

C u trúc r nhánh là m t c u trú 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 và d .

ú pháp:

if (<Bi u th u ki n>)
{
<Công vi c>
}

cú pháp:

Sai
BÀI 5: 99
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 u ki c.

N u ki c hi n câu l nh ho c kh i l nh li u ki n.
N u ki n sai thì b qua l nh ho c kh i l nh li u ki n (nh ng l nh và
kh i l nh sau c th c hi ng vì nó không ph thu u ki n
sau if).

Ví d 1: Yêu c i th c hi h p vào m t s th c a. In ra màn


hình k t qu ngh o c a a khi a != 0

#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);

return 0;

Cú pháp:

if (<Bi u th u ki n>)

<Công vi c 1>

else

<Công vi c 2 >
100 BÀI 5:

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 u ki n c ki c.

N u ki c hi n công vi c 1.

N 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 u ki n.

Ví d : Vi p vào 2 s th c, cho bi t 2 s d u hay khác


d u.
BÀI 5: 101
#include< stdio.h> // n ph i khai báo
#include<conio.h>
int main() //
{
float a,b; // khai báo bi n
p

if (a*b<0)

else
a,b);
return 0;
}

- khoi lenh 2> c

Ví d :

if (n > 0)

if (a > b)

z = a;

else z = b;

- trình rõ ràng, d ki m tra, và tránh nh m l n chúng ta nên vi


trình theo các qui t c sau:

Các câu l nh và kh i l nh n m trong m t toán t u khi n thì vi t t t vào bên


ph i.

Các câu l nh, kh i l nh cùng c p thì vi t trên cùng m t c t.


102 BÀI 5:

m cu i c a m t kh i l i th ng c t.

Ví d :

if (n > 0)

if (a > b)

z = a;

else

z = b;

5.2.2 C u trúc l a ch n switch


C u trúc l a ch n cho phép l a ch n m t trong nhi ng h
câu l nh switch.

Cú pháp:

switch (<Bi u th c>)


{
case <giá tr 1>:
Kh i l nh th c hi n công vi c 1;
break;

case <giá tr n>:


Kh i l nh th c hi n công vi c n;
break;
default:
Kh i l nh th c hi n công vi c m nh;
break;
}
BÀI 5: 103

- uyên.

- Các <giá tr
khác nhau.

-
1>, <giá 2 < n>

- u th
default K

Ví d : Nh p vào m t s nguyên, chia s nguyên này cho 2 l y ph m tra


n u ph ch u s ng 1 thì in thông báo
l

#include <stdio.h>
#include<conio.h>
int main ()
{
int songuyen, phandu;
printf("\n Nhap vao so nguyen "); scanf("%d",&songuyen);
phandu=(songuyen % 2);
switch(phandu)
{
case 0: printf("%d la so chan ",songuyen);
break;
case 1: printf("%d la so le ",songuyen);
break;
}
return 0;
}
104 BÀI 5:

5.3 CÁC L NH L P
C u trúc vòng l p cho phép l p l i nhi u l n 1 công vi c c th hi n b ng 1 câu
l nh hay 1 kh i l n khi th u ki n c th .

5.3.1 C u trúc l p for


Vòng l p for: cho phép l p l i công vi u ki n sai.

Cú pháp:

for (<Bi u th c 1>; <Bi u th c 2>; <Bi u th c 3>)


{
<Công vi c>
}

S ho ng c a toán t for:

nh <bieu thuc 1>

nh <bieu thuc 2>

c 3: Tùy thu c vào giá tr c a <bieu thuc 2> ta có l a ch n sau:


BÀI 5: 105
- câu

thì má

c 4: Tính giá tr c a <bieu thuc 3>, sa i th c hi n b b t


u m t vòng l p m i.

Chú ý:

-
chu trình.

- <bie

- Các <bieu th

return.

- <bieu thuc
(;).

sau cùng

- ác.

- Trong thân vòng

-
106 BÀI 5:

Ví d 1: Vi in dãy s nguyên t n 10.

#include <stdio.h>
#include<conio.h>
int main ()
{
int i;
printf("\n Day so tu 1 den 10:");
for (i=1; i<=10; i++)
printf("%d ",i);
return 0;
}
Ví d 2: Vi p vào m t s nguyên n. Tính t ng c a các s
nguyên t nn

S=0, i=1

S
i<=

S S=S+i

KT i=i+1
BÀI 5: 107
#include< stdio.h>

int main()

int n;

p vào 1 s t

long s=0;

for (int i=1; i<=n; i++)

s= s+i;

ng là s= %ld

return 0;

5.3.2 C u trúc l p while


Vòng l p while gi l p l i m t công vi
u ki n sai.

Cú pháp:

while (Bi u th u ki n)

<Công vi c>

}
108 BÀI 5:

S ho ng c a toán t while:

nh giá tr c a <bieu thuc>

c 2:

- N u giá tr c a <bieu thuc> là sai (b ng 0) thì máy s thoát kh i vòng l p và th c


hi n câu l ng sau l nh while.

- N u giá tr c khác 0) thì máy s th c hi n các câu l nh


trong <khoi lenh>. Khi g p d u ngo c i <khoi lenh> ho c g p l nh
continue thì máy tr l c 1.

Ví d : Vi t c p vào m t s nguyên n. Tính t ng c a các s nguyên


t n n.

thu t to a vòng for.

#include< stdio.h>

int main()

int n;
BÀI 5: 109

long s=0;

int i=1;

while(i<=n)

s=s+i; i++;

prin

return 0;

Ví d 2: Vi nh t n, sao cho
1+2+ >10000. Xu t ra màn hình t c và s n.

#include "stdio.h"

int main()

unsigned int n=0, s=0;

while (s <= 10000)

s += ++n;

printf("\nSo n = %d \t Tong: %d", n, s);

5.3.3 Vòng l

Vòng l p gi l p l i m t công vi c
u ki
110 BÀI 5:

Trong các toán t while và for, vi c ki m tra bi u th u ki n k t


u vòng l p. Khác v i 2 toán t trên, toán t th c hi n vi c ki m tra
bi u th u ki n cu i vòng l p.

Cú pháp:

do{
<Công vi c>
}while (<Bi u th u ki n>);

S ho ng c a toán t

c 1: Th c hi n các câu l nh trong <khoi lenh công vi c>.

nh giá tr c u ki n>. Tùy theo giá tr c a <bieu thuc


u ki n > mà máy s th c hi n r nhánh:

-
while.

Ví d : vi p vào 1 s t nhiên <100. N u nh p sai thì thông báo


sai và nh p l i.

do {

p vào s ph n t

if(n<=0 || n >= 100)

}while (n<=0 || n > = 100);

5.3.4 So sánh các vòng l p

Vòng for, while:

-
BÀI 5: 111
- Vòng

-
.

5.4 CÁC CÂU L C BI T


5.4.1 L nh break

Cú pháp: break;

thoát kh i vòng l p. Khi g p câu l nh này trong vòng l


thoát ra kh i vòng l p và ch n câu l nh li n sau nó. N u nhi u vòng l p thì break
s thoát ra kh i vòng l p g n nh c dùng trong c u trúc l a
ch n switch.

Ví d :
#include "stdio.h"

int main()

int i;

for (i=0; i<10; i++)

{ if (i == 5)

break;

printf("%d ",i);

t ra màn hình các s : 0 1 2 3 4


112 BÀI 5:

5.4.2 L nh continue
Cú pháp: continue

- for,

- Ð ile, do while;

).

Ví d :
#include "stdio.h"

int main()

int i;

for (i=0;i <10; i++)

if (i%2 == 0) continue;

printf("%d ",i);

t ra màn hình các s : 1 3 5 7 9


BÀI 5: 113
CÂU H I ÔN T P
Câu 1: Nh p vào 1 ký t , n u là ch hoa xu t: CHUHOA, n u là ch ng xu t
CHUTHUONG, n u là s ch n xu t SOCHAN và là s l xu t SOLE

Câu 2: Vi p vào m t s nguyên ng c a các ký s


có trong N.

Ví d : nh p 1234 1 + 2 + 3 + 4 = 10 in ra 10.

Câu 3: Vi cho phép nh p 1 s nguyên t ra s ng ch


s l c a N.

Câu 4: Vi ng sau:

n, V i n nh p t bàn phím.

Câu 5: Vi p 1 s nguyên có hai ch s c c a nó.

Ví d : S c

95

11 im t

31 t

Câu 6: Vi p 1 s nguyên có ba ch s c c a nó.

Ví d : S c

105 M

101 M m t

110 M t im t

131 M t

145 M
114 BÀI 6:

BÀI 6: C

Sau khi h c xong bài này, sinh viên s n c các v sau:

- trong C.

- Cá trong C.

6.1 KHÁI NI M HÀM TRONG C


Trong nh nh l n, có th có nh t l p
l i nhi u l m rà và m t th i gian khi vi i ta
ng phân chia ch g trình thành nhi u module, m i module gi i quy t m t công
vi yg i

M t ti n l i khác c a vi c s d d dàng ki m tra


n c c khi ráp n i vào ch vi c
ti n hành hi h s thu n l

Trong c g i là hàm. Hàm trong C có th tr v k t qu


thông qua tên hàm hay có th không tr v k t qu .

Hàm có hai lo i: hàm chu n và hàm t ng


cách s d

M s d ng b t c

Trong C, m u th c thi b ng hàm main.

Ví d 1: Ta có hàm max tìm s l n gi a 2 s

int max(int a, int b)

return (a>b)? a:b;

}
BÀI 6: 115
Ví d 2 nh p vào 2 s nguyên a,b

và in ra màn hình s l n trong 2 s .

#include <stdio.h>

#include <conio.h>

int max(int a, int b)

return (a>b)? a:b;

int main()

int a, b, c;

printf("\n Nhap vao 3 so a, b,c ");

scanf("%d%d%d",&a,&b,&c);

printf("\n So lon la %d",max(a, max(b,c))); return 0;

6.2 N
Hàm i n là nh s n trong m n
s d n thì ph nt c khi s d ng b ng l nh

n.h>

M ts ng dùng:

1. stdio.h: n ch a các hàm vào/ ra chu n (standard input/output). G m các


hàm printf(), scanf(), getc(), putc(), gets(), puts(), fflush(), fopen(),
fclose(), fread(),

2. conio.h: n ch a các hàm vào ra trong ch DOS (DOS console). G m các


hàm clrscr(), , getche(), getpass(), cgets(), cputs(), putch(),
116 BÀI 6:

3. math.h: n ch a các hàm tính toán g m các hàm abs(), sqrt(), log().

4. alloc.h: n ch a các hàm liên qu n vi c qu n lý b G m các hàm


calloc(), realloc(), malloc(), free(), farmalloc(), farc

5. io.h: n ch a các hàm vào ra c p th p. G m các hàm open(), _open(),


read(), _read(), close(), _close(), creat(), _creat(), creatnew(), eof(),

6. graphics.h: n ch h a. G m initgraph(),
line(), circle(),

Mu n s d n thì ta ph i xem cú pháp c a các hàm và s d ng


ng cú pháp (xem trong ph n tr giúp c a borland C).

6.3 HÀ I DÙNG
i dùng là nh ng hàm i l p trình t t o ra nh ng nhu c u
x lý c a mình.

6.3.1 Xây d ng m t hàm


C u trúc c a m t hàm t thi t k :

<Ki u k t qu > Tên hàm ([<ki u t_ s > <tham s >] [,<ki u t s ><tham s >]
{
[Khai báo bi n c c b và các câu l nh th c hi n hàm] [return [<Bi u th c>];]
}

Gi i thích:

- :
hàm
.

- : không
,
BÀI 6: 117

phân cách nhau

- Bên trong thân hàm ( {}) là các khai báo cùng các câu
hai báo
và các khai báo nà ong hàm mà thôi.

- return
qua tên hàm.

Cú pháp:

return; //không tr v giá tr , ch thoát kh i hàm return

return <tên bi n>; //Tr v giá tr c a bi n và thoát

return <bi u th c>; //Tr v giá tr c a bi u th c và thoát

- N u hàm có k t qu tr v , ta b t bu c ph i s d ng câu l tr v k t
qu cho hàm.

Ví d : Vi t hàm tìm s l n gi a 2 s nguyên a và b

int max(int a, int b)

return (a>b)? a:b;

6.3.2 S d ng hàm
M nh c th c thi tr khi ta có m t l i g i
nh

Cú pháp g i hàm: <Tên hàm>([Danh sách các tham s ])

Ví d : Vi m tra 1 s t nhiên có ph i là nguyên t hay không.


118 BÀI 6:

int ktnt(int n)

if (n<2) return 0;

if (n==2) return 1;

if(n%2 == 0) return 0; //n là s ch n thì không nguyên t

for(int i =3; i< n/2; i=i+2) //n u là s l thì ki cs nào không if


(n%i ==0)

return 0;

return 1;

int main()

unsigned int a;

int nt= ktnt (a);

if (nt== 1)

a);

else

return 0;

6.3.3 Nguyên t c ho ng c a hàm

T p m t l i g i hàm thì hàm b u th c hi n b ng cách


chuy n các l c g i. Quá trình di

- àm có t .
BÀI 6: 119
- hà

- thoát

ày.

6.4 TRUY N THAM S CHO HÀM


á quan
.


goài
th

Ví d 1: Truy n tham tr trong C

# include<stdio.h>
void change(int num)
{
num = num + 1;
}
int main()
{
int x = 100;
printf("Truoc khi goi phuong thuc x = %d \n", x);
change(x); // truyen tham tri vao phuong thuc
printf("Sau khi goi phuong thuc x = %d \n", x);
return 0;
}
120 BÀI 6:

K t qu

Truoc khi goi phuong thuc x = 100

Sau khi goi phuong thuc x = 100

change(), m bên t

Ví d 2 : Truy n tham chi u trong C

#include<stdio.h>

void change(int *num)

*num = *num + 1;

int main()

int x = 100;

printf("Truoc khi goi phuong thuc x = %d \n", x);

change(&x); // truyen tham chieu vao phuong thuc

printf("Sau khi goi phuong thuc x = %d \n", x);

return 0;

Truoc khi goi phuong thuc x = 100

Sau khi goi phuong thuc x = 101


BÀI 6: 121
#include<stdio.h>

void change(int &num)

num = num + 1;

int main()

int x = 100;

printf("Truoc khi goi ham change: x = %d \n", x);

change(x); // goi ham change

printf("Sau khi goi ham change: x = %d \n", x);

return 0;

M c nhiên, vi c truy n tham s cho hàm trong C là truy n theo giá tr


các giá tr th c (tham s th c) không b i giá tr khi truy n cho các tham s
hình th c

Ví d 3: Gi s ta mu n in ra nhi u dòng, m i dòng 50 ký t n


ta vi t m t hàm, nhi m v c a hàm này là in ra trên m t dòng 50 ký t Hàm
này có tên là InKT.

#include <stdio.h>
#include <conio.h>

int InKT(char ch)

int i;

for(i=1;

\
122 BÀI 6:

int main()

InKT(c);

return 0;

- ng giá tr

chúng k

th

Ví d 4 :

#include <stdio.h>

#include <conio.h>

int hoanvi (int a, int b)

int t;

n này hoá v giá tr c a 2 bi n a, b


BÀI 6: 123
a=b;

b=t;

printf("\Ben trong ham a=%d , b=%d",a,b); return 0;

int main()

int a, b;

printf("\n Nhap vao 2 so nguyen a, b:");

scanf("%d%d",&a,&b);

printf("\n Truoc khi goi ham hoan vi a=%d ,b=%d",a,b); hoanvi(a,b);

printf("\n Sau khi goi ham hoan vi a=%d ,b=%d",a,b); return 0;

K t qu th c hi

u ta mu n sau khi k t rình con giá


tr c i thì ta ph t tham s hình th c là các con tr , còn tham s th c
t a ch c a các bi n.

Lúc này m i s i trên vùng nh c qu n lý b i con tr là các tham s


hình th c c a hàm thì s ng n vùng nh c qu n lý b i tham s
th c t ng ng (c ý r ng vùng nh này chính là các bi n ta c i giá
tr ng áp d i v i các d li u ra c a hàm.
124 BÀI 6:

6.5 T M V C C A BI N: BI N TOÀN C C, BI N
C CB
6.5.1 Bi n toàn c c
Là bi n c khai báo trình chính, chúng t n t i trong su t th i gian
ch y c n toàn c c ng toàn b
trình chính l

6.5.2 Bi n c c b
Là bi n c khai báo trong m rình con . Chúng c hình thành khi
c g i, và s t bi n m t thúc.
BÀI 6: 125

CÂU H I ÔN T P
Vi i d ng hàm. R i g i th c hi n chúng trong hàm main

Câu 1: Vi p3s t bàn phím, tìm s l n nh t trong 3 s ó, in k t


qu lên màn hình.

Câu 2: Vi n tích c a tam giác v i yêu c u sau khi nh p


3 s a, b, c ph i ki m tra l i xem a, b, c có t o thành m t tam giác không? N u có thì
tính chu vi và di n tích. N u không thì in ra câu " Không t o thành tam giác".

Câu 3: Vi c nh t ax + b = 0 v i a, b nh p t bàn
phím.

Câu 4: Vi t ng trình b c hai ax2 + bx + c = 0 v i a, b, c nh p


t bàn phím.

Câu 5: Vi p t bàn phím 2 s a, b và m t ký t ch.

N u: ch là thì th c hi n phép tính a + b và in k t qu lên màn hình.

ch là thì th c hi n phép tính a - b và in k t qu lên màn hình.

ch là thì th c hi n phép tính a * b và in k t qu lên màn hình.

ch là thì th c hi n phép tính a / b và in k t qu lên màn hình.

Câu 6: Vi t hàm ki m tra 1 s nguyên có ph i là s nguyên t hay không. Áp d ng


hàm này vi t ra các s nguyên t nh p t bàn phím)

Câu 7: Làm l i các bài t i d ng hàm.


126 BÀI 7: -

BÀI 7: M NG- CHU I KÝ T

H c xong bài này, sinh viên s n c các v sau:

- Cách

- u

7.1 KHÁI NI M
M ng là m t t p h p các ph n t c nh có cùng m t ki u d li u, g i là ki u
ph n t . Ki u ph n t có th là có các ki u b t k : ký t , s , chu i ký t
khi ta s d ng ki u m làm ki u ph n t cho m t m ng h p này
ta g i là m ng c a m ng hay m ng nhi u chi u).

Ta có th chia m ng làm 2 lo i: m ng m t chi u và m ng nhi u chi u.

M ng là ki u d li c s d ng r ng xuyên. Ch ng h i ta c n
qu n lý m t danh sách h và tên c a kho ng 100 sinh viên trong m t l p. Nh n th y
r ng m i h ta c n 1 bi n ki u chu y 100 h và tên thì c n
khai báo 100 bi n ki u chu i. N
các thao tác trên các h tên s r t dài dòng và r c r i. Vì th , ki u d li u m ng giúp
ng h p này; ch c n khai báo 1 bi n, bi n này có th
i 100 bi n ki u chu i ký t ng mà các ph n t c a nó là chu i ký
t các t khóa c a ngôn ng l n m t
m chúng.

c c a m ng là s ph n t c am c này ph c bi t ngay
khi khai báo m ng.

N toán h c, m ng 1 chi u gi t vector. M i ph n t


c a m ng m t chi u có giá tr không ph i là m t m ng
BÀI 7: - 127
7.2 M NG M T CHI U
7.2.1 Khai báo

Cú pháp: <ki > <tên m ng> [<s ph n t >];

-
.

-
i nó là kíc

Ví d :

Khai báo m ng m t chi u có tên là songuyen g m10 ph n t và ki là int

int songuyen [10];

Khai báo m ng m t chi u có tên là sothuc g m15 ph n t và ki là float

float sothuc [15];

Khai báo m ng m t chi u có tên là daykytu g m30 ph n t và ki là char

char daykytu [30];

Khai bá

Cú pháp: <ki > <tên m ng> [];

Khi khai báo, không cho bi t rõ s ph n t c a m ng, ki ng


c áp d ng h p: v a khai báo v a gán giá tr , ho c khai báo
m ng là tham s hình th c c a hàm.

Cách 1. V a khai báo v a gán giá tr

Cú pháp:

<Ki u> <Tên m ng> []= {Các giá tr cách nhau b i d u ph y}


128 BÀI 7: -

N u v a khai báo v a gán giá tr thì m c nhiên C s hi u s ph n t c a m ng là


s giá tr mà chúng ta gán cho m ng trong c p d u {}.

Ví d : float x[] = {12.1, 7.23, 5.0, 27.6, 87.9, 9.31};

Chúng ta có th s d ng hàm sizeof() bi t s ph n t c a m

S ph n t =sizeof(tên m ng)/ sizeof(ki u)

Cách 2. Khai báo m ng là tham s hình th c c a hàm ng h p này


ta không c n ch nh s ph n t c a m ng là bao nhiêu.

Ví d : void nhapmang (int a[ ], int n)

7.2.2 Truy c p vào các ph n t c a m ng


M i ph n t c am c truy xu t thông qua Tên bi n m ng theo sau là ch
s n m trong c p d u ngo c vuông [].

Ch ng h n a[0] là ph n t u tiên c a m c khai báo trên.

Ch s c a ph n t m ng là m t bi u th c mà giá tr là ki u s nguyên.

V i cách truy xu t theo ki u này, Tên bi n m ng[Ch s ] có th t


bi n có ki u d li u là ki u c ch ra trong khai báo bi n m ng.

Ch s c a m ng có th là m t h ng, m t bi n hay m t bi u th is .

M t ph n t c a m ng là m t bi n có ki u d li u là ki nên các thao tác


trên các bi c áp d nt c a m ng.

Ví d Khai báo m ng s th c có 5 ph n t float a[5];

M ng s th c trên có các ph n t là:

a[0], a[1], a[2], a[3], a[4] và là nh ng bi n ki u float

Và ta có th th c hi n các phép toán:

float t=10.0;

int i=1;

[0] = 4.2; a[2]= t;

a [i]=(a [0] +a [2])/2;


BÀI 7: - 129
printf("\nGia tri: %f ", a[1]);

scanf("%f ",&a [4]);

t= a [4];

a [2*i+1] = a [2*i]+ a [2*i+2];

Ta có th kh i gán giá tr cho m ng:

float x[6] = {12.1, 7.23, 5.0, 27.6, 87.9, 9.31};

x[5]=9.31

7.2.3 Nh p d li u cho m ng m t chi u

Khai báo m 100 ph n t là các s nguyên: int a [100] ó máy


s c p phát 200 bytes m ng a

Hình nh m ng a g m n ph n t nh

V trí 0 1 2 3 4 .... n-3 n-2 n-1


Giá tr a[ ] 7 3 9 4 5 .... 8 12 2
Tên ph n t a[0] a[1] a[2] a[3] a[4] .... a[n-3] a[n-2] a[n-1]

Nh p d li u cho các ph n t

a [0] = 7 0]);

a [1] = 3

a [2] = 9

...................................................

a [n-1] = 2 -1]);

Nh p t ng ph n t c a m ng

for (int i =0; i<n; i++)


{
);
a[i]);
}
130 BÀI 7: -

7.2.4 Xu t d li u cho m ng m t chi u


Khai báo m 100 ph n t là các s
s c p phát 200 bytes m ng a.

Hình nh m ng a g m n ph n t nh

V trí 0 1 2 3 4 .... n-3 n-2 n-1


Giá tr a[ ] 7 3 9 4 5 .... 8 12 2
Tên ph n t a[0] a[1] a[2] a[3] a[4] .... a[n-3] a[n-2] a[n-1]

Xu t d li u cho t ng ph n t

a [0] = 7

a [1] = 3

a [2] = 9 pri 2]);

a [3] = 4

...................................................

a [n-1] = 2 -1]);

Xu t t ng ph n t c a m ng

for (int i =0; i<n; i++)

7.2.5 M t vài thu t toán trên m ng m t chi u


Bài toán 1: Tính t ng các ph n t trong m ng m t chi u các s nguyên.

Khai báo m 100 ph n t là các s nguyên: int a [100]

c m ng a
BÀI 7: - 131
Hình nh m ng a g m n ph n t trong b nh

V trí 0 1 2 3 4 .... n-3 n-2 n-1


Giá tr a[ ] 7 3 9 4 5 .... 8 12 2
Tên ph n t a[0] a[1] a[2] a[3] a[4] .... a[n-3] a[n-2] a[n-1]

Tính t ng: khai báo m t bi t ng

S = a[0] + a[1] - 1]

Gi i thu t:

um n cu i m ng

for (int i= 0; i<n; i++)

C ng d n các ph n t a[i] vào bi n s

S= S + a[i];

long tinhtong (int a[ ], int n)

long s =0 ;

for (int i = 0; i<n; i++)

s=s+ a[i];

return s;

Bài toán 2: Tìm ph n t u tiên có trong m ng m t chi u các s nguyên.

Hình nh m ng a g m n ph n t nh

V trí 0 1 2 3 4 .... n-3 n-2 n-1


a[ ] 7 3 -9 4 5 .... 8 12 2

Gi i thu t:

um n cu i m ng

for (int i= 0; i<n; i++)


132 BÀI 7: -

Ki m tra ph n t a[i] u tiên

if (a[i] < 0)

N u g p thì xu t giá tr a[i] và d

return a[i];

int amdau (int a[ ], int n)

for (int i = 0; i<n; i++)

if (a[i] < 0)

return a[i];

return 1; // T i sao l i ph i thêm l nh return 1?

7.3 CHU I KÝ T (M NG M T CHI U CÁC KÝ T )


Chu i là m t dãy ký t và x lý , tên, câu. Trong
ngôn ng C không có ki u chu i và chu c th hi n b ng m ng các ký t (có ki u
c k t thúc b ng ký t \ c g i là ký t NULL trong b ng mã
Ascii).

Các h ng chu i ký t t trong c p d u nh

Chú ý: Chu c khai báo là m t m ng các ký t nên các thao tác trên m ng có
th áp d i v i chu i ký t .

7.3.1 Cách khai báo chu i


Khai bá : ];

Ví d : char Hoten [20];

là khai báo 1 chu i ch a t ý t (còn 1 ký t cu i c a


chu i ch a NULL)
BÀI 7: - 133

Ví d : char chu i [ ] thu t l p

A XA HOI CHU N

char \

ten[5] \

L i khi t o m t chu i

1. Chú ý: Không s d ng toán t g chép n i dung c a m t chu i này sang


chu i khác.

char

char b[4];

b = a; //??? Máy báo l i

Không dùng toán t so sánh n i dung hai chu i

char

if(a==b) //??? Máy báo l i

{ }

3. Phép gán trong ki u d li u chu này là sai


char ten[10];

7.3.2 Các thao tác trên chu i ký t


Cách 1: Nh p xu t chu n < stdio.h>

nf
134 BÀI 7: -

Ví d : scanf

i v i hàm scanf khi g p phím space, tab, new line, Enter thì d ng, cho nên ch
dùng nh p chu i không có kho ng tr ng.

printf (xu t chu i xong không xu ng dòng)

Ví d printf

printf (xu t chu i xong có xu ng dòng)

Ví d printf \

Cách 2: Nh p xu t chu i dùng t n <string.h>

gets (Hoten);

Ti p nh c space, tab, new line.

G p Enter thì d ng, ph i khai báo hàm xóa b c khi dùng hàm
gets: fflush (stdin) hay flushall ().

7.3.3 M t s hàm x lý chu i (trong <string.h>)


1. Hàm kbhit: ki m tra b m bàn phím.

Cú pháp: int kbhit (void)

Hàm tr v giá tr khác không n u b m bàn phím khác r ng, tr v giá tr


không n c l i.

2. Hàm strcat: n i hai chu i l i v i nhau.

Cú pháp: char * strcat(char* s1, char* s2)

Hàm có công d ng ghép n i hai chu i s1 và s2 l i v i nhau; k t qu ghép n c


ch a trong s1.

Ví d :

#include "stdio.h"
BÀI 7: - 135
#include "string.h"
void main()
{
char s1[50], s2[50];
printf("\nNhap chuoi 1: "); gets(s1);
printf("Nhap chuoi 2: "); gets(s2);
strcat(s1,s2);
printf("Xuat chuoi 1: %s",s1);
printf("\nXuat chuoi 2: %s",s2);
}
3. Hàm strchr: Tìm l n xu t hi u tiên c a ký t trong chu i.

Cú pháp: char* strchr (char* ch, int kt)

Hàm có tác d ng tìm l n xu t hi u tiên c a ký t kt trong chu i ch. N u tìm


th y hàm tr v a ch c a ký t c tìm th y trong chu i ch, trái l i hàm tr v giá
tr NULL.

Ví d :

#include "stdio.h"
#include "string.h"
void main()
{
char s[50], ch, *p;
printf("\nNhap chuoi: ");
gets(s);
printf("Nhap ky tu: ");
ch=getche();
p=strchr(s,ch);
if (p != NULL) printf("\nchi so cua ky tu: %d",(int)(p-s));
else printf("\nKhong tim thay!");
}
136 BÀI 7: -

4. Hàm strcmp: so sánh hai chu i.

Cú pháp: int strcmp (char* s1, char* s2)

Hàm có công d ng so sánh hai chu i s1 và s2.

- hàm tr

5. So sánh chu i - Hàm stricmp()

Hàm này th c hi n vi c so sánh 2 chu i s1 và s2, không phân bi t gi a ch


ng và ch hoa.

Cú pháp: int stricmp (const char *s1, const char *s2)

K t qu tr v ng t n t qu tr v c a hàm strcmp()

6. Hàm strcpy: sao chép chu i.

c dùng sao chép toàn b n i dung c a chu i ngu n vào chu

Cú pháp: char *strcpy (char *Des, const char *Source)

Ví d :

#include "stdio.h"
#include "string.h"
void main()
{
char s[50];
strcpy(s,"Truong Dai hoc Ky thuat");
printf("\nXuat chuoi: %s",s);
}
7. Hàm strncpy (): Sao chép m t ph n chu i

Hàm này cho phép chép n ký t u tiên c a chu i ngu n sang chu

Cú pháp: char *strncpy(char *Des, const char *Source, size_t n)


BÀI 7: - 137
8. Hàm strchr(): Trích m t ph n chu i

trích m t chu i con c a m t chu i ký t b u t m t ký t c ch nh


trong chu n h t chu i, ta s d ng hàm strchr().

Cú pháp: char *strchr (const char *str, int c)

Ghi chú:

N u ký t h nh không có trong chu i, k t qu tr v là NULL.

K t qu tr v c a hàm là m t con tr , con tr này ch n ký t c tìm th y


u tiên trong chu i str.

9. Tìm ki m n i dung chu i - hàm strstr()

c s d tìm ki m s xu t hi n u tiên c a chu i s2 trong


chu i s1.

Cú pháp: char *strstr(const char *s1, const char *s2)

K t qu tr v c a hàm là m t con tr ch n ph n t u tiên c a chu i s1 có


ch a chu i s2 ho c giá tr NULL n u chu i s2 không có trong chu i s1.

Ví d : Vi t d l y ra m t ph n c a chu i g c
b u t chu i hoc

#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char Chuoi[255], *s ;
printf("Nhap chuoi: ");gets(Chuoi);

print
getch();
return 0;
}
138 BÀI 7: -

10. L y chi u dài chu i v i hàm strlen()

Cú pháp: int strlen (const char *s);

#include <stdio.h>

#include <string.h>

void main()

char string [ ] = "Borland International"; printf("%d\n", strlen(string)); // k t


qu 21 getch ();

Ví d : Gán m t chu i vào chu i khác

Gán t ng ký t trong chu i.

#include<conio.h>
#include<stdio.h>
#include<string.h>
void main()
{
clrscr() ;
char newstr [35];
cha i h c Công Ngh
for (int i = 0; i<strlen(str); i++)
newstr[i] = str[i];
\
getch ();
}
BÀI 7: - 139
11. i m t ký t ng thành ký t hoa - Hàm toupper()

chuy i m t ký t ng thành
ký t hoa.

Cú pháp: char toupper (char c)

12. i chu i ch ng thành chu i ch hoa - Hàm strupr()

chuy i chu i ch ng thành chu i ch hoa,


k t qu tr v c a hàm là m t con tr ch a ch chu c chuy n i.

Cú pháp: char *strupr(char *s)

Ví d : Vi p vào m t chu i ký t t bàn phím. d ng


chuy i chúng thành chu i ch hoa.

#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char Chuoi[255],*s;
printf("Nhap chuoi: "); gets(Chuoi);
s=strupr(Chuoi) ;
;
getch();
return 0;
}
13. i chu i ch hoa thành chu i ch ng - Hàm strlwr()

Mu n chuy i chu i ch hoa thành chu i toàn ch ng, ta s d ng hàm


strlwr(), các tham s c

Cú pháp: char *strlwr (char *s)

14. it chu i ra s , hàm atoi(), atof(), atol() (trong stdlib.h)

chuy i chu i ra s , ta s d ng các hàm atoi(), atof(), và atol().


140 BÀI 7: -

Cú pháp:

int atoi(const char *s): chuy n chu i thành s nguyên

long atol(const char *s): chuy n chu i thành s nguyên dài float

atof(const char *s): chuy n chu i thành s th c

N u chuy i không thành công, k t qu tr v c a các hàm là 0.

15. char* strtok (char *s1, const char *s2)

Hàm strtok chia chu i s1 thành 1 lo t chu i 1 hay nhi u


ký t có trong s2.

Ví d :

#include <string.h>
void main()
{
char s[80], *p ;
printf("Nhap chuoi: ");
gets(s);
p = strtok(s," ");

while(p)
{
p = strtok(NULL," ");
if (p) pr \n
}
}
BÀI 7: - 141
16. c chu i: char* strrev(char *s)

Hàm strrev() trong C tr v chu c c a chu s.

Ví d :

#include<stdio.h>

#include<string.h>

int main()

char str[50] = "Hello";

printf("Chuoi ban dau la: %s\n",str);

printf("Chuoi sau khi dao nguoc la: %s",strrev(str));

return 0;

n string.h còn h tr các hàm x lý chu i khác, ta có th c


thêm trong ph n tr giúp.
142 BÀI 7: -

CÂU H I ÔN T P
Câu 1: Vi t hàm nh p vào m t m ng m t chi u các s nguyên g m n ph n t
(0<n<=100).

H ng d n

#include <conio.h>
#include <stdio.h>
#define MAX 100
/*----------------------------------
*Hàm nh p sô ng ph n t cho m ng
*/
void NhapSL(int &n)
{
do{
phan tu 0<sl<1
sc &n);
}while (n<=0 || n>100);
}

/*------------------------------------

*Hàm nh p giá tr cho t ng ph n t trong m ng */


void NhapMang (int a[], int n)
{
for (int i = 0; i < n; i ++)
{

[i]);
}
}
/*------------------------------------
BÀI 7: - 143
Câu 2: Vi t hàm nh p vào m t m ng m t chi u các s th c g m n ph n t
(0<n<=100).

ng d n

#include <conio.h>
#include <stdio.h>
#define MAX 100
/*----------------------------------
*Hàm nh p sô ng ph n t cho m ng
*/
void NhapSL(int &n)
{
do{

}while (n<=0 || n>100);


}
/*------------------------------------

*Hàm nh p giá tr cho t ng ph n t trong m ng */


void NhapMang (float a[], int n)
{
for (int i = 0; i < n; i ++)
{
pri
f
}
}
/*------------------------------------
144 BÀI 7: -

Câu 3: Vi t hàm xu t m ng s nguyên n ph n t v a nh p trên.

ng d n

void XuatMang (int a[], int n)


{
print \nMang gom cac phan tu:\
for (int i = 0; i < n; i ++)
pr
}
Câu 4: Vi t hàm xu t m ng s th c n ph n t v a nh p trên.

ng d n

void XuatMang (float a[], int n)


{
\nMang gom cac phan tu:\
for (int i = 0; i < n; i ++)
8.2f
}
Câu 5: Tính t ng các ph n t có trong m ng.

H ng d n

long tinhtong (int a[ ], int n)


{
long s=0;
for(int i=0 ; i<n ; i++ )
s=s+a[i];
return s;
}
Câu 6: Tính t ng các ph n t ch n có trong m ng.

Câu 7: Tính t ng các ph n t l có trong m ng.

Câu 8: Tính t ng các ph n t nguyên t có trong m ng.


BÀI 7: - 145
Câu 9: Tìm ph n t ch u tiên có trong m ng

Câu 10: Tìm ph n t l u tiên có trong m ng

Câu 11: Tìm ph n t nguyên t u tiên có trong m ng

Câu 12: Tìm ph n t ch n cu i cùng có trong m ng

Câu 13: Tìm ph n t chính i cùng có trong m ng

Câu 14: Tìm giá tr l n nh t c a m ng

ng d n

int timmax(int a[ ], int n)

{
int max = a [ 0];
for(int i=1; i<n ; i++)
if (max < a[i])
max = a[i];
return max;
}
Câu 15: m s ph n t ch n có trong m ng

Câu 16: m s ph n t có giá tr là x có trong m ng

Câu 17: m s ph n t l n nh t có trong m ng

Câu 18: In ra v trí c a ph n t l n nh t u tiên có trong m ng

Câu 19: In ra v trí c a ph n t có giá tr là x cu i cùng có trong m ng

Câu 20: Thêm m t ph n t u m ng.

Câu 21: Thêm m t ph n t vào cu i m ng.

Câu 22: Thêm m t ph n t vào v trí x trong m ng.

Câu 23: Xóa ph n t ch u tiên.

Câu 24: Xóa t t c các ph n t l n nh t trong m ng

Câu 25: S p x p m n
146 BÀI 7: -

Câu 26: Thêm m t ph n t có giá tr là x vào trong m ng sao cho m ng v n có th


t n.

Câu 27: o c m ng

Câu 28: Nh p chu i

ng d n

void nhapchuoi (char x[])


{
flushall();
print chuoi
gets (x);
}
Câu 29: Xu t chu i

Câu 30: m s ký t i

Câu 31: C t kho ng tr ng có trong chu i

Câu 32: m kho ng tr ng trong chu i.

Câu 33: ms t có trong chu i

Câu 34: S p x p chu n


BÀI 8: 147

BÀI 8: KI U D LI U CÓ C U TRÚC

Sau khi h c xong bài này, h c viên có th :

- úc;

- ng

8.1 KHÁI NI M
Ki u c u trúc (Structure) là m t ki u d li i dùng t u
d li u bao g m nhi u thành ph n, m i thành ph n có m t ki u d li u khác nhau,
m i thành ph c g i là m ng (field).

S khác bi t gi a ki u c u trúc và ki u m ng là: các ph n t c a m ng có cùng


ki u d li u còn các ph n t c a ki u c u trúc có th có các ki u d li u khác nhau.

Hình nh c a ki u c u tr c minh h a:

1 2 3 4 5

Field Field Field Field Field

uc ng

Còn ki u m ng có d ng

0 1 2 3 4 5 6

a[0] a[1] a[2] a[3] a[4] a[5] a[6]


148 BÀI 8:

8.2 CÁCH KHAI BÁO KI U C U TRÚC


Cú pháp
struct <Tên c u trúc>

<Ki ng 1>;

<Ki u> <Tr ng 2>;

<Ki ng n>;

};

typedef struct Tên c u trúc> < tên m i >;

1. <Tên c u trúc>: là m t theo quy t t tên c a danh bi u; tên này


là tên ki u c u trúc.

2. <Ki ng i > (i = 1... n): m ng trong c u trúc có d li u thu c ki u


gì (tên c ng ph i là m t theo quy t t tên c a danh bi u).

Ví d 1: Khai báo m t ki u struct có tên NgayThang có các thành ph n là: ngày,


t tên m i là Date.

Struct NgayThang

int ngay;

int thang;

int nam;

};

Typedef struct NgayThang Date;


BÀI 8: 149
Ví d 2: Khai báo m t ki u struct có tên DiemThi có các thành ph n là: Mã s
sinh viên, Mã s môn h c, L m thi t tên m i là Diem

struct DiemThi

char masv[8]; /* mã s sinh viên */

char mamh[5]; /* mã s môn h c */

int lanthi; /* l n thi */

float diem; m thi */

};

typedef struct DiemThi Diem;

Ví d 3: Khai báo m t ki u struct a m t sinh viên bao g m: mã


s sinh viên, h lót, tên, ngày si a ch . Tro là ki u
st

typedef struct SinhVien

char masv[8];

char holot[30];

char ten[10];

Date ngaysinh;

char noisinh[50];

char diachi[50];

} SV;

Ví d : Khai báo 1 bi tin c a 1 sinh viên: SV x;


150 BÀI 8:

8.3 TRUY C P VÀO T NG PH N T C A C U TRÚC


Cú pháp: struct

<tên bi n struct>.<tên thành ph n c a struct>

Ví d xu t ra màn hình tên c a sinh viên x, ta th c hi n câu l nh sau:

printf("%s", x.ten);

Ví d u trúc d li u cho phân s struct phanso

int tu;

int mau;

};

typedef struct phanso PS;

u ta khai báo m t bi n a có ki u d li u là phân s thì a g m 2 thành


ph n: a.tu, a.mau.

8.4 NH P, XU T D LI U CHO KI U D LI U CÓ
C U TRÚC
8.4.1 Nh p d li u
nh p d li u cho bi n ki u c u trúc, ta ph i nh p cho t ng thành ph n c a câu
trúc.

Ví d : Nh p d li u cho m t phân s có c u trúc khai báo trên:

void nhapphanso (PS &x)

printf("Nhap tu so:");

scanf("%d",&x.tu);

do{
BÀI 8: 151
printf("Nhap mau so khac 0:");

scanf("%d",&x.mau);

}while (x.mau ==0);

8.4.2 Xu t d li u

xu t d li u cho bi n c u trúc, ta xu t d li u trong t ng thành ph n c a c u


trúc.

Ví d : Xu t d li u cho m t phân s :

void xuatphanso (PS x) // VD 3/5

printf ("phan so: %d/%d ", x.tu, x.mau);

8.5 M NG C U TRÚC
Bài toán minh ho : Vi t ch

1. Nh p vào m t dãy phân s .

2. Xu t ra dãy phân s v a nh p.

3. Tính t ng các phân s có trong dãy.

4. Tìm phân s l n nh t có trong dãy.

5. m s ph n t l n nh t có trong dãy.

Hình nh m ng m t chi u các phân s

0 1 2 3 4 5 6 7 8
a[ ] 9/1 6/2 1/2 5/3 1/7 1/3 1/2 8/2 3/2
152 BÀI 8:

a[0] = 9/1 a[i].tu

a[1] = 6/2
PS a [i]
a[2] = 1/2
a[i].mau
.............

a[8] = 3/2

Nh p m ng phân s

void nhapmang (PS a[], int n)

for (int i=0; i<n; i++)

nhapphanso(a[i]);

Xu t m ng phân s

void xuatmang (PS a[], int n)

for (int i=0; i<n; i++)

xuatphanso(a[i]);

//Hàm c chung l n nh t---------------------------------------------------

int UCLN(int a, int b)

a=abs(a); b=abs(b); //l y tr tuy i

L p ch ng nào a b
BÀI 8: 153
N u a>b thì a=a-b;

N u b>a thì b=b-a;

return a;

//Hàm rút g n phân s ------------------------------------------------------------

void RutGon(PS &x)

if (x.tu==0) return; //n u phân s có t = 0 thì không c n rút g n

// l y giá tr ucln c a t và m u c a phân s x b ng cách g i hàm UCLN ();

//tính l i x.tu và x.mau;

//Hàm tính t ng hai phân s ----------------------------------------------------

PS Tong2ps(PS x, PS y)

PS tong; //phân s t qu sau khi tong.

tong.mau=..?;

RutGon(tong);

return tong;

//Hàm so sánh hai phân s -------------------------------------------------------

int SoSanh(PS x, PS y)

}
154 BÀI 8:

CÂU H I ÔN T P
Câu 1: Vi t hàm Nh p vào m t phân s

ng d n

void Nhap1ps (PS &x)


{

//nh p m u s ph i khác 0, nh p sai b t nh p l i do{


mau ); scan mau);
if ( x.mau==0)
Nhap sai! Nha
}while (x.mau==0);
}
Câu 2: Vi t hàm Nh p vào m t dãy phân s

ng d n

Cách 1
void nhapdayps( PS a[ ] , int n )
{
for(int i = 0 ; i<n ; i++ )
{
printf

;
au );
}
}
Cách 2

void nhapdayps(PS a[ ], int n )


{
for(int i = 0; i<n; i++ )
BÀI 8: 155
Nhap1ps (a[i]);
}
Câu 3: Vi t hàm xu t m t phân s

ng d n

void xuat1phanso(PS x)
{
printf("phan so :%d/%d",x.tu,x.mau);
}
Câu 4: Vi t hàm xu t m t dãy phân s

ng d n

void xuatdayps(PS a[ ], int n )


{
for(int i = 0; i<n; i++ )
{
xuat1phanso(a[i]);
printf(" ,");
}
}
Câu 5: Vi t hàm tìm phân s l n nh t trong dãy phân s

Câu 6: Vi t hàm tính t ng các phân s có trong dãy

Câu 7: Vi t hàm nh p d li u cho m t sinh viên, thông tin v m t sinh viên g m có:

1. Mã s sinh viên (chu i 10 ký t ).

2. Tên (là chu i t 0 ký t ).

3. u int. M r ng dd/mm/yy).

4. Gi i tính (Nam ho c N ).

5. L p (chu i 7 ký t u c, 1 ký t ti p là b c h c (D:
i h ng), 2 ký t ti p là ngành h c (TH: Tin H c, KT: K Toán, QT:
nt n t ...).
156 BÀI 8:

6. m toán, lý, tin (Ki u s th c).

ng d n

1. Khai báo c u trúc sinh viên

struct sinhvien
{ char ten[11];
char mssv [11];
char lop [8];
char gioitinh;
int ntns;
float toan, ly, tin, DTB;
};
typedef struct sinhvien sv;
// vi t hàm nh p 1 sinh viên

Cách 1

void nhap1sv(sv &a)


{
flushall();
printf("nhap ten sinh vien :"); gets (a. ten);
printf("nhap ma so sinh vien :"); gets(a. mssv);
printf("nhap lop :" );
sinh :
flushall();
x):
printf("nhap diem toan:"); scanf("%f ", &a.toan) ;
printf("nhap diem ly:"); scanf("%f ", &a.ly ) ;
printf("nhap diem tin:"); scanf("%f ", &a.tin );
a.DTB= (a.toan +a.ly +a.tin) /3 ;
}
BÀI 8: 157
Cách 2

void nhap1sv(sv &a)

{ flushall();
printf("nhap ten sinh vien :"); gets (a. ten);
printf("nhap ma so sinh vien :"); gets(a. mssv);
printf("nhap lop :"); scanf &a. lop );

print oi tinh ( Nam y/nu x ) :"); a. gioitinh= getche();


float t;
printf("nhap diem toan:"); scanf("%f ", &t) ; a.toan= t ;
printf("nhap diem ly:"); scanf("%f ", &t); a.ly = t ;
printf("nhap diem tin:"); scanf("%f ", &t); a.tin = t;
a.DTB= (a.toan +a.ly +a.tin ) /3 ;
}
Câu 8: Vi t hàm xu t d li u m t sinh viên v i thông tin v a nh p trên.

ng d n

void xuat1sv(sv a)

inh vien :"); puts(a. ten);

Lop :"); puts(a. lop);

printf(

else

p oan) ;
158 BÀI 8:

printf("d

printf("diem TB: % a.DTB) ;

Câu 9: Vi t hàm nh p danh sách ng m t chi u.

Câu 10: Vi t hàm xu t danh sách sinh viên.

Câu 11: Tìm sinh viên có tên là i dùng nh p vào )

ng d n

void timtensv (sv a[ ] , int n, char x[])

{ int flag = 0;

for(int i=0; i<n; i++)

if ( strcmp(a[i].ten, x )==0 )

xuat1sv (a[i]);

flag = 1;

if (flag == 0)

v can tim

Câu 12: ms ng m trung bình >5.

ng d n

int DemsvDTB>5 (sv a[ ], int n)

{ int dem =0;

for(int i=0; i<n; i++)

{ if (a[i].DTB > 5)
BÀI 8: 159
dem++;

return dem;

Câu 13: Xu t danh sách sinh viên thu c ngành công ngh thông tin.

Câu 14: Xu t danh sách sinh viên N thu c ngành công ngh thông tin.

Câu 15: S p x p danh sách sinh viên t d n theo c t DTB.

ng d n

void InterchangeSort(sv a[ ], int n )

sv tam;

for (int i = 0; i<n-1; i++)

for (int j =i+1; j < n; j++)

if(a[i].DTB>a[j].DTB)

tam = a[i];

a[i] = a[j];

a[j] = tam;

}
160

TÀI LI U THAM KH O
1. Ph t, K thu t L p trình C- n và nâng cao, NXB KH & KT - 2003.

2. Quách Tu n Ng c, Tin h n, Nhà xu t b n giáo d c - 1997.

3. Hoàng Ki m, Nguy c Th Giáo trình Tin h c i


t b n giáo d c - 1999.

4. Nguy n T n Tr n Minh Khang, Bài gi ngK Thu t L p trình, Khoa Công Ngh
i h c Khoa h c T nhiên

5. Nguy n Thanh Th y (ch biên), Nh p môn l p trình ngôn ng C, Nhà xu t b n


Khoa h c k thu t 2000.

6. Tr n Minh Thái, Bài gi ng và bài t p L p trìn n; Khoa Công Ngh Thông


i h c Khoa h c T nhiên

7. Mai Ng c Thu, Giáo trình C. Khoa Công Ngh i h c K Thu t Công


Ngh .

8. Brain W. Kernighan & Dennis Ritchie, The C Programming Language, Prentice Hall
Publisher, 1988.

9. Giáo trình ng d ng CNTT- n, Trung tâm tin h c. Ngu n Internet.

10. Nguy n Thúy Loan Thiên Trang, Giáo trình KTLT khoa CNTT- HUTECH

You might also like