Professional Documents
Culture Documents
Giao Trinh Bai Tap KTLT
Giao Trinh Bai Tap KTLT
Lӡi mӣ đҫu
?
?
?
?
?
?
?
LӠI MӢ ĐҪU
?
?
?
?
?
Khi bҳt đҫu làm quen vӟi ngôn ngӳ lұp trình ± Cө thӇ là ngôn ngӳ C ± Sinh Viên thưӡng
gһp khó khăn trong viӋc chuyӇn vҩn đӅ lý thuyӃt sang cài đһt cө thӇ trên máy. Sách
³÷iáo Trình Bài Tұp Kӻ Thuұt Lұp Trìnho nhҵm cung cҩp cho các Hӑc Sinh - Sinh
Viên Trưӡng CĐ Công NghӋ Thông Tin Tp. Hӗ Chí Minh hӋ thӕng các bài tұp, nhӳng
kӻ năng thӵc hành cơ bҧn và nâng cao vӅ ngôn ngӳ lұp trình C. Cuӕn sách này đưӧc
xem như tài liӋu hưӟng dүn tӯng bưӟc cho Hӑc Sinh - Sinh Viên cӫa Trưӡng trong viӋc
hӑc và áp dөng kiӃn thӭc lý thuyӃt trên lӟp mӝt cách thành thҥo và sâu rӝng.
?
Giáo trình đưӧc chia thành 10 chương theo tӯng nӝi dung kiӃn thӭc, kèm theo Các đӅ
thi mүu và 1 phө lөc hưӟng dүn viӃt chương trình, chuҭn đoán lӛi và sӱa lӛi. Mӛi
chương gӗm 2 phҫn:
! Ohҫn lý thuyӃt: đưӧc tóm tҳt ngҳn gӑn vӟi đҫy đӫ ví dө minh hoҥ kèm theo.
! Ohҫn bài tұp: vӟi 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 lu yӋn tұp thêm.
! Ohҫn kӃt luұn: Tóm tҳt nӝi dung và các thao tác mà sinh viên cҫn nҳm hay
?
nhӳng lưu ý cӫa chương đó.
?
?
Trong quá trình biên soҥn, chúng tôi đã cӕ gҳng trích lӑc nhӳng kiӃn thӭc rҩt cơ bҧn,
nhӳng lӛi hay gһp đӕi vӟi ngưӡi mӟi lұp trình. Bên cҥnh đó chúng tôi cũng bә sung
thêm mӝt sӕ bài tұp nâng cao đӇ rèn luyӋn thêm kӻ năng lұp trình.
?
Tuy nhiên, chӫ đích chính cӫa giáo trình này là phөc vө cho mӝt môn hӑc nên chҳc chҳn
không thӇ tránh khӓi nhӳng thiӃu sót, vì thӃ, rҩt mong nhұn đưӧc nhӳng góp ý quý báu
cӫa các thҫy cô, các đӗng nghiӋp và các bҥn Hӑc Sinh ± Sinh Viên đӇ giáo trình này
ngày càng hoàn thiӋn hơn.
?
Chân thành cҧm ơn.
?
?
?
Tәng thӡi gian: 90 tiӃt.
?
? ? ?
ÑTT NӜI DUN÷ Ñ TIӂT
1 Chương 1: Lưu đӗ thuұt toán 03
5 Chương 5: Chuӛi ký tӵ 06
9 Chương 9: ĐӋ qui 06
10 Chương 10: Hưӟng dүn lұp trình bҵng phương pháp Oroject 03
s͙ tăng lên 1.
?
BAÉTÑAÀU
?
?
?
?
a, b, c
?
?
?
O O
?
?
?
?
?
?
?
?
?
?
O
?
?
?
?
KEÁT THUÙC
2 - Trӯ ?
3 * Nhân ?
5 == Bҵng nhau ?
6 != Khác nhau ?
2 && AND ?
3 || OR ?
2 | OR ?
3 ^ XOR ?
?
? printf ( ³ \n PTVN´);
ls
printf ( ³ \n Nghim =%f´, -¦a);
gtch ();
b
?
I.6. Cҩu trúc lӵa chӑn switch
?
switch biӇu thӭc)
K
?
case n: ?
? các câu lӋnh ;
?
? break ;
case n2: ?
? các câu lӋnh ;
?
? break ;
««« ??
case nk: ?
<các câu lӋnh> ;
break ;
Khi giá trӏ biӇu thӭc không thӓa tҩt cҧ các ni thì thӵc hiӋn câu lӋnh sau
?
lӋnh switch sau khi thӵc hiӋn xong mӝt trưӡng hӧp, ta dùng lӋnh break.
?
Ví dө: Tҥo menu cҩp cho phép chӑn menu bҵng sӕ nhұp tӯ bàn phím.
?
#inclußstßio.h>
#inclußconio.h>
int ChonTD ()
K
int chon ;
?
printf ("Thuc Don") ; printf
("\n1. Lau thai!") ; printf
("\n2. Nuoc ngot!") ;
printf ("\n3. Ca loc hap ¦au!") ;
printf ("\n4. Chuot ßong!") ;
printf ("\n Xin moi ¦an chon mon an!") ;
scanf ("%ß",&chon) ;
rturn chon ;
b
?
voiß TDchon(int chon)
K
switch (chon)
K
cas 1:
printf ("\nBan chon lau thai!") ;
¦rak ;
cas 2:
printf ("\nBan chon nuoc ngot!") ;
¦rak ;
cas 3:
printf ("\nBan chon ca loc hap ¦au!") ;
¦rak ;
cas 4:
printf ("\Ban chon chuot ßong!") ;
¦rak ;
ßfault:
printf ("\nBan chon khong ßung!") ;
b
b
?
voiß main()
K
clrscr() ; int c
; c=ChonTD()
; TDchon(c) ;
gtch() ;
}
?
I.7. Cҩu trúc lһp
?
?
a. for
?
for <biӇu thӭc khӣi gán>; <biӇu thӭc điӅu kiӋn>; <biӇu thӭc tăng/giҧm>)
{
<khӕi lӋnh>;
}
?
B̭t kǤ bi͋u thͱc nào trong 3 bi͋u thͱc nói trên đ͉u có th͋ v̷ng nhưng ph̫i
giͷ ḓu ch̭m pẖy (;).
Hoҥt đӝng cӫa cҩu trúc điӅu khiӇn for:
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
Bưͣc 1: Khͧi gán cho bi͋u thͱc 1
?
Bưͣc 2: Ki͋m tra đi͉u ki͏n cͯa bi͋u thͱc 2.
gtch () ;
b
?
?
c. ßo « whil
?
do
{
< khӕi lӋnh> ;
} while biӇu thӭc điӅu kiӋn) ;
?
Rhc hi͏n kh͙i l͏nh cho đ͇n khi bi͋u thͱc có giá tr͓ b̹ng 0.
?
Ví dө: Nhұp ký tӵ tӯ bàn phím hiӇn thӏ lên màn hình mã ASCII cӫa ký tӵ đó,
thӵc hiӋn đӃn khi nhҩn phím ESC Mã ASCII cӫa phím ESC là 27).
#inclußstßio.h>
#inclußconio.h>
?
voiß main()
K
int ma ;
ßoK
ma=gtch ();
if (ma !=27)
printf ("Ma ASCII %c:%ß\t", ma, ma);
bwhil (ma!=27) ;
?
gtch () ;
b
?
?
|̿p whil ki͋m tra đi͉u ki͏n trưͣc khi thc hi͏n l̿p, còn vòng l̿p ßo«whil
thc hi͏n l͏nh l̿p r͛i mͣi ki͋m tra đi͉u ki͏n. Do đó vòng l̿p ßo...whil thc hi͏n
l͏nh t nh̭t m͡t l̯n.
?
?
I.8. break và continue
?
?
a. ¦rak
?
Dùng đӇ kӃt thúc vòng lһp trӵc tiӃp chӭa nó khi thӓa điӅu kiӋn nào đó.
?
Ví dө: Cho phép ngưӡi dùng nhұp liên tөc giá trӏ n cho đӃn khi nhұp âm thì
dӯng.
#inclußstßio.h>
#inclußconio.h>
?
voiß main()
K
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 20
?
? Cҩu trúc điӅu khiӇn
?
whil (1)
{
printf(³\nNhap n: ´);
scanf(³%ß´, &n);
if(n0)
¦rak;
}
?
gtch () ;
b
?
?
¦. continu
?
Dùng đӇ bӓ qua mӝt lҫn lһp khi thӓa điӅu kiӋn nào đó.
?
Ví dө: In ra màn hình giá trӏ tӯ 0 đӃn 20 trӯ đi sӕ 3 và sӕ 7.
?
#inclußstßio.h>
#inclußconio.h>
?
voiß main()
K
for(int i=10 ; i=20; i++)
{
if(i==13||i==17)
continu;
printf(³%ß\t´, i);
}
gtch () ;
b
?
?
II. BÀI TҰO
?
?
II.1. Ohương pháp chҥy tay tӯng bưӟc đӇ tìm kӃt quҧ chương trình
! Xác đӏnh chương trình có sӱ dөng nhӳng biӃn nào.
! ÷iá trӏ ban đҫu cӫa mӛi biӃn.
! Nhӳng biӃn nào s bӏ thay đәi trong quá trình chҥy chương trình thì lұp
? ? ? ?
Bưӟc KӃt quҧ in ra
BiӃn 1 BiӃn 2 « BiӃn n
(Hoһc lҫn thӵc hiӋn) màn hình
0 Giá trӏ 0 Giá trӏ 0 « Giá trӏ 0 ?
Giá trӏ Giá trӏ « Giá trӏ ?
2 Giá trӏ 2 Giá trӏ 2 « Giá trӏ 2 ?
... « « « « ?
« « « « « ?
if(a%2==0)
?
printf("Gia tri cua a la chan´);
?
printf(³Tong cua a va ¦ la: %ß´, a+¦) ;
?
2. Cho biӃt kӃt quҧ cӫa đoҥn chương trình sau:
?
int a=7, ¦=8;
?
a++;
?
a=a+(¦--);
?
--¦;
?
a--;
?
a=(--a)+(--¦);
?
if(a%2!=0)
?
printf("\n a la so l");
? ?
ls ?
?
printf("\n a la so chan");
?
printf("\na = %ß",a);
?
3. Cho biӃt kӃt quҧ cӫa đoҥn chương trình sau:
?
int =5, ;
?
=++ + 5;
?
printf(³=%ß, =%ß\n´, , );
?
*=6;
?
=%7;
?
printf(³=%ß,=%ß,=%ß´, , , );
?
?
4. Nhұp vào hai sӕ nguyên a, b. In ra màn hình giá trӏ lӟn nhҩt.
?
5. Cho ba sӕ a, b, c đӑc vào tӯ bàn phím. Hãy tìm giá trӏ lӟn nhҩt cӫa ba sӕ
?
trên và in ra kӃt quҧ.
?
6. Cho ba sӕ a, b, c đӑc vào tӯ bàn phím. Hãy in ra màn hình theo thӭ tӵ tăng
dҫn các sӕ. ChӍ đưӧc dùng thêm hai biӃn phө).
7. ViӃt chương trình nhұp vào mӝt sӕ nguyên n gӗm ba chӳ sӕ. Xuҩt ra màn
hình chӳ sӕ lӟn nhҩt ӣ vӏ trí nào?
Ví dө: n=291. Chͷ s͙ lͣn nh̭t n̹m ͧ hàng chͭc (9).
?
8. ViӃt chương trình nhұp vào sӕ nguyên n gӗm ba chӳ sӕ. Xuҩt ra màn hình
theo thӭ tӵ tăng dҫn cӫa các chӳ sӕ.
}
?
8. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
int i=10, s=0;
?
whil(i>0)
?
{
?
if(i%2= =0)
?
s+=i;
? ? ?
ls ? ?
? ? ?
? if(i>5) ?
? ?
? s+=2*i;
?
i--;
?
}
?
printf(³s = %ß´,s);
?
9. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
int a=18, i=1;
?
ßo{
?
if(a%i==0)
?
printf("\t %ß",i);
?
i++;
?
} whil(i=a);
?
20. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
int a=11, ¦=16, i=a;
?
whil( i¦ )
?
{
?
if(i%2==0)
?
{
? ?
? printf("\t %ß", i);
? ?
? ¦rak;
?
}
?
i++;
?
}
?
2. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
int a=10, s=0, i=0;
whil( ia )
?
{
?
i++;
?
if(i%2==0) continu;
?
ls s=s+i;
?
}
?
printf("s=%ß",s);
?
22. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
int i=1,s=0;
?
whil(1)
?
{
?
s=s+i++;
?
if(i%2)
?
i=i+2;
? ?
ls ?
?
i=i+1;
?
if(i>20)
?
¦rak;
?
}
? ? ?
printf("%ß",s); ? ?
? ?
m n
23. ViӃt chương trình in ra màn hình hình chӳ nhұt đһc kích thưӟc m, n
nhұp tӯ bàn phím).
?
Ví dө: Nh̵p m=5, n=4
f f f f f
f f f f f
f f f f f
f f f f f
24. ViӃt chương trình in ra màn hình hình chӳ nhұt rӛng kích thưӟc m n m, n
?
nhұp tӯ bàn phím).
?
?
Ví dө: Nh̵p m=5, n=4
f f f f f
f ? ? ? f
f ? ? ? f
f f f f f
25. ViӃt chương trình in ra màn hình tam giác vuông cân đһc có đӝ cao h h
?
nhұp tӯ bàn phím).
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 27
?
? Cҩu trúc điӅu khiӇn
Ví dө: Nh̵p h=4
?
f
f f
f f f
f f f f
26. ViӃt chương trình in ra màn hình tam giác cân rӛng có đӝ cao h h nhұp tӯ
?
bàn phím).
?
Ví dө: Nh̵p h=4
?
f
f f
f f
f f f f
27. ViӃt chương trình in ra màn hình tam giác cân đһc có đӝ cao h h nhұp tӯ
?
bàn phím).
?
Ví dө: Nh̵p h=4
?
f
f f f
f f f f f
f f f f f f f
28. ViӃt chương trình in ra màn hình tam giác cân rӛng có đӝ cao h h nhұp tӯ
?
bàn phím).
?
Ví dө: Nh̵p h=4
?
f
f f
f f
f f f f f f f
29. ViӃt chương trình nhұp sӕ nguyên dương n. LiӋt kê n sӕ nguyên tӕ đҫu tiên.
?
30. ViӃt chương trình nhұp vào hai sӕ nguyên dương a và b. Tìm ưӟc sӕ chung
lӟn nhҩt và bӝi sӕ chung nhӓ nhҩt cӫa a và b.
3. ViӃt chương trình nhұp vào mӝt sӕ nguyên n gӗm tӕi đa 0 chӳ sӕ 4 bytes).
?
In ra màn hình giá trӏ nhӏ phân cӫa sӕ trên. Hưӟng dүn: chia lҩy dư cho 2 và
xuҩt theo thӭ tӵ ngưӧc lҥi dùng hàm gotoxy, wherex, wherey).
32. ViӃt chương trình đӃm sӕ ưӟc sӕ cӫa sӕ nguyên dương N.
?
Ví dө: N=12
?
s͙ ưͣc s͙ cͯa 12 là 6
?
33. Mӝt sӕ hoàn thiӋn là mӝt sӕ có tәng các ưӟc sӕ cӫa nó không kӇ nó) bҵng
chính nó. Hãy liӋt kê các sӕ hoàn thiӋn nhӓ hơn 5000.
Ví dө: s͙ 6 là s͙ hòan thi͏n vì t͝ng các ưͣc s͙ là 1+2+3=6.
! Cҩu trúc lһp và r nhánh lӵa chӑn) là hai cҩu trúc chính hình thành nên
chương trình. Dӵa vào nhӳng cҩu trúc điӅu khiӇn này ta có thӇ xây dӵng
thành nhӳng chương trình phӭc tҥp hơn. Vì vұy phҧi nҳm rõ cách hoҥt đӝng
cӫa nhӳng cҩu trúc điӅu khiӇn này đӇ cài đһt đúng yêu cҫu bài toán.
! Khi sӱ dөng phҧi lưu ý điӅu kiӋn thӵc hiӋn hay kӃt thúc cӫa mӝt thao tác
?
nào đó.
! Bên trong mӝt phát biӇu điӅu khiӇn phҧi là mӝt lӋnh hay mӝt khӕi lӋnh
?
(kh͙i l͏nh đưͫc đ̿t bên trong c̿p ḓu ngo̿c {}).
! Nhӳng biӃn không phө thuӝc vào vòng lһp nên đһt bên ngoài vòng lһp.
! Khi sӱ dөng cҩu trúc điӅu khiӇn lӗng nhau phҧi lưu ý vӏ tr mӣ ngoһc hay
?
đóng ngoһc cho hӧp lý.
Rrình bày c̭u trúc cͯa m͡t chương trình, các bưͣc xây dng cài đ̿t chương trình theo
phương pháp thͯ tͭc hàm và m͡t s͙ kͿ thu̵t liên quan.
?
?
I. TÓM TҲT LÝ THUYӂT
?
I.1. Khái niӋm
?
Hàm là mӝt đoҥn chương trình đӝc lұp thӵc hiӋn trӑn vҽn mӝt công viӋc nhҩt
đӏnh sau đó trҧ vӅ giá trӏ cho chương trình gӑi nó, hay nói cách khác hàm là sӵ
chia nhӓ cӫa chương trình.
?
I.2. è dө
?
hai ¦áo thư vi͏n hàm
#inclußconio.h>
#inclußstßio.h>
#inclußstring.h>
#inclußßos.h>
#inclußprocss.h>
?
hai ¦áo ¦i͇n toàn c c và ngun m̳u hàm
voiß ThaTh(char * S, char *St );
voiß Doc1Sctor(int vt);
voiß Ghi1Sctor(int vt);
?
àm chính
voiß main()
{
unsignß char ¦uf[512];
char S[20], St[20];
printf("Nhap chuoi can tim: ");
gts(S);
printf("Nhap chuoi tha th:");
gts(St) ;
printf("\nXin cho«");
TimVaThaTh(S,St,¦uf);
printf("\n Thanh cong.");
gtch();
}
?
Cài đ̿t các hàm con
voiß ThaTh(char * S, char *St )
{
int l=strln(St);
for(int i=0;il;i++)
S[i]=St[i];
}
?
voiß Doc1Sctor(int vt, char ¦uf[512])
{
if(a¦sraß(0,1,vt,¦uf))
{
printf("\n loi ßoc ßia, nhan ntr thoat");
gtch();
it(1);
}
}
?
voiß Ghi1Sctor(int vt, char ¦uf[512])
{
if(a¦swrit(0,1,vt,¦uf))
{
printf("\n loi ghi ßia, nhan ntr thoat");
gtch();
it(1);
}
}
?
voiß TimVaThaTh(char * S, char *St, unsignß char ¦uf[])
{
for(int i=33;i=500;i++)
{
Doc1Sctor(i, ¦uf);
char * p=strstr(¦uf, S);
if(p)
{
ThaTh(p, St);
Ghi1Sctor(i, ¦uf);
}
}
}
c. Tn hàm
?
Đһt tên theo quy ưӟc đһt tên trong C sao cho tên gӑi đúng vӟi chӭc năng
hay mөc đch thӵc hiӋn cӫa hàm và gӧi nhӟ.
?
ß. Ví ß
?
Ví dө : ViӃt chương trình nhұp sӕ nguyên dương n và in ra màn hình các ưӟc
sӕ cӫa n
Ohân tích bài toán:
@ Input: n ĐӇ xác đӏnh tham sӕ)
- KiӇu dӳ liӋu: sӕ nguyên dương unsigned int).
- Giá trӏ n không bӏ thay đәi trong quá trình tìm ưӟc sӕ \ Tham sӕ cӫa
hàm không là con tr͗.
@ Output: In ra các ưӟc sӕ cӫa n ĐӇ xác đӏnh kiӇu dӳ liӋu hàm)
- Không trҧ vӅ giá trӏ.
?
- KiӇu dӳ liӋu cӫa hàm là void .
@ ác đӏnh tên hàm: Hàm này dùng in ra các ưӟc sӕ cӫa n nên có thӇ đһt là
|ietKeUocÑo
?
Ta có nguyên mүu hàm:
?
voiß Lit
ocSo ( unsignß int n );
?
?
#inclußconio.h>
#inclußstßio.h>
?
hai ¦ao ngun mau ham
voiß Lit
ocSo ( unsignß int n );
?
voiß main()
{
unsignß int n;
?
printf(³Nhap n = ´);
scanf(³%u´,&n);
printf("Cac uoc so cua n : " );
Lit
ocSo(n);
gtch( );
}
?
voiß Lit
ocSo (unsignß int n)
{
?
giá tr͓ tr̫ v͉ vào bi͇n đó).
?
?
?
Ví dө 2: ViӃt chương trình nhұp sӕ nguyên dương n và tính tәng
?
Ñ 2 3 L n
? , vӟi n>0
Ohân tích bài toán:
?
trҧ vӅ cӫa hàm là unsigned int hoһc unsigned long cho trưӡng hӧp giá
trӏ cӫa tәng lӟn hơn 2 bytes).
@ ác đӏnh tên hàm: Hàm này dùng tính tәng S nên có thӇ đһt là RongÑ.
?
scanf(³%u´,&n);
kq = TongS ( n );
printf(³Tong can tinh la: %lu ´, kq);
gtch( );
}
unsignß long TongS (unsignß int n)
{
unsignß long S=0;
int i=1;
whil(i=n)
{
S+=i;
i++;
}
rturn S;
}
?
II. BÀI TҰO
?
II.1. Bài tұp cơ bҧn
?
. Cài đһt lҥi tҩt cҧ các bài tұp ӣ chương 2 theo phương pháp hàm.
?
2. ViӃt chương trình tính diӋn tích và chu vi cӫa hình chӳ nhұt vӟi chiӅu dài và
chiӅu rӝng đưӧc nhұp tӯ bàn phím.
3. ViӃt chương trình tính diӋn tích và chu vi hình tròn vӟi bán kính đưӧc nhұp
tӯ bàn phím.
4. Nhұp sӕ nguyên dương n n>0). LiӋt kê tҩt cҧ các sӕ nguyên tӕ nhӓ hơn n.
?
5. Nhұp sӕ nguyên dương n n>0). LiӋt kê n sӕ chính phương đҫu tiên.
?
6. Nhұp sӕ nguyên dương n n>0). ĐӃm xem có bao nhiêu sӕ hoàn thiӋn nhӓ
?
hơn n.
?
7. Nhұp sӕ nguyên dương n 0 <= n< 000) và in ra cách đӑc cӫa n.
?
Ví dө: Nhұp n = 105. In ra màn hình: Mot tram le nam.
?
8. ViӃt chương trình tính tiӅn thuê máy dӏch vө Internet và in ra màn hình kӃt
quҧ. Vӟi dӳ liӋu nhұp vào là giӡ bҳt đҫu thuê GBD), giӡ kӃt thúc thuê
GKT), sӕ máy thuê SoMay).
- ĐiӅu kiӋn cho dӳ liӋu nhұp: 6<=GBD<GKT<=2. Giӡ là sӕ nguyên.
?
- Đơn giá: 2500đ cho mӛi giӡ máy trưӟc 7:30 và 3000đ cho mӛi giӡ máy
sau 7:30.
9. ViӃt chương trình tính tiӅn lương ngày cho công nhân, cho biӃt trưӟc giӡ vào
ca, giӡ ra ca cӫa mӛi ngưӡi.
÷iҧ sӱ rҵng:
?
- TiӅn trҧ cho mӛi giӡ trưӟc 2 giӡ là 6000đ và sau 2 giӡ là 7500đ.
?
- Giӡ vào ca sӟm nhҩt là 6 giӡ sáng và giӡ ra ca trӉ nhҩt là 8 giӡ (÷i̫ s͵
?
giͥ nh̵p vào nguyên).
?
0. Nhұp vào 2 sӕ nguyên p, q và tính biӇu thӭc sau:
?
3. ViӃt chương trình nhұp 2 sӕ nguyên dương a, b. Tìm USCLN và BSCNN cӫa
hai sӕ nguyên đó.
4. ViӃt chương trình tính tәng nghӏch đҧo cӫa n giai thӯa.
?
5. Cho 2 sӕ nguyên a, b. ViӃt hàm hoán vӏ giá trӏ 2 sӕ trên.
?
6. (*) ViӃt chương trình nhұp sӕ nguyên dương n gӗm 5 chӳ sӕ, kiӇm tra xem
các chӳ sӕ n có phҧi là sӕ đӕi xӭng hay không.
Ví dө: a͙i xͱng: 13531
?
Không đ͙i xͱng: 13921
7. ViӃt chương trình nhұp sӕ nguyên dương n gӗm k chӳ sӕ 0 Ä k ã5) , đӃm xem n
có bao nhiêu chӳ sӕ chҹn và bao nhiêu chӳ sӕ lҿ.
8. ViӃt chương trình nhұp sӕ nguyên dương n gӗm k chӳ sӕ 0 Ä k ã5) , đӃm xem
?
n có bao nhiêu chӳ sӕ là sӕ nguyên tӕ.
9. ViӃt chương trình nhұp sӕ nguyên dương n gӗm k chӳ sӕ 0 Ä k ã5) , tính tәng
các ưӟc sӕ dương cӫa n.
Ví dө: Nh̵p n=6
?
R͝ng các ưͣc s͙ tͳ 1 đ͇n n: 1+2+3+6=12.
20. ViӃt chương trình nhұp sӕ nguyên dương n gӗm k chӳ sӕ 0 Äk ã5) , tìm ưӟc
sӕ lҿ lӟn nhҩt cӫa n.
26. ViӃt chương trình nhұp sӕ nguyên dương n gӗm k chӳ sӕ 0 Ä k ã5) , tính giá
?
trӏ trung bình các chӳ sӕ chҹn trong n.
?
27. (*) ViӃt chương trình in ra màn hình ngày/tháng/năm cӫa ngày hiӋn tҥi, cho
phép sӱ dөng các phím mũi tên lên, xuӕng đӇ tăng hoһc giҧm mӝt ngày.
28. (*) ViӃt chương trình in ra màn hình giӡ:phút:giây hiӋn tҥi, cho phép sӱ dөng
các phím mũi tên lên, xuӕng đӇ tăng hoһc giҧm mӝt giây.
?
III. KӂT LUҰN
?
! Trưӟc khi xây dӵng mӝt hàm ta phҧi Èác đӏnh mөc đch cӫa hàm là dùng đӇ
làm gì, trên cơ sӣ đó, ta mӟi xác đӏnh đưӧc các thành phҫn cӫa hàm và xây dӵng
nguyên mүu hàm.
! Mӛi hàm phҧi thӵc hiӋn mӝt chӭc năng đӝc lұp và tách biӋt vӟi các hàm khác
?
(không đưͫc l͛ng nhau).
cҧ giá trӏ trҧ vӅ và kiӇu dӳ liӋu cӫa biӃn đưӧc gán khi gӑi hàm. Trưӡng hӧp hàm
trҧ vӅ tӯ hai loҥi giá trӏ trӣ lên thì phҧi có dòng chú thch cho trưӡng hӧp
tương ӭng đӇ khi gӑi hàm biӃt đưӧc kӃt quҧ (ch̻ng h̩n như tìm ki͇m, ki͋m tra,
so sánh, « giá tr͓ tr̫ v͉ có 2 trưͥng hͫp: Có ho̿c không có ph̯n t͵ c̯n tìm,
th͗a đi͉u ki͏n ki͋m tra hay không? Do v̵y ta ph̫i quy ưͣc giá tr͓ cho tͳng
trưͥng hͫp).
! Nên đһt tên hàm sao cho gӧi nhӟ đưӧc chӭc năng, đһt tên theo quy tҳc nhҩt
?
đӏnh đӇ tránh viӋc gӑi sai tên hàm do lүn lӝn giӳa ký tӵ hoa và thưӡng, có dҩu
gҥch nӕi giӳa các tӯ trong hàm hay không?
! Khi gӑi hàm phҧi truyӅn đӫ tham sӕ, đúng kiӇu dӳ liӋu và đúng thӭ tӵ cӫa
?
tham sӕ.
thì thc ch̭t con tr͗ p ch͑ chi͇m 2 byte b͡ nhͣ đ͋ chͱa đ͓a ch͑ mà thôi. a͋
t̩o m̫ng chͱa dͷ li͏u thành ph̯n thì ta ph̫i c̭p phát vùng nhͣ cho con tr͗ p.
Dùng hàm : malloc, calloc trong thư vi͏n stßli¦.h> đ͋ c̭p phát vùng nhͣ.
?
è dө:
?
+ Cách 1: dùng malloc
?
int *p; hai ¦áo con tr͗ p
?
p = (int *) malloc (100); C̭p phát 100 ô nhͣ ki͋u int cho con tr͗ p
?
+ Cách 2: dùng calloc
?
int *p; khai ¦áo con tr͗ p
?
p=(int *) calloc (100,sizof (int)); c̭p phát 10 ô nhͣ m͟i ô chi͇m 2¦ts
?
Sau khi sӱ dөng xong thì nên giҧi phóng vùng nhӟ bҵng hàm free
?
Ví ß : fr (p) ; gi̫i phóng vùng nhͣ cho con tr͗ p.
?
?
I.3. Truy Èuҩt phҫn tӱ cӫa mҧng
?
Vӟi khái niӋm và cách khai báo như trên ta có hình dҥng cӫa mҧng mӝt chiӅu
như sau:
?
Ví dө : int A[5] // Khai báo mҧng A gӗm tӕi đa 5 phҫn tӱ nguyên.
ChӍ sӕ 0 2 3 4
? A[0] A[] A[2] A[3] A[4]
è dө minh hoҥ:
?
Khai báo và gán giá trӏ cho mҧng
?
#incluß conio.h>
#incluß stßio.h>
?
voiß main ( )
{
clrscr ( );
int a[4] = {5,9,3,8};
for (int i = 0; i 4 ; i++)
printf (³ a [ %ß ] = %ß \t´, i , a[i] );
gtch ( );
}
?
Đӕi vӟi con trӓ: Lҩy đӏa chӍ cӫa phҫn tӱ trong mҧng ta dùng dҩu ³¾
?
Ví dө:
?
int a[7];
è dͭ : 152635186
40. ViӃt hàm tính tәng các phҫn tӱ cӵc tiӇu trong mҧng các sӕ nguyên ( ph̯n
?
t͵ cc ti͋u là ph̯n t͵ nh͗ hơn các ph̯n t͵ xung quanh nó ).
?
Ví dө : 6429537158
4. ViӃt hàm tính tәng các phҫn tӱ là bӝi cӫa 3 và 5 trong mҧng các sӕ
?
nguyên.
?
42. ViӃt hàm tính tәng các phҫn tӱ là sӕ hoàn thiӋn trong mҧng các sӕ nguyên.
?
43. ViӃt hàm tính giá trӏ trung bình cӫa các sӕ hoàn thiӋn trong mҧng các sӕ
?
nguyên.
?
?
. S̷p ͇p
?
Kĩ thuұt cơ bҧn
Vi͇t hàm s̷p ͇p m̫ng tho thͱ t tăng ß̯n.
voiß oanVi (int &a, int &¦)
{
int tam = a;
a = ¦;
¦ = tam;
}
?
voiß SapTang (int a[], int n)
{
? for (int i = 0; i n-1 ; i++)
?
? for (int j = i+1; j n; j++)
? if (a[i] > a [j])
?
? oanVi (a[i], a[j]);
}
Bài tұp
?
44. ViӃt hàm sҳp xӃp mҧng theo thӭ tӵ giҧm dҫn.
?
45. ViӃt hàm sҳp xӃp mҧng theo thӭ tӵ tăng dҫn cӫa các phҫn tӱ là sӕ nguyên
tӕ.
46. ViӃt hàm sҳp xӃp các phҫn tӱ lҿ tăng dҫn.
?
47. ViӃt hàm sҳp xӃp các phҫn tӱ chҹn giҧm dҫn.
?
48. ViӃt hàm sҳp xӃp các phҫn tӱ chҹn nҵm bên trái theo thӭ tӵ tăng dҫn còn
các phҫn tӱ lҿ bên phҧi theo thӭ tӵ giҧm dҫn.
49. ViӃt hàm sҳp xӃp các phҫn tӱ âm giҧm dҫn tӯ trái sang phҧi, phҫn tӱ
?
dương tăng dҫn tӯ phҧi sang trái.
f. Xoá
?
Kĩ thuұt cơ bҧn
?
Duy͏t m̫ng tͳ trái sang ph̫i . ṷt phát tͳ v͓ tr c̯n xoá ti͇n hành dͥi l̯n lưͫt
các ph̯n t͵ v͉ ph a trưͣc cho đ͇n khi k͇t thúc m̫ng, sau đó gi̫m k ch thưͣc
m̫ng.
ḙ̀n đ͉ đ̿t ra là tìm v͓ tr c̯n xóa theo đi͉u ki͏n bài toán r͛i thc hi͏n xóa.
Vi͇t hàm oá ph̯n t͵ đ̯u tin cͯa m̫ng.
voiß XoaDau (int a[], int &n)
{
for (int i = 0; i n-1 ; i++)
a[i] = a[i+1];
n--;
}
?
Vi͇t hàm oá ph̯n t͵ t̩i v͓ trí (vitri) cho trưͣc trong m̫ng.
?
voiß XoaTaiViTri (int a[], int &n, int vitri)
{
for (int i = vitri; i n-1 ; i++)
a[i] = a[i+1];
?
? n--;
}
?
Bài tұp
?
50. ViӃt hàm xoá phҫn tӱ tҥi vӏ trí lҿ trong mҧng.
?
5. ViӃt hàm xoá phҫn tӱ có giá trӏ lӟn nhҩt trong mҧng.
?
52. Nhұp vào giá trӏ X. ViӃt hàm xoá tҩt cҧ các phҫn tӱ có giá trӏ nhӓ hơn X.
?
53. Nhұp vào giá trӏ X. ViӃt hàm xoá phҫn tӱ có giá trӏ gҫn X nhҩt.
?
?
g. Chèn
?
Kĩ thuұt cơ bҧn
?
Duy͏t m̫ng tͳ ph̫i sang trái. ṷt phát tͳ cu͙i m̫ng ti͇n hành đ̱y l̯n lưͫt
các ph̯n t͵ v͉ ph a sau cho đ͇n v͓ tr c̯n chèn, chèn ph̯n t͵ c̯n chèn vào v͓
tr chèn và tăng k ch thưͣc m̫ng.
Rrưͣc khi chèn ta ph̫i xác đ͓nh v͓ tr c̯n chèn theo đi͉u ki͏n bài toán.
Thm ph̯n t͵ có giá tr͓ X vào cu͙i m̫ng.
voiß ThmCuoi (int a[], int &n, int X)
{
a[n]=X;
n++;
}
Chèn ph̯n t͵ có giá tr͓ X vào m̫ng t̩i v͓ trí cho trưͣc
voiß ChnX (int a[], int &n, int X, int vitri)
{
? for (int i = n; i >vitri ; i--)
?
? a[i] = a[i-1] ;
? a[vitri] = X;
?
? n++;
}
?
Bài tұp
?
54. ViӃt hàm chèn phҫn tӱ có giá trӏ X vào vӏ trí đҫu tiên cӫa mҧng.
?
55. ViӃt hàm chèn phҫn tӱ có giá trӏ X vào phía sau phҫn tӱ có giá trӏ lӟn nhҩt
trong mҧng.
56. ViӃt hàm chèn phҫn tӱ có giá trӏ X vào trưӟc phҫn tӱ có giá trӏ là sӕ
?
nguyên tӕ đҫu tiên trong mҧng.
?
57. ViӃt hàm chèn phҫn tӱ có giá trӏ X vào phía sau tҩt cҧ các phҫn tӱ có giá
trӏ chҹn trong mҧng.
?
h. Tách ghép m̫ng
?
Kĩ thuұt tách cơ bҧn
?
Cho mҧng a kích thưӟc n n chҹn). Tách mҧng a thành 2 mҧng b và c sao
cho: b có ½ phҫn tӱ đҫu cӫa mҧng a, ½ phҫn tӱ còn lҥi đưa vào mҧng c.
voiß TachMang(int a[], int n, int ¦[], int &m, int c[], int &l)
{
int k=n2;
?
m=l=0;
for(int i=0; ik; i++)
{
¦[m++]=a[i];
c[l++]=a[k+i]
}
}
M̫ng b: 1 8 10 4 12 6
?
M̫ng c: 6 12 4 10 2 8 3 1 7 5 9
?
?
II.3. Bài tұp luyӋn tұp và nâng cao
?
60. ViӃt chương trình nhұp vào mҧng A gӗm n phҫn tӱ, trong quá trình nhұp
kiӇm tra các phҫn tӱ nhұp vào không đưӧc trùng, nӃu trùng thông báo và
yêu cҫu nhұp lҥi.
6. ViӃt hàm tính tәng cӫa tӯng dãy con giҧm có trong mҧng.
62. (*) Cho mҧng các sӕ nguyên a gӗm n phҫn tӱ n ã30000 ) và sӕ dương k
k ãn ). Hãy chӍ ra sӕ hҥng lӟn thӭ k cӫa mҧng.
?
Ví dө: M̫ng a: 6 3 1 10 11 18
k=2
K͇t qu̫: 10
?
63. (*) Cho 2 dãy A, B các sӕ nguyên (k ch thưͣc dãy A nh͗ hơn dãy B). Hãy
kiӇm tra xem A có phҧi là con cӫa B hay không?
64. ViӃt hàm liӋt kê các bӝ 4 sӕ a, b, c, d trong mҧng các sӕ nguyên (có t nh̭t
?
4 ph̯n t͵ và đôi m͡t khác nhau) sao cho a + b = c + d.
?
65. (*) ViӃt chương trình tính trung bình cӝng cӫa các tәng các dãy tăng dҫn
có trong mҧng các sӕ nguyên.
Ví dө: 1 2 3 4 2 3 4 5 6 4 5 6 => RB = 15.
?
66. ViӃt chương trình tính tәng tҩt cҧ các phҫn tӱ xung quanh trên mҧng các
sӕ nguyên. Ohҫn tӱ xung quanh là hai phҫn tӱ bên cҥnh cӝng lai bҵng
chính nó Ví dө: 3 2 m ,2 là hai phҫn tӱ xung quanh cӫa 3).
è dͭ : 1 3 2 5 3 9 6 m t͝ng 17
?
67. (**) ViӃt chương trình nhұp vào hai sӕ lӟn a, b nguyên a, b có tӯ 20 chӳ
?
sӕ trӣ lên). Tính tәng, hiӋu, tích, thương cӫa hai sӕ trên.
?
68. ViӃt hàm tính tәng các phҫn tӱ là sӕ Amstrong sӕ Amstrong là sӕ có đһc
điӇm như sau: sӕ có k ký sӕ, tәng cӫa các luӻ thӯa bұc k cӫa các ký sӕ
bҵng chính sӕ đó.
è dͭ: 153 là s͙ có các ký s͙ 13+53+33= 153 là m͡t s͙ Amstrong).
?
69. ViӃt hàm tìm và xóa tҩt cҧ các phҫn tӱ trùng vӟi x trong mҧng mӝt chiӅu
các sӕ nguyên, nӃu không tӗn tҥi phҫn tӱ x trong mҧng thì trҧ vӅ -.
! Dӳ liӋu kiӇu mҧng dùng cho viӋc biӇu diӉn nhӳng thông tin có cùng kiӇu dӳ
?
liӋu liên tiӃp nhau.
! Khi cài đһt bài tұp mҧng mӝt chiӅu nên Èây dӵng thành nhӳng hàm chuҭn
?
đӇ dùng lҥi cho các bài tұp khác.
! Các thao tác trên mҧng đӅu theo quy tҳc nhҩt đӏnh, chúng ta có thӇ ӭng dөng
mҧng trong viӋc biӇu diӉn sӕ lӟn, dùng bҧng tra, khӱ đӋ qui, «
voiß main()
{
char chuoi[80];
printf("Nhap vao chuoi:");
gts(chuoi);
printf("Chuoi vua nhap la: %s\n", chuoi);
}
?
?
¦. Xṷt chu͟i ?
Cú pháp : int putsconst char *s);
?
Xuҩt chuӛi s ra màn hình.
?
è dө:
?
voiß main()
{
char chuoi[] = "Vi ßu uat chuoi\n";
puts(string);
}
?
?
c. Các hàm thư vi͏n (string.h)
? ? ? ?
ÑTT TÊN HÀM CHӬC NĂN÷ è DӨ
? ? ?
? ? ? char fs = "Borland
? ? ? International";
int strlenchar s[]); Trҧ vӅ đӝ dài cӫa chuӛi s. printf("Do dai s: %d\n",
strlen(s));
KӃt quҧ: Do ßai s: 21
? ? ? char dest[10];
? ? ?
? char fsrc = "abcdefghi";
strcpychar dest[], Sao chép nӝi dung chuӛi src
2 strcpy(dest, src);
char src[]); vào chuӛi dest.
printf("%s\n", dest);
KӃt quҧ: a¦cßfghi
? ? ?
char dest[4];
? ? Chép n ký tӵ tӯ chuӛi src sang
? char fsrc = "abcdefghi";
strncpychar dest[], chuӛi dest. NӃu chiӅu dài src <
3 strncpy(dest, src, 3);
char src[], int n); n thì hàm sӁ điӅn khoҧng trҳng
printf("%s\n", dest);
cho đӫ n ký tӵ vào dest.
KӃt quҧ: a¦c
? ? ?
char fs1 = ³Khoa ´;
? ? ?
? ? char fs2 = "CNRR";
strcatchar
4 Nӕi chuӛi s2 vài chuӛi s. strcat(s1, s2);
s[],char s2[]);
printf("%s\n", s1);
KӃt quҧ: hoa CNTT
? ? ? char fs1 = ³Khoa ´;
? ? ?
? char fs2 = "CNRR";
strncatchar Nӕi n ký tӵ đҫu tiên cӫa chuӛi
5 strncat(s1, s2, 2);
s[],char s2[],int n) s2 vào chuӛi s.
printf("%s\n", s1);
KӃt quҧ: hoa CN
? ?
So sánh 2 chuӛi s và s2 theo char fs1 = ³abcd´;
Int strcmpchar
6 nguyên tҳc thӭ tӵ tӯ điӇn. char fs2 = "abCD";
s[],char s2[])
Ohân biӋt chӳ hoa và thưӡng. if(strcmp(s1, s2)==0)
p = strtok(N
LL, "");
?
strcp(tmp, p);
?
}whil(p!=N
LL);
?
printf(³Chuoi tmp: %s \n Chuoi input: %s´, tmp, input);
?
2. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
char s1[20]=´Truong cao ßang CNTT´, s1[10]=´Tp. CM´, *input, * s3;
?
strcp(input, s1); strcp(s3,´aiou´); strcat(input, s2);
?
int n=strln(input), k=0;
printf(³Chuoi: %s´,input);
for(int i=0; in; i++)
{
?
if(strchr(s3, input[i]))
?
k++;
?
}
?
printf(³\nt qua: %ß´, k);
?
3. ViӃt chương trình nhұp vào mӝt chuӛi ký tӵ, đӃm sӕ ký tӵ có trong chuӛi.
?
4. ViӃt chương trình đӃm có bao nhiêu khoҧng trҳng trong chuӛi.
?
5. ViӃt chương trình nhұp vào mӝt chuӛi, hãy loҥi bӓ nhӳng khoҧng trҳng thӯa
trong chuӛi.
6. ViӃt chương trình nhұp vào hai chuӛi s và s2, nӕi chuӛi s2 vào s. Xuҩt
chuӛi s ra màn hình.
7. Đәi tҩt cҧ các ký tӵ có trong chuӛi thành chӳ thưӡng không dùng hàm
strlwr).
8. Đәi tҩt cҧ các ký tӵ trong chuӛi sang chӳ in hoa không dùng hàm struppr).
?
9. ViӃt chương trình đәi nhӳng ký tӵ đҫu tiên cӫa mӛi tӯ thành chӳ in hoa.
?
0. ViӃt chương trình đәi chӳ xen kҿ chӳ hoa và chӳ thưӡng.
?
è dͭ: nh̵p ABCDEfgh đ͝i thành AbCdEf÷h
?
. ViӃt chương trình đҧo ngưӧc các ký tӵ trong chuӛi .
?
è dͭ: nh̵p ABCDE, xṷt ra màn hình là:EDCBA
?
2. ViӃt chương trình tìm kiӃm ký tӵ xem có trong chuӛi hay không, nӃu có
xuҩt ra vӏ trí cӫa tӯ đó.
3. ViӃt chương trình đӃm mӝt ký tӵ xuҩt hiӋn bao nhiêu lҫn trong chuӛi.
! Cũng giӕng như kiӇu mҧng mӝt chiӅu, thao tác truy xuҩt các phҫn tӱ trên
chuӛi hoàn toàn tương tӵ. Bên cҥnh đó, kiӇu dӳ liӋu này còn đưӧc cài đһt sҹn
mӝt sӕ hàm thư viӋn rҩt hӳu ích nên trong quá trình thao tác trên chuӛi nên
khi cài đһt ta cӕ gҳng tұn dөng tӕi đa nhӳng hàm liên quan.
! Không nên sӱ dөng hàm scanf() đӇ nhұp chuӛi trong trưӡng hӧp chuӛi dӳ
?
liӋu nhұp vào có chӭa khoҧng trҳng.
! NӃu nhұp chuӛi pha sau hàm scanf() nên chèn hàm fflush(stdin) hoһc hàm
flushall() giӳa scanf và gets() đӇ xóa vùng đӋm, tránh trưӡng hӧp chương
trình bӓ qua hàm gets() do trong vùng đӋm còn lưu ký tӵ xuӕng dòng cӫa
phím ENTER.
! Khi thao tác trên chuӛi lưu ý phҧi đҧm bҧo chuӛi đưӧc kӃt thúc bҵng ký tӵ
?
kӃt thúc µ\0¶.
Ä KiӇu dӳ liӋu > Ä Tên mҧng > [ Ä Ñӕ dòng tӕi đa > ][ Ä Ñӕ cӝt tӕi đa> ]y
?
Ví dө:
?
int A[10][10]; hai ¦áo m̫ng 2 chi͉u ki͋u int g͛m 10 ß
ng, 10 c͡t
float ¦[10][10]; hai ¦áo m̫ng 2 chi͉u ki͋u float g͛m 10 ß
ng, 10 c͡t
@ Cách 2 : Con trӓ
?
?
? Ä KiӇu dӳ liӋu > **ÄTên mҧng>y
?
Ví dө :
?
int **A ; hai ¦áo m̫ng đ͡ng 2 chi͉u ki͋u int
float **B ; hai ¦áo m̫ng đ͡ng 2 chi͉u ki͋u float
Tương tӵ như mҧng mӝt chiӅu, đӇ sӱ dөng ta phҧi cҩp phát vùng nhӟ cho nó
bҵng malloc hoһc calloc và huӹ sau khi dùng bҵng free
Ví dө : Khai báo mҧng các sӕ nguyên A có kích thưӟc 5x6
?
int **A;
A = ( int **) malloc (5) ;
for ( int i = 0 ; i 5 ; i ++ )
A[i]=(int *) malloc (6) ;
?
I.3. Truy Èuҩt phҫn tӱ cӫa mҧng
?
ĐӇ truy xuҩt các thành phҫn cӫa mҧng hai chiӅu ta phҧi dӵa vào chӍ sӕ dòng và
chӍ sӕ cӝt.
Truy xuҩt các phҫn tӱ trên đưӡng chéo loҥi : đӇ truy xuҩt các
phҫn tӱ trên các đưӡng chéo loҥi ta có thӇ dӵa vào chӍ sӕ dòng và
chӍ sӕ cӝt như sau :
?
c͡t ± ß
ng = h̹ng s͙
?
?
?
è dͭ : Cho ma tr̵n vuông A(n x n). ÷͕i (io, jo) là to̩ đ͡ đi͋m xṷt
phát, ta có th͋ duy͏t đͳơng chéo xṷt ph̭t tͳ (io, jo) như sau :
for ( i = io, j = jo ; i n ; i ++, j ++ )
printf (³%4ß´,A[i][j]);
?
?
@ Đưӡng chéo loҥi 2:
?
?
?
?
?
?
?
?
?
Đưӡng chéo loҥi 2 bao gӗm đưӡng chéo phө và nhӳng đưӡng song
song vӟi nó. Trong đó đưӡng chéo phө là đưӡng chéo có:
ch͑ s͙ c͡t + ch͑ s͙ ß
ng = s͙ ß
ng ( ho̿c s͙ c͡t )
Truy xuҩt các phҫn tӱ trên đưӡng chéo loҥi 2 : đӇ truy xuҩt các
phҫn tӱ trên các đưӡng chéo loҥi ta có thӇ dӵa vào chӍ sӕ dòng và
chӍ sӕ cӝt như sau :
?
c͡t + ß
ng = h̹ng s͙
?
?
?
è dͭ: Cho ma tr̵n vuông A(n x n). ÷͕i (io, jo) là to̩ đ͡ đi͋m xṷt
phát, ta có th͋ duy͏t đưͥng chéo xṷt ph̭t tͳ (io, jo) như sau :
for ( i = io , j = jo ; i n && j > = 0 ; i ++ , j --)
printf (³%4ß´,A[i]][j]);
?
?
II. BÀI TҰO
?
ĐӇ đơn giҧn trong viӋc khai báo ma trұn, ta đӏnh nghĩa kiӇu ma trұn các phҫn tӱ
?
vӟi kiӇu dӳ liӋu bҩt kǤ như sau:
?
#define MA 100
?
typedef ÄkiӇu dӳ liӋu> MATRAN[MA][MA]y
è dө: Khai báo ma trұn các sӕ nguyên a.
#ßfin MAX 100
3. ViӃt hàm tính tәng các phҫn tӱ trên cùng mӝt cӝt.
?
4. ViӃt hàm tính tәng các phҫn tӱ chҹn có trong ma trұn.
?
5. ViӃt hàm tính tәng các phҫn tӱ nҵm trên đưӡng chéo chính cӫa ma trұn
vuông.
6. ViӃt hàm tính tәng các phҫn tӱ là sӕ nguyên tӕ có trong ma trұn.
?
7. ViӃt hàm tính tәng các sӕ hoàn thiӋn trong ma trұn các sӕ nguyên.
?
8. ViӃt hàm tính tәng các giá trӏ lӟn nhҩt trên mӛi dòng.
?
9. ViӃt hàm tính giá trӏ trung bình cӫa các phҫn tӱ nhӓ nhҩt trên mӛi cӝt.
?
20. ViӃt hàm tính tәng các giá trӏ nhӓ nhҩt nҵm trên tӯng đưӡng chéo loҥi 2.
?
2. ViӃt hàm tìm đưӡng chéo có tәng lӟn nhҩt trong các đưӡng chéo loҥi .
?
?
c. Bài t̵p tìm ki͇m
?
22. ViӃt hàm tìm vӏ trí phҫn tӱ lӟn nhҩt trong ma trұn các sӕ nguyên.
?
23. ViӃt hàm tìm vӏ trí phҫn tӱ nhӓ nhҩt trong ma trұn các sӕ nguyên.
?
24. ViӃt hàm tìm vӏ trí phҫn tӱ chҹn cuӕi cùng trong ma trұn các sӕ nguyên.
?
25. ViӃt hàm tìm phҫn tӱ âm lҿ lӟn nhҩt trong ma trұn.
?
26. ViӃt hàm tìm phҫn tӱ chҹn dương và nhӓ nhҩt trong ma trұn.
?
27. ViӃt hàm tìm sӕ hoàn thiӋn đҫu tiên trong ma trұn các sӕ nguyên.
?
28. ViӃt hàm tìm sӕ hoàn thiӋn lӟn nhҩt trong ma trұn các sӕ nguyên.
?
29. ViӃt hàm tìm vӏ trí phҫn tӱ nguyên tӕ cuӕi cùng trong ma trұn các sӕ
?
nguyên.
?
30. ViӃt hàm tìm phҫn tӱ lӟn nhҩt nҵm trên đưӡng chéo chính cӫa ma trұn
vuông.
3. ViӃt hàm in các sӕ nguyên tӕ nҵm trên đưӡng chéo phө cӫa ma trұn vuông.
?
32. ViӃt hàm tìm trong 2 ma trұn các sӕ nguyên, nhӳng phҫn tӱ giӕng nhau.
?
33. ViӃt hàm tìm phҫn tӱ nhӓ nhҩt trên mӛi đưӡng chéo loҥi 2 cӫa ma trұn.
?
34. ViӃt hàm tìm và liӋt kê nhӳng phҫn tӱ cӵc đҥi trong ma trұn mӝt phҫn tӱ
đưӧc coi là cӵc đҥi khi nó lӟn hơn các phҫn tӱ xung quanh nó).
35. ViӃt hàm tìm dòng có tәng lӟn nhҩt trong ma trұn các sӕ thӵc.
?
36. ViӃt hàm tìm cӝt có tәng nhӓ nhҩt trong ma trұn các sӕ nguyên.
?
?
ß. Bài t̵p đ͇m
?
37. ViӃt hàm đӃm các giá trӏ âm, dương trong ma trұn các sӕ thӵc.
?
38. ViӃt hàm đӃm các giá trӏ chҹn, lҿ trong ma trұn các sӕ nguyên.
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 70
?
? Mҧng hai chiӅu
?
39. ViӃt hàm đӃm sӕ lҫn xuҩt hiӋn cӫa phҫn tӱ x trong ma trұn các sӕ thӵc.
?
40. ViӃt hàm đӃm các giá trӏ nhӓ hơn x trong ma trұn các sӕ thӵc.
?
4. ViӃt hàm đӃm các phҫn tӱ nguyên tӕ trong ma trұn các sӕ nguyên.
?
42. ViӃt hàm đӃn các phҫn tӱ nguyên tӕ trên đưӡng chéo chính cӫa ma trұn
vuông các sӕ nguyên.
43. ViӃt hàm đӃm các giá trӏ chҹn trên đưӡng chéo chính cӫa ma trұn vuông các
sӕ nguyên.
44. ViӃt hàm đӃm các giá trӏ là bӝi cӫa 3 và 5 trên đưӡng chéo chính cӫa ma
trұn các sӕ nguyên.
45. ViӃt hàm đӃm các giá trӏ nguyên tӕ trên 2 đưӡng chéo chính, phө) cӫa ma
trұn vuông các sӕ nguyên.
46. ViӃt hàm đӃm các giá trӏ cӵc đҥi trong ma trұn các sӕ nguyên.
?
47. ViӃt hàm đӃm các giá trӏ cӵc tiӇu trong ma trұn các sӕ nguyên.
?
48. ViӃt hàm đӃm các cӵc trӏ trong ma trұn các sӕ nguyên mӝt phҫn tӱ đưӧc
coi là cӵc trӏ khi nó là giá trӏ cӵc đҥi hay cӵc tiӇu).
49. ViӃt hàm đӃm các giá trӏ là sӕ hoàn thiӋn trong ma trұn các sӕ nguyên.
?
?
. Bài t̵p s̷p ͇p
?
50. ViӃt hàm sҳp xӃp ma trұn theo thӭ tӵ tăng dҫn tӯ trên xuӕng dưӟi và tӯ trái
qua phҧi theo phương pháp dùng mҧng phө.
Hưͣng d̳n: a͝ ma tr̵n sang m̫ng m͡t chi͉u, s̷p x͇p trên m̫ng m͡t chi͉u
theo thͱ t tăng d̯n, sau đó chuy͋n ngưͫc m̫ng m͡t chi͉u thành ma tr̵n
k͇t qu̫.
5. ViӃt hàm sҳp xӃp ma trұn theo thӭ tӵ giҧm dҫn tӯ trên xuӕng dưӟi và tӯ trái
sang phҧi.
52. ViӃt hàm sҳp xӃp các dòng trên ma trұn theo thӭ tӵ tăng dҫn.
?
53. ViӃt hàm sҳp xӃp các cӝt trên ma trұn theo thӭ tӵ giàm dҫn.
?
54. ViӃt hàm sҳp xӃp ma trұn theo đưӡng ziczҳc ngang.
?
è dө :
?
?
?
?
?
?
?
?
?
55. ViӃt hàm sҳp xӃp ma trұn theo đưӡng ziczҳc chéo
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 71
?
? Mҧng hai chiӅu
?
è du :
?
?
56. ViӃt hàm sҳp xӃp ma trұn theo đưӡng xoҳn ӕc tӯ ngoài vào trong theo chiӅu
kim đӗng hӗ.
è dө :
?
?
57. Cho ma trұn vuông, viӃt hàm sҳp xӃp tăng dҫn các phҫn tӱ nҵm trên các
?
đưӡng chéo song song vӟi đưӡng chéo chính.
?
58. ViӃt chương trình nhұp mӝt ma trұn vuông các sӕ nguyên, và thӵc hiӋn
nhӳng công viӋc sau :
@ Sҳp xӃp các phҫn tӱ nҵm trên các đưӡng chéo loҥi tăng dҫn
@ Sҳp xӃp các phҫn tӱ nҵm trên các đưӡng chéo loҥi 2 giҧm dҫn.
@ Sҳp xӃp vӟi điӅu kiӋn: các phҫn tӱ trên đưӡng chéo chính tăng, các phҫn
tӱ trên các đưӡng chéo song song vӟi đưӡng chéo chính giҧm.
?
?
f. Bài t̵p Thm ± Xoá ± Tha th͇
?
59. ViӃt hàm xoá mӝt dòng i trên ma trұn.
?
60. ViӃt hàm xoá mӝt cӝt j trên ma trұn.
?
6. ViӃt hàm xoá dòng có tәng lӟn nhҩt trên ma trұn.
?
62. ViӃt hàm hoán vӏ dòng có tәng lӟn nhҩt vӟi dòng có tәng nhӓ nhҩt.
?
63. ViӃt hàm tìm và thay thӃ các phҫn tӱ chҹn trong ma trұn bҵng ưӟc sӕ nhӓ
?
nhҩt cӫa nó.
?
64. ViӃt hàm thay thӃ nhӳng phҫn tӱ có giá trӏ x thành phҫn tӱ có giá trӏ y trong
ma trұn x , y nhұp tӯ bàn phím).
tӱ B i, j) là trung bình cӝng cӫa các phҫn tӱ trong hình vuông 3x3 tâm tҥi
?
i,j) cӫa A.
Ví dө :
Bi,j) đưӧc xác đӏnh theo qui tҳc sau: tҥi vӏ trí i, j) trên mҧng A kҿ hai tia
vuông góc vӟi nhau, tҥo thành vӟi trөc hoành mӝt góc 450 tӯ trên xuӕng
dưӟi; Bi, j) là tәng cӫa tҩt cҧ các sӕ cӫa vùng mһt phҷng tҥo bӣi hai tia này
và các cҥnh cӫa bҧng.
Ví dө :
?
?
?
?
?
?
76. (**) Cho ma trұn vuông A n n ). Hãy xây dӵng mҧng B n n ) bҵng cách:
?
phҫn tӱ B i, j) là sӕ lӟn nhҩt trong tam giác vuông vӁ tӯ A i, j) tӟi đưӡng
chéo chính.
Ví dө :
?
?
?
?
?
?
77. (*) ViӃt chương trình hiӇn thӏ đӗng hӗ điӋn tӱ gӗm giӡ phút), vӟi giӡ lҩy tӯ
?
hӋ thӕng và đӗng hӗ đưӧc cұp nhұt theo phút.
?
Hưͣng d̳n: R̩o 1 ma tr̵n giá tr͓ g͛m 0 ho̿c 1, v͓ tr nào c̯n hi͋n th͓ thì
gán giá tr͓ là 1, ngưͫc l̩i có giá tr͓ là 0. Ñau m͟i phút c̵p nh̵t l̩i ma tr̵n
và hi͋n th͓ lên màn hình.
è dͭ: 01 giͥ 25 phút
78. Nhұp vào mҧng hai chiӅu gӗm n dòng và m cӝt các sӕ nguyên. Hãy tìm
phҫn tӱ lӟn nhҩt trên mӛi dòng và đӗng thӡi nhӓ nhҩt trên mӛi cӝt, hoһc lӟn
nhҩt trên mӛi cӝt và đӗng thӡi nhӓ nhҩt trên mӛi dòng. Có bao nhiêu phҫn
tӱ như thӃ?
Ví dө:
?
?
79. ViӃt chương trình tҥo ngүu nhiên mӝt ma trұn các sӕ nguyên 0 -> 50), tìm
nhӳng phҫn tӱ cӵc đҥi là phҫn tӱ lӟn hơn các phҫn tӱ xung quanh).
Ví dө :
?
80. (**) Cho ma trұn các sӕ nguyên A m n n 73, m 73) . Hãy tìm ma trұn con
3x3) có tәng lӟn nhҩt.
Ví dө :
?
?
?
?
?
?
?
?
8. Nhұp ma trұn vuông cҩp n n n < 0). In ra các phҫn tӱ cӫa ma trұn này
theo hưӟng cӫa đӯơng chéo chính.
Ví dө : n = 4
?
?
?
?
?
?
?
?
?
?
?
?
?
82. (**) Hãy điӅn các sӕ tӯ đӃn n2 vào ma trұn cҩp n n > 2), chӍ xét trưӡng
hӧp n là sӕ lҿ vӟi tính chҩt O là tәng các sӕ bҵng nhau.
ưͣng ß̳n : Ma phương cͯa m͡t b̫ng vuông c̭p n, trong m͟i ô nh̵n m͡t
giá tr͓ sao cho, m͟i hàng, m͟i c͡t và m͟i đưͥng chéo đ͉u tho̫ mãn m͡t t nh
ch̭t O nào đó cho trưͣc.
Ví dө : Vӟi n = 5
?
?
?
?
?
?
?
?
?
83. (*) ViӃt hàm in ma trұn các sӕ nguyên dương theo qui luұt đưӧc mô tҧ như
?
sau : các phҫn tӱ phía trên đưӡng chéo phө là giá trӏ bình phương cӫa các
giá trӏ n 2 , các giá trӏ tӯ đưӡng chéo phө trӣ xuӕng là các sӕ nguyên
tӕ. Ma trұn đưӧc sҳp xӃp như ví dө bên dưӟi.
?
Ví dө : n = 5
?
84. Cho ma trұn vuông a cҩp n n lҿ, 3 ãn ã5 ), mӛi phҫn tӱ đӅu có giá trӏ
?
nguyên dương. Hãy xây dӵng hàm kiӇm tra xem ma trұn a có phҧi là ma
phương hay không?
85. (**) ViӃt chương trình giҧi bài toán 8 hұu. Hãy đһt 8 con hұu trên bàn cӡ
?
8x8 sao cho chúng không ăn nhau 2 hұu ăn nhau khi cùng hàng, cùng cӝt
và cùng nҵm trên đưӡng chéo).
Hưӟng dүn:
?
Dùng ma tr̵n 8x8 đ͋ lưu bàn cͥ. M͟i ô có 3 tr̩ng thái :
@ Có h̵u 1
@ tr͙ng 0
@ không dưͫc đi -1
86. (**) ViӃt chương trình giҧi bài toán mã đi tuҫn. Hãy đi con mã 64 lưӧt đi
trên bàn cӡ 8x8 sao cho mӛi ô chӍ đi qua mӝt lҫn xuҩt phát tӯ mӝt ô bҩt kǤ)
Hưӟng dүn :
aͱng t̩i m͡t ô trên bàn cͥ con mã có th͋ đi đưͫc 1 trong 8 hưͣng sau .
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?
? ? Ñ ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ? ? ?
?
Ví dө : Trҥng thái đҫu Trҥng thái đích
3 0 ? 2 3
8 2 5 => 8 0 4
7 4 6 ? 7 6 5
?
! KiӇu dӳ liӋu mҧng hai chiӅu đưӧc ӭng dөng rӝng rãi trong các bài toán vӅ tìm
?
đưӡng đi trong đӗ thӏ, xӱ lý ҧnh, xӱ lý nhӳng dӳ liӋu dҥng bҧng, «
! Lưu ý khi nhұp mҧng hai chiӅu các sӕ thӵc phҧi thông qua biӃn trung gian.
@ BiӃn x là mӝt biӃn con trӓ, ta dùng toán tӱ mũi tên ³->³ Gӗm dҩu trӯ µ±µ và
dҩu lӟn hơn µ>¶).
?
Cú pháp :
?
?
? Ä Tên cҩu trúc > -> Ä BiӃn thành phҫn >y
? ?
è dͭ : ?
?
DATE * ; khai ¦ao ¦in kiu con tro DATE
?
-> nga = 5 ; gan nga ¦ang 5
?
a͙i vͣi ki͋u dͷ li͏u có struct l͛ng nhau ph̫i truy c̵p đ͇n thành ph̯n cu͙i
?
cùng có ki͋u dͷ li͏u cơ b̫n.
?
è dͭ: ÷i̫ s͵, có ki͋u HOCÑINH như trên
?
CSIN hs; khai ¦ao ¦in hs kiu CSIN
?
Mu͙n in h͕c sinh A sinh vào tháng m̭ ta ph̫i tru c̵p như sau:
gtch ();
}
?
I.6. Mҧng cҩu trúc
@ Cách khai báo tương tӵ như mҧng mӝt chiӅu hay ma trұn KiӇu dӳ liӋu bây
giӡ là kiӇu dӳ liӋu có cҩu trúc).
@ Cách truy cұp phҫn tӱ trong mҧng cũng như truy cұp trên mҧng mӝt chiӅu
hay ma trұn. Nhưng do tӯng phҫn tӱ có kiӇu cҩu trúc nên phҧi chӍ đӏnh rõ
?
cҫn lҩy thành phҫn nào, tӭc là phҧi truy cұp đӃn thành phҫn cuӕi cùng có
kiӇu là dӳ liӋu cơ bҧn xem lҥi bҧng các kiӇu dӳ liӋu cơ bҧn) .
?
I.7. Nguyên tҳc viӃt chương trình có mҧng cҩu trúc
?
Do kiӇu dӳ liӋu có cҩu trúc thưӡng chӭa rҩt nhiӅu thành phҫn nên khi viӃt
chương trình loҥi này ta cҫn lưu ý:
@ Xây dӵng hàm xӱ lý cho mӝt kiӇu cҩu trúc.
@ Muӕn xӱ lý cho mҧng cҩu trúc, ta gӑi lҥi hàm xӱ lý cho mӝt kiӇu cҩu trúc đã
đưӧc xây dӵng bҵng cách dùng vòng lһp.
Ví ß 1: Cho m͡t lͣp h͕c g͛m n h͕c sinh (nã50). Rhông tin cͯa m͡t h͕c sinh
đưͫc mô t̫ ͧ v dͭ 2, mͭc I.2. Hãy vi͇t chương trình nh̵p và xṷt danh sách h͕c
sinh sau đó đ͇m xem có bao nhiêu h͕c sinh đưͫc lên lͣp (ai͉u ki͏n đưͫc lên lͣp
là đi͋m trung bình 75.0).
Cách làm:
?
- Rrưͣc h͇t ta ph̫i xây dng hàm nh̵p và xṷt cho 1 h͕c sinh.
?
- ây dng hàm nh̵p và xṷt ngày tháng năm (Ki͋u dͷ li͏u DARE).
?
- Ñau đó mͣi xây dng hàm nh̵p và xṷt cho danh sách h͕c sinh.
?
#ßfin MAX 50
struct DATE
{
char thu[5]; unsignß
char nga; unsignß
char thang; int nam;
};
tpßf struct CSIN
{
char MSS[6];
char hotn[31];
struct DATE ngasinh;
char ßiachi[51];
unsignß char phai[4];
float ßimt¦;
};
?
voiß NhapNamSinh(DATE &ß);
voiß XuatNamSinh(DATE ß);
voiß Nhap1S (CSIN &hs);
voiß Xuat1S (CSIN hs);
voiß NhapDSS(CSIN lh[], int &n);
voiß XuatDSS(CSIN lh[], int n);
int DmSLnLop(CSIN lh[], int n);
?
voiß main()
{
CSIN lh[MAX]; hai ¦áo m̫ng lh g͛m có t͙i đa 50 h͕c sinh
int n, sohsßau;
NhapDSS(lh, n);
XuatDSS(lh, n);
sohsßau = DmSLnLop(lh, n);
printf(³\nSo luong hoc sinh ßuoc ln lop la: %ß´, sohsßau);
gtch();
}
?
voiß NhapNamSinh(DATE &ß)
{
printf(³\nNhap vao nga: ´);
scanf(³%u´, &ß.nga);
printf(³\nNhap vao thang: ´);
scanf(³%u´, &ß.thang);
printf(³\nNhap vao nam: ´);
scanf(³%ß´, &ß.nam);
}
?
voiß XuatNamSinh(DATE ß)
{
printf(³%02u %02u %4ß´, ß.nga, ß.thang, ß.nam);
}
?
voiß Nhap1S(CSIN &hs)
{
float ß;
?
lushall(); Xoa vung ßm
printf(³\nNhap ma so hoc sinh: ´);
gts(hs.MSS);
printf(³\nNhap ho tn hoc sinh: ´);
gts(hs.hotn);
printf(³\nNhap nga thang nam sinh: ´);
? ß++;
rturn ß;
}
?
?
͇t qu̫ ví ß khi ch̩ chương trình:
Nhap vao thong tin cua hoc sinh thu 1:
Nhap ma so hoc sinh: 02313
Nhap ho ten hoc sinh: Nguyen èan A
Nhap ngay thang nam sinh:
Nhap vao ngay: 12
Nhap vao thang: 03
Nhap vao nam: 1980
Nhap vao dia chi: 60 Ohan Dang |uu Q.Ohu Nhuan
Ohai: Nam
Nhap vao diem trung binh: 6.5
?
Nhap vao thong tin cua hoc sinh thu 2:
Nhap ma so hoc sinh: 03852
Nhap ho ten hoc sinh: |y Rhi B
Nhap ngay thang nam sinh:
Nhap vao ngay: 05
Nhap vao thang: 12
Nhap vao nam: 1981
Nhap vao dia chi: 24 |y Ru Rrong Q.1
Ohai: Nu
Nhap vao diem trung binh: 3.5
?
Rhong tin hoc sinh thu 1:
Ma so hoc sinh: 02313
Ho ten hoc sinh: Nguyen èan A
Ngay thang nam sinh: 12 / 03 / 1980
Dia chi: 60 Ohan Dang |uu Q.Ohu Nhuan
Ohai: Nam
Diem trung binh: 6.50
?
Rhong tin hoc sinh thu 2:
Ma so hoc sinh: 03852
Ho ten hoc sinh: |y Rhi B
Ngay thang nam sinh: 05 / 12 / 1981
Dia chi: 24 |y Ru Rrong Q.1
Ohai: Nu
Diem trung binh: 3.50
Ño luong hoc sinh duoc len lop la: 1
?
?
Ví ß 2: Cho m͡t m̫ng các phân s͙ (PANS) g͛m n ph̯n t͵ (nã50). Hãy vi͇t
chương trình nh̵p và xṷt danh sách các phân s͙ sau đó tìm phân s͙ có giá tr͓
?
lͣn nh̭t, t͝ng và t ch các phân s͙ và ngh͓ch đ̫o giá tr͓ các phân s͙ trong m̫ng.
Cách làm:
?
- Rrưͣc h͇t ta ph̫i xây dng hàm nh̵p và xṷt cho 1 phân s͙.
?
- ây dng hàm t nh t͝ng, hi͏u, t ch, thương, rút g͕n, so sánh và ngh͓ch đ̫o
cho 2 phân s͙.
- Ñau đó mͣi xây dng hàm nh̵p, xṷt, t nh t͝ng, t ch cho m̫ng các phân s͙.
?
#ßfin MAX 100
tpßf struct PANS
{
int tu, mau;
};
?
voiß NhapPS(PANS &ps);
voiß XuatPS(PANS ps);
voiß NhapMangPS(PANS ßsps[], int &n);
voiß XuatMangPS(PANS ßsps[], int n);
PANS TimMa(PANS ßsps[], int n);
int imTra(PANS ps);
Tra v 1: Nu hop l
int
SCLN(int a, int ¦);
PANS RutGon(PANS ps);
PANS NghichDao(PANS ps);
PANS Nhan(PANS ps1, PANS ps2);
PANS Chia(PANS ps1, PANS ps2);
PANS Tru(PANS ps1, PANS ps2);
PANS Cong(PANS ps1, PANS ps2);
int SoSanh(PANS ps1, PANS ps2);
Tra v 0: ps1=ps2
Tra v 1: ps1>ps2
Tra v -1: ps1ps2
PANS TongCacPS(PANS ßsps[], int n);
PANS TichCacPS(PANS ßsps[], int n);
voiß NghichDaoCacPS(PANS ßsps[], int n);
?
voiß main()
{
int n;
PANS a[MAX], ma, s, p;
clrscr();
?
NhapMangPS(a, n);
printf("\nMang cac phan so vua nhap: ");
XuatMangPS(a, n);
ma=TimMa(a, n);
printf("\nPhan so co gia tri lon nhat: ");
XuatPS(ma);
?
s=TongCacPS(a, n);
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 86
?
? KiӇu dӳ liӋu có cҩu trúc
?
{
PANS kq;
kq.tu=ps1.tu*ps2.tu;
kq.mau=ps1.mau*ps2.mau;
kq=RutGon(kq);
rturn kq;
}
?
PANS Chia(PANS ps1, PANS ps2)
{
PANS kq;
kq=Nhan(ps1, NghichDao(ps2));
rturn kq;
}
?
PANS Tru(PANS ps1, PANS ps2)
{
PANS kq;
kq.tu=ps1.tu*ps2.mau-ps1.mau*ps2.tu;
kq.mau=ps1.mau*ps2.mau;
kq=RutGon(kq);
rturn kq;
}
?
PANS Cong(PANS ps1, PANS ps2)
{
PANS kq;
kq.tu=ps1.tu*ps2.mau+ps1.mau*ps2.tu;
kq.mau=ps1.mau*ps2.mau;
kq=RutGon(kq);
rturn kq;
}
?
int SoSanh(PANS ps1, PANS ps2)
{
ps1=RutGon(ps1); ps2=RutGon(ps2);
if(ps1.tu==ps2.tu&&ps1.mau==ps2.mau)
rturn 0;
if(ps1.tu*ps2.mau>ps2.tu*ps1.mau)
rturn 1;
rturn -1;
}
?
PANS TimMa(PANS ßsps[], int n)
{
PANS ma;
ma=ßsps[0];
for(int i=1; in; i++)
if(SoSanh(ßsps[i], ma)==1)
ma=ßsps[i];
rturn ma;
}
?
PANS TongCacPS(PANS ßsps[], int n)
{
PANS s=ßsps[0];
for(int i=1; in; i++)
{
s=Cong(s, ßsps[i]);
}
rturn s;
}
?
PANS TichCacPS(PANS ßsps[], int n)
{
PANS p=ßsps[0];
for(int i=1; in; i++)
{
p=Nhan(p, ßsps[i]);
}
rturn p;
}
?
voiß NghichDaoCacPS(PANS ßsps[], int n)
{
for(int i=0; in; i++)
{
ßsps[i]=NghichDao(ßsps[i]);
}
}
?
?
͇t qu̫ ví ß khi ch̩ chương trình:
Nhap so luong phan so: 5
?
Nhap vao phan so thu 1:
Nhap tu so: 1
Nhap mau so: 3
?
Nhap vao phan so thu 2:
Nhap tu so: 7
Nhap mau so: 4
?
Nhap vao phan so thu 3:
Nhap tu so: 9
Nhap mau so: 7
?
Nhap vao phan so thu 4:
Nhap tu so: 5
Nhap mau so: 6
?
Nhap vao phan so thu 5:
Nhap tu so: 4
Nhap mau so: 7
?
Mang cac phan so vua nhap: 1/3 7/4 9/7 5/6 4/7
Ohan so co gia tri lon nhat: 7 /4
Rong gia tri cac phan so co trong mang: 401/84
Rich gia tri cac phan so co trong mang: 5/14
Mang phan so sau khi nghich dao cac phan tu: 3 4/7 7/9 6/5 7/4
?
?
II. BÀI TҰO
?
II.1. Bài tұp cơ bҧn
?
. ViӃt chương trình sӱ dөng con trӓ cҩu trúc đӇ hiӇn thӏ giӡ, phút, giây ra màn
hình, và tính khoҧng cách giӳa 2 mӕc thӡi gian.
2. ViӃt chương trình sӱ dөng con trӓ cҩu trúc thӇ hiӋn ngày, tháng, năm ra màn
hình, và tính khoҧng cách giӳa 2 ngày.
3. ViӃt chương trình khai báo kiӇu dӳ liӋu thӇ hiӋn mӝt sӕ phӭc. Sӱ dөng kiӇu
này đӇ viӃt hàm tính tәng, hiӋu, tích cӫa hai sӕ phӭc.
4. ViӃt chương trình khai báo kiӇu dӳ liӋu đӇ biӇu diӉn mӝt phân sӕ. Hãy viӃt
hàm thӵc hiӋn nhӳng công viӋc sau:
@ Tính tәng, hiӋu, tích, thương hai phân sӕ.
@ Rút gӑn phân sӕ.
@ Qui đӗng hai phân sӕ.
@ So sánh hai phân sӕ.
5. ViӃt chương trình khai báo kiӇu dӳ liӋu đӇ biӇu diӉn mӝt hӛn sӕ. Hãy viӃt
hàm thӵc hiӋn nhӳng công viӋc sau :
@ Đәi hӛn sӕ sang phân sӕ
@ Tính tәng, tích hai hӛn sӕ
6. ViӃt chương trình khai báo kiӇu dӳ liӋu đӇ biӇu diӉn mӝt điӇm trong hӋ tӑa
?
đӝ 0xy . Hãy viӃt hàm thӵc hiӋn các công viӋc sau:
@ Tìm nhӳng điӇm đӕi xӭng cӫa nó qua tung đӝ, hoành đӝ, toҥ đӝ tâm.
@ Hãy tính tәng, hiӋu, tích cӫa hai điӇm trong mһt phҷng toҥ đӝ 0xy.
@ Tính khoҧng cách giӳa hai điӇm.
- Ngày sinh.
?
- a͓a ch͑.
?
- |ương cơ b̫n.
?
- B̫o hi͋m xã h͡i.
?
- Rhưͧng.
?
- Oh̩t.
?
- |ương thc lĩnh = lương cơ b̫n + thưͧng ± BH xã h͡i ± ph̩t.
@ Nhұp vào hӗ sơ cӫa các nhân viên trong công ty.
@ Xuҩt danh sách các nhân viên theo lương thӵc lĩnh giҧm dҫn bҵng 2 cách
sau :
?
- C̭p phát vùng nhͣ tĩnh.
?
- C̭p phát vùng nhͣ đ͡ng.
?
8. (*) ViӃt chương trình quҧn lý lӟp hӑc cӫa mӝt trưӡng. Các thông tin cӫa
mӝt lӟp hӑc như sau :
- Rên lͣp.
?
- Ñĩ s͙.
?
- Danh sách các sinh viên trong lͣp.
@ Nhұp vào danh sach các lӟp vӟi thông tin yêu cҫu như trên.
@ In danh sách các lӟp có trên 5 sinh viên có điӇm trung bình loҥi giӓi.
@ Tìm lӟp có nhiӅu sinh viên nhҩt.
@ Tìm lӟp có ít sinh viên nhҩt.
@ Tìm sinh viên có điӇm trung bình cao nhҩt.
@ Tìm lӟp có sӕ lưӧng sinh viên đҥt điӇm trung bình loҥi giӓi nhiӅu nhҩt.
9. ViӃt chương trình quҧn lý vé tàu, thông tin mӝt vé tàu như sau :
?
- Ngày giͥ khͧi hành, ngày giͥ đ͇n.
?
- ÷a đi, ga đ͇n.
?
- |o̩i tàu, lo̩i ch͟ ng͛i ( ng͛i, n̹m, cͱng, m͉m).
?
- Ñ͙ toa, s͙ gh͇.
@ ViӃt hàm nhұp vào danh sách các vé tàu.
@ In danh sách các vé tàu có ga đӃn là HuӃ.
@ In danh sách các vé tàu có ga đӃn là Hà Nӝi và đi ngày 8/6/2005.
@ ĐӃm xem có bao nhiêu khách đi tàu loҥi chӛ ngӗi là n̹m cͱng.
! KiӇu dӳ liӋu có cҩu trúc cho phép ta đӏnh nghĩa nhӳng kiӇu dӳ liӋu bҩt kǤ trên
cơ sӣ là nhӳng kiӇu dӳ liӋu cơ bҧn có sҹn trong ngôn ngӳ lұp trình.
! Khi xây dӵng xong kiӇu dӳ liӋu mӟi ta phҧi đӏnh nghĩa nhӳng thao tác cho
?
kiӇu dӳ liӋu đó.
! Nhӳng kiӇu dӳ liӋu tӵ đӏnh nghĩa này thông thưӡng có rҩt nhiӅu thành phҫn,
mӛi thành phҫn cũng có thӇ là mӝt kiӇu dӳ liӋu tӵ đӏnh nghĩa, vҩn đӅ là ta
chӑn kiӇu dӳ liӋu cơ bҧn nào đӇ xây dӵng nên chúng sao cho phù hӧp vӅ mһt
kiӇu dӳ liӋu và phù hӧp vӅ kch thưӟc lưu trӳ vӯa đӫ).
! Các sӱ dӵng nhӳng kiӇu dӳ liӋu tӵ đӏnh nghĩa cũng giӕng như các kiӇu dӳ
?
liӋu cơ bҧn. Muӕn sӱ dөng phҧi khai báo biӃn, khi truy cұp các thành phҫn
phҧi truy cұp theo quy ưӟc.
! NӃu thành phҫn cҩu trúc có kiӇu dӳ liӋu là sӕ thӵc thì khi sӱ dөng hàm
?
scanf() phҧi thông qua biӃn trung gian rӗi gán lҥi cho thành phҫn cҩu trúc đó.
! Đӕi vӟi mҧng các kiӇu dӳ liӋu có cҩu trúc ta nên Èӱ lý cho tӯng thành phҫn
cҩu trúc rӗi mӟi xӱ lý cho mҧng cҩu trúc bҵng cách dùng vòng lһp.
gtch ();
rturn ;
}
printf (³Tap tin %s ßa ßuoc mo´, ßuongßan);
fclos (f);
}
?
I.3. Các v dө minh hoҥ
?
?
a. T̵p tin văn ¦̫n
?
è dͭ 1: èi͇t chương trình t̩o t̵p tin văn b̫n ÑO.OUR g͛m n s͙ nguyên,
các s͙ cͯa dãy đưͫc t̩o ng̳u nhiên có giá tr͓ tuy͏t đ͙i không vưͫt quá M
( n, M đ͕c tͳ t̵p tin ÑO.INO). K͇t qu̫ chương trình là 1 t̵p tin văn b̫n
có dòng thͱ nh̭t ghi s͙ n; n dòng ti͇p theo ghi các s͙ t̩o đưͫc, m͟i s͙
trên m͡t dòng.
?
Ñ Ñ
?
?
# incluß conio.h >
# incluß stßio.h >
?
# ßfin in ³S.INP´
# ßfin out ³S.
T´
int n, M ;
?
voiß Nhap ()
{
FILE *fi;
fi = fopn ( in , ³rt´ );
fscanf ( fi, ³ %ß %ß ´, &n, &M );
fclos ( fi );
}
?
voiß Xuat ()
{
FILE *fo;
fo = fopn ( out , ³ wt ´ );
fprintf ( fo , ³ %ß\n´, n );
ranßomiz ( );
for ( ; n > 0 ; n -- )
fprintf ( fo , ³%ß\n´ , ranßom ( ( 2 * M + 1 ) - M ) );
fclos ( fo );
}
voiß main ()
{
clrscr ( );
Nhap ( );
Xuat ( );
}
?
è dͭ 2: èi͇t chương trình phát sinh ng̳u nhiên ma tr̵n a k ch thưͣc 5x6,
lưu ma tr̵n này vào file tst.inp. a͕c l̩i file tst.inp đưa dͷ li͏u vào ma
tr̵n b và xṷt ra màn hình xem k͇t qu̫ lưu đúng không? C̭u trúc cͯa file
tst.inp như sau:
- Dòng đ̯u lưu 2 s͙ nguyên: m, n th͋ hi͏n s͙ dòng và s͙ c͡t cͯa ma
tr̵n.
- m dòng ti͇p theo, m͟i dòng g͛m n ph̯n t͵ là giá tr͓ các ph̯n t͵
?
trên m͡t dòng cͯa ma tr̵n.
?
#inclußstßio.h>
#inclußconio.h>
#inclußstßli¦.h>
?
#ßfin MAX 100
#ßfin ßl "tst.inp"
?
voiß LuuFil(int a[MAX][MAX], int m, int n)
{
FILE *f;
f=fopn(ßl, "wt");
if(f==N
LL)
{
printf("\nhong tao ßuoc fil.");
gtch();
it(0);
}
fprintf(f, "%ß %ß\n", m, n);
for(int i=0; im; i++)
{
for(int j=0; jn; j++)
fprintf(f, "%ß\t", a[i][j]);
fprintf(f, "\n");
}
fclos(f);
}
?
voiß DocFil(int a[MAX][MAX], int &m, int &n)
{
FILE *f;
f=fopn(ßl, "rt");
if(f==N
LL)
{
printf("\nhong ßoc ßuoc fil.");
gtch();
it(0);
}
fscanf(f, "%ß%ß", &m, &n);
for(int i=0; im; i++)
{
for(int j=0; jn; j++)
fscanf(f, "%ß", &a[i][j]);
}
fclos(f);
}
?
voiß main()
{
int a[MAX][MAX], m=5, n=6, i, j;
int ¦[MAX][MAX], , ;
?
ranßomiz();
for(i=0; im; i++)
for(j=0; jn; j++)
a[i][j]=ranßom(1000);
LuuFil(a, m, n);
DocFil(¦, , );
for(i=0; i; i++)
{
for(j=0; j; j++)
printf("%ß\t", ¦[i][j]);
printf("\n");
? } ? ? ? ?
}
K͇t qu̫ v dͭ sau khi ch̩y chương trình, file test.inp có d̩ng sau:
56 ? ? ? ? ?
480 661 395 736 998 987
31 414 211 801 774 416
166 191 454 830 508 72
121 382 35 365 567 726
159 309 1 275 870 378
?
¦. T̵p tin nh͓ phân
?
ViӃt hàm đӑc/ ghi mӝt danh sách sinh viên cӫa mӝt lӟp vào tұp tin
?
SV.DAT
?
SINVIEN ßs[100];
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 102
?
? Tұp tin
?
int siso;
?
voiß nhap ( )
{
FILE *fi;
fi = fopn ( ³SV.DAT´ , ³ r¦´ );
fsk ( fi , 0 , SEEEND );
siso = ( ftll ( fi ) + 1 ) sizof ( SINVIEN );
fsk ( fi , 0 , SEESET );
fraß ( ßs , sizof ( SINVIEN ) , siso , fi );
fclos ( fi );
}
?
voiß uat ( )
{
FILE *fo;
fo = fopn ( ³SV.DAT´, ³ w¦´ );
fwrit ( ßs , sizof ( SINVIEN ) , siso , fo );
fclos ( fo );
}
?
II. BÀI TҰO
?
II.1. Bài tұp cơ bҧn
?
. ViӃt chương trình tҥo tұp tin văn bҧn chӭa dãy sӕ nguyên bҩt kǤ.
?
2. ViӃt chương trình tҥo tұp tin nhӏ phân chӭa 0000 sӕ nguyên bҩt kǤ ghi
vào file SONGUYEN.INO. Mӛi dòng 0 sӕ, sau đó viӃt chương trình đӑc
file SONGUYEN.INO, sҳp xӃp theo thӭ tӵ tăng dҫn và lưu kӃt quҧ vào file
SONGUYEN.OUT.
3. ViӃt chương trình tҥo mӝt file chӭa 0000 sӕ nguyên ngүu nhiên đôi mӝt
khác nhau trong phҥm vi tӯ đӃn 32767 và đһt tên là
³SONGUYEN.INOo.
4. ViӃt chương trình tҥo mӝt file chӭa các sӕ nguyên có tên
SONGUYEN.INO. Sau đó đӑc file SONGUYEN.INO và ghi các sӕ chҹn
vào file SOCHAN.OUT và nhӳng sӕ lҿ vào file SOLE.OUT.
5. ViӃt chương trình ghi vào tұp tin SOCHAN.DAT các sӕ nguyên chҹn tӯ 0
?
đӃn 00.
?
6. ViӃt chương trình đӑc tұp tin SOCHAN.DAT và xuҩt ra màn hình, mӛi
dòng 30 sӕ.
7. ViӃt chương trình giҧ lұp lӋnh COOY CON đӇ tҥo tұp tin văn bҧn. Khi kӃt
thúc tұp tin nhҩn phím F6 đӇ lưu.
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 103
?
? Tұp tin
8. ViӃt chương trình giҧ lұp lӋnh TYOE đӇ in nӝi dung cӫa tұp tin văn bҧn ra
màn hình.
9. ViӃt chương trình kiӇm tra mӝt tұp tin nào đó có trong mӝt thư mөc đưӧc
chӍ đӏnh hay không?
0. ViӃt chương trình giҧ lұp lӋnh DEL đӇ xoá tұp tin. Yêu cҫu nhұp đưӡng
dүn và tên tұp tin, kiӇm tra sӵ tӗn tҥi cӫa tұp tin, nӃu có thì xoá tұp tin
đưӧc chӍ đӏnh.
. ViӃt chương trình giҧ lұp lӋnh RENAME đӇ đәi tên mӝt tұp tin.
?
2. ViӃt chương trình tҥo file văn bҧn có tên là ³MATRIX.INOo có cҩu trúc
như sau:
@ Dòng đҫu ghi hai sӕ m, n.
@ Trong m dòng tiӃp theo mӛi dòng ghi n sӕ và các sӕ các nhau mӝt
khoҧng cách.
?
Hãy kiӇm tra xem trong file đó có bao nhiêu sӕ nguyên tӕ.
?
KӃt quҧ cҫn ghi vào file ³MATRIX.OUTo có nӝi dung là mӝt sӕ nguyên
?
đó là sӕ lưӧng các sӕ nguyên tӕ trong file ³MATRIX.INOo.
?
3. Cho sӕ nguyên n, hãy in tam giác OASCAL gӗm n dòng
?
Dӳ lӋu vào: tұp tin văn bҧn OAS.INO gӗm dòng chӭa giá trӏ n.
?
KӃt quҧ: đưa ra tұp tin văn bҧn OAS.OUT thӇ hiӋn mӝt tam giác OASCAL
?
n dòng.
?
4. Cho mҧng các sӕ nguyên , hãy sҳp xӃp mҧng theo thӭ tӵ tăng dҫn.
?
Dӳ liӋu vào : tұp tin văn bҧn ARRAY.INO gӗm 2 dòng
?
- Dòng 1 chͱa s͙ nguyên n ( n < = 100 ).
?
- Dòng 2 chͱa n s͙ nguyên.
?
KӃt quҧ : Đưa ra tұp tin văn bҧn ARRAY.OUT gӗm hai dòng
?
- Dòng 1 chͱa n ph̯n t͵ cͯa m̫ng các s͙ nguyên.
?
- Dòng 2 chͱa n s͙ nguyên đưͫc x͇p tăng d̯n.
?
5. Cho mҧng các sӕ nguyên, tìm phҫn tӱ lӟn nhҩt cӫa mҧng.
?
Dӳ liӋu vào: tұp tin văn bҧn ARRAY.INO gӗm hai dòng:
?
- Dòng 1 chͱa s͙ nguyên n ( n < = 100 ).
?
- Dòng 2 chͱa n s͙ nguyên.
?
KӃt quҧ: Đưa ra tұp tin văn bҧn ARRAY.OUT gӗm dòng ghi 2 giá trӏ x,
y trong đó x là giá trӏ lӟn nhҩt, y là vӏ trí cӫa x trong mҧng.
- N dòng ti͇p theo, m͟i dòng chͱa m͡t s͙ là các s͙ cͯa dãy đã cho
theo đúng thͱ t. ÷iá tr͓ tuy͏t đ͙i cͯa m͡i s͙ không vưͫt quá 30000
KӃt quҧ tìm đưӧc ghi vào tұp tin văn bҧn SUMMAX.OUT gӗm dòng ghi
?
3 sӕ T, L, R.
?
è dө :
Ñ Ñ
?
?
?
22. (*) Cho dãy aN ), hãy tìm đoҥn con tăng dҫn có tәng lӟn nhҩt
?
Dӳ liӋu : đưӧc cho trong tұp tin AMAX.INO
?
- Dòng 1 chͱa s͙ nguyên N ( 0 < N <= 30000 ).
?
- N dòng ti͇p theo, m͟i dòng chͱa m͡t s͙ là các s͙ cͯa dãy đãy cho
theo đúng thͱ tͭ. ÷iá tr͓ tuy͏t đ͙i cͯa m͟i s͙ không vưͫc quá 30000.
KӃt quҧ tìm đưӧc ghi vàp tin văn bҧn AMAX.OUT gӗm hai dòng:
?
- Dòng 1 ghi t͝ng cͯa dãy con.
?
- Dòng 2 ghi m̫ng con tăng d̯n có t͝ng lͣn nh̭t.
?
23. ViӃt chương trình nhұp lý lӏch mӝt nhân viên vào danh sách các nhân viên.
?
Khi không nhұp nӳa bҩm phím Esc và ghi vào tұp tin NHANVIEN.DAT
?
sau đó :
@ Đӑc tӯ tұp tin NHANVIEN.DAT vӯa tҥo và in danh sách các nhân
viên lên màn hình.
@ Tìm và in lý lӏch mӝt nhân viên bҵng các nhұp và hӑ tên hoһc mã sӕ
nhân viên.
?
24. (**) ĐӇ lҳp ráp mӝt máy vi tính hoàn chӍnh cҫn phҧi có tӕi thiӇu 0 linh
kiӋn loҥi A và có thӇ lҳp bә sung thêm vào khoҧng tӕi đa 8 linh kiӋn loҥi
B. Tҥi mӝt cӱa hàng vi tính cҫn quҧn lý bán hàng các loҥi linh kiӋn tҥi cӱa
hàng. Thông tin vӅ mӝt loҥi linh kiӋn gӗm có: Tên linh kiӋn, quy cách ,
loҥi, đơn giá loҥi chҩt lưӧng tӕt ± sӕ nguyên), đơn giá loҥi 2 chҩt
lưӧng thưӡng ± sӕ nguyên ). ViӃt chương trình thӵc hiӋn nhӳng công viӋc
sau :
tên linh kiӋn. Cho biӃt đã có đӫ 0 linh kiӋn loҥi A cҫn thiӃt đӇ lҳp
ráp máy tính hay chưa?
@ Vӟi giҧ đӏnh là cӱa hàng đã có đӫ 0 linh kiӋn loҥi A đӇ lҳp ráp máy.
Nhұp vào mӝt sӕ tiӅn đӇ lҳp ráp mӝt máy tính. Có thӇ lҳp đưӧc mӝt
máy tính hoàn chӍnh vӟi các linh kiӋn toàn bӝ theo đơn giá loҥi hay
đơn giá loҥi 2 hay không? NӃu sӕ tiӅn trong khoҧng giӳa thì hãy tìm
mӝt phương án gӗm nhӳng linh kiӋn theo đơn giá và linh kiӋn theo
đơn giá 2 đӇ lҳp?
@ Tҩt cҧ dӳ liӋu phҧi lưu ӣ tұp tin.
?
?
III. KӂT LUҰN
?
! Mөc đích cӫa kiӇu dӳ liӋu tұp tin cho phép chúng ta lưu lҥi nhӳng thông tin cҫn
thiӃt tương đӕi lӟn: nhӳng dӳ liӋu đҫu vào, nhӳng kӃt quҧ cӫa chương trình hoһc
nhӳng dӳ liӋu dùng đӇ test chương trình, «
! Khi thao tác trên tұp tin phҧi thông qua 4 bưӟc: hai ¦áo con tr͗ tr͗ đ͇n t̵p tin,
?
Mͧ t̵p tin, X͵ lý trn t̵p tin và cu͙i cùng là Đóng t̵p tin.
! Lưu ý khi mӣ tұp tin đӇ ghi thì phҧi cҭn thұn vӟi thao tác tҥo mӟi hay chӍnh sӱa
nӝi dung tұp tin, di chuyӇn con trӓ hӧp lý đӇ tránh mҩt thông tin.
! Sӱ dөng hàm thao tác trên tұp tin phҧi dùng đúng loҥi hàm cho tұp tin kiӇu nhӏ
?
phân hay kiӇu văn bҧn.
÷iͣi thi͏u phương pháp l̵p trình theo kͿ thu̵t đ͏ quy, phân lo̩i, cách ho̩t đ͡ng và
cách cài đ̿t các hàm đ͏ quy.
?
?
I. TÓM TҲT LÝ THUYӂT
?
?
I.1. Khái niӋm
?
Mӝt hàm đưӧc gӑi có tính đӋ qui nӃu trong thân cӫa hàm đó có lӋnh gӑi lҥi chính
nó mӝt cách tưӡng minh hay tiӅm ҭn.
?
I.2. Ohân loҥi đӋ qui
@ ĐӋ qui tuyӃn tính.
@ ĐӋ qui nhӏ phân.
@ ĐӋ qui phi tuyӃn.
@ ĐӋ qui hӛ tương.
?
?
a. Đ͏ qui tu͇n tính
?
Trong thân hàm có duy nhҩt mӝt lӡi gӑi hàm gӑi lҥi chính nó mӝt cách
tưӡng minh.
<KiӇu dӳ liӋu hàm> TenHam <danh sách tham sӕ>)
{
if điӅu kiӋn dӯng)
{
...
//Trҧ vӅ giá trӏ hay kӃt thúc công viӋc
}
//Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
. . . TenHam <danh sách tham sӕ>);
//Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
}
?
Ví dө : Tính Ñ n) 2 3 L n
?
Rrưͣc khi cài đ̿t hàm đ͏ qui ta xác đ͓nh:
?
- ai͉u ki͏n dͳng: Ñ(0) = 0.
?
- Qui t̷c (công thͱc) t nh: Ñ(n) = Ñ(n-1) + n.
Ra cài đ̿t hàm đ͏ qui như sau:
l ? ? m ? ? R
? ? ? ?
a[0] a[1] « a[(l+r)/2] « a[n-2] a[n-1]
Rhu h́p da vào giá tr͓ cͯa ph̯n t͵ ͧ giͷa, có hai trưͥng hͫp:
?
i. N͇u x lͣn hơn ph̯n t͵ ͧ giͷa thì x ch͑ có th͋ xṷt hi͏n ͧ bên
ph̫i v͓ tr này. (tͳ m+1 đ͇n r).
ii. Ngưͫc l̩i n͇u x nh͗ hơn ph̯n t͵ ͧ giͷa thì x ch͑ có th͋ xṷt
hi͏n ͧ bên trái v͓ tr này. (tͳ l đ͇n m-1).
Quá trình này thc hi͏n cho đ͇n khi g̿p ph̯n t͵ có giá tr͓ x, ho̿c
?
đã xét h͇t các ph̯n t͵.
Ra cài đ̿t hàm đ͏ qui như sau:
int TimNhiPhan(int a[], int l, int r, int )
{
int m = (l+r)2;
if(l>r)
rturn -1; hông có ph̯n t͵
if(a[m]>) rturn TimNhiPhan(a, l, m-1, );
if(a[m]) rturn TimNhiPhan(a, m+1, r, );
rturn m;Tr̫ v͉ v͓ trí tìm th̭
}
?
Ví dө 3: Bài toán tháp Hà Nӝi:
?
Bưͣc 1: Di chuy͋n n -1 đĩa nh͗ hơn tͳ c͕c A sang c͕c B.
Bưͣc 2: Di chuy͋n đĩa còn l̩i tͳ c͕c A sang c͕c C.
Bưͣc 3: Di chuy͋n n -1 đĩa nh͗ hơn tͳ c͕c B sang c͕c C.
Ra cài đ̿t hàm đ͏ qui như sau:
voiß ThapaNoi (int n, char A, char B, char C)
{
if (n = = 1)
printf(³Di chun ßia trn cung tu %ß ßn %ß\n´, A, C);
ls ??
{ ?
? ThapaNoi(n-1, A, C, B);
?
? ThapaNoi(1, A, B, C);
? ThapaNoi(n-1, B, A, C);
}
}
?
?
c. Đ͏ qui phi tu͇n
?
Trong thân cӫa hàm có lӡi gӑi hàm gӑi lҥi chính nó đưӧc đһt bên trong
vòng lһp.
<KiӇu dӳ liӋu hàm> TenHam <danh sách tham sӕ>)
{
for int i = ; i<=n; i++)
{
//Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
if điӅu kiӋn dӯng)
{
? ...
?
? //Trҧ vӅ giá trӏ hay kӃt thúc công viӋc
} ?
?
else ?
{ ?
? //Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
?
? TenHam <danh sách tham sӕ>);
}
}
}
?
Ví dө: Tính sӕ hҥng thӭ n cӫa dãy {Xn} đưӧc đӏnh nghĩa như sau:
X0 = ;
Xn = n2X0 + n-)2X + « + 2Xn- ; n)
?
sau:
?
X0 =Y0 = ;
?
voiß main()
{
int a[MAX], n;
long s;
?
printf("\nNhap so phan tu cua mang: ");
scanf("%ß", &n);
Nhap(a, n);
Xuat(a, n);
s=TongChan(a, n);
printf("\nTong cac so chan trong mang la: %lß", s);
gtch();
}
?
II. BÀI TҰO
?
èiӃt hàm đӋ qui thӵc hiӋn các yêu cҫu sau:
?
?
II.1. Bài tұp cơ bҧn
?
. Cài đһt lҥi nhӳng bài tұp ӣ chương mҧng mӝt chiӅu.
?
2. Tìm chӳ sӕ có giá trӏ lӟn nhҩt cӫa sӕ nguyên dương n.
?
3. Hãy xây dӵng mӝt dãy gӗm N sӕ có giá trӏ tӯ đӃn K cho trưӟc, sau cho
không có hai dãy con liên tiӃp đӭng kӅ nhau.
Ví dө: N = 6
?
K=3
?
K͇t qu̫: 121312
?
4. Tìm ưӟc sӕ chung lӟn nhҩt cӫa hai sӕ nguyên dương a và b.
?
5. Tìm chӳ sӕ đҫu tiên cӫa sӕ nguyên dương n.
?
6. Tìm dãy nhӏ phân dài nhҩt sao cho trên dãy này không có hai bӝ k bҩt kǤ
?
trùng nhau. Bӝ k là dãy con có k sӕ liên tiӃp nhau trên dãy tìm đưӧc.
Ví dө: k = 3
KӃt quҧ: 000 0 0 0
n 70
7. Tính On) .3.5K 2n ) , vӟi
n 70
8. Tính Ñ n) 3 5 L 2 n ) , vӟi
9. Tính Ñ n) 2 3 4 L ) n n , vӟi n 0
n 0
0. Tính Ñ n) .2 .2.3 L .2.3K n , vӟi
. Tính Ñ n) 2 2 2 32 L n 2 , vӟi n 0
! ĐӋ qui cung cҩp cho ta cơ chӃ giҧi quyӃt các bài toán phӭc tҥp mӝt cách đơn
giҧn hơn.
! Xây dӵng hàm đӋ qui thông qua viӋc Èác đӏnh điӅu kiӋn dӯng và bưӟc thӵc
?
hiӋn tiӃp theo.
! ChӍ nên cài đһt bҵng phương pháp đӋ qui khi không còn cách giҧi quyӃt bҵng
cách lһp thông thưӡng.
Vào menu Oroject\Open Oroject chӑn đưӡng dүn đӃn file project cҫn thӵc hiӋn,
chӑn OK.
Bưӟc 3: HiӋu chӍnh đưӡng dүn thư viӋn cӫa BC++ 3..
?
ViӋc tҥo project ӣ các máy vӟi thông sӕ cài đһt BC++3. khác nhau sӁ dүn đӃn
đưӡng dүn thư viӋn hàm cӫa các máy cũng khác nhau, do vұy khi biên dӏch sӁ gһp
lӛi vӅ thư viӋn hàm trong BC++3..
Vào menu Options\Directories... sau đó hiӋu chӍnh lҥi đưӡng dүn đӃn thư mөc
chӭa thư viӋn hàm trong các ô Include và Library cho đúng vӟi đưӡng dүn cài
BC++3. aưͥng d̳n đ͇n thư mͭc INC|UDE và thư mͭc BIN cͯa BC++3.1 trên
máy đang s͵ dͭng).
?
?
II.3. Mӝt sӕ lưu ý
?
Nên chia tӯng file theo tӯng nhóm hàm. Mӛi mӝt project phҧi có tӕi thiӇu 3 file
?
như sau:
j File header (*.h): Tҥo thư viӋn tӵ đӏnh nghĩa. Chӭa các khai báo nguyên mүu
hàm, kiӉu dӳ liӋu, «
j File cài đһt hàm (*.cpp): Chӭa các cài đһt hàm theo nhóm. NӃu có sӱ dөng
?
thư viӋn tӵ đӏnh nghĩa thì phҧi include file chӭa thư viӋn đó vào.
j File chӭa hàm main() (m*.cpp): Chӭa hàm chính hàm main()).
Khi cài đ̿t hay ch͑nh s͵a m͡t hàm nào đó trưͣc h͇t ph̫i xem xét hàm đó thu͡c
?
nhóm hàm nào và sau đó mͧ file cͯa nhóm tương ͱng đ͋ hi͏u ch͑nh.
?
?
II.4. è dө minh hoҥ
?
ViӃt chương trình nhұp thông tin cӫa hӑc sinh gӗm: hӑ tên hӑc sinh, điӇm văn và
toán, xuҩt thông tin và tính điӇm trung bình cho hӑc sinh đó.
Ra chia chͱc năng chương trình theo các nhóm chͱc năng đ͋ d͍ qu̫n lý, g͛m các
file sau:
! File hocsinh.h: Chͱa các khai báo bi͇n và nguyên m̳u hàm.
! File mhocsinh.cpp: Chͱa hàm main().
! File uat.cpp: Chͱa các thao tác xṷt thông tin h͕c sinh, «
! File nhap.cpp: Chͱa các thao tác nh̵p thông tin h͕c sinh, «
! File tinhtoan.cpp: Chͱa các thao tác t nh đi͋m trung bình, «
Bưͣc 1: R̩o thư mͭc CSIN sͅ chͱa toàn b͡ các file cͯa chương trình sͅ
đưͫc cài đ̿t (è dͭ t̩o ͧ ͝ đĩa D:).
Bưͣc 2: Khͧi đ͡ng Borland C++ 3.1.
?
Bưͣc 3: Rhay đ͝i đưͥng d̳n đ͇n thư mͭc CSIN vͳa t̩o.
! Chӑn thư mөc HOCÑINH
?
?
Bưӟc 4: Tҥo Oroject: Đһt tên file project là hocsinh
?
! Nhҩn F3, đһt tên file mӟi là nhap.cpp và viӃt hàm nhұp. Tương tӵ cho nhӳng
file: Èuat.cpp, tinhtoan.cpp và file mhocsinh.cpp.
voiß main()
{
clrscr();
CSIN hs;
?
?
NhapS(hs);
printf(³\nt qua:\n´);
XuatS(hs);
?
gtch();
}
?
?
! Nhҩn F9 đӇ biên dӏch và kiӇm lӛi.
! Nhҩn Ctrl + F9 đӇ thӵc thi chương trình.
?
Ví ß k͇t qu̫ ch̩ chương trình
?
Nhap vao ho tn hoc sinh: Ngun Van A
Nhap vao ßim toan: 6
Nhap vao ßim van: 5
?
t qua:
?
o tn hoc sinh: Ngun Van A
Dim toan: 6
Dim van: 5
Dim trung ¦inh: 5.50
?
?
III. BÀI TҰO
?
Cài đһt các bài tұp ӣ chương mҧng cҩu trúc bҵng phương pháp tҥo project.
Câu 3: Cho ma trұn các sӕ thӵc. ViӃt hàm tìm giá trӏ trong ma trұn xa giá trӏ x nhҩt.
Câu 4: Hãy khai báo kiӇu dӳ liӋu biӇu diӉn khái niӋm điӇm trong mһt phҷng Oxy
?
DIEM).
?
a. ViӃt hàm nhұp tӑa đӝ điӇm.
Câu 3: Cho ma trұn các sӕ thӵc. ViӃt hàm tìm giá trӏ trong ma trұn gҫn giá trӏ x nhҩt.
Câu 4: Hãy khai báo kiӇu dӳ liӋu biӇu diӉn khái niӋm phân sӕ OHANÑO)
?
a. ViӃt hàm nhұp phân sӕ.
Sҳp xӃp danh sách nhân viên tăng dҫn theo hӋ sӕ lương nhân viên.
?
?
?
?
Đӄ Ñ 04
Rhͥi gian: 120 phút
(Không tham kh̫o tài li͏u)
?
!!!!
?
?
Câu 1:
?
n
Sn = 2 3 4 L ) n Vӟi n nguyên dương n>0)
?
. VӁ lưu đӗ thuұt toán Flowchart) tính tәng trên.
?
2. ViӃt hàm tính tәng trên bҵng phương pháp đӋ quy.
?
Câu 2:
?
Cho mҧng mӝt chiӅu các sӕ nguyên A kích thưӟc n 0< n00). Hãy xây dӵng
hàm thӵc hiӋn các yêu cҫu sau:
. Nhұp giá trӏ các phҫn tӱ vào mҧng.
?
Ma trұn tam giác trên Ma trұn tam giác dưӟi
?
Bài 3: Mӛi hӗ sơ nhân viên gӗm:
@ hӑ tên
@ năm sinh
@ lương cơ bҧn
ViӃt chương trình thӵc hiӋn các công viӋc sau:
?
a. Nhұp n hӗ sơ vӟi n nhұp tӯ bàn phím.
?
b. In ra hӑ tên và lương cơ bҧn cӫa nhân viên có lương cơ bҧn thҩp nhҩt và nhân
viên có lương cơ bҧn cao nhҩt.
c. Ghi xuӕng file văn bҧn vӟi tên file là hoso.txt) danh sách gӗm hӑ tên, lương
cơ bҧn, phө cҩp và thӵc lãnh cӫa các nhân viên mӛi nhân viên mӝt dòng) biӃt
rҵng:
Ohө cҩp = 30% lương cơ bҧn
?
Thӵc lãnh = lương cơ bҧn + phө cҩp
?
?
Đӄ Ñ 06
Rhͥi gian: 120 phút
(Không tham kh̫o tài li͏u)
!!!!
?
?
Bài 1: Nhұp vào mӝt dãy sӕ thӵc kӃt thúc bӣi 0 hoһc đã đӫ 20 phҫn tӱ
?
a. Sҳp xӃp dãy theo thӭ tӵ tăng dҫn.
-9 -9 -5 -2 0 3 7 7 0 5
?
Dùng thuұt toán tìm nhӏ phân đӇ tìm vӏ trí phҫn tӱ x = -9, vӏ trí tìm đưӧc sӁ là:
?
a. - b. 0 c. d. 2
?
Câu 3. Chương trình sau:
?
#inclußconio.h>
#inclußstßio.h>
int a=1, ¦=2, c=3;
int A(int &a, int ¦)
{
a += c + 2;
¦ -= a;
rturn a;
}
voiß main()
{
?
? printf(" %ß %ß", A(¦, c), a+c);
}
?
SӁ in ra:
?
a. 7 5 b. 7 4 c. 7 3 d. 7 2
?
4. Chương trình sau:
?
#incluß conio.h>
#incluß stßio.h>
int A(int a, int &¦)
{
a += ¦ + 2;
¦ -= a;
rturn a;
}
voiß main()
{
? int = 5;
?
? printf(" %ß %ß", A(A(3, ), ), );
}
?
SӁ in ra:
?
a. 5 5 b. 5 7 c. 7 7 d. 7 5
?
5. Đoҥn chương trình dưӟi đây khi thӵc thi sӁ:
?
char ¦uf1[100], ¦uf2[100], *strptr1, *strptr2;
strcp(¦uf1, "a¦cßfghijklmnopqrstuvwz");
strcp(¦uf2, "llo");
strptr1 = ¦uf1 + 6;
strcp(strptr1, ¦uf2);
strptr2 = (strptr1 + 4);
strncp(strptr2, ¦uf2, 4);
printf("%s\n", ¦uf1);
?
SӁ in ra màn hình:
?
a. abcdefHellHellopqrstuvwxyz b. ghijklmnHellotuvwxyz
?
c. abcdefghijklmnopqrstuvwxyz d. abcdefHellolmnopqrstuvwxyz
?
OHҪN II: Lұp trình (5 điӇm)
?
Câu 1. Hãy viӃt hàm kiӇm tra mӝt sӕ nguyên không n có phҧi là sӕ nguyên tӕ
hay không, hàm thӵc hiӋn sӁ trҧ vӅ: nӃu n là sӕ nguyên tӕ, 0 nӃu n không là sӕ
nguyên tӕ
int LaSNT(unsignß int n);
! Nhҩn Enter.
?
?
?
?
?
?
?
?
Tên ә đĩa chӭa BC31
?
?
?
?
?
?
?
?
?
?
?
! Gõ vào ә chӭa thư mөc nguӗn chӭa BC3. Ví dө trên:Giҧ sӱ ә đĩa chӭa
thư mөc BC3. trên đĩa CD là D:) \ Nhҩn Enter.
?
! Chӑn đưӡng dүn và tên thư mөc cҫn cài đһt BC3. lên đĩa cӭng.
?
Ví dө: Cҫn cài BC3. lên ә đĩa C: tên thư mөc là BC3.
- ĐӇ thay đәi thư mөc và ә đĩa cài đһt \ di chuyӇn vӋt sáng dùng phím
mũi tên ) đӃn dòng Directories « như hình trên \ sau đó nhҩn Enter.
?
?
- Nhҩn tiӃp Enter.
?
- Gõ tên ә đĩa và tên thư mөc cҫn cài đһt trong textbox \ Enter.
?
- Sau đó nhҩn ESC.
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 134
?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.
?
?
- TiӃp theo kiӇm tra xem thư mөc cài Windows có đúng đưӡng dүn như
dòng Windows Dir hay không dòng thӭ 2). NӃu không đúng thì thay đәi
thư mөc cho đúng, di chuyӇn vӋt sáng đӃn đó, thao tác tương tӵ như thay
đәi thư mөc BC3..
- Thưӡng thì không cҫn thay đәi vì các máy có cài Windows mһc đӏnh là
?
C:\Windows.
?
- Di chuyӇn vӋt sáng đӃn dòng Ñtart Installation nhҩn Enter bҳt đҫu quá
trình cài đһt.
Luu ý: ͦ ¦ưͣc nà ch͑ tha đ͝i thư m c cài đ̿t BC3.1, thư m c Winßows
?
(n͇u có) c
n nh ng m c khác không tha đ͝i.
! Quá trình cài đһt đang thӵc hiӋn.
?
! NӃu trong quá trình cài đһt gұp thông báo sau:
?
Quá trình cài đһt hoàn tҩt, nhҩn phím EÑC cho đӃn khi mҩt màn hình cài đһt.
! Tҥo mӝt thư mөc đӇ lưu bài tұp, chҷng hҥn D:\BaiTap đӇ làm thư mөc làm
viӋc cӫa C, trong quá trình làm bài hay biên dӏch chҥy chương trình thì tҩt cҧ các
file đó đӅu nҵm trong thư mөc BaiTap cho dӉ quҧn lý.
! Tҥo Shortcut Borland C++3. File bc.exe trong thư mөc BIN cӫa thư mөc
BC3 vӯa cài đһt)\ Chӑn Oroperties \ Chӑn Tab Orogram gõ vào mөc Cmd
line và Working giӕng như hình sau nӃu cài đһt BC3. trên ә đĩa C:\BC3.. Nhҩn
OK.
?
- Cmd line đưӡng dүn đӃn file chҥy BC): C:\BC3.\BIN\BC.EXE.
?
- Working thư mөc mӟi vӯa tҥo đӇ lưu bài làm ): D:\Bai tap
?
Lưu ý: Đúng đưӡng dүn thư mөc.
?
?
?
¦. Các phím chͱc năng chính
@ F3: Mӣ file chương trình có sҹn.
@ F2: Lưu file
@ Lưu ý: Chӑn đưӡng dүn và đһt tên file cho đúng. Tên có tӕi đa 8 ký tӵ,
phҫn đuôi không cҫn nhұp vào mһc đӏnh là *.cpp).
@ F5: Ohóng to hoһc trӣ vӅ kích thưӟc bình thưӡng cӫa cӱa sә soҥn thҧo.
@ F6: ChuyӇn qua lҥi các cӱa sә soҥn thҧo nӃu mӣ nhiӅu cӱa sә).
@ F9: Biên dӏch chương trình. Mөc đích là kiӇm tra lӛi chương trình.
@ Ctr+F9: Thӵc thi chương trình Run) khi chương trình không có lӛi.
@ Alt+F5: Xem lҥi màn hình kӃt quҧ chương trình đã chҥy trưӟc đó.
@ NӃu máy bӏ loop nhҩn Ctrl+Break+Enter đӇ trӣ vӅ màn hình soҥn thҧo.
@ Ngưӧc lҥi, ta cҫn phҧi sӱa lӛi cho đӃn khi hӃt lӛi.
ii. Sӱ dөng phím mũi tên lên xuӕng đӇ duyӋt lên xuӕng và xem mô tҧ lӛi.
?
Khi di chuyӇn đӇ ý quan sát vӋt sáng bên trên khung cӱa sә soҥn thҧo
chương trình. Thông thưӡng vӋt sáng sӁ cho biӃt vӏ trí lӛi có thӇ ngay
chính tҥi dòng có lӛi hoһc trên hoһc dưӟi mӝt dòng). Có nhiӅu cách sӱa
lӛi, nhưng đӇ đơn giҧn chúng ta nên sӱa lӛi tӯ trên xuӕng.
?
. M͡t s͙ l͟i thưͥng g̿p
?
? ? ? ? ?
? ? ? thiӃu dҩu { và {
sӱa tương ӭng. int a;
scanf³%do,&a);
ifa>0)
printf³Duongo);
}
}
Ñӱa thành:
void main)
{
int a;
scanf³%do,&a);
ifa>0)
printf³Duongo);
}
? ? ? ? Ñai :
? ? ?
? ? ? if a%2);
? ? ? printf³a leo);
? ? ?
? ? ?
else
? ? ? ifa>0)
? ? ? printf³a chano);
? ? ?
? ? ? printf³, > 0o);
? ? ? else
? ?
Chҩm phҭy sau phát biӇu if printf³a < 0o);
? Misplaced
hoһc khӕi lӋnh thӵc hiӋn trong Ñӱa thành: if
4 else
phát biӇu if chưa đһt trong cһp a%2) printf³a
dҩu ngoһc {} leo); else
ifa>0)
{
printf³a chan o);
printf³, > 0o);
}
else
printf³a < 0o);
? ? ? ? }
Ñӱa thành:
forint i=0; i<n; i++)
{
printf³a[%d]: o,i);
scanf³%do,&a[i]);
}
LӚI KHAI BÁO
?
? ? ?
Ñai :
? ? ? ?
? ? ? ? #define MAX 00
? ? ? ? void main)
? ? ? ?
? ? ? {
? ? ?
? int MAX;
? Declaration ?
Khai báo tên biӃn trùng vӟi tên }
terminated Đәi tên biӃn.
hҵng đã đӏnh nghĩa trưӟc. Ñӱa thành:
incorrectly
#define MAX 00
void main)
{
int x;
}
? ? ? ?
? ? Ñai :
? ?
? ? int i;
? ? ?
KiӇm tra và bӓ forint i=0; i<n; i++)
?
? Multiple
Khai báo biӃn trùng tên, khai bӟt khai báo lҥi scanf³%do,&a[i][j]);
2 declaration
báo nhiӅu lҫn. biӃn hoһc đәi tên Ñӱa thành:
for 'i'
biӃn khác. int x;
fori=0; i<n; i++)
scanf³%do,&a[i][j])
? ? ? ? Ñai :
? ? ? ?
printf³Nhap vao n:o);
? ? ? ?
? ? ? scanf³%do, &n);
Undefined
3 Sӱ dөng biӃn chưa khai báo. Khai báo biӃn. Ñӱa thành:
symbol 'a'
int n;
printf³Nhap vao n:o);
scanf³%do, &n);
? ? ? ?
Ñai :
? ? Bә sung dҩu ;
Declaration int n
4 ThiӃu dҩu ; sau khai báo biӃn. sau khi kӃt thúc
syntax error Ñӱa thành:
khai báo biӃn.
Int n;
THƯ èIӊN HÀM HOҺC ÑAI TÊN HÀM
? ? ? ?
? Function ? ?
? 'printf' ? ?
? should have ? ?
? ? ?
? a prototype
? ThiӃu sai báo thư viӋn hàm nӃu Bә sung
Function
? sӱ dөng hàm thư viӋn, ngưӧc lҥi #include
'scanf'
phҧi kiӇm tra xem có khai báo <stdio.h>
should have
nguyên mүu hàm, hoһc gӑi sai #include
a prototype
tên hàm. <conio.h>
Function
'XXX'
should have
a prototype
? ?
Code has no Dùng ký hiӋu phép tóan quan hӋ Dùng ký hiӋu
2
effect cho phép gán. phép toan sӕ hӑc.
?
f. D¦ug
?
Mһc dù chương trình không còn lӛi nhưng khi chҥy chương trình vүn ra kӃt
quҧ sai, nhӳng lӛi đó có thӇ là:
@ Dùng chҩm phҭy sau: if, else, for, while, « mà chưa thӵc hiӋn lӋnh.
@ Đӏnh dҥng nhұp xuҩt sai hay khai báo sai kiӇu dӳ liӋu.
@ Chia cho 0.
@ Không có điӅu kiӋn dӯng điӅu kiӋn dӯng sai).
@ Ohân tích thuұt toán thiӃu chưa vét hӃt các trưӡng hӧp) hoһc sai.
Các thao tác debug:
@ Nhҩn F7 hoһc F8 đӇ chҥy tӯng bưӟc nӃu không có lӛi khi biên dӏch)
?
@ Có thӇ xóa biӃn trên cӱa sә Watch bҵng cách chӑn biӃn trên cӱa sә Watch
và nhҩn phím Delete.
@ NӃu không thҩy cӱa sә hiӇn thӏ giá trӏ biӃn Watch) nhҩn Alt+W+W hoһc
vào menu Window chӑn Watch.
?
@ NӃu muӕn bӓ qua mӝt đoҥn nào đó tӭc không cҫn kiӇm tra đӑan đó) thì
nhҩn F4 đӇ chương trình thӵc thi tӟi vӏ trí dòng cӫa dҩu nháy rӗi dӯng lҥi đó
dҩu nháy phҧi tҥi vӏ trí nhӳng dòng phía sau cӫa vӋt sáng, nhҩn F6 đӇ
?
chuyӇn qua lҥi các cӱa sә).
@ Muӕn thay đәi giá trӏ cӫa biӃn ta dùng phím Ctrl+F4 đӇ hiӇn thӏ cӱa sә.
@ Ngoài ra có thӇ đánh dҩu đӇ chương trình thӵc thi đӃn vӏ trí đánh dҩu khi
chưa chҥy tӯng bưӟc) dùng phím F8 đӇ đánh dҩu ngay vӏ trí dҩu nháy. Vӏ trí
đánh dҩu sӁ có vӋt sáng màu đӓ.
?
@ Có thӇ đánh dҩu nhiӅu vӏ trí khác nhau. Nhҩn Ctrl+F9 đӇ chương trình thӵc
thi đӃn vӏ trí đánh dҩu theo thӭ tӵ tӯ trên xuӕng dưӟi, đӗng thӡi cũng có thӇ
dùng phím F7 hoһc F8 giӕng như trên đӇ chҥy tӯng bưӟc.
@ Ngoài ra, có thӇ dùng phím ALT+F5 đӇ xem kӃt quҧ xuҩt trong quá trình
debug đӇ kiӇm tra nhұp xuҩt).
@ Trong quá trình chҥy tӯng bưӟc có thӇ kӃt thúc bҵng cách nhҩn Ctrl+F2.
?
?
g. Các thao tác lin quan đ͇n c͵a s͝ Watch
@ Di chuyӇn cӱa sә Watch: Chӑn cӱa sә Watch, nhҩn Ctrl+F5. Sau đó dùng
phím mũi tên đӇ di chuyӇn cӱa sә tӟi vӏ trí mӟi. Nhҩn phím Enter.
@ Thay đәi kích thӭơc cӱa sә Watch khi đang chӑn bҵng Ctrl+F5 trên cӱa sә
Watch) nhҩn Shift + phím mũi tên rӗi nhҩn phím Enter.
c. do « while................................................................................................. 20
?
I.8. ¦rak và continu ..................................................................................... .20
a. break .......................................................................................................... 20
b. continue ..................................................................................................... 21
II. BÀI TҰO ............................................................................................................. 21
?
II.1. Phương pháp ch̩ ta tͳng ¦ưͣc đ͋ tìm k͇t qu̫ chương trình .............21
?
II.2. Bài t̵p cơ ¦̫n ........................................................................................... 23
a. C̭u trúc if / if..else và switch .................................................................... 23
b. C̭u trúc l̿p............................................................................................... 25
II.3. Bài t̵p lu͏n t̵p và nâng cao................................................................. .29
?
III. KӂT LUҰN...................................................................................................... 30
?
CHƯƠN÷ 3 HÀM CON ................................................................................. .31
?
I. TÓM TҲT LÝ THUYӂT .................................................................................. 31
?
I.1. hái ni͏m................................................................................................... 31
?
I.2. Ví ß ........................................................................................................... 31
?
I.3. C̭u trúc m͡t chương trình C .................................................................. .33
a. Kh͙i khai báo ............................................................................................ 33
b. Hàm ch nh (main()) ................................................................................... 33
c. Các hàm con .............................................................................................. 33
d. Nguyên m̳u hàm ...................................... ................................................. 33
I.4. Cách â ßng m͡t hàm con ................................................................... .34
a. Ki͋u dͷ li͏u cͯa hàm................................................................................. 34
b. Rham s͙ ..................................................................................................... 34
c. Rên hàm ..................................................................................................... 35
d. è dͭ .......................................................................................................... 35
II. BÀI TҰO ............................................................................................................. 37
?
II.1. Bài t̵p cơ ¦̫n ........................................................................................... 37
?
II.2. Bài t̵p lu͏n t̵p và nâng cao................................................................. .39
?
III. KӂT LUҰN...................................................................................................... 39
?
CHƯƠN÷ 4 MҦN÷ MӜT CHIӄU ............................................................... .41
?
I. TÓM TҲT LÝ THUYӂT .................................................................................. 41
?
I.1. hái ni͏m................................................................................................... 41
?
I.2. hai ¦áo m̫ng.......................................................................................... .41
?
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang ii
? Mөc lөc
?
?
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 3
? Mөc lөc
?
?
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 4
? Mөc lөc
?
?
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 5
? Mөc lөc
?
?
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 6