Kiểu dữ liệu của giá trị được gán cho biến phải

Biến là vùng bộ nhớ được cấp phát dùng để lưu trữ giá trị cho một kiểu dữ liệu nào đó tại một thời điểm nhất định và nó được truy xuất thông qua một tên đã được khai báo cho biến đó, một biến trong ngôn ngữ lập trình C trước khi được sử dụng nó phải được khai báo ở đầu mỗi khối lệnh.

Hình số 1: Vùng bộ nhớ lưu trữ biến

  • Cú pháp khai báo biến: Kiểu_dữ liệu Tên_biến; trong đó Kiểu_dữ liệu sẽ xác định kiểu của dữ liệu và tên biến đó lưu trữ, Tên_biến  là một định danh được gán cho vùng nhớ chứa biến và dùng để truy xuất giá trị của biến, dấu “;” dùng để xác định sự kết thúc của câu lệnh khai báo biến.
  • Ví dụ : int integer1; Thì trình biên dịch sẽ cấp cho chương trình một khoảng bộ nhớ [2 Bytes] có tên tà integer1 dùng để lưu trữ giá trị của một số nguyên nào đó.
  • Trong một dòng lệnh ta có thể khai báo nhiều biến cùng kiểu bằng các phân tách các biến đó bởi dấu phẩy “,” theo cú pháp như sau :
    • Kiểu_dữ liệu Tên_biến_1, Tên_biến_2, Tên_biến_1 …, Tên_biến_n;
    • Ví dụ :   int integer1, integer2, integer3;
  • Ví dụ :

Hình số 2 : Ví dụ khai báo biến

Vị trí khai báo của biến : Là đặc trưng quan trọng nhất của biến, nó sẽ xác định phạm vi sử dụng và thời gian tồn tại của biến trong chương trình. Trong lập trình C người ta phân biệt 2 loại biến dựa trên vị trí khai báo đó là Biến toàn cục và Biến cục bộ.
  • Biến toàn cục : Nếu một biến được khai báo ở bên ngoài khối lệnh [Nghĩa là ở bên ngoài các hàm] thí nó sẽ được gọi là biến toàn cục, phạm vi hoạt động của nó sẽ có giá trị từ vị trí khai báo đến hết chương trình. Nó có thể được truy xuất bởi bất cứ hàm nào bắt đầu từ vị trí khai báo đến hết chương trình, thời gian tồn tại của biến trong suốt thời gian chương trình hoạt động
  • Biến cục bộ : Là biến được khai báo bên trong khối lệnh [Bên trong phạm vi của hàm], phạm vi sử dụng của biến là bên trong khối lệnh [Trong phạm vi của hàm], thời gian tồn tại của Biến là thời gian bắt đầu chương trình sử dụng khối lệnh đó đến khi chương trình kết thúc sử dụng khối lệnh.
Mỗi biến sau khi khai báo còn được đặc trưng bởi các từ khóa đi kèm phía trước như static, auto, extern, register, const,.. Từ khóa auto dùng để chỉ rõ tính cục bộ của biến được khai báo bên trong hàm, vì các bến này đương nhiên là biến cục bộ nên từ khóa này trong lập trình C ít sử dụng. Từ khóa extern được sử dụng khi chương trình viết trên nhiều file, từ khóa register được sử dụng để xác định một biến cục bộ có thể được lưu trữ trong các thanh ghi SI, DI…do vậy biến sử dụng register thường để tăng tốc độ truy vấn thông tin gắn với vòng lặp.

Từ khóa static khi được sử dụng với biến toàn cục thì biến đó được gọi là biến tĩnh toàn cục, khi nó được sử dụng với biến cục bộ thì nó là biến tĩnh cục bộ, cả biến tĩnh toàn cục và cục bộ đều tồn tại [giá trị lưu trữ không bị mất đi] trong suốt quá trình chương trình chạy.

Bảng dưới đây mô tả các kiểu dữ liệu cơ bản trong lập trình C.\
Để thiết lập giá trị của một biến, người ta thiết lập giá trị cho biến đó thông qua phép gán giá trị của biến.
Ví dụ :
height = 8; 
length = 10;
width = 12;
Trước khi thiết lập giá trị cho biến thì biến đó cần phải được khai báo.
Ví dụ :
int height = 8; hoặc
int height;
height = 8;
Ngoài ra một biến có thể được gán giá trị bằng một biểu thức. Ví dụ :
int volume = height * length* width;

