Lập trình cơ bản - Lập trình với cấu trúc điều kiện

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

pdf37 trang | Chia sẻ: nguyenlam99 | Lượt xem: 910 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Lập trình cơ bản - Lập trình với cấu trúc điều kiện, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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 2Ngô Quốc Việt-Lập trình Cơ bản-2011 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 3Ngô Quốc Việt-Lập trình Cơ bản-2011 Đị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”. 4Ngô Quốc Việt-Lập trình Cơ bản-2011 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 { } 5Ngô Quốc Việt-Lập trình Cơ bản-2011 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. 6Ngô Quốc Việt-Lập trình Cơ bản-2011 Lệnh if  Dạng tổng quát if() “lệnh hay khối lệnh”;  Nếu là true (khác zero) thì “lệnh hay khối lệnh” được thực 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” 7 Điều kiện Lệnh / Khối lệnh Đúng Sai Ngô Quốc Việt-Lập trình Cơ bản-2011 Các toán tử so sánh  Dùng trong của lệnh if. 8 Phép toán Trong Pascal Trong C Nhỏ hơn < < Lớn hơn > > So sánh bằng = == Khác nhau != Nhỏ hơn hoặc bằng <= <= Lớn hơn hoặc bằng >= >= 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 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.  Ví dụ: if(fDiemTrungBinh >=8 && sRenluyenDaoduc ==“kha”) printf(“Sinh vien dat loai gioi\n”); 9 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 ! Ngô Quốc Việt-Lập trình Cơ bản-2011 Kết hợp với logical operators (count <= 100) && (ch1 != ‘*’ ) (balance < 1000.0) || (status == 'R') (answer 5.0) && (answer <= 10.0)) !((pay >= 1000.0) && (status == ‘s')) count <= 100 && ch1 != ‘*’ balance < 1000.0 || status == 'R’ answer 5.0 && answer <= 10.0 !(pay >= 1000.0 && status == ‘s’) *, / , %, +, - , >= == , != && , ||trên 1 hàng thì thứ tự từ trái  phải 10 Conditional Operator ? : Ngô Quốc Việt-Lập trình Cơ bản-2011 11 expression 1 ? expression 2 : expression 3 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. (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. Lệnh esle  Dạng tổng quát if() “lệnh hay khối lệnh”; else “lệnh hay 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” 12 Điều kiện Lệnh / Khối lệnh Sai Lệnh / Khối lệnh Đúng Ngô Quốc Việt-Lập trình Cơ bản-2011 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(); } 13Ngô Quốc Việt-Lập trình Cơ bản-2011 Bài tập tại lớp Viết chương trình nhập vào 4 số nguyên va ̀ 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 Thành phần dữ liệu, thành phần xử lý 3. Thiết kế chương trình Đơn vị dữ liệu, đơn vị xử lý, lưu đồ 4. Cài đặt Chương trình chính 5. Thử nghiệm Bộ dữ liệu thử nghiệm Gia ̉ sử số đầu tiên là lớn nhất (max). Gán số đầu tiên là max. So sánh số lớn nhất lần lượt với 3 số còn lại. Với mỗi số nếu số đo ́ lớn hơn max thì gán max cho số đó. Ý tưởng chính: 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ạnmã trên. 15Ngô Quốc Việt-Lập trình Cơ bản-2011 Các lệnh “if” lồng nhau 16 Điều kiện 1 Sai Lệnh / Khối lệnh Đúng Điều kiện 2 Lệnh / Khối lệnhLệnh / Khối lệnh Đúng Sai Ngô Quốc Việt-Lập trình Cơ bản-2011 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; 17Ngô Quốc Việt-Lập trình Cơ bản-2011 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 18Ngô Quốc Việt-Lập trình Cơ bản-2011 Lệnh else if 19 #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 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. 20Ngô Quốc Việt-Lập trình Cơ bản-2011 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)" 21Ngô Quốc Việt-Lập trình Cơ bản-2011 Bài tập ngắn Ngô Quốc Việt-Lập trình Cơ bản-2011 22  Ý 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) yM = f(xM) = axM 2+bxM+c Nếu a > 0 thì M là cực tiểu Nếu a < 0 thì M là cực đại 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 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 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: Bài tập tại lớp 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. 24Ngô Quốc Việt-Lập trình Cơ bản-2011 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? 25Ngô Quốc Việt-Lập trình Cơ bản-2011 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(); } 26Ngô Quốc Việt-Lập trình Cơ bản-2011 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. 29Ngô Quốc Việt-Lập trình Cơ bản-2011 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 < b) int iSo1, iSo2; cin >> 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) 30Ngô Quốc Việt-Lập trình Cơ bản-2011 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. 31Ngô Quốc Việt-Lập trình Cơ bản-2011 Một sốluật chuyển đổi kiểu 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. 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) 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 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 )(*)(*)(* cpbpappS  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

Các file đính kèm theo tài liệu này:

  • pdfltcb_baigiang03_4592.pdf
Tài liệu liên quan