Bài 6 CÂU LỆNH ĐIỀU KHIỂN

1.Câu lệnh while

(cid:1) Cú pháp (Syntax): while ( expression )

(cid:1) Ví dụ

statement // thân lặp

int count = 0; while( count < 10)

cout << ++count << endl;

Ví dụ int main() { int x, count = 0; float sum = 0.0 ; cout << " Nhập một vài số nguyên: \n" " Nhập ký tự bất kỳ để thoát"

<< endl;

while (cin >> x ) { sum += x ; ++count; } cout << " Giá trị trung bình : " << sum/count << end; return 0 ; }

2.Câu lệnh for

(cid:1) Cú pháp

for ( expression1; expression2; expression3 )

statement

(cid:1) Ví dụ

int i, count = 0; for (i=1; i <10; ++i) cout << ++count; (cid:1) Biểu thức (expression) có thể có nhiều phần cách nhau bởi dấu phẩy và được đánh giá từ trái sang,

(cid:1) Ví dụ

int x, i, limit ; for (i=0, limit=8; i

cho x

Một vài cách dùng for

(cid:1)

(cid:1)

#include for(i=0; !kbhit(); i++) cout << i << ' ';

(cid:1) for (;;) (cid:1) for(x=0; x

for(x=0; x != 123; ) // không có expression 3

3.Câu lệnh do-while

(cid:1) Cú pháp

do

statement while ( expression); (cid:1) Ví dụ

const long delay = 10000000L; int main() { int tic; cout << "\nNhập số lần lặp ";

cin >> tic; do

{ for ( long i = 0; i < delay; ++i ) ;

cout << "Âm hiệu!\a" //tạo tiếng kêu

<< endl;

} while( --tic > 0 ); cout << "Kết thúc!\n";

return 0;

}

4.Câu lệnh IF

(cid:1) Cú pháp

if( expression )

statement1

(cid:1) else statement2 trong ngoặc vuông nghĩa là

[else statement2 ]

(cid:1) ví dụ

có hoặc không tùy ứng dụng

if ( x < y )

min = x; else min = y;

// Magic Number program. #include #include using namespace std; int main() {

int magic; // magic number int guess; // số dự đoán magic = rand(); // lấy số ngẫu nhiên cout << "Nhập số đoán: "; cin >> guess; if(guess == magic) cout << "** Đúng **";

return 0; }

(cid:1) Ví dụ: bổ sung vào chương trình đoán số

(cid:1) Ví dụ nhập vào 3 số in ra số lớn nhất

magic number cho biết số dự đoán lớn hay nhỏ so với số đúng.

5.Câu lệnh switch (1/3)

(cid:1) Cú pháp:

Switch ( statement ) {

case const 1:

case const 2:

[ statement sequence ] [ break; ] // thoát khỏi switch [ statement sequence ] [ break; ]

. . . [default : statement ] // nếu có thì sẽ thực hiện khi biểu thức điều

//kiện không trùng bất kỳ giá trị nào ở trên

}

Câu lệnh switch (2/3)

(cid:1) Biểu thức điều khiển được tính toán, nếu kết quả trùng với trường hợp (case constant) nào thì các câu lệnh (statement sequence) tương ứng sẽ được thực thi.

(cid:1) Kiểu của biểu thức điều khiển là int hay char (cid:1) Thông thường biểu thức điều khiển chỉ là một

(cid:1) Thường dùng khi cần so sánh với một loạt

biến

các giá trị

Câu lệnh switch (3/3)

Có 4 lưu ý quan trọng về switch: (cid:1) Câu lệnh switch khác với if ở chỗ nó chỉ kiểm tra bằng, trong khi biểu thức điều kiện của if có thể kiểm tra bất kỳ (không bằng, lớn hơn, nhỏ hơn)

(cid:1) Không thể có hai hằng số case đồng dạng trong một

câu lệnh switch

(cid:1) Câu lệnh switch luôn hiệu quả hơn dùng if chứa if (cid:1) Các câu lệnh liên quan mỗi case không phải là các

khối.

(cid:1) C++ có thể chấp nhận đến 16384 case, nhưng trên

thực tế dùng một số nhỏ vì chạy chương trình hiệu quả.

Ví dụ

switch(choice) { case 1: cout << "for la vong lap linh hoat cua

C++.\n";

break; case 2: cout << "if là câu lệnh điều khiển rẽ vào

một trong hai nhánh của C++.\n";

break; case 3: cout << "switch là câu lệnh điều khiển

rẽ vào một trong nhiều nhánh của C++.\n";

break; default: cout << “Bạn phải nhập một số nguyên

1,2 hoặc 3.\n";

}

#include using namespace std; int main() { int choice; cout << "Help on:\n\n"; cout << "1. for\n"; cout << "2. if\n"; cout << "3. switch\n\n"; cout << "Enter choice (1-3): "; cin >> choice; cout << "\n";

return 0; }

(cid:1) Về nguyên tắc thì lệnh break là tùy chọn, tuy nhiên trong một số trường hợp không dùng break sẽ khiến chương trình chạy không như mong muốn, ví dụ:

#include using namespace std; int main() { int i; for(i=0; i<5; i++) { switch(i) { case 0: cout << "less than 1\n"; case 1: cout << "less than 2\n"; case 2: cout << "less than 3\n"

case 3: cout << "less than 4\n"; case 4: cout << "less than 5\n"; } cout << '\n'; } return 0; }

(cid:1) Khi nhiều case có cùng mã lệnh thì có thể đặt

switch(i) { case 1: case 2: case 3: statement sequence;// cho 1,2 và 3 break; case 4: satatement sequence;// cho 4 break;

kề nhau và để rỗng các case bên trên

(cid:1) Câu lệnh switch chứa switch

switch(ch1) { case 'A': cout << " A của switch bên ngoài";

switch(ch2) { case 'A': cout << " A của switch bên trong"; break; case 'B': // ... } break; case 'B': // ...

6. Dùng continue

(cid:1) Câu lệnh continue ép sự lặp kế tiếp diễn ra sớm hơn, bỏ qua các

câu lệnh phía sau nó trong vòng lặp.

#include using namespace std; int main() {

int x; for(x=0; x<=100; x++) {

if(x%2) continue; cout << x << ' '; } return 0; }

7. Dùng break

(cid:1) Dùng câu lệnh break để thoát ra khỏi vòng

#include using namespace std; int main() { int t; // Lặp từ 0 đến 9, không lặp đến 100! For (t=0; t<100; t++) { if(t==10) break; cout << t << ' '; } return 0; }

lặp

(cid:1) Viết chương trình in liên tục "Hello World"

cho đến khi ấn phím bất kỳ thì ngưng.

8. Dùng câu lệnh goto

(cid:1) Câu lệnh goto khiến chương trình chuyển đến thực thi từ một vị trí được xác định bởi một nhãn (label), nhãn là một danh định hợp lệ trong C++ theo sau là dấu hai chấm (:)

x = 1;

loop1:

x++;

if(x < 100) goto loop1;

(cid:1) Dùng tốt nhất là để thoát ra từ các thủ tục

lồng ghép rất sâu.

Ví dụ: for(...) { for(...) { while(...) { if(...) goto stop; . . . } } } stop: cout << "Error in program.\n";

Bài Tập

1. Viết chương trình giải phương trình bậc 2. 2. Viết chương trình in ra các số nguyên tố nhỏ

hơn số N được nhập vào từ bàn phím.

3. Viết chương trình đọc vào một số N, sau đó nhập tiếp N số kiểu double, in ra số trung bình của các số đã nhập.