Xem Nhiều 2/2023 #️ Sử Dụng Cấu Trúc Struct Và Kiểu Liệt Kê Enum Trong Lập Trình C# C Sharp # Top 2 Trend | 3mienmoloctrungvang.com

Xem Nhiều 2/2023 # Sử Dụng Cấu Trúc Struct Và Kiểu Liệt Kê Enum Trong Lập Trình C# C Sharp # Top 2 Trend

Cập nhật thông tin chi tiết về Sử Dụng Cấu Trúc Struct Và Kiểu Liệt Kê Enum Trong Lập Trình C# C Sharp mới nhất trên website 3mienmoloctrungvang.com. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất.

Sử dụng struct trong C#

Thông thường sử dụng struct để gộp một nhóm nhỏ các dữ liệu, mục đích chính là lưu trữ dữ liệu rất hạn chế tạo ra các ứng xử trên struct (các phương thức).

Bắt đầu bằng một ví dụ đơn giản về struct, khai báo một cấu trúc – có 2 trường dữ liệu (không phải thuộc tính) và một phương thức

public struct Product { public string name; public decimal price; }

Do là kiểu giá trị với các trường dữ liệu, nên có thể khai báo – khởi tạo các trường và sử dụng như kiểu giá trị:

Product productA; Product productA; productA.name = "Iphone"; productA.price = 1000; Product productB = productA; productB.name = "Laptop"; Console.WriteLine(productA.ToString()); Console.WriteLine(productB.ToString());

Phương thức khởi tạo struct

Trong struct cũng có thể có phương thức khởi tạo như lớp, nó dùng để khởi tạo giá trị các trường hoặc thuộc tính. Khi có phương thức khởi tạo (hàm tạo) muốn chạy nó thì phải dùng toán tử new để có bản thực thi của struct. Một lưu ý nữa là phương thức khởi tạo bắt buộc phải khởi tạo toàn bộ thành viên dữ liệu (trường, thuộc tính) có trong struct. Ví dụ:

public struct Product { public Product(string _name) { name = _name; price = 100; } public string name; public decimal price; }

Thi hành hàm tạo thì phải dùng tới new, như đoạn code:

Product product = new Product("Samsung Abc"); Console.WriteLine(product.ToString());

Thuộc tính trong struct

Trong struct cũng có thể khai báo các thuộc tính, chỉ cần lưu ý đã có thuộc tính thì bắt buộc phải khởi tạo nó một cách tường minh trong phương thức khởi tạo nếu không sẽ lỗi. Ví dụ sau có hai thuộc tính là Name và Description

public struct Product { public Product(string _name) { name = _name; price = 100; Description = "Mô tả về sản phẩm {name}"; } public string name; public decimal price; public string Description {set; get;} }

So sánh sự khác nhau giữa class và struct

Struct phù hợp khi muốn gom một lượng nhỏ các biến có kiểu nguyên thủy (int, float …), thuộc tính lại với nhau. Class thì dùng khi các diễn tả đối tượng chứa các biến, thuộc tính và xử lý dữ liệu phức tạp.

Struct có thể dùng khai báo biến mà không cần thao tác tạo đối tượng. BIẾN KIỂU STRUCT LÀ THAM TRỊ CÒN BIẾN CLASS LÀ THAM CHIẾU . struct được lưu ở bộ nhớ stack, còn đối tượng được sinh ra bới class được lưu ở bộ nhớ heap – bộ nhớ heap được quản lý, giám sát, thu hồi tự động bởi GC.

Sử dụng kiểu liệt kê (Enumeration Type) – enum

Kiểu liệt kê (enum) khai báo một tập hợp các hằng số có tên, mặc định giá trị các hằng số này là kiểu int và bắt đầu từ 0 trở đi trong khai báo kiểu liệt kê. Liệt kê (enum) thuộc dạng kiểu giá trị như struct. Để khai báo một kiểu liệt kê thì dùng từ khóa enum

Ví dụ – khai báo kiểu liệt kê thể hiện học lực của sinh viên gồm có: Kém (0), Trung bình (1), Khá (2), Giỏi (3)

enum HocLuc {Kem, TrungBinh, Kha, Gioi};

