Tải bản đầy đủ (.docx) (16 trang)

Các cấu trúc điều khiển trong C++

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 (127.01 KB, 16 trang )

Các cấu trúc điều khiển trong C++
I. Cấu trúc rẽ nhánh và cấu trúc chọn
I.1. Cấu trúc rẽ nhánh
Trong thực tế, khi giải quyết một công việc thường ta phải lựa chọn
nhiều phương án giải quyết khác nhau. Người ta thường biểu diễn vấn đề này
bằng 2 mệnh đề logic sau:
- [1]. Nếu … thì …;
- [2]. Nếu … thì … ngược lại thì…
Để mô phỏng hai mệnh đề đó, trong ngôn ngữ lập trình C++ đưa ra cấu
trúc rẽ nhánh.
Cú pháp:
if (<biểu thức điều kiện>) <Lệnh 1>;
[else <Lệnh 2>;]
ý nghĩa:
Nếu <biểu thức điều kiện> nhận giá trị đúng (TRUE), sẽ thực hiện <Lệnh1>,
ngược lại, nếu <biểu thức điều kiện> nhận giá trị sai (FALSE) sẽ thực hiện <Lệnh2>;
(nếu có thành phần [else <Lệnh 2>;]).
- <Lệnh 1> và <Lệnh 2> có thể là một lệnh, một khối lệnh hoặc một, một khối
các cấu trúc điều khiển. Các khối lệnh hoặc khối cấu trúc điều khiển được đặt
trong hai dấu { }.
Cấu trúc rẽ nhánh có hai dạng (tuỳ thuộc vào sự có hay không có thành
phần [else <Lệnh 2>;]) như trong sơ đồ khối dưới đây.
<BTĐK>
<Lệnh>
<BTĐK>
<Lệnh1>
<Lệnh 2>
TRUE
FALSE
TRUE
FALSE


Ví dụ: Lập chương trình nhập vào một số nguyên. Kiểm tra tính chẵn lẻ
của số đó và thông báo ra màn hình.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main()
{
clrscr(); int a;
cout<< “nhập số nguyên a ”;
cin>>a;
if (a%2 = = 0)
cout<<”số “<<a<<” chẵn”;
else
cout<<”số “<<a<<” lẻ”;
getch();
}
Các lệnh if có thể lồng nhau theo nghĩa: Các câu lệnh bên trong một
mệnh đề if lại có thể là các mệnh đề if.
Mỗi lệnh if đầy đủ sẽ cho phép lựa chọn 2 khả năng để thực hiện. Trong
trường hợp có n khả năng lựa chọn và các khả năng loại trừ nhau, ta có thể sử
dụng n-1 lệnh if đầy đủ lồng nhau.
Ví dụ: Viết chương trình thực hiện việc nhập vào số tiền phải trả của
khách hàng. Nếu số tiền nhập vào từ 300 tới 400, khuyến mại 20% số tiền phải
trả. Nếu số tiền từ 400 trở lên, khuyến mại 30%. Các trường hợp khác không
được khuyến mại. Tính và in số tiền khuyến mại của khách lên màn hình.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main()
{

a). Mô tả mệnh đề [1] b) Mô tả mệnh đề [2]
clrscr();
int T, km;
cout<<”Nhập số tiền “; cin>>T;
if (T>=300 && T <=400) km = T*0.2;
else
if (T>400) km = T*0.3;
else km = 0;
cout<<”Số tiền khuyến mại “<<km;
getch();
}
Nếu n khả năng là loại trừ nhau thì khi đó có thể sử dụng n-1 lệnh if lồng
nhau hoặc có thể sử dụng n lệnh if rời nhau cho n khả năng lựa chọn. Trường
hợp ngược lại, ta nên sử dụng các lệnh if rời nhau.
Ví dụ: Viết chương trình nhập vào điểm tổng kết và xếp loại đạo đức của một sinh
viên. Sau đó tính số tiền học bổng cho sinh viên đó như sau:
Nếu tổng kết >=7.00 thì được 300000.
Nếu điểm tổng kết >=9.00 và đạo đức = “T” thì được cộng thêm 100000.
Xét đoạn trình sau:
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main()
{
clrscr(); float tk; char hk; long T;
cout<<”Nhap điểm tong ket”; cin>>tk;
cout<<”Nhap hanh kiem”; cin>>hk;
T=0;
if (tk >= 7) T = 300000;
else if (tk>=9 && hk = = ‘T’) T += 100000;

cout<<”Học bổng ” <<T;
getch();
}
Đoạn trình trên sẽ cho kết quả sai trong trường hợp sinh viên tổng kết
>=9.0 và đạo đức tốt. Lý do là sử dụng hai lệnh if lồng nhau khi các khả năng
không loại trừ nhau.
Đoạn trình trên có thể được viết lại như sau:
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main()
{
clrscr(); float tk; char hk; long T;
cout<<”Nhap điểm tong ket”; cin>>tk;
cout<<”Nhap hanh kiem”; cin>>hk;
T=0;
if (tk >= 7) T = 300000;
if (tk>=9 && hk = = ‘T’) T += 100000;
cout<<”Học bổng ” <<T;
getch();
}
I.2. Cấu trúc chọn
Trong trường hợp có quá nhiều khả năng lựa chọn và các khả năng loại
trừ nhau, nếu sử dụng nhiều lệnh if lồng nhau sẽ làm cho chương trình phức
tạp, khó kiểm soát. Vì vậy C++ cung cấp một cấu trúc điều khiển khác sử dụng
trong trường hợp này, đó là cấu trúc chọn.
Cú pháp: switch (<Biến nguyên>)
{
case <GT 1>: <Lệnh 1;> break;
case <GT 2>: <Lệnh 2;> break;


case <GT n>: <Lệnh n;> break;
[default: <Lệnh mặc định>;]
}
ý nghĩa: Kiểm tra giá trị của <Biến nguyên>:
Nếu <Biến nguyên> nhận giá trị <GT1>, thực hiện <Lệnh 1>
Nếu <Biến nguyên> nhận giá trị <GT2>, thực hiện <Lệnh 2>…
Nếu <Biến nguyên> nhận giá trị <GTn>, thực hiện <Lệnh n>
Nếu có thành phần [default: …], thực hiện <lệnh mặc định> khi
biến nguyên không nhận giá trị nào trong n giá trị ở trên.
Biến = GT1
Biến = GT2
Biến = GTn
<Lệnh 1>
<Lệnh 2>
<Lệnh n>

