- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
[C#] Lập trình C# cơ bản - Biến và kiểu dữ liệu biến
Trong bài này mình sẽ hướng dẫn các bạn cách để khai báo biến trong lập trình C# và sử dụng các kiểu dữ liệu khai báo phù hợp với từng biến theo yêu cầu bài toán đề ra.
Vậy Biến là gì ? Là đối tượng dùng để lưu trữ tạm thời các giá trị trong quá trình xử lý tính toán. Và Kiểu là khái niệm ám chỉ việc định nghĩa hình thái, cấu trúc và giá trị của dữ liệu, bao gồm cách biểu diễn và xử lý của dữ liệu.
Cách khai báo biến: ;
Với quy tắc: tên biến không được trùng với các từ khóa (ví dụ int, string,...) của .NET, tên phân biệt chữ HOA - thường, không dấu, không có ký tự đặc biệt ($,%,&,#,...), có thể bao gồm chữ và số, phải bắt đầu bằng chữ (hoặc dấu _ ). VD: biena,bienA, bienB, _bienC, bien_D, bien_D2,...
Kiểu dữ liệu được chia làm 2 loại chính:
- Kiểu giá trị (Value Types):
Bao gồm:- Các kiểu giá trị được xây dựng sẵn (Build-in types): Là các kiểu cơ sở do .NET Framework cung cấp, các kiểu dữ liệu khác được xây dựng dựa trên các kiểu cơ sở này.
VD: {sbyte, byte, short, int, uint, long, float, double, decimal, char, bool, DateTime } ; - Các kiểu do người dùng định nghĩa (User-defined types): Là các kiểu do người dùng tự định nghĩa
- Kiểu liệt kê (Enumerations): Là các ký hiệu có cùng một họ (có liên quan với nhau) có các giá trị cố định. VD: khi nói tới các tháng, ta sẽ liên tưởng tới các con số (hoặc chữ) từ 1 đến 12: enum thang: int{1,2,3,4,5,6,7,8,9,10,11,12} hoặc enum thang:string{Một,Hai,Ba,...,Mười hai}
- Kiểu cấu trúc (Struct)
- Các kiểu giá trị được xây dựng sẵn (Build-in types): Là các kiểu cơ sở do .NET Framework cung cấp, các kiểu dữ liệu khác được xây dựng dựa trên các kiểu cơ sở này.
- Kiểu tham chiếu (Reference Types): Là các kiểu dữ liệu chỉ lưu trữ địa chỉ biến của chúng, cũng được hiểu như là một con trỏ (pointer), trên stack.
* Trong bài này mình chỉ thực hiện trên các kiểu cơ bản.
- Bài tập: Tính diện tích Tam giác với 3 trường hợp:
- Trường hợp 1: khai báo các biến giá trị của các cạnh và cv,dt đều là Double
- Trường hợp 2: Khai báo các biến giá trị của cạnh là kiểu Int, giá trị của Diện tích và Chu vi là kiểu Double
- Trường hợp 3: Các biến giá trị của các cạnh là kiểu Int, chu vi và diện tích là kiểu Float
Bước 1: Thiết kế giao diện như hình:
Với các textbox ta sẽ cho người dùng nhập vào (input) các giá trị của các cạnh A, B, C. Hai textbox còn lại sẽ hiển thị kết quả (output) khi thực hiện phép tính các trường hợp.
Đối với các kiểu dữ liệu khi thực hiện các phép toán, Csharp rất nghiêm ngặt trong việc phân định rõ ràng kiểu dữ liệu của các toán tử và kết quả. Vì vậy, khi khai báo các biến dùng để hứng kết quả trả về, ta cần phải cân nhắc kỹ khai báo kiểu dữ liệu của nó là kiểu gì. Nếu không cùng kiểu dữ liệu thì sẽ báo lỗi, hoặc cho ra kết quả không chính xác. Bài tập này sẽ giúp các bạn hiểu được cách khai báo biến hợp lý và phù hợp với từng đề bài. Đồng thời cũng hiểu được ý nghĩa thật sự khi chúng ta khai báo một biến nào đó trong C#.
Chúng ta tiếp tục bài tập đã nêu:
Trường hợp 1: ta sẽ khai báo kiểu dữ liệu của các toán tử và kết quả trả về là giống nhau: Kết quả đương nhiên sẽ chính xác nhất.
private void simpleButton1_Click(object sender, EventArgs e)
{
//trường hợp 1: khai báo các biến giá trị của các cạnh và cv,dt đều là Double
double a, b, c, cv, dt;
//chuyển kiểu và gán giá trị cho biến
a = double.Parse(txt_canhA.Text);
b = double.Parse(txt_canhB.Text);
c = double.Parse(txt_canhC.Text);
//tính chu vi
cv = a + b + c;
txt_chuvi.Text = cv.ToString();
//tính diện tích
dt = Math.Sqrt(cv/2 * (cv/2 - a) * (cv/2-b) * (cv/2-c));
txt_dientich.Text = dt.ToString();
}
Có thể sẽ có bạn hỏi rằng: Tại sao khi khai báo kiểu các cạnh là kiểu double rồi, lại còn phải có thêm phương thức double.Parse(); vào nữa ? Câu trả lời là: khi người dùng nhập vào là kiểu số, nhưng giá trị của textboxA (txt_canhA.Text) sẽ trả về kiểu string. Nếu chúng ta gán giá trị cho một biến (double a sẽ nhận giá trị là kiểu double) bằng một giá trị có kiểu dữ liệu khác (txt_canhA.Text sẽ trả về kiểu string) thì hệ thống sẽ báo lỗi. Và double.Parse(txt_canhA.Text) là phương thức ép kiểu, sẽ chuyển kiểu string của textbox về kiểu double. Với C#, chúng ta sẽ sử dụng phương thức này rất nhiều, nhất là trong các form nhập liệu. Bài sau sẽ nói rõ hơn về cách thực hiện một cú pháp ép kiểu chuẩn nhất.
Thực hiện tương tự đối với các trường hợp 2:
private void simpleButton2_Click(object sender, EventArgs e)
{
//Trường hợp 2: Khai báo các biến giá trị của cạnh là kiểu Int, giá trị của Diện tích và Chu vi là kiểu Double
int a, b, c;
double cv, dt;
//gán giá trị cho các biến cạnh
a = int.Parse(txt_canhA.Text);
b = int.Parse(txt_canhB.Text);
c = int.Parse(txt_canhC.Text);
//tính chu vi
cv =1.0* (a + b + c);
txt_chuvi.Text = cv.ToString();
//tính diện tích
//dt= Math.Sqrt(cv / 2 * (cv / 2 - a) * (cv / 2 - b) * (cv / 2 - c));
dt = Math.Sqrt(cv / 2 * (cv / 2 - a) * (cv / 2 - b) * (cv / 2 - c));
txt_dientich.Text = dt.ToString();
}
Và trường hợp 3:
private void simpleButton3_Click(object sender, EventArgs e)
{
//Trường hợp 3: Các biến giá trị của các cạnh là kiểu Int, chu vi và diện tích là kiểu Float
int a, b, c;
float cv, dt;
//gán giá trị cho các biến cạnh
a = int.Parse(txt_canhA.Text);
b = int.Parse(txt_canhB.Text);
c = int.Parse(txt_canhC.Text);
//tính chu vi
cv = a + b + c;
txt_chuvi.Text = cv.ToString();
//tính diện tích
cv = (float)a + (float)b + (float)c;
//dt = (float)Math.Sqrt(cv / 2 * (cv / 2 - a) * (cv / 2 - b) * (cv / 2 - c));
dt = Math.Sqrt(cv / 2 * (cv / 2 - a) * (cv / 2 - b) * (cv / 2 - c));
txt_dientich.Text = dt.ToString();
}
Nhấn F5 và tự các bạn hãy nhận xét về kết quả.
Chúc vui !