Bài giảng Lập trình cơ bản - Chương 3: Lập trình với cấu trúc điều kiện - Lê Đức Long
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình cơ bản - Chương 3: Lập trình với cấu trúc điều kiện - Lê Đức Long", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_lap_trinh_co_ban_chuong_3_lap_trinh_voi_cau_truc_d.pdf
Nội dung text: Bài giảng Lập trình cơ bản - Chương 3: Lập trình với cấu trúc điều kiện - Lê Đức Long
- LẬP TRÌNH VỚI CẤU TRÚC ĐIỀU KIỆN LÊ ĐỨC LONG-NGÔ QUỐC VIỆT 2011
- Nội dung trình bày 1. Mục tiêu 2. Công dụng của cấu trúc điều kiện 3. Toán tử so sánh, toán tử logic, biểu thức logic 4. Câu lệnh, khối lệnh 5. Phân loại cấu trúc điều kiện 6. Cấu trúc rẻ nhánh 7. Cấu trúc chọn Ngô Quốc Việt-Lập trình Cơ bản-2011 2
- Mục tiêu bài giảng Sinh viên sẽ sẽ hiểu và vận dụng được các kiến thức kĩ năng cơ bản sau: Ý nghĩa lệnh, khối lệnh. Cú pháp, ý nghĩa, cách sử dụng lệnh if, lệnh switch. Một số bài toán sử dụng lệnh if, switch thông qua các ví dụ. So sánh, đánh giá một số bài toán sử dụng lệnh if hoặc switch. Cách sử dụng các cấu trúc lồng nhau Ngô Quốc Việt-Lập trình Cơ bản-2011 3
- Định nghĩa Lện điều khiển và quyết định cho phép thay đổi luồng thực hiện của chương trình Các lệnh rẽ nhánh làm cho chỉ một đoạn mã được thực hiện hay không tuy thuộc vào mệnh đề điều kiện. Ví dụ: Nếu nước sôi thì tắt bếp (hành động tắt bếp chỉ xảy ra khi nước sôi) Nếu điểm thi >= 5 thì thông báo đậu ngược lại thông báo rớt Trong hầu hết ngôn ngữ sẽ dùng lệnh “if”. Ngô Quốc Việt-Lập trình Cơ bản-2011 4
- Câu lệnh, khối lệnh Mỗi câu lệnh thực hiện một chức năng nào đó (như lệnh gán, lệnh xuất dữ liệu, nhập dữ liệu) Các câu lệnh đều được ngăn cách với nhau bởi 1 kí hiệu nào đó Trong Pascal và C, các câu lệnh được ngăn cách với nhau bằng dấu chấm phẩy (;) Khối lệnh là tập các câu lệnh được sắp xếp thứ tự. Khối lệnh được xem tương đương với 1 câu lệnh riêng lẻ Trong Pascal, khối lệnh được bao bọc với từ khóa begin và end. Trong C, khối lệnh được bao bọc bởi dấu ngoặc { } Ngô Quốc Việt-Lập trình Cơ bản-2011 5
- Câu lệnh, khối lệnh Ví dụ { //dau khoi a = 5; // viết thụt vô 1 tab so với cặp { } b = 6; // viết thụt vô 1 tab so với cặp { } printf("Tong %d + %d = %d", a, b, a+b); } //cuoi khoi Lưu ý: nếu thiếu một trong hai dấu { } của mỗi khối lệnh, sẽ khó khăn khi tìm lỗi compile. Ngô Quốc Việt-Lập trình Cơ bản-2011 6
- Lệnh if Dạng tổng quát if( ) Điều Đúng “lệnh hay khối lệnh”; kiện Sai Nếu là true (khác zero) Lệnh / Khối thì “lệnh hay khối lệnh” được thực lệnh hiện. Nếu là false (bằng zero) thì “lệnh hay khối lệnh” không được thực hiện. Ví dụ if(iDegree >= 100) printf”Nuoc da soi\n”); Không đặt dấu “;” sau lệnh “if” Ngô Quốc Việt-Lập trình Cơ bản-2011 7
- Các toán tử so sánh Dùng trong của lệnh if. Phép toán Trong Pascal Trong C Nhỏ hơn > So sánh bằng = == Khác nhau = >= Phép not not ! Phép and and && Phép or or || Ngô Quốc Việt-Lập trình Cơ bản-2011 8
- Các toán tử logic Dùng kết hợp trong của lệnh if để tạo thành biểu thức logic. Phép toán Kí hiệu trong Pascal Ký hiệu trong C Phép and and && Phép or or || Phép not not ! Ví dụ: if(fDiemTrungBinh >=8 && sRenluyenDaoduc ==“kha”) printf(“Sinh vien dat loai gioi\n”); Ngô Quốc Việt-Lập trình Cơ bản-2011 9
- Kết hợp với logical operators (count 5.0) && (answer = 1000.0) && (status == ‘s')) *, / , %, +, - , >= == , != trên 1 hàng thì thứt ựt ừ trái phải && , || count 5.0 && answer = 1000.0 && status == ‘s’) 10
- Conditional Operator ? : Những phép toán điều kiện đơn giản cóth ể được thực hiện bằng toán tử điều kiện - conditional operator (? :). Biểu thức sử dụng conditional operator gọi là một biểu thức điều kiện - conditional expression. expression 1 ? expression 2 : expression 3 (i < 0) ? 0 : 100 The expression (i < 0) is evaluated first. If it is true (i.e., if the value of i is less than 0), the entire conditional expression takes on the value 0. Otherwise (if the value of i is not less than 0),the entire conditional expression takes on the value 100. min = (f < g) ? f : g This statement causes the value of the smaller of f and g to be assigned to min. Ngô Quốc Việt-Lập trình Cơ bản-2011 11
- Lệnh esle Dạng tổng quát if( ) Đúng Điều Sai “lệnh hay khối lệnh”; kiện else Lệnh / Lệnh / “lệnh hay khối lệnh”; Khối lệnh Khối lệnh Ví dụ if(iDegree >= 100) printf”Nuoc da soi\n”); else printf”Nuoc chua soi\n”); Không đặt dấu “;” sau lệnh “else” Ngô Quốc Việt-Lập trình Cơ bản-2011 12
- Ví dụ lệnh if esle #include "stdio.h" #include "conio.h" void main() { int x; printf("Nhap 1 so nguyen:"); scanf("%d",&x); if((x%2)== 0) printf("Day la so chan\n"); else printf("Day la so le\n"); getch(); } Ngô Quốc Việt-Lập trình Cơ bản-2011 13
- Bài tập tại lớp Viết chương trình nhập vào 4 số nguyên và tìm số lớn nhất trong 4 số đã nhập. Ví dụ: Nhập: 7 10 -5 4 Xuất: 10 1. Xác định bài toán Input (I), Output (O) 2. Phân tích bài toán Ý tưởng chính: Thành phần dữ liệu, thành phần xử lý Giả sử số đầu tiên là lớn 3. Thiết kế chương trình nhất (max). Gán số đầu tiên Đơn vị dữ liệu, đơn vị xử lý, lưu đồ là max. 4. Cài đặt So sánh số lớn nhất lần lượt Chương trình chính với 3 số còn lại. Với mỗi số 5. Thử nghiệm nếu số đó lớn hơn max thì Bộ dữ liệu thử nghiệm gán max cho số đó. 14
- Các lệnh “if” lồng nhau Xét ví dụ if(count < 10) { //lệnh if #1 if( (count % 4) == 2) //lệnh if #2 cout << "Condition:White\n"; else cout << "Condition:Tan\n"; } Hỏi: lệnh else thuộc về “if” nào. Hỏi: đoạn mã nguồn trên “đẹp” không ? Đừng viết giống đoạn mã trên. Ngô Quốc Việt-Lập trình Cơ bản-2011 15
- Các lệnh “if” lồng nhau Đúng Điều Sai kiện 1 Sai Điều Lệnh / Khối lệnh kiện 2 Đúng Lệnh / Khối lệnh Lệnh / Khối lệnh Ngô Quốc Việt-Lập trình Cơ bản-2011 16
- Lệnh else if Lệnh tổng quát if(biểu thức logic 1) khối lệnh 1; else if(biểu thức logic 2) khối lệnh 2; else if(biểu thức logic n-1) khối lệnh n-1 else khối lệnh n; Ngô Quốc Việt-Lập trình Cơ bản-2011 17
- Lệnh else if Dạng lồng vào nhau để trong trường hợp có nhiều lựa chọn (lớn hơn 2) Ví dụ xét bài toán sau: Xếp loại học lực X X ≥ 9 : Xuất Sắc 8 ≤ X < 9 : Giỏi 7 ≤ X < 8 : Khá 6 ≤ X < 7 : Trung Bình Khá 5 ≤ X < 6 : Trung Bình X < 5: Kém Ngô Quốc Việt-Lập trình Cơ bản-2011 18
- Lệnh else if #include "stdio.h" #include "conio.h" void main() { double x; printf("Nhap diem trung binh:"); scanf("%lf",&x); if( x >= 9) printf("Ban dat loai Xuat Sac"); else if (x >= 8) printf("Ban dat loai Gioi"); else if (x >= 7) printf("Ban dat loai Kha"); else if (x >= 6) printf("Ban dat loai Trung Binh Kha"); else if (x >= 5) printf("Ban dat loai Trung Binh"); else printf("Ban dat loai Kem"); getch(); } Ngô Quốc Việt-Lập trình Cơ bản-2011 19
- Biểu thức logic Biểu thức là sự kết hợp hợp lệ của những phép toán thực hiện trên biến, hằng hoặc các giá trị của hàm Giá trị biểu thức logic chỉ có thể nhận một trong hai giá trị true hoặc false. Lưu ý: trong C, giá trị biểu thức logic có thể là giá trị số. Trong trường hợp này nếu bằng 0 là false, ngược lại là true. Ngô Quốc Việt-Lập trình Cơ bản-2011 20
- Bài tập ngắn 1. Viết lưu đồ giải thuật và chương trình để nhập vào kí tự c. Kiểm tra xem nếu kí tự nhập vào là kí tự thường trong khoảng từ 'a' đến 'z' thì đổi sang chữ in hoa và in ra, ngược lại in ra thông báo "Kí tự bạn vừa nhập là: c". 2. Viết lưu đồ giải thuật và chương trình để nhập vào kí tự c. Kiểm tra xem nếu kí tự nhập vào là kí tự thường trong khoảng từ 'a' đến 'z' thì đổi sang chữ in hoa và in ra, nếu kí tự in hoa trong khoảng A đến Z thì đổi sang chữ thường và in ra, nếu kí tự là số từ 0 đến 9 thì in ra câu "Kí tự bạn vừa nhập là số (in ra kí tự c)", còn lại không phải 3 trường hợp trên in ra thông báo "Bạn đã nhập kí tự (in ra kí tự c)" Ngô Quốc Việt-Lập trình Cơ bản-2011 21
- Bài tập ngắn Viết chương trình nhập vào một hàm số bậc 2, tính và xuất ra cực trị của hàm Ýt ưởng chính Cho hàm số bậc hai f(x) = ax2+bx+c (với a ≠ 0) Cực trị M của f được xác định như sau: xM = Nghiệm của phương trình f'(x) = 0 (xM = -b/2a) 2 yM = f(xM) = axM +bxM+c Nếu a >0 thì M là cực tiểu Nếu a <0 thì M là cực đại Ngô Quốc Việt-Lập trình Cơ bản-2011 22
- Bài tập tại lớp Viết chương trình nhập năm. Sau đó xuất ra số ngày trong tháng 2 của năm đó. Tháng 2 của năm nhuận có 29 ngày, và của năm thường thì có 28 ngày. Biết rằng năm nhuận là năm chia hết cho 4 nhưng không chia hết cho 100, hoặc chia hết cho 400. Bộ dữ liệu mẫu: Input Output Tháng Năm Số ngày trong tháng 2 2011 28 2 1900 28 2 2000 29 2 2004 29 2 1996 29 23
- Cấu trúc chọn-Lệnh switch Lệnh switch giống cấu trúc else if, nhưng mềm dẻo và linh động hơn nhiều so với sử dụng if . Cấu trúc chọn thể hiện sự tiện lợi và làm cho mã nguồn trở nên rõ ràng và dễ đọc hơn Tuy nhiên, mặt hạn chế là kết quả của biểu thức phải là giá trị hằng (có giá trị cụ thể). Một bài toán sử dụng lệnh switch thì cũng có thể sử dụng if, nhưng ngược lại còn tùy thuộc vào giải thuật của bài toán Sinh viên hãy cho ví dụ về nhận xét trên. Ngô Quốc Việt-Lập trình Cơ bản-2011 24
- Cấu trúc chọn-Lệnh switch Dạng lệnh switch (biểu thức) { case N1: Khối lệnh 1 break; case N2: Khối lệnh 2 break; case Nk: Khối lệnh k break; [default: //không thuộc các trường hợp Ni; các câu lệnh] } Ni là các hằng số nguyên (int, long), kí tự. Tại sao? Ngô Quốc Việt-Lập trình Cơ bản-2011 25
- Cấu trúc chọn-Lệnh switch #include "stdio.h" #include "conio.h" void main() { int x; printf("Nhap ma vung:"); scanf("%d",&x); switch(x) { case 4: printf("Day la ma vung cua Ha Noi"); break; case 8: printf("Day la ma vung cua TP.Ho Chi Minh"); break; case 72: printf("Day la ma vung cua Long An"); break; default: printf("He thong chua cap nhat"); } getch(); } Ngô Quốc Việt-Lập trình Cơ bản-2011 26
- Cấu trúc chọn-Lệnh switch Nhiều lựa chọn cùng một xử lý ~ điều kiện OR trong lệnh “if” void main(void) { int ithang; printf("Nhap vao thang: "); scanf("%d", &ithang); switch(ithang) { case 1: case 2: case 3 : printf("Quy 1.\n"); break; case 4: case 5: case 6: printf("Quy 2.\n"); break; case 7: case 8: case 9: printf("Quy 3.\n"); break; case 10: case 11: case 12: printf("Quy 4.\n"); break; default : printf("Ban phai nhap vao so trong khoang 1 12\n"); }; getch(); } Ngô Quốc Việt-Lập trình Cơ bản-2011 27
- Cấu trúc switch lồng Trong khối lệnh lại có chứa lệnh switch khác. switch(ithang) { case 1: case 2: case 3 : { printf("Quy 1.\n"); switch(ituan) { case 1, 2: printf(“Nua thang dau.\n"); break; case 3, 4: printf(“Nua thang cuoi.\n"); break; } break; } case 4: case 5: case 6: printf("Quy 2.\n"); break; case 7: case 8: case 9: printf("Quy 3.\n"); break; case 10: case 11: case 12: printf("Quy 4.\n"); break; default : printf("Ban phai nhap vao so trong khoang 1 12\n"); }; Ngô Quốc Việt-Lập trình Cơ bản-2011 28
- Các lệnh khai báo hằng Nhắc lại lệnh gán: gán một giá trị (hay biểu thức cho một biến) int answer; // A place to put our results answer = (1 + 2) * 4; Có thể dùng #define để khai báo hằng trong C. #define NHIETDOSOI 100 if(iDegree >= NHIETDOSOI) printf”Nuoc da soi\n”); Thật ra, lệnh #define được gọi là macro. Ngô Quốc Việt-Lập trình Cơ bản-2011 29
- Lệnh khai báo macro Dùng để đặt tên cho các biểu thức thường dùng Ví dụ #define greater(a, b) (a > b) #define lessthan(a, b) (a > iSo1 >> iSo2; if(lessthan(iSo1, iSo2) printf(“Gia tri mot lon hon gia tri hai\n”); Các macro nên được xác lập mở tập tin khai báo (trong C/C++ là tập tin .h) Ngô Quốc Việt-Lập trình Cơ bản-2011 30
- Lệnh gán ảnh hưởng kiểu dữ liệu Cho phép chuyển kiểu dữ liệu khi dùng lệnh gán. Sẽ làm mất dữ liệu khi chuyển từ kiểu thực sang nguyên. Từ long sang int, từ int sang short, từ short sang char. Ngô Quốc Việt-Lập trình Cơ bản-2011 31
- Một sốluật chuyển đổi kiểu Khi các toán hạng cóki ểu dữli ệu khác nhau, thì kết quả cuối cùng sẽ lấy theo kiểu dữ liệu có độ chính xác cao nhất (highest precision) 1. Nếu cả 2 toán hạng kiểu floating-point (số thực) mà khác nhau về precisions (e.g., float và double), thì toán hạng có lower- precision sẽ được chuyển thành precision của toán hạng kia, và kết quả là higher precision. Ví dụ, an operation between a float and a double will result in a double; a float and a long double will result in a long double; and a double and a long double will result in a long double. 2. Nếu 1 toán hạng có kiểu floating-point (e.g., float, double hay long double) và toán hạng kia có kiểu char hay int (kể cả short int hay long int), char hay int sẽ được chuyển thành floating- point và kết quả sẽ biểu diễn như vậy. Ví dụ, an operation between an int and a double will result in a double. 3. Nếu toán hạng không phải kiểu floating-point, nhưng có 1 là kiểu long int, thì toán hạng kia sẽ được chuyển thành long int và kết quả là long int. Ví dụ, an operation between a long int and an int will result in a long int. 4. Nếu toán hạng không phải kiểu floating-point hay kiểu long int, thì cả 2 toán hạng sẽ chuyển thành int (if necessary) và kết quả sẽ là int. Ví dụ, an operation between a short int and an int will result in an int. Giả sử i có kiểu integer và giá trị là 7, f có kiểu floating-point và giá trị 5.5, c có kiểu character-có giá trị ‘w’ Expression Value Type i+f 12.5 double-precision i + c 126 integer i + c - '0' 78 integer (i + c) - (2 * f / 5 ) 123.8 double-precision Notes: w có mã ASCII (decimal) là 119 and 0 có mã 48 32
- Bài tập 1. Viết chương trình nhập vào 3 giá trị nguyên dương a, b, c. Kiểm tra xem a, b, c có phải là 3 cạnh của tam giác không? Nếu là 3 cạnh của tam giác thì tính diện tích của tam giác theo công thức sau S p*(p a)*(p b)*(p c) Hướng dẫn: a, b, c là 3 cạnh của tam giác phải thỏa điều kiện sau: (a + b) > c và (a + c) > b và (b + c) > a Ngô Quốc Việt-Lập trình Cơ bản-2011 33
- Bài tập 2. Viết chương trình trò chơi One-Two-Three ra cái gì ra cái này theo điều kiện: Búa (B) thắng Kéo, thua Giấy. Kéo (K) thắng Giấy, thua Búa. Giấy (G) thắng Búa, thua Kéo. Hướng dẫn: Dùng lệnh switch lồng nhau 3. Viết chương trình nhập vào 2 số x, y và 1 trong 4 toán tử +, -, *, /. Nếu là + thì in ra kết quả x + y, nếu là – thì in ra x – y, nếu là * thì in ra x * y, nếu là / thì in ra x / y (nếu y = 0 thì thông báo không chia được) Ngô Quốc Việt-Lập trình Cơ bản-2011 34
- Bài tập 4. Viết chương trình tính tiền điện theo yêu cầu sau Tiền thuê bao điện kế 10000 đồng/tháng Định mức sử dụng điện cho mỗi hộ là: 50 KW với giá 300đ/KW . Nếu phần vượt định mức <= 50KW thì tính giá 480đ/KW Nếu 50KW < phần vượt định mức < 100KW thì tính giá 700đ/KW Nếu phần vượt định mức <= 200KW thì tính giá 900đ/KW Các phần vượt định mức quá 200KW thì tính 1200 đồng /KW. Cho nhập chỉ số cũ và chỉ số mới từ bàn phím In ra màn hình chỉ số cũ, chỉ số mới, tiền trả định mức, tiền trả vượt định mức, tổng tiền phải trả. Sừ dụng hai cách: lệnh if; và lệnh switch. Ngô Quốc Việt-Lập trình Cơ bản-2011 35
- Đọc và tự nghiên cứu 36
- CÁM ƠN ĐÃ THEO DÕI LÊ ĐỨC LONG-NGÔ QUỐC VIỆT 2011