{
static void Main(string[] args)
{
int x = 9;
System.Console.WriteLine("Sau khi khoi tao: x ={0}", x); Console.Write("Nhap gia tri moi = ");
x = int.Parse(Console.ReadLine());//chuyển đổi chuỗi nhập từ bàn phím sang kiểu số nguyên
System.Console.WriteLine("Sau khi gan: x ={0}", x); System.Console.ReadLine();
}
}
}
Kết quả chương trình:
Hình 2.1: Kết quả chương trình ví dụ 2.3
Chương trình trên thực hiện khai báo biến x và khởi gán giá trị ban đầu bằng 9, khi hiển thị x thì x có giá trị là 9, sau đó thực hiện phép gán biến x với giá trị mới là 15 thì biến sẽ có giá trị là 15 và xuất kết quả là 15.
Gán giá trị xác định cho biến
C# đòi hỏi các biến phải được khởi tạo trước khi được sử dụng. Để kiểm tra luật này, thực hiện thay đổi dòng lệnh khởi tạo biến bien1 trong ví dụ 2.3 như sau:
Ví dụ 2.4: Sử dụng một biến không khởi tạo.
namespace Vidu2_4
{
class Program
{
static void Main(string[] args)
{
int x;
System.Console.WriteLine("Sau khi khoi tao: x ={0}", x);
x = int.Parse(Console.ReadLine());//chuyển đổi chuỗi nhập từ bàn phím sang kiểu số nguyên
System.Console.WriteLine("Sau khi gan: x ={0}", x); System.Console.ReadLine();
}
}
}
Khi biên dịch chương trình trên thì trình biên dịch C# sẽ thông báo một lỗi sau: Use of unassigned local variable ‗x
Việc sử dụng biến khi chưa được khởi tạo là không hợp lệ trong C#.Tuy nhiên không nhất thiết lúc nào cũng phải khởi tạo biến nhưng để dùng được thìbắt buộc phải gán cho chúng một giá trị trước khi có một lệnh nào sử dụng đến biến đó.
Ví dụ 2.5: Biến không được khi tạo nhưng sau đó được gán giá trị.
namespace Vidu2_5
{
class Program
{
static void Main(string[] args)
{
x = 9;
x = 15;
}
int x;
System.Console.WriteLine("Sau khi khoi tao: x ={0}", x);
System.Console.WriteLine("Sau khi gan: x ={0}", x); System.Console.ReadLine();
}
}
Tầm hoạt động của biến
Tầm hoạt động của một biến là vùng mã lệnh mà trong đó biến có thể truy xuất.
Nói chung, tầm hoạt động của biến được xác định theo các quy tắc sau:
- Một trường dữ liệu (field), còn được gọi là một biến thành phần của một lớp đối tượng sẽ có tầm hoạt động trong phạm vi lớp chứa nó.
- Một biến cục bộ sẽ có tầm hoạt động trong khối khai báo nó (trong cặp dấu ngoặc
nhọn { })
- Một biến cục bộ được khai báo trong các lệnh lặp for, while, … sẽ có tầm hoạt động trong thân vòng lặp
Lưu ý, trong cùng phạm vi hoạt động, các biến không được phép trùng tên.
2.3.3. Hằng
Để khai báo một hằng sử dụng từ khóa const và cú pháp sau:
const kiểu_dữ_liệu tên_hằng = giá_trị;
Ví dụ 2.6: Sử dụng hằng.
namespace Vidu2_6
{
class Program
{
static void Main(string[] args)
{
const int DoSoi = 100; // Độ C const int DoDong = 0; // Độ C
System.Console.WriteLine( "Do dong cua nuoc {0}", DoDong ); System.Console.WriteLine( "Do soi cua nuoc {0}", DoSoi ); System.Console.ReadLine();
}
}
}
Kết quả chương trình:
Hình 2.2: Kết quả chương trình ví dụ 2.6.
Ghi chú: Trong chương trình nếu có một câu lệnh làm thay đổi giá trị của hằng thì trình biên dịch sẽ phát sinh lỗi: “The left-hand side of an assignment must be a variable, property or indexer”
2.4. Biểu thức
2.4.1. Biểu thức
Biểu thức được tạo nên bằng sự kết hợp giữa các toán hạng và toán tử. Toán hạng gồm: hằng, biến, hàm,… Trong các phần tiếp theo dưới đây, sẽ nói đến các toán tử.Ngoài ra, biểu thức được phân loại theo kiểu giá trị ví dụ như nguyên hoặc thực. Trong các mệnh đề logic, biểu thức được phân thành đúng (true) và sai (false).
2.4.2. Lệnh gán và biểu thức
Biểu thức gán là biểu thức có dạng: v=e
Trong đó v là một biến, e là một biểu thức cùng kiểu với v. Giá trị của biểu thức gán là giá trị của e, kiểu của nó là kiểu của v. Nếu đặt dấu; vào sau biểu thức gán sẽ thu được phép toán gán có dạng:
v=e;
Biểu thức gán có thể sử dụng trong các phép toán và các câu lệnh như các biểu thức khác. Ví dụ như khi viết
a=b=5;
thì điều đó có nghĩa là gán giá trị của biểu thức b=5 cho biến a. Kết qủa là b=5 và a=5.
Hoàn toàn tương tự như:
a=b=c=d=6; //gán 6 cho cả a, b, c và d
z=(y=2)*(x=6); //ở đây * là phép toán nhân, gán 2 cho y, 6 cho x và
//nhân hai biểu thức sẽ cho z=12.
2.4.3. Các phép toán số học
Các phép toán hai ngôi số học là:
Ý nghĩa | Ví dụ | |
+ | Phép cộng | a+b |
- | Phép trừ | a-b |
* | Phép nhân | a*b |
/ | Phép chia | a/b Khi chia hai số nguyên thì C# sẽ bỏ phần phân số, hay bỏ phần dư. Khi chia cho số thực có kiểu như float, double, hay decimal thì kết quả chia đượctrả về là một số thực. |
% | Phép lấy phần dư | a%b (Cho phần dư của phép chia a cho b) |
Có thể bạn quan tâm!
- Lập trình cơ bản - 1
- Lập trình cơ bản - 2
- Các Bước Lựa Chọn Một Project Mới Visual Studio 2010
- Kết Quả Chương Trình Ví Dụ 2.9
- Kết Quả Chương Trình Ví Dụ2.12.
- Kết Quả Chương Trình Ví Dụ 2.18.
Xem toàn bộ 212 trang tài liệu này.
Bảng 2.3: Các phép toán số học hai ngôi
Có phép toán một ngôi (-), ví du -(a+b) sẽ đảo giá trị của phép cộng (a+b). Ví dụ 2.7: Minh họa sử dụng các phép toán các số nguyên, thực...
namespace Vidu2_7
{
class Program
{
static void Main(string[] args)
{
int i1, i2; float f1, f2; double d1, d2;
decimal dec1, dec2; i1 = 17;
i2 = 4; f1 = 17f;
f2 = 4f; d1 = 17;
d2 = 4;
dec1 = 17;
dec2 = 4;
Console.WriteLine("i1 + i2 = t{0}", i1 + i2); Console.WriteLine("i1 - i2 = t{0}", i1 - i2);
Console.WriteLine("i1 * i2 = t{0}", i1 * i2); Console.WriteLine("nCac phep chia:"); Console.WriteLine(" Integer: i1/i2 = t{0}", i1/i2); Console.WriteLine(" Float: f1/f2 = t{0}", f1 / f2); Console.WriteLine(" Double: d1/d2 = t{0}", d1 / d2);
Console.WriteLine(" Decimal: dec1/dec2 = t{0}", dec1 / dec2); Console.WriteLine("nPhep toan lay du: i1%i2 = t{0}", i1%i2); Console.ReadLine();
}
}
}
Kết quả chương trình:
Hình 2.3: Kết quả chương trình ví dụ 2.7
2.4.4. Các phép toán quan hệ và logic Các phép toán quan hệ
Những toán tử quan hệ được dùng để so sánh giữa hai giá trị và trả về kết quả là một giá trị logic kiểu bool (true hay false). Các toán tử quan hệ trong ngôn ngữ C# được trình bày trong bảng 2.4. Các toán tử trong bảng được minh họa với hai biến là value1 và value2, trong đó value1 có giá trị là 100 và value2 có giá trị là 50.
Ý nghĩa | Biểu thức so sánh | Kết quả so sánh | |
== | So sánh bằng | value1 == 100 value1 == 50 | true false |
!= | Không bằng | value2 != 100 value2 != 90 | false true |
> | Lớn hơn | value1 > value2 value2 > value1 | true false |
>= | Lớn hơn hay bằng | value2 >= 50 | true |
< | Nhỏ hơn | value1 < value2 value2 < value1 | false true |
Nhỏ hơn hay bằng | value1 <= value2 | false |
Bảng 2.4: Các toán tử so sánh (giả sử value1 = 100 và value2 = 50).
Như trong bảng 2.4 trên lưu ý toán tử so sánh bằng (==), toán tử này được ký hiệu bởi hai dấu bằng (=) liền nhau và cùng trên một hàng, không có bất kỳ khoảng trống nào xuất hiện giữa chúng. Trình biên dịch C# xem hai dấu này như một toán tử.
Phép toán logic
Bảng 2.5 liệt kệ ba phép toán logic, bảng này cũng sử dụng hai biến minh họa là x và y trong đó x có giá trị là 5 và y có giá trị là 7
Ký hiệu | Biểu thức logic | Giá trị | Logic | |
Và | && | (x == 3) && (y ==7) | false | Cả hai điều kiện phải đúng |
Hoặc | || | (x == 3) || (y == 7) | true | Chỉ cần một điều kiện đúng |
Phủ định | ! | ! (x == 3 ) | true | Biểu thức trong ngoặc phải sai. |
Bảng 2.5: Các toán tử logic (giả sử x = 5, y = 7).
2.4.5. Phép toán tăng giảm Tính toán và gán trở lại
Do việc tăng hay giảm giá trị của một biến rất thường xảy ra trong khi tính toán nên C# cung cấp các phép toán tự gán (self- assignment). Bảng 2.6 sau liệt kê các phép toán tự gán.
Ý nghĩa | |
+= | Cộngthêm giá trị toán hạng bên phải vào giá trị toán hạng bên trái |
-= | Toán hạng bên trái được trừ bớt đi một lượng bằng giá trị của toán hạng bên phải |
*= | Toán hạng bên trái được nhân với một lượng bằng giá trị của toán hạng bên phải. |
/= | Toán hạng bên trái được chia với một lượng bằng giá trị của toán hạng bên phải. |
%= | Toán hạng bên trái được chia lấy dư với một lượng bằng giá trị của toán hạng bên phải. |
Bảng 2.6: Mô tả các phép toán tự gán.
Ví dụ có biến nguyên a với giá trị ban đầu bằng 5, để cộng thêm 10 vào giá trị của biến a thì hai cách viết sau là tương đương:
a = a + 10;
hoặc sử dụng phép toán tự gán:
a+=10;
Do việc tăng hay giảm 1 rất phổ biến trong lập trình, C# cung cấp hai toán tử đặc biệt là tăng một (++) hay giảm một (--). Để tăng giá trị của một biến bienDem lên 1 có thể viết như sau:
bienDem++;
Ví dụ vớin=5, khi thực hiện:
++n sẽ cho n=6
--n sẽ cho n=4
Có thể viết phép toán ++ và -- trước hoặc sau toán hạng như sau : ++n, n++, --
n, n--.
Sự khác nhau của ++n và n++ ở chỗ: trong phép n++ thì tăng sau khi giá trị của
nó đã được sử dụng, còn trong phép ++n thì n được tăng trước khi sử dụng. Sự khác nhau giữa n-- và --n cũng như vậy.
Ví dụ với n = 5, khi thực hiện:
x=++n sẽ cho x=6 và n=6
x=n++ sẽ chon x=5 và n=6
Ví dụ 2.8: Minh hoạ sử dụng toán tử tăng trước và tăng sau khi gán.
namespace Vidu2_8
{
class Program
{
static void Main(string[] args)
{
b= a++; a= 20;
b= ++a;
}
}
int a = 10; int b;
Console.WriteLine("Thuc hien tang sau: {0}, {1}", a, b);
Console.WriteLine("Thuc hien tang truoc: {0}, {1}", a, b); Console.ReadLine();
}
Kết quả chương trình:
Hình 2.4: Kết quả chương trình ví dụ 2.8.
Các phép toán khác
Bảng 2.7 mô tả một số các phép toán khác có trong C#
Mô tả | Ví dụ | |
sizeof() | Trả lại kích thước của một kiểu dữ liệu | sizeof(int), trả về 4. |
typeof() | Trả lại kiểu của một lớp nào đó | typeof(int), trả về System.Int32 |
? : | Biểu thức điều kiện | (Điều kiện)?X:Y, trả về X nếu Điều kiện đúng và trả về Y nếu Điều kiện là sai. |
is | Xác định xem một đối tượng có phải có kiểu nào đó hay không | |
as | Chuyển đổi không phát sinh lỗi nếu chuyển đổi sai |
Bảng 2.7: Một số các phép toán khác có trong C#
2.4.6. Thứ tựưu tiên các phép toán
Trình biên dịch phải xác định thứ tự thực hiện các toán tử trong trường hợp một biểu thức có nhiều phép toán. Bảng 2.8 liệt kê thứ tự độ ưu tiên các phép toán trong C#.
Loại toán tử | Toán tử | Thứ tự | |
1 | Phép toán cơ bản | (x) x.y f(x) a[x] x++ x—new typeof sizeof checked unchecked | Trái |
2 | Phép toán một ngôi | + - ! ~ ++x --x (T)x | Trái |
3 | Phép nhân | * / % | Trái |
4 | Phép cộng | + - | Trái |