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

Giáo trình phương pháp lập trình - ĐH CÔNG NGHI pot

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

T
T
R
R




N
N
G
G






I
I


H
H


C
C


C


C
Ô
Ô
N
N
G
G


N
N
G
G
H
H
I
I


P
P


T
T
P
P
/
/
H

H
C
C
M
M


T
T
R
R
U
U
N
N
G
G


T
T
Â
Â
M
M




C

C
Ô
Ô
N
N
G
G


N
N
G
G
H
H




T
T
H
H
Ô
Ô
N
N
G
G



T
T
I
I
N
N


-
-
o
o
0
0
o
o
-
-





















G
G
i
i
á
á
o
o


T
T
r
r
ì
ì
n
n
h
h





P
P
H
H




N
N
G
G


P
P
H
H
Á
Á
P
P


L
L



P
P


T
T
R
R
Ì
Ì
N
N
H
H









































T
T
H
H
Á

Á
N
N
G
G


8
8
/
/
2
2
0
0
0
0
8
8


Giáo trình PP lp trình
TT.Công Ngh Thông Tin 2/127

MC LC


Chng 1: TNG QUAN V NGÔN NG LP TRÍNH C/C++ 4
1. Lch s ca ngôn ng lp trình C/C++ 4
2. Phng pháp  gii quyt mt bài toán 4

3. Các bc trong chu trình phát trin chng trình 5
4. Kho sát mt chng trình C/C++ n gin 7
5. Các chú thích (comments) 9
6. Cu trúc ca mt chng trình C/C++ 10
7. Các tp tin th vin thông dng 11
Chng 2: BIU THC 12
1. Kiu d liu (data types) 12
2. Các nh danh (Identifier names) 13
3. T khóa (keywords) 14
4. Bin (variables) 14
5. T khóa const 17
6. Hng (constants) 17
7. Hng chui ký t (string constants) 18
8. Hng ký t c bit (escape sequences) 18
9. Toán t (operators) 19
10. Các toán t s hc (arithmetic operators) 22
11. Toán t ++ và (increment and decrement operators) 23
12. Toán t quan h & lun lý 24
13. Toán t ? (? operator) 26
14. Toán t sizeof 26
15. Toán t du phy (comma operator) 27
16. Biu thc (expressions) 29
17. Chuyn i kiu trong các biu thc 29
18. Ép kiu (casting) 30
19. Dng vit tt ca câu lnh gán (shorthand assignments) 31
Chng 3: CÁC CU TRÚC IU KHIN 34
1. Gii thiu 34
2. Cu trúc la chn if 35
3. Cu trúc la chn switch case 39
4. Các cu trúc lp (Loop structures) 44

5. Các lnh r nhánh và nhy 50
Chng 4: MNG 61
1. Gii thiu Mng 61
2. Mng 1 chiu 61
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 3/127
3. Mng nhiu chiu 64
Chng 5: CON TR 71
1. Gii thiu Con tr 71
2. Bin con tr (pointer variables) 72
3. Mt s ví d v con tr 75
4. Cp phát b nh ng 75
5. Con tr void (void pointers) 78
6. Con tr null (Null pointers) 79
7. Con tr và mng 80
8. Mng con tr 81
Chng 6: HÀM 83
1. Khái nim hàm 83
2. Dng tng quát ca hàm 84
3. Các qui tc v phm vi ca hàm 85
4. Tham s hình thc và tham s thc 85
5. Truyn mng vào hàm 88
6. i s ca hàm main 89
7. Lnh return 90
8.  qui 92
9. Nguyên m!u hàm (function prototypes) 93
10. Cu trúc ca mt chng trình vit di dng hàm 94
Chng 7: CHUI KÝ T 96
1. Gii thiu Chui 96
2. Khai báo và kh"i to chui 96

3. Nhp chui 97
4. Xut chui 97
5. Mt s hàm th vin thao tác trên chui 97
6. Mt s ví d v chui 98
7. Mng các chui 99
8. Mng con tr n các chui 101
Chng 8: STRUCTURES – ENUM - typedef 105
1. Structures 105
2. Kiu lit kê (Enumerations, enum) 111
3. typedef 112
Chng 9: TP TIN 114
1. Streams và Files 114
2. Streams (dòng nhp xut) 114
3. Files 115
4. Truy xut file ng!u nhiên 124
5. Các stream chun 124
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 4/127
Chng 1

