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á
45 trang |
Chia sẻ: thanhle95 | Lượt xem: 527 | Lượt tải: 1
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