Nếu một biến chỉ được khai báo mà chưa thiết lập giá trị ban đầu cho biến đó thì biến đó có thể tự thiết lập giá trị ban đầu cho chính nó hoặc không tự thiết lập [Vấn đề tự thiết lập giá trị ban đầu hay không phụ thuộc vào kiểu giá trị của biến]. Đây là vấn đề của trình biên dịch ngôn ngữ lập trình C/C++.

Một số trình biên dịch  không tự động khởi tạo hầu hết các biến thành một giá trị nhất định [chẳng hạn như 0]

Do đó, khi một biến được gán một vị trí bộ nhớ bởi trình biên dịch, giá trị mặc định của biến đó là bất cứ giá trị [rác] nào xảy ra ở vị trí bộ nhớ đó!
Bảng dưới đây mô tả các kiểu dữ liệu cơ bản trong lập trình C.

Hình số 3 : Các kiểu dữ liệu cơ bản

Hằng là các đại lượng mà giá trị của nó không thay đổi trong quá trình thực hiện chương trình. Trong lập trình ngôn ngữ C có các loại hằng như sau :
  • Hằng nguyên : Là hằng được khai báo kiểu nguyên
  • Hằng long : Là hằng được khai báo kiểu long khác ở chỗ thêm chữ L hoặc l vào sau để biểu thị hằng đó là hằng long ví dụ 123L.
  • Hằng số thực : Là hằng được khai báo kiểu số thực ví dụ float giatri = 123.56f;
  • Hằng ký tự : Là trường hợp riêng được đặt giữa 2 dấu nháy đơn, ví dụ như ‘A’, ‘a’ hằng ký tự có thể được viết là ‘\x1x2x3’  trong đó x1, x2,x3 là hệ số đếm cơ số 8 mà giá trị x1x2x3 bằng mã ASCII của ký tự đó ví dụ ‘\142’ là hằng ký tự ‘b’.
  • Một số hằng đặc biệt : Hằng đặc biệt được mô tả trong bảng sau
Biến hằng là một loại biến mà giá trị của nó không thể thay đổi trong quá trình chương trình chạy, còn tên hằng là một loại hằng được định nghĩa bởi chỉ thị #define.
  • Tên hằng được định nghĩa theo cú pháp sau : #define Ten Gia_Tri;
Lưu ý Tên hằng thông thường được khai báo bằng chữ Hoa.Ví dụ :


Hình số 4 : Mô tả các sử dụng tên hằng