TNG QUAN V NGÔN NG LP TRÌNH C/C++
1. Lch s ca ngôn ng lp trình C/C++
C #c to b"i Dennis Ritchie " Bell Telephone Laboratories vào
n$m 1972  cho phép lp trình viên phát trin các ng dng hiu
qu hn các ngôn ng lp trình hin có ti th%i im ó.
im mnh và mm d&o ca C cho phép các nhà phát trin " Bell
Labs to nên các ng dng phc tp nh h iu hành Unix. Vào
n$m 1983, hc vin chun quc gia M' (American National
Standards Institute - ANSI) thành lp mt tiu ban  chun hóa C
#c bit n nh ANSI Standard C. Ngày nay, tt c trình biên

dch C/C++ u tuân theo ANSI Standard C. C++ #c xây dng
trên nn tng ca ANSI Standard C.
C++ là mt ngôn ng lp trình hng i t#ng mà bao hàm ngôn
ng C " trong nó. Trong giáo trình này cha kho sát ph(n lp
trình hng i t#ng ca C++.
2. Phng pháp  gii quyt mt bài toán
Mt chng trình máy tính #c thit k  gii quyt mt bài toán
nào ó. Vì vy, nhng bc c(n  tìm kim l%i gii cho mt bài
toán c)ng ging nh nhng bc c(n  vit mt chng trình.
Các bc g*m:
- Xác nh yêu c(u ca bài toán.
- Ngh+ ra mt phng cách (algorithm)  tìm l%i gii.
- Thc hin phng cách ó.
- Kim tra kt qu  xem l%i gii có úng vi yêu c(u ca bài
toán.

Giáo trình PP lp trình
TT.Công Ngh Thông Tin 5/127
Khi vit mt chng trình trong C/C++, ây là nhng bc #c
 ngh:
1. Xác nh mc ích ca chng trình
2. Ngh+ ra thut toán phù h#p  gii quyt bài toán (dùng mã
gi, lu *, )
3. Cài t (vit) thut toán dùng ngôn ng lp trình C/C++
4. Thc thi chng trình và kim th (testing).
3. Các b c trong chu trình phát trin chng trình
Chu trình phát trin chng trình (program development cycle) có
nhng bc sau ây. 1. Mt trình son tho v$n bn #c dùng 
nhp mã ngu*n (source code). 2. Mã ngu*n #c biên dch
(compile)  to nên tp tin i t#ng (object file). 3. Các tp tin

i t#ng #c liên kt (link)  to nên tp tin có th thc thi
(executable file). 4. Thc hin (run) chng trình  ch, ra chng
trình có làm vic úng nh ã nh không.











Use

editor
Source
code
Compile
source file

Object
code
Link

object file
Library

files


Exec
utable

program

(C-free, Borland C/C++ editor)
(.c; .cpp files)
(bc.exe)
(.h files) (.exe file)
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 6/127

3.1. So!n tho mã ngu"n (source code editor)
Mã ngu*n là mt tp các lnh dùng  ch, d!n máy tính thc hin
công vic mong mun. Tp tin mã ngu*n #c lu tr vi ph(n
phân loi .c (C) hoc .cpp (C++).
3.2. Biên dch (compile)
Tp tin mã ngu*n #c vit bng nhng t ging ting Anh nên d-
dàng  c và hiu. Tuy nhiên, máy tính không th hiu nhng t
này. Máy tính yêu c(u các ch, d!n nh phân (binary) trong dng
thc ca ngôn ng máy (machine language). Trc khi mt
chng trình #c vit bng ngôn ng cp cao nh C/C++ có th
thc thi trên máy tính, nó phi #c biên dch t mã ngu*n sang
mã máy. Vic dch này #c thc hin b"i mt chng trình gi là
trình biên dch (compiler).
Các ch, d!n ngôn ng máy #c to b"i trình biên dch #c gi là
mã i t#ng (object code) và tp tin cha chúng gi là tp tin i
t#ng. Tp tin i t#ng có cùng tên nh tp tin mã ngu*n nhng
có ph(n phân loi .obj.

3.3. T!o tp tin th#c thi (executable files)
C/C++ có mt th vin hàm cha mã i t#ng cho nhng hàm ã
#c to s.n. Nhng hàm này thc hin các tác v th%ng dùng
nh xóa màn hình (clrscr()), nhp mt chui ký t t bàn phím
(gets()), tính c$n bc hai (sqrt()), mà chng trình #c vit có
th s dng mà không phi vit li.
Tp tin i t#ng #c to ra b"i trình biên dch s kt h#p vi mã
i t#ng ca các hàm th vin  to nên tp tin thc thi. Quá
trình này #c gi là liên kt (linking), #c thc hin b"i mt
chng trình gi là b liên kt (linker).
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 7/127
3.4. Th#c thi chng trình
Khi chng trình ngu*n #c biên dch và liên kt  to nên tp
tin thc thi (có ph(n phân loi .exe), nó có th thc thi trên máy
tính ti du nhc h thng.
Nu chng trình hot ng không úng nh yêu c(u, vn  có
th là do li lp trình. Trong tr%ng h#p này, ch,nh sa chng
trình ngu*n, biên dch li và liên kt li  to nên phiên bn mi
ca tp tin chng trình.
Quá trình bn bc này #c lp i lp li cho n khi tp tin thc
thi thc hin úng yêu c(u ca bài toán.
4. Kho sát mt chng trình C/C++ n gin

Kho sát mt chng trình n gin dùng  xut ra màn hình
dòng ch Hello World!

// my first program in C/C++
#include <conio.h>
#include <iostream.h>

int main()
{
cout << "Hello World!"; //Output “Hello World!”
getche();
return 0;
}
ây là chng trình n gin nhng nó ã bao hàm nhng thành
ph(n c bn mà mi chng trình C/C++ u có. Vi ý ngh+a ca
tng dòng nh sau:

// my first program in C/C++
ây là dòng chú thích, tt c các dòng bt (u bng hai du // #c
coi là các dòng chú thích, nó không nh h"ng n hot ng ca
chng trình, ch, dùng  gii thích mã ngu*n ca chng trình.

Giáo trình PP lp trình
TT.Công Ngh Thông Tin 8/127
#include <iostream.h>
Các lnh bt (u bng du # #c dùng cho các ch, th tin x lý
(preprocessor). Trong ví d này, câu lnh #include báo cho trình
biên dch bit c(n phi gp th vin iostream.h là tp tin header
chun ca C/C++, cha các nh ngh+a v nhp và xut.

int main()
nh ngh+a hàm main(). Hàm main() là im mà tt c các chng
trình C/C++ bt (u thc hin. Nó không ph thuc vào v trí ca
hàm, ni dung ca nó luôn #c thc hin (u tiên khi chng
trình thc thi. Mt chng trình C/C++ u phi t*n ti mt hàm
main(). Hàm main() có th có hoc không có tham s. Ni dung
ca hàm main() tip ngay sau ph(n khai báo chính thc #c t

trong cp du ngoc { }.

cout << "Hello World!";
ây là mt lnh nm trong ph(n thân ca hàm main. cout là mt
dòng (stream) xut chun trong C/C++ #c nh ngh+a trong th
vin iostream.h. Khi dòng lnh này #c thc thi, kt qu là chui
"Hello World!" #c xut ra màn hình. Dòng lnh #c kt thúc
bng du chm phy (;).

getche();
ây là mt hàm th vin dùng  ch% nhp mt ký t t bàn phím.

return 0;
Lnh return kt thúc hàm main và tr v giá tr biu thc i sau
nó, trong tr%ng h#p này là 0. ây là mt kt thúc bình th%ng ca
mt chng trình không có li trong quá trình thc hin.

Chng trình trên có th vit li nh sau:
int main() { cout << " Hello World! "; getch(); return 0;}
c)ng cho cùng mt kt qu.
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 9/127

5. Các chú thích (comments)
Các chú thích #c các lp trình viên s dng  ghi chú hay mô t
trong các ph(n ca chng trình. Trong C/C++ có hai cách  chú
thích:
Chú thích dòng: dùng cp du //. T v trí // n cui dòng #c
xem là chú thích
Chú thích khi (chú thích trên nhiu dòng) dùng cp /* */.

Nhng gì nm gia cp du này #c xem là chú thích.

Ví d:
/* My second program in C/C++ with more comments
Author: Novice programmer
Date: 01/01/2008
*/
#include <conio.h>
#include <iostream.h>
int main()
{
cout << "Hello World! "; // output Hello World!
cout << "I hate C/C++."; // output I hate C/C++.
getche();
return 0;
}

Kt qu xut ca chng trình là: Hello World! I hate C/C++.

Giáo trình PP lp trình
TT.Công Ngh Thông Tin 10/127
6. C$u trúc ca mt chng trình C/C++
Cu trúc mt chng trình C/C++ bao g*m các thành ph(n nh:
Các ch, th tin x lý, khai báo bin toàn cc, chng trình chính
(hàm main),
Kho sát chng trình sau:

/* fact.c
Purpose: prints the factorials of
the numbers from 0 through 10

Author: Mr.Beginner
Date: 01/01/2008
*/

#include <iostream.h>



int factorial(int n);



int main()
{
int i;
for(i=0; i<=10; i++)
cout<<i<<“!=“<<factorial(i);
return 0;
}

/* This function computes the
factorial of its parameter, returning it */
int factorial(int n)
{
int i, product;
product = 1;
for (i=2;i<=n;i++) prod *= i;
return product;
}



Phn này thng dùng  mô
t mc ính chng trình, tác
gi, ngày vit, (Phn không
bt buc)
Khai báo các tp tin th vin
Khai báo prototype ca các
hàm t to
Hàm chính ca chng trình
nh ngha các hàm do ngi
dùng t xây dng
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 11/127
7. Các tp tin th vi%n thông d&ng
ây là các tp tin cha nh ngh+a các hàm thông dng khi lp
trình C/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 <FileName.h> " ph(n (u ca chng
trình, vi FileName.h là tên tp tin th vin. Các tp tin th vin
thông dng g*m:
stdio.h(C), iostream.h(C++) Tp tin nh ngh+a các hàm vào/ra
chun (standard input/output) g*m các hàm xut d liu
(printf())/cout), nhp giá tr cho bin (scanf())/cin), nhn ký t t
bàn phím (getc()), in ký t ra màn hình (putc()), nhp mt chui ký
t t bàm phím (gets()), xut chui ký t ra màn hình (puts()), xóa
vùng m bàn phím (fflush()), fopen(), fclose(), fread(), fwrite(),
getchar(), putchar(),
conio.h : Tp tin nh ngh+a các hàm vào ra trong ch  DOS
(DOS console) g*m các hàm clrscr(), getch(), getche(), getpass(),
cgets(), cputs(), putch(), clreol(), …
math.h: Tp tin nh ngh+a các hàm toán hc g*m các hàm abs(),

sqrt(), log(), log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(),
exp(), …
alloc.h: Tp tin nh ngh+a các hàm liên quan n vic qun lý b
nh g*m các hàm calloc(), realloc(), malloc(), free(), farmalloc(),
farcalloc(), farfree(), …
io.h: Tp tin nh ngh+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(), filelength(), lock(), …

Giáo trình PP lp trình
TT.Công Ngh Thông Tin 12/127
Chng 2
BIU THC
(Expressions)

Biu thc #c to thành t nhng thành t nh d liu và toán t.
D liu có th cha trong bin hoc hng. Toán t trong các ngôn
ng lp trình có cùng ý ngh+a nh trong toán hc. Có nhiu loi
toán t nh toán t gán (=), toán t s hc (+ - * / %), toán t quan
h (== < <= > >= !=), toán t lun lý (&& || !),

1. Kiu d li%u (data types)
C/C++ có n$m kiu d liu c s": ký t (char), s nguyên (int), s
thc (float), s thc có  chính xác gp ôi (double), và kiu vô
nh (void). Tt c nhng kiu d liu khác u da trên 5 kiu c
s" này. Kích thc và phm vi ca nhng kiu d liu này có th
thay i tùy theo loi CPU và trình biên dch.
Kiu char #c dùng  gi các giá tr ca b mã ASCII
(Amercican Standard Code for Information Interchange). Kiu
char chim 1 byte b nh.

Kích thc ca kiu int là 16 bits (2 bytes) trên môi tr%ng 16-bit
nh DOS, Windows 3.1. Môi tr%ng 32-bit nh Windows 95, kích
thc kiu int là 32 bits (4 bytes). Nói chung, tùy thuc môi
tr%ng, kích thc ca kiu int có th khác nhau.
Chun C ch, ra phm vi ti thiu ca kiu d liu s thc (float,
double) là 1E-37 n 1E+37.
Kiu void dùng  khai báo hàm không tr v giá tr hoc to nên
các con tr tng quát (generic pointers).
Ngoi tr kiu void, các kiu d liu c s" có th có các t nh
signed, unsigned, long, short i trc nó. Các t này làm thay i
phm vi ti thiu mi kiu c s" có th cha. Bng sau trình bày
tt c các kt h#p h#p l ca kiu d liu vi các t trên.
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 13/127

Kiu d li%u
Kích th c
b'ng bits
Ph!m vi t(i thiu
char 8 -127 to 127
unsigned char 8 0 to 255
signed char 8 -127 to 127

int 16 or 32 -32,767 to 32,767
unsigned int 16 or 32 0 to 65,535
signed int 16 or 32 ging nh int

short int hoc short 16 -32,767 to 32,767
unsigned short int 16 0 to 65,535
signed short int 16 ging nh short int



long int hoc long 32 -2,147,483,647 to 2,147,483,647
signed long int 32 ging nh long int

unsigned long int 32 0 to 4,294,967,295

float 32  chính xác là 6 ký s
double 64  chính xác là 10 ký s
long double 80  chính xác là 10 ký s

2. Các nh danh (Identifier names)
Trong C/C++, tên ca các bin, hng, hàm, #c gi là nh
danh. Nhng nh danh này có th là 1 hoc nhiu ký t. Ký t (u
tiên phi là mt ch cái hoc du _ (underscore), nhng ký t theo
sau phi là ch cái, ch s, hoc du _. Sau ây là nhng nh
danh úng và sai:
úng Sai
count 1count
test23 hi!there
high_balance high balance

C/C++ phân bit ký t HOA và th%ng. Vì vy, count, Count, và
COUNT là 3 danh nh khác nhau.
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 14/127
nh danh không #c trùng vi các t khóa (keywords) và không
nên có cùng tên nh các hàm th vin ca C/C++.

3. T) khóa (keywords)

Là nhng t ã #c dành riêng b"i ngôn ng lp trình cho nhng
mc ích riêng ca nó. Không #c dùng t khóa  t tên cho
nhng nh danh nh bin, hng, hàm, Tt c các t khóa trong
C/C++ u là ch th%ng (lowercase). Sau ây là danh sách các t
khóa ca C/C++:

auto break case char const continue default do
double else enum extern float for goto if
int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while

4. Bin (variables)
Mt bin là nh danh ca mt vùng trong b nh dùng  gi mt
giá tr mà có th b thay i b"i chng trình. Tt c bin phi
#c khai báo trc khi #c s dng. Dng khai báo bin tng
quát là:
type variableNames;
type: phi là mt trong các kiu d liu h#p l.
variableNames: tên ca mt hay nhiu bin phân cách nhau b"i
du phy.

Ngoài ra, ta có th va khai báo va kh"i to giá tr ban (u cho
các bin dùng cú pháp sau:
type varName1=value, , varName_n=value;

Ví d:
int i, j; // khai báo 2 bin i, j kiu int
// khai báo ba bin day, month và year kiu short int
short day, month, year;
Giáo trình PP lp trình

TT.Công Ngh Thông Tin 15/127
char ch; // khai báo bin ch kiu ký t
// khai bao 4 bien kieu float, gán average giá tr 0
float mark1, mark2, mark3, average = 0;

Lu ý: Khi khai báo bin nu không cung cp giá tr khi to thì giá tr
ca bin là cha xác nh. Do ó, vic dùng nhng bin này trong các
biu thc là vô ngha.

Bin #c khai báo ti ba ni: bên trong hàm, trong nh ngh+a
tham s ca hàm, và bên ngoài tt c hàm. Nhng bin này #c
gi l(n l#t là bin cc b, các tham s hình thc, và bin toàn cc.

4.1. Bin c&c b (local variables)
Nhng bin #c khai báo bên trong mt hàm gi là bin cc b.
Các bin cc b ch, #c tham chiu n ch, b"i nhng lnh nm
trong khi (block) có khai báo bin. Mt khi bt (u vi du { và
kt thúc vi du }.
Bin cc b ch, t*n ti trong khi khi cha nó ang thc thi và b
hy khi khi cha nó thc thi xong.
Ví d: Xem xét hai hàm sau:
void func1(void)
{
int x;
x = 10;
}

void func2(void)
{
int x;

x = -199;
}
Bin nguyên x #c khai báo 2 l(n, mt trong hàm func1() và mt
trong hàm func2(). Bin x trong func1() không có quan h gì vi
bin x trong func2() b"i vì mi x ch, t*n ti trong khi cha nó.


Giáo trình PP lp trình
TT.Công Ngh Thông Tin 16/127
4.2. Các tham s( hình th*c (formal parameters)
Nu mt hàm có nhn các i s truyn vào hàm thì nó phi khai
báo các bin  nhn giá tr ca các i s khi hàm #c gi.
Nhng bin này gi là các tham s hình thc. Nhng bin này
#c i x ging nh các bin cc b khác #c khai báo trong
hàm. Xem xét ví d sau:
int sum(int from, int to)
{
int total=0;
for(int i=from ; i<=to ; i++) total +=i;
return total;
}
Trong ví d này, from và to là 2 tham s hình thc và #c i x
nh bin cc b total ca hàm sum. Lu ý bin i #c khai báo
trong cu trúc lp for nên nó là bin cc b ch, t*n ti trong cu
trúc for mà thôi. Nhng lnh nm ngoài cu trúc for s không tham
chiu #c bin i này.

4.3. Bin toàn c&c (global variables)
Bin toàn cc có phm vi là toàn b chng trình. Do ó, tt c các
lnh có trong chng trình u có th tham chiu n bin toàn

cc. Bin toàn cc #c khai báo bên ngoài tt c hàm.
Kho sát chng trình sau:
#include <iostream.h>
void increase();
void decrease();
int gVar = 100;
void main()
{
cout << “Value of gVar= “ << gVar;
increase();
cout << “\nAfter increased, gVar= “ << gVar;
decrease();
cout << “\nAfter decreased, gVar= “ << gVar;
}

void increase()
{ gVar = gVar + 1;}

Giáo trình PP lp trình
TT.Công Ngh Thông Tin 17/127
void decrease()
{ gVar = gVar -1;}
Sau khi thc thi chng trình trên, kt qu xut trên màn hình là:
Value of gVar= 100
After increased, gVar= 101;
After decreased, gVar= 100;
5. T) khóa const
Giá tr ca bin có th thay i trong sut quá trình thc thi
chng trình.  giá tr ca bin không b thay i, ta t trc
khai báo bin t khóa const. T khi bin ã có giá tr, giá tr này s

không bao gi% b thay i b"i bt k/ lnh nào trong chng trình.
Thông th%ng ta dùng ch HOA  t tên cho nhng bin này.
Ví d: khai báo hng nguyên MAX có giá tr 100
const int MAX = 200;

6. H'ng (constants)
Hng là nhng giá tr c nh (fixed values) mà chng trình
không th thay i. Bt k/ kiu d liu nào c)ng có hng tng
ng. Hng còn #c gi là literals.
Hng ký t #c bao quanh b"i cp du nháy n. Ví d 'a' và '%'
là nhng hng ký t.
Hng nguyên là nhng s mà không có ph(n thp phân. Ví d 100
và -100 là nhng hng nguyên.
Hng s thc yêu c(u mt du chm thp phân phân cách ph(n
nguyên vi ph(n thp phân. Ví d 123.45 là mt hng s thc.
Ví d v cách vit các loi hng s:
Kiu d li%u Các ví d& v+ h'ng Ghi chú
int 1, 123, 21000, 234
long int 35000L, 34l Có ký t l hoc L " cui
unsigned int 10000U, 987u, 40000U Có ký t u hoc U " cui
float 123.23f, 4.34e-3F Có ký t f hoc F " cui
double 123.23, 1.0, 0.9876324
long double 1001.2L Có ký t l hoc L " cui
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 18/127
7. H'ng chu,i ký t# (string constants)
C/C++ cung cp mt lai hng khác gi là chui. Mt chui là mt
tp các ký t #c bao quanh b"i cp du nháy ôi.
Ví d, "This is a string" là mt chui.
Lu ý phân bit hng chui và hng ký t. Mt hng ký t là mt

ký t bao quanh b"i cp du nháy n. Do ó, 'a' là hng ký t
nhng "a" là hng chui.
8. H'ng ký t# -c bi%t (escape sequences)
C/C++ có nhng hng ký t c bit mà không th biu di-n nh
nhng hng ký t thông th%ng. Nhng hng này còn gi là escape
sequences. Sau ây là danh sách các hng c bit ó:
Mã Ý ngh.a
\b Lùi sang trái 1 ký t
\f V (u dòng
\n Sang dòng mi
\r Xung dòng
\t Tab theo chiu ngang
\" Du nháy ôi
\' Du nháy n
\0 Null
\\ Du \
\v Tab theo chiu ng
\a Cnh báo
\? Du hi
\N Hng bát phân (vi N là mt hng bát phân)
\xN Hng thp lc phân (vi N là mt hng thp lc phân)
Xem xét ví d sau:
#include <iostream.h>
void main(void)
{
cout <<"Items:\n";
cout <<”\tItem1\n”;
cout <<”\tItem2\n”;
cout <<”\tItem3\n”;
}



Items:
Item1
Item2
Item3

output

\
n

\
t

tab

Enter

Giáo trình PP lp trình
TT.Công Ngh Thông Tin 19/127
9. Toán t (operators)
C/C++ có bn loi toán t: s hc (arithmetic), quan h
(relational), lun lý (logical), và toán t trên bit (bitwise).

9.1. Toán t gán (assignment operator)
Dng tng quát ca toán t gán là
variableName = expression;
variableName: Tên bin
expression: Biu thc

Lu ý, phía bên trái du bng phi là mt bin hay con tr và
không th là hàm hay hng.
Ví d:
total = a + b + c + d;

9.2. Chuyn /i kiu trong câu l%nh gán
Khi nhng bin ca mt kiu kt h#p vi nhng bin ca mt kiu
khác thì mt s chuyn i kiu xy ra. i vi câu lnh gán, giá
tr ca biu thc bên phi du bng #c t ng chuyn thành
kiu d liu ca bin bên trái du bng.
Ví d:
int i=100;
double d = 123.456;

Nu thc thi lnh
i = d;
thì i s có giá tr là 123 vì 123.456 s t ng chuyn thành s
nguyên nên b ct b ph(n thp phân. S chuyn i kiu này gi
là chuyn i kiu b mt mát thông tin.

Nu thc thi lnh
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 20/127
d = i;
thì d s có giá tr là 100.0. S chuyn i kiu này gi là chuyn
i kiu không mt mát thông tin.

Tóm li, khi chuyn i kiu t kiu d liu có min giá tr nh
sang kiu d liu có min giá tr ln hn thì vic chuyn i kiu
này là an toàn vì không b mt mát thông tin. Th t t$ng d(n t

kiu d liu có min giá tr nh n kiu d liu có min giá tr ln
là char 

 int 

 long 

 float 

 double.

Khi chuyn i kiu d liu có min giá tr ln sang kiu d liu
có min giá tr nh hn thì vic chuyn i kiu này là không an
toàn vì có th mt mát thông tin. Th t gim d(n t kiu d liu
có min giá tr ln n kiu d liu có min giá tr nh là
double 

 float 

 long 

 int 

 char.

Ví d:
int i = 100;
long l = 200;
float f = 123.456f;
double d = 1.23456789;


Kho sát các lnh gán sau:
int n; long m; float p; double q;
n = i + l + f + d; // (1)
m = i + l + f + d; // (2)
p = i + l + f + d; // (3)
q = i + l + f + d; // (4)
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 21/127




























100

200

123.456

1.23456789

i

l

f

d

double

double

double

double


100.0

200.0

123.456

1.23456789

424.69056789

int

n có giá tr là 424
(1)

100

200

123.456

1.23456789

i

l

f

d


double

double

double

double

100.0

200.0

123.456

1.23456789

424.69056789

float

p có giá tr là 424.690567

(
3
)

Giáo trình PP lp trình
TT.Công Ngh Thông Tin 22/127
















Kt lun: Tr%ng h#p (1) và (3): mt mát thông tin. Tr%ng h#p
(4) không mt mát thông tin.

10. Các toán t s( h0c (arithmetic operators)
Các toán t s hc g*m: + (cng), - (tr), * (nhân), / (chia), và %
(ly ph(n d ca phép chia nguyên).
Khi t s và m!u s ca phép chia là s nguyên thì ó là phép chia
nguyên nên ph(n d ca phép chia nguyên b ct b. Ví d, 5/2 thì
kt qu là 2.
Toán t ly ph(n d % (modulus operator) ch, áp dng vi s
nguyên và tr v ph(n d. Ví d, 7%2 thì kt qu là 1.



100


200

123.456

1.23456789

i

l

f

d

double

double

double

double

100.0

200.0

123.456

1.23456789


424.69056789

q có giá tr là 424.69056789

(
4
)

Giáo trình PP lp trình
TT.Công Ngh Thông Tin 23/127
11. Toán t ++ và (increment and decrement operators)
C/C++ có hai toán t rt th%ng dùng là ++ và Toán t ++
cng 1 n toán hng ca nó và toán t thì tr 1 t toán hng
ca nó.
Ví d:
x++; // tuong duong x = x + 1;
x ; // tuong duong x = x - 1;

Toán t ++ và có th t phía trc (prefix) hoc phía sau
(postfix) toán hng. S khác nhau ca 2 tr%ng h#p này là khi toán
t ++ và ng trc toán hng, hành ng t$ng và gim trên
toán hng #c thc hin trc, sau ó giá tr mi ca toán hng s
dùng  tham gia vào vic nh tr ca biu thc.

Ví d: Kho sát on lnh sau
int x = 100;
int n,m;
Nu thc hin lnh:
n = ++x + 1; // n s có giá tr là 102 (1)


Nu thc hin lnh:
n = x++ + 1; // n s có giá tr là 101 (2)
Sau khi lnh (1) hay (2) #c thc thi xong thì x có giá tr là 101

Tng t, nu thc hin lnh:
m = x + 1; // n s có giá tr là 100 (3)

Nu thc hin lnh:
m = x + 1; // n s có giá tr 101 (4)

Giáo trình PP lp trình
TT.Công Ngh Thông Tin 24/127
Sau khi lnh (3) hay (4) #c thc thi thì x có giá tr là 99

Khi các toán t s hc xut hin trong mt biu thc, thì  u tiên
thc hin nh sau:

Cao nht ++ – –
– (du âm)
* / %
Thp nht + –
Nhng toán t trên cùng hàng thì có cùng  u tiên. Khi biu thc
có nhiu toán t có cùng  u tiên thì th t nh tr biu thc là
t trái sang phi.

12. Toán t quan h% & lun lý (relational & logical operators)
Toán t quan h liên quan n s quan h ca hai giá tr. Toán t
lun lý liên quan n s ni kt ca nhng quan h.
Các biu thc mà dùng toán t quan h và toán t lun lý #c
nh tr là true (úng) hoc false(sai). Trong C/C++, giá tr 0 (zero)

#c xem là false và giá tr khác 0 (non-zero) #c xem là true.
Các toán t quan h g*m:
Toán t Ý ngh.a
> Ln hn
>= Ln hn hay bng
< Nh hn
<= Nh hn hay bng
== Bng (có 2 du =)
!= Không bng

Ví d v toán t quan h:
100 < 200 // true
200 == 300 // false
300 != 400 // true
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 25/127
400 >= 500 // false
Các toán t lun lý:
Operator Action Ý ngh.a
&& AND Và
|| OR Hoc (có 2 du |)
! NOT Ph nh
Bng chân tr ca các toán t lun lý
p q p && q p || q !p
0 0 0 0 1
0 1 0 1 1
1 1 1 1 0
1 0 0 1 0
C hai toán t quan h và lun lý có  u tiên thp hn toán t s
hc. Trong mt biu thc có th có nhiu loi toán t, th t 

nh tr biu thc da vào  u tiên ca toán t.  thay i th
t nh tr trong mt biu thc, dùng cp du ngoc n () nh
trong các biu thc s hc.
 u tiên ca toán t quan h và lun lý:
Cao nh$t !

> >= < <=

== !=

&&
Th$p nh$t ||
Ví d: biu thc (10>9 && 8!=7) || (6<=5 || 5>4) #c nh tr nh sau:








(10>9 && 8!=7) && (6<=5 || 5>4)
1

1

0

1


1

1

1

×