02/10/2018, 00:07

[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á ...

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)
  • 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:

lap-trinh-c-co-ban-bien-va-kieu-du-lieu-tinh-dien-tich-tam-giac-1

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 !

Download

Tags:
0