Bài 2 Biến và Kiểu dữ liệuMục tiêu:Kết thúc bài học này, bạn có thể: Hiểu và sử dụng được biến [variables] Phân biệt sự khác nhau giữa biến và hằng [constants] Nắm vững và sử dụng các kiểu dữ liệu khác nhau trong chương trình C  Hiểu và sử dụng các toán tử số học.Giới thiệuBất cứ chương trình ứng dụng nào cần xử lý dữ liệu cũng cần có nơi để lưu trữ tạm thời dữ liệu ấy. Nơi mà dữ liệu được lưu trữ gọi là bộ nhớ. Những vị trí khác nhau trong bộ nhớ có thể được xác định bởi các địa chỉ duy nhất. Những ngôn ngữ lập trình trước đây yêu cầu lập trình viên quản lý mỗi vị trí ô nhớ thông qua địa chỉ, cũng như giá trị lưu trong nó. Các lập trình viên dùng những địa chỉ này để truy cập hoặc thay đổi nội dung của các ô nhớ. Khi ngôn ngữ lập trình phát triển, việc truy cập hay thay đổi giá trị ô nhớ đã được đơn giản hoá nhờ sự ra đời của khái niệm biến .2.1 Biến [variable]Một chương trình ứng dụng có thể quản lý nhiều loại dữ liệu. Trong trường hợp này, chương trình phải chỉ định bộ nhớ cho mỗi đơn vị dữ liệu. Khi chỉ định bộ nhớ, có hai điểm cần lưu ý như sau :1. Bao nhiêu bộ nhớ sẽ được gán2. Mỗi đơn vị dữ liệu được lưu trữ ở đâu trong bộ nhớ.Trước đây, các lập trình viên phải viết chương trình theo ngôn ngữ máy gồm các mã 1 và 0. Nếu muốn lưu trữ một giá trị tạm thời, vị trí chính xác nơi mà dữ liệu được lưu trữ trong bộ nhớ máy tính phải được chỉ định. Vị trí này là một con số cụ thể, gọi là địa chỉ bộ nhớ.Các ngôn ngữ lập trình hiện đại cho phép chúng ta sử dụng các tên tượng trưng gọi là biến [variable], chỉ đến một vùng bộ nhớ nơi mà các giá trị cụ thể được lưu trữ.Kiểu dữ liệu quyết định tổng số bộ nhớ được chỉ định. Những tên được gán cho biến giúp chúng ta sử dụng lại dữ liệu khi cần đến.Chúng ta đã quen với cách sử dụng các ký tự đại diện trong một công thức. Ví dụ, diện tích hình chữ nhật được tính bởi :Diện tích = A = chiều dài x chiều rộng = L x BCách tính lãi suất đơn giản được cho như sau:Tiền lãi = I = Số tiền ban đầu x Thời gian x Tỷ lệ/100 = P x T x R /100Các ký tự A, L, B, I, P, T, R là các biến và là các ký tự viết tắt đại diện cho các giá trị khác nhau.Biến và Kiểu dữ liệu 1Xem ví dụ sau đây :Tính tổng điểm cho 5 sinh viên và hiển thị kết quả. Việc tính tổng được thực hiện theo hướng dẫn sau.Hiển thị giá trị tổng của 24, 56, 72, 36 và 82Khi giá trị tổng được hiển thị, giá trị này không còn được lưu trong bộ nhớ máy tính. Giả sử, nếu chúng ta muốn tính điểm trung bình, thì giá trị tổng đó phải được tính một lần nữa.Tốt hơn là chúng ta sẽ lưu kết quả vào bộ nhớ máy tính, và sẽ lấy lại nó khi cần đến.sum = 24 + 56 + 72 + 36 + 82Ở đây, sum là biến được dùng để chứa tổng của 5 số. Khi cần tính điểm trung bình, có thể thực hiện như sau:Avg = sum / 5Trong C, tất cả biến cần phải được khai báo trước khi dùng chúng.Chúng ta hãy xét ví dụ nhập hai số và hiển thị tổng của chúng trong ví dụ 1.Ví dụ 1:BEGINDISPLAY ‘Enter 2 numbers’INPUT A, BC = A + BDISPLAY CENDA, B và C trong đoạn mã trên là các biến. Tên biến giúp chúng ta tránh phải nhớ địa chỉ của vị trí bộ nhớ. Khi đoạn mã được viết và thực thi, hệ điều hành đảm nhiệm việc cấp không gian nhớ còn trống cho những biến này. Hệ điều hành ánh xạ một tên biến đến một vị trí xác định trong bộ nhớ [ô nhớ]. Và để tham chiếu tới một giá trị riêng biệt trong bộ nhớ, chúng ta chỉ cần chỉ ra tên của biến. Trong ví dụ trên, giá trị của hai biến được nhập từ người dùng và chúng được lưu trữ nơi nào đó trong bộ nhớ. Những vị trí này có thể được truy cập thông qua các tên biến A và B. Trong bước kế tiếp, giá trị của hai biến được cộng và kết quả được lưu trong biến thứ 3 là biến C. Cuối cùng, giá trị biến C được hiển thị. Trong khi một vài ngôn ngữ lập trình cho phép hệ điều hành xóa nội dung trong ô nhớ và cấp phát bộ nhớ này để dùng lại thì những ngôn ngữ khác như C yêu cầu lập trình viên xóa vùng nhớ không sử dụng thông qua mã chương trình. Trong cả hai trường hợp, hệ điều hành đều lo việc cấp phát và thu hồi ô nhớ.Hệ điều hành hoạt động như một giao diện giữa các ô nhớ và lập trình viên. Lập trình viên không cần lưu tâm về vị trí ô nhớ mà để cho hệ điều hành đảm nhiệm. Vậy việc điều khiển bộ nhớ [vị trí mà dữ liệu thích hợp lưu trữ] sẽ do hệ điều hành đảm trách, chứ không phải lập trình viên.2.2 Hằng [constant]Trong trường hợp ta dùng biến, giá trị được lưu sẽ thay đổi. Một biến tồn tại từ lúc khai báo đến khi thoát khỏi phạm vi dùng nó. Những câu lệnh trong phạm vi khối mã này có thể truy cập giá trị của 2 Lập trình cơ bản Cbiến, và thậm chí có thể thay đổi giá trị của biến. Trong thực tế, đôi khi cần sử dụng một vài khoản mục mà giá trị của chúng không bao giờ bị thay đổi.Một hằng là một giá trị không bao giờ bị thay đổi. Ví dụ, 5 là một hằng, mà giá trị toán học luôn là 5 và không thể bị thay đổi bởi bất cứ ai. Tương tự, ‘Black’ là một hằng, nó biểu thị cho màu đen. Khi đó, 5 được gọi là hằng số [numeric constant], ‘Black’ được gọi là hằng chuỗi [string constant]. 2.3 Định danh [Identifier]Tên của các biến [variables], các hàm [functions], các nhãn [labels] và các đối tượng khác nhau do người dùng định nghĩa gọi là định danh. Những định danh này có thể chứa một hay nhiều ký tự. Ký tự đầu tiên của định danh phải là một chữ cái hay một dấu gạch dưới [ _ ]. Các ký tự tiếp theo có thể là các chữ cái, các con số hay dấu gạch dưới.Arena, s_count, marks40, và class_one là những định danh đúng. Các ví dụ về các định danh sai là 1sttest, oh!god, và start... end.Các định danh có thể có chiều dài tuỳ ý, nhưng số ký tự trong một biến được nhận diện bởi trình biên dịch thì thay đổi theo trình biên dịch. Ví dụ, nếu một trình biên dịch nhận diện 31 con số có ý nghĩa đầu tiên cho một tên định danh thì các câu sau sẽ hiển thị cùng một kết quả:Đây là biến testing.... testingĐây là biến testing.... testing ... testingCác định danh trong C có phân biệt chữ hoa và chữ thường, cụ thể, arena thì khác ARENA.2.3.1 Các nguyên tắc cho việc chỉ đ tặ tên Các quy tắc đặt tên biến khác nhau tuỳ ngôn ngữ lập trình. Tuy nhiên, vài quy ước chuẩn được tuân theo như : Tên biến phải bắt đầu bằng một ký tự chữ cái. Các ký tự theo sau ký tự đầu bằng một chuỗi các chữ cái hoặc con số và cũng có thể bao gồm ký tự đặc biệt như dấu gạch dưới. Tránh dùng ký tự O tại những vị trí mà có thể gây lầm lẫn với số không [0] và tương tự chữ cái l [chữ thường của chữ hoa L] có thể lầm lẫn với số 1.  Tên riêng nên tránh đặt tên cho biến. Theo tiêu chuẩn C các chữ cái thường và hoa thì xem như khác nhau ví dụ. biến ADD, add và Add là khác nhau.  Việc phân biệt chữ hoa và chữ thường khác nhau tuỳ theo ngôn ngữ lập trình. Do đó, tốt nhất nên đặt tên cho biến theo cách thức chuẩn.  Tên một biến nên có ý nghĩa, gợi tả và mô tả rõ kiểu dữ liệu của nó. Ví dụ, nếu tìm tổng của hai số thì tên biến lưu trữ tổng nên đặt là sum [tổng]. Nếu đặt tên là s hay ab12 thì không hay lắm.Biến và Kiểu dữ liệu 32.3.2 Từ khóa [Keywords] Tất cả các ngôn ngữ dành một số từ nhất định cho mục đích riêng. Những từ này có một ý nghĩa đặc biệt trong ngữ cảnh của từng ngôn ngữ, và được xem là “từ khóa”. Khi đặt tên cho các biến, chúng ta cần bảo đảm rằng không dùng bất cứ từ khóa nào làm tên biến.Tên kiểu dữ liệu tất cả được coi là từ khóa.Do vậy, đặt tên cho một biến là int sẽ phát sinh một lỗi, nhưng đặt tên cho biến là integer thì không.Vài ngôn ngữ lập trình yêu cầu lập trình viên chỉ ra tên của các biến cũng như kiểu dữ liệu của nó trước khi dùng biến đó thật sự. Bước này được gọi là khai báo biến. Ta sẽ nói rõ bước này trong phần tiếp theo khi thảo luận về các kiểu dữ liệu. Ðiều quan trọng cần nhớ bây giờ là bước này giúp hệ điều hành thật sự cấp phát một khoảng không gian vùng nhớ cho biến trước khi bắt đầu sử dụng nó.2.4 Các kiểu dữ liệu [Data types]Các loại dữ liệu khác nhau được lưu trữ trong biến là : Số [Numbers]• Các số nguyên. Ví dụ : 10 hay 178993455.• Các số thực.Ví dụ : 15.22 hay 15463452.25.• Các số dương.• Các số âm. Tên.Ví dụ : John. Giá trị luận lý.Ví dụ : Y hay N.Khi dữ liệu được lưu trữ trong các biến có kiểu dữ liệu khác nhau, nó yêu cầu dung lượng bộ nhớ sẽ khác nhau.Dung lượng bộ nhớ được chỉ định cho một biến tùy thuộc vào kiểu dữ liệu của nó.Ðể chỉ định bộ nhớ cho một đơn vị dữ liệu, chúng ta phải khai báo một biến với một kiểu dữ liệu cụ thể.Khai báo một biến có nghĩa là một vùng nhớ nào đó đã được gán cho biến. Vùng bộ nhớ đó sau này sẽ được tham chiếu thông qua tên của biến. Dung lượng bộ nhớ được cấp cho biến bởi hệ điều hành phụ thuộc vào kiểu dữ liệu được lưu trữ trong biến. Vì vậy, một kiểu dữ liệu sẽ mô tả loại dữ liệu phù hợp với biến.Dạng thức chung cho việc khai báo một biến:Kiểu dữ liệu [Tên biến]Kiểu dữ liệu thường được dùng trong các công cụ lập trình có thể được phân chia thành:1 Kiểu dữ liệu số - lưu trữ giá trị số.4 Lập trình cơ bản C2 Kiểu dữ liệu ký tự – lưu trữ thông tin mô tảNhững kiểu dữ liệu này có thể có tên khác nhau trong các ngôn ngữ lập trình khác nhau. Ví dụ, một kiểu dữ liệu số được gọi trong C là int trong khi đó tại Visual Basic được gọi là integer. Tương tự, một kiểu dữ liệu ký tự được đặt tên là char trong C trong khi đó trong Visual Basic nó được đặt tên là string. Trong bất cứ trường hợp nào, các dữ liệu được lưu trữ luôn giống nhau. Ðiểm khác duy nhất là các biến được dùng trong một công cụ phải được khai báo theo tên của kiểu dữ liệu được hỗ trợ bởi chính công cụ đó.C có 5 kiểu dữ liệu cơ bản. Tất cả những kiểu dữ liệu khác dựa vào một trong số những kiểu này. 5 kiểu dữ liệu đó là: int là một số nguyên, về cơ bản nó biểu thị kích cỡ tự nhiên của các số nguyên [integers]. float và double được dùng cho các số có dấu chấm động. Kiểu float [số thực] chiếm 4 byte và có thể có tới 6 con số phần sau dấu thập phân, trong khi double chiếm 8 bytes và có thể có tới 10 con số phần thập phân. char chiếm 1 byte và có khả năng lưu một ký tự đơn [character].  void được dùng điển hình để khai báo một hàm không trả về giá trị. Ðiều này sẽ được nói rõ hơn trong phần hàm.Dung lượng nhớ và phạm vi giá trị của những kiểu này thay đổi theo mỗi loại bộ xử lý và việc cài đặt các trình biên dịch C khác nhau. Lưu ý: Các con số dấu chấm động được dùng để biểu thị các giá trị cần có độ chính xác ở phần thập phân. Kiểu dữ liệu intLà kiểu dữ liệu lưu trữ dữ liệu số và là một trong những kiểu dữ liệu cơ bản trong bất cứ ngôn ngữ lập trình nào. Nó bao gồm một chuỗi của một hay nhiều con số.Thí dụ trong C, để lưu trữ một giá trị số nguyên trong một biến tên là ‘num’, ta khai báo như sau:int num;Biến num không thể lưu trữ bất cứ kiểu dữ liệu nào như “Alan” hay “abc”. Kiểu dữ liệu số này cho phép các số nguyên trong phạm vi -32768 tới 32767 được lưu trữ. Hệ điều hành cấp phát 16 bit [2 byte] cho một biến đã được khai báo kiếu int. Ví dụ: 12322, 0, -232. N u chúng ta gán giá tr 12322 choế ịnum thì bi n này là bi n ki u s nguyên và 12322 là h ng sế ế ể ố ằ ố .nguyên Kiểu dữ liệu số thực [float]Một biến có kiểu dữ liệu số thực được dùng để lưu trữ các giá trị chứa phần thập phân. Trình biên dịch phân biệt các kiểu dữ liệu float và int.Ðiểm khác nhau chính của chúng là kiểu dữ liệu int chỉ bao gồm các số nguyên, trong khi kiểu dữ liệu float có thể lưu giữ thêm cả các phân số.Ví dụ, trong C, để lưu trữ một giá trị float trong một biến tên gọi là ‘num’, việc khai báo sẽ như sau :float num;Biến và Kiểu dữ liệu 5Biến đã khai báo là kiểu dữ liệu float có thể lưu giá trị thập phân có độ chính xác tới 6 con số. Biến này được cấp phát 32 bit [4 byte] của bộ nhớ. Ví dụ: 23.05, 56.5, 32. . , . .N u chúng ta gán giá tr 23 5 cho num thì bi n num là bi n s th c và 23 5 là m t h ng s th cế ị ế ế ố ự ộ ằ ố ự Kiểu dữ liệu doubleKiểu dữ liệu double được dùng khi giá trị được lưu trữ vượt quá giới hạn về dung lượng của kiểu dữ liệu float. Biến có kiểu dữ liệu là double có thể lưu trữ nhiều hơn khoảng hai lần số các chữ số của kiểu float.Số các chữ số chính xác mà kiểu dữ liệu float hoặc double có thể lưu trữ tùy thuộc vào hệ điều hành cụ thể của máy tính.Các con số được lưu trữ trong kiểu dữ liệu float hay double được xem như nhau trong hệ thống tính toán. Tuy nhiên, sử dụng kiểu dữ liệu float tiết kiệm bộ nhớ một nửa so với kiểu dữ liệu double.Kiểu dữ liệu double cho phép độ chính xác cao hơn [tới 10 con số]. Một biến khai báo kiểu dữ liệu double chiếm 64 bit [8 byte] trong bộ nhớ.Thí dụ trong C, để lưu trữ một giá trị double cho một biến tên ‘num’, khai báo sẽ như sau:double num; . , .N u chúng ta gán giá tr 23 34232324 cho num thì bi n num là bi n ki u double và 23 34232324ế ị ế ế ể .là m t h ng ki u doubleộ ằ ể Kiểu dữ liệu charKiểu dữ liệu char được dùng để lưu trữ một ký tự đơn. Một kiểu dữ liệu char có thể lưu một ký tự đơn được bao đóng trong hai dấu nháy đơn [‘’]. Thí dụ kiểu dữ liệu char như: ‘a’, ‘m’, ‘$’ ‘%’.Ta có thể lưu trữ những chữ số như những ký tự bằng cách bao chúng bên trong cặp dấu nháy đơn. Không nên nhầm lẫn chúng với những giá trị số. Ví dụ, ‘1’, ‘5’ và ‘9’ sẽ không được nhầm lẫn với những số 1, 5 và 9.Xem xét những câu lệnh của mã C dưới đây:char gender;gender='M';Hàng đầu tiên khai báo biến gender của kiểu dữ liệu char. Hàng thứ hai lưu giữ một giá trị khởi tạo cho nó là ‘M’. Biến gender là một biến ký tự và ‘M’ là một hằng ký tự. Biến này được cấp phát 8 bit [1 byte] trong bộ nhớ. Kiểu dữ liệu void6 Lập trình cơ bản C

Video liên quan

Chủ Đề