Tải bản đầy đủ (.doc) (74 trang)

Lập trình C++ - Đề cương - Kĩ thuật lập trình

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 (346.06 KB, 74 trang )

Bộ công nghiệp
Trờng cao đẳng công nghiệp hà nội
--- ---
đề cơng chi tiết
môn học
kỹ thuật lập trình
(Tài liệu giảng dạy)
Biên soạn: ThS. Nguyễn Mạnh Cờng
(lu hành nội bộ)
Hà nội 8/2004
Đề cơng chi tiết
Đề cơng chi tiết Kỹ thuật lập trình
Môn học: Kỹ thuật lập trình
Tài liệu tham khảo
1. Ngôn ngữ lập trình C++ - GS. TS. Phạm văn ất.
2. C++ và lập trình Hớng đối tợng - GS. TS. Phạm văn ất.
3. Kỹ thuật lập trình - Nguyễn Tiến Huy Trần Hạnh Nhi.
4. Ngôn ngữ lập trình C++ - Ngô Trung Việt.
.
Chơng I. Giới thiệu về ngôn ngữ lập trình C++
1. Môi trờng lập trình C++
Ngôn ngữ lập trình C++ là một sự mở rộng của ngôn ngữ lập trình
C, trong đó, chủ yếu đa thêm vào ngôn ngữ C khả năng lập trình hớng
đối tợng và loại bỏ những phức tạp không cần thiết của ngôn ngữ .
Để vào môi trờng soạn thảo chơng trình của C++ ta thực hiện:
+ Cài đặt chơng trình soạn thảo m lệnh C++ vào máy tính.ã
+ Vào th mục TC30\ BIN, chọn TC.Exe.
Khi đó, môi trờng soạn thảo C++ đã sẵn sàng.
- Các thao tác khi soạn thảo chơng trình:
[1]. Mở một file mới: Chọn File\ New hoặc bấm phấm F3 sau đó gõ tên
file vào.


[2]. Lu file: Chọn File\ Save hoặc bấm phím F2. Nếu file cha đợc đặt tên
bởi ngời lập trình hãy đặt tên.
[3]. Mở một file có sẵn: Chọn File\ Open hoặc bấm phím F3. Chọn file
cần mở và bấm Enter.
[4]. Soạn thảo chơng trình: Chơng trình đợc soạn thảo trong cửa sổ soạn
thảo. Nói chung, khi soạn thảo thờng thực hiện những thao tác sau:
- Di chuyển con trỏ: dùng các phím mũi tên, phím Page Up, Page
Down. phím Home đa con trỏ về đầu dòng, phím End đa con trỏ về
cuối dòng.
- Sao chép:
Giữ Shift và phím mũi tên để bôi đen đoạn cần sao chép.
Biên soạn: Nguyễn Mạnh Cờng Trang
2
Đề cơng chi tiết Kỹ thuật lập trình
Đa con trỏ tới nơi đặt đoạn sao chép và bấm tổ hợp phím Ctrl + K +
C để dán.
- Di chuyển khối: Nếu bấm tổ hợp phím Ctrl + K + V sẽ cho phép di
chuyển đoạn mã đợc bôi đen.
- Bỏ bôi đen khối: Đa con trỏ lên trên đoạn bôi đen và bấm tổ hợp
phím Ctrl + K + K để bỏ bôi đen
Chú ý: Khác với ngôn ngữ Pascal, ngôn ngữ C++ có phân biệt
chữ hoa và chữ thờng.
Để ghi các dòng chú thích, sử dụng dấu // tại đầu dòng hoặc đặt
đoạn chú thích nh sau: /* đoạn chú thích */
[5]. Dịch chơng trình: Bấm phím F9 để dịch chơng trình. Nếu chơng
trình có lỗi, chơng trình dịch sẽ báo lỗi. Chơng trình chỉ thực thi đợc nếu
không có lỗi.
[6]. Thực thi chơng trình: Bấm tổ hợp phím Ctrl + F9 để thực thi chơng
trình.
[7]. Đặt đờng dẫn tới các th viện: Trong một chơng trình viết bằng

ngôn ngữ C++ thờng sử dụng các hàm trong các th viện khác nhau.
Thông thờng, các th viện đặt trong các th mục TC\INCLUDE hoặc TC\
LIB. Môi trờng lập trình C++ tự thiết đặt đờng dẫn tới các th viện này.
Tuy nhiên, trong trờng hợp đờng dẫn bị thay đổi, ta cần phải thiết đặt lại.
B1: Trong Menu chính, chọn Option\ Directories.
B2: Trong Include, đặt đờng dẫn tới các th viện có đuôi .h. Trong
Libraries, đặt đờng dẫn tới các th viện đuôi .lib.
2. Các kiểu dữ liệu cơ bản trong C++
Trong C++ có sử dụng một số kiểu dữ liệu cơ bản sau:
a. Kiểu số: bao gồm
+ Số nguyên ngắn int: là kiểu dữ liệu có độ dài 2 byte, dùng để khai
báo các biến nguyên có giá trị trong khoảng 32768 -> 32767
+ Số nguyên ngắn không dấu: unsign int: độ dài 2 byte, khai báo
các biến nguyên có giá trị từ 0 tới 65535.
Biên soạn: Nguyễn Mạnh Cờng Trang
3
Đề cơng chi tiết Kỹ thuật lập trình
+ Số nguyên dài long: là kiểu dữ liệu có độ dài 4 byte, dùng khai
báo các biến nguyên có giá trị trong khoảng 2.147.483.648 ->
2.147.483.647.
+ Số nguyên dài không dấu: unsign long: độ dài 4 byte, khai báo
các biến có giá trị từ 0 tới 4.294.967.295.
+ Số thực (dấu phảy động) float: kích thớc 4 byte khai báo các biến
thực từ 3.4*10
-38
-> 3.4*10
38
.
+ Số thực double: kích thớc 8 byte, có phạm vi từ 1.7*10
-308

- >
1.7*10
308
+ Số thực (dấu phảy động, độ chính xác kép) dài: long double: kích
thớc 10 byte, khai báo các biến từ 3.4 * 10
-4932
tới 1.1 * 10
4932
.
b. Kiểu ký tự: bao gồm
+ Kiểu ký tự char: khai báo biến chứa một ký tự.
+ Kiểu con trỏ ký tự char *: tơng đơng với chuỗi ký tự.
3. Biến và cách khai báo biến
Để khai báo biến trong C++ ta dùng cú pháp sau:
<kiểu dữ liệu> <tên biến> <;>
Trong đó:
- <Kiểu dữ liệu>: có thể là một trong các kiểu dữ liệu chuẩn, có thể là
các kiểu tự định nghĩa.
- <Tên biến>: đợc đặt tuân theo quy tắc đặt tên biến trong ngôn ngữ
lập trình Pascal.
- Các biến cách nhau bởi dấu phảy, các khai báo cách nhau bởi dấu
chấm phảy.
VD: int a, b, c;
long so;
char * s;
Chú ý: có thể khai báo biến tại bất kỳ đâu trong chơng trình và tr-
ớc khi sử dụng.
4. Cấu trúc một chơng trình đơn giản
Biên soạn: Nguyễn Mạnh Cờng Trang
4

Đề cơng chi tiết Kỹ thuật lập trình
Một chơng trình đơn giản trong C++ thờng có cấu trúc nh sau:
//Khai báo các th viện sử dụng trong chơng trình.
#include <Tên th viện>
.
main() //tên hàm chính
{
// Nhập dữ liệu
// Tính toán
// In các kết quả
}
VD1. xét đoạn trình sau:
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
main()
{
clrscr();
int a, b; //khai báo hai biến nguyên a, b
cout<<nhập số nguyên a ;
cin>>a;
cout<<nhập số nguyên b;
cin>>b;
int c;
c = a+b;
cout<<Tổng của a + b là <<c;
getch();
return 0;
}
Trong ví dụ trên, ta có:

- Các câu lệnh #include <tên th viện.h>: khai báo một số th viện sẽ sử
dụng. Các th viện này có chứa sẵn các hàm sẽ sử dụng trong chơng
trình. Chẳng hạn th viện iostream.h chứa các hàm cout, cin
- Từ khóa main() để bắt đầu thân chơng trình chính.
- Các ký tự {, } để bắt đầu và kết thúc một khối lệnh trong chơng trình.
Các ký tự này tơng tự các từ khóa này Begin và End trong Pascal.
- clrscr(); là một lời gọi hàm xóa màn hình. Hàm nãy đã có sẵn trong
th viện stdio.h. Cần lu ý cách gọi hàm không đối, khác với Pascal.
Biên soạn: Nguyễn Mạnh Cờng Trang
5
Đề cơng chi tiết Kỹ thuật lập trình
- Các lệnh cout, cin có sẵn trong th viện iostream.h cho phép in lên
màn hình câu thông báo và nhận giá trị nhập vào từ bàn phím cho hai
biến a, b. chúng tơng tự nh lệnh Write và Read trong Pascal.
- Lệnh getch() có trong th viện conio.h cho phép dừng màn hình lại để
xem kết quả. Màn hình sẽ dừng cho tới khi một phím bất kỳ đợc bấm.
- Lệnh return 0; dùng để chỉ ra kết quả trả về của hàm.
VD2. Viết chơng trình nhập vào hai số nguyên a, b sau đó in ra
màn hình tổng, hiệu, tích, thơng của hai số nguyên đó.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
main()
{
clrscr();
int a, b; //khai báo hai biến nguyên a, b
cout<<nhập số nguyên a ;
cin>>a;
cout<<nhập số nguyên b;
cin>>b;

int T, H, TI, TH;
T = a+b;
H = a-b;
TI = a*b;
TH= a/b;
cout<<Tổng của a + b là <<T;
cout<<Hiệu của a + b là <<H;
cout<<Tích của a + b là <<TI;
cout<<Thơng của a + b là <<TH;
getch();
return 0;
}
Chú ý: Trong C++, thơng của hai số nguyên là một số nguyên.
5. Các lệnh nhập xuất
a. Các lệnh nhập xuất trong IOStream.h
- Lệnh xuất: Cú pháp
cout<< <Nội dung cần xuất>;
Trong đó:
<<: đợc gọi là toán tử xuất.
Biên soạn: Nguyễn Mạnh Cờng Trang
6
Đề cơng chi tiết Kỹ thuật lập trình
<Nội dung cần xuất>: có thể là Hằng ký tự, Hằng xâu ký tự, Biến,
Hàm, phơng thức định dạng.
VD: cout<<Sin(x) = ;
cout<<Sin(x);
Chú ý: - có thể sử dụng liên tiếp nhiều toán tử xuất trên một dòng
cout.
VD: cout<<Giá trị của a[<<i<<] là <<a[i];
Các lệnh cout, cin chỉ thích hợp cho việc nhập xuất các biến kiểu

số. Với các biến kiểu xâu ký tự thì xâu nhập, xuất phải không chứa dấu
cách.
Định dạng dữ liệu trớc khi xuất:
Ta có thể sử dụng một trong 2 cách sau:
Cách 1: sử dụng toán tử định dạng
cout.width(int n): chỉ định số vị trí tối thiểu dành cho giá trị xuất là
n vị trí.
+ Nếu giá trị xuất chiếm ít hơn n vị trí thì mặc định là các ký tự
trống sẽ chèn vào phía trớc.
+ Nếu giá trị xuất chiếm nhiều hơn n vị trí, số vị trí dành cho giá trị
xuất đó sẽ đợc tăng lên sao vừa đủ thể hiện giá trị xuất.
cout.fill(char ch): Chỉ định ký tự ch sẽ đợc điền vào những vị trí
trống (nếu có).
cout.precision(int n): chỉ định độ chính xác của giá trị số khi xuất
là n ký tự sau dấu phảy.
VD:
float a = 123.4523.
nếu muốn xuất a ra màn hình dới dạng: |000123.45| ta có thể định
dạng nh sau:
cout.width(9);
cout.fill(0);
cout.precision(2);
cout<<a;
Cách 2: sử dụng các hàm định dạng:
Biên soạn: Nguyễn Mạnh Cờng Trang
7
Đề cơng chi tiết Kỹ thuật lập trình
Tơng tự nh các phơng thức định dạng, các hàm định dạng tơng ứng
là:
setw(int n) tơng tự nh cout.width(int n).

setfill(char ch) tơng tự nh cout.fill(char ch).
setprecision(int n) tơng tự nh cout.precision(int n).
Cách dùng: sử dụng các hàm định dạng ngay trên các dòng cout,
trớc khi đa ra giá trị xuất.
VD: Với ví dụ trên, ta có thể viết:
cout<<setw(9)<<setfill(0)<<setprecision(2)<<a;
- Lệnh nhập: Cú pháp
cin >> <Biến>;
Trong đó:
>>: đợc gọi là toán tử nhập.
Dòng cin dùng để nhập các giá trị (thông thờng là) từ bàn phím
vào các biến.
VD: cout<<Nhập giá trị của a;
cin>>a;
Chú ý: có thể dùng liên tiếp nhiều toán tử nhập trên một dòng cin
để nhập giá trị cho nhiều biến.
cin>>a>>b>>c;
Bài tập ví dụ: Viết chơng trình nhập vào một số thực x, in ra màn
hình giá trị của F(x) = sin
2
(x) + cos(x) với độ chính xác 2 chữ số sau dấu
phảy.
#include <conio.h>
#include <math.h>
#include <iostream.h>
void main()
{
clrscr();
float x, F;
cout<<nhập số thực a ;

cin>>x
cout.precision(2);
cout<<Giá trị F(<<x<<) = <<sin(x)*sin(x) + cos(x);
Biên soạn: Nguyễn Mạnh Cờng Trang
8
Đề cơng chi tiết Kỹ thuật lập trình
getch();
}
b. Các lệnh nhập xuất trong Stdio.h
Lệnh xuất: printf.
Cú pháp: printf( chuỗi cần xuất , <Biến 1>, <Biến 2>);
Trong đó: Chuỗi cần xuất có thể là:
- Hằng ký tự, hằng xâu ký tự: Là các ký tự cần in lên màn hình.
- Các đặc tả hay ký tự đại diện, bao gồm:
%d: đại diện cho biến nguyên.
%f: đại diện cho biến thực.
%c: đại diện cho biến kiểu ký tự (mặc định).

- Mỗi biến cần đa ra màn hình cần có một đặc tả tơng ứng tại vị trí
muốn đa ra.
VD: Cần đa ra các giá trị của các biến a, b, c kiểu nguyên, ta viết:
printf ( Giá trị của a b c la %d %d %d, a, b, c);
Lệnh nhập: scanf.
Cú pháp: scanf(chuỗi các đặc tả, <&Biến 1>, <&biến 2>);
Trong đó, mỗi biến cần phải có một đặc tả tơng ứng. Lệnh scanf
nhập giá trị vào các biến thông qua địa chỉ của biến.
c. Các lệnh nhập xuất trong Conio.h
Lệnh xuất: puts.
Cú pháp: puts(p);
Trong đó p là một con trỏ, trỏ tới một ký tự hoặc hằng xâu ký tự.

Nếu p là biến chứa 1 ký tự thì p phải có kiểu char *, nếu p là kiểu char thì
phải là một mảng kiểu char.
Lệnh puts sẽ đa các ký tự đợc con trỏ p trỏ tới lên màn hình.
VD:
char * p = a;
puts(p);// đa ký tự a ra màn hình
Biên soạn: Nguyễn Mạnh Cờng Trang
9
Đề cơng chi tiết Kỹ thuật lập trình
char q[100] = Ha Noi;
puts(q);// đa Ha Noi ra màn hình.
Lệnh nhập: gets().
Cú pháp: gets(p);
Trong đó, p là biến con trỏ ký tự, nh vậy, p phải có kiểu char * .
Nếu p là biến kiểu char thì phải là một biến mảng kiểu char. (char * p
hoặc char p[])
Các lệnh gets, puts thích hợp cho việc nhập xuất các biến kiểu
xâu ký tự.
6. Biểu thức trong C++
Một biểu thức thông thờng đợc cấu thành từ hai thành phần: các
toán tử và các toán hạng.
a. Các toán tử: đợc tạm chia làm 3 loại
Các toán tử số học
Trong C++ sử dụng các toán tử số học cho trong bảng sau:
Stt Toán tử Ngôn ngữ
Pascal
Ngôn ngữ C++
1 Cộng + +
2 Trừ - -
3 Nhân * *

4 Chia / /
5 Đồng d mod %
6 Tăng 1 đơn
vị
+ 1 ++
7 Giảm 1 đơn
vị
- 1 - -
8 Gán : = =
VD:
int a, b;
int T, H, TI, TH, D;
a=8;
b=3;
T = a+b;
H = a-b;
TI = a*b;
Biên soạn: Nguyễn Mạnh Cờng Trang
1
0
Đề cơng chi tiết Kỹ thuật lập trình
TH = a/b;
D = a%b;
a++;
b--;
Các toán tử Logic
Trong C++ sử dụng các toán tử Logic cho trong bảng sau:
Stt Toán tử Ngôn ngữ
Pascal
Ngôn ngữ C++

1 Và And &&
2 Hoặc Or | |
3 Phủ định Not !
Các toán tử so sánh
Trong C++ sử dụng các toán tử So sánh cho trong bảng sau:
Stt Toán tử Pascal Ngôn ngữ C++
1 Lớn hơn > >
2 Nhỏ hơn < <
3 Lớn hơn hoặc bằng >= >=
4 Nhỏ hơn hoặc bằng <= <=
5 Bằng = = =
6 Không bằng < > ! =
b. Các toán hạng: có thể là hằng, biến hoặc hàm.
VD: Trong biểu thức 3*X+2+sin(x), các toán tử + và * đợc sử dụng.
Toán hạng bao gồm: Hằng (3 và 2), biến (X) và hàm (sin(x)).
c. Thứ tự u tiên các phép toán
Trong một biểu thức có sử dụng nhiều toán tử, thứ tự u tiên các
toán tử nh sau (theo chiều từ trái qua phải, từ trên xuống dới):
! ++ - - * / % + -
< <= > >= == != && | |
VD: Viết biểu thức toán học sau bằng ngôn ngữ C++ (nếu cần) và
cho biết thứ tự thực hiện các phép toán.
5x 6 +2/7 + (6 mod 3)
i + j ++
(i+j)++
Biên soạn: Nguyễn Mạnh Cờng Trang
1
1
Đề cơng chi tiết Kỹ thuật lập trình
Chơng II. Các cấu trúc điều khiển trong C++

1. Giới thiệu chung
Một phần rất quan trọng trong một ngôn ngữ lập trình là các cấu
trúc điều khiển.
Trong Pascal ta đã làm quen với 3 loại cấu trúc điều khiển: Chọn,
Rẽ nhánh, Lặp. Ta sẽ lần lợt xem xét các loại cấu trúc điều khiển đó
trong ngôn ngữ C++. Ta tạm thời chia các cấu trúc điều khiển trong C++
theo cây thứ bậc sau:
2. 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 mệnh đề:
- [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ấu trúc rẽ nhánh có hai dạng nh trong sơ đồ khối dới đây.
Biên soạn: Nguyễn Mạnh Cờng Trang
1
2
Cấu trúc điều khiển
Cấu trúc
chọn
Cấu trúc
rẽ nhánh
Cấu trúc
lặp
Cấu trúc lặp
kiểm tra điều
kiện trước
Cấu trúc lặp

kiểm tra điều
kiện sau
Cấu trúc
lặp với số
lần lặp xác
định
Cấu trúc lặp
với số lần lặp
không xác
định
Đề cơng chi tiết Kỹ thuật lập trình
Cú pháp:
(mô phỏng mệnh đề 1)
if (<biểu thức điều kiện>)
<Lệnh>;
(Mô phỏng mệnh đề 2)
if (<biểu thức điều kiện>)
<Lệnh 1>;
else
<Lệnh 2>;
ý nghĩa:
[1]. nếu <biểu thức điều kiện> nhận giá trị đúng, sẽ thực hiện
<Lệnh>, ngợc lại, bỏ qua lệnh if.
[2]. nếu <biểu thức điều kiện> nhận giá trị đúng, sẽ thực hiện
<Lệnh 1>, ngợc lại, nếu <biểu thức điều kiện> nhận giá trị sai sẽ thực
hiện <Lệnh 2>.
Chú ý:
- Biểu thức điều kiện đợc đặt giữa hai dấu ngoặc đơn ( ).
- Câu lệnh trớc else có dấu ;.
- <Lệnh 1> và <Lệnh 2> có thể là một khối lệnh. Các khối lệnh đ-

ợc đặt trong hai dấu { }.
Biên soạn: Nguyễn Mạnh Cờng Trang
1
3
BTĐK
đúng?
Thực hiện lệnh
BTĐK đúng?
Thực hiện lệnh1
Thực hiện lệnh 2
N
Y
Y N
a). Mô tả mệnh đề [1] b) Mô tả mệnh để [2]
Đề cơng chi tiết Kỹ thuật lập trình
VD: 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>
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. Các mệnh đề if lồng nhau t-
ơng đơng với một mệnh đề if mà biểu thức điều kiện của nó là sự kết
hợp biểu các biểu thức điều kiện của các mệnh để if lồng nhau theo
phép và (AND).
Mỗi lệnh if đủ 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, ta có thể sử dụng n-1 lệnh if đủ
lồng nhau.
VD: Viết chơng trình thực hiện việc nhập vào số tiền của khách
hàng phải trả. Nếu số tiền từ 300000 tới 400000, khuyến mại 20%. Nếu
số tiền từ 400000 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>
main()
{
clrscr();
int T, km;
cout<<Nhập số tiền ;
cin>>T;
if (T>=300000 && T <=400000)
km = 20*T/100;
else
if (T>40000)
Biên soạn: Nguyễn Mạnh Cờng Trang
1
4
Đề cơng chi tiết Kỹ thuật lập trình

km = 30*T/100;
else
km = 0;
cout<<Số tiền khuyến mại <<km;
getch();
}
Nếu các khả năng là loại trừ nhau thì không khi đó có thể sử dụng
các 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, thì nhất thiết phải sử dụng các lệnh if
rời nhau.
VD: 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>
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.0)
T = 30000;
else
if (tk>=9.0 && hk = = T)
T += 100000;
cout<<Học bổng <<T;
getch();
}
Biên soạn: Nguyễn Mạnh Cờng Trang
1
5
Đề cơng chi tiết Kỹ thuật lập trình
Đ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>
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.0)
T = 30000;
if (tk>=9.0 && hk = = T)
T += 100000;
cout<<Học bổng <<T;
getch();
}
3. 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;
Biên soạn: Nguyễn Mạnh Cờng Trang
1
6
Đề cơng chi tiết Kỹ thuật lập trình

case <GT n><:>
Lệnh n;
break;

[default:
<Lệnh mặc định>;]
}
ý nghĩa:
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 các giá trị trên.
- Sơ đồ khối:
Chú ý:
- Lệnh switch chỉ thực hiện trên biến nguyên.
Biên soạn: Nguyễn Mạnh Cờng Trang
1
7
Biến =
Biến =
Biến =
Lệnh 1
Lệnh 2
Lệnh n

Lệnh mặc định
Đề cơng chi tiết Kỹ thuật lập trình
- Mỗi từ khoá case chỉ lựa chọn 1 trờng hợp.
- Các câu lệnh <Lệnh 1>, <Lệnh 2> có thể là một khối lệnh.
Sau đó bắt buộc phải có từ khóa <break;> .
- Thành phần [deffault:] 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.

VD1: 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>
main()
{
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;
Biên soạn: Nguyễn Mạnh Cờng Trang
1
8
Đề cơng chi tiết Kỹ thuật lập trình
}
getch();
}
VD2: 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ị.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
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();
}
Chuyển đổi giữa cấu trúc chọn và rẽ nhánh:
Biên soạn: Nguyễn Mạnh Cờng Trang
1
9
Đề cơng chi tiết Kỹ thuật lập trì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 nguyên. Do vậy, việc chuyển đổi từ cấu trúc chọn sang cấu trúc rẽ
nhánh bao giờ cũng thực hiện đợc, điều ngợc lại không đúng.
Để chuyển đổi một cấu trúc rẽ nhánh mà biểu thức điều kiện có
các biến không phải kiểu nguyên sang cấu trúc chọn cần sử dụng thêm
một biến nguyên để mã hoá các trờng hợp của nó, sau đó ta áp dụng

cấu trúc chọn trên biến nguyên này.
4. Cấu trúc lặp
a. Vòng lặp với số lần lặp xác định
Là vòng lặp mà ngời lập trình luôn biết trớc số lần lặp của lệnh lặp.
Trong quá trình lặp, ta thờng sử dụng một biến để kiểm soát số lần
lặp gọi là Biến chạy.
Biến chạy thờng nhận các giá trị từ cận dới (n1) tới cận trên (n2)
và số lần lặp bằng n2 n1.
Cú pháp:
for (<Biểu thức 1>;<Biểu thức 2>;<Biểu thức 3>)
<Lệnh lặp>;
Trong đó:
<Biểu thức 1>: thông thờng có có dạng: <Biến chạy> = <Cận dới>.
<Biểu thức 2>: thông thờng có dạng: <Biến chạy> <Toán tử so
sánh> <cận trên>.
<Biểu thức 3>: thông thờng là một biểu thức để tang hoặc giảm
biến chạy.
Trong C++, vòng lặp có số lần lặp xác định cũng có nguyên lý
hoạt động tơng tự trong Pascal.
ý nghĩa:
B1: Thực hiện <Biểu thức 1>
B2: Kiểm tra <Biểu thức 2>. Nếu sai, thoát khỏi vòng for. Ng-
ợc lại, sang B3.
B3: Thực hiện <Lệnh lặp>.
B4: Thực hiện <Biểu thức 3>. Quay lại B2.
Sơ đồ khối:
Biên soạn: Nguyễn Mạnh Cờng Trang
2
0
Xác định BT1

Kiểm tra BT2
Thực hiện lệnh
thân vòng for
Kiểm tra BT3
Đề cơng chi tiết Kỹ thuật lập trình
Chú ý:
- Các biểu thức đặt cách nhau bởi dấy ;.
- <Lệnh lặp> có thể là một khối lệnh.
- Các biểu thức có thể khuyết nhng các dấu ; phải đợc giữ
nguyên.
VD1: Viết chơng trình tính n! (n nguyên)
Cách 1: Cách thông thờng
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main()
{
clrscr();
int n; long GT=1;
cout<<Nhap n ; cin>>n;
for (int i=2;i<=n; i++)
GT*=i;
cout<<n<< Giai thua : <<GT;
getch();
}
Cách 2: Viết thiếu <biểu thức 3>
void main()
{
clrscr();
Biên soạn: Nguyễn Mạnh Cờng Trang

2
1
Đề cơng chi tiết Kỹ thuật lập trình
int n; long GT=1;
cout<<Nhap n ; cin>>n;
for (int i=2;i<=n; )
{
GT*=i;
i++;
}
cout<<n<< Giai thua : <<GT;
getch();
}
Các cách thoát khỏi vòng lặp for.
- Thoát tự nhiên: Khi <Biểu thức 2> nhận giá trị sai, chơng trình tự
động thoát khỏi vòng for và chuyển tới lệnh tiếp theo.
- Thoát cỡng bức:
+ Cách 1: sử dụng lệnh break;
Khi gặp lệnh break; trong thân vòng for, chơng trình sẽ lập tức
thoát khỏi vòng lặp for và chuyển tới lệnh tiếp theo bất kể <Biểu thức 2>
vẫn nhận giá trị đúng.
+ Cách 2: sử dụng lệnh goto
Lệnh goto có dạng: goto <Nhãn>. Trong đó,<Nhãn> có dạng:
<Tên nh n> <:>ã
<Tên nhãn> tuỳ ý đặt theo quy ớc đặt tên trong C.
Khi gặp lệnh goto <Nhãn>, chơng trình sẽ nhảy tới vị trí đặt nhãn.
Nếu nhãn đặt ngoài vòng for, chơng trình sẽ thoát khỏi vòng for.
Cần chú ý trong trờng hợp 2 lệnh for lồng nhau, khi đó lệnh break
chỉ làm cho chơng trình thoát khỏi vòng for gần nhất chứa lệnh break.
Do vậy, để thoát khỏi cả 2 vòng for lồng nhau, ta sử dụng lệnh goto.

VD2: xét ví dụ 1 trong trờng hợp thiếu biểu thức 1 và/ hoặc biểu
thức 2.
Cách 3: Viết thiếu <Biểu thức 2> và <Biểu thức 3> sử dụng
break.
void main()
{
clrscr();
int n; long GT=1;
cout<<Nhap n ; cin>>n;
Biên soạn: Nguyễn Mạnh Cờng Trang
2
2
Đề cơng chi tiết Kỹ thuật lập trình
for (int i=2;;)
{
if (i==n)
break;
GT*=i;
i++;
}
cout<<n<< Giai thua : <<GT;
getch();
}
Cách 4: Viết thiếu <Biểu thức 2> và <Biểu thức 3> sử dụng
goto.
void main()
{
clrscr();
int n; long GT=1;
cout<<Nhap n ; cin>>n;

for (int i=2;;)
{
if (i==n)
goto Ex; // nh n là Ex, tên tự đặt.ã
GT*=i;
i++;
}
Ex:
cout<<n<< Giai thua : <<GT;
getch();
}
Cách 5: Viết thiếu cả 3 biểu thức.
void main()
{
clrscr();
int n; long GT=1;
cout<<Nhap n ; cin>>n;
int i=2;
for (;;)
{
if (i==n)
break;
GT*=i;
Biên soạn: Nguyễn Mạnh Cờng Trang
2
3
Đề cơng chi tiết Kỹ thuật lập trình
i++;
}
cout<<n<< Giai thua : <<GT;

getch();
}
Vì độ phức tạp của chơng trình tỷ lệ thuận với số lệnh goto sử
dụng trong chơng trình, vì vậy nên hạn chế sử dụng goto.
VD2: Cho dãy số nguyên x[] = { 1, 4, 5, 7, 3, 2}. Viết chơng trình
đảo ngợc dãy số trên và in kết quả lên màn hình.
Để giải quyết bài toán trên, có thể có nhiều cách. Cách giải sau
minh hoạ cách viết khác của các biểu thức trong cú pháp vòng for.
#include "conio.h"
#include "iostream.h"
#include "stdio.h"
void main()
{
clrscr();
int x[] = {1, 4, 5, 7, 3, 2}, n;
n=sizeof(x)/ sizeof(int);
for (int i=0, j=n-1; i<n/2; i++, j--)
{
int tg = x[i];
x[i]=x[j];
x[j]=tg;
}
for (i=0; i<n; i ++)
cout<<x[i]<<" ";
getch();
}
Nhận xét: Các biểu thức 1, 2, 3 trong cú pháp của vòng for có thể
bao gồm một dãy các biểu thức con, cách nhay bởi dấu phảy. Khi đó, sự
đúng/ sai của biểu thức mẹ là sự đúng/ sai của biểu thức con đầu tiên
trong dãy. Nh vậy vòng for trên có thể viết nh sau:

void main()
{
clrscr();
int x[] = {1, 4, 5, 7, 3, 2}, n;
n=sizeof(x)/ sizeof(int);
int tg;
for (int i=0, j=n-1; i<n/2; tg=x[i], x[i]=x[j], x[j]=tg, i++, j--)
{
}
Biên soạn: Nguyễn Mạnh Cờng Trang
2
4
Đề cơng chi tiết Kỹ thuật lập trình
for (i=0; i<n; i ++)
cout<<x[i]<<" ";
getch();
}
b. Vòng lặp với số lần lặp không xác định
Trong C++, ta chia vòng lặp với số lần lặp không xác định ra làm
hai loại:
Lặp kiểm tra điều kiện tr ớc: Trớc tiên, kiểm tra biểu thức điều
kiện. Nếu biểu thức điều kiện còn đúng, sẽ thực hiện lệnh lặp. Nếu biểu
thức điều kiện sai, ra khỏi vòng lặp.
+ Sơ đồ khối:
Nh vậy: Lệnh lặp có thể không đợc thực hiện lần nào.
+ Cú pháp:
while (<Biểu thức điều kiện>)
<Lệnh lặp>
ý nghĩa:
B1: Kiểm tra biểu thức điều kiện. Nếu biểu thức điều kiện sai, thoát

ra khỏi vòng lặp. Nếu biểu thức điều kiện đúng, chuyển qua bớc 2.
B2: Thực hiện <Lệnh lặp>. Quay lại B1.
Chú ý:
- Biểu thức điều kiện phải đặt trong dấu ( ).
- <Lệnh lặp> có thể là một khối lệnh.
- Cần tránh các trờng hợp lặp vô hạn.
VD1: Viết chơng trình tìm số lũy thừa 2 đầu tiên lớn hơn 1000.
#include <conio.h>
#include <stdio.h>
Biên soạn: Nguyễn Mạnh Cờng Trang
2
5
BTĐK
Thực hiện lệnh lặp
Y
N

×