Tải bản đầy đủ (.ppt) (32 trang)

Bài 3: Các phép toán - Khai báo hằng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (382.34 KB, 32 trang )


LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Bài 3 Các phép toán – khai báo hằng
Nội dung
Các phép toán trên các kiểu dữ liệu cơ
bản
Kiểu liệt kê (enumeration)
Hằng

Các phép toán -Operators
Tạo 1 project mới để thử nghiệm các phép toán

Đặt tên cho tập tin class này . Ví dụ OperarorDemo.cs


Nhập thử chương trình sau
namespace Example1
{
class OperatorDemo
{
static void Main(string[] args)
{
float a = 5.5f;
float b = 2.0f;
float c;
int i = 7;
int j = 2;
int k;

c = a + b;
Console.WriteLine("c = {0}",c);


c = a - b;
Console.WriteLine("c = {0}",c);
c = a * b;
Console.WriteLine("c = {0}",c);
c = a / b;
Console.WriteLine("c = {0}",c);
k = i + j;
Console.WriteLine("k = {0}",k);
k = i - j;
Console.WriteLine("k = {0}",k);

k = i * j;
Console.WriteLine("k = {0}",k);
}
}
}

Kết quả in ra :
c = 7.5
c = 3.5
c = 11
c = 2.75
k = 9
k = 5
k = 14
Press any key to continue

Nhận xét

Lưu ý phép chia các số nguyên


int i = 7;
int j = 2;
int k;
k = i / j;
Console.WriteLine("k is {0}",k}

Kết quả in ra :
k is 3

Phép chia 7/2 cho kết quả là 3.

int i = 7;
int j = 2;
double d;
d = i / j;

System.Console.WriteLine(d); /////????

Phép chia lấy phần dư

Phép chia lếy phần dư : Áp dụng cho 2
số nguyên.

Ký hiệu : %

Ví dụ

7 % 2 = 1


11 % 3 = 2

8 % 4 = 0

Ví dụ

using System;
namespace Example2
{
class ModuleExample
{
static void Main(string[] args)
{
int a = 7;
int b = 2;
int c;
c = a % b;
Console.WriteLine("c is {0}",c);
} } }

Kết quả:
c is 1

Phép toán tự gán
Self Assignment

Lý do : Trong lập trình thường xuất hiện các chỉ
thị như vậy.

double d = 59.0;


d = d * 2.0;
d = d - 5.0;

C# cung cấp nhiều phép toán tự gán như +=,
-=, *=, /=

Ví dụ Dùng phép toán tự gán

d = d * 2.0; d *= 2.0;

d = d + 7.0; d += 7.0;

d = d - 5.0; d -= 5.0;

d = d / 2.0; d /= 2.0;

Ví dụ

using System;
namespace Example3
{
class ShortHandExample
{
static void Main(string[] args)
{
int i = 2;
i += 2;
Console.WriteLine("i is {0}",i);
i *= 3;

Console.WriteLine("i is {0}",i);
} } }

Kết quả :
i is 4
i is 12

Kết hợp phép toán-độ ưu tiên

Xét thử biểu thức sau 5 * 2 + 6 * 3
Có thể là
5 * 2 + 6 * 3
10 + 6 * 3
10 + 18
28
Có thể là
5 * 2 + 6 * 3
5 * 8 * 3
40 * 3
120
Có thể là
5 * 2 + 6 * 3
10 + 6 * 3
16 * 3
48


Trường hợp 1 chính là cách biểu thức được tính
toán trong chương trình


Lý do : Độ ưu tiên của các toán tử

Ghi nhớ PEMDAS. : các phép toán có độ ưu tiên
theo qui tắc sau:
parenthesis exponents multiplication division
addition subtraction
Xem lại ví dụ
5 * 2 + 6 * 3
Phép nhân có độ ưu tiên cao hơn.
10 + 18
Sau đó thi hành phép cộng.
28

• Sử dụng dấu ( và ) để thay đổi thứ tự tính toán.
5 * ( 2 + 6 ) * 3
5 * 8 * 3
40 * 3
120

Xem ví dụ sau.
4 * 3 / 2
Có thể là
4 * 3 / 2
4 * 1
4
Có thể là
4 * 3 / 2
12 / 2
6


Trả lời

Giá trị biểu thức phụ thuộc vào qui tắc
thực hiện từ trái sang phải hay từ phải
sang trái

Các toán tử nhị phân (nhận 2 toán
hạng) trừ toán tử gán là các toán tử liên
kết trái
Ví dụ 3 + 8 – 12 * 8

Các toán tử gán và điều kiện là toán tử
phải
Ví dụ a = b = c

using System
class Test
{
static vod Main()
{
int a=1, b = 2, c =3 ;
Console.Writeln(“ a = {0}, b={1},c= {3}”,a,b,c);
a = b = c;
Console.Writeln(“ a = {0}, b={1},c= {3}”,a,b,c);
} }
Kết quả in ra ????

Toán tử tự tăng/giảm

int a = 5;

