Câu điều kiện. Đặc điểm của việc sử dụng thao tác ngắt trong câu lệnh switch

Nhưng C++ cũng có một bộ chuyển đổi toán tử trắc nghiệm mà bây giờ chúng ta sẽ xem xét chi tiết.

// dạng viết của toán tử trắc nghiệm switch switch (/*biến hoặc biểu thức*/) ( case /*constant biểu thức1/*: ( /*group of operator*/; break; ) case /*constant biểu thức2*/: ( /*nhóm toán tử*/; break; ) // . mặc định: ( /*nhóm toán tử*/; )

Ở giai đoạn đầu, biểu thức hoặc biến được phân tích. Sau đó, quá trình chuyển đổi được thực hiện sang nhánh đó của chương trình mà giá trị của biến hoặc biểu thức trùng với biểu thức hằng đã chỉ định. Tiếp theo, câu lệnh hoặc nhóm câu lệnh được thực thi cho đến khi gặp dấu ngoặc nhọn đóng. Nếu giá trị của một biến hoặc biểu thức không khớp với bất kỳ biểu thức hằng nào thì điều khiển sẽ được chuyển đến nhánh chương trình chứa từ dành riêng default . Sau đó toán tử hoặc nhóm toán tử của nhánh này được thực thi. Bây giờ chúng ta hãy xem xét một vấn đề bằng cách sử dụng toán tử chọn chuyển đổi.

Bài toán có điều kiện: viết chương trình cộng, trừ, nhân, chia hai số nhập từ bàn phím. Phát triển giao diện người dùng.

// switch.cpp: Xác định điểm vào cho ứng dụng console. #include "stdafx.h" #include sử dụng không gian tên std; int main(int argc, char* argv) ( int count; // biến để lựa chọn trong switch double a,b; // biến để lưu trữ toán hạng cout<< "Vvedite pervoe chislo: "; cin >> một; cout<< "Vvedite vtoroe chislo: "; cin >>b; cout<< "Vibirite deistvie: 1-clojenie; 2-vichitanie; 3-ymnojenie; 4-delenie: "; cin >>đếm; switch (count) // bắt đầu câu lệnh switch ( case 1: // if count = 1 ( cout<< a << " + " << b << " = " << a + b << endl; // выполнить сложение break; } case 2: // если count = 2 { cout << a << " - " << b << " = " << a - b << endl; // выполнить вычитание break; } case 3: // если count = 3 { cout << a << " * " << b << " = " << a * b << endl; // выполнить умножение break; } case 4: // если count = 4 { cout << a << " / " << b << " = " << a / b << endl; // выполнить деление break; } default: // если count равно любому другому значению cout << "Nepravilni vvod" << endl; } system("pause"); return 0; }

TRONG dòng thứ 9 Chúng tôi đã khai báo một số biến kiểu số nguyên. Chính giá trị của biến này mà chương trình sẽ so sánh với giá trị của biểu thức hằng. TRONG dòng 10 hai biến thực được khai báo để lưu trữ các số đã nhập. Tôi sẽ giải thích tại sao nó lại có thật sau. VỚI 17 đến 41 dòng một công tắc toán tử trắc nghiệm có điều kiện được viết. Ở giai đoạn đầu, biến đếm được phân tích. Nó được phân tích theo cách này:
nếu biến đếm bằng 1 thì khối câu lệnh có Dòng thứ 20 đến dòng thứ 23;
nếu biến đếm bằng hai thì khối câu lệnh có Dòng thứ 25 đến dòng thứ 28;
nếu biến đếm bằng ba thì khối câu lệnh có Dòng thứ 30 đến dòng thứ 33;
nếu biến đếm bằng 4 thì khối câu lệnh có Dòng thứ 35 đến dòng thứ 38;

Nếu giá trị của biến đếm không khớp với bất kỳ biểu thức hằng số nào thì điều khiển sẽ được chuyển đến nhánh chương trình chứa từ dành riêng default . Tức là dòng sau sẽ được thực thi

cout<< "Nepravilni vvod" << endl;

