Bài giảng Tin học đại cương 1 - Chương 3: Các cấu trúc điều khiển cung cấp cho người học các kiến thức: Cấu trúc tuần tự, cấu trúc điều khiển rẽ nhánh, cấu trúc điều khiển lặp, một số thuật toán cơ bản. Mời các bạn cùng tham khảo nội dung chi tiết.
31/01/2012 Chương Các cấu trúc điều khiển Cấu trúc Cấu trúc điều khiển rẽ nhánh Cấu trúc điều khiển lặp Một số thuật toán Thuật tốn lặp tổng qt Thuật tốn tìm phần tử lớn nhất, phần tử nhỏ Thuật tốn tìm ước số chung lớn Thuật toán kiểm tra số nguyên tố Cấu trúc Tuần tự thực thi tiến trình, mỗi lệnh được thực thi theo chuỗi từ xuống, xong lệnh này rồi chuyển xuống lệnh kế tiếp Lệnh Lệnh Lệnh 31/01/2012 Ví dụ: Nhập vào số a,b Tính tổng và hiệu #include #include Begin void main() { int a, b, tong, hieu; a, b printf(“Nhap vao a: “); scanf(“%d”,&a); Tong = a+b printf(“ Nhap vao b: “); Hieu = a -b scanf(“%d”,&b); tong = a + b; Tong hieu = a – b; Hieu printf(“ Tong: %d”,tong); printf(“ Hieu: %d”,hieu); getch(); End } Cấu trúc điều khiển rẽ nhánh Cấu trúc rẽ nhánh cho máy tính chọn thực hiện dãy lệnh dựa vào kết điều kiện (biểu thức quan hệ hay biểu thức so sánh) Gồm dạng: Chỉ xét trường hợp if (biểu thức điều kiện) { ; } Nếu biểu thức điều kiện cho kết quả true thì thực hiện khối lệnh bên if 31/01/2012 Ví dụ VÝ dơ: T×m sè lín nhÊt hai sè nhËp tõ bµn phÝm Tht toán: Khai báo biến a, b, max kiểu nguyên Nhập giá trị cho hai biến a b Gán max =a // giả sử a số lớn Nếu b > a max =b In kết max Chương trình: 31/01/2012 Cấu trúc điều khiển rẽ nhánh Xét hai trường hợp sai: if (biểu thức điều kiện) { ; } else { ; } Nếu biểu thức điều kiện cho kết true thì thực hiện khối lệnh 1, ngược lại thì cho thực hiện khối lệnh thứ Điều kiện dùng if Các phép toán logic >, >= , < , b) if(a!=b) 31/01/2012 Ví dụ: Nhập vào số nguyên a b, nếu a bội số b in thơng báo “a bội số b”, ngược lại in “a khong la boi so cua b” printf(“Nhap vao a:”); scanf(“%d”,&a); printf(“ Nhap vao b:”); scanf(“%d”,&b); if(a%b==0) else { printf(“a khong la boi so cua b”); } { printf(“a la boi so cua b”); } Cài đặt: 10 31/01/2012 Khi có nhiều điều kiện Phép tốn Và (&&) Là ĐÚNG tất điều kiện đưa vào là A B KQ 1 1 0 0 0 11 Khi có nhiều điều kiện Phép toán Hoặc (||) Là SAI tất điều kiện đưa vào là SAI A B KQ 1 1 1 0 12 31/01/2012 Ví dụ Nhập vào điểm Tốn, Lý, Hố Tính ĐTB, sau xét ĐTB Nếu DTB>=8 thì xếp loại giỏi Nếu > ĐTB >=5 thì xếp loại lại là trung bình DTB = (T+L+H)/3; If (DTB>=8) printf(“Gioi”); else if (DTB>=5) && (DTB0) if (so2 > so3) a = so2; else a = so3; if (so1>0) { if (so2 > so3) a = so2; } else a = so3; Kết quả????? 15 Cấu trúc lựa chọn (switch…case) switch (biểu thức) case n1 : các câu lệnh ; break ; case n2: các câu lệnh ; break ; ……… case nk : ; break ; [default: các câu lệnh] Trường hợp giá trị biểu thức n1 Trường hợp giá trị biểu thức n2 Trường hợp giá trị biểu thức nk Các trường hợp lại (ko bắt buộc) 16 31/01/2012 Với: ni: số nguyên ký tự Nếu giá trị biểu thức = ni thực hiện câu lệnh sau case ni Nếu giá trị biểu thức khác tất giá trị ni thực hiện câu lệnh sau default nếu có thoát khỏi switch Khi chương trình đã thực hiện xong câu lệnh case ni nào thì thực hiện ln lệnh thuộc case bên mà khơng xét lại điều kiện (do ni được xem nhãn) Vì vậy, để chương trình thoát khỏi lệnh switch sau thực hiện xong trường hợp, ta dùng lệnh break 17 Ví dụ In hình học lực học sinh theo thang điểm sau: Từ -> 3: Kém, 4: Yếu, 5-> 6: Trung bình, -> 8: Khá, -> 10: Giỏi switch(diem) { } case 0: case 1: case 2: case 3: printf(“Kem\n”); break; case 4: printf(“Yeu\n”); break; case 5: case 6: printf(“Trung binh\n”); break; case 7: case 8: printf(“Kha\n”); break; case 9: case 10: printf(“Gioi\n”); break; default: printf(“Nhap diem sai\n”); // Kết thúc switch 18 31/01/2012 Cấu trúc lặp Cho phép lặp lại thực hiện cơng việc nhiều lần Có loại: Lặp với sớ lần xác định • for Lặp với sớ lần khơng xác định • while • do-while Điều kiện Yes lặp No Lệnh / Khối lệnh 19 Vòng lặp for for ( ; ; ) { ; } Khởi gán: Dùng để khởi gán giá trị ban đầu cho vòng lặp Điều kiện lặp: Dùng để kiểm tra điều kiện trước thực hiện vòng lặp Cập nhật: Dùng để cập nhật vịng lặp (tăng giảm sớ lặp) Bất kỳ biểu thức nào biểu thức nói đều có thể vắng phải giữ dấu chấm phẩy (;) 20 10 31/01/2012 Hoạt động Khởi gán No Điều kiện lặp Yes Lệnh / Khối lệnh Cập nhật vòng lặp Bước 1: Khởi gán Bước 2: Kiểm tra điều kiện - Nếu điều kiện true thì cho thực hiện các lệnh của vòng lặp, thực hiện cập nhật vòng lặp Quay trở lại bước - Ngược lại thoát khỏi lặp 21 Ví dụ Nhập vào số nguyên dương.Xuất số từ 1->n 22 11 31/01/2012 Ví dụ Nhập vào số ngun dương.Tìm ước số 23 Vịng lặp while while ( ) lệnh/ khối lệnh; Ý nghĩa: Nếu giá trị điều kiện lặp cịn khác (cịn đúng) cịn thực lệnh/ khới lệnh Vào thân vịng lặp lần Lưu ý: Cách hoạt động while giớng for 24 12 31/01/2012 Ví dụ Nhập số nguyên n In dãy số số nguyên từ n 25 Vòng lặp … while < Khởi gán> { ; ; Khởi gán Lệnh / Khối lệnh } while (điều kiện); Cập nhật vòng lặp No Điều kiện lặp Ý nghĩa: Yes Thực giá trị điều kiện (sai) dừng Vào thân vịng lặp 26 lần 13 31/01/2012 Ví dụ Nhập số nguyên n Tính tổng n = thì dừng 27 So sánh vòng lặp Vòng lặp for/while: Kiểm tra điều kiện trước thực hiện công việc sau Công việc có thể không được thực hiện lần nào Vòng lặp kết thúc nào điều kiện sai Vòng lặp do-while Thực hiện công việc trước kiểm tra điều kiện sau Công việc được thực hiện nhất lần Vòng lặp kết thúc nào điều kiện sai 28 14 31/01/2012 Câu lệnh đặc biệt Lệnh return Khi gặp lệnh return máy kết thúc hàm chứa nó Lệnh break Dùng để thoát khỏi vòng lặp for, while, do…while switch-case Tiếp tục thực hiện lệnh liền sau đó Cần phân biệt với lệnh return là lệnh trả từ hàm, nghĩa là thoát khỏi hàm thi hành, nên giúp ln khỏi tất vòng lặp 29 Câu lệnh đặc biệt Lệnh continue Trong vòng lặp, gặp lệnh continue, chương trình bỏ qua các câu lệnh sau continue • for: quay lên tính trị cho biểu thức, kiểm tra điều kiện coi có lặp tiếp khơng • while/do-while: kiểm tra điều kiện coi có lặp tiếp không Lệnh goto Cú pháp khai báo goto nhãn; Khi gặp lệnh goto máy nhảy tới thực hiện câu lệnh viết sau nhãn 30 15 31/01/2012 Ví dụ In màn hình giá trị từ 10 đến 20 trừ số 13 và số 17 31 Một số thuật toán lặp Thuật toán lặp tổng quát: Thuật toán lặp tổng quát có dạng: Lặp i = 1, 2,…, n làm • Gọi thủ tục xử lý cho lần lặp thứ i Cuối lặp 32 16 31/01/2012 Thuật tốn tìm ước số chung lớn Vấn đề :Viết chương trình nhập từ bàn phím hai số a, b In màn hình ước số chúng lớn Xác định bài tốn Input: sớ a và b ngun dương Output: USCLN(a, b) 33 Thuật tốn tìm ước số chung lớn Thuật toán Bằng mã giả: Bước 1: Kiểm tra a và b Nếu a khác b thì Nếu a> b thì a = a - b, quay lại bước Nếu b< a thì b = b – a, quay về bước Ngược lại (a=b) chủn về bước //khi ước sớ chun Bước 2: In kết quả và kết thúc 34 17 31/01/2012 Thuật tốn tìm ước số chung lớn Lưu đồ giải thuật 35 Tìm uớc số chung số nguyên dương a, b 36 18 31/01/2012 Thuật toán kiểm tra số nguyên tố Định nghĩa: Số nguyên tố là số tự nhiên chia hết cho và nó Ví dụ: 2, 3, 5, 7… Vấn đề : Cho số nguyên dương n Kiểm tra n có phải là số ngun tố hay khơng? Xác định bài toán: Input: n nguyên dương Output: kết luận về tính ngun tớ n Thuật tốn: 37 Thuật toán kiểm tra số nguyên tố Nếu n = = { Kết luận: n khơng ngun tố Dừng thuật tốn } flag = 1; //gán cho cờ flag giá trị = 1TRUE Lặp i = 2, 3, 4,…., n-1 Nếu (i là ước số của n) thì { flag = 0; //gán cho cờ flag giá trị sai = FALSE Thốt khỏi vịng lặp } Nếu flag = Kết luận: n là số nguyên tố Ngược lại Kết luận: n không là số nguyên tố //hoặc n 1 là số nguyên tố thì n có ước số nguyên tố (dương) 3: Kém, 4: Yếu, 5-> 6: Trung bình, -> 8: Khá, -> 10: Giỏi switch(diem) { } case 0: case 1: case 2: case 3: printf(“Kem\n”); break;... else if sai Ví dụ: giả sử biến so1 =3, so2=5, so3=10, a = if (so1>0) if (so2 > so3) a = so2; else a = so3; if (so1>0) { if (so2 > so3) a = so2; } else a = so3; Kết quả????? 15 Cấu trúc lựa chọn... chun Bước 2: In kết quả và kết thúc 34 17 31 /01/2012 Thuật tốn tìm ước số chung lớn Lưu đồ giải thuật 35 Tìm uớc số chung số nguyên dương a, b 36 18 31 /01/2012 Thuật tốn kiểm tra số ngun