float b = 16.0f;
Console.WriteLine("a = {0}", a);
a++;
Console.WriteLine("a = {0}", a);
a ;
Console.WriteLine("a = {0}", a);
Console.WriteLine("b = {0}", b);
b++;
Console.WriteLine("b = {0}", b);
b ;
Console.WriteLine("b = {0}", b);


Kết quả:
a = 5
a = 6
a = 5
b = 16.0
b = 17.0
b = 16.0

Toán tử ++ av2 – có thề đi trước hay sau 1 biến
Postfix: a++, a
Prefix: ++a, a
int a = 5, b;
b = a++;

Sau phép gán thì b = 5, a = 6;
int a = 5, b;
b = ++a;


Sau phép gán thì b = 6, a = 6;

Bảng tổng kết toán tử và độ ưu tiên
Loại toán tử Toán Tử
Gốc (Primary) (x) x.y f(x) a[x] x++ x– new …
Đơn nguyên (1 toán hạng) + - ! ~ ++x x (T)x
Tích * / %
Tổng + -
Dịch chuyển (Shift) << >>
Quan hệ > < >= <=
Bằng = =
AND, OR, XOR logic & | ^
AND, OR điều kiện && ||
Điều kiện ? :
Gán = *= /= %= += -= <<= >>= …

Kiểu liệt kê- Enumerations

Là 1 trong các kiểu dữ liệu do NSD xây dựng. Nhắc lại:
User-defined data types trong C# : lớp(classes), giao
diện (interfaces), cấu trúc(structs) và liệt kê
(enumerations).

Kiểu liệt kê cho phép thể hiện 1 danh sách các phần tử
có quan hệ với nhau , số lượng phần tử giới hạn và dùng
các tên gợi nhớ (symbolic constants) để mô tả.

Ví dụ


enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat}

Ngầm định : tên đầu tiên trong tập liệt kê có giá trị là 0.
Các giá trị kế tiếp tự động tăng lên 1. Trong ví dụ trên
Sun = 0, Mon = 1, Tue = 2, và tiếp theo.

Có khả năng thiết lập giá trị cho từng phần tử trong tập
liệt kê.

enum Days {Sun = 1, Mon, Tue, Wed = 57, Thu, Fri, Sat}


Trong ví dụ trên Sun = 1, Mon = 2, Tue =
3, Wed = 57, Thu = 58, Fri = 59, Sat =
60

Cũng có thể gán 1 giá trị cho nhiều phần
tử khác nhau trong 1 tập liệt kê.

enum Days {Sat = 0, Sun = 0, Mon, Tue, Wed, Thu,
Fri}
• Sat=0,Sun=0, Mon=1,Tue=2,….Fri=5.
• Ngầm định : các phần tử trong tập liệt kê
tương ứng với 1 giá trị kiểu int . Tuy vậy,
có thể sử dụng 1 kiểu nguyên khác.

enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat}????//int
enum Days : int {Sun, Mon, Tue, Wed, Thu, Fri,
Sat}????//tương đương
enum Days : short {Sun, Mon, Tue, Wed, Thu, Fri, Sat}

enum Days : ulong {Sun, Mon, Tue, Wed, Thu, Fri, Sat}

Sử dụng kiểu liệt kê

Một trong những ưu đêểm của kiểu liệt kê là ta có thể
khai báo các biến thuộc kiểu này (do nó là 1 kiểu dữ liệu)

Ta cũng có thể gán 1 giá trị trong kiểu liệt kê cho biến
tương ứng

enum Days {Sun = 1, Mon, Tue, Wed, Thu, Fri, Sat}
Days dayOfWeek;


dayOfWeek = Days.Mon; // Gán 2 cho biến dayOfWeek

dayOfWeek = 8; // báo lỗi

chỉ có thể gán dayOfWeek với 1 trong các giá trị của kiểu liệt kê
Days, ví dụ Days.Tue

Ví dụ
using System;
namespace Example2
{
enum Days {Sun = 1, Mon, Tue, Wed, Thu, Fri, Sat}
class EnumerationDemo
{
static void Main(string[] args)
{

Days dayOfWeek;
dayOfWeek = Days.Sun;
Console.WriteLine("The day of the week is
{0}",dayOfWeek);
dayOfWeek = Days.Fri;
Console.WriteLine("The day of the week is
{0}",dayOfWeek);
Console.WriteLine("Friday has value {0}",(int) dayOfWeek);
} } }


Kết quả in ra :
The day of the week is Sun
The day of the week is Fri
Friday has value 6

Ngầm định : Phương thức WriteLine sẽ
in ra tên phần tử trong kiểu liệt kê.
Trong ví dụ trên sẽ in ra Sun và Fri , chứ
không in ra 1 và 6.

Để in giá trị ứng với 1 phần tử kiểu liệt
kê, ta phải thực hiện ép kiểu.

Hằng - Constants

Thường có nhu cầu về việc thể hiện các
đại lương có giá trị không đổi trong khi
chương trình thi hành


Ví dụ : tốc độ ánh sáng, phần trăm lãi
suất/tháng

Có thể sử dụng hằng trong chương trình
theo 3 cách : mô tả giá trị trực
tiếp(literal constant), sử dụng tên mô tả
(symbolic constant), sử dụng tên trong
kiểu liệt kê

×