T Biên www.hutech.edu.vn *1.2020.cmp3017* này, xin tailieuhoctap@hutech.edu.vn - : I ...................................................................................................................I .......................................................................................................... III BÀI 1: LÀM QUEN V 1.1 TÓM LÝ .................................................................... 1 ........................................................................................... 1 .................................................................................................... 1 1.1.2 ......................................................................... 2 1.1.3 à phép toán ............................................................................... 2 1.1.4 ......................................................................... 3 1.1.5 ......................................................................................... 3 1.2 HÀNH 1.3 HÀNH NÂNG CAO....................................................................................... 7 BÀI 2: C 2.1 TÓM ........................................................................................... 3 U KHI N LÝ C U TRÚC IF VÀ SWITCH .......................................... 8 ........................................................................................... 8 ...................................................................................................... 8 ............................................................................................. 8 ............................................................................................... 9 2.2 HÀNH 2.3 HÀNH NÂNG CAO..................................................................................... 13 BÀI 3: C 3.1 TÓM ......................................................................................... 10 U KHI N - C U TRÚC L P ......................................................... 14 LÝ ......................................................................................... 14 .................................................................................................. 14 ............................................................................................... 15 ....................................................................................... 15 3.2 HÀNH ......................................................................................... 16 3.3 HÀNH NÂNG CAO..................................................................................... 21 ...................................................................................... 22 4.1 TÓM LÝ ......................................................................................... 22 ............................................................ 22 .......................................................................... 23 .......................................................................................... 24 ........................................................................ 24 4.2 HÀNH ......................................................................................... 25 4.3 HÀNH NÂNG CAO..................................................................................... 28 BÀI 5: M NG ............................................................................................................. 29 5.1 TÓM LÝ ......................................................................................... 29 5.2 HÀNH ......................................................................................... 30 5.3 HÀNH NÂNG CAO..................................................................................... 34 II BÀI 6: KI U D 6.1 TÓM LI U CÓ C U TRÚC........................................................................... 35 LÝ ......................................................................................... 35 6.2 HÀNH ......................................................................................... 36 6.3 HÀNH NÂNG CAO ..................................................................................... 39 6.4 TRA TÀI THAM HÀNH ...................................................................................... 45 ............................................................................................. 46 III Môn Th c hành K thu t L p trình cung c p cho sinh viên nh ng k n v ngôn ng l p trình C. Môn h c này là n n t môn h phát tri c ti p thu h u h t các o. M t khác, n m v y và k gi i các bài toán và các ng d t . H c xong môn này, sinh viên ph i n - T ng quan v Ngôn ng l p trình C. - Các ki u d - Các l nh có c u trúc. - Cách thi t k và s d ng các hàm trong C. - X - Bi t xây d ng và x c các v sau: li u trong C. lý các bài toán trên m ng m t chi u. - và x lý các bài toán trên d li u có c u trúc do ng lý các file trong C. N I DUNG MÔN H C - Bài 1: Làm quen v C. - Bài 2: C u khi n c u trúc IF và SWITCH - Bài 3: C u khi n c u trúc l p - Bài 4: C - Bài 5: M ng - Bài 6: Ki u d li u có c u trúc YÊU C U MÔN H C t v logic và ki n th c toán h n. i dùn nh IV CÁCH TI P NH N N I DUNG MÔN H C Th c hành K thu t l p trình là môn h u tiên giúp sinh viên làm quen v i l p trình trên máy tính, giúp sinh viên có khái ni m c n v cách ti p c n và gi i quy t các bài toán tin h c, giúp sinh viên có kh duy c i l p trình, và là ti c a ngành Công ngh ti p c n v i các h c ph n quan tr ng còn l i Thông tin. Vì v y, yêu c bu i th c hành t i l p, th c hành l i các bài t p n l p và g ch chân nh ng v pc nv i h c ph i d h c các nhà, nghiên c u tài li c khi không hi c tài li nl i. ÁNH GIÁ MÔN H C h c t i h c c n ôn t p các b bài t c, tr l i các câu h i và c bài m n bài h c. i v i m i bài h i h th c hành các bài t c ph n tóm t t ki n th c lý thuy n nâng ca ý xem k ng d n trong m i bài th c hành và làm theo. K t thúc m i bài h c, h c viên c n làm l i các bài th c hành nhà và luy n t p thêm. m 2 ph n 1. m quá trình (chuyên c m bài th c hành hàng tu n). 2. m cu i k (bài thi th c hành trên máy). 1 BÀI 1: BÀI 1: LÀM QUEN V TRÌNH C Sau khi th c hành xong bài này, sinh viên có th n - Làm quen v i c u trúc chung c a m t - Các l nh nh p, xu t d - Các ki u d - Các phép toán và các hàm chu n c a ngôn ng - Th c hi n vi c: n. li u (printf, scanf). li u chu nh s l p trình C. d ng các l n. 1.1 1.1.1 Ký hi u {} Di n gi i B u và k t thúc hàm hay kh i l nh. Ví d int main() { } ; K t thúc khai báo bi n, m t l nh, m t int x; l i g i hàm, hay khai báo nguyên m u void NhapMang(int a[], int &n); hàm. // Chú thích (ghi chú) cho m t dòng. Ch có tác d i v trình. /* */ ng h p nhi u dòng. //Ham nay dung de nhap mang void NhapMang(int a[], int &n); /* Dau tien nhap vao n. Sau do nhap cho tung phan tu */ void NhapMang(int a[], int &n); 2 BÀI 1: 1.1.2 Ki u Ghi chú Ki u liên t c (s c nh d ng th c) Float 4 bytes %f double 8 bytes %f long double 10 bytes %lf Ký t 1 byte %c S nguyên 1 byte %d unsigned char S 1 byte %d Int S nguyên 2 bytes %d unsigned int S 2 bytes %u Long S nguyên 4 bytes %ld unsigned long S 4 bytes %lu Ki u r i r c (s nguyên) Char 1.1.3 Phép toán Ghi chú +,-,*,/ C ng, tr , nhân, chia % Chia l y ph >, >=, <, <=, L nh == B ng nhau != Khác nhau ! NOT && AND || OR ++ -- Ví d : 5%2=1 c b ng, c b ng N u toán t Gi m 1 ho gi m c thì c r i tính bi u th c c l i. 3 BÀI 1: 1.1.4 Cú pháp Di n gi i Nh p d nh p t bi n nh d a ch c a các bi n); li u: l y d Ví d li u Xu t 1 thông báo ra màn hình. nh d Các bi u th c); int x; float y; minh hoa\ Xu t giá tr c a các bi u th c lên màn hình. 1.1.5 if (bi u th u ki n) công vi c 1; else công vi c 2; - Bi u th u ki n ph - Công vi c c n th c hi n có th các l nh con ph t trong c p d u ngo c ( ). g m 1 hay nhi u l nh. N u g m nhi u l nh con thì c gom vào trong c p d u {} g i là kh i l nh. 1.2 Câu 1: Làm quen v i c u trúc chung c a m n: M C-free/Dev-C, vào File/New/Source file. i ph n m r ng là .cpp (Ví d : Cau1.cpp) n stdio.h vì nó ch a hàm printf. #include<stdio.h> int main() { printf("Hello, World!"); 4 BÀI 1: printf("Hello, World!\n"); printf("Hello, \nWorld!\n"); printf("Hello, \tWorld!\n"); return 0; } Hãy biên d ch và ch t qu hi n ra màn hình và rút ra nh n xét. Phím t - C-free: F5 - Dev-C: F11 biên d ch và ch Câu 2: Vi Run): t thi p m i d sinh nh t có d ng: ******************************************* THIEP MOI Toi du le sinh nhat cua minh Vao luc 19h ngay 20/10/2016 Tai: 05/42 Vinh Vien TP. HCM Rat mong duoc don tiep! Ho Le Thu ******************************************* - ng d n: Áp d ng \t (tab), \n (xu ng dòng), \ Câu 3: Vi c hi n: a. Nh p m t s nguyên. Xu t ra màn hình s nguyên v a nh p. b. Nh p m t s th c. Xu t ra màn hình s th c v a nh p. c. Nh p m t kí t . Xu t ra màn hình kí t v a nh p. 5 BÀI 1: d. Nh p hai s nguyên. Hãy tính t ng, hi a hai s t k t qu ra màn hình. #include<stdio.h> int main() { //câu a int a; / float b ; thuc thuc da nhap la %f f b); b); //câu c char z; fflush(stdin); //xoá b nh m //câu d int x, y, z; printf("Moi nhap hai so nguyen de cong: "); scanf("%d%d", &x, &y); z = x + y; printf("Tong hai so la %d\n", z); //ho c printf("Tong hai so la %d\n", x+y); v i phép hi u, phép chia */ u d li u k t qu c a return 0; } Câu 4: Vi p vào bán kính r c a m t hình tròn. Tính chu vi và di n tích c a hình tròn. In các k t qu lên màn hình. 6 BÀI 1: hình tròn Ki u_ d _ li u Tên_bi n; VD: float r; Cách 1: #define Tên_h ng Giá_tr VD: #define MAX 100 Cách 2: const Ki u_d _li u Tên_h ng=Giá tr ; VD: const int MAX=100; Di n tích hình tròn: PI*r*r Chu vi hình tròn: 2*PI*r. Câu 5: Vi c hi n: a. Nh p vào hai s nguyên. Xu t ra màn hình giá tr l n nh t. b. Nh p vào ba s nguyên. Xu t ra màn hình giá tr l n nh t. ng d n: Nh p vào hai s nguyên. Xu t ra màn hình giá tr l n nh t. - Khai báo hai bi n a, b - nguyên. i dùng nh p 2 s nguyên a và b (dùng printf, scanf). - S d ng m t bi n max l n nh t trong hai s , khai báo max. - So sánh hai s a và b, n u s nào l - Xu t ra màn hình giá tr l n nh c: xu t giá tr bi n max Nh p vào ba s nguyên. Xu t ra màn hình giá tr l n nh t. - , khai báo 3 bi n a, b, c và max - Gi s a là s l n nh t, t c max = a. - L t so sánh hai s max = s - l n nh t. còn l i b, c v i max, n u s nào l max thì c p nh t u b>max thì max=b. N u c>max thì max=c. Xu t ra màn hình giá tr l n nh c: xu t giá tr bi n max. 7 BÀI 1: 1.3 Câu 6: Nh p vào 3 s a, b, c. Ki m tra xem 3 s p thành tam giác không? N u có hãy tính chu vi và di n tích c a tam giác theo công th c: - Chu vi CV = a+b+c. - Di n tích S = sqrt(p*(p-a)*(p-b)*(p- - Xu t các k t qu ra màn hình. ng d n: a, b, c là s u ki a, b, c ki u unsigned int. 3 s l p thành tam giác: t ng 2 c nh ph i l nh còn l i. V y: a, b, c l p thành 3 c nh c a tam giác khi và ch khi a+b>c và a+c>b và b+c>a. Tính di n tích và chu vi theo công th c hai sqrt(x) Câu 7: Vi n <math.h>. cm ts VD: Nh p vào n=234 s . In ra: 432 ng d n: - L t l y các ch màn hình theo th s (s t : Ch s Ch s hàng ch c Ch s Ví d : 234 %10 =4 234 /10 =23 23 %10 =3 23/10=2 2%10=2 2/10=0 -> d ng d ng phép chia / và phép chia l y ph và in ra 8 BÀI 2: BÀI 2: C U KHI N C U TRÚC IF VÀ SWITCH Sau khi th c hành xong bài này, sinh viên có th n c: - N m v ng cú pháp, cách th c ho ng c a c u trúc r - N m v ng cú pháp, cách th c ho ng c a c u trúc switch 2.1 2.1.1 Cú pháp: if (bi u th u ki n) công vi c; Ý N u bi u th c u ki n cho k t qu c hi n u ki n cho k t qu c hi n công vi c. 2.1.2 Cú pháp: if (bi u th u ki n) công vi c 1; else công vi c 2; Ý công vi N u bi u th c l i thì th c hi n công vi c th 2. BÀI 2: - Bi u th u ki n ph - Công vi c c n th c hi n có th các l nh con ph H 9 t trong c p d u ngo c ( ). g m 1 hay nhi u l nh. N u g m nhi u l nh con thì c gom vào trong c p d u {} g i là kh i l nh. 2.1.3 Cú pháp: switch (bieu_thuc) { case gia_tri_1: các câu l nh; break; /*l hi n xong m i l nh switch sau khi th c ng h p*/ ... case gia_tri_n: các câu l nh; break; [default: cv th c hi n m nh n u bi u th c không có giá tr nào trong các case] //có th có ho c không tu bài toán } Gia_tri_i: là các h ng s nguyên ho c ký t . Ph thu c vào giá tr c a bi u th c vi t sau switch, n u: - Giá tr này = gia_tri_i thì th c hi n câu l nh sau case gia_tri_i. - Khi giá tr bi u th c không th a t t c các gia_tri_i thì th c hi n câu l nh sau default n u có, ho c thoát kh i câu l nh switch. - c hi n xong câu l nh c a case gia_tri_i th c hi n luôn các l nh thu i nó mà không xét l gia_tri_i sau khi th c hi n xong m u ki n (do các i l nh switch ng h p, ta dùng l nh break. 10 BÀI 2: 2.2 Câu 1: Vi i c nh t ax + b = 0 v i a, b nh p t bàn phím. ng d n: - Khai báo hai bi n a, b ki u s th nh p tùy ý t Gi i thu - Hãy v n d ng l ràng nh t. #include <stdio.h> #include< conio.h> { float a,b; c bàn phím. Nh p a, b. - int main() s ng h p a = 0 và a 0. t gi i thu i dùng 11 BÀI 2: nhap a; nhap b; if ( a ==0 ) if ( b==0 ) else else -b/a ); return 0; } c hai ax2 + bx + c = 0. V i a, b, c nh p Câu 2: Vi t bàn phím. ng d n: - Khai báo 3 bi n a, b, c ki u s th c. Nh p các h s a, b, c. - Xét a = 0 thành b c nh t, gi i và bi n lu n theo b, c bài 1). - Xét a 0. Tính delta, d = b*b-4*a*c ng h p d = 0, d < 0 và d > 0. - N m. - N u d=0 thì m kép x1 = x2 = -b/(2*a) - N m phân bi t - c hai sqrt(s ) n Câu 3: Nh p vào 3 s giác không? N u có hãy cho bi n <math.h>. a, b, c. Ki m tra xem 3 s p thành tam c lo ng d n: - a, b, c là s c a ki u này là %u. a, b, c ki u unsigned int . Chu nh d ng 12 - BÀI 2: u ki 3 s l p thành tam giác: t ng 2 c nh ph i l a, b, c l p thành 3 c nh c a tam giác - a+b> c và a+c>b và b+c>a. Xét lo i tam giác: Tam giác cân u - nh còn l i. V y: Tam giác vuông a = b ho c b = c ho c c = a. a=b=c. a2=b 2+c2 ho c b2=a2+c2 ho c c2=a2+b 2. Câu 4: Vi p s nguyên có hai ch s , hi n th cs ng d n: - Khai báo và nh p s nguyên n. - N u 9 < n < 100 thì Th c hi c s n. c l i thì xu t ra thông báo "s nh p vào không ph i là s có hai ch s ". c s n: L y ch s hàng ch c n/10. S L y ch s d ng câu l nh switch n%10. S c ch d ng câu l nh switch s hàng ch c c ch s hàng . Câu 5: Vi p vào tháng c a m u tháng nh p vào <1 ho t s ngày c a tháng nt ng d n: - Khai báo bi n và nh p vào tháng. - Các tháng 1, 3, 5, 7, 8, 10, 12 có 31 ngày - Các tháng 4, 6, 9, 11 có 30 ngày - N u là tháng 2 thì yêu c u nh n thì tháng 2 có 29 ngày, còn l i là 28 ngày. - t cho 4 ( ho c nh b nl ys u chia h cu i là s n) 0 thì các BÀI 2: - N u tháng nh p vào không thu 13 n t i 2.3 Câu 6: Nh m không? In k t qu ra màn hình. Câu 7: Vi c TAXI. Bi t r ng: - 200m ti - N ul - Hãy nh p s i km thêm s ti n ph i tr . p l hay 14 BÀI 3: - BÀI 3: C U KHI N - C U TRÚC L P Sau khi th c hành xong bài này, sinh viên có th n c: - N m v ng cú pháp, cách th c ho ng c a c u trúc l p for. - N m v ng cú pháp, cách th c ho ng c a c u trúc l p while. - N m v ng cú pháp, cách th c ho ng c a c u trúc l p do ... while. 3.1 3.1.1 Cú pháp: for (bi u th c kh i gán; bi u th u ki n; bi u th m) { kh i l nh th c hi n công vi c; } c 1: Kh i gán cho bi u th c 1 c 2: Ki - N u bi u th Quay tr l - u ki n c a bi u th c 2. c hi n các l nh c a vòng l p, th c hi n bi u th c 3. c 2. c l i thoát kh i l p. BÀI 3: - 15 3.1.2 Cú pháp: <Kh i gán> while (bi u th u ki n) { L nh/ kh i l nh; m ch s l p; } Cách ho ng c a while gi ng for. 3.1.3 Cú pháp: do { Kh i l nh th c hi n công vi c; } while (bi u th u ki n) ; Th c hi n kh i l n khi bi u th u ki n có giá tr sai (có giá tr b ng 0) thì d ng. L p while ki hi n l nh l p r i m i ki nh t m t l n. u ki c khi th c hi n l p, còn vòng l u ki c p do...while th c hi n l nh ít 16 BÀI 3: - 3.2 Câu 1: Vi c hi n: a. Xu t ra màn hình 10 dòng: "XIN CHAO CAC BAN". b. Xu t ra màn hình n dòng: ""XIN CHAO CAC BAN", v i n nh p t bàn phím. ng d n: a. nh s l n l p: 10 l nh công vi c l p: xu n code sau minh ho //Cách 1: S cách dùng các vòng l p for, d ng vòng l p for int i; for(i=1; i<=10; i++) \ //Cách 2: S d ng vòng l p while--------------------------------------- i=1; while (i<=10) { \ i=i+1; //ho c i++; ho c i+=1; } //Cách 3: S d ng vòng l ---------------------------------- i=1; do{ \ i=i+1; }while (i<=10); Câu 2: Vi p vào m t s nguyên n > 0, hãy: a. Xu t ra màn hình các s trong ph m vi t b. Xu t ra màn hình các s ch n trong ph m vi t n n. n n. c. Xu t ra màn hình các s l không chia h t cho 3 trong ph m vi t n n. BÀI 3: - d. Tính các bi u th c sau: - S1 = 1 + 2 + ... + n - S2 = - 1 +2 - 3 + 4 - ... + (-1)n n. - S3 = 1/2 + 2/3 + 3/4 ... + n/(n+1) - S4 = xn (x là s th c nh p t e. Tính t ng các ch bàn phím). s c a n. Ví d : n = 125, t ng các ch s là 8. ng d n: Nh p s nguyên n > 0, n u nh p sai thì b t nh p l i. do { p vào s ph n t if(n<=0) , nhap lai }while ( n<=0 ); a. Xu t ra màn hình các s trong ph m vi t n n. 17 18 - BÀI 3: - Câu a, b, c, d có th áp d ng c u trúc l p for/while. ng d n câu b b. Xu t ra màn hình các s e. Tính t ng các ch L - Gi cs. - Thu t l y t ng ch s , khai báo bi s ch n trong ph m vi t n n. c an s c a s n và c ng d n vào bi n t ng. ng các ch s là tong, bi ng ch s c a n là BÀI 3: Câu 3: Vi m s c c a n. N c l i xu t ra c. Tính t . N u nh p sai thì yêu c u nh p l i. m b ng 2 thì xu t ra màn hình i là s nguyên t hoàn thi c l i xu t ra . ng d n: - u ki n nh p l c n > 100. do { p vào s ph n t if }while ( n<=0 || n > = 100 ); a. S d ng phép chia l ms Khai báo bi nh s cc an u tiên gán d=0; nguyên t , . c c a n (không tính chính nó). N u t n xu t ra màn hình thi 19 c hi n: a. Nh p m t s nguyên n sao cho b. - c c a n. ng n thì hoàn 20 BÀI 3: L - t l y n chia l y ph t n n, n u s -> dùng vòng l p Câu 4: Vi n th ra màn hình n dòng (0 < n a. b. ********** * ********** ** ********** *** ********** **** ********** ***** ********** ****** 10): nào có s BÀI 3: C 21 - C th : a. Hi n th trên n dòng, m i dòng có k d u *, k b. Hi n th trên n dòng, dòng th i dùng nh p. i có i d u *. ng d n: - Câu a: S d ng 2 vòng for l ng nhau, vòng for th n l n), vòng for th - Câu b: S nh l p xu t ra d u * theo s d ng 2 vòng for l ng nhau, vòng for th n l n), vòng for th l p xét t ng dòng (l p ng yêu c u (l p k l n). nh l p xu t ra d u * theo s l p xét t ng dòng (l p ng yêu c u (l p i l n). 3.3 Câu 5: Vi n th b ng c Câu 6: Vi c hi n: a. Nh p n > 0. b. Li t kê các s nguyên t c. ms trong ph m vi t n n. ng s nguyên t trong ph m vi t n n. d. Tính t ng các s nguyên t trong ph m vi t n n. ng d n b. Li t kê các s nguyên t trong ph m vi t n n. for ( int i=2 ; i<=n ; i++ ) ki m tra nto ( i ) n c. ng các s i; nguyên t trong ph m vi t n n. int d=0; for ( int i=2 ; i<=n ; i++ ) ki m tra nto ( i ) n Câu 7: Vi ; c hi n: a. Nh p n > 0. b. Tính t ng các ch s c a n. Ví d : v i n = 12537 thì t ng = 1+2+5+3+7=18. 22 BÀI 4: BÀI 4: TRÌNH CON Sau khi th c hành xong bài này, sinh viên có th n - Khái ni m v hàm (function) trong C. - Cách xây d ng và cách s d ng hàm trong C. c: 4.1 Hàm là m tr c 4.1.1 v c l p th c hi n tr n v n m t công vi c nh giá tr i nó, hay nói cách khác hàm là s nh chia nh 23 BÀI 4: - s d n, khai báo h ng s , khai báo các bi n toàn c c và khai báo các ki u d li u t (các nguyên m u hàm). - Nguyên m u hàm: <Ki u d li u c a hàm> Tên hàm ([danh sách các tham s ]); - Nguyên m u hàm th c ch u c a hàm thêm d u ch m ph y (;) vào cu i, tuy nhiên tham s trong nguyên m u hàm có th b ph n tên. - Hàm chính (main()): Ch a các bi n, các l nh và các l i g i hàm c n thi t trong - c s d ng nh m m Khi có m t công vi c gi ng nhau c n th c hi n Khi c n chia m nhi u v trí. n ph c t c trong sáng, d toán và gi i quy t v nh hi u trong vi c x (hàm con) lý, qu n lý vi c tính . 4.1.2 - t hàm bao g m: Khai báo ki u hàm t tên hàm Khai báo các tham s Các câu l nh c n thi - th c hi n ch a hàm. Có 2 lo i hàm: void: Hàm không tr ch tr . Nh ng hàm lo Nh p / xu t d Ki u d tr v v li ng nhóm li u , th ng kê, s p x p, li t kê. n (r i r c/ liên t c) hay ki u d tr . Sau khi th c hi n xong, k t qu c s trung bình, t d ng h p: li u có c u trúc: Hàm i. Nh ng hàm lo i này m, ki m tra, tìm ki m, tính 24 BÀI 4: Hàm không tr v tr : Hàm tr v tr : void Ten_Ham(ds tham so neu co) Kieu_dl Ten_Ham(ds tham so neu co) { { Khai báo các bi n c c b ; Ki u_dl kq; Các câu l nh / kh i l nh hay l i g i Khai báo các bi n c c b ; n hàm khác; Các câu l nh / kh i l nh hay l i g i n hàm khác; } return kq; } //ki u d li u c a hàm là ki u c a k t qu tr v . 4.1.3 nh d a vào d li - u vào c a bài toán (Input). G m 2 lo i : Tham tr : Giá tr c a bi n tham s i sau khi hàm th c hi n xong. Tham s d ng này ch li u vào. Ví d : int KiemTraNguyenTo(int n); - Tham bi n: Có s i giá tr c a tham s trong quá trình th c hi n và c n l y l i giá tr i hàm. u ra (k t qu ) ho ng d ng c a tham s lo i này có th là d v a là d li u vào v a là d Ví d : Hàm nh p s nguyên: void NhapSoNguyen(int &n); Hàm hoán v giá tr hai s : void HoanVi(int &a, int &b); 4.1.4 M t hàm ch c th c thi khi ta có m t l i g Cú pháp g i hàm: li u ra. li u 25 BÀI 4: <Tên hàm>([Danh sách các tham s ]) 4.2 Câu 1: Vi c hi n các ch a. Nh p vào m t s nguyên n (0 < n < 100). b. Ki m tra n có ph i là s nguyên t không? c. Li t kê các s nguyên t d. ms trong ph m vi t n n. ng s nguyên t trong ph m vi t n n. e. Tính t ng các s nguyên t trong ph m vi t n n. f. Tính trung bình c ng các s nguyên t trong ph m vi t n n. ng d n: a. Nh p vào m t s nguyên n (0 < n < 100). void NhapSoNguyen(int &n) { L p công vi c{ Nh p n N u n<=0 ho c n>=100 thì thông báo nh p sai, hãy nh p l i. } Ch ng nào (n<=0 ho c n>=100); } b. Ki m tra n có ph i là s nguyên t không? Hàm tr v 1: n u n là s nguyên t Hàm tr v 0: n u n không ph i là s nguyên t c. Li t kê các s nguyên t d. ms trong ph m vi t ng s nguyên t trong ph m vi t Hàm tr v s ng s nguyên t n n. n n. c trong ph m vi t n n. 26 BÀI 4: ÌNH CON e. Tính t ng các s nguyên t trong ph m vi t n n. f. Tính trung bình c ng các s nguyên t trong ph m vi t - V i m i hàm, ta test th n n. trong hàm main(), sau khi ch y ra k t qu i làm ti p nh ng hàm khác. - Cách g i th c hi n hàm con trong main(): ch g i tên_hàm (các tham s th c ng) Câu 2: Vi c hi n ch n l a công vi c: a. Gi c 1 ax+b=0. b. Ki m tra m t s nguyên có là s hoàn thi n không? c. Li t kê các s d. hoàn thi n trong ph m vi t i dùng nh p) c chung l n nh t c a hai s nguyên a, b nh p t bàn phím. e. Thoát kh ng d n: - nh b n c n vi ng hàm nào? Trong hàm main, g c và không còn l i, hãy s a kh c hi n theo ch n code sau: //Xu t ra menu công vi c void XuatMenu() { \ \ n\ BÀI 4: \ \ } //-------------------------------------------------n code này vi t trong hàm main() //dùng m t bi i dùng ch n int chon; do{ XuatMenu(); //hi n th menu công vi i dùng ch n case 1: float a, b; //nh p h s a, b //G i hàm gi i pt b c 1 break; case 2: //khai báo và nh p s nguyên //g i hàm Ki m tra x có ph i s hoàn thi n không break; case 3: //khai báo và nh p s nguyên n //g i hàm xu t các s hoàn thi n trong ph m vi break; case 4: //khai báo và nh p s 2 s nguyên a, b //g break; default: chon=0; } }while (chon!=0); c chung l n nh t 27 28 BÀI 4: 4.3 Câu 3: Vi pt N u: ch là bàn phím 2 s a, b và m t ký t ch. thì th c hi n phép tính a + b và in k t qu lên màn hình. ch là thì th c hi n phép tính a - b và in k t qu lên màn hình. ch là thì th c hi n phép tính a * b và in k t qu lên màn hình. ch là thì th c hi n phép tính a / b và in k t qu lên màn hình. Câu 4: Vi c gi ca, gi ra ca c a m Gi s vào i. r ng: - Ti n tr cho m i gi - Gi vào ca s m nh t là 6 gi vào nguyên). c 12 gi sáng và gi ra ca tr nh t là 18 gi (Gi s gi nh p BÀI 5: 29 BÀI 5: M NG Sau khi th c hành xong bài này, sinh viên có th n c: - Cách khai báo d li u ki u m ng - Các thao tác nh p xu t, các k thu t thao tác trên m ng. - Luy n t 5.1 M ng m t chi u th c ch t là m t bi c c p phát b nh liên t c và bao g m Các thành ph n c a m ng là t p h p các bi n có cùng ki u d li u và cùng tên. Do nhi u bi n thành ph n. truy xu t các bi n thành ph ch m c. Khai báo: Ki u_d _ li u Tên_m ng c]; Ví d : int a[100]; // Khai báo m ng s nguyên a g m 100 ph n t float b[50]; // Khai báo m ng s th c b g m 50 ph n t S d ng: Tên_bi n_m ng[ch s ]; Ví d : int A[5] // Khai báo m ng A g m t Ch s (s th t ) nt nguyên. 0 1 2 3 4 A[0] A[1] A[2] A[3] A[4] 30 BÀI 5: 5.2 Câu 1: Vi c hi n: a. Nh p m ng s nguyên g m n ph n t (0 < n b. Xu t m ng v a nh p ng d n: #include <conio.h> #include <stdio.h> #define MAX 100 /*---------------------------------*Hàm nh ng ph n t cho m ng */ void NhapSL(int &n) { do{ }while (n<=0 || n>100); } /*-----------------------------------*Hàm nh p giá tr cho t ng ph n t trong m ng */ void NhapMang (int a[], int n) { for (int i = 0; i < n; i ++) { } } /*-----------------------------------*Hàm xu t các ph n t c a m ng ra màn hình */ void XuatMang (int a[], int n) { \nMang gom cac phan tu:\ for (int i = 0; i < n; i ++) } 10). BÀI 5: //============================== int main() { int a[MAX], n; NhapMang (a,n); XuatMang (a,n); return 0; } Câu 2: Làm ti a câu 1 v i các yêu c u sau: a. Xu t các ph n t b. ms chia h t cho 3 có trong m ng. ng s ng. c. Tính t ng các s trong m ng. d. Tính trung bình c ng c a m ng. e. Tính trung bình c ng các ph n t ng. f. Xu t các s nguyên t có trong m ng g. ms ng s nguyên t có trong m ng. h. Tính t ng các s nguyên t có trong m ng. i. Tính trung bình c ng các s nguyên t có trong m ng. j. Tìm ph n t u tiên. k. Tìm ph n t l. Tìm giá tr ph n t i cùng. l n nh t (nh nh t). ng d n a. Xu t các ph n t chia h t cho 3 có trong m ng. Gi i thu t: - um n cu i m ng for ( int i=0; i<n ; i++) - Ki m tra t ng ph n t c a m ng xem có chia h t cho 3 không 31 32 BÀI 5: if (a[i] %3==0 ) N u có thì in ph n t c. Tính t ng các s trong m ng. Gi i thu t: - Khai báo m t bi - um t ng s = 0; n cu i m ng for ( int i=0; i<n ; i++) - c ng d n các ph n t ns s= s+ a[i] ; j. Tìm ph n t u tiên Gi i thu t : - um n cu i m ng for ( int i=0; i<n ; i++) - Ki m tra t ng ph n t c am không if (a[i] > 0 ) N u có thì xu t ph n t return a[i] ; Câu 3: Vi c hi n: a. Nh p m ng s th c g m n ph n t (0 < n b. Xu t m ng v a nh p ng d n: #include <conio.h> #include <stdio.h> 100). BÀI 5: #define MAX 100 ---------------------------------// Hàm nh ng ph n t cho m ng void NhapSL(int &n) { do{ }while (n<=0 || n>100); } // Hàm nh p giá tr cho t ng ph n t trong m ng void NhapMang (float a[], int n) { for (int i = 0; i < n; i ++) { f } } // Hàm xu t các ph n t c a m ng ra màn hình void XuatMang (float a[], int n) { \nMang gom cac phan tu:\ for (int i = 0; i < n; i ++) 8.2 f 33 34 BÀI 5: } int main() { float a[MAX]; int n; NhapMang (a,n); XuatMang (a,n); return 0; } 5.3 Câu 4: Vi c hi n: a. 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 c trùng, n u trùng thông báo và yêu c u nh p l i. b. Xu t m ng. c. Xu t ra màn hình các ph n t là s m t i nh ng v trí l m ng. d. Xu t ra v trí c a các ph n t có giá tr l n nh t. e. Vi t hàm tính t ng các ph n t f. Vi t hàm s p x p m ng theo th Yêu c n m t v trí ch n trong m ng. n. c hi n theo menu ch trong 35 BÀI 6: BÀI 6: KI U D LI U CÓ C U TRÚC Sau khi h c xong bài này, h c viên có th : - N c các khái ni n v ki u d li u có c u trúc; - Bi t nh p, xu t d li u có c u trúc cho m t ph n t .. 6.1 C u trúc (struct) th c ch t là m t ki u d gom nhóm các ki u d li li ng cách n có s n trong C thành m t ki u d nhi u thành ph n. u c u trúc: struct <tên c u trúc> { Các ki u d li u thành ph n ; }; //dùng t t tên m i cho ki u d typedef struct <tên c u trúc> <tên m i>; Khai báo bi n ki u c u trúc: <tên m i> <tên bi n>; Truy xu t: <Tên bi n c u trúc> <tên thành ph n>; li li u ph c h p 36 BÀI 6: 6.2 Câu 1: u d li u phân s g m t s và m u s . Vi hi n: a. Nh p 1 phân s b. Xu t 1 phân s c. Rút g n phân s d. Tính t ng 2 phân s e. So sánh 2 phân s ng d n: Sinh viên tham kh //Kh . ud li u phân s #include<stdio.h> #define MAX 100 typedef struct PHANSO { int tu, mau; }PS; //Khai báo các nguyên m u hàm----------------------------------------void Nhap1ps(PS &x); void Xuat1ps(PS x); int UCLN(int a, int b); //tr v giá tr ucln c a hai s a, b void RutGon(PS &x); PS Cong(PS x, PS y); //hàm tr v phân s k t qu sau khi c ng int SoSanh(PS x, PS y); /* tr v 0 n u phân s x = phân s y tr v <0 n u phân s x < phân s y */ v s >0 n u phân s x > phân s y tr c 37 BÀI 6: //Hàm chính-----------------------------------------------------------------int main() { PS x, y; //nh p và xu t hai phân s \ \ //tính t ng hai ps và xu t k t qu ra màn hình //so sánh hai ps int kq= SoSanh(x,y); else { } return 0; } //Các hàm con======================================= //Hàm nh p 1 phân s void Nhap1ps (PS &x) { //nh p m u s ph i khác 0, nh p sai b t nh p l i do { 38 BÀI 6: //thông báo và nh p cho t c a phân s x } while (x.tu==0); //n u m u s âm thì chu n hoá, ví d 1/-2 chuy n thành -1/2 if (x.mau<0) { x.tu=-x.tu; x.mau=-x.mau; } } //Hàm xu t 1 phân s --------------------------------------------------------------void Xuat1ps(PS x) { //xu t ra theo d ng tu/mau, ví d : 3/5 } c chung l n nh t------------------------------------------------------int UCLN(int a, int b) { a=abs(a); b=abs(b); //l y tr tuy L p ch ng nào a i b N u a>b thì a=a-b; N u b>a thì b=b-a; return a; } //Hàm rút g n phân s ----------------------------------------------------------------void RutGon(PS &x) { BÀI 6: if (x.tu==0) return; //n u phân s có t 39 = 0 thì không c n rút g n //l y giá tr ucln c a t và m u c a phân s x b ng cách g i hàm UCN(?, ?) //tính l i x.tu và x.mau } //Hàm tính t ng hai phân s ----------------------------------------------------------PS Cong(PS x, PS y) { PS tong; //phân s t qu sau khi c ng return tong; } //Hàm so sánh hai phân s ------------------------------------------------------------int SoSanh(PS x, PS y) { return x.tu*y.mau y.tu*x.mau; } 6.3 Câu 2: Làm ti t các hàm sau: a. Nh p vào dãy phân s b. Xu t dãy phân s c. Tính t ng dãy d. Tìm phân s l n nh t e. S p x p dãy phân s n. 40 BÀI 6: Câu 3: 3.1 Vi t hàm nh p d li u cho m t sinh viên, thông tin v m t sinh viên g m có: a. Mã s sinh viên (chu i 10 ký t ). b. Tên (là chu i t ). c. u int. M r ng dd/mm/yy). d. Gi i tính (Nam ho c N ). e. L p (chu i 7 ký t i h ng), 2 ký t nt f. vào h c, 1 ký t ti p là b c h c (D: ti p là ngành h c (TH: Tin H c, KT: K n t ...). m toán, lý, tin (Ki u s th c). ng d n 3.1 Khai báo c u trúc sinh viên struct sinhvien { char ten[11]; char mssv [11]; char lop [8]; char gioitinh; int ntns; float toan,ly,tin, DTB ; }; typedef struct sinhvien sv; // vi t hàm nh p 1 sinh viên Cách 1 void nhap1sv( sv &a) { flushall(); Toán, QT: 41 BÀI 6: printf("nhap ten sinh vien :"); gets (a. ten); printf("nhap ma so sinh vien :"); gets(a. mssv); flushall(); gioitinh ); printf("nhap diem toan:"); scanf("%f ", &a.toan) ; printf("nhap diem ly:"); scanf("%f ", &a.ly ) ; printf("nhap diem tin:"); scanf("%f ", &a.tin ); a.DTB= ( a.toan +a.ly +a.tin ) /3 ; } Cách 2 void nhap1sv( sv &a) { flushall(); printf("nhap ten sinh vien :"); gets (a. ten); printf("nhap ma so sinh vien :"); ( Nam y/nu x ) :"); gets(a. mssv); a. gioitinh= getche(); float t; printf("nhap diem toan:"); scanf("%f ", &t) ; a.toan= t ; printf("nhap diem ly:"); scanf("%f ", &t); a.ly = t ; printf("nhap diem tin:"); scanf("%f ", &t); a.tin = t; a.DTB= ( a.toan +a.ly +a.tin ) /3 ; } 42 BÀI 6: 3.2 Vi t hàm xu t d li u m t sinh viên v i thông tin v a nh p trên. ng d n void xuat1sv( sv a) { Lop :"); puts(a. lop); else prin } 3.3 Vi t hàm nh void nhapdssv(sv a[ ], int n) { for(int i=0 ; i<n ; i++) { printf("nhap hoc sinh thu: %d",i+1); nhap1sv(a[i]); } } ng m t chi u. BÀI 6: 3.4 Vi t hàm xu t danh sách sinh viên. void xuatdssv(sv a[ ], int n) { for(int i=0;i<n;i++) { printf(" sinh vien thu: %d",i+1); xuat1sv(a[i]); } } 3.5 Tìm sinh viên có tên ng d n void timtensv (sv a[ ] , int n, char x[]) { int flag = 0 ; for(int i=0;i<n;i++) if ( strcmp ( a[i].ten, x )==0 ) { xuat1sv (a[i] ) ; flag = 1 ; } if ( flag == 0 ) } i dùng nh p vào ) 43 44 3.6 BÀI 6: ms m trung bình >5. ng d n int DemsvDTB>5 (sv a[ ], int n) { int dem =0; for(int i=0;i<n;i++) { if ( a[i].DTB > 5) dem++; } return dem; } 3.7 Xu t danh sách sinh viên thu c ngành công ngh thông tin. ng d n 3.8 Xu t danh sách sinh viên N ng d n u danh sách d n cu i danh sách Ki m tra t ng ph n t void xuatdssvnu(sv a[ ], int n) { int flag =0; for(int i=0;i<n;i++) { { xuat1sv(a[i]); flag=1; } } if(flag ==0) p } BÀI 6: 3.9 S p x p danh sách sinh viên t ng d n void InterchangeSort( sv a[ ], int n ) { sv tam ; for ( int i = 0 ; i<n-1 ; i++ ) for ( int j =i+1; j < n ; j++ ) if( a[ i ].DTB> a[ j ].DTB ) { tam = a[i] ; a[i] = a[j] ; a[j] = tam; } } 6.4 n theo c t DTB. 45 46 1. Ph t, K thu t L p trình C- n và nâng cao, NXB KH & KT - 2003. 2. Nguy n T n Tr n Minh Khang, Bài gi ngK Thu t L p trình, Khoa Công Ngh i h c Khoa h c T nhiên 3. Nguy n Thanh Th y (ch Khoa h c k thu t biên), Nh p môn l p trình ngôn ng C, Nhà xu t b n 2000. 4. Tr n Minh Thái, Bài gi ng và bài t p L n; Khoa Công Ngh Thông i h c Khoa h c T nhiên 5. Tr n Minh Thái, Giáo Trình Bài T p K Thu t L ng Công Ngh Thông Tin Tp. H Chí Minh 6. Brain W. Kernighan & Dennis Ritchie, The C Programming Language, Prentice Hall Publisher, 1988.