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
37 trang |
Chia sẻ: nguyenlam99 | Lượt xem: 1042 | Lượt tải: 0
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:
- ltcb_baigiang03_4592.pdf