Câu lệnh switch có thể có hoặc không chứa từ dành riêng default . Nếu giá trị của biến không khớp với bất kỳ biểu thức hằng số nào và không phải là giá trị mặc định thì điều khiển chương trình trong trường hợp này sẽ chỉ chuyển sang câu lệnh đầu tiên sau lệnh chuyển. TRONG dòng 19, 24, 29, 34 các biểu thức hằng được viết để chương trình so sánh giá trị của biến đếm.
TRONG dòng 22, 27, 32, 37, ghi nhận bởi . Câu hỏi được đặt ra: Tại sao lại cần thiết? Giả sử người dùng đã nhập 2, nghĩa là biến đếm được khởi tạo thành hai. Công tắc toán tử trắc nghiệm có điều kiện bắt đầu hoạt động. Tức là việc tìm kiếm hai trong biểu thức hằng được thực hiện. Đã kiểm tra lần đầu dòng 19, chúng ta thấy điều đó trong dòng 19 biểu thức hằng số bằng một, nhưng chúng ta cần hai. Hãy kiểm tra thêm. Và sau đó theo thứ tự dòng 24. Chúng ta thấy điều đó ở dòng 24 biểu thức hằng số bằng hai, đó là những gì bạn cần!!! Biến đếm bằng một biểu thức hằng, một khối câu lệnh được thực thi bằng 25 đến 28 dòng. Và ở đây dòng thứ 27 một câu lệnh break được viết, khiến chương trình chuyển sang câu lệnh đầu tiên sau câu lệnh switch. Trong trường hợp này, quyền điều khiển được chuyển giao dòng 42. Và quá trình chuyển đổi này chỉ cần thiết để các hành động rõ ràng là không cần thiết không được thực hiện. Nếu bạn loại bỏ câu lệnh break, chương trình sẽ tiếp tục so sánh giá trị của biến với các biểu thức hằng cho đến khi chúng kết thúc rồi mới chuyển quyền điều khiển dòng 42. Kết quả của chương trình được hiển thị bên dưới (xem Hình 1).

Hình 1 - Toán tử chọn nhiều trong C++

Hãy quay trở lại đường kẻ 10 , hai biến kiểu double được khai báo ở đó. Câu hỏi có thể được đặt ra là “Tại sao lại là kiểu thực mà không phải là số nguyên?” Tôi trả lời: “Vì một trong những thao tác mà chương trình có thể thực hiện là phép chia và khi chia thì kết quả có kiểu dữ liệu thực. Khi chia các số, trình biên dịch C++ chú ý đến kiểu dữ liệu của chúng. Nếu chúng ta chỉ chia các số trên máy tính, ví dụ 4/5 = 0,8, trình biên dịch C++ sẽ cho chúng ta kết quả của phép chia 0. Vì cả hai số đều là số nguyên nên có nghĩa là kết quả cũng sẽ là số nguyên, nghĩa là phần nguyên của phép chia thông thường, và trong trường hợp của chúng tôi, toàn bộ phần trong phép chia này là 0, do đó một phần thông tin bị mất, hoặc như người ta nói, bị cắt bỏ (tám phần mười, trong trường hợp của chúng tôi, bị cắt bỏ). Và nếu số bị chia và số chia được hoán đổi cho nhau, trên máy tính, chúng ta sẽ nhận được: 5/4=1,25; trình biên dịch C++ sẽ hiển thị một kết quả hơi khác, cụ thể là 5/4=1 (0,25 bị cắt đi). Hiện tượng này trong C++ được gọi là truyền kiểu ẩn.” Kiểu dữ liệu thực được sử dụng để biểu diễn các số chính xác hơn kiểu dữ liệu số nguyên (nghĩa là nó biểu thị phần phân số).

Có hai số thực trong C++:

1) double là kiểu dữ liệu thực có độ chính xác gấp đôi, có nghĩa là nó chiếm gấp đôi bộ nhớ so với kiểu float
2) float – kiểu dữ liệu thực có độ chính xác đơn

Câu điều kiện

Câu lệnh có điều kiện cho phép bạn kiểm soát chảy thực thi chương trình sao cho mỗi dòng mã không được thực thi như bình thường trong chương trình. Hãy xem tất cả các câu lệnh điều kiện trong C#:

câu lệnh if

Để tổ chức phân nhánh có điều kiện, ngôn ngữ C# kế thừa cấu trúc if...else từ C và C++. Cú pháp của nó phải trực quan đối với bất kỳ ai đã lập trình bằng ngôn ngữ thủ tục:

nếu (điều kiện)
(các) nhà điều hành
khác
(các) nhà điều hành