Mặc định enum sẽ thiết lập tên các khai báo sẽ nhận giá trị tương ứng từ 0, 1, 2 … Tuy nhiên, bạn có thể gán một tên nào đó ứng với giá trị cụ thể, ví dụ TrungBinh nhận giá trị 5

enum HocLuc {Kem, TrungBinh = 5, Kha, Gioi};

Do TrungBinh bằng 5, nên tên tiếp theo Kha sẽ nhận 6, Giỏi là 7

Để nhận giá trị liệt kê – bạn dùng toán tử . rồi đến tên phần tử.

enum HocLuc {Kem, TrungBinh, Kha, Gioi} static void Main(string[] args) { int a = (int) chúng tôi ;

Khai báo kiểu enum rất phù hợp khi giá trị của biến nhận một giá trị hằng số trong tập hằng số hữu hạn nào đó, như danh sách các ngày trong tuần, trạng thái online / offline, và đặc biệt hay dùng Enum với câu lệnh switch

static void test_enum () { HocLuc hocluc = chúng tôi switch (hocluc) { case HocLuc.Kem: Console.WriteLine ("Học lực kém"); break; case HocLuc.Kha: Console.WriteLine ("Học lực Kha"); break; case HocLuc.Gioi: Console.WriteLine ("Học lực Giỏi"); break; default: Console.WriteLine ("Học lực TB"); break; } }

Bạn có thể cast – chuyển kiểu qua lại giữa enum và int

HocLuc hoc = (HocLuc)2; Console.WriteLine(hoc);

Sử dụng enum, khi viết code tên của Enum nó đã gợi nhớ giá trị – ý nghĩa của dữ liệu nên code dễ đọc, dễ hiểu hơn

HocLuc hocluc_hocsinhA = HocLuc.Kha; int hocluc_hocsinhB = 2;

Hai dòng code trên, về logic có thể hoàn toàn giống nhau. Nhưng đọc code ở dòng 1 sẽ dễ hơn đọc ở dòng 2 nhiều.

Tham khảo mã nguồn CS022_struct_and_enum (git) hoặc tải về ex022

Kiểu Struct Trong Lập Trình C#

#1. Cách khai báo

– Một struct thì có thuộc tính ( là các danh từ) và phương thức ( là các động từ). Được khai báo bắt đầu bằng từ khóa struct như sau:

Trong đó:

access modifier chỉ định phạm vi truy cập:

Đối với của tên_struct chỉ được là public hoặc internal. Không được là private, protected và protected internal.

Đối với thành viên thì có thể là public, internal và private. Không được là protected hay protected internal.

struct : từ khóa dùng để khai báo một kiểu cấu trúc.

tên_struct, tên_biến, tên_phương_thức : tuân thủ theo quy tắc đặt tên trong lập trình.

kiểu_trả_về : có thể là kiểu dữ liệu có sẵn của .Net, hoặc là kiểu dữ liệu do người dùng tự định nghĩa.

#2. Cách sử dụng

- Cũng giống như class chúng ta cũng có thể truy xuất đến từng thành phần dữ liệu của struct thông qua toán tử dấu chấm "." kèm theo tên thành phần muốn truy xuất.

- Ví dụ 1: Demo sử dụng toán tử new tạo đối tượng struct để lưu trữ thông tin của một cuốn sách trong thư viện:

struct: string Title string Author int BookId DateTime PublishDay using System; namespace MinhHoangBlog { struct Books { private string Title; private string Author; private int BookId; private DateTime PublishDay; public Books( string Title, string Author, int BookId, DateTime PublishDay ) { this.Title = Title; this.Author = Author; this.BookId = BookId; this.PublishDay = PublishDay; } public void SetInfo( string inTitle, string inAuthor, int inBookId, DateTime inPublishDay ) { Title = inTitle; Author = inAuthor; BookId = inBookId; PublishDay = inPublishDay; } public void DisplayInfo() { Console.WriteLine("Title : {0}", Title); Console.WriteLine("Author : {0}", Author); Console.WriteLine("Book ID : {0}", BookId); Console.WriteLine("Publish date : {0}", PublishDay.ToString( "yyyy/MM/dd" )); } }; class Program { static void Main(string[] args) { Books Book1 = new Books(); Book1.SetInfo("C Programming", "Nuha Ali", 6495407, DateTime.Now); Books Book2 = new Books("C# Tutorial", "Zara Ali", 6495700, new DateTime(2011, 2, 19)); Book1.DisplayInfo(); Console.WriteLine(); Book2.DisplayInfo(); Console.ReadKey(); } } }

- Ví dụ 2: Chúng ta sẽ không dùng toán tử new để tạo đối tượng struct. Trong trường hợp này, các fields của struct phải có access modifier là public.

using System; namespace MinhHoangBlog { struct Books { public string Title; public string Author; public int BookId; public DateTime PublishDay; }; class Program { static void Main(string[] args) { Books Book1; Books Book2; Book1.Title = "C Programming"; Book1.Author = "Nuha Ali"; Book1.BookId = 6495407; Book1.PublishDay = DateTime.Now; Book2.Title = "C# Tutorial"; Book2.Author = "Zara Ali"; Book2.BookId = 6495700; Book2.PublishDay = new DateTime(2011, 2, 19); Console.WriteLine("Title : {0}", Book1.Title); Console.WriteLine("Author : {0}", Book1.Author); Console.WriteLine("Book ID : {0}", Book1.BookId); Console.WriteLine("Publish date : {0}", Book1.PublishDay.ToString( "yyyy/MM/dd" )); Console.WriteLine(); Console.WriteLine("Title : {0}", Book2.Title); Console.WriteLine("Author : {0}", Book2.Author); Console.WriteLine("Book ID : {0}", Book2.BookId); Console.WriteLine("Publish date : {0}", Book2.PublishDay.ToString( "yyyy/MM/dd" )); Console.ReadKey(); } } }

Lập Trình C: Bài Tập Phần Cấu Trúc (Struct)

Bài tập 1:

Viết chương trình thực hiện những công việc sau:

– Nhập danh sách gồm n học viên (n nhập từ bàn phím) gồm các thông tin : Họ tên, giới tính, điểm Python, điểm C.

– Tính điểm trung bình (diemTB) = (diemC*2 + diemPython)/3 .

– Xét kết quả đậu hay trượt theo quy ước sau:

+ Nếu điểm trung bình <5 và giới tính là “Nam” thì kết qủa là trượt.

+ Nếu điểm trung bình <5 và phái là “Nu” thì kết quả là đậu.

– In danh sách đã nhập và tính toán gồm họ tên, phái, điểm Python, điểm C, điểm TB, và kết quả.

– Sắp xếp học viên theo thứ tự giảm dần theo điểm trung bình và in ra.

– Nhập vào họ tên học viên cần tìm và tìm trong danh sách học viên, nếu không tìm thấy thì in ra học viên có họ tên không tìm thấy. Nếu có nhiều học viên có cùng họ tên cần tìm thì hãy in ra tất cả những học viên đó.

– Hiển thị thông tin những bạn đã đậu.

– Hiển thị thông tin những bạn đã trượt.

– Ghi file.

– Đọc file

Bài tập 2:

Viết chương trình quản lý Sinh viên như sau:

– Các thuộc tính của Sinh viên:

maSinhVien (mã sinh viên, kiểu chuỗi, phải gồm đúng 8 ký tự)

diemTrungBinh (điểm trung bình, kiểu float, chỉ từ 0 đến 10)

tuoi (tuổi sinh viên, kiểu int, phải từ 18 tuổi)

lop (lớp sinh viên học, kiểu chuỗi, phải bắt đầu bằng “V1Study”)

– Viết các hàm:

+ Hàm inputInfo() để nhập danh sách gồm N (0<N<=5000) Sinh viên.

+ Hàm printInfo() để in thông tin từng Sinh viên.

+ xetHocBong () để xét học bổng cho Sinh viên:

+ Sắp xếp tăng dần (dùng quicksort) danh sách sinh viên theo điểm trung bình.

+ Sắp xếp giảm dần (dùng bubblesort) danh sách sinh viên theo mã sinh viên.

+ Hiển thị những sinh viên có điểm trung bình cao nhất.

+ Hiển thị những sinh viên phải thi lại (có điểm trung bình <5).

+ Ghi file.

+ Đọc file.

Bài tập 3:

1. Tạo 1 struct có tên Employee gồm các thuộc tính: id, name, age, salary, hours.

2. Tạo tạo 1 biến struct của Employee

3. Tạo 1 hàm để nhập thông tin cho biến struct ở ý 2.

4. Tạo 1 hàm dùng để tính và trả về thưởng cho nhân viên:

– Trường hợp còn lại thì thưởng =0

5. Tạo 1 hàm để hiển thị tất cả các thông tin của nhân viên bao gồm cả thưởng.

6. Tạo 1 hàm để ghi file.

7. Tạo 1 hàm để đọc file.

Bài tập 4:

CHƯƠNG TRÌNH QUẢN LÝ TRANH

1. Nhập thông tin tranh và hiển thị

2. Sắp xếp theo tên tăng dần từ A-Z

3. Sắp xếp theo diện tích giảm dần

4. Thống kê tranh theo tên tác giả

5. Tim va hien thi theo the loai, gia ban thap nhat va nho nhat

6. Ghi File

7. Đọc File

8. Thoát

Cấu trúc dữ liệu tranh: tên, tác giả, thể loại, chiều dài(cm), chiều rộng(cm), gía bán($)

Dữ Liệu Mẫu:

Tên: Thiếu Nữ Bên Hoa Huệ

Tác Giả: Tô Ngọc Vân

Thể Loại: Con Người

Chiều Dài: 90

Chiều Rộng: 60

Giá Bán: 10

Tên: Bức Thư

Tác Giả: Tô Ngọc Vân

Thể Loại: Con Người

Chiều Dài: 80

Chiều Rộng: 70

Giá Bán: 15

Tên: Trước Giờ Biểu Diễn

Tác Giả: Bùi Xuân Phái

Thể Loại: Con Người

Chiều Dài: 70

Chiều Rộng: 60

Giá Bán: 12.5

Tên: Phố Hàng Mắm

Tác Giả: Bùi Xuân Phái

Thể Loại: Phong Cảnh

Chiều Dài: 50

Chiều Rộng: 40

Giá Bán: 14

Tên: Tát Nước Đồng Chiêm

Tác Giả: Trần Văn Cẩn

Thể Loại: Phong Cảnh

Chiều Dài: 100

Chiều Rộng: 75

Giá Bán: 20.5

Cấu Trúc Rẽ Nhánh Trong Lập Trình C

Cấu trúc rẽ nhánh là một cấu trúc được dùng rất phổ biến trong các ngôn ngữ lập trình nói chung. Trong C, có hai dạng: dạng không đầy đủ và dạng đầy đủ.

Cú pháp:

Lưu đồ cú pháp:

Kiểm tra Biểu thức điều kiện trước.

Nếu điều kiện đúng (!= 0) thì thực hiện câu lệnh hoặc khối lệnh liền sau điều kiện.

Nếu điều kiện sai thì bỏ qua lệnh hoặc khối lệnh liền sau điều kiện (những lệnh và khối lệnh sau đó vẫn được thực hiện bình thường vì nó không phụ thuộc vào điều kiện sau if).

int main ()

{

float a;

printf(“Nhap a = “); scanf(“%f”,&a);

if (a !=0 )

printf(“Nghich dao cua %f la %f”,a,1/a);

getch();

return 0;

}

– Lệnh getch() luôn luôn được thực hiện vì nó không phải là “lệnh liền sau” điều kiện if.

Ví dụ 2: Yêu cầu người chạy chương trình nhập vào giá trị của 2 số a và b, nếu a lớn hơn b thì in ra thông báo “Gia trị của a lớn hơn giá trị của b”, sau đó hiển thị giá trị cụ thể của 2 số lên màn hình.

int main ()

{

int a,b;

printf(“Nhap vao gia tri cua 2 so a, b!”);

scanf(“%d%d”,&a,&b);

{

printf(” Gia tri cua a lon hon gia tri cua b”);

printf(” a=%d, b=%d”,a,b);

}

getch();

return 0;

}

Nếu chúng ta nhập vào giá trị của a lớn hơn giá trị của b thì khối lệnh:

{

printf(” Gia tri cua a lon hon gia tri cua b”);

printf(” a=%d, b=%d”,a,b);

}

sẽ được thực hiện, ngược lại khối lệnh này không được thực hiện.

Cú pháp:

else

Lưu đồ cú pháp:

Giải thích:

Công việc 1, công việc 2 được thể hiện là 1 câu lệnh hay 1 khối lệnh.

Đầu tiên Biểu thức điều kiện được kiểm tra trước.

Nếu điều kiện đúng thì thực hiện công việc 1.

Nếu điều kiện sai thì thực hiện công việc 2.

Các lệnh phía sau công việc 2 không phụ thuộc vào điều kiện.

int main ()

{

float a;

printf(“Nhap a = “); scanf(“%f”,&a);

if (a !=0 )

printf(“Nghich dao cua %f la %f”,a,1/a);

else

printf(“Khong the tim duoc nghich dao cua a”);

getch();

return 0;

}

– Lệnh getch() luôn luôn được thực hiện.

Ví dụ 2: Yêu cầu người chạy chương trình nhập vào giá trị của 2 số a và b, nếu a lớn hơn b thì in ra thông báo “Gia trị của a lớn hơn giá trị của b, giá trị của 2 số”, ngược lại thì in ra màn hình câu thông báo “Giá trị của a nhỏ hơn hoặc bằng giá trị của b, giá trị của 2 số”.

int main ()

{

int a, b;

printf(“Nhap vao gia tri cua 2 so a va b !”);

scanf(“%d%d”,&a,&b);

{

printf(” a lon hon b”);

printf(” a=%d b=%d “,a,b);

}

else

{

printf(” a nho hon hoac bang b”);

printf(” a=%d b=%d”,a,b);

}

printf(” Thuc hien xong lenh if”);

getch();

return 0;

}

– Nếu chúng ta nhập vào 40 30  thì kết quả hiển ra trên màn hình là

a lon hon b

a=40 b=30

Thuc hien xong lenh if

– Còn nếu chúng ta nhập 40 50  thì kết quả hiển ra trên màn hình là

a nho hon hoac bang b

a=40 b=50

Thuc hien xong lenh if

Ví dụ 3: Yêu cầu người thực hiện chương trình nhập vào một số nguyên dương là tháng trong năm và in ra số ngày của tháng đó.

– Tháng có 31 ngày: 1, 3, 5, 7, 8, 10, 12

– Tháng có 30 ngày: 4, 6, 9, 10

– Tháng có 28 hoặc 29 ngày : 2

int main ()

{

int thg;

printf(“Nhap vao thang trong nam !”);

scanf(“%d”,&thg);

printf(” Thang %d co 31 ngay “,thg);

printf(” Thang %d co 30 ngay”,thg);

else if (thg==2)

printf(” Thang %d co 28 hoac 29 ngay”,thg);

else printf(“Khong co thang %d”,thg);

printf(” Thuc hien xong lenh if”);

getch();

return 0;

}

– Nếu chúng ta nhập vào một trong các số 1, 3, 5, 7, 8, 10, 12 thì kết quả xuất hiện trên màn hình sẽ là

Thuc hien xong lenh if

– Nếu chúng ta nhập vào một trong các số 4, 6, 9, 11 thì kết quả xuất hiện trên màn hình sẽ là

Thuc hien xong lenh if

– Nếu chúng ta nhập vào số 2 thì kết quả xuất hiện trên màn hình sẽ là

Thang 2 co 28 hoac 29 ngay

Thuc hien xong lenh if

– Nếu chúng ta nhập vào số nhỏ hơn 0 hoặc lớn hơn 12 thì kết quả xuất hiện trên màn hình sẽ là

Thuc hien xong lenh if

– Ta có thể sử dụng các câu lệnh chúng tôi lồng nhau. Trong trường hợp chúng tôi lồng nhau thì else sẽ kết hợp với if gần nhất chưa có else.

– Trong trường hợp câu lệnh if “bên trong” không có else thì phải viết nó trong cặp dấu {} (coi như là khối lệnh) để tránh sự kết hợp else if sai.

a=so2;

a=so3;

{

a=so2;

}

a=so3;

Bạn đang xem bài viết Sử Dụng Cấu Trúc Struct Và Kiểu Liệt Kê Enum Trong Lập Trình C# C Sharp trên website 3mienmoloctrungvang.com. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!