16 Giao diện gồm 2 phần chính không thấy cửa sổ này thì vào menu View/ Workspace hoặc nhấn phím Alt + số 0 17 MÔ TẢ CỬA SỔ WORKSPACE Sau khi chọn dấu + ở tab FileView, sẽ xuất hiện 3 thư
Trang 1LẬP TRÌNH C
(CƠ BẢN)
1
YÊU CẦU
6.0 hoặc Microsoft Visual Net 2005 (Viết ứng dụng dạng Console)
khảo tài liệu
2
NỘI DUNG
và môi trường cài đặt
3
Chương 1 Khái niệm cơ bản
về lập trình và giới thiệu môi
5
Các đặc điểm cần có của một chương trình
năng để phát triển tiến hóa theo yêu cầu
dùng để làm một phần trong một chương trình lớn khác
các môi trường
6
Trang 2liệu đầu vào thành kết quả
Hướng dẫn cài đặt
và sử dụng Microsoft Visual C++ 6.0
10
BỘ CÀI ĐẶT GỒM
Trang 3Tab Projects chọn Win32 Console Application
Project name: Nhập tên của dự án (Ví dụ đặt tên là
BaiTap1)
Location: Vị trí lưu dự án
VC sẽ tạo một thư mục với tên là tên Project tại vị trí đã
chỉ định Bên trong thư mục này sẽ chứa toàn bộ các file
liên quan đến Project Nếu muốn sao chép Project thì chỉ
việc chép thư mục này.
16
Giao diện gồm 2 phần chính
không thấy cửa sổ này thì vào menu View/
Workspace hoặc nhấn phím Alt + số 0)
17
MÔ TẢ CỬA SỔ WORKSPACE
Sau khi chọn dấu + ở tab FileView,
sẽ xuất hiện 3 thư mục:
Source Files (*.cpp): Chứa các
file cài đặt các hàm
Header Files (*.h): Chứa các file
khai báo (hàm, biến toàn cục, kiểucấu trúc, …)
Resource Files: Chứa các tài
nguyên (icon, bitmap, dialog, …)
Đối với lập trình ứng dụng Console thì không dùng đến. 18
Trang 4Để dễ dàng viết và quản lý code theo phương
pháp lập trình thủ tục, mỗi Project mới, ta qui
ước như sau:
Chứa các khai báo hàm, hằng số, …
File main.cpp: Cài đặt hàm main()
File caidat.cpp: Cài đặt các hàm con đã khai
chọn Add Files to Folder …
20
(Lưu ý: Không thay đổi đường dẫn thư mục –
CÁCH TẠO FILE CÀI ĐẶT (MAIN.CPP, CAIDAT.CPP)
Add Files to Folder …
sau đó chọn Yes
(Mẹo: Có thể tạo 2 file cùng một lúc bằng cách:
Nhập “main.cpp” “caidat.cpp” vào ô File name:
Tên file phải nằm trong cặp dấu nháy kép (“), mỗi tên file cách nhau bởi khoảng trắng)
22
VIẾT LỆNH CHO FILE KHAIBAO.H
Cửa sổ soạn thảo file khaibao.h
24
Trang 5CẤU TRÚC FILE KHAIBAO.H
#include “khaibao.h”
void main() {
DỊCH, SỬA LỖI VÀ CHẠY CHƯƠNG TRÌNH
để tìm, quan sát và sửa lỗi (cửa sổ lỗi xuất hiện bên dưới màn hình soạn thảo code)
28
VÍ DỤ
Viết chương trình hiển thị lên màn hình
dòng chữ: “Xin chào mọi người”
Do đây là ví dụ rất đơn giản nên chỉ có
phần khai báo (file khaibao.h) và hàm
main() (file main.cpp) nên không có phần
cài đặt hàm con (file caidat.cpp)
Trang 6chọn Open
33
Cách 2: Mở trực tiếp từ Explore
Mở thư mục chứa Project
Double click vào 1 trong 2 file có đánh dấu mũi tên
(Lưu ý: Khi chép Project có thể xóa thư mục Debug,
vì thư mục này sẽ được tạo khi chạy chương trình)34
nghĩa kiểu dữ liệu mới.
36
Trang 7CÁC KHÁI NIỆM
Lệnh
Lệnh thực hiện một chức năng nào đó
(khai báo, gán, xuất, nhập, …) và được
kết thúc bằng dấu chấm phẩy (;)
Khối lệnh gồm nhiều lệnh và được đặt
lệnh PHẢI có dấu chấm phẩy (;).
dòng sao cho mỗi lệnh phải được quan sát trọn vẹn trong pham vi cửa sổ lệnh.
38
dòng, ngay cả các khai báo biến, nếu các
biến có khác kiểu cũng nên đặt trên các
dòng khác nhau.
Từ vị trí cụ thể đến cuối dòng: dùng // ngay tại
vị trí đó.
Tạo nhiều dòng ghi chú: dùng cặp ký tự /*
ngay trước dòng đầu tiên, và cặp ký tự */ ngay
Biến để lưu trữ các giá trị do người dùng nhập vào hoặc các giá trị tạm thời trong quá trình tính toán.
Mỗi biến sẽ có tên và kiểu dữ liệu tương ứng.
Kiểu dữ liệu của biến xác định những giá trị kiểu nào có thể được lưu trong biến (ví dụ số hay chữ…).
PHẢI khai báo BiẾN trước khi sử dụng
Kiểu tự định nghĩa (xét sau)
Dùng những kiểu cơ sở để xây dựng thành những
kiểu dữ liệu mới cho phù hợp với bài toán.
41
CÁC KIỂU DỮ LIỆU CƠ SỞ
KIỂU LIÊN TỤC (SỐ THỰC)
KIỂU RỜI RẠC (SỐ NGUYÊN)
2 unsigned char Số nguyên dương 1 byte
4 unsigned short Số nguyên dương 2 bytes
6 unsigned int Số nguyên dương 4 bytes
8 unsigned long Số nguyên dương 4 bytes
KIỂU LUẬN LÝ
1 bool Gồm 2 giá trị: true hoặc false
42
Trang 8KHAI BÁO BIẾN
Cú pháp
<Kiểu dữ liệu> tênbiến;
Ví dụ:
int a; //Khai báo biến để lưu số nguyên tên a
float c; //Khai báo biến để lưu số thực tên c
Khai báo nhiều biến cùng kiểu
<Kiểu dữ liệu> tênbiến1, tênbiến2, tênbiến3;
hoặc dấu gạch dưới (_)
struct, long, int, while, for, if, else, continue, typedef,
do, goto, case, define, …
Phân biệt chữ hoa và thường
44
KHAI BÁO VÀ KHỞI GÁN GIÁ TRỊ BAN
ĐẦU CHO BIẾN
<Kiểu dữ liệu> tênbiến = giá trị;
4 / Chia lấy phần nguyên
5 % Chia lấy phần dư
TOÁN TỬ TĂNG GIẢM
trước thì tăng giảm trước rồi tính biểu thức hoặc ngược lại
Toán tử điều kiện
(biểu thức điều kiện)?<biểu thức cho trường hợp đúng>:<biểu thức cho trường hợp sai>
Trang 9THỨ TỰ ƯU TIÊN PHÉP TOÁN
Toán tử Độ ưu tiên Trình tự kết hợp
! ~ ++ - + * & sizeof 2 Từ phải qua trái
< <= >= > 6 Từ trái qua phải
49
CÁC LỖI THƯỜNG GẶP KHI VIẾT CHƯƠNG TRÌNH
Quên khai báo các biến sử dụng trong chương trình
Lưu một giá trị vào một biến nhưng không cùng kiểu dữ liệu vớibiến
Sử dụng biến trong một biểu thức khi nó chưa có giá trị Lỗi nàythì không được phát hiện bởi trình biên dịch, khi đó giá trị củabiến là một giá trị bất kỳ và kết quả của biểu thức là vô nghĩa
Sử dụng giá trị của phép chia không chính xác Lỗi này thườngxuất hiện trong các biểu thức có nhiều toán hạng và lỗi này rất khóphát hiện
Ví dụ: 3.2 + 2/3 + 1.5 thì sẽ cho kết quả sẽ bằng 4.7 thay vì kết quả đúng phải bằng 5.36666666666667
Sử dụng một biểu thức mà trong đó chứa nhiều loại dữ liệu nhưnglại không biết chắc chắn kiểu dữ liệu của kết quả 50
HÀM NHẬP XUẤT TRONG CONSOLE
Thư viện hàm: iostream.h
Hàm nhập giá trị từ bàn phím: cin>>tênbiến;
Ví dụ: int a;
cin>>a; //Người dùng nhập giá trị từ phím sẽ lưu vào biến a
Hàm xuất giá trị ra màn hình: cout<<tênbiến hoặc chuỗi ký tự;
Ví dụ: int a = 5;
cout<<“Gia tri cua a = “<<a;
Các biến và chuỗi cách nhau bởi dấu << (chuỗi nằm trong cặp
Kết quả: xyz zyx
Kết quả: zyx
54
Trang 10giá trị trung bình cộng của 3 số trên và xuất kết quả ra
màn hình
từ 1 đến n và xuất kết quả ra màn hình
theo độ Fahrenheit và xuất ra nhiệt độ tương đương của
nó theo độ Celsius, sử dụng công thức chuyển đổi:
biết 3 số vừa nhập có thứ tự tăng dần (a<b<c) không?
Và xuất kết quả
59
) 32 ( 9
Trang 11PHÂN TÍCH LỆNH ĐỂ XÁC ĐỊNH KẾT QUẢ
Xác định xem chương trình có sử dụng những biến nào;
Giá trị ban đầu của mỗi biến;
Những biến nào sẽ bị thay đổi trong quá trình chạy chương trình
0 Giá trị 0 Giá trị 0 … Giá trị 0
1 Giá trị 1 Giá trị 1 … Giá trị 1
2 Giá trị 2 Giá trị 2 … Giá trị 2
Lưu ý từng lệnh và xét kỹ giá trị của biểu thức điều
kiện trong đoạn chương trình
CÁC KÝ HIỆU LƯU ĐỒ
62
CẤU TRÚC TUẦN TỰ
Tuần tự thực thi tiến trình, mỗi
lệnh được thực thi theo một
chuỗi từ trên xuống, xong lệnh
này rồi chuyển xuống lệnh kế
dãy lệnh nào đó dựa vào kết quả của một điều kiện (biểuthức quan hệ hay biểu thức so sánh)
Trang 12Ví dụ: Viết chương trình nhập vào một số nguyên
từ 1 đến 10, nếu nhập sai thì thông báo
67
void main() {
int k;
cout<<"Hay nhap mot so tu 1 den 10: “;
cin>>k;
if (k < 1 || k > 10) cout<<"So ban vua nhap khong hop le";
}
68
Xét cả hai trường hợp đúng và sai:
if (biểu thức điều kiện)
Nếu biểu thức điều kiện cho kết quả true thì thực hiện khối
lệnh 1, ngược lại thì cho thực hiện khối lệnh thứ 2
Trang 13cout<<"Tong cua a va b la: " <<(a + b);
2 Cho ba số a, b, c đọc vào từ bàn phím Hãy tìm giá trị
lớn nhất của ba số trên và in ra kết quả
3 Cho ba số a, b, c đọc vào từ bàn phím Hãy in ra màn
hình theo thứ tự tăng dần các số (Chỉ được dùng thêm
5 Viết chương trình nhập vào số nguyên n gồm ba chữ số
Xuất ra màn hình theo thứ tự tăng dần của các chữ số
Ví dụ: n=291 Xuất ra 129.
6 Nhập vào ngày, tháng, năm Kiểm tra xem ngày, tháng, năm đó có hợp lệ hay không? In kết quả ra màn hình
7 Nhập vào giờ, phút, giây Kiểm tra xem giờ, phút, giây
đó có hợp lệ hay không? In kết quả ra màn hình
8 Viết chương trình nhập vào ngày, tháng, năm hợp lệ
Cho biết năm này có phải là năm nhuận hay không? In kết quả ra màn hình
9 Viết chương trình tính diện tích và chu vi các hình: tam giác, hình vuông, hình chữ nhật và hình tròn với những thông tin cần được nhập từ bàn phím
78
Trang 1410 Viết chương trình tính tiền cước TAXI Biết rằng:
km đầu tiên là 13000đ.
Mỗi km tiếp theo là 12000đ.
Nếu lớn hơn 30km thì mỗi km thêm sẽ là 11000đ.
Hãy nhập số km sau đó in ra số tiền phải trả.
11 Nhập vào 3 số nguyên dương Kiểm tra xem 3 số
đó có lập thành tam giác không? Nếu có hãy cho biết
tam giác đó thuộc loại nào? (Cân, vuông, đều, …).
12 Viết chương trình nhập vào số nguyên dương n.
Kiểm tra xem n có phải là số chính phương hay
không? (số chính phương là số khi lấy căn bậc 2 có
case n2:
các câu lệnh ; break ;
………
case nk:
<các câu lệnh> ; break ;
Giá trị này = nithì thực hiện câu lệnh sau case ni
hiện câu lệnh sau default nếu có, hoặc thoát khỏi câu
lệnh switch.
bên dưới nó mà không xét lại điều kiện (do các ni
được xem như các nhãn) Vì vậy, để chương trình
thoát khỏi lệnh switch sau khi thực hiện xong một
Ví dụ: Nhập vào số nguyên n có giá trị từ 1 đến 5 In cách đọc của
số đó ra màn hình
void main() { int n;
cout<<"Nhap vao n (1<=n<=5): “;
cin>>n;
switch (n) { case 1: cout<<"So mot”; break;
case 2: cout<<"So hai"; break;
case 3: cout<<"So ba”; break;
case 4: cout<<"So bon”; break;
case 5: cout<<"So nam”; break;
default : cout<<"Khong doc duoc";
} }
82
13 Viết chương trình nhập vào 1 số
Trang 15Bất kỳ biểu thức nào trong 3 biểu thức nói trên đều
có thể vắng nhưng phải giữ dấu chấm phẩy (;)
85
HOẠT ĐỘNG
86
Bước 1: Khởi gán cho biểu thức 1
Bước 2: Kiểm tra điều kiện của biểu thức 2.
Nếu biểu thức 2 bằng true thì cho thực hiện các
lệnh của vòng lặp, thực hiện biểu thức 3 Quay
Trang 16int buoc = 1;
while(buoc <= 10) {
<biểu thức tăng/ giảm>;
} while (biểu thức điều kiện);
Thực hiện khối lệnh cho đến khi biểu thức có
giá trị bằng false.
Cấu trúc lặp do…while thường dùng cho
trường hợp nhập có kiểm tra điều kiện 93
Ví dụ: Nhập vào một số nguyên dương, nếu nhập vào số
bằng hoặc nhỏ hơn 0 thì thông báo lỗi và yêu cầu nhậplại
void main() {
} while (n <= 0);
cout<<"Ban da nhap dung, ket thuc chuong trinh”;
}
94
và while (kiểm tra điều kiện
trước khi thực hiện lặp), vòng lặp
do…while thực hiện lệnh lặp rồi
mới kiểm tra điều kiện Do đó
vòng lặp do while thực hiện
lệnh ít nhất một lần.
95
LỆNH BREAK VÀ CONTINUE
Lệnh break: thoát khỏi các cấu trúc switch,
while, for, do…while chứa nó gần nhất
(đang chứa break) tại thời điểm break được gọi thi hành mà không cần kiểm tra kết quả của biểu thức điều kiện Tuy nhiên, cần
phân biệt với lệnh return là lệnh trả về từ
hàm, nghĩa là thoát khỏi hàm đang thi hành, nên cũng giúp thoát luôn khỏi tất cả các vòng lặp.
96
Trang 17LỆNH BREAK VÀ CONTINUE
Lệnh continue: được sử dụng trong các
vòng lặp như while, for, do…while Khi
lệnh continue được gọi thì chương trình sẽ
quay trở về đầu vòng lặp để bắt đầu lần lặp
mới (có kiểm tra điều kiện lặp để xác định
có lặp tiếp hay không) Nếu có các lệnh còn
lại (cùng trong vòng lặp) đặt sau continue
sẽ không được thực hiện Nói tóm lại, lệnh
continue dùng để bỏ qua một lần lặp nào đó
Ví dụ: Cho phép người dùng nhập liên tục số nguyên dương, nếu
nhập số nguyên âm thì dừng
void main() { int n;
while (true) { cout<<"Nhap gia tri n: “;
cin>>n;
if (n <= 0) { cout<<"Ket thuc vong lap”;
break;
} } }
for(int i = 0; i < 5; i++)
-{ for(int j = 0; j <= i; j++) cout<<j<<“\t”;
Trang 1814 Viết chương trình nhập số nguyên dương n Liệt
kê n số nguyên tố đầu tiên.
15 Viết chương trình nhập vào hai số nguyên dương a và b Tìm ước số chung lớn nhất và bội
số chung nhỏ nhất của a và b.
16 Viết chương trình nhập vào một số nguyên n gồm tối đa 10 chữ số (4 bytes) In ra màn hình giá trị nhị phân của số trên (Hướng dẫn: chia lấy dư cho 2 và xuất theo thứ tự ngược lại).
17 Viết chương trình đếm số ước số của số nguyên dương N.
Ví dụ: N=12
số ước số của 12 là 6
106
18 Một số hoàn thiện là một số có tổng các
ước số của nó (không kể nó) bằng chính nó
Hãy liệt kê các số hoàn thiện nhỏ hơn 5000.
Ví dụ: số 6 là số hòan thiện vì tổng các ước
số là 1+2+3 = 6.
19 Nhập vào ngày, tháng, năm Cho biết đó
là ngày thứ mấy trong năm.
20 In ra dãy số Fibonaci
f1= f0=1;
107
XÁC ĐỊNH KẾT QUẢ BẰNG CÔNG CỤ DEBUG
chương trình Mặc dù chương trình không còn lỗi nhưng khi chạy chương trình vẫn ra kết quả sai, những lỗi đó có thể là:
chưa thực hiện lệnh;
hoặc sai;
108
Trang 19Bước 1: Đặt dấu nháy vào vị trí bắt đầu
cần kiểm tra lỗi
109
Bước 2: Nhấn phím Ctrl + F10
110
Quan sát vị trí dấu mũi tên trên cửa sổ viết code để
xác định xem chương trình chạy đến dòng lệnh
nào và sẽ thực hiện lệnh tương ứng.
Cửa sổ Locals (nếu không thấy cửa sổ này thì có
thể vào menu View\ Debug Windows\ Variables
hoặc nhấn phím Alt+4) sẽ thể hiện tên (name), giá
trị (value) và kiểu (type) của các biến cục bộ trong
đoạn chương trình.
Cửa sổ Watch (nếu không thấy cửa sổ này vào
menu View\ Debug Windows\ Watch hoặc nhấn
Alt+3) cũng có thể quan sát chi tiết biến tương tự
như cửa sổ Locals, nhưng chỉ thể hiện những biến
nào mà ta nhập tên biến tương ứng vào cửa sổ này.
Cài đặt tất cả những hàm con
đã được khai báo
Gọi thực hiện các hàm theo yêu cầu của bài toán
Trang 20int Tong(int a, int b)
Hàm là một đoạn chương trình độc lập thực hiện trọn vẹn
một công việc nhất định sau đó trả về giá trị cho chương trình
gọi nó, hay nói cách khác hàm là sự chia nhỏ của chương trình
Mục đích sử dụng hàm:
Khi có một công việc giống nhau cần thực hiện ở nhiều vị trí
Khi cần chia một chương trình lớn phức tạp thành các đơn thể nhỏ (hàm con) để chương trình được trong sáng, dễ hiểu trong việc xử lý, quản lý việc tính toán và giải quyết vấn đề
Mẫu tổng quát của hàm
<Kiểu dữ liệu> TênHàm([ds các tham số]);
Trong đó:
Kiểu dữ liệu trả về của hàm (kết quả của hàm/ đầu ra), gồm
2 loại
void: Không trả về giá trị
float / int / long / char */ kiểu cấu trúc / … : Trả về giá
trị kết quả có kiểu dữ liệu tương ứng với bài toán (chỉ trả
về được 1 giá trị theo kiểu dữ liệu)
Danh sách các tham số (nếu có): đầu vào của hàm (trong
một số trường hợp có thể là đầu vào và đầu ra của hàm nếu kết quả đầu ra có nhiều giá trị - Tham số này gọi là tham chiếu)
Khai báo các biến cục bộ
Các câu lệnh / khối lệnh hay lời gọi đến hàm khác.
}
Gọi hàm
TênHàm(danh sách tên các đối số);
Những phương thức loại này thường rơi vào những nhóm
chức năng: Nhập / xuất dữ liệu , thống kê, sắp xếp, liệt kê
Kiểu dữ liệu: số nguyên dương (int).
Output: In ra các ước số của n (Để xác định kiểu dữ liệu
trả về của hàm)
Xuất ra màn hình Không trả về giá trị Kiểu dữ
liệu của hàm là void
Xác định tên hàm: Hàm này dùng in ra các ước số của n
Trang 21Khai báo các biến cục bộ
Các câu lệnh / khối lệnh hay lời gọi đến hàm khác.
Những phương thức này thường rơi vào các nhóm: Tính tổng, tích,
trung bình, đếm, kiểm tra, tìm kiếm
Phân tích bài toán:
Input: n (Để xác định tham số)
Kiểu dữ liệu: số nguyên dương (int).
Output: Tổng S (Để xác định kiểu dữ liệu phương thức)
Trả về giá trị của S
S là tổng các số nguyên dương nên S cũng là số nguyên dương
Kiểu trả về của hàm là int (hoặc long).
Xác định TênHàm: Dùng tính tổng S nên có thể đặt là TongS