Ở bài học trước, GHI CHÚ TRONG C++ (Comments in C++), bạn đã đã nắm được các loại comment trong C++, và đã biết sử dụng nó như thế nào cho hợp lý. Show Hôm nay, mình sẽ giới thiệu các bạn về Biến trong C++ (Variables). Nội dung:Trong bài ta sẽ cùng tìm hiểu các vấn đề:
Biến trong C++Giống như toán học, trong lập trình, các bạn cũng sẽ giải những bài toán. Ví dụ: Bạn có bài toán giải phương trình bậc nhất: 2x - 6 = 0. Và bạn viết một chương trình để giải nó, như thế này: #include <iostream> int main() { // Xuất thông báo "2x - 6 = 0" ra màn hình console std::cout << "2x - 6 = 0" << std::endl; // Xuất kết quả nghiệm x std::cout << "x = " << (6 / 2) << std::endl; return 0; }Nhìn có vẻ đã ổn, bây giờ bạn tiếp tục muốn giải một phương trình bậc nhất khác: 6x + 9 = 0. Vấn đề phát sinh từ đây, khi bạn muốn giải những bài toán với những số khác nhau, bạn phải viết lại nhiều lần. Nhưng bạn muốn chỉ viết chương trình một lần nhưng sử dụng trong mọi trường hợp, vậy nên khái niệm biến trong lập trình đã ra đời.
Bài học hôm nay, mình chỉ đề cập đến các biến số nguyên (integer variables). Số nguyên là các số nguyên dương (1, 2, 3, …), các số đối (-1, -2, -3, …) và số 0. Biến số nguyên (integer variables) là những biến dùng để lưu trữ các số nguyên. Ví dụ: // Khai báo biến số nguyên nVarName // Giả sử nVarName được cấp vùng nhớ tại địa chỉ 0x0069 int nVarName;Đây gọi là một câu lệnh khai báo, khi chương trình được chạy, đến dòng lệnh này, một vùng trong bộ nhớ RAM sẽ được cấp cho biến nVarName này. Ví dụ trong trường hợp này, biến nInterger được cấp một vùng nhớ tại địa chỉ 0x0069 trong RAM, vậy mỗi khi chương trình chạy đến dòng lệnh nào chứa biến nInterger, chương trình sẽ vào vùng nhớ 0x0069 để lấy giá trị của nó. Sau khi một biến được khai báo, bạn muốn biến nVarName có một giá trị để sử dụng, câu lệnh gán với toán tử gán = (assignment operator) sẽ làm việc đó. Ví dụ: // Gán giá trị 96 cho vùng nhớ tại địa chỉ 0x0069 nVarName = 96;Khi chương trình chạy đến câu lệnh này, vùng nhớ tại địa chỉ 0x0069 sẽ được gán giá trị 96. // In giá trị biến nVarName tại địa chỉ 0x0069 ra màn hình std::cout << nVarName;Khởi tạo biến trong C++ (Defining a variable)Ngay khi biến được định nghĩa, bạn lập tức có thể cung cấp một giá trị cho biến. Đó gọi là biến khởi tạo. Trong C++, có 2 cách cơ bản để khởi tạo 1 biến: // Khởi tạo sao chép giá trị cho biến với toán tử gán = int nVarName = 69; // copy initialization // Khởi tạo trực tiếp giá trị cho biến với dấu ngoặc đơn () int nVarName(69); // direct initializationMặc dù khởi tạo trực tiếp giống như một lời gọi hàm, nhưng compiler có thể phân biệt được giữa các biến và các function để có thể xử lý chính xác. Uniform initialization in C++11Khởi tạo sao chép và khởi tạo trực tiếp chỉ sử dụng cho một số loại biến, bạn không thể sử dụng để khởi tạo một biến chứa danh sách các giá trị. Vì vậy, C++ 11 đã cung cấp một cơ chế khởi tạo sử dụng cho tất cả các loại dữ liệu, gọi là khởi tạo đồng nhất (Uniform initialization). // Uniform initialization int nVarName{69}; // Khởi tạo giá trị 69 int nVarName{}; // Khởi tạo giá trị 0 (hoặc empty, tùy kiểu dữ liệu) // Không như khởi tạo trực tiếp và khởi tạo sao chép, Compiler sẽ ném một // thông báo lỗi nếu giá trị khởi tạo đồng nhất không cùng kiểu int nVarName{6.9};Khởi tạo đồng nhất (Uniform initialization) cũng được gọi là danh sách khởi tạo (list initialization) sẽ được hướng dẫn chi tiết từ bài Mảng 1 chiều (Arrays).
Gán giá trị cho biến trong C++ (Variable assignment):int nVarName; nVarName = 96; // Gán giá trị 96 cho biến nVarNameĐịnh nghĩa nhiều biến (Defining multiple variables):C++ cho phép bạn định nghĩa nhiều biến cùng kiểu dữ liệu trong một câu lệnh, cách nhau bởi dấu phẩy “,”. Ví dụ: // Các câu lệnh bên dưới là như nhau int nKteam1; int nKteam2; int nKteam3, nKteam4;Chú ý:
Định nghĩa biến ở đâu (Where to define variables)Trong compiler C cũ bắt buộc lập trình viên khai báo tất cả các biến ở đầu một hàm. Phong cách này ngày nay đã lỗi thời. C++ cho phép định nghĩa các biến ở bất kỳ đâu trong hàm, khuyến khích gần nơi sử dụng biến đó. Một số lý do nên định nghĩa biến gần nơi sử dụng:
Kết luậnQua bài học này, bạn đã nắm được Biến trong C++ (Variables), và đã biết nguyên lý hoạt động và một số kinh nghiệm về biến trong C++. Và bài học này đang đề cập về biến của một số nguyên. Trong C++ vẫn còn rất nhiều kiểu dữ liệu khác, bạn sẽ được học nó trong bài học tiếp theo: KIỂU DỮ LIỆU CƠ BẢN TRONG C++ (Data types) Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”. Thảo luậnNếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.
Tên biến, tên hằng:
Danh sách các từ khóa trong ngôn ngữ C: 1| auto | break | case | char | const | continue | default | do | 2| double | else | enum | extern | float | for | goto | if | 3| int | long | register | return | short | signed | sizeof | static | 4| struct | switch | typedef | union | unsigned | void | volatile | while | Ví dụ:
Khai báo biếnVị trí khai báo: Biến thường được khai báo ở đầu chương trình, đầu hàm hoặc khối lệnh. Có 2 loại biến theo vị trí khai báo:
Cú pháp khai báo biến: 1 <kiểu dữ liệu> <danh sách biến>; (Biến trong ngôn ngữ C luôn gắn liền với một kiểu dữ liệu). Ví dụ: 1int i,j; /* Khai báo biến i,j kiểu số nguyên */ 2char ch; /* Khai báo biến ch kiểu chữ cái ASCII */ 3char name[100]; /* Khai báo xâu kí tự tên name với độ dài lớn nhất là 100 kí tự */ 4i = j = 0; /* Gán giá trị 0 cho 2 biến i,j */ 5ch = 'A'; /* Gán giá trị chữ cái A in hoa cho biến ch */ Khai báo hằngKhai báo hằng thực hiện ở đầu chương trình. Cách 1: Sử dụng bộ tiền xử lí: 1#define <tên hằng> <giá trị của hằng>; Cách 2: 1const <kiểu dữ liệu> <tên hằng> = <giá trị của hằng>; Trên thực tế tên hằng thường được viết in hoa. Phân chia các kiểu giá trị trong ngôn ngữ C
Bảng các kiểu nguyên:
Bảng các kiểu số thực dấu phẩy động:
Một số kí tự điều khiển:
2. Nhập xuất dữ liệu trong C:Để nhập xuất cơ bản trong C, ta sử dụng 2 hàm tiêu chuẩn, được định nghĩa trong thư viện <stdio.h>.
Ví dụ về chương trinh nhập một số và in ra số vừa nhập: 1#include <stdio.h>; 2int main() { 3 float x; 4 printf("aicurious.io\n"); 5 printf("Nhap vao mot so: "); 6 scanf("%f",&x); 7 printf("So ban vua nhap la: %f", x); 8 return 0; 9} a) In dữ liệu ra màn hình:Cú pháp: printf("xâu kí tự…", <các biến và các số>); Việc sử dụng đơn giản nhất là in ra một xâu kí tự: "Xin chao cac ban!": 1printf("Xin chao cac ban!"); Vậy bạn muốn in một biến chứa dữ liệu ra màn hinh thì sao? Ví dụ về in biến chứa 1 số nguyên ra màn hình: 1int number = 12; 2printf ("So duoc in ra: %d",number); Để in giá trị của các biến, số ra màn hình, ta phải sử dụng các đặc tả định dạng bắt đầu với % như trên nhằm đại diện cho các biến, số (%d đại diện cho biến số nguyên number). Các đặc tả định dạng này không được in ra màn hình mà được thay thế bởi các biến, các số đằng sau. Một số đặc tả định dạng cơ bản:
Chú ý:
1char ch = "A"; 2printf ("%d\n", ch); /* In ra 65 */ 3printf ("%c\n", ch); /* In ra A */
Định dạng dữ liệu in ra: % [-] [fwidth] [.p] trong đó: • [fwidth] chiều rộng • [-] căn lề trái • [.p] số kí tự được in ra Ví dụ:
b) Nhập dữ liệu từ bàn phím:Cú pháp: scanf ("xâu kí tự…", <các con trỏ>); Ví dụ ta muốn nhập một số nguyên vào biến a: Lưu ý: Ở đây &a là con trỏ trỏ tới biến a. Chú ý khi nhập xâu kí tự chứa dấu cách (space): Trước khi đọc xâu, chúng ta phải làm sạch bộ đệm bàn phím vì có thể quá trình đọc dữ liệu trước còn lưu lại. Trên Windows chúng ta có lệnh fflush(stdin); , tuy nhiên nó đã bộc lộ khá nhiều hạn chế, nhất là không thể dùng trên Linux nên tôi không sử dụng ở đây. Chúng ta sẽ dùng đoạn lệnh sau trước lệnh nhập vào một chuỗi: 1int c; 2while ( ( c = getchar() ) != EOF && c != '\n' ); Hoặc 1scanf ( "%*[^\n]" ); 2scanf ( "%*c" ); Cách 1: Ta dùng lệnh: 1fgets (name, 100, stdin); với 100 là độ dài lớn nhất của xâu kí tự bạn muốn nhập vào (bạn có thể thay đổi nó) và name là tên biến xâu kí tự. Việc đọc này sẽ lưu vào biến name cả kí tự xuống dòng ở cuối xâu (khi bạn ấn enter để kết thúc nhập xâu là truyền vào bộ đệm kí tự xuống dòng). Cách 2: Ta dùng lệnh: 1scanf ("%[^\n]%*c", name); với name cũng là tên biến xâu kí tự. Đọc cách này sẽ loại bỏ kí tự xuống dòng ở cuối xâu. |