Kết Quả Chương Trình Ví Dụ 2.9


5

Dịch bit

<<>>

Trái

6

Quan hệ

<><= >= is as

Trái

7

So sánh bằng

== !=

Phải

8

Phép toán logicAND

&

Trái

9

Phép toán logicXOR

^

Trái

10

Phép toán logic OR

|

Trái

11

Điều kiện AND

&&

Trái

12

Điều kiện OR

||

Trái

13

Điều kiện

?:

Phải

14

Phép gán

= *= /= %= += -= <<= >>= &=

^= |=

Phải

Có thể bạn quan tâm!

Xem toàn bộ 212 trang tài liệu này.

Bảng 2.8: Thứ tự ưu tiên các phép toán.

Các phép toán được liệt kê cùng loại sẽ có thứ tự theo mục thứ tự của bảng: thứ tự trái tức là độ ưu tiên của các phép toán từ bên trái sang, thứ tự phải thì các phép toán có độ ưu tiên từ bên phải qua trái. Các toán tử khác loại thì có độ ưu tiên từ trên xuống dưới, do vậy các toán tử loại cơ bản sẽ có độ ưu tiên cao nhất và phép toán gán sẽ có độ ưu tiên thấp nhất trong các toán tử.

Biểu thức điều kiện

Hầu hết các toán tử đòi hỏi có một toán hạng như toán tử (++, --) hay hai toán hạng như (+,-,*,/,...). Tuy nhiên, C# còn cung cấp thêm một toán tử có ba toán hạng (?:). Toán tử này có cú pháp sử dụng như sau:

<Biểu thức điều kiện > ? <Biểu thức thứ 1>: <Biểu thức thứ 2>

Toán tử này sẽ xác định giá trị của biểu thức điều kiện và biểu thức điều kiện này phải trả về một giá trị kiểu bool. Khi điều kiện đúng thì <biểu thức thứ 1> sẽ được thực hiện, còn ngược lại điều kiện sai thì <biểu thức thứ 2> sẽ được thực hiện. Có thể diễn giải theo ngôn ngữ tự nhiên thì toán tử này có ý nghĩa: ―Nếu điều kiện đúng thì làm công việc thứ nhất, còn ngược lại điều kiện sai thì làm công việc thứ hai‖. Cách sử dụng toán tử ba ngôi này được minh họa trong ví dụ 2.9 sau.

Ví dụ 2.9: Lập chương trình tìm số lớn nhất của hai số

namespace Vidu2_9

{

class Program

{

static void Main(string[] args)

{

int so1; int so2; int max; so1 = 10;

so2 = 20;

max = so1 > so2 ? so1 : so2;

Console.WriteLine("Gia tri thu nhat {0}, gia tri thu hai {1}, gia tri lon nhat {2}", so1, so2, max);

short x;

int i = 345; x = (short)i;

Console.WriteLine("x = "+x.ToString()); Console.ReadLine();

}

}

}

Kết qủa chương trình:

Hình 2 5 Kết quả chương trình ví dụ 2 9 Trong ví dụ minh họa trên toán tử ba 1

Hình 2.5: Kết quả chương trình ví dụ 2.9

Trong ví dụ minh họa trên toán tử ba ngôi được sử dụng để kiểm tra xem giá trị củaso1 có lớn hơn giá trị của so2, nếu đúng thì trả về giá trị của so1, tức là gán giá trị so1 cho biến max, còn ngược lại thì gán giá trị so2 cho biến max.

2.4.7. Chuyển đổi kiểu giá trị

Những đối tượng của một kiểu dữ liệu này có thể được chuyển sang những đối tượng của một kiểu dữ liệu khác thông qua cơ chế chuyển đổi tường minh hay ngầm định.

Chuyển đổi ngầm định

Chuyển đỗi ngầm định xảy ra khi:

- Ép từ kiểu nhỏ qua kiểu lớn

- Ép từ lớp dẫn xuất qua lớp cơ sở


Ví dụ, có thể gán ngầm định một số kiểu short (2 byte) vào một số kiểu int (4 byte) một cách ngầm định. Sau khi gán hoàn toàn không mất dữ liệu vì bất cứ giá trị nào của short cũng thuộc về int:

short x = 10;

int y = x; // chuyển đổi ngầm định

Tuy nhiên, nếu thực hiện chuyển đổi ngược lại, chắc chắn sẽ bị mất thôngtin. Nếu giá trị của số nguyên đó lớn hơn 32.767 thì nó sẽ bị cắt khi chuyển đổi. Trình biêndịch sẽ không thực hiện việc chuyển đổi ngầm định từ số kiểu int sang số kiểu short:

short x;

int y = 100;

x = y; // Không biên dịch, lỗi!!!

Chuyển đổi tường minh:

- Do lập trình viên chỉ định

- Xảy ra khi: Ép từ kiểu lớn qua kiểu nhỏ (có thể mất giá trị), Ép từ lớp cơ sở qua lớp dẫn xuất

Để thực hiện chuyển đổi tường minh ta có thể sử dụng một trong ba cách sau:

- Để không bị lỗi phải dùng lệnh gán tường minh Ví dụ:

short x;

int y = 500;

x = (short) y; // Ép kiểu tường minh, trình biên dịch không báo lỗi.

- Sử dụng phương thức Parse, TryParse

Trong mỗi kiểu dữ liệu trên đều có hai phương thức sẽ thường xuyên được sử dụng trong tập bài giảng này đó là Parse và TryParse, được dùng để chuyển đổi một đối tượng bất kỳ sang kiểu dữ liệu gọi các phương thức này. Sự khác biệt giữa hai phương thức đó là TryParse sẽ kiểm tra tính hợp lệ của dữ liệu chuyển đổi trước khi chuyển đổi còn phương thức Parse thì không. Ví dụ với câu lênh:

int x = int.Parse(”123”);

thực hiện chuyển đổi chuỗi 123 sang số nguyên và gán cho biến x. Nếu tham số truyền vào không phải là số nguyên thì khi chạy chương trình sẽ phát sinh ngoại lệ. Để tránh điều này có thể sử dụng phương thức TryParse như sau:

bool kt = int.TryParse(”123”, out x)

Câu lệnh trên sẽ thực hiện chuyển đổi chuỗi 123 sang số nguyên, nếu thành công thì sẽ gán giá trị 123 cho biến x, phương thức sẽ trả về giá trị true, ngược lại phương thức sẽ trả về giá trị false còn biến x sẽ không được gán giá trị mới.


- Sử dụng lớp Convert

C# cung cấp lớp Convert để thực hiện chuyển đổi kiểu dữ liệu. Ví dụ câu lệnh:

int y = Convert. ToInt32(“32”)

thực hiện chuyển đổi chuỗi ―32‖ thành số và gán cho biến y. Trong lớp Convert còn có rất nhiều các phương thức chuyển đổi đối tượng bất kỳ sang các kiểu dữ liệu như short, float, double, …sinh viên tự tìm hiểu thêm.

2.4.8. Lớp Math

Để xây dựng các công thức toán học, ngoài các phép toán cơ bản đã được giới thiệu còn cần rất nhiều các hàm toán học mà chưa được đề cập tới. Trong C# có lớp Math là lớp chứa các phương thức hay thuộc tính liên quan tới các hàm toán học như tính sin, cos, logarit,…. Bảng 2.9 sau liệt kê một số phương thức có trong lớp Math.

Phương thức

Mô tả

Ví dụ

Abs

Trả về trị tuyệt đối của một số

Math.Abs(x) ≈ |x|

Ceiling

Trả về giá trị nhỏ nhất hay bằng của một số

thực

Math.Ceiling(123.456

) = 124

Exp

Trả về giá trị e với mũ là tham số đầu vào

Math.Exp(x) ≈ ex

Floor

Trả về giá trị lớn nhất hay bằng của một số

thực

Math.Floor(123.456) =

123

Log

Trả về giá trị logarit của một số

Math.Log(x) ≈ ln(x)

Log10

Trả về giá trị logarit cơ số 10 của một số

Math.Log10(x) ≈

log10(x)

Max

Trả về số lớn nhất trong hai số

Max(3,7) = 7

Min

Trả về số nhỏ nhất trong hai số

Min(3,7) = 3

Pow

Trả về giá trị mũ của hai số =

Math.Pow(x,y) ≈ xy

Round

Trả về giá trị được làm tròn của một số thực

Math.Round(123.456)

= 123

Sign

Trả về dấu của một số, -1 nếu số âm và 1

nếu số dương

Math.Sign(3) = 1

Sqrt

Trả về căn bậc hai của một số

Math.Sqrt(x) ≈𝑥

Cos

Trả về giá trị cosin của một góc

Math.Cos(x) ≈ cos(x)


Sin

Trả về giá trị sin của một góc

Math.Sin(x) ≈ sin(x)

Tan

Trả về giá trị tang của một góc

Math.Tan(x) ≈ tan(x)

Bảng 2.9: Một số phương thức của lớp Math.

Ngoài ra, lớp Math có hai thuộc tính PI, E, trong đó PI = 3.14159265358979323846 vàE = 2.7182818284590452354.

2.5. Câu lệnh rẽ nhánh

2.5.1. Câu lệnh if

1. Câu lệnh if không đầy đủ Cú pháp:


Hoạt động:

if (<biểu thức logic>)

{<Lệnhhoặc khối lệnh>;}

Tính biểu thức logic. Nếu biểu thức logic nhận giá trị true thì thực hiện lệnh hoặc khối lệnh. Ngược lại bỏ qua lệnh hoặc khối lệnh và kết thúc câu lệnh if.

Cụ thể hoạt động của câu lệnh trên được mô tả trong hình sau:


Bắt đầu

Biểu thức logic

True

False

Kết thúc


Lệnh hoặc khối lệnh

Hình 2.6: Hoạt động của câu lệnh if không đầy đủ

Ví dụ 2.10: Lập trình tìm và hiển thị số lớn nhất của hai số thực được nhập vào từ bàn phím.

namespace Vidu_2_10

{

class Program

{

static void Main(string[] args)

{ float a, b;

Console.Write("Nhap a = "); a = float.Parse(Console.ReadLine()); Console.Write("Nhap b = "); b = float.Parse(Console.ReadLine()); float max = a;

if(max < b) max = b;

Console.WriteLine("So lon nhat: {0} ", max); Console.ReadLine();

}

}

}

Kết quả chương trình:

Hình 2 7 Kết quả chương trình ví dụ 2 10 Trong trường hợp lệnh hoặc khối 2

Hình 2.7: Kết quả chương trình ví dụ 2.10

Trong trường hợp lệnh hoặc khối lệnh là một lệnh thì có thể bỏ cặp dấu{ }.

2. Câu lệnh if đầy đủ Cú pháp:

if (<biểu thức logic>)

{<Lệnh hoặc khối lệnh 1>;}


Hoạt động:

else


{<Lệnh hoặc khối lệnh 2>;}

Trước hết tính biểu thức logic. Nếu biểu thức nhận giá trị true thì thực hiện lệnh hoặc khối lệnh 1. Ngược lại thực hiện lệnh hoặc khối lệnh 2 và kết thúc câu lệnh if.

Cụ thể hoạt động của câu lệnh trên được mô tả trong hình sau:



Lệnh hoặc khối lệnh 1




Bắt đầu

Biểu thức logic

False

True

Kết thúc


Lệnh hoặc khối lệnh 2

Hình 2.8: Hoạt đông của câu lệnh if đầy đủ

Ví dụ 2.11: Lập chương trình giải phương trình bậc nhất ax + b = 0, với a, b là các số thực nhập từ bàn phím.

namespace Vidu_2_11

{

class Program

{

static void Main(string[] args)

{

float a, b, c;

Console.Write("Nhap a = "); a = float.Parse(Console.ReadLine()); Console.Write("Nhap b = "); b = float.Parse(Console.ReadLine());

if (a != 0) Console.WriteLine("Phuong trinh co nghiem duy nhat x = " + (-b / a).ToString());

else if (b != 0) Console.WriteLine("Phuong trinh vo nghiem"); else Console.WriteLine("Phuong trinh vo so nghiem"); Console.ReadLine();

}

}

}

Kết quả chương trình:

Hình 2 9 Kết quả chương trình ví dụ 2 11 3 Câu lệnh if lồng nhau Các câu lệnh 3

Hình 2.9: Kết quả chương trình ví dụ 2.11


3. Câu lệnh if lồng nhau

Các câu lệnh if trên chỉ cho phép rẽ 1 hoặc 2 nhánh, trong trường hợp rẽ nhiều hơn 2 nhánh thì có thể sử dụng câu lệnh if lồng nhau.

Cú pháp:

if (<biểu thức logic 1>)

{<Lệnh hoặc khối lệnh 1>;} else if (<biểu thức logic 2>)

{<Lệnh hoặc khối lệnh 2>;}

......

else if (<biểu thức logic n-1>)

{<Lệnh hoặc khối lệnh n-1>;} else

{<Lệnh hoặc khối lệnh n>;}

Hoạt động:

Bước 1: Thực hiện tính biểu thức logic 1, nếu biếu thức logic 1 là đúng thì thực hiện lệnh hoặc khối lệnh 1 và kết thúc câu lệnh if lồng nhau. Ngược lại lệnh hoặc khối lệnh 1 bị bỏ qua.

Bước 2: Thực hiện tính biểu thức logic 2, nếu biếu thức logic 2 là đúng thì thực hiện lệnh hoặc khối lệnh 2 và kết thúc câu lệnh if lồng nhau. Ngược lại lệnh hoặc khối lệnh 2 bị bỏ qua.

Bước n-1: Thực hiện tính biểu thức logic n-1, nếu biếu thức logic n-1 là đúng thì thực hiện lệnh hoặc khối lệnh n-1 và kết thúc câu lệnh if lồng nhau. Ngược lại lệnh hoặc khối lệnh n - 1 bị bỏ qua.

Bước n: Thực hiện lệnh hoặc khối lệnh n và kết thúc câu lệnh if lồng nhau.

Ví dụ 2.12: Lập chương trình giải phương trình bậc hai ax2 + bx + c = 0 với a, b, c là các số thực nhập từ bàn phím.

namespace Vidu2_12

{

class Program

{

static void Main(string[] args)

{

double a, b, c, delta, x1, x2; Console.Write("Nhap a = ");

a = double.Parse(Console.ReadLine()); Console.Write("Nhap b = ");

b = double.Parse(Console.ReadLine()); Console.Write("Nhap c = ");

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 03/07/2022