.NET Base Class Library• Để nghiên cứu về các lớp trong Base Class Library cung cấp cái gì, lớp nó nằm ở assembly tập tin .dll nào nào, cách sử dụng..... Các thành phần của c.t... Các t
Trang 1v 1.0 - 10/2012
Các cấu trúc điều khiển
(phần 1)
Trang 3Giải bài toán trên máy tính
1 Xác định bài toán
2 Thiết kế thuật toán
3 Phân tích thuật toán
4 Cài đặt thuật toán (Lập trình)
5 Kiểm tra / Bắt lỗi
6 [ Sửa lỗi ]
Trang 4Nội dung
1 Ôn tập Chủ đề Cơ bản Ngôn ngữ lập trình C#
2 Biểu thức
3 Câu lệnh điều kiện if
4 Câu lệnh lựa chọn switch
5 Kiểu dữ liệu Enum
Trang 5Cơ bản ngôn ngữ lập trình C#
Trang 6Lớp & đối tượng trong C#
Định nghĩa lớp Sử dụng từ khoá class
Định nghĩa một kiểu dữ liệu mới Tạo một đối tượng
Có hai loại hàm với hai cách triệu gọi khác nhau :
• Hàm không tĩnh - Gọi từ đối tượng
• Hàm tĩnh (từ khoá static ) - Gọi từ lớp
Bitmap bm = new Bitmap (20, 20);
Bitmap bm = new Bitmap (20, 20);
bm.Save( "bitmap.png" );
Console Write( "Please enter a number :" );
Trang 7.NET Base Class Library
• Để nghiên cứu về các lớp trong Base Class Library cung cấp
cái gì, lớp nó nằm ở assembly (tập tin dll nào) nào, cách sử dụng
• Sử dụng Object Browser
• MSDN - http://msdn.microsoft.com/en-us/library/gg145045%28v=vs.100%29.aspx
Trang 8Các thành phần của c.t C#
• Các khai báo using
• Các khai báo namespace
• Các khai báo class
class Program {
static void Main( string [] args) {
double n;
// nhap mot so vao tu ban phim
Console Write( "Please enter a number:" );
n = double Parse( Console ReadLine());
// in ra binh phuong cua so do
Console WriteLine( "The square of {0} is {1}" , n, Square square(n)); Console ReadKey();
} } }
Program.cs
Trang 9Các thành phần của c.t C#
• Các khai báo namespace
• Các khai báo class
class Program {
static void Main(string[] args) {
double n;
// nhap mot so vao tu ban phim
Console Write( "Please enter a number:" );
n = double.Parse( Console ReadLine() );
// in ra binh phuong cua so do
Console WriteLine( "The square of {0} is {1}" , n, Square square(n)); Console ReadKey();
} } }
Program.cs
Trang 10Các thành phần của c.t C#
• Các khai báo namespace
• Các khai báo class
class Program {
static void Main(string[] args) {
double n;
// nhap mot so vao tu ban phim
Console Write( "Please enter a number:" );
n = double.Parse( Console ReadLine() );
// in ra binh phuong cua so do
Console WriteLine( "The square of {0} is {1}" , n, Square square(n)); Console ReadKey();
} } }
Program.cs
• Cần báo cho chương trình
Visual C# Express (hoặc trình biên dịch) biết mình cần dùng assembly nào
• Trong Visual Studio , trên ngăn
Solution Explorer , nháy phải chuột lên thư mục References , nháy mục Add References
Trang 11Các thành phần của c.t C#
• Các khai báo using
• Các khai báo class
class Program {
static void Main(string[] args) {
}
} }
Program.cs
Trong môn CSLT, toàn bộ những
gì chúng ta code đều nằm trong
phần thân của lớp Program
Không cần quan tâm đến việc tạo
lớp mới
Trang 12Các thành phần của c.t C#
• Các khai báo using
• Các khai báo namespace
• Các khai báo class
class Program {
static void Main( string [] args) {
} } }
Program.cs
Trang 13Các thành phần của c.t C#
• Các khai báo using
• Các khai báo namespace
• Các khai báo class
class Program {
static void Main(string[] args) {
double n;
// nhap mot so vao tu ban phim Console.Write("Please enter a number:");
n = double Parse( Console ReadLine());
// in ra binh phuong cua so do
Console WriteLine( "The square of {0} is {1}" , n, Square square(n)); Console.ReadKey();
} } }
Program.cs
Trang 14Biến và kiểu dữ liệu
• Phải được khai báo trước khi sử dụng
• Tên của biến phải tuân theo quy tắc đặt tên
• Khi khai báo mà không gán dữ liệu thì biến sẽ nhận giá trị mặc
định của kiểu dữ liệu đó
• Kiểu dữ liệu được phân ra
Trang 15Biến và kiểu dữ liệu
• Kiểu dữ liệu cơ bản và kiểu dữ liệu người dùng định nghĩa
• Lựa chọn kiểu dữ liệu cho biến phụ thuộc vào phạm vi dữ liệu
mà biến đó sẽ nhận
• một biến dùng để lưu điểm thi thì cần dùng kiểu float
• một biến dùng để lưu tuổi của một người thì chỉ cần dùng kiểu byte
Trang 16Biến và kiểu dữ liệu
• Tính tương thích giữa các kiểu dữ liệu
• dùng khi gán dữ liệu kiểu này cho một biến có kiểu dữ liệu khác
• (Chuyển đổi ngầm định - implicitly) theo chiều mũi tên thì gán được
• (Chuyển đổi tường minh) ngược chiều thì phải thực hiện ép kiểu và có thể
xảy ra mất dữ liệu hoặc giá trị không mong muốn
• Chú ý
• Không thể khai báo nhiều biến cùng tên trong cùng một phạm vi
• Có thể khai báo nhiều biến cùng tên trong các phạm vi khác nhau
Trang 17Phạm vi của biến
• Phạm vi mà biến vẫn còn có thể được sử dụng
• Thông thường, sẽ nằm trong một cặp dấu ngoặc nhọn
• Hết phạm vi này, biến và vùng dữ liệu của biến đó sẽ bị huỷ
• Đối với biến có kiểu dữ liệu tham chiếu, vùng dữ liệu trong heap sẽ bị huỷ sau một khoảng thời
gian không được sử dụng bởi Garbage Collector
Trang 18• Khai báo hằng trong phạm vi một lớp và bên ngoài các hàm
• Hằng phải được gán giá trị khi khởi tạo
• Chú ý
• Không thể khởi gán hằng từ giá trị của một biến
• Trong khai báo hằng không thể dùng từ khoá static
const float PI = 3.14159;
const char NewLine = '\n';
const int PathWidth = 100;
const int SquarePi = Pi * Pi;
Trang 19Các thành phần của c.t C#
• Các khai báo using
• Các khai báo namespace
• Các khai báo class
class Program {
static void Main(string[] args) {
double n;
// nhap mot so vao tu ban phim
Console Write( "Please enter a number:" );
n = double Parse( Console ReadLine());
// in ra binh phuong cua so do
Console WriteLine( "The square of {0} is {1}" , n, Square square(n)); Console ReadKey();
} } }
Program.cs
Trang 20• Cho đến hiện tại, chúng ta dùng các chuỗi ký tự với hai hàm :
• Console.Write()
• Console.WriteLine()
Console.Write(“Nhiet do C la ” + c);
Console.Write(“Nhiet do C la ” + c.ToString());
Console.Write(“Nhiet do C cua do {1} do F la {0}”, c, f);
Trang 21Xuất dữ liệu ra màn hình
• Có thể xuất dữ liệu cho mọi kiểu dữ liệu sử dụng hàm Write
hoặc WriteLine của lớp Console
• Cú pháp của token giữ chỗ
• n - số thứ tự của token giữ chỗ, bắt đầu từ 0
• width - độ rộng của vùng được dùng để in giá trị
• Giá trị này là dương - canh lề bên phải, là âm - canh lề bên trái
• format - ký tự định dạng cho kiểu số
Console.Write(intVal);
Console.Write(intVal.ToString());
Console.Write(“Nhiet do C la ” + c);
Console.Write(“Nhiet do C la {0}”, c);
Trang 23Biểu thức
Trang 24Biểu thức
• Các câu lệnh trả ra một giá trị
• Biểu thức số
• Các toán hạng là có kiểu số hoặc ký tự
• Riêng với toán tử ++ và thì toán hạng phải là kiểu số hoặc kiểu liệt kê
• Kiểu của giá trị trả về là kiểu số lớn nhất trong các kiểu của các toán hạng,
nhưng ít nhất phải là int
myVariable = 57; // trả ra giá trị là 57
a = b = c = d = e = 20;
int + long => longshort + int => intshort + short => int
Trang 25Biểu thức điều kiện (1/2)
>= lớn hơn hoặc bằng counter >= 0
<= nhỏ hơn hoặc bằng counter <= 0
&& phép AND (0 < i) && (i < 10)
|| phép OR (i <= 0) || (i >= 10)
Các toán tử quan hệ và logic
E 1 E 2 E 1 && E 2
FALSE FALSE FALSE
TRUE FALSE FALSE
E 1 E 2 E 1 || E 2
FALSE FALSE FALSE
Trang 26• Sự kết hợp của toán tử quan hệ và toán tử logic
• Các toán tử quan hệ == và != không làm việc tốt với kiểu số
thực
• Dấu = là phép gán, dấu == là toán tử quan hệ
• Dấu && là phép AND logic, dấu & là toán tử AND trên bit
• Dấu || là phép OR logic, dấu | là toán tử OR trên bit
• Với các biểu thức phức tạp, nên sử dụng các phép kết hợp, giao
hoán, phân phối, De Morgan để biến đổi thành đơn giản hơn
Biểu thức điều kiện (2/2)
(minimumWage <= wages <= maximumWage)
(minimumWage <= wages) && (wages <= maximumWage)
Trang 27Conditional structure
Lệnh điều kiện : if và ?
Trang 29exit
Trang 30stat_2 stat_3
exp_3true false
stat_4exp_1
Trang 33• E1 và E2 là các biểu thức logic
• if (E1 && E2)
• nếu E1 là false thì cả biểu thức là false và E2 sẽ không được tính
• nếu E1 là true thì cả biểu thức là true và E2 sẽ không được tính
Lượng giá toán tử logic
if (n != 0 && 100 / n > min) if (n != 0 )
if ( 100 / n > min)
Trang 34(exp_1) ? (exp_2) : (exp_3)
• Nếu exp_1 là true , giá trị trả về sẽ là kết
quả của exp_2
• Nếu exp_1 là false , giá trị trả về sẽ là kết
quả của exp_3
• Dấu mở / đóng ngoặc là không cần thiết về
Trang 36Ví dụ 2 - tính số ngày
Tính số ngày từ đầu năm ( dayNumber ) theo giá trị đưa
vào của month (1 12), ngày trong tháng day và năm
year
Trang 37Selective structure
Lệnh lựa chọn : switch
Trang 38lựa chọn dựa trên giá trị nguyên,
chuỗi, ký tự hoặc bool của một biến
hay một biểu thức
Trang 40• Kiểu liệt kê là một tập những hằng số nguyên được đặt tên
• Một biến được khai báo kiểu liệt kê có thể nhận một giá trị bất kỳ trong tập
các giá trị của kiểu đó
• enum identifier[:base-type] {enumeration_list};
• base-type là kiểu dữ liệu của mỗi thành phần (mặc định int )
• enumeration_list sử dụng dấu phẩy để phân cách các định danh
• định danh đầu tiên được gán giá trị 0 , sau đó tăng lên một cho những định danh sau
• có thể xác định giá trị cho các định danh này
Kiểu liệt kê
enum Weekday {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}
enum Month {January = 1, February = 2, March = 3, April = 4, May = 5, June = 6,
July = 7, August = 8, September = 9, October = 10, November = 11,
December = 12}
Weekday d;
Month m; d = Month.Tuesday;if (Weekday.February < m)
enum Temperatures: byte {WickedCold = 0, FreezingPoint = 32, LightJacketWeather = 60, SwimmingWeather = 72, BoilingPoint = 100}
Trang 41Ví dụ
enum Month {January, February, March, April, May, June, July,
August, September, October, November, December};
Month m = Month February;
" case November: numberOfDays = 30; break ;
" default : numberOfDays = 31; break ;
}
Trang 42Ví dụ - kích cỡ áo tắm
Viết chương trình tính kích cỡ áo tắm phụ nữ dựa trên
chiều cao (hieght) và cân nặng (weight) sử dụng công
Trang 43Cảm ơn sự chú ý
Câu hỏi ?