Bài tập struct trong C#
Để củng cố những kiến thức đã học Struct trong lập trình C#. Mời bạn đọc cùng thực hành qua một số bài tập C# cơ bản dưới đây.
1. Bài 01
Tạo struct, gán giá trị và gọi struct
Viết chương trình C# để tạo một struct, gán giá trị và gọi struct này.
Đây là bài tập C# đơn giản minh họa giúp bạn cách khai báo một struct và cách truy cập các phần tử của một struct.
Dưới đây là chương trình C# minh họa lời giải cho bài tập tạo struct, gán giá trị và gọi struct trong C#:
using System;
namespace Csharp
{
// tao mot class
class aNewClass
{
public int x;
public int y;
}
//tao mot struct
struct aNewStruc
{
public int x;
public int y;
}
class TestCsharp
{
static void Main(string[] args)
{
Console.Write("\nTao struct, gan gia tri va goi struct trong C#:\n");
Console.Write("------------------------------------------------\n");
aNewClass ClassNum1 = new aNewClass();
ClassNum1.x = 75;
ClassNum1.y = 95;
// ClassNum2 la mot kieu cua ClassNum1
aNewClass ClassNum2 = ClassNum1;
ClassNum1.x = 7500;
ClassNum1.y = 9500;
Console.WriteLine("\nThuc hien hoat dong gan trong Class: x:{0}, y:{1}", ClassNum2.x, ClassNum2.y);
aNewStruc StrucNum1 = new aNewStruc();
StrucNum1.x = 750;
StrucNum1.y = 950;
// StrucNum2 la mot kieu cua StrucNum1 type
aNewStruc StrucNum2 = StrucNum1;
StrucNum1.x = 75;
StrucNum1.y = 95;
Console.WriteLine("Thuc hien hoat dong gan trong Struct: x:{0}, y:{1}\n\n", StrucNum2.x, StrucNum2.y);
Console.ReadKey();
}
}
}
Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn.
Biên dịch và chạy chương trình C# trên sẽ cho kết quả:
2. Bài 02
Truyền struct vào phương thức
Điểm khác nhau giữa việc chúng ta truyền instance của struct và một instance của một class vào một phương thức trong C#. Bạn theo dõi chương trình C# dưới đây để theo dõi điểm khác nhau này nhé.
Dưới đây là chương trình C# minh họa lời giải cho bài tập truyền struct vào phương thức trong C#:
using System;
namespace Csharp
{
//tao mot class
class newClass
{
public int n;
}
//tao mot struct
struct newStruct
{
public int n;
}
class TestCsharp
{
public static void trackStruct(newStruct st)
{
st.n = 8;
}
public static void tracClass(newClass cl)
{
cl.n = 8;
}
public static void Main()
{
Console.Write("\nTruyen struct va instance cua class vao phuong thuc:\n");
Console.Write("-----------------------------------------------------\n");
newStruct ns = new newStruct();
newClass nc = new newClass();
ns.n = 5;
nc.n = 5;
//gia tri cua cac truong trong struct khong bi thay doi khi chung ta truyen instance
//cua struct nay, boi vi chi co ban sao cua struct se duoc truyen vao phuong thuc trackStruct
trackStruct(ns);
//gia tri cua cac truong trong class bi thay doi khi chung ta truyen instance
//cua class nay, boi vi tham chieu toi class duoc truyen vao phuong thuc tracClass
tracClass(nc);
Console.WriteLine("\nns.n = {0}", ns.n);
Console.WriteLine("nc.n = {0}\n", nc.n);
Console.ReadKey();
}
}
}
Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn.
Biên dịch và chạy chương trình C# trên sẽ cho kết quả:
3. Bài 03
Khai báo struct
Viết chương trình C# để khai báo một struct có một thuộc tính, một phương thức và một trường private.
Đây là bài tập C# đơn giản minh họa giúp bạn cách khai báo một struct và cách truy cập các phần tử của một struct.
Dưới đây là chương trình C# minh họa lời giải cho bài tập khai báo struct trong C#:
using System;
namespace Csharp
{
//khai bao struct
struct newStruct
{
private int num;
public int n
{
get
{
return num;
}
set
{
if (value < 50)
num = value;
}
}
public void clsMethod()
{
Console.WriteLine("\nGia tri duoc luu giu la: {0}\n", num);
}
}
class TestCsharp
{
public static void Main()
{
Console.Write("\nKhai bao struct co thuoc tinh, phuong thuc va truong private trong C#:\n");
Console.Write("----------------------------------------------------------------------\n");
newStruct myInstance = new newStruct();
myInstance.n = 15;
myInstance.clsMethod();
Console.ReadKey();
}
}
}
Biên dịch và chạy chương trình C# trên sẽ cho kết quả:
4. Bài 04
Khởi tạo struct
Viết chương trình C# để khởi tạo một struct mà không sử dụng toán tử new.
Dưới đây là chương trình C# minh họa lời giải cho bài tập khởi tạo struct trong C#:
using System;
namespace Csharp
{
public struct newStruct
{
public int m, n;
public newStruct(int pt1, int pt2)
{
m = pt1;
n = pt2;
}
}
// khai bao va khoi tao doi tuong struct
class TestCsharp
{
static void Main()
{
Console.Write("\nKhoi tao struct khong su dung toan tu new trong C#:\n");
Console.Write("----------------------------------------------------\n");
newStruct myPoint;
myPoint.m = 30;
myPoint.n = 40;
Console.Write("\nnewStruct : ");
Console.WriteLine("m = {0}, n = {1}", myPoint.m, myPoint.n);
Console.WriteLine("\nNhan bat ky phim nao de thoat.");
Console.ReadKey();
Console.ReadKey();
}
}
}
Biên dịch và chạy chương trình C# trên sẽ cho kết quả:
5. Bài 05
Sử dụng mảng struct
Phát triển bài tập tạo một Book Struct, hay tạo NhanVien Struct, giả sử bây giờ chúng cần lưu giữ thông tin của hàng ngàn cuốn sách hay thông tin của hàng trăm nhân viên, thì bây giờ chúng ta làm như thế nào. Vấn đề này sẽ được giải quyết bởi sử dụng mảng struct trong C#.
Dưới đây là chương trình C# minh họa lời giải cho bài tập sử dụng mảng struct trong C#:
using System;
namespace Csharp
{
public class TestCsharp
{
//khai bao mot struct
struct point
{
//toa do cua diem
public short x;
public short y;
//mau cua diem
public byte r;
public byte g;
public byte b;
}
public static void Main()
{
point[] p = new point[1000];
Console.Write("Vi du minh hoa mang struct trong C#:\n");
Console.Write("-----------------------------------------\n");
Console.Write("Nhap toa do X cho diem dau tien: ");
p[0].x = Convert.ToInt16(Console.ReadLine());
Console.Write("\nNhap toa do Y cho diem dau tien: ");
p[0].y = Convert.ToInt16(Console.ReadLine());
Console.Write("\nNhap mau do cho diem dau tien: ");
p[0].r = Convert.ToByte(Console.ReadLine());
Console.Write("\nNhap mau xanh la cay cho diem dau tien: ");
p[0].g = Convert.ToByte(Console.ReadLine());
Console.Write("\nNhap mau xanh da troi cho diem dau tien: ");
p[0].b = Convert.ToByte(Console.ReadLine());
Console.Write("\nNhap toa do X cho diem thu hai: ");
p[1].x = Convert.ToInt16(Console.ReadLine());
Console.Write("\nNhap toa do Y cho diem thu hai: ");
p[1].y = Convert.ToInt16(Console.ReadLine());
Console.Write("\nNhap mau do cho diem thu hai: ");
p[1].r = Convert.ToByte(Console.ReadLine());
Console.Write("\nNhap mau xanh la cay cho diem thu hai: ");
p[1].g = Convert.ToByte(Console.ReadLine());
Console.Write("\nNhap mau xanh da troi cho diem thu hai: ");
p[1].b = Convert.ToByte(Console.ReadLine());
//... ban co the nhap n diem
Console.WriteLine(
"Diem thu nhat tai vi tri ({0},{1}), co mau ({2},{3},{4})",
p[0].x, p[0].y, p[0].r, p[0].g, p[0].b);
Console.WriteLine(
"Diem thu hai tai vi tri ({0},{1}), co mau ({2},{3},{4})",
p[1].x, p[1].y, p[1].r, p[1].g, p[1].b);
Console.ReadKey();
}
}
}
Biên dịch và chạy chương trình C# trên sẽ cho kết quả:
Tham khảo thêm
- doc Bài tập C# kinh điển
- doc Bài tập C# cơ bản
- doc Bài tập kiểu dữ liệu trong C#
- doc Bài tập lệnh IF, ELSE, SWITCH trong C#
- doc Bài tập vòng lặp FOR, WHILE, DO...WHILE trong C#
- doc Bài tập mảng một chiều trong C#
- doc Bài tập String trong C#
- doc Bài tập hàm trong C#
- doc Bài tập hướng đối tượng trong C#
- doc Bài tập đọc ghi file trong C#