Bài giảng Lập trình trên môi trường Windows - Chương 2: Ngôn ngữ lập trình C# - Dương Thành Phết

1.3. Lệnh, Khối lệnh & Chú thích  Câu lệnh thực hiện một chức năng nào đó (gán, xuất, nhập, ) và kết thúc bằng dấu chấm phẩy (;)  Khối lệnh gồm nhiều lệnh và được đặt trong cặp dấu ngoặc nhọn { }  Chú thích: // Chú thích một dòng /* Chú thích nhiều dòng */ 1. TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C#6 1.4. Định danh (Identifier)  Định danh là việc xác định tên cho các thành phần trong mã nguồn như : tên biến, hàm, hằng, function  Quy ước định danh trong C# :  Phân biệt chữ hoa thường  Quy ước đặt tên : • Sử dụng 26 chữ cái (thường & hoa), 10 chữ số • Dấu nối ( _ ) • Không dùng chữ số ở đầu • Không trùng với từ khoá

pdf45 trang | Chia sẻ: thanhle95 | Lượt xem: 539 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình trên môi trường Windows - Chương 2: Ngôn ngữ lập trình C# - Dương Thành Phết, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1 Chƣơng 2 NGÔN NGỮ LẬP TRÌNH C#  Giảng Viên: ThS. Dƣơng Thành Phết  Email: phetcm@gmail.com – YahooID: phetcm  Website:  Tel: 0918158670 LẬP TRÌNH TRÊN MÔI TRƢỜNG WINDOWS KHOA CÔNG NGHỆ THÔNG TIN 2 NỘI DUNG 2 1. Tổng quan về ngôn ngữ lập trình C# 2. Các cấu trúc điều khiển 3. Phƣơng thức 4. Mảng 5. Chuỗi 3 1. TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C#  Là ngôn ngữ lập trình được xây dựng trên nền tảng ngôn ngữ C/C++/Java nhưng hoạt động trên .Net Framework.  Đặc điểm :  Hoạt động trên .NET Framework.  Dựa trên phương pháp thiết kế hướng đối tượng.  Dùng cho cả 3 loại ứng dụng: Console, Winform, Webform.  Có tính diễn đạt ngữ nghĩa cao.  Phân biệt chữ hoa thường. 1.1. Giới thiệu ngôn ngữ lập trình C# 4 1.2. Từ khoá – Keywords 4 abstract add* as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach get* goto if implicit in int interface internal is lock long namespace new null object operator out override params partial* private protected public readonly ref remove return sbyte sealed set* short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using value* virtual void volatile where* while Là từ dành riêng sử dụng để giúp trình biên dịch xác định cấu trúc và tổ chức của mã nguồn. 1. TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C# 5 1.3. Lệnh, Khối lệnh & Chú thích 5  Câu lệnh thực hiện một chức năng nào đó (gán, xuất, nhập, ) và kết thúc bằng dấu chấm phẩy (;)  Khối lệnh gồm nhiều lệnh và được đặt trong cặp dấu ngoặc nhọn { }  Chú thích: // Chú thích một dòng /* Chú thích nhiều dòng */ 1. TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C# 6 1.4. Định danh (Identifier) 6  Định danh là việc xác định tên cho các thành phần trong mã nguồn như : tên biến, hàm, hằng, function  Quy ước định danh trong C# :  Phân biệt chữ hoa thường  Quy ước đặt tên : • Sử dụng 26 chữ cái (thường & hoa), 10 chữ số • Dấu nối ( _ ) • Không dùng chữ số ở đầu • Không trùng với từ khoá 1. TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C# 7 1.5. Biến & khai báo biến 7  Biến là đối tượng lưu trữ các giá trị, dữ liệu trong một chương trình.  Khai báo : ; Ví dụ : int x; float a,b; char c = „A‟; 1. TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C# 8 1.6. Kiểu dữ liệu (Data Types) 8  Kiểu dữ liệu là các loại dữ liệu và phạm vi giá trị của chúng trong bộ nhớ sử dụng để lưu trữ.  Có 2 loại : kiểu dữ liệu dựng sẵn & kiểu dữ liệu tự định nghĩa. Một số kiểu dựng sẵn : int (int16, int32, int64), float, bool, string, char, double, long, decimal, short. 1. TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C# 9  Kiểu số nguyên(Integer) Kiểu C# Kích thƣớc (byte) Kiểu .NET Miền giá trị Mô tả byte 1 Byte [0..255] Nguyên dƣơng sbyte 1 Sbyte [-128..127] Nguyên có dấu bool 1 Boolean true hoặc false Giá trị logic char 2 Char Ký tự Unicode short 2 Int16 [0..65.535] Nguyên không dấu int 4 Int32 Từ -2.147.483.647 đến 2.147.483.646 Nguyên có dấu uint 4 Uint32 Từ 0 đến 4.294.967.295 Nguyên không dấu long 8 Int64 Từ -9.223.370.036.854.775.808 đến 9.223.370.036.854.775.807 Nguyên có dấu ulong 8 Uint64 Từ 0 đến 0xffff ffff ffff ffff Nguyên không dấu 1. TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C# 10  Kiểu dấu chấm động 10 Kiểu C# Kích thước (byte) Kiểu .NET Miền giá trị Mô tả float 4 Singgle Từ 3,4E-38 đến 3,4E+38 Kiểu dấu chấm động, với 7 chữ số có nghĩa double 8 Double Từ 1,7E308 đến 1,7E+308 Kiểu dấu chấm động có độ chính xác gấp đôi, với 15 chữ số có nghĩa decimal 8 Decimal Có độ chính xác đến 28 con số, phải có hậu tố “m” hoặc “M” theo sau gi Ví dụ 1: int x; float y = 1.5; x = (int)y; Ví dụ 2: int x = 6; float y; y = (float)x; 1. TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C# 11  Kiểu chuỗi (String) 11  C# định nghĩa kiểu string như một kiểu dữ liệu cơ bản (khác với C, C++)  Kiểu string có thể chứa nội dung không giới hạn, vì đây là kiểu dữ liệu đối tượng được chứa ở bộ nhớ heap.  Khai báo : string s = “Nguyen van a”; 1. TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C# 12  Kiểu mảng (Array) 12  Mảng là một tập hợp các phần tử cùng một kiểu dữ liệu và được truy xuất thông qua chỉ số.  Chỉ số bắt đầu từ 0.  Khai báo : Mảng một chiều [ ] = new [Số phần tử]; Mảng hai chiều [ , ] = new [Số dòng, số cột]; 1. TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C# 13 1.7. Các phép toán 13 Ký hiệu Ý nghĩa + Cộng - Trừ * Nhân / Chia lấy nguyên % Chia lấy phần dƣ ++x; x++ Tăng x lên 1 đơn vị --x; x-- Giảm x xuống 1 đơn vị 1. TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C# Toán tử số học 14 Toán tử quan hệ 14 Ký hiệu Ý nghĩa > Lớn hơn >= Lớn hơn hoặc bằng < Nhỏ hơn <= Nhỏ hơn hoặc bằng == Bằng != Khác && Và || Hoặc ! Phủ định 1. TỔNG QUAN NGÔN NGỮ LẬP TRÌNH C# 15 15 2. CẤU TRÚC ĐIỀU KHIỂN Gồm các cấu trúc : 1. Rẽ nhánh: ifelse 2. Lựa chọn: switchcase 3. Lặp: for, while, dowhile, foreach 4. Các cấu trúc khác: break, continue 16 16 2.1. Cấu trúc rẽ nhánh 2 CẤU TRÚC ĐIỀU KHIỂN Cấu trúc rẽ nhánh cho phép thực hiện một khối lệnh dựa vào kết quả của biểu thức điều kiện có 2 dạng: if (biểu thức điều kiện) { ; } if (biểu thức điều kiện) { ; } else { ; }  Nếu điều kiện đúng thì sẽ thực hiện khối lệnh  Nếu điều kiện đúng thì sẽ thực hiện khối lệnh 1  Ngược lại thì thực hiện khối lệnh 2 17 17 Ví dụ: Giải và biện luận phƣơng trình: ax+b=0 2. CẤU TRÚC ĐIỀU KHIỂN Yêu cầu:  Nút Giải: Giải và biện luận phương trình bậc 1, ô kết quả (txtketqua) cho biết phương trình có nghiệm, vô nghiệm hay vô số nghiệm. Trong trường hợp có nghiệm thì ô txtnghiem sẽ hiện kết quả nghiệm.  Nút Tiếp: Xoá dữ liệu có trong các ô TextBox. Đặt con trỏ về ô txtHesoA  Nút thoát: Thoát ứng dụng 18 18 switch (biểu thức)  case n1: các câu lệnh ; break ; case n2: các câu lệnh ; break ; case nk: ; break ; [default: các câu lệnh] break;  Phải là kiểu nguyên 2. CẤU TRÚC ĐIỀU KHIỂN 2.2. Cấu trúc lựa chọn 19 19 Ví dụ: 2. CẤU TRÚC ĐIỀU KHIỂN String thu="" ; switch (DataTime.Today.Day()) { Case 1: thu = "Chủ nhật "; break; Case 2: thu = "Thứ hai"; break; Case 3: thu = "Thứ ba"; break; Case 4: thu = "Thứ tư"; break; Case 5: thu = "Thứ năm"; break; Case 6: thu = "Thứ sáu"; break; Case 7: thu = "Thứ bảy"; break; } 20 20 for (; ; ) { ; } 2. CẤU TRÚC ĐIỀU KHIỂN 2.3. Cấu trúc lặp For  Bước 1: Khởi gán cho biểu thức 1  Bước 2: Kiểm tra điều kiện của biểu thức 2. - Nếu biểu thức 2 đúng thì thực hiện các lệnh của vòng lặp, thực hiện biểu thức 3. Quay trở lại bước 2. - Ngược lại thoát khỏi lặp. Ví dụ: Tạo Project tính tổng giá trị dãy số từ n đến m (n<m) 21 21 while ()  lệnh/ khối lệnh;  2. CẤU TRÚC ĐIỀU KHIỂN 2.4. Cấu trúc lặp While VD: Tạo Project tính tìm số đảo của 1 số nguyên n Trong khi điều kiện lặp còn đúng, các câu lệnh trong thân vòng lặp còn được thực hiện tiếp 22 22 do { ; } while (biểu thức điều kiện); 2. CẤU TRÚC ĐIỀU KHIỂN 2.4. Cấu trúc lặp Do . . . While Thực hiện khối lệnh cho đến khi biểu thức điều kiện SAI 23 23 2.5. Cấu trúc lặp Foreach foreach ( in ) { Khối lệnh; } 2. CẤU TRÚC ĐIỀU KHIỂN Xét từng phần tử trong mảng Ví dụ: Tính tổng các phần tử chẵn trong mảng int s=0; int [ ] intArr = new int [5] {3, 8, 7, 1, 6}; foreach(int m in intArr) if(m%2==0) s+=m; 24 2. CẤU TRÚC ĐIỀU KHIỂN 2.6. Lệnh break:  Thoát khỏi các cấu trúc switch, while, for, dowhile chứa nó gần nhất.  Tại thời điểm break không cần kiểm tra kết quả của biểu thức điều kiện.  Tuy nhiên, cần phân biệt với lệnh return là lệnh trả về từ hàm, nghĩa là thoát khỏi hàm đang thi hành, nên cũng giúp thoát luôn khỏi tất cả các vòng lặp. 25 2. CẤU TRÚC ĐIỀU KHIỂN 2.7. Lệnh continue:  Được sử dụng trong các vòng lặp while, for, dowhile.  Khi lệnh continue được gọi thì chương trình sẽ quay trở về đầu vòng lặp để bắt đầu lần lặp mới (có kiểm tra điều kiện lặp để xác định có lặp tiếp hay không).  Nếu có các lệnh còn lại (cùng trong vòng lặp) đặt sau continue sẽ không được thực hiện.  Lệnh continue thường dùng để bỏ qua một lần lặp nào đó nếu thỏa điều kiện. 26 3. PHƢƠNG THỨC Phương thức/Hàm con là một đoạn chương trình độc lập thực hiện trọn vẹn một công việc nhất định và trả về giá trị cho chương trình gọi nó. Mục đích sử dụng phương thức:  Khi có một công việc giống nhau cần thực hiện ở nhiều vị trí.  Khi cần chia một chương trình lớn phức tạp thành các đơn thể nhỏ (hàm con) để chương trình được trong sáng, dễ hiểu trong việc xử lý/quản lý. 3.1. Khái niệm về phƣơng thức. 27 3.2. Cú pháp khai báo TênPhươngThức([ds các tham số]); Trong đó:  Kiểu dữ liệu của phương thức (đầu ra), gồm 2 loại  void: Không trả về giá trị (các phương thức Nhập/Xuất)  float / int / long / string / kiểu cấu trúc / : Trả về 1 giá trị kết quả có kiểu dữ liệu tương ứng.  Phạm vi  Xác định phạm vi hay cách phương thức được gọi  Các từ khoá phạm vi: private, public, static.  Tên phương thức : Đặt tên phản ánh đúng chức năng  DS các tham số (nếu có): đầu vào của phương thức 3. PHƢƠNG THỨC 28 28 3. PHƢƠNG THỨC 3.3 Phƣơng thức không có giá trị trả về Void Cài đặt phƣơng thức static void TênPhươngThức([danh sách các tham số]) { Khai báo các biến cục bộ; Khối lệnh; } Gọi phƣơng thức TênPhươngThức(danh sách tên các đối số); Những phương thức loại này thường rơi vào những nhóm chức năng: Nhập/xuất dữ liệu , thống kê, sắp xếp, liệt kê. 29 29 3. PHƢƠNG THỨC VD: Viết chương trình liệt kê các số nguyên tố nhỏ hơn n 30 30 Cài đặt phƣơng thức: static TênPhươngThức([ds các tham số]) { kq; Khai báo các biến cục bộ Các câu lệnh / khối lệnh hay lời gọi đến phương thức khác. return kq; } Gọi phƣơng thức: Tên biến = TênPhươngThức (DS các đối số); 3. PHƢƠNG THỨC 3.4 Phƣơng thức có giá trị trả về Những phương thức này thường rơi vào các nhóm: Tính tổng, tích, trung bình, đếm, kiểm tra, tìm kiếm 31 31 VD: Viết chương trình nhập số nguyên dương n và tính tổng Phân tích bài toán: Input: n  Kiểu dữ liệu: số nguyên dương (uint).  Giá trị n không bị thay đổi trong quá trình tính tổng Output: Tổng S  Trả về giá trị của S.  S là tổng các số nguyên dương Kiểu trả về của hàm là uint (hoặc ulong).  Xác định TênPhươngThức: Dùng tính tổng S nên có thể đặt là static ulong TongS(uint n) 0;321  nnSn  3. PHƢƠNG THỨC 3.4 Phƣơng thức có giá trị trả về 32 static ulong TongS(uint n) { ulong kq = 0; for (uint i = 1; i <= n; i++) kq + = i; return kq; } 3. PHƢƠNG THỨC VD: Viết chương trình nhập số nguyên dương n và tính tổng 0;321  nnSn  33 3.5.Truyền tham số 33  Tham số làm kết quả đầu ra: out  Tham số vừa làm đầu vào và đầu ra: ref  Dùng từ khóa ref hoặc out trước kiểu dữ liệu của khai báo tham số khi cài đặt phương thức và trước tên đối số khi gọi phương thức.  Lưu ý khi dùng ref hoặc out:  Nếu sử dụng từ khóa ref thì gọi phương thức cũng dùng ref (hoặc ngược lại cho từ khóa out)  Dùng từ khóa ref bắt buộc phải khởi gán giá trị cho biến tham chiếu trước khi gọi phương thức (Nếu dùng out thì không cần thiết) 3. PHƢƠNG THỨC 34 3.6. Lấy số ngẫu nhiên 34 Sử dụng lớp Random Các phƣơng thức : Phƣơng thức Ý nghĩa Next () Trả về số ngẫu nhiên từ 0 đến 2,147,483,646 Next (giá trị tối đa) Trả về số ngẫu nhiên từ 0 đến giá trị tối đa -1 Next (giá trị tối thiểu, giá trị tối đa) Trả về số ngẫu nhiên từ giá trị tối thiểu đến giá trị tối đa -1 NextDouble () Trả về số thực (double) từ 0.0 đến nhỏ hơn 1.0 3. PHƢƠNG THỨC 35 Ví dụ 35 int songaunhien; double sothuc; Random rd = new Random(); songaunhien = rd.Next(); //Số nguyên ngẫu nhiên trong phạm vi long int songaunhien = rd.Next(100); //Số nguyên ngẫu nhiên trong phạm vi 0-99 songaunhien = rd.Next(10, 100); //Số nguyên ngẫu nhiên trong phạm vi 10-99 sothuc = rd.NextDouble(); //Số thực ngẫu nhiên trong phạm vi 0.0-1.0 3. PHƢƠNG THỨC 36 3.7. Lấy ngày giờ hệ thống 36  Sử dụng lớp DateTime Khai báo một đối tượng của lớp DateTime và sử dụng phương thức Now DateTime d = DateTime.Now  Các thuộc tính của lớp DateTime Thuộc tính Ý nghĩa int intNg = d.Day; intNg chứa giá trị ngày int intTh = d.Month; intTh chứa giá trị tháng int intNm = d.Year; intNm chứa giá trị năm int intGio = d.Hour; intGio chứa giá trị giờ int intPhut = d.Minute; intPhut chứa giá trị phút int intGiay = d.Second; intGiay chứa giá trị giây int intMGiay = d.Millisecond; intMGiay chứa giá trị phần ngàn của giây 3. PHƢƠNG THỨC 37 4.1. Khai báo Mảng 37 Mảng là một tập hợp các phần tử có cùng kiểu, được xác định vị trí trong tập hợp bằng chỉ mục. Khai báo mảng 1 chiều: [] tên_mảng = new [kích thước]; Ví dụ: Khai báo mảng số nguyên a kích thước 10 int[] a = new int [10]; Khai báo mảng 2 chiều: [,] tên_mảng = new [dòng,cột]; Ví dụ: Khai báo ma trận M số thực gồm 4 dòng, 5 cột float [,] mt = new float [4,5]; 4. MẢNG 38 38  Khởi tạo mảng int [] a = new int[5] {4, 7, 1, 21, 9}; hoặc: int [] a = {4, 7, 1, 21, 9};  Truy xuất phần tử của mảng: [vị trí]; Vị trí được đánh số từ 0 đến số phần tử -1 Ví dụ: a[4] sẽ cho giá trị là 9 4. MẢNG 4.2. Mảng 1 chiều 39  Khởi tạo ma trận int[,] M = new int[3, 5] { {2, 4, 8, 9, 7}, {4, 8, 11, 10, 3}, {21, 7, 6, 5, 0}}; hoặc int[,] M = { {2, 4, 8, 9, 7}, {4, 8, 11, 10, 3}, {21, 7, 6, 5, 0}};  Truy xuất phần tử của ma trận: [vị trí dòng, vị trí cột]; Vị trí được đánh số từ 0 Ví dụ: mt[1, 3] sẽ cho giá trị là 10 4. MẢNG 4.3. Mảng 2 chiều 40 40 Khai báo chuỗi : string s; Ghép chuỗi: + string a = "Xin"; string b = "chào"; string c = a + " " + b;  c = "Xin chào“ Hoặc string.Concat(a, “ “, b);  a = “Xin Chào”  Lấy chuỗi con: Substring() string s="Lay chuoi con".Substring(4);  Lấy chuỗi con từ vị trí thứ 4 về sau: s = "chuoi con“ string s = "Lay chuoi con".Substring(4, 5);  Lấy chuỗi con từ vị trí thứ 4 và có chiều dài là 5: s=chuoi 5. CHUỖI 41 41 Thay thế chuỗi con Replace(chuỗi cần thay, chuỗi thay thế); string s= "thay the chuoi.".Replace('t', 'T');  s = "Thay The chuoi" s = "thay the chuoi.".Replace("th", "TH");  s = "THay THe chuoi" 5. CHUỖI 42 42 5. CHUỖI Định dạng chuỗi Format (định dạng, đối số cần định dạng); 43 43  Chiều dài chuỗi: Thuộc tính Length string s = "Xin chào"; int n = s.Length; // n = 8  Tách chuỗi con theo ký hiệu phân cách cho trƣớc string.Split(danh sách ký tự phân cách) Ví dụ: In ra màn hình các từ trên từng dòng, mỗi từ cách nhau bằng dấu phẩy (,) hoặc khoảng trắng string s = "Hom nay, ngay 02 thang 03 nam 2010"; foreach (string tu in s.Split(' ', ',')) if (tu != "") txtKetqua.Text=txtKetqua.Text + “\n” + tu ; 5. CHUỖI 44 44 Ví dụ: In ra từ có độ dài dài nhất trong chuỗi cho trước (các từ cách nhau khoảng trắng hoặc dấu chấm câu) string s = "Hom nay, ngay 02 thang 03 nam 2010"; string tumax = ""; foreach (string tu in s.Split(' ', ',', '.', '!', '?', ';')) if (tu != "" && tu.Length > tumax.Length) tumax = tu; txtKetqua.Text= "Tu dai nhat: " + tumax; 5. CHUỖI 45