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 lp trình
TT.Công Ngh Thông Tin 2/127
MC LC
Chng 1: TNG QUAN V NGÔN NG LP TRÍNH C/C++ 4
1. Lch s ca ngôn ng lp trình C/C++ 4
2. Phng pháp gii quyt mt bài toán 4
3. Các bc trong chu trình phát trin chng trình 5
4. Kho sát mt chng trình C/C++ n gin 7
5. Các chú thích (comments) 9
6. Cu trúc ca mt chng trình C/C++ 10
7. Các tp tin th vin thông dng 11
Chng 2: BIU THC 12
1. Kiu d liu (data types) 12
2. Các nh danh (Identifier names) 13
3. T khóa (keywords) 14
4. Bin (variables) 14
5. T khóa const 17
6. Hng (constants) 17
7. Hng chui ký t (string constants) 18
8. Hng ký t c bit (escape sequences) 18
9. Toán t (operators) 19
10. Các toán t s hc (arithmetic operators) 22
11. Toán t ++ và (increment and decrement operators) 23
12. Toán t quan h & lun lý 24
13. Toán t ? (? operator) 26
14. Toán t sizeof 26
15. Toán t du phy (comma operator) 27
16. Biu thc (expressions) 29
17. Chuyn i kiu trong các biu thc 29
18. Ép kiu (casting) 30
19. Dng vit tt ca câu lnh gán (shorthand assignments) 31
Chng 3: CÁC CU TRÚC IU KHIN 34
1. Gii thiu 34
2. Cu trúc la chn if 35
3. Cu trúc la chn switch case 39
4. Các cu trúc lp (Loop structures) 44
5. Các lnh r nhánh và nhy 50
Chng 4: MNG 61
1. Gii thiu Mng 61
2. Mng 1 chiu 61
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 3/127
3. Mng nhiu chiu 64
Chng 5: CON TR 71
1. Gii thiu Con tr 71
2. Bin con tr (pointer variables) 72
3. Mt s ví d v con tr 75
4. Cp phát b nh ng 75
5. Con tr void (void pointers) 78
6. Con tr null (Null pointers) 79
7. Con tr và mng 80
8. Mng con tr 81
Chng 6: HÀM 83
1. Khái nim hàm 83
2. Dng tng quát ca hàm 84
3. Các qui tc v phm vi ca hàm 85
4. Tham s hình thc và tham s thc 85
5. Truyn mng vào hàm 88
6. i s ca hàm main 89
7. Lnh return 90
8. qui 92
9. Nguyên m!u hàm (function prototypes) 93
10. Cu trúc ca mt chng trình vit di dng hàm 94
Chng 7: CHUI KÝ T 96
1. Gii thiu Chui 96
2. Khai báo và kh"i to chui 96
3. Nhp chui 97
4. Xut chui 97
5. Mt s hàm th vin thao tác trên chui 97
6. Mt s ví d v chui 98
7. Mng các chui 99
8. Mng con tr n các chui 101
Chng 8: STRUCTURES – ENUM - typedef 105
1. Structures 105
2. Kiu lit kê (Enumerations, enum) 111
3. typedef 112
Chng 9: TP TIN 114
1. Streams và Files 114
2. Streams (dòng nhp xut) 114
3. Files 115
4. Truy xut file ng!u nhiên 124
5. Các stream chun 124
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 4/127
Chng 1
TNG QUAN V NGÔN NG LP TRÌNH C/C++
1. Lch s ca ngôn ng lp trình C/C++
C #c to b"i Dennis Ritchie " Bell Telephone Laboratories vào
n$m 1972 cho phép lp trình viên phát trin các ng dng hiu
qu hn các ngôn ng lp trình hin có ti th%i im ó.
im mnh và mm d&o ca C cho phép các nhà phát trin " Bell
Labs to nên các ng dng phc tp nh h iu hành Unix. Vào
n$m 1983, hc vin chun quc gia M' (American National
Standards Institute - ANSI) thành lp mt tiu ban chun hóa C
#c bit n nh ANSI Standard C. Ngày nay, tt c trình biên
dch C/C++ u tuân theo ANSI Standard C. C++ #c xây dng
trên nn tng ca ANSI Standard C.
C++ là mt ngôn ng lp trình hng i t#ng mà bao hàm ngôn
ng C " trong nó. Trong giáo trình này cha kho sát ph(n lp
trình hng i t#ng ca C++.
2. Phng pháp gii quyt mt bài toán
Mt chng trình máy tính #c thit k gii quyt mt bài toán
nào ó. Vì vy, nhng bc c(n tìm kim l%i gii cho mt bài
toán c)ng ging nh nhng bc c(n vit mt chng trình.
Các bc g*m:
- Xác nh yêu c(u ca bài toán.
- Ngh+ ra mt phng cách (algorithm) tìm l%i gii.
- Thc hin phng cách ó.
- Kim tra kt qu xem l%i gii có úng vi yêu c(u ca bài
toán.
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 5/127
Khi vit mt chng trình trong C/C++, ây là nhng bc #c
ngh:
1. Xác nh mc ích ca chng trình
2. Ngh+ ra thut toán phù h#p gii quyt bài toán (dùng mã
gi, lu *, )
3. Cài t (vit) thut toán dùng ngôn ng lp trình C/C++
4. Thc thi chng trình và kim th (testing).
3. Các b c trong chu trình phát trin chng trình
Chu trình phát trin chng trình (program development cycle) có
nhng bc sau ây. 1. Mt trình son tho v$n bn #c dùng
nhp mã ngu*n (source code). 2. Mã ngu*n #c biên dch
(compile) to nên tp tin i t#ng (object file). 3. Các tp tin
i t#ng #c liên kt (link) to nên tp tin có th thc thi
(executable file). 4. Thc hin (run) chng trình ch, ra chng
trình có làm vic ú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 lp trình
TT.Công Ngh Thông Tin 6/127
3.1. So!n tho mã ngu"n (source code editor)
Mã ngu*n là mt tp các lnh dùng ch, d!n máy tính thc hin
công vic mong mun. Tp tin mã ngu*n #c lu tr vi ph(n
phân loi .c (C) hoc .cpp (C++).
3.2. Biên dch (compile)
Tp tin mã ngu*n #c vit bng nhng t ging ting Anh nên d-
dàng c và hiu. Tuy nhiên, máy tính không th hiu nhng t
này. Máy tính yêu c(u các ch, d!n nh phân (binary) trong dng
thc ca ngôn ng máy (machine language). Trc khi mt
chng trình #c vit bng ngôn ng cp cao nh C/C++ có th
thc thi trên máy tính, nó phi #c biên dch t mã ngu*n sang
mã máy. Vic dch này #c thc hin b"i mt chng trình gi là
trình biên dch (compiler).
Các ch, d!n ngôn ng máy #c to b"i trình biên dch #c gi là
mã i t#ng (object code) và tp tin cha chúng gi là tp tin i
t#ng. Tp tin i t#ng có cùng tên nh tp tin mã ngu*n nhng
có ph(n phân loi .obj.
3.3. T!o tp tin th#c thi (executable files)
C/C++ có mt th vin hàm cha mã i t#ng cho nhng hàm ã
#c to s.n. Nhng hàm này thc hin các tác v th%ng dùng
nh xóa màn hình (clrscr()), nhp mt chui ký t t bàn phím
(gets()), tính c$n bc hai (sqrt()), mà chng trình #c vit có
th s dng mà không phi vit li.
Tp tin i t#ng #c to ra b"i trình biên dch s kt h#p vi mã
i t#ng ca các hàm th vin to nên tp tin thc thi. Quá
trình này #c gi là liên kt (linking), #c thc hin b"i mt
chng trình gi là b liên kt (linker).
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 7/127
3.4. Th#c thi chng trình
Khi chng trình ngu*n #c biên dch và liên kt to nên tp
tin thc thi (có ph(n phân loi .exe), nó có th thc thi trên máy
tính ti du nhc h thng.
Nu chng trình hot ng không úng nh yêu c(u, vn có
th là do li lp trình. Trong tr%ng h#p này, ch,nh sa chng
trình ngu*n, biên dch li và liên kt li to nên phiên bn mi
ca tp tin chng trình.
Quá trình bn bc này #c lp i lp li cho n khi tp tin thc
thi thc hin úng yêu c(u ca bài toán.
4. Kho sát mt chng trình C/C++ n gin
Kho sát mt chng trình n gin dùng xut 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à chng trình n gin nhng nó ã bao hàm nhng thành
ph(n c bn mà mi chng trình C/C++ u có. Vi ý ngh+a ca
tng dòng nh sau:
// my first program in C/C++
ây là dòng chú thích, tt c các dòng bt (u bng hai du // #c
coi là các dòng chú thích, nó không nh h"ng n hot ng ca
chng trình, ch, dùng gii thích mã ngu*n ca chng trình.
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 8/127
#include <iostream.h>
Các lnh bt (u bng du # #c dùng cho các ch, th tin x lý
(preprocessor). Trong ví d này, câu lnh #include báo cho trình
biên dch bit c(n phi gp th vin iostream.h là tp tin header
chun ca C/C++, cha các nh ngh+a v nhp và xut.
int main()
nh ngh+a hàm main(). Hàm main() là im mà tt c các chng
trình C/C++ bt (u thc hin. Nó không ph thuc vào v trí ca
hàm, ni dung ca nó luôn #c thc hin (u tiên khi chng
trình thc thi. Mt chng trình C/C++ u phi t*n ti mt hàm
main(). Hàm main() có th có hoc không có tham s. Ni dung
ca hàm main() tip ngay sau ph(n khai báo chính thc #c t
trong cp du ngoc { }.
cout << "Hello World!";
ây là mt lnh nm trong ph(n thân ca hàm main. cout là mt
dòng (stream) xut chun trong C/C++ #c nh ngh+a trong th
vin iostream.h. Khi dòng lnh này #c thc thi, kt qu là chui
"Hello World!" #c xut ra màn hình. Dòng lnh #c kt thúc
bng du chm phy (;).
getche();
ây là mt hàm th vin dùng ch% nhp mt ký t t bàn phím.
return 0;
Lnh return kt thúc hàm main và tr v giá tr biu thc i sau
nó, trong tr%ng h#p này là 0. ây là mt kt thúc bình th%ng ca
mt chng trình không có li trong quá trình thc hin.
Chng trình trên có th vit li nh sau:
int main() { cout << " Hello World! "; getch(); return 0;}
c)ng cho cùng mt kt qu.
Giáo trình PP lp 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 lp trình viên s dng ghi chú hay mô t
trong các ph(n ca chng trình. Trong C/C++ có hai cách chú
thích:
Chú thích dòng: dùng cp du //. T v trí // n cui dòng #c
xem là chú thích
Chú thích khi (chú thích trên nhiu dòng) dùng cp /* */.
Nhng gì nm gia cp du 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;
}
Kt qu xut ca chng trình là: Hello World! I hate C/C++.
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 10/127
6. C$u trúc ca mt chng trình C/C++
Cu trúc mt chng trình C/C++ bao g*m các thành ph(n nh:
Các ch, th tin x lý, khai báo bin toàn cc, chng trình chính
(hàm main),
Kho sát chng 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;
}
Phn này thng dùng mô
t mc ính chng trình, tác
gi, ngày vit, (Phn không
bt buc)
Khai báo các tp tin th vin
Khai báo prototype ca các
hàm t to
Hàm chính ca chng trình
nh ngha các hàm do ngi
dùng t xây dng
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 11/127
7. Các tp tin th vi%n thông d&ng
ây là các tp tin cha nh ngh+a các hàm thông dng khi lp
trình C/C++. Mun s dng các hàm trong các tp tin header này
thì phi khai báo #include <FileName.h> " ph(n (u ca chng
trình, vi FileName.h là tên tp tin th vin. Các tp tin th vin
thông dng g*m:
stdio.h(C), iostream.h(C++) Tp tin nh ngh+a các hàm vào/ra
chun (standard input/output) g*m các hàm xut d liu
(printf())/cout), nhp giá tr cho bin (scanf())/cin), nhn ký t t
bàn phím (getc()), in ký t ra màn hình (putc()), nhp mt chui ký
t t bàm phím (gets()), xut chui 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 : Tp 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: Tp tin nh ngh+a các hàm toán hc g*m các hàm abs(),
sqrt(), log(), log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(),
exp(), …
alloc.h: Tp tin nh ngh+a các hàm liên quan n vic qun lý b
nh g*m các hàm calloc(), realloc(), malloc(), free(), farmalloc(),
farcalloc(), farfree(), …
io.h: Tp tin nh ngh+a các hàm vào ra cp thp g*m các hàm
open(), _open(), read(), _read(), close(), _close(), creat(), _creat(),
creatnew(), eof(), filelength(), lock(), …
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 12/127
Chng 2
BIU THC
(Expressions)
Biu thc #c to thành t nhng thành t nh d liu và toán t.
D liu có th cha trong bin hoc hng. Toán t trong các ngôn
ng lp trình có cùng ý ngh+a nh trong toán hc. Có nhiu loi
toán t nh toán t gán (=), toán t s hc (+ - * / %), toán t quan
h (== < <= > >= !=), toán t lun lý (&& || !),
1. Kiu d li%u (data types)
C/C++ có n$m kiu d liu c s": ký t (char), s nguyên (int), s
thc (float), s thc có chính xác gp ôi (double), và kiu vô
nh (void). Tt c nhng kiu d liu khác u da trên 5 kiu c
s" này. Kích thc và phm vi ca nhng kiu d liu này có th
thay i tùy theo loi CPU và trình biên dch.
Kiu char #c dùng gi các giá tr ca b mã ASCII
(Amercican Standard Code for Information Interchange). Kiu
char chim 1 byte b nh.
Kích thc ca kiu 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
thc kiu int là 32 bits (4 bytes). Nói chung, tùy thuc môi
tr%ng, kích thc ca kiu int có th khác nhau.
Chun C ch, ra phm vi ti thiu ca kiu d liu s thc (float,
double) là 1E-37 n 1E+37.
Kiu void dùng khai báo hàm không tr v giá tr hoc to nên
các con tr tng quát (generic pointers).
Ngoi tr kiu void, các kiu d liu c s" có th có các t nh
signed, unsigned, long, short i trc nó. Các t này làm thay i
phm vi ti thiu mi kiu c s" có th cha. Bng sau trình bày
tt c các kt h#p h#p l ca kiu d liu vi các t trên.
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 13/127
Kiu d li%u
Kích th c
b'ng bits
Ph!m vi t(i thiu
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 ging nh int
short int hoc short 16 -32,767 to 32,767
unsigned short int 16 0 to 65,535
signed short int 16 ging nh short int
long int hoc long 32 -2,147,483,647 to 2,147,483,647
signed long int 32 ging 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 ca các bin, hng, hàm, #c gi là nh
danh. Nhng nh danh này có th là 1 hoc nhiu ký t. Ký t (u
tiên phi là mt ch cái hoc du _ (underscore), nhng ký t theo
sau phi là ch cái, ch s, hoc du _. Sau ây là nhng nh
danh úng và sai:
úng Sai
count 1count
test23 hi!there
high_balance high balance
C/C++ phân bit ký t HOA và th%ng. Vì vy, count, Count, và
COUNT là 3 danh nh khác nhau.
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 14/127
nh danh không #c trùng vi các t khóa (keywords) và không
nên có cùng tên nh các hàm th vin ca C/C++.
3. T) khóa (keywords)
Là nhng t ã #c dành riêng b"i ngôn ng lp trình cho nhng
mc ích riêng ca nó. Không #c dùng t khóa t tên cho
nhng nh danh nh bin, hng, hàm, Tt 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 ca 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. Bin (variables)
Mt bin là nh danh ca mt vùng trong b nh dùng gi mt
giá tr mà có th b thay i b"i chng trình. Tt c bin phi
#c khai báo trc khi #c s dng. Dng khai báo bin tng
quát là:
type variableNames;
type: phi là mt trong các kiu d liu h#p l.
variableNames: tên ca mt hay nhiu bin phân cách nhau b"i
du phy.
Ngoài ra, ta có th va khai báo va kh"i to giá tr ban (u cho
các bin dùng cú pháp sau:
type varName1=value, , varName_n=value;
Ví d:
int i, j; // khai báo 2 bin i, j kiu int
// khai báo ba bin day, month và year kiu short int
short day, month, year;
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 15/127
char ch; // khai báo bin ch kiu ký t
// khai bao 4 bien kieu float, gán average giá tr 0
float mark1, mark2, mark3, average = 0;
Lu ý: Khi khai báo bin nu không cung cp giá tr khi to thì giá tr
ca bin là cha xác nh. Do ó, vic dùng nhng bin này trong các
biu thc là vô ngha.
Bin #c khai báo ti ba ni: bên trong hàm, trong nh ngh+a
tham s ca hàm, và bên ngoài tt c hàm. Nhng bin này #c
gi l(n l#t là bin cc b, các tham s hình thc, và bin toàn cc.
4.1. Bin c&c b (local variables)
Nhng bin #c khai báo bên trong mt hàm gi là bin cc b.
Các bin cc b ch, #c tham chiu n ch, b"i nhng lnh nm
trong khi (block) có khai báo bin. Mt khi bt (u vi du { và
kt thúc vi du }.
Bin cc b ch, t*n ti trong khi khi cha nó ang thc thi và b
hy khi khi cha nó thc 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;
}
Bin nguyên x #c khai báo 2 l(n, mt trong hàm func1() và mt
trong hàm func2(). Bin x trong func1() không có quan h gì vi
bin x trong func2() b"i vì mi x ch, t*n ti trong khi cha nó.
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 16/127
4.2. Các tham s( hình th*c (formal parameters)
Nu mt hàm có nhn các i s truyn vào hàm thì nó phi khai
báo các bin nhn giá tr ca các i s khi hàm #c gi.
Nhng bin này gi là các tham s hình thc. Nhng bin này
#c i x ging nh các bin cc 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 thc và #c i x
nh bin cc b total ca hàm sum. Lu ý bin i #c khai báo
trong cu trúc lp for nên nó là bin cc b ch, t*n ti trong cu
trúc for mà thôi. Nhng lnh nm ngoài cu trúc for s không tham
chiu #c bin i này.
4.3. Bin toàn c&c (global variables)
Bin toàn cc có phm vi là toàn b chng trình. Do ó, tt c các
lnh có trong chng trình u có th tham chiu n bin toàn
cc. Bin toàn cc #c khai báo bên ngoài tt c hàm.
Kho sát chng 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 lp trình
TT.Công Ngh Thông Tin 17/127
void decrease()
{ gVar = gVar -1;}
Sau khi thc thi chng trình trên, kt qu xut 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 ca bin có th thay i trong sut quá trình thc thi
chng trình. giá tr ca bin không b thay i, ta t trc
khai báo bin t khóa const. T khi bin ã có giá tr, giá tr này s
không bao gi% b thay i b"i bt k/ lnh nào trong chng trình.
Thông th%ng ta dùng ch HOA t tên cho nhng bin này.
Ví d: khai báo hng nguyên MAX có giá tr 100
const int MAX = 200;
6. H'ng (constants)
Hng là nhng giá tr c nh (fixed values) mà chng trình
không th thay i. Bt k/ kiu d liu nào c)ng có hng tng
ng. Hng còn #c gi là literals.
Hng ký t #c bao quanh b"i cp du nháy n. Ví d 'a' và '%'
là nhng hng ký t.
Hng nguyên là nhng s mà không có ph(n thp phân. Ví d 100
và -100 là nhng hng nguyên.
Hng s thc yêu c(u mt du chm thp phân phân cách ph(n
nguyên vi ph(n thp phân. Ví d 123.45 là mt hng s thc.
Ví d v cách vit các loi hng s:
Kiu 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 hoc L " cui
unsigned int 10000U, 987u, 40000U Có ký t u hoc U " cui
float 123.23f, 4.34e-3F Có ký t f hoc F " cui
double 123.23, 1.0, 0.9876324
long double 1001.2L Có ký t l hoc L " cui
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 18/127
7. H'ng chu,i ký t# (string constants)
C/C++ cung cp mt lai hng khác gi là chui. Mt chui là mt
tp các ký t #c bao quanh b"i cp du nháy ôi.
Ví d, "This is a string" là mt chui.
Lu ý phân bit hng chui và hng ký t. Mt hng ký t là mt
ký t bao quanh b"i cp du nháy n. Do ó, 'a' là hng ký t
nhng "a" là hng chui.
8. H'ng ký t# -c bi%t (escape sequences)
C/C++ có nhng hng ký t c bit mà không th biu di-n nh
nhng hng ký t thông th%ng. Nhng hng này còn gi là escape
sequences. Sau ây là danh sách các hng c bit ó:
Mã Ý ngh.a
\b Lùi sang trái 1 ký t
\f V (u dòng
\n Sang dòng mi
\r Xung dòng
\t Tab theo chiu ngang
\" Du nháy ôi
\' Du nháy n
\0 Null
\\ Du \
\v Tab theo chiu ng
\a Cnh báo
\? Du hi
\N Hng bát phân (vi N là mt hng bát phân)
\xN Hng thp lc phân (vi N là mt hng thp lc 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 lp trình
TT.Công Ngh Thông Tin 19/127
9. Toán t (operators)
C/C++ có bn loi toán t: s hc (arithmetic), quan h
(relational), lun lý (logical), và toán t trên bit (bitwise).
9.1. Toán t gán (assignment operator)
Dng tng quát ca toán t gán là
variableName = expression;
variableName: Tên bin
expression: Biu thc
Lu ý, phía bên trái du bng phi là mt bin hay con tr và
không th là hàm hay hng.
Ví d:
total = a + b + c + d;
9.2. Chuyn /i kiu trong câu l%nh gán
Khi nhng bin ca mt kiu kt h#p vi nhng bin ca mt kiu
khác thì mt s chuyn i kiu xy ra. i vi câu lnh gán, giá
tr ca biu thc bên phi du bng #c t ng chuyn thành
kiu d liu ca bin bên trái du bng.
Ví d:
int i=100;
double d = 123.456;
Nu thc thi lnh
i = d;
thì i s có giá tr là 123 vì 123.456 s t ng chuyn thành s
nguyên nên b ct b ph(n thp phân. S chuyn i kiu này gi
là chuyn i kiu b mt mát thông tin.
Nu thc thi lnh
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 20/127
d = i;
thì d s có giá tr là 100.0. S chuyn i kiu này gi là chuyn
i kiu không mt mát thông tin.
Tóm li, khi chuyn i kiu t kiu d liu có min giá tr nh
sang kiu d liu có min giá tr ln hn thì vic chuyn i kiu
này là an toàn vì không b mt mát thông tin. Th t t$ng d(n t
kiu d liu có min giá tr nh n kiu d liu có min giá tr ln
là char
int
long
float
double.
Khi chuyn i kiu d liu có min giá tr ln sang kiu d liu
có min giá tr nh hn thì vic chuyn i kiu này là không an
toàn vì có th mt mát thông tin. Th t gim d(n t kiu d liu
có min giá tr ln n kiu d liu có min 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;
Kho sát các lnh 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 lp 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 lp trình
TT.Công Ngh Thông Tin 22/127
Kt lun: Tr%ng h#p (1) và (3): mt mát thông tin. Tr%ng h#p
(4) không mt mát thông tin.
10. Các toán t s( h0c (arithmetic operators)
Các toán t s hc g*m: + (cng), - (tr), * (nhân), / (chia), và %
(ly ph(n d ca phép chia nguyên).
Khi t s và m!u s ca phép chia là s nguyên thì ó là phép chia
nguyên nên ph(n d ca phép chia nguyên b ct b. Ví d, 5/2 thì
kt qu là 2.
Toán t ly ph(n d % (modulus operator) ch, áp dng vi s
nguyên và tr v ph(n d. Ví d, 7%2 thì kt 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 lp 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 rt th%ng dùng là ++ và Toán t ++
cng 1 n toán hng ca nó và toán t thì tr 1 t toán hng
ca nó.
Ví d:
x++; // tuong duong x = x + 1;
x ; // tuong duong x = x - 1;
Toán t ++ và có th t phía trc (prefix) hoc phía sau
(postfix) toán hng. S khác nhau ca 2 tr%ng h#p này là khi toán
t ++ và ng trc toán hng, hành ng t$ng và gim trên
toán hng #c thc hin trc, sau ó giá tr mi ca toán hng s
dùng tham gia vào vic nh tr ca biu thc.
Ví d: Kho sát on lnh sau
int x = 100;
int n,m;
Nu thc hin lnh:
n = ++x + 1; // n s có giá tr là 102 (1)
Nu thc hin lnh:
n = x++ + 1; // n s có giá tr là 101 (2)
Sau khi lnh (1) hay (2) #c thc thi xong thì x có giá tr là 101
Tng t, nu thc hin lnh:
m = x + 1; // n s có giá tr là 100 (3)
Nu thc hin lnh:
m = x + 1; // n s có giá tr 101 (4)
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 24/127
Sau khi lnh (3) hay (4) #c thc thi thì x có giá tr là 99
Khi các toán t s hc xut hin trong mt biu thc, thì u tiên
thc hin nh sau:
Cao nht ++ – –
– (du âm)
* / %
Thp nht + –
Nhng toán t trên cùng hàng thì có cùng u tiên. Khi biu thc
có nhiu toán t có cùng u tiên thì th t nh tr biu thc là
t trái sang phi.
12. Toán t quan h% & lun lý (relational & logical operators)
Toán t quan h liên quan n s quan h ca hai giá tr. Toán t
lun lý liên quan n s ni kt ca nhng quan h.
Các biu thc mà dùng toán t quan h và toán t lun lý #c
nh tr là true (úng) hoc 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
> Ln hn
>= Ln hn hay bng
< Nh hn
<= Nh hn hay bng
== Bng (có 2 du =)
!= Không bng
Ví d v toán t quan h:
100 < 200 // true
200 == 300 // false
300 != 400 // true
Giáo trình PP lp trình
TT.Công Ngh Thông Tin 25/127
400 >= 500 // false
Các toán t lun lý:
Operator Action Ý ngh.a
&& AND Và
|| OR Hoc (có 2 du |)
! NOT Ph nh
Bng chân tr ca các toán t lun 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à lun lý có u tiên thp hn toán t s
hc. Trong mt biu thc có th có nhiu loi toán t, th t
nh tr biu thc da vào u tiên ca toán t. thay i th
t nh tr trong mt biu thc, dùng cp du ngoc n () nh
trong các biu thc s hc.
u tiên ca toán t quan h và lun lý:
Cao nh$t !
> >= < <=
== !=
&&
Th$p nh$t ||
Ví d: biu thc (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