Nếu cần thực thi nhiều hơn một câu lệnh cho mỗi điều kiện thì các câu lệnh này phải được kết hợp thành một khối bằng cách sử dụng dấu ngoặc nhọn (...). (Điều này cũng áp dụng cho các cấu trúc C# khác trong đó các câu lệnh có thể được kết hợp thành một khối, chẳng hạn như vòng lặp for và while.)

Điều đáng lưu ý là, không giống như ngôn ngữ C và C++, trong C# câu lệnh if có điều kiện chỉ có thể hoạt động với các biểu thức Boolean chứ không hoạt động với các giá trị tùy ý như -1 và 0.

Câu lệnh if có thể sử dụng các biểu thức phức tạp và có thể chứa các câu lệnh khác, cho phép thực hiện các kiểm tra phức tạp hơn. Cú pháp tương tự như cú pháp được sử dụng trong các tình huống tương tự trong ngôn ngữ C (C++) và Java. Khi xây dựng các biểu thức phức tạp trong C#, một tập hợp các toán tử logic hoàn toàn được mong đợi sẽ được sử dụng. Hãy xem ví dụ sau:

Sử dụng hệ thống; sử dụng System.Collections.Generic; sử dụng System.Linq; sử dụng System.Text; không gian tên ConsoleApplication1 ( class Program ( static void Main(string args) ( string myStr; Console.WriteLine("Nhập dòng: "); myStr = Console.ReadLine(); if (myStr.Length = 5) && (myStr.Length

Như bạn có thể thấy, số lượng else if được thêm vào một if không bị giới hạn. Một điều cần lưu ý là dấu ngoặc nhọn không cần thiết nếu chỉ có một câu lệnh trong nhánh điều kiện, như trong ví dụ ban đầu.

câu lệnh chuyển đổi

Toán tử chọn thứ hai trong C# là câu lệnh chuyển đổi, cung cấp sự phân nhánh đa hướng của chương trình. Do đó, toán tử này cho phép bạn lựa chọn trong số một số tùy chọn thay thế để thực hiện chương trình tiếp theo. Mặc dù thử nghiệm đa hướng có thể được thực hiện bằng cách sử dụng một loạt các câu lệnh if lồng nhau, nhưng trong nhiều trường hợp, việc sử dụng câu lệnh switch sẽ hiệu quả hơn. Toán tử này hoạt động như sau. Giá trị của biểu thức được so sánh tuần tự với các hằng số lựa chọn từ một danh sách nhất định. Khi tìm thấy kết quả khớp với một trong các điều kiện lựa chọn, chuỗi các câu lệnh liên quan đến điều kiện đó sẽ được thực thi. Sau đây là dạng chung của câu lệnh switch:

switch(biểu thức) ( case constant1: chuỗi các lệnh break; case constant2: chuỗi các lệnh break; case constant3: chuỗi các lệnh break; ... mặc định: chuỗi các lệnh break; )

Mặc dù câu lệnh switch...case quen thuộc với các lập trình viên C và C++, nhưng nó an toàn hơn một chút trong C# so với C++ tương đương. Đặc biệt, nó cấm các điều kiện "nhìn qua" trong hầu hết các trường hợp. Điều này có nghĩa là nếu phần tình huống được gọi ở đầu khối thì các đoạn mã sau các phần tình huống tiếp theo không thể được thực thi trừ khi câu lệnh goto được sử dụng rõ ràng để chuyển đến chúng. Trình biên dịch thực thi hạn chế này bằng cách yêu cầu mỗi mệnh đề tình huống phải được theo sau bởi tuyên bố phá vỡ, nếu không nó sẽ báo lỗi.

Điều quan trọng cần lưu ý là biểu thức đã cho trong câu lệnh switch phải là kiểu số nguyên (char, byte, short hoặc int), liệt kê hoặc chuỗi. Các biểu thức thuộc các loại khác, chẳng hạn như dấu phẩy động, không được phép trong câu lệnh switch. Thông thường, biểu thức điều khiển câu lệnh switch chỉ đơn giản được rút gọn thành một biến duy nhất. Ngoài ra, các hằng số lựa chọn phải thuộc loại tương thích với loại biểu thức. Trong một câu lệnh switch, không được phép có hai hằng số lựa chọn có cùng giá trị.

  • 2. Hình thức chung mô tả của toán tử lựa chọn chuyển đổi. Từ khóa switch, case, break, mặc định
1. Mục đích của toán tử chọn switch

Toán tử lựa chọn chuyển đổi cho phép bạn chọn một tùy chọn để giải quyết vấn đề từ một số tùy chọn, tùy thuộc vào giá trị của biểu thức. Điều này đảm bảo phân nhánh đa hướng trong chương trình.

Câu lệnh switch có thể được thay thế. Tuy nhiên, trong một số trường hợp, sử dụng câu lệnh switch có thể hiệu quả hơn sử dụng .

2. Dạng mô tả chung của công tắc vận hành lựa chọn. Từ khóa switch, case, break, default

Dạng viết chung của câu lệnh switch như sau:

công tắc ( sự biểu lộ ) (trường hợp hằng số1: câu lệnh_sequence1; phá vỡ ; trường hợp hằng số2: tiếp theo _toán tử2; phá vỡ ; ...trường hợp không thay đổiN: N; phá vỡ ; mặc định câu lệnh_chuỗi; }
  • sự biểu lộ– một số biểu thức của số nguyên (int) hoặc kiểu ký tự (char);
  • hằng số1 , hằng số2 , …, không thay đổiN – các giá trị không đổi mà giá trị của biểu thức được so sánh. Giá trị không đổi phải là kiểu số nguyên hoặc ký tự;
  • tiếp theo _toán tử1 , tiếp theo _toán tử2 , …, tiếp theo _toán tửN – trình tự các toán tử (lệnh) tương ứng được liên kết với điều kiện tương ứng;
  • câu lệnh_chuỗi – một chuỗi các toán tử được thực thi nếu không tìm thấy giá trị của biểu thức và giá trị của hằng số.

Câu lệnh switch hoạt động như sau. Đầu tiên, giá trị của biểu thức được tính toán. Sau đó, giá trị này được so sánh tuần tự với các hằng số trong danh sách đã cho. Khi tìm thấy kết quả khớp cho một trong các điều kiện so sánh (nhánh trường hợp), chuỗi lệnh liên quan đến so sánh đó sẽ được thực thi. Nếu không tìm thấy kết quả phù hợp thì các câu lệnh theo từ khóa mặc định sẽ được thực thi.

Từ khóa case được sử dụng để chỉ định giá trị của một hằng số, mà nếu giá trị của biểu thức khớp với nhau thì hằng số này sẽ thực thi chuỗi câu lệnh tương ứng.

Thao tác ngắt làm gián đoạn (kết thúc) việc thực thi mã được xác định bởi câu lệnh switch.

Các thao tác được đặt sau từ khóa mặc định sẽ được thực thi nếu không có hằng số kiểu chữ nào khớp với kết quả của biểu thức switch.

Từ khóa mặc định và chuỗi câu lệnh tương ứng có thể bị bỏ qua. Trong trường hợp này, nếu không có nhánh nào sau trường hợp từ được thực thi thì việc thực thi sẽ được chuyển sang câu lệnh tiếp theo sau câu lệnh switch.

3. Ví dụ về sử dụng toán tử chọn switch

Ví dụ 1. Giá trị đã cho N= 1..7, là số ngày trong tuần. Theo giá trị N xác định xem ngày này là ngày nghỉ hay ngày làm việc. Viết kết quả vào biến fDayOff thuộc loại bool.

Một đoạn mã giải quyết vấn đề này.

int ngày; bool fDayOff; ngày = 3; switch (ngày) ( trường hợp 1: fDayOff = false ; break ; trường hợp 2: fDayOff = false ; break ; trường hợp 3: fDayOff = false ; break ; trường hợp 4: fDayOff = false ; break ; trường hợp 5: fDayOff = false ; break ; trường hợp 6: fDayOff = true; trường hợp 7: fDayOff = true;

Một lựa chọn khác, nhỏ gọn hơn để giải quyết vấn đề này.

int ngày; bool fDayOff; ngày = 7; switch (ngày) ( case 1: case 2: case 3: case 4: case 5: fDayOff = false ; break ; case 6: case 7: fDayOff = true ; break ; )

Một lựa chọn khác để giải quyết vấn đề này

int ngày; bool fDayOff; ngày = 7; switch (ngày) ( trường hợp 6: trường hợp 7: fDayOff = true ; break ; mặc định : fDayOff = false ; )

Ví dụ 2. Cho một số nguyên N= 1..3, là số hàm. Theo giá trị biến N tính giá trị của hàm tương ứng:

1) -2x 2 -4; 2) 5x+2; 3) 15-3x.

Đoạn mã giải quyết vấn đề này bằng cách sử dụng dạng rút gọn của câu lệnh switch.

int n; nổi f, x; n = 3; x = 3; switch (n) ( trường hợp 1: f = -2*x*x-4; break ; trường hợp 2: f = 5*x+2; break ; trường hợp 3: f = 15-3*x; break ; )
4. Đặc điểm sử dụng lệnh break trong câu lệnh switch

Trong câu lệnh switch, thao tác ngắt là tùy chọn.

Nếu có thao tác ngắt, câu lệnh switch sẽ được thoát và câu lệnh sau được thực thi. Nếu không có câu lệnh break trong một nhánh case, thì tất cả các câu lệnh liên quan đến nhánh case đó, cũng như tất cả các câu lệnh ngay sau nó, sẽ được thực thi cho đến khi gặp một câu lệnh break khác hoặc đến cuối câu lệnh switch. .