Lệnh mặc định
Sơ đồ khối:
- Lệnh switch chỉ thực hiện trên biến nguyên. Các câu lệnh <Lệnh 1>, <Lệnh
2>… có thể là một khối lệnh hoặc khối các cấu trúc điều khiển (tức nhiều lệnh,
nhiều cấu trúc điều khiển đặt giữa hai ký tự { và }). Sau đó phải có lệnh break;
nếu không lệnh switch sẽ chạy sai ý nghĩa của nó.
- Thành phần [default: …] là không bắt buộc. Nếu có thành phần này, <Lệnh
mặc định> sẽ được được thực hiện sau khi tất cả các trường hợp case đều
không thỏa mãn.
Ví dụ 1: Viết chương trình nhập vào mã học vị (là một số nguyên) của
một nhân viên. In ra học vị tương ứng với quy định:
Mã =1: Cử nhân.
Mã =2: Kỹ sư.

Mã =3: Thạc sỹ.
Mã =4: Tiến sỹ.
Các mã khác: Không xếp loại học vị.
void main()
{
clrscr(); int M;
cout<<”Nhập mã học vị”; cin>>M;
switch (M)
{
case 1: cout<<”Cử nhân”; break;
case 2: cout<<”Kỹ sư”; break;
case 3: cout<<”Thạc sỹ”; break;
case 4: cout<<”Tiến sỹ”; break;
default: cout<<”Không xếp loại học vị”;
}
getch();
}
Ví dụ 2: Viết chương trình nhập vào một tháng của một năm nào đó. In
số ngày của tháng đó ra màn hình.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main(void)
{
clrscr(); int T, N;
cout<<”Nhập tháng”; cin>>T;
cout<<”Nhập năm “; cin>>N;
switch (T)
{
case 1:

case 3:
case 5:
case 7:
case 8:
case 10:
case 12: cout<<”Tháng có 31 ngày”; break;
case 4:
case 6:
case 9:
case 11: cout<<”Tháng có 30 ngày”; break;
case 2: if (N%4 = = 0) cout<<”Tháng có 28 ngày”;
else cout<<”Tháng có 29 ngày”;
break;
}
getch();
}
Chuyển đổi giữa cấu trúc chọn và rẽ nhánh:
Với cấu trúc rẽ nhánh, các biến trong biểu thức điều kiện có thể có kiểu
bất kỳ. Ngược lại, với cấu trúc chọn, chỉ lựa chọn các trường hợp của biến

×