tài liệu tham khảo cho những người đang cần những kiến thức cơ bản về lập trình C++ Trong bộ môn Cơ sở lập trình CỦA TIẾN SĨ KIM. Chúc các bạn thành công. Xin chào và hẹn gặp lại các bạn trong những tài liệu tiếp theo.
Trang 1[3] Ph m V n Dt, “K thu t l p trình C - C s và nâng cao”, NXB khoa h c k/ thu t, 2007
[4] Tr n &an Th ,“Ngôn ng l p trình C t p 1&2”, Tr ng &H KHTN &HQG TPHCM, 2005
[5] Tr n V n H o, Hu2nh Minh Trí, Phan T n Qu c, “Giáo trình tuy n t p các bài t p lâp trình
c n b n”, Tr ng & i H c Sài Gòn, 2011
Trang 2Tìm chu i s2 trong chu i s1 tr v v trí chu i s2 trong chu i s1
int atoi(char *s);
&)i chu i s thành s ki u int
int atol(char *s);
&)i chu i s thành s ki u long
int atof(char *s);
&)i chu i s thành s ki u float
void flushall();
Xoá vùng m bàn phím, l nh này th ng c s d ng tr c các l nh nh p
li u nh gets ho c scanf
H to trên màn hình nh n i m g c trên bên trái làm i m g c, tr c hoành là tr c n"m ngang ch y t trái sang ph i, tr c tung là tr c th ng ng t trên xu ng d i Các t a màn hình th ng c ký ki u là x và y, v i x là ch s c t; còn y ch s hàng Góc trái bên trên
c a màn hình có t a (1:1); góc ph i bên d i có t a (80:25) – gi i h n này tùy thu c l i màn hình Ta có th di chuy n con tr' t i m t v trí m i trên màn hình b"ng l nh gotoxy(x,y)
Giá tr b ng màu
BLACK = 0
BLUE = 1
GREEN = 2
CYAN = 3
RED = 4
MAGENTA = 5
BROWN = 6
LIGHTGRAY = 7
DARKGRAY = 8
LIGHTBLUE = 9
LIGHTGREEN = 10
LIGHTCYAN = 11
LIGHTRED = 12
LIGHTMAGENTA = 13 YELLOW = 14
WHITE = 15
BLINK = 128 Cách ghi giá tr màu là chu i in hoa nh trên hay s t ng ng là t ng ng
L i nói u
C s l p trình là h c ph n u tiên, óng vai trò quan tr ng i v i các sinh viên thu c
các ngành Công ngh thông tin, Toán ng d ng, i n t vi n thông,… C s l p trình nh m
cung c p ki n th c n n t ng và các k n ng th c hành v l p trình cho sinh viên; C s l p
trình nh m giúp sinh viên h c t t các h c ph n v l p trình ti p theo Ngoài ra, nó c ng là n i
dung quan tr ng trong kh i ki n th c các k thi hoàn ch nh i h c và thi cao h c ngành
công ngh thông tin
Giáo trình c s l p trình này trình bày các v n Thu t toán, M u v ngôn ng l p
trình C/C++, C u trúc i u khi n, Ch ng trình con, quy, M ng, M t s ki u d li u có
c u trúc Giáo trình chia thành 7 ch ng g m các n i dung ki n th c theo c ng chi ti t
h c ph n C s l p trình c!a tr ng i h c Sài Gòn, kèm theo các thi m"u M#i ch ng
g m 3 ph n:
Ph n lý thuy t: $c trình bày ng%n g n, có các ví d minh ho
Ph n bài t p: G m nhi u bài t p $c chia làm hai m c c b n và luy n t p nâng
cao, bài t p có ánh d u * là bài t p khó dành cho sinh viên luy n t p thêm
Giáo trình này $c biên so n làm tài li u gi ng d y cho h c ph n C s l p trình
h i h c và cao &ng Quy n giáo trình này c ng có th làm tài li u tham kh o cho các giáo
viên ang gi ng d y ki n th c l p trình c n b n b c ph' thông, và giúp cho sinh viên t h c
có k t qu
Chúng tôi trân tr ng gi i thi u v i b n c quy n giáo trình C s l p trình này và hy
v ng r ng nó s( giúp cho vi c gi ng d y và h c t p môn C s l p trình $c thu n l$i h n
Cu i cùng, chúng tôi xin g i l i c m n chân thành n các ng nghi p trong khoa
công ngh thông tin tr ng i H c Sài Gòn ã có nhi u óng góp quý báu, ã cùng chúng
tôi chia s( n i dung t p bài gi ng C s l p trình này trong su t th i gian qua
Trang 3Ch ng 1
THU T TOÁN
Trong ph m vi tài li u này, bài toán c quan ni m là vi c nào ó ta mu n máy tính
th c hi n, ch ng h n vi t m t dòng ch ra màn hình, gi i ph ng trình b c hai, qu n lí i m trong tr ng h c v.v…
Khi dùng máy tính gi i bài toán, ta c n quan tâm n hai y u t : a vào máy thông tin gì (Input) và c n l y ra thông tin gì (Output) Do ó phát bi u m t bài toán ta c n ph i
ch rõ Input và Output c a bài toán ó
Ví d 1.1:
Gi i ph ng trình b c nh t ax + b = 0
Input: Các giá tr th c a,b
Output: Nghi m là giá tr x ho c thông báo không có nghi m
Ví d 1.2:
Qu n lí l ng trong m t doanh nghi p
Input: Thông tin cá nhân c a t ng nhân viên trong doanh nghi p Output: Thông tin c n khai thác v m t nhân viên, m t phòng ban, hay toàn
doanh nghi p
Kh n ng khai thác máy tính ph thu c r t nhi u vào s hi u bi t c a ng i s d ng
Vi c gi i bài toán trên máy tính c ti n hành qua các b c sau:
unsigned *strlen(const char *str);
Xác nh chi u dài c a chu i str
char* strcpy(char *dest, const char * src);
Sao chép n i dung trong src vào trong dest Hàm tr v con tr' tr' t i a ch
u c a chu i ích (con tr' dest)
int strcmp(char *s1, char *s2);
(so sánh có phân bi t ch hoa và ch th ng)
Tr v k t qu so sánh hai chu i s1 và s2
N u giá tr tr v > 0 thì chu i s1 ch a chu i s1
N u giá tr tr v < 0 thì chu i s2 ch a chu i s1
N u giá tr tr v = 0 thì chu i s2 gi ng chu i s1
int stricmp(char *s1, char *s2);
(so sánh không phân bi t ch hoa và ch th ng)
Trang 4Ki m tra c là ch s hay không ?
int isalower (int ct);
Ki m tra c là ch cái th ng hay không ?
B mã ASCII g$m 256 ký t c phân b nh sau:
-32 ký t u tiên là các ký t i u khi n không in c nh ký t enter (mã 13), ký tESC (mã 27), 32 là ký t kho ng tr(ng
-Các mã ASCII 33-47,58-64,91-96 và 123-127 là các ký t c bi t nh d u ch m, d u ph!y, d u cách, d u ngo c, d u móc, d u h'i,…
-Các mã ASCII 48-57 là 10 ch s -Các mã ASCII 65-90 là các ch cái hoa t A n Z
-Các mã ASCII 97-122 là các ch cái th ng t a n z
M i bài toán có th gi i b"ng nhi u ph ng pháp khác nhau Vi c ch n ph ng pháp
nào cho bài toán c n gi i quy t ph thu c ng i l p trình, tuy nhiên m t ph ng pháp t t là
ph ng pháp v a gi n d và cho hi u qu cao khi gi i bài toán ó
B c 3: Thi t k thu t toán
Thi t k thu t toán ph thu c vào b c l a ch n ph ng pháp gi i M i ph ng pháp
gi i có th t ng ng v i nhi u thu t toán khác nhau B c thi t k thu t toán là b c quan
tr ng nh t gi i m t bài toán M i thu t toán ch gi i m t bài toán nào ó, nh ng có th có
nhi u thu t toán khác nhau cùng gi i m t bài toán C n ch n m t thu t toán phù h p gi i
bài toán ã cho Thu t toán có th c bi u di#n b"ng ngôn ng t nhiên, mã gi , l u $-s $
kh i, hay b"ng m t ngôn ng l p trình c th
Khi l a ch n thu t toán ng i ta th ng quan tâm n các tài nguyên nh th i gian th c
thi trên máy tính, s l ng b nh c n dùng, Hai tài nguyên v th i gian và b nh th ng
mâu thu!n nhau, nói cách khác yêu c u v th i gian và b nh là t% l ngh ch nhau &i u này
òi h'i ng i l p trình ph i cân nh(c gi a hai yêu c u này Trong các lo i tài nguyên, ng i ta
quan tâm nhi u nh t n th i gian vì ó là d ng tài nguyên không tái t o c
Trong th c t , khi l a ch n thu t toán ng i ta còn quan tâm t i vi c vi t ch ng trình
cho thu t toán ó c d# dàng
Vi c thi t k và l a ch n thu t toán gi i m t bài toán c th c n c n c vào l ng tài
nguyên mà thu t toán òi h'i và l ng tài nguyên th c t cho phép
Vi c vi t ch ng trình là m t t)ng h p h u c gi a vi c l a ch n c u trúc d li u và
ngôn ng l p trình di#n t úng thu t toán
Khi vi t ch ng trình ta c n l a ch n m t ngôn ng b c cao, ho c h p ng , ho c
ngôn ng máy, ho c m t ph n m m chuyên d ng thích h p cho thu t toán ã l a ch n
Sau khi c vi t xong, ch ng trình v*n còn có th có nhi u l i khác nhau Các l i
c phân làm hai lo i là các l i v cú pháp và các l i v ng ngh+a
Vi t ch ng trình trong ngôn ng nào ta c n ph i tuân theo úng quy nh cú pháp c a
ngôn ng ó Ch ng trình d ch có th giúp ta phát hi n và thông báo y các sai sót v m t
cú pháp
Trang 5Ch ng trình có th không cho k t qu úng m c dù ã không còn l i v cú pháp Các
l i này là l i v ng ngh+a & phát hi n các l i v ng ngh+a, c n ph i th ch ng trình b"ng cách th c hi n nó v i m t s b Input tiêu bi u ph thu c vào c thù c a bài toán Các b Input này g i là các b Test N u có sai sót, ta ph i s a ch ng trình r$i th l i Quá trình này c g i là hi u ch nh ch ng trình
B c 6: Vi t tài li u
Tài li u ph i mô t chi ti t bài toán, thu t toán, ch ng trình, k t qu th nghi m
và h ng d*n s d ng Tài li u này r t có ích cho ng i s d ng ch ng trình và cho vi c
xu t nh ng kh n ng hoàn thi n thêm
Các b c trên có th l p i l p l i nhi u l n cho n khi mà ta cho là ch ng trình
ã làm vi c úng (n
Hình 1.1 Các b c gi i bài toán b"ng máy tính
! " #$ %& $'
Thu t toán là m t chu i các ch d*n (hay các qui t(c) c n th c hi n theo t ng b c xác
nh nh"m gi i quy t m t v n , hay bài toán Thu t toán có th c mô t b"ng ngôn ng tnhiên, mã gi , s $, ho c th m chí là m t ngôn ng l p trình
Tr v s nguyên trong kho ng 0 n n-1
unsigned int rand();
Cho m t giá tr ng*u nhiên trong kho ng 1 32767
Trang 6void gotoxy(int x, int y);
& a i m nháy n to x,y trên màn hình
void textcolor(int color)
u vào (Input): M i thu t toán có th không có ho c có m t s d li u ban u
u ra (Output): M i thu t toán ph i có ít nh t m t d li u k t qu
Tính xác +nh: Các ch d*n, qui t(c m i b c ph i rõ ràng
Tính k t thúc: Thu t toán ph i d ng sau m t s h u h n b c
Tính úng %n: Thu t toán ph i cho ra k t qu chính xác theo yêu c u c a bài
toán
Tính t'ng quát: Thu t toán ph i áp d ng c cho các bài toán cùng lo i
Tính kh thi: M i thu t toán ph i có th th c hi n thành công trong kho ng
th i gian h u h n
Nh ng thu t toán có các c tr ng trên g i là các thu t toán có l i gi i úng (các thu t
toán cho l i gi i g n úng nh : x p x , ng*u nhiên, heuristic, metaheuristic, th ng c g i
là các thu t gi i, và không c c p trong giáo trình này)
Trang 7Cho dãy a g$m n s nguyên d ng ao,a1,a2, ,a n-1 Vi t m t ch ng trình hoàn ch nh th c hi n
Trang 8#$ KI(M TRA TH)C HÀNH H*C PH+N C% S& L'P TRÌNH (90 phút- s 17)
Cho m ng có n phân s , gi thi t t s và m*u s c a m i ph n s là các s nguyên d ng CÂU 1 (2 i m)
10 2/3 8/6 10/12 7/2 10/4 5/2 7/10 13/11 8/12 4/6 OUTPUT
Cau 1 : 2/3 4/3 5/6 7/2 5/2 5/2 7/10 13/11 2/3 2/3 Cau 2 : 3
Cau 3 : 5 Cau 4 : 7/2 5/2 13/11
Trang 9test 1 0 0 Ph ng trinh v s nghi m
test 3 1 3 Ph ng trinh có nghi m duy nh t x=3 test 4 1 -4 Ph ng trinh có nghi m duy nh t x=4
sai
#$ KI(M TRA TH)C HÀNH H*C PH+N C% S& L'P TRÌNH (90 phút- s 16)
Cho m ng m t chi u a ch a n s nguyên d ng (ki u unsigned long)
Hãy th c hi n các công vi c sau:
Trang 10#$ KI(M TRA TH)C HÀNH H*C PH+N C% S& L'P TRÌNH (90 phút- s 15)
Cho m ng 1 chi u a ch a n s nguyên d ng (ki u unsigned long)
Hãy th c hi n các công vi c sau:
CÂU 1 (2 i m) Tìm giá tr l n nh t, giá tr nh' nh t c a m ng a
CÂU 2 (2 i m) Tìm t ng các ch s c a t t c các s c a m ng a
CÂU 3 (2 i m) Tìm s nguyên t l n nh t c a m ng a; n u m ng a không có s nguyên t nào thì xu t giá tr
10
101 11 33 44 55 66 77 88 97 102 OUTPUT
Cau 1: 102 11 Cau 2: 89 Cau 3: 101 Cau 4: 3
& u tiên s, th c hi n <bi u th c 1>, sau ó ki m tra < i u ki n> N u < i u ki n> là
úng thì s, th c hi n <công vi c> r$i n th c hi n <bi u th c 2>; sau khi th c hi n xong <bi u
th c 2> thì c u trúc này quay tr l i ki m tra < i u ki n> và b(t u m t vòng l p m i,…c
nh th n khi < i u ki n> nh n giá sai thì c u trúc l p này s, k t thúc
L u ý:
<bi u th c 1> th ng là phép gán giá tr+ kh i u c!a bi n i u khi n vòng l-p, <bi u
th c 2> th ng là phép gán thay 'i giá tr+ c!a bi n i u khi n vòng l-p, còn < i u ki n>
th ng là m t phép so sánh bi n i u khi n vòng l-p v i s l n l-p Trong quá trình l-p l i
này, <công vi c> n m t lúc nào ó ph i nh n giá tr+ sai vòng l-p k t thúc
sai úng
Trang 11what if it can not buy happiness
do time on a man who is not willing to waste their time on you
it yourself that makes you happy or unhappy
a someone who reaches for your hand and touches your heart
CAU 5:
buy can good happiness if is it money not what
a do is man not not on on their time time to waste waste who willing you your
happy in is is it makes or that unhappy what you yourself
a and for friend hand heart is reaches someone touches true who your your
H;T
Trang 12#$ KI(M TRA TH)C HÀNH H*C PH+N C% S& L'P TRÌNH (90 phút- s 14)
VI;T CH<=NG TRÌNH HOÀN CH>NH TH?C HI@N CÁC YÊU CAU SAU:
Cho file THI.INP có nhi u chu i, m i chu i trên m t dòng, m i chu i ch a các ký t ch cái
th ng ti ng Anh và kho ng tr(ng, gi a các t có úng m t kho ng tr(ng, u và cu i m i chu i không có kho ng tr(ng
Hãy l p trình th c hi n các công vi c sau:
what good is money if it can not buy happiness
do not waste your time on a man who is not willing to waste their time on you
it is what is in yourself that makes you happy or unhappy
a true friend is someone who reaches for your hand and touches your heart THI.OUT
CAU 1:
do not waste your time on a man who is not willing to waste their time on you
77 CAU 2:
N u < i u ki n> là úng thì s, th c hi n <công vi c>, sau khi th c hi n xong <công
vi c> thì s, quay tr l i ki m tra < i u ki n> và b(t u m t vòng l p m i,…c nh v y vòng
l p ti p t c n khi nào < i u ki n> nh n giá tr sai thì k t thúc
Rõ ràng v i c u trúc này thì trong <công vi c> ph i có m t giai o n mà ó < i u
ki n> ph i mang giá tr sai vòng l p k t thúc nh ã phân tích trên
úng
i u ki n
sai
Trang 13happiness buy not can it if money is good what
you on time their waste to willing not is who man a on time your waste not do
unhappy or happy you makes that yourself in is what is it
heart your touches and hand your for reaches who someone is friend true a
Trang 14#$ KI(M TRA TH)C HÀNH H*C PH+N C% S& L'P TRÌNH (90 phút- s 13)
VI;T CH<=NG TRÌNH HOÀN CH>NH TH?C HI@N CÁC YÊU CAU SAU:
Cho file THI.INP có nhi u chu i, m i chu i trên m t dòng, m i chu i ch a các ký t ch cái
th ng ti ng Anh và kho ng tr(ng, gi a các t có úng m t kho ng tr(ng, u và cu i m i chu i không có kho ng tr(ng
Hãy l p trình th c hi n các công vi c sau:
CÂU 1 (2.0 ):
& m xem file THI.INP có t t c bao nhiêu t ?
CÂU 2 (2.0 ):
Tìm t n s xu t hi n c a m i ký t (khác kho ng tr(ng) trong file THI.INP? (Ký t a xu t
hi n bao nhiêu l n ? Ký t b xu t hi n bao nhiêu l n ? )
K t qu ghi vào file THI.OUT theo c u trúc nh minh h a b test tham kh o sau
BB TEST THAM KHCO THI.INP
what good is money if it can not buy happiness
do not waste your time on a man who is not willing to waste their time on you
it is what is in yourself that makes you happy or unhappy
a true friend is someone who reaches for your hand and touches your heart THI.OUT
CAU 1:
54 CAU 2:
công vi c
Trang 16#$ KI(M TRA TH)C HÀNH H*C PH+N C% S& L'P TRÌNH (90 phút- s 12)
VI;T CH<=NG TRÌNH HOÀN CH>NH TH?C HI@N CÁC YÊU CAU SAU:
Cho file THI.INP ch a các s nguyên trong ph m vi 0 n 99999 Các s cách nhau ít nh t m t kho ng tr(ng
CÂU 1 (2.0 )
THI.INP có bao nhiêu s chính ph ng ? Bao nhiêu s hoàn ch nh ? Bao nhiêu s Armstrong
? Bao nhiêu s nguyên t ? Bao nhiêu s i x ng ?
CÂU 2 (2.0 )
Trong THI.INP tìm s chính ph ng l n nh t, s hoàn ch nh l n nh t, s Armstrong l n nh t,
s nguyên t l n nh t, s i x ng l n nh t (s có tính ch t nào không c tìm th y thì giá tr
THI.INP có bao nhiêu b 3 s x,y,z (x < y < z) th'a mãn x2 + y2 = z2 ?
K t qu câu 1 g$m 5 s nguyên c ghi trên m t dòng; là k t qu t ng ng tìm c
K t qu câu 2 g$m 5 s nguyên c ghi trên m t dòng; là k t qu t ng ng tìm c
K t qu câu 3 g$m 2 s nguyên c ghi trên m t dòng; là k t qu t ng ng tìm c
K t qu câu 4 g$m 1 s nguyên; là k t qu t ng ng tìm c
K t qu câu 5 g$m 1 s nguyên; là k t qu t ng ng tìm c
K t qu ghi vào file THI.OUT
BB TEST THAM KHCO THI.INP
Trang 17Mô t ho t ng
N u < i u ki n> là úng thì s, th c hi n <công vi c 1>, ng c l i n u < i u ki n> là sai thì <công vi c 2> s, c th c hi n
else // b=0 và c-0
cout<<”Pt có vô nghi m”;
else // a=0 và b-0 {
else // Delta>=0
if (Delta=0) { x=-b/(2*a);
cout << “Pt có nghi m kép: ”<<x;
} else
Trang 18#$ KI(M TRA TH)C HÀNH H*C PH+N C% S& L'P TRÌNH (90 phút- s 11)
VI;T CH<=NG TRÌNH HOÀN CH>NH TH?C HI@N CÁC YÊU CAU SAU:
Cho file THI.INP ch a các s nguyên trong ph m vi 0 n 99999 Các s cách nhau ít nh t m t kho ng tr(ng
CÂU 1 (2.0 )
S nguyên t Palindrome là s mà khi vi t các ch s c a nó theo chi u t trái qua ph i hay t
ph i qua trái thì ta cùng c m t k t qu Ví d 2, 3, 151, 19891, 19991 là các s nguyên tPalindrome & m xem file THI.INP có bao nhiêu s nguyên t ? Bao nhiêu s nguyên tPalindrome?
S nguyên t i x ng là m t s nguyên t b"ng trung bình c ng c a hai s nguyên t li n tr c
và li n sau nó V i là s nguyên t th n, m t s nguyên t là i x ng khi tho :
& m xem file THI.INP có bao nhiêu s nguyên t i x ng ?
CÂU 4 (2.0 )
& m xem file THI.INP có bao nhiêu s nguyên t khác nhau (m i giá tr nguyên t ch c tính là m t l n)
CÂU 5 (2.0 )
S Mersenne là s bi u di#n c d i d ng 2n − 1 S nguyên t Mersenne là s th'a hai tính
ch t: là s Mersenne và là s nguyên t Ví d 31 là s nguyên t Mersenne vì 31 = 25 − 1, và
31 là s nguyên t L u ý r"ng, trong bi u di#n s Mersenne, n u n là s nguyên t thì 2 n – 1 là
s nguyên t Mersenne & m xem file THI.INP có bao nhiêu s nguyên t Mersenne ?
K t qu ghi vào file THI.OUT theo c u trúc nh minh h a b test tham kh o sau
BB TEST THAM KHCO THI.INP
& u tiên s, th c hi n <bi u th c 1>, sau ó ki m tra < i u ki n> N u < i u ki n> là
úng thì s, th c hi n <công vi c> r$i n <bi u th c 2>; sau khi th c hi n xong <bi u th c 2>
thì c u trúc này quay tr l i ki m tra < i u ki n> và b(t u m t vòng l p m i,…c th v y
n khi < i u ki n> nh n giá tr sai thì c u trúc l p này s, k t thúc
N u < i u ki n> là úng thì s, th c hi n <công vi c>, sau ó quay tr l i th c hi n
< i u ki n> Vòng l p while này s, k t thúc khi < i u ki n> là sai
Trang 19<công vi c>;
} while (< i u ki n>);
Tr c h t <công vi c> s, c th c hi n, sau ó ki m tra < i u ki n> N u < i u ki n>
là úng thì quay tr l i th c hi n <công vi c> và b(t u m t vòng l p m i Vòng l p do while này s, k t thúc khi < i u ki n> nh n giá tr sai
Ví d 1.13:
Vi t ch ng trình ki m tra password (s d ng ngôn ng s mã gi )
do { cin>>p;
if (p - password) cout<< “B n ã nh p sai password Hãy nh p l i!!”
Cho m ng g$m n s nguyên d ng Hãy th c hi n các yêu c u sau:
a.Ki m tra xem trong m ng có t$n t i s chính ph ng nào hay không ? N u có tr v giá tr 1,
n u không có tr v giá tr 0
b.Tìm k giá tr khác nhau l n nh t c a m ng
c.Hãy tìm h ng c a các ph n t
CÂU 4 (3 i m)
Cho file v n b n songuyen.inp ch a các s nguyên d ng
c & nh ngh+a s i x ng là s mà khi vi t các ch s c a nó theo chi u ng c l i thì ta c
chính s ó; ch ng h n 6, 131, 1991 là các s i x ng & m xem file songuyen.inp ch a
bao nhiêu s i x ng ?
d & m xem trong file songuyen.inp có bao nhiêu s v a là s nguyên t v a là s i x ng ?
K t qu xu t ra file songuyen.out ghi hai s nguyên là k t qu tìm c
Trang 20c.Tìm các c p s nguyên t sinh ôi trong dãy (là các c p s mà kho ng cách giá tr c a chúng
a Tìm s l n nh t và s l n th nhì trong file songuyen.inp
b S nguyên t x c g i là s nguyên t i x ng n u nó b"ng trung bình c ng c a hai snguyên t k tr c (ký hi u là p) và k sau c a nó (ký hi u là q), t c là p+q=2*x & m xem
trong file songuyen.inp có bao nhiêu s nguyên t i x ng ? Ghi k t qu vào file ketqua.out g$m hai dòng:
-Dòng th nh t ghi s l n nh t và s l n th nhì
-Dòng th hai ghi s l ng s nguyên t i x ng tìm c
Ví d : songuyen.inp
n ph c t p không gian c a thu t toán & ph c t p th i gian và không gian c a m t
thu t toán là m t v n h t s c quan tr ng i v i các thu t toán & ph c t p th i gian c a
m t thu t toán có th là m t micro giây, m t phút, m t n m ho c m t t n m, là h t s c
quan tr ng vì i u này nói lên tính kh thi c a m t thu t toán T ng t , dung l ng b nh
mà thu t toán òi h'i ph i là kh d ng gi i m t bài toán,vì v y ph c t p không gian
c.ng c n ph i tính n Vì vi c xem xét ph c t p không gian g(n li n v i các c u trúc
d li u c bi t c dùng th c hi n thu t toán nên trong tài li u này ta s, ch t p trung
xem xét ph c t p th i gian
& ph c t p th i gian c a m t thu t toán th ng ph thu c vào các y u t nh k/
n ng l p trình, ch ng trình d ch, t c th c hi n các phép tính trên máy tính, kích th c c a
d li u u vào,…
Do s l ng các phép tính và kích th c d li u u vào trong gi i thu t là không ph
thu c vào t c tính toán c a các máy tính c th nên ph c t p th i gian c a m t thu t
toán c bi u di#n qua s l ng các phép toán c dùng b i thu t toán ó khi các d li u
u vào có m t kích th c xác nh H n n a, phân tích t t c các phép toán thành các phép
tính bit s c p mà máy tính s d ng là i u r t ph c t p Do ó ta có th i n khái ni m v
th i gian thu t toán nh sau
Th c o th i gian c a m t thu t toán là m t hàm bi u di#n s phép toán s c p (phép
toán s h c, phép toán logic, phép so sánh) trong khi th c hi n thu t toán và th ng ph thu c
kích th c các giá tr d li u u vào là n, kí hi u hàm này là T(n)
Ví d 1.14:
N u th i gian th c hi n m t thu t toán là T1(n) = n2 và th i gian th c hi n c a m t
thu t toán khác là T2(n) = 50n thì khi n l n th i gian th c hi n c a gi i thu t T2 rõ ràng
nhanh h n T1, ch ng h n n=50 thì T1(n) = 502 = T2(n) nh ng v i n>50, T1(n) = n2 > 50n=T2(n)
Khi ó, th i gian th c hi n thu t toán t l thu n v i n hay t l thu n v i n2 c.ng cho ta m t
cách ánh giá t ng i v t c th c hi n c a thu t toán ó khi n khá l n
Do ó, ta th ng quan tâm n t ng c a hàm T(n) khi n khá l n Sau ây, ta s,
c p n các khái ni m liên quan n v n này Cách ánh giá th i gian th c hi n c a thu t
toán c l p v i máy tính và các y u t liên quan t i máy tính nh v y s, d*n t i khái ni m
g i là ph c t p c a thu t toán
Trang 21- Th i gian th c hi n thu t toán v i b d li u t)ng quát
- S d ng các công c xác su t ánh giá th i gian th c hi n
- & ph c t p tính toán c a thu t toán
do ó f(n) 0 18n3 v i m i n 11 nên f(n)=O(n3)
Hình 1.14 &$ th minh h a cho khái ni m O
#$ THI C% S& L'P TRÌNH (90 phút- s 08)
CÂU 1 (2 i m)
Vi t ch ng trình nh p m t thông tin ngày (ngày/tháng/n m) - là các s nguyên d ng)
Hãy cho bi t ngày ó là ngày th bao nhiêu trong n m ? (ngày 1 tháng 1 là ngày th nh t c a
a.Hãy tìm phân s có giá tr l n nh t
b.Hãy s(p x p các phân s theo chi u t ng d n
CÂU 4 (3 i m)
Cho m t file v n b n có tên là “DAYSO.INP” có c u trúc nh sau:
-Dòng u ghi s nguyên d ng n
-Trong các dòng ti p theo ghi n s nguyên d ng
Hãy c d li u t file và th c hi n các công vi c sau
a.Tìm giá tr l n nh t c a n s có trong dãy
b.Hãy m s l ng s nguyên t có trong dãy
Trang 22#$ THI C% S& L'P TRÌNH (90 phút- s 07)
CÂU 1 (2 i m)
Gi s n ≥1 và x là s th c Hãy vi t hàm tính giá tr c a bi u th c sau ây :
n x x
x x n x S
n n
++++
−++++
−++
−
=
321)1(
32121),(
3 2
Cho dãy n s nguyên d ng a1, a2, , a n Hãy vi t hàm th c hi n các công vi c sau:
a Tìm chi u dài c a o n con liên ti p dài nh t ch a toàn s ch4n N u không có thì tr vgiá tr 0
b Tìm các s nguyên t sao cho khi o ng c các ch s c a nó ta c.ng thu c m t snguyên t (ví d s 13, s 149, )
CÂU 4 (3 i m)
Cho file v n b n songuyen.inp ch a các s nguyên d ng
a & nh ngh+a s i x ng là s mà khi vi t các ch s c a nó theo chi u ng c l i thì ta c chính s ó; ch ng h n 6, 131, 1991 là các s i x ng & m xem file songuyen.inp ch a bao nhiêu s i x ng ?
b & m xem trong file songuyen.inp có bao nhiêu s v a là s nguyên t v a là s i x ng ?
K t qu xu t ra file songuyen.out ghi hai s nguyên là k t qu tìm c
& nh ngh+a t ng t các kí pháp l n t ng ng, thay ≤, ≥ b"ng <, > t ng ng
Xem thêm Thomas’s book, ch ng 3, m c 3.1
Hình 1.15 &$ th minh h a cho khái ni m Ω
Hình 1.16 &$ th minh h a cho khái ni m Θ
Trang 23L u ý:
Kí pháp O (O l n) ánh giá tr ng h p x u nh t, quan tâm t i hàm c n trên nh' nh t
Kí pháp Ω (Omega l n) ánh giá tr ng h p t t nh t, quan tâm t i hàm c n d i l n nh t
Kí pháp Θ (theta) ánh giá tr ng h p trung bình, cùng v i kí pháp O (O l n) cho ánh giá chung v ph c t p thu t toán.
Quan h gi a các hàm qua các ký pháp O, Ω, hay Θ c g i là quan h ti m c n Sau ây
Tính b c c u :
f(n) = Θ(g(n)) & g(n) = Θ(h(n)) f(n) = Θ(h(n)) f(n) = O(g(n)) & g(n) = O(h(n)) f(n) = O(h(n)) f(n) = Ω(g(n)) & g(n) = Ω(h(n)) f(n) = Ω(h(n))
Ch ng h n thu t toán gi i ph ng trình b c nh t, b c hai…
Hàm logn (logarit – O(logn))
Các thu t toán có th i gian th c hi n t ng theo kích th c d li u vào v i t c hàm logarit
Ch ng h n thu t toán tìm ki m trên dãy s ã c s(p x p
x x n x S
n
+++++++++++
=
321
32121),(
3 2
a.Hãy cho bi t có bao nhiêu kh i l p ph ng có giá tr c a các m t là các s khác nhau ?
b.Hãy cho bi t giá tr nào xu t hi n nhi u l n nh t ? Bao nhiêu l n ?
H t
Trang 24cout<<test(a,b,c)+a+b+c;
} int test(int a, int &b, int &c) { a=a+1;b=b+2;c=c+3;
Cho m t dãy g$m n ph n t nguyên d ng Vi t các hàm th c hi n các công vi c sau:
a.Tìm giá tr nh' nh t c a dãy
b.Hãy m xem trong dãy có bao nhiêu s hoàn ch nh ? (s hoàn ch nh là s b"ng t)ng các c s th c s c a nó, ch ng h n 6 là s hoàn ch nh vì 6 = 1 + 2 + 3)
c.Tìm s nguyên d ng l n nh t là c s c a t t c các s c a dãy
d.Tìm chi u dài c a dãy con t ng dài nh t
CÂU 4 (2 i m)
Hãy tìm các s p,q (0<p<q<n) sao cho t)ng các c s th c s c a p b"ng q và t)ng các c
s th c s c a q b"ng p Tìm m t thu t toán hi u qu khi n l n
H t
Ch ng h n thu t toán tìm ki m (ph n t , max, min…) trên m t dãy s
Hàm nlogn (tuy n tính logarit – O(nlogn))
Các thu t toán gi i các bài toán b"ng cách chia thành các bài toán nh' h n, gi i m t cách c
l p r$i h p l i nh n c k t qu c a bài toán l n
Ch ng h n thu t toán s(p x p nhanh m t dãy s
Hàm n 2 ( a th c – O(nm))
Các thu t toán v i các thao tác c th c hi n v i trong các vòng l p l$ng nhau Tr ng h p
t)ng quát nm Thông th ng ánh giá thu t toán n n=3,4
Ch ng h n thu t toán nhân ma tr n
Hàm 2 n (l.y th a – O(mn))
&ây là l p thu t toán có ph c t p l n Thông th ng là các thu t toán quy v i l ng d
li u u vào l n Khi n l n, có th xem nh bài toán không gi i c theo ngh+a là không
nh n c l i gi i trong m t th i gian h u h n
Ch ng h n thu t toán tháp Hà N i
Thu t toán v i th i gian th c hi n có c p hàm a th c c coi là nh ng thu t toán hi u qu
N u m t bài toán có ph c t p là a th c (ngh+a là có thu t toán th i gian a th c gi i) thì
ta có th tìm c l i gi i úng cho bài toán trong m t kho ng th i gian ch p nh n c Nh ng
bài toán nh v y c g i là d# gi i Bên c nh ó còn r t nhi u bài toán mà cho n nay v*n
ch a tìm c thu t toán a th c gi i, mà ng i ta th ng g i là các bài toán khó gi i Các
thu t toán gi i úng hi n bi t i v i các bài toán nh v y u có th i gian tính hàm m & gi i
nh ng bài toán nh v y trong th i gian thích h p, nên phát tri n thu t toán theo h ng ti p c n
các thu t toán g n úng
& có thói quen l p trình t t, khi i di n v i m t v n bài toán, sinh viên nên chú ý
n v n tìm thu t toán hi u qu cho bài toán
B ng sau ây cho ta th y s t ng tr ng c a các hàm ánh giá ph c t p c a thu t
Trang 25Suy ra: f(x)=O(g(x)
Xác nh ph c t p tính toán c a m t thu t toán có th d*n t i nh ng bài toán ph c
t p Tuy nhiên trong th c t , i v i m t s thu t toán, ta có th phân tích c ph c t p c a
m t thu t toán b"ng m t s quy t(c sau ây
)) ( ( ) (
)) ( ( ) (
)) ( ( ) ( 0
) ( ) ( lim
kxd
n g n f const
n g n f
n g O n f
n g n fn
#$ THI C% S& L'P TRÌNH (90 phút- s 04)
VI;T CH<=NG TRÌNH HOÀN CH>NH TH?C HI@N CÁC YÊU CAU SAU:
Câu 1 (2 i m)
Cho S s, c tính theo công th c S=1+3+5+ +(2n+1) v i n 1 0 và s nguyên M
Hãy tìm giá tr n nh' nh t sao cho S > M v i M c cho tr c
Cho dãy n s nguyên d ng Hãy vi t các hàm th c hi n các công vi c sau:
a S(p x p các s nguyên t trong dãy t ng, còn các s khác v*n gi nguyên giá tr và v trí
b Xóa t t c các s nguyên t trong dãy
Thông tin cho n thí sinh trong m t k2 thi tuy n sinh cao h c nh sau:
- S báo danh (chu i, t i a 8 ký t )
- H và tên (chu i, t i a 32 ký t )
- &i m ngo i ng (s - &i m môn c s (s nguyên)
- &i m môn chuyên ngành (s nguyên)
Hãy th c hi n các công vi c sau ây :
a Hãy mô t c u trúc cho bài toán
b Vi t hàm nh p thông tin cho n thí sinh
c Vi t hàm tìm nh ng thí sinh có i m thi môn ngo i ng 1 5 và có t)ng i m môn c s và
môn chuyên ngành 1 12
H;T
Trang 26Cho dãy n s nguyên d ng ao,a1,…,a n-1 Hãy vi t các hàm th c hi n các công vi c sau:
a & m xem trong m ng có bao nhiêu s nguyên t có hai ch s ?
b Bi n )i các s c a m ng v m ng toàn s nguyên t theo nguyên t(c: Các s không ph i là
x x x n S
n n
1
2
11)1(
3
12
112
111),
3 2
+++
−+
−++++
−
T1(n) = O(f(n)) và T2(n) = O(g(n)) Thu t toán P g$m vi c th c hi n P1 r$i ti p theo n P2 khi
ó th i gian thu t toán P s, là T(n) = O(max(f(n), g(n))
Ví d 1.20:
Thu t toán P1 có th i gian th c hi n T1(n)=O(n2) và P2 có th i gian th c hi n T2(n)=O(n3) Gi
s thu t toán P g$m vi c th c hi n P1 rôì th c hi n P2 Theo quy t(c c ng, th i gian th c hi n
c a P là T(n)=O(max(n2,n3))=n3
N u T1(n) và T2(n) là th i gian th c hi n c a hai thu t toán P1và P2 và T1(n) = O(f(n)), T2(n) =
O(g(n)) thì th i gian th c hi n P1và P2 l$ng nhau là T(n) = O(f(n).g(n))
Tr ng h p c th th ng g p c a quy t(c nhân
N u thu t toán P c th c hi n b"ng cách th c hi n n l n thu t toán P’ thì ph c t p c a
thu t toán P là T(n) b"ng tích n l n ph c t p T’ c a thu n toán P’, t c là T(n) = n T’(n)
Trong h c ph n c s l p trình này, khi vi t xong m t ch ng trình cho m t v n bài
toán thì sinh viên th ng ch th ch ng trình c a mình v i m t vài d li u u vào và th y k t
Trang 27Q ; R F (9 +, E $'
& ki m tra tính úng c a m t thu t toán, ch ng trình, ta c n ki m th l i thu t toán
và ch ng trình qua m t s b test m*u; t ó có th phát hi n sai sót ho c có th c i ti n
c m t ch ng trình hi u qu h n v m t th i gian ho c không gian l u tr d li u,… Các
b test m*u c n ph i có tính ch n l c, có kh n ng phát hi n l i cao; các b test không nên quá
ph c t p c.ng không nên quá n gi n Vi c tìm ra các b test m*u t t ki m th th ng là công o n thú v và m t nhi u th i gian
& ki m tra tính úng c a m t thu t toán, ch ng trình, ta s d ng toán h c
i v i thu t toán quy: dùng quy n p
i v i thu t toán không quy: tính úng n"m các vòng l p, s d ng b t bi n vòng
Là l p các bài toán gi i c b"ng thu t toán n nh (deterministic) trong th i gian
a th c &ây là l p các bài toán th c t gi i c
Ch ng h n các thu t toán thu c l p P nh S(p x p; Nhân ma tr n, Tìm ng i ng(n
nh t,…
L p NP:
Là l p các bài toán gi i c b"ng thu t toán không n nh (nondeterministic) trong
th i gian a th c, còn n u gi i b"ng thu t toán n nh thì ph c t p c a nó là hàm m
Ch ng h n các thu t toán thu c l p NP nh : X p balo, tháp Hà N i, bài toán phân ho ch
m t t p h p
Nhi u l p ph c t p c nh ngh+a thông qua khái ni m phép quy v M t phép
quy v là m t bi n )i t m t bài toán A thành m t bài toán B Khái ni m này cho bi t bài toán
322
−+
−++
+
−
=
n n x x
Cho dãy a g$m n ph n t là các s nguyên Hãy vi t các hàm th c hi n các công vi c sau:
a & m s các o n con liên ti p t ng
Xây d ng c u trúc cho bài toán qu n lý các s thuê bao i n tho i b"ng c u trúc m ng M i
ph n t ch a các thông tin: h tên (chu i, t i a 32 ký t ), a ch (chu i, t i a 48 ký t ), s
i n tho i (chu i, t i a 11 ký t )
Vi t các hàm nh p, xu t và tìm h tên, a ch c a ch thuê bao khi bi t s i n tho i là X
H;T
Trang 28c Hãy s(p x p sao cho các s ch4n v u m ng, các s l5 v cu i m ng
d Tìm dãy con liên ti p dài nh t ch a toàn các s nguyên t
b Hãy cho bi t có bao nhiêu kh i l p ph ng có giá tr c a các m t là các s khác nhau ?
c Hãy cho bi t giá tr nào xu t hi n nhi u l n nh t ? Bao nhiêu l n ?
H;T
B là khó h n hay b"ng bài toán A N u bài toán A có th c gi i b"ng thu t toán cho bài toán
B thì A không khó h n B, và ta nói A quy v B Có nhi u ki u quy v khác nhau, tùy theo
ph ng pháp quy v , ch ng h n nh phép quy v Cook, phép quy v Karp, phép quy v Levin,
và tùy theo ph c t p c a phép quy v , ch ng h n nh quy v trong th i gian a th c, ho c
quy v trong b nh lôgarit
Phép quy v ph) bi n nh t là quy v trong th i gian a th c &i u này có ngh+a là thu t
toán quy v ch y trong th i gian a th c Ví d nh bài toán tính bình ph ng c a m t s
nguyên có th c quy v bài toán nhân hai s nguyên Có ngh+a là thu t toán nhân hai s
nguyên có th dùng tính bình ph ng m t s b"ng cách dùng s nguyên c n tính bình ph ng
làm c hai th a s cho thu t toán nhân s Do ó, tính bình ph ng không khó h n phép nhân,
b i vì tính bình ph ng có th quy v phép nhân
Bài toán A quy v trong th i gian a th c t bài toán B, kí hi u A ∝ B, n u m t khi B
gi i c b"ng thu t toán n nh a th c thì A c.ng gi i c b"ng thu t toán n nh a
th c, do ó A “d# h n” B
Bài toán A t ng ng a th c v i B (A ~ B ) n u A ∝ B và B ∝ A
& nh ngh+a trên d*n t i khái ni m khó cho m t l p ph c t p
MV5 W
M t bài toán A là khó cho l p bài toán NP n u m i bài toán trong l p NP có th quy
v A Khi ó, không có bài toán nào trong l p NP là khó h n A do m t thu t toán cho A có th
gi i b t kì bài toán nào trong l p NP T p h p các bài toán khó cho lóp NP là t p h p các bài
toán NP-khó
MV(X (+
N u bài toán A n"m trong NP và là khó cho NP, thì A là y cho NP &i u này có
ngh+a là A là bài toán khó nh t trong NP Do có th có nhi u bài toán cùng khó, có th nói
là A là m t trong nh ng bài toán khó nh t trong NP Do v y, l p NP- y ch a nh ng bài
toán khó nh t trong NP, theo ngh+a chúng là nh ng bài toán có nhi u kh n ng nh t không gi i
c trong P Do bài toán P = NP v*n ch a c gi i, n u có th quy m t bài toán NP- y
T ng t nh v y, do m i bài toán trong NP u có th quy v các bài toán NP- y , n u có
th gi i c m t bài toán NP- y trong th i gian a th c thì P = NP
Trang 29BT1-7
Cho s t nhiên n và m t s th c x Hãy tính t'ng sau:
S(n,x) = sin x + sin(sin x) + + sin (sin( (sin(sin x)) )) n l n sin
b.In danh sách nh ng nhân viên có m c l ng c b n th p nh t
c.&ê8m sô8 l 6ng nhân viên có m c th ng >= 1200000
d.In danh sách các nhân viên t ng dâ9n theo phòng ban, n u phòng ban trùng nhau thì gia:m dâ9n
theo mã nhân viên
e.Câ6p nhâ 6t t ng l ng cu:a tâ8t ca: ca8c nhân viên lên 5%
BT7-4
Cho n hình ch nh t có các c nh song song v i các tr c t a , m i hình ch nh t bi t to
d i trái, trên ph i là x1[i],y1[i],x2[i],y2[i] (i=1 n) Hãy tính di n tích c a hình c ph b i N
hình trên
BT7-5
a.Vi t ch ng trình t o m t file v n b n có tên là “SONGUYEN.INP” ch a n s nguyên ng*u
nhiên trong kho ng t 1 n 32767, m i dòng ghi 10 s
Hãy m xem trong file SONGUYEN.INP có bao nhiêu s nguyên t , bao nhiêu s chính
ph ng? bao nhiêu s hoàn ch nh K t qu ghi vào file v n b n “SONGUYEN.OUT”
b.Cho file ch a các ký t ; trong ó m i ký t cách nhau úng m t kho ng tr(ng Hãy t o ra file
ch a mã ASCII c a t ng ký t ó, m i dòng ghi úng 10 s
c.Cho file ch a n s th c nh' h n 1000, m i s th c có úng 2 s ph n th p phân Hãy t o
file ch a các s chính ph ng t file các s th c này
BT7-6.
Hãy t o file ch a các s nguyên t nh' h n 1 tri u Cho m t file ch a các ký t ch cái (có th
là ch hoa ho c ch th ng), m i ký t cách nhau ít nh t m t kho ng tr(ng Hãy cho bi t t n
s xu t hi n c a m i ký t
BT7-7.
Cho hai file v n b n SOLIEU1.INP, SOLIEU2.INP ch a các s nguyên ã c s(p t ng d n
Hãy tr n hai file này thành m t file v n b n SOLIEU.OUT mà các ph n t c.ng c s(p t ng
d n (không dùng bi n m ng)
Trang 30Vi t ch ng trình cho các bài toán sau ây BT7-1
Khai báo ki u d li u phân s , vi t ch ng trình th c hi n các công vi c sau:
a Nh p, xu t phân s Khi xu t thì phân s luôn d ng t i gi n
b T i gi n m t phân s
c Tính t)ng, hi u, tích, th ng hai phân s , và ngh ch o m t phân s khác không
d Quy $ng hai phân s
Cho m t danh sách l u thông tin c a các nhân viên trong m t công ty, thông tin g$m:
- Mã nhân viên (chu i, t i a là 8 ký t )
- H và tên (chu i, t i a là 20 ký t )
- N m sinh (sô8 nguyên)
- Phòng ban (chu i, tô8i a 10 ký t )
- L ng c b n (s nguyên)
- Th ng (s nguyên)
- Th c lãnh (s nguyên, trong ó th c lãnh = l ng c b n + th ng ) Hãy th c hi n yêu c u sau:
a.Tính t)ng th c lãnh tháng c a t t c nhân viên trong công ty
Khi vi t ch ng trình ta không c s d ng b t c ký hi u nào khác ngoài các ký t trên
T khoá : T khóa là t có ý ngh+a xác nh dùng khai báo các ki u d li u, vi t các toán
t và vi t câu l nh… Trong C có các t khoá sau:
asm const else for interrupt return sizeof void
break continue enum goto long short switch volatile
case default extern huge near static typedef while
cdecl do far if pascal struct union
char double float int register signed unsigned
Các t khóa ph i vi t b"ng ch th ng Không c dùng t khoá t tên cho các h"ng,
bi n, m ng, hàm, …
Tên : Khái ni m tên r t quan tr ng trong quá trình l p trình, nó không nh ng th hi n rõ ý
ngh+a trong ch ng trình mà còn dùng xác nh các i t ng khác nhau khi th c hi n
ch ng trình Tên th ng c t cho h"ng, bi n, m ng, hàm, con tr', nhãn, tên file, tên struct
… Chi u dài t i a c a tên là 32 ký t
Tên bi n h p l là m t chu i ký t liên t c g$m: Ký t ch , s và d u g ch d i Ký t u
c a tên ph i là ch ho c d u g ch d i Khi t tên không c t trùng v i các t khóa
Ví d 2-1
Các tên h p l : delta, a_1, x1, Num_ODD, Case
Các tên không h p l :
3xyz _1 (do ký t u là s ) num-odd (do s d ng d u g ch ngang)
Trang 31r#3 (do s d ng ký t #) int (do t tên trùng v i t khóa) del ta (do có kho ng tr(ng) f(x) (do có d u ngo c tròn)
Trang 32long double 80 bits 3.4 * (10-4932) n 1.1 * (104932)
L u ý: Trên mi n s th c không có phép toán chia l y d
- M i câu l nh có th vi t trên m t hay nhi u dòng nh ng ph i k t thúc b"ng d u ; Trong
khi l p trình c n ph i ghi chú gi i thích các bi n, h"ng, thao tác x lý giúp cho ch ng
trình rõ ràng d# hi u, d# nh , d# s a ch a và ng i khác c vào d# hi u Trong C có các
ghi chú sau: // ho c /* n i dung ghi chú */
- Không nên nh m l*n gi a h"ng ký t và h"ng chu i :
“a” c l u tr g$m 2 ký t là a và \0
‘a’ c l u tr là a mà thôi
- Có m t s ký t c bi t không in c trên màn hình : ‘\n’ (xu ng dòng ); ‘\0’ (ký t
NULL ); ‘\r’ (Enter)…
Trang 33Ví d 2-2
int main() {int a, b; //khai bao 2 bien a,b kieu int
Xu t ra màn hình giá tr c a các bi u th c theo m t khuôn d ng nào ó
printf (<các h ng chu i nh d ng>, <bi u th c 1>, <bi u th c 2>, .);
Trang 3485 if (a[i][j]>gtlonnhi && a[i][j]!=gtlonnhat) gtlonnhi=a[i][j];
86 printf("\n Gia tri lon nhat, nho nhat la :%d\t%d",gtlonnhat,gtlonnhi);
Khi ó câu l nh này s, dành 4 kho ng tr(ng ghi giá tr a và 6 kho ng tr(ng ghi giá tr b
trong ó ã tính c d u ch m th p phân và 2 ch s ph n th p phân
Trang 35& xu t, nh p d li u chúng ta hoàn toàn có th s d ng hai l nh trong th vi n stdio.h là printf,
scanf nh ã c p các ví d trên Tuy nhiên chúng ta có th s d ng các l nh cout, cin trong
th c t ng ng, còn khi th c hi n phép gán m t s th c cho m t bi n nguyên, thì ph n nguyên
c a s th c ó s, c gán cho bi n (m t s ngôn ng l p trình òi h'i hai v c a câu l nh gán
ph i có cùng ki u)
cout << <bi u th c1> [ <<bi u th c2>] [ ]
L nh này cho phép xu t giá tr c a các bi u th c ra màn hình Các <bi u th c i> c.ng có th
là các hàm, các h"ng, các bi n,…
M t s l nh sau ây (trong th vi n iomanip.h) có th c s d ng chung v i l nh cout:
int setw(int n); quy nh r ng trên màn hình xu t giá tr là n c t
int setprecision(int n); quy nh s l ng ch s sau d u ch m th p phân c n xu t ra màn hình là n
cin >> <bi n 1> [ >> <bi n 2> ] [ ];
L nh này cho phép nh p t bàn phím giá tr cho các bi n (riêng bi n ki u chu i không s d ng
l nh cin nh p), sau m i l n nh p giá tr ph i nh n enter ho c phím kho ng cách
Trang 3669 if (sv[i].diemtb>=5 && sv[i].diem1>=5 && sv[i].diem2>=5 && sv[i].diem3>=5)
70 in_sv(sv[i]);
71 }
Ví d 7.10:
Vi t ch ng trình t o file v n b n có tên là “matran.inp” có c u trúc nh sau:
- Dòng u ghi hai s m,n ch s hàng và s c t c!a ma tr n, hai s này cách nhau b i ít nh t
m t kho ng tr ng
- Trong m dòng ti p theo m#i dòng ghi n s nguyên các s cách nhau ít nh t m t kho ng tr%ng
- T t c các s c!a ma tr n này $c t o ng"u nhiên t1 1 n 1000
a c file m i t o và xu t ma tr n lên màn hình
b Hãy tìm giá tr+ l n nh t, giá tr+ l n nhì c!a ma tr n
c Bi n 'i m i s h ng c!a ma tr n thành các s nguyên t g n s ó nh t n u s h ng ó không ph i là s nguyên t
d L u ma tr n c!a câu c lên file matran.out
11 void taofile(int a[max][max], int &m, int &n);
12 void docfile(int a[max][max], int &m, int &n);
13 void timgiatri(int a[max][max], int m, int n);
14 void biendoimatran(int a[max][max], int m, int n);
15 void xuatmatran(int a[max][max], int m, int n);
16 void luufile(int a[max][max], int m, int n);
Ngôn ng C/C++ a ra hai phép toán m t ngôi t ng ho c gi m các bi n (nguyên và
th c) Toán t t ng ++ s, c ng 1 vào toán h ng c a nó, toán t gi m s, tr i 1 Ch ng h n
n u n ang có giá tr b"ng 5 thì sau phép tính ++ n, n có giá tr 6, còn sau phép tính n, n có
giá tr 4
D u phép toán ++ và có th ng tr c ho c ng sau toán h ng, nh v y có th có
t t c 4 cách vi t sau: ++n, n++, n, n
S khác nhau gi a ++ a và a ++ ch : trong khi phép n ++ thì n c t ng sau khi giá
tr c a nó ã c tính trong bi u th c, còn trong phép ++n thì n c t ng tr c khi giá tr c a
Trang 37Ý ngh a: N u <bi u th c i u ki n> là úng thì tr v giá tr c a <bi u th c 1> ng c l i
int m = a>b ? a++ : b++;
int n = a<b ? a : b;
cout << n + (++m);
Khi th c hi n các phép tính toán s h c th ng x y ra nhu c u chuy n )i ki u các toán
h ng tính toán theo cú pháp chuy n )i ki u nh sau:
(ki u d li u) bi u th c
Ch ng h n v i a,b là hai s nguyên C n xu t giá tr c a phân s a / b thì c n ph i chuy n )i
d li u c a k t qu có k t úng Có b n cách sau ây th c hi n: (float)a / b, float(a) / b,
35 cout<<"Ngay sinh: "; fflush(stdin);gets(sv[i].ngaysinh);
57 for (int i=0;i<n-1;i++)
58 for (int j=i+1;j<n;j++)
Trang 3816 void xuat(sinhvien sv[], int n);
17 void sapxep(sinhvien sv[], int n);
18 void xuatkq(sinhvien sv[], int n);
33 cout<<"Ma sinh vien: ";fflush(stdin);gets(sv[i].masv);
34 cout<<"Ho va ten: "; fflush(stdin);gets(sv[i].hoten);
a / float(b); riêng tr ng h p n u a ho c b là h"ng s thì vi c chuy n a ho c b thành s th c có
th th c hi n b"ng cách ghi thêm 0 phía sau h"ng ó (ví d 1 / b ghi thành 1.0 / b)
Khi vi t ch ng trình nên a vào các dòng chú thích ch ng trình d# c, d# hi u &i u
này c.ng giúp cho vi c s a )i nâng c p ch ng trình v sau c thu n l i Có hai cách sau
ghi l i chú thích:
Cách 1: t d u // tr c dòng mu n chú thích
Cách 2: bao o n l nh c n chú thích gi a hai d u /* … */
L i chú thích có th t b t k2 v trí nào trong ch ng trình N u ch ng trình dài ph c t p
nên a chú thích vào tr c m i o n l nh ho c tr c m i ch ng trình con
M t ch ng trình trên C/C++ th ng có c u trúc nh sau:
Khai báo các th vi n c s d ng trong ch ng trình
& nh ngh+a các h"ng s
Khai báo các bi n toàn c c
Khai báo các tiêu hàm
Ch ng trình chính
Thi t k chi ti t t ng hàm t t o
M t ch ng trình n gi n m*u c mô t sau ây
Ví d 2-4
Trong m-t ph&ng t a OXY cho 3 i m A,B,C l n l $t có t a là (xa,ya), (xb,yb), (xc,yc)
Hãy tính chu vi, di n tích và t a tr ng tâm c!a tam giác này
)()
2 2
)()
2 2
)()
Trang 39Áp d ng công th c Heron tìm di n tích c a tam giác khi bi t chi u dài 3 c nh c a tam giác, ta có:
v i p là n a chu vi c a tam giác: p = cv / 2
G i (xg,yg) là t a tr ng tâm c a tam giác ABC, ta có công th c:
9 cout << "Nhap toa do cua diem A(xa,yq):";cin >> xa >> ya;
10 cout << "Nhap toa do cua diem B(xb,yb):";cin >> xb >> yb;
11 cout << "Nhap toa do cua diem C(xc,yc):";cin >> xc >> yc;
12 /* hay ta dùng khi khai báo #include <stdio.h>
13 printf (“Nhap toa do cua diem A(xa,ya):”); scanf (“%d, %d”,&xa &ya);
14 printf (“Nhap toa do cua diem A(xb,yb):”); scanf (“%d, %d”,&xb, &yb);
15 printf (“Nhap toa do cua diem A(xc,yc) :”); scanf (“%d, %d”,&xc &yc);
25 cout << "\nChu vi cua tam giac la : " << cv;
26 cout << "\nDien tich cua tam giac la: " << s;
))(
)(
(p a p b p c p
81 for (int i=0;i<n-1;i++)
82 for (int j=i+1;j<n;j++)
b.Hãy in lên màn hình nh ng sinh viên có i m trung bình 4 5 và không có môn nào d i i m
5; danh sách này ph i $c s%p theo th t i m trung bình gi m d n