Tải bản đầy đủ (.pdf) (30 trang)

Các cấu trúc điều khiển (phần 2) pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (700.58 KB, 30 trang )

Lê Viết Mẫn -
Các cấu trúc điều khiển 2
v 1.0 - 10/2012
Các cấu trúc điều khiển
(phần 2)
1
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
chúng ta đã học
2
Tuần tự
Rẽ nhánh
Câu lệnh if, switch
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
chúng ta sẽ học
3
Lặp
Câu lệnh for, while, do
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
Enum

Khai báo enum là thành phần của lớp

Nhập liệu kiểu Enum

Nhập vào số tương ứng giá trị của một thành phần trong kiểu enum



Nhập vào chuỗi ký tự của một thành phần trong kiểu enum
4
Weekday day;
Console.Write("Nhap vao thu dang so :"); // Nhập vào số 1
day = (Weekday)Convert.ToInt32(Console.ReadLine()); // kết quả là Monday
Console.Write("Nhap vao thu dang chuoi :"); // Nhập vào chuỗi “Sunday”
day = (Weekday)Enum.Parse(typeof(Weekday), Console.ReadLine());
class Program {
enum Weekday {Sunday, Monday, Tuesday, Wednesday, Thursday,
Friday, Saturday};
static void Main(string[] args)
{
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
Iteration structures
Lệnh lặp : for, while, do
5
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
6
for
for (statement_1; condition; statement_2)
! statement_3
statement_1
condition
true
false

statement_2
statement_3

Có thể bỏ qua các thành phần trong vòng
lặp for

statement_1 được dùng để khởi tạo và chỉ
được thực hiện 1 lần

condition là biểu thức kiểm tra điều kiện
lặp lại

statement_3 là một lệnh đơn hoặc lệnh
kép mà ta muốn được thực hiện nhiều lần

statement_2 được dùng để cập nhật /
thay đổi giá trị của condition
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
7
for
for (statement_1; condition; statement_2)
! statement_3
statement_1
condition
true
false
statement_2
statement_3

for (int i = 0; i < 10; i++)
Console.WriteLine(i);
In ra các số từ 0 đến 9, mỗi số trên một dòng
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
8
Ví dụ
int i, j;
for (i = 0; i < 10; i++)
" Console.WriteLine(i);" " " " " " // in ra tu 0 - 9
for (i = 0; i < 10; i += 2)
" Console.WriteLine(i);" " " " " " // in cac so 0, 2, 4, 6, 8
for (i = 0, j = 0; i < 10 && j < 5; i += 2, j++) // toán tử dấu phẩy
" Console.WriteLine(“{0}\t{1}”, i, j);
for (int i = 0; i < 100; i++) // phạm vi của biến i là trong vòng lặp
" Console.WriteLine(i);
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
9
Chú ý

Lỗi. Biến i vượt quá phạm vi

Không có lỗi vì biến i được khai báo bên ngoài

Biến i thứ hai là một biến mới
for (int i = 0; i < 10; i++)
" Console.WriteLine(i);

if (i >= 0)
" Console.Write("i is big\n");
int i;
for (i = 0; i < 10; i++)
" Console.WriteLine(i);
if (i >= 0)
" Console.Write("i is big\n");
for (int i = 0; i < 10; i++)
" Console.WriteLine(i);
for (int i = 0; i < 20; i++)
" Console.WriteLine(i);
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
10
Ví dụ - tính giai thừa
Viết chương trình tính n! (n giai thừa)
n! =
1 n = 0
1* 2 * * n n ≥ 1
"
#
$
Sunday, October 28, 12
Lê Viết Mẫn -
For lồng nhau
Các cấu trúc điều khiển 2
float windChillIndex;
Console.WriteLine("TABLE OF WIND-CHILL INDICES");
Console.Write("degrees F:");

for (int j = 5; j >= -6; j )
Console.Write("{0,5}",10*j); // tieu de cot
Console.Write("\n\n");
for (int i = 0; i <= 10; i++)
{
Console.Write("{0} mph:", 5 * i);
for (int j = 5; j >= -6; j )
{
if (i <= 4)
windChillIndex = j;
else if (i <= 45)
windChillIndex = (float)(91.4f - (10.45f + 6.69
* Math.Sqrt(i) - 0.447 * i) * (91.4f - j) / 22);
else
windChillIndex = 1.6f * j - 55;
Console.Write("{0,5}", Math.Floor(windChillIndex + 0.5));
}
Console.WriteLine();
}
Console.ReadKey();
11
Sunday, October 28, 12
Lê Viết Mẫn -
Kết quả
Các cấu trúc điều khiển 2
TABLE OF WIND-CHILL INDICES
degrees F: 50 40 30 20 10 0 -10 -20 -30 -40 -50 -60
0 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6
5 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6
10 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6

15 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6
20 mph: 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6
25 mph: 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11
30 mph: -3 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -16
35 mph: -7 -8 -9 -10 -11 -13 -14 -15 -16 -17 -18 -19
40 mph: -10 -11 -12 -13 -15 -16 -17 -18 -19 -20 -22 -23
45 mph: -13 -14 -15 -16 -17 -19 -20 -21 -22 -24 -25 -26
50 mph: -15 -16 -18 -19 -20 -21 -23 -24 -25 -26 -28 -29
12
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
Ví dụ
13

Viết chương trình in ra bảng tính nhân dạng sau :
MULTIPLICATION TABLE
1 2 3 4 12
2 4 6 8 24
3 6 9 12 36
. . . . .
. . . . .
. . . . .
12 24 36 48 144
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
14
while
while (condition)

! statement;
condition
true
false
statement

Điều kiện được đặt ở đầu vòng lặp

statement có thể không được thực hiện lần nào

statement phải chứa câu lệnh làm thay đổi
condition
Trong khi điều kiện còn hiệu lực (true) thì tiếp tục làm việc này
int n = 0;
while (n < 10)
" Console.WriteLine(n++);
In ra các số từ 0 đến 9, mỗi số trên một dòng
int n = 0;
while (n < 10)
{
" Console.WriteLine(n);
n = n + 1;
}
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
15
Ví dụ
int n = 100;
while (n > 0)

" Console.WriteLine(n );
getDate(m, d, y);
while (!isLegalDate(m, d, y))
{
" Console.Write("Not a valid date, try again.\n\n");
" getDate(m, d, y);
}
In ngược các số từ 100 đến 1, mỗi số trên một dòng
Nhận vào ngày tháng năm, nếu ngày tháng nhập vào không hợp lệ thì yêu cầu nhập lại
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
16
do
do
{
!statement;
} while (condition);

Điều kiện được đặt ở cuối vòng lặp

statement được thực hiện ít nhất một lần

statement phải chứa câu lệnh làm thay đổi
condition
condition
true
false
statement
Chạy cái gì đó trong khi điều kiện đang còn hiệu lực (true)

int n = 0;
do
{
Console.WriteLine(n++);
}while (n < 10);
In ra các số từ 0 đến 9, mỗi số trên một dòng
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
17
Ví dụ
int numberOfDigits = 0;
int rest = number;
do
{
"rest = rest / 10;
"numberOfDigits++;
} while (rest != 0);
Đếm số chữ số của một số
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
So sánh
18
Câu lệnh
for
while
do
Lưu đồ
Số lần lặp

Xác định
Không xác định
Không xác định
Số lần lặp
tối thiểu
0
0
1
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2

Lệnh break;

kết thúc vòng lặp chứa lệnh này (chương trình tiếp tục với các câu lệnh sau
vòng lặp này)

Lệnh continue;

bỏ qua các lệnh còn lại trong vòng lặp

tiếp tục với bước lặp tiếp theo

Lệnh for : thực hiện bước cập nhật rồi kiểm tra

Lệnh while và do : thực hiện bước kiểm tra

Lệnh Environment.Exit(int);

Thoát khỏi chương trình

19
Ngắt vòng lặp
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
for (;;)
{
" while (a[++i] < v);
" while (a[ j] > v);
"
" if (j <= i)
"" break;
"
" swap(i, j); //đổi chỗ hai giá trị trong mảng tại i, j
}
for (int n=10; n>0; n ) {
" if (n==5) continue;
" Console.Write("{0}, ", n);
}
20
Ví dụ - ngắt vòng lặp
Sắp xếp lại mảng sao cho, giá trị ở phần đầu lớn hơn v, phần sau nhỏ hơn v
In các con số từ 10 đến 1, ngoại trừ số 5
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
21
Ví dụ 1 - máy tính
Viết chương trình cho phép thực hiện các phép tính cộng, trừ,
nhân, chia cho hai số được nhập vào từ bàn phím. Chương

trình sẽ lặp lại việc tính toán này cho đến khi người sử dụng
bấm ký tự E hoặc e (Exit).
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
22
Ví dụ 2 - in lịch
Viết chương trình in lịch theo tháng, năm và kiểu lịch in theo
dạng sau :
October, 1948
Sun Mon Tue Wed Thu Fri Sat
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
Hướng dẫn

In tên tháng, năm

In các thứ theo các cột

In các ngày ứng với các cột thứ

Phải in ngày mồng 1 vào đúng cột của thứ tương ứng. Các ngày tiếp theo
được in liên tiếp, khi gặp ngày thứ 7 thì phải in xuống dòng mới


Tính ngày cuối cùng của tháng lastDayOfMonth

Tính ngày tuyệt đối (absoluteDays) cho ngày 1 tháng cần in lịch

firstWeekdayOfMonth = absoluteDays % 7;

firstSaturday = 7 - firstWeekdayOfMonth;
23
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
Debugging
Gỡ lỗi
24
Xem thêm tại Chương 3, sách Lập trình Visual C# thế nào ? Tập 1 (Dương Quang Thiện)
Sunday, October 28, 12
Lê Viết Mẫn -
Các cấu trúc điều khiển 2
Các loại lỗi (bug)
25

Lỗi cú pháp - syntax error

Lỗi lúc biên dịch - Compile-time error

Lỗi dễ thấy nhất, xảy ra khi viết câu lệnh không đúng qui tắc của ngôn ngữ

Trình biên dịch sẽ thông báo cho chúng ta thông qua những thông điệp sai
lầm / các cảnh báo (Error List)


Lỗi ngữ nghĩa - semantic error

Lỗi lúc chạy chương trình - runtime error

Ý nghĩa câu lệnh không đúng như mong muốn

Chương trình bị gãy đổ (crash) cùng với thông báo lỗi hoặc không

Lỗi logic - logic error

Các lỗi ngữ nghĩa mà không làm crash chương trình

Kết quả chương trình không đúng
Sunday, October 28, 12

×