2, ACPrU ED TAI LIEU THAM KHAO 1. Giáo trình tin hoc (tập 1, 2), Hồ Sĩ Đàm & Lê Khắc Thành, NXB DHQGHN. Hướng dẫn thực hành và ứng dụng Windows XP, Nguyễn Tiến, Đặng Xuâ Hường & Nguyễn Văn Hoài, NXB Thống kê. Ngôn ngữ lập.
trình C, Quách Tuầ n Ngọc , Nhà xuất bản Giáo dục. Kỹ thuật lập trình C, Pham Van Át, Nhà xuất bản Khoa học kỹ thuật Khoa CNTT - Trường CĐKT Lý Tự Trọng nod, 23 Kt n. | Lưu ý: Chương trình này được viết bằng các cấu trúc lặp đã học gém for, while va do. Viết chương trình kiểm tra va in ra các số nguyên tố nhỏ hơn 100 a” 118 Khoa CNTT ~ Truong CDKT Ly Tu Trong [ itt; }while (i<=MAX) i printf("Tong cac so le: d\n", odd); printf ("Tong cac so chan: td\n", even); printf ("Tong day so: $d", sum) ; getch () ; Két qua: SN x0 m°.
CC (Fl x! Tong cac so le: 2589 tong cac so chan: 2558 ae ong day so: 5@58 aa uy BAI TAP 1. Viét chương trình giải và biện luận phương trình bậc 2 với các hệ số a, b, c và nghiệm x là các số thực : ax? +bx+c=0 2. Viét chương trình nhập bán kính r và chiều cao ? của một hình cầu. Nhập yêu cầu tính tóan các thông số của hình cầu gồm: 'A' hoặc ‘a’ (Area): tinh diện tích hình cầu 4 = 7-7? “C° hoặc *c' (Circumference): tinh chu vi hình cầu € = 2.
Tr -V' hoặc *v' (Volume): tínhthể tích hình cầu ‘= 22 -} 3. Viết chương trình dùng các cấu trúc lặp for, while, do.while dé in dãy các số nguyên lẻ nhỏ hơn 100 theo chiều ngược với mẫu sau: 99, 97, 95,. Viết chương trình tính tổng và tích của dãy số gồm n>0 phân tử. Trong đó n được nhập vào từ bàn phím khi thực hiện chương trình: 117 Khoa CNTT — Trường CĐKT Lý Tự Trọng void main (void) { int i=l; printf ("Cac so nguyen tu 1.%d:\n\n", MAX); do printf ("%6d", i++); while (i<=MAX) ; getch () ; } b.
Vidu2 Viét lai chuong trinh tinh tổng các số chăn và tổng các số lẻ từ dãy số nguyên 1, 2,., 100, dùng cấu tric do.h> #define MAX 100 void main (void) { int i, sum, odd, even; i= 1; odd = even = sum = 0; do{ sumt+=i; if (i%2!=0) // i la so le odd+=i; else // i la so chan event=i; 116 Khoa CNTT - Trường CĐKT Lý Tự Trọng HI. CẤU TRÚC do.while 1, Cú pháp do statement; while (condition) ; Thuc hién phat biéu statement khi cond i tion van còn có tri true do{ compound statement; }while (condition) ; condition: Biểu thức điều kiện bất kỳ bao gồm các tóan tử so sánh, logic, bitwise với kết quả là một giá trị logic true (1) hoặc £a1se (0). Biểu thức điều kiện conđi tion phải được viết trong cặp ngoặc “ (.) ” statement: Phat biéu bat ky compound statement: Phat biéu phttc hay khối lệnh, phải được bao trong cặp ngoặc nhọn {.} LƯU Ý: - Cau tric do.while con gọi là cầu trúc lặp kiểm tra điều kiện sau (pre-test loop) vì điều kiện được kiểm tra sau khi thực hiện statem ent - statement được thực hiện tối thiểu 1 lần cho dù lần kié tra condi tion đầu tiên co tri true - V6i phát biểu: do ; while(1) ; SẼ tạo ra việc lặp vô tận, và chỉ có thê kết thúc bằng một trong các phát biéu break, goto hodc return 2. Vidul Viết lại chương trình in ra màn hình các số nguyê n từ 1 đến 100, mỗi giá trị in ra trong 6 vi trí, dùng cấu tric do.h> #define MAX 100 Khoa CNTT - Trường CĐKT Lý Tự Trọng { int i, sum, odd, even; 13 = 1; odd = even = sum = 0; while (i<=MAX) { sumt+=i; if (i%2!=0) // 1 la so 1e odd+=i; else /⁄/ i la so chan event=i; itt; } printf ("Tong cac so le: %d\n", odd); printf ("Tong cac so chan: %d\n", even); printf ("Tong day so: %d", sum); getch () ; } Kết quả: | c+ “D:\Hai-GiaoTrinh)KTLTSEXSe#fi ong cac so chan: 2558 Jong day so: 5858 114 Khoa CNTT - Trường CĐKT Lý Tự Trọng | #include <stdio.h> #define MAX 100 void main (void) { int i=1; printf ("Cac so nguyen tu 1.
Vidu2 Viết lại chương trình tính tổng cdc sé chin va tổng các số lẻ từ dãy số nguyên 1, 2,. ,100, dùng cau tric while thay vì for | #include <stdio.h> #define MAX 100 void main (void) Khoa CNTT — Truong CDKT Ly Tu Trong 1. CAU TRUC while 1. Biểu thức điều kiện condition phải được viết trong cặp ngoặc “(.) ” statement: Phát biêu bất kỳ compound statement: Phát biểu phức hay khối lệnh, phải được bao trong cặp ngoặc nhọn {.} LƯU Ý: -_ Cấu trúc whi1le còn gọi là cầu trúc lặp kiểm tra điều kiện trước (pre-test loop) vì điều kiện được kiểm tra trước khi thực hién statement - statement c6 thé không được thực hiện lần nào nếu lan kié tra condition ddu tién cé tri false - Với phát biểu: while (1) ; sẽ tạo ra việc lặp vô tận, và chỉ có thể kết thúc băng một trong các phát biểu break, goto hodc return 2.
Vidul Viết lại chương trình in ra màn hình các số nguyên từ 1 đến 100, mỗi giá trị in ra trong 6 vị trí, dùng cầu tric while thay vi for 112 Khoa CNTT - Trường CĐKT Lý Tự Trọng #include <stdio.h> #define MAX 100 void main (void) { int i, sum, odd, even; odd = even = sum = 0; for (i=1; i<=MAX; i++) { sumt+=i; if (i%2!=0) // ilasole odd+=i ; | else // i la so chan event=1; Printf ('"Tong cac so le: d\n", odd); printf ("Tong cac so chan: d\n", even); printf ("Tong day so: $d", sum); getch(); Kết quả: DI ong cac so le: 2500 ong cac so chan: 2550 Hong đau so: 50858 LH Khoa CNTT - Trường CĐKT Ly Tự Trọng sẽ tạo ra việc lặp vô tận, và chỉ có thê kết thúc bằng một trong các phát biểu break, goto hoặc return -_ Cấu trúc lặp for còn được gọi là câu trúc lặp cố dinh (fixed loop) vi s6 lan lap hoan tòan được xác định 2. Vidul In ra màn hình các số nguyên từ | dén 100, mỗi giá trị in ra trong 6 vị trí.h> #define MAX 100 void main (void) { int i; printf ("Cac so nguyen tu 1.%d:\n\n", MAX); for (i=0; i<=MAX; itt) printf ("%6d", i); getch (); } Két qua: Pra UE Caine Cheenti b. Vidu2 Tính tổng các số chẵn và tổng các số lẻ từ dãy số nguyên 1, 2,.,100 110 Khoa CNTT - Truong CDKT Ly Tự Trọng BÀI 17: CÁU TRÚC LẶP I. CAU TRUC LAP FOR 1.
Cú pháp for(init expression; cond expression; loop_expression) statement; Lặp lại việc thực hiện phát biêu statement với số lần xác định tùy thuộc vào init expression va cond expressio n for(init expression; cond expression; loop_expression) { compound statement; init expression: Biéu thit thiét lập giá tri khởi động đếm số lần của vòng lặp, biểu thức này không bị ràng buộc về kiểu dữ liệu cond_ expzession: Biểu thức điều kiện để kết thúc vòng lặp. Biểu thức phải có kiểu số học hoặc con trỏ (pointer) và giá trị biểu thức được định giá mỗi khi bắt đầu một lần lặp va. thường có kiểuÏ logic (false/true) loop _ expression: Biểu thức dùng để định giá sau mỗi lần lặp và dùng cho bước lặp sau trong biểu thức điều kiện cond_expression. Biểu thức này không bị hạn chế về kiểu đữ liệu.
Khi trong vòng lặp for có phát biểu continue thì 1oop_expression được định gia va điều khiển được đưa về đầu vòng lặp. Khi có phát biểu break trong vòng lặp fo+ thì loop_expression không được thực hiện và điều khiển được đua ra sau for statement: Phát biểu sẽ được thực hiện khi điều kiện trong cond_expression van còn có giá trị true LƯU Ý: - - Với cách việt: for( ; ; ); Khoa CNTT - Trường CDKT Ly Tu Trong printf ("%5.2f\n", a, op, b, a-b); It break; case MUL: printf ("$5.2£\n", a, op, b, atb); break; case DIV: if (b!=0) printf ("%5.2f\n", a, op, b, a/b); else printf ("%5.2f = %s\n", a, op, b, ERR_OP); break; default: printf (ERR_IN) ; } getch () ; 108 Khoa CNTT- —-< CĐKT by TyW Trọng “Ds TH a mo t so nguyen: 52935 e dem (8/10/16): 3 exadecimal: @xf5a? He dem 3 khong xac dinh b. Ví dụ2 Viết lại chương trình ví đụ 2 ở mục 1.2 dùng cấu tric switch thay vì dùng cầu trúc if #include <stdio.h> #define ADD #define SUB #define MUL bet #define DIV rf #define ERR_IN "Toan tu khong hop le" #define ERR OP "Phep chia cho zero” void main (void) { float a,b; char op; printf("Nhap 2 so bat ky: "); scanf ("Sf $f", &a, &b); printf("$Toan tu (+ - * /): "); op=getche () ; printf ("\n\n") ; switch (op) { case ADD: printf ("%5.2f\n", a, op, b, a+b); break; case SUB: 107 Khoa CNTT - Trường CĐKT Lý Tự Trọng #define HEX 0x10 void main (void) { long num; int base; printf£("Nhap mot so nguyen: "); scanf("31d", &num); printf("He dem (8/10/16): "); scanf("$d", &base); print£f ("\n\n") ; switch (base) { case OCT: printf ("Octal: o$lo", num) ; break; case DEC: printf ("Decimal: %ld", num); break ; | case HEX: printf ("Hexadecimal: 0x%1lx", num); break; default: printf ("He dem td khong xac đỉnh", base); } getch () ; } Két qua: 106 Khoa CNTT - Trường CĐKT Lý Tự Trọng Case constant2: statement2; [break ; ] (default: default statement; ] expression = constant]: thuc hién statement] expression = constant2: thuc hién statement2 expression = default ¢ (constant1, constant2,.): thuc hién default statement expression: Biéu thitc cho két quả là kiểu đữ liệu đếm được, nghĩa là các giá trị rời rac kiéu char, int, long coensCanL1, constant2,.: Giá trị kết quả tương ứng của biểu thức expression statement1, statement2,. default_stat ement: Phát biểu bất kỳ default: Trường hợp biểu thức expression cho kết quả khác với các hằng _ Constan£1, constant2,.
đã liệt kê break: Thông thường sau mỗi khối case cần có một phát biêu break nhằm chuyên điều khiến ra ngòai switch. Điều này sẽ làm cho các phát biểu ở các khối case sau đó không được thực hiện. Hãy thử bỏ các phát biểu break trong các ví dụ bên đưới để thấy tác dụng của nó. Vi dụ] ‘ Nhập vào một số nguyên, cho phép người dùng lựa chọn in giá trị đã nhập theo một trong các hé dém decimal, octal, hexadecimal #include <stdio.h> #define OCT 0x08 #define DEC 0x0A 105 Khoa CNTT — Truong CDKT Ly Tu Trọng if (b!=0) printf ("%5.2f\n", a, op, b, | a/b) ; else printf ("%5.2f = %s\n", a, op, b, ERR_DIV) ; else printf (ERR_OP) ; getch () ; oan tu + ~ * />: & oan tu khong hop lem Nhap 2 so bat ky: 42 os oan tu + — * />: / 42.00 = Phep chia cho zero H.
CẤU TRUC switch 1.