Tải bản đầy đủ (.pdf) (23 trang)

GIÁO TRÌNH TIN HỌC_LẬP TRÌNH C ++ CĂN BẢN ppt

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 (1.83 MB, 23 trang )

22/04/2011
1
LẬP TRÌNH C
(CƠ BẢN)
1
YÊU CẦU
 Môi trường cài đặt: Microsoft Visual C++
6.0 hoặc Microsoft Visual .Net 2005 (Viết
ứng dụng dạng Console)
 Làm bài tập (tại lớp và ở nhà) đầy đủ
 Hình thức thi: Viết (60 phút), được tham
khảo tài liệu
2
NỘI DUNG
 Chương 1: Khái niệm cơ bản về lập trình
và môi trường cài đặt
 Chương 2: Giới thiệu ngôn ngữ C
 Chương 3: Cấu trúc điều khiển
 Chương 4: Hàm con
 Chương 5: Kiểu dữ liệu mảng
3
Chương 1
Khái niệm cơ bản
về lập trình và giới thiệu môi
trường cài đặt
4
LẬP TRÌNH ?
Giải thuật
Ngôn ngữ
Lập trình
5


Các đặc điểm cần có của một chương trình
 Đúng đắn, chính xác (correctness).
 Chắc chắn (robustness).
 Thân thiện (user friendliness).
 Khả năng thích nghi (adapability): Chương trình có khả
năng để phát triển tiến hóa theo yêu cầu.
 Tính tái sử dụng (reuseability): Chương trình có thể
dùng để làm một phần trong một chương trình lớn khác.
 Tính hiệu quả (efficiency).
 Tính khả chuyển (porability): Khả năng chuyển đổi giữa
các môi trường.
 Tính an toàn (security).
 Tính dừng (halt).
6
22/04/2011
2
CÁC NGÔN NGỮ LẬP TRÌNH
 Fortran
 Pascal
 Java
 C
 C++
 C#
 VB.Net
 ….
7
CÁC MÔI TRƯỜNG HỖ TRỢ LẬP TRÌNH
 Borland C++
 Microsoft Visual Basic
 Microsoft Visual C++

 JBuider
 Visual .Net
 …
8
CÁCH VIẾT MỘT CHƯƠNG TRÌNH
 Đọc kỹ yêu cầu bài toán
 Xác định dữ liệu đầu vào: giá trị, kiểu
 Xác định kết quả: giá trị, kiểu
 Xác định giải thuật / công thức để xử lý dữ
liệu đầu vào thành kết quả
 Kiểm tra lỗi cú pháp
 Chạy và nhập dữ liệu thử cho nhiều trường
hợp khác nhau để đánh giá chương trình 9
Hướng dẫn cài đặt
và sử dụng Microsoft Visual C++ 6.0
10
BỘ CÀI ĐẶT GỒM
 Đĩa Ms Visual Studio 6.0
 MSDN cho Visual Studio 6.0
 SP6.0 cho Visual Studio 6.0
11
TẠO MỚI PROJECT
 Bước 1: Khởi động VC++6.0
 Bước 2: Chọn menu File/New…
1
2
3
12
22/04/2011
3

 Tab 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.
1
2
3
13
 Bước 3: Chọn OK
 Bước 4: Chọn An empty Project, sau đó chọn Finish
14
 Bước 5: Chọn OK, kết thúc việc tạo Project
15
 Giao diện sau khi tạo Project
1. Chọn Tab FileView
2. Chọn dấu + để xem
bên trong
16
Giao diện gồm 2 phần chính
 Cửa sổ bên trái: cửa sổ Workspace (nếu
không thấy cửa sổ này thì vào menu View/
Workspace hoặc nhấn phím Alt + số 0)
 Cửa sổ bên phải: cửa sổ viết code
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ểu
cấ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
22/04/2011
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:
 Trong Header File, tạo 1 file tên khaibao.h:
Chứa các khai báo hàm, hằng số, …
 Trong Source File, tạo 2 file cài đặt hàm:
 File main.cpp: Cài đặt hàm main()
 File caidat.cpp: Cài đặt các hàm con đã khai
báo
19
QUI ƯỚC
CÁCH TẠO FILE KHAI BÁO (KHAIBAO.H)
Click phải vào thư mục Header File,
chọn Add Files to Folder …
20
Nhập khaibao.h vào ô File name
Chọn OK, sau đó chọn Yes

(Lưu ý: Không thay đổi đường dẫn thư mục –
chỉ nhập tên file)
21
CÁCH TẠO FILE CÀI ĐẶT
(MAIN.CPP, CAIDAT.CPP)
Click phải vào thư mục Source File, chọn
Add Files to Folder …
Nhập main.cpp vào ô File name, chọn OK,
sau đó chọn Yes
Tương tự, tiếp tục tạo file caidat.cpp
(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
 Double click vào file khaibao.h trong thư
mục Header File
 Chọn Yes
23
Cửa sổ soạn thảo code cho file khaibao.h
chuyển sang chế độ cho phép soạn thảo
Nhận biết file
đang mở
Cửa sổ soạn thảo
file khaibao.h
24
22/04/2011
5
CẤU TRÚC FILE KHAIBAO.H

#pragma once
Các khai báo thư viện, hàm, hằng số, …
25
CẤU TRÚC FILE MAIN.CPP
Cách chọn file main.cpp tương tự như chọn
file khaibao.h
#include “khaibao.h”
void main()
{
Các lệnh;
}
26
CẤU TRÚC FILE CAIDAT.CPP
#include “khaibao.h”
void HamA()
{
các lệnh;
}
void HamB()
{
Các lệnh;
}
27
DỊCH, SỬA LỖI VÀ CHẠY CHƯƠNG TRÌNH
 Biên dịch và kiểm tra lỗi: Nhấn F7
 Nếu có thông báo lỗi (error) thì nhấn F4
để 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)
 Chạy chương trình: Ctrl + F5
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)
29
FILE KHAIBAO.H
#pragma once
#include <iostream.h>
30
22/04/2011
6
FILE MAIN.CPP
#include "khaibao.h"
void main()
{
cout<<“Xin chao moi nguoi";
}
31
XEM KẾT QUẢ CHẠY CHƯƠNG TRÌNH
NHẤN CTRL + F5
32
MỞ PROJECT CÓ SẴN
 Cách 1: Mở từ menu VC
 Khởi động VC
 Vào menu File/ Open Workspace
 Chọn thư mục chứa Project, chọn tên Project, sau đó
chọ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
CHƯƠNG 2
GIỚI THIỆU NGÔN NGỮ C
35
ĐẶC ĐIỂM NGÔN NGỮ C
 Bộ lệnh phù hợp với phương pháp lập
trình cấu trúc.
 Kiểu dữ liệu phong phú, cho phép định
nghĩa kiểu dữ liệu mới.
 Gồm một hoặc nhiều hàm rời nhau.
 Linh động về cú pháp.
36
22/04/2011
7
CÁ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
Khối lệnh gồm nhiều lệnh và được đặt
trong cặp dấu ngoặc { }
37
QUI ƯỚC VIẾT LỆNH TRONG C

Mỗi lệnh nằm trên một dòng. Cuối dòng
lệnh PHẢI có dấu chấm phẩy (;).
Lệnh quá dài có thể được viết thành nhiều
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
QUI ƯỚC VIẾT LỆNH TRONG C
Không nên đặt nhiều lệnh trên cùng một
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.
Dòng ghi chú (comment):
 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
sau dòng cuối cùng.
39
BIẾN
Một biến đại diện cho một vùng nhớ hay tập các
vùng nhớ trên bộ nhớ chính của máy tính. Tên
biến được dùng để tham khảo đến những vùng nhớ
này.
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

40
CÁC KIỂU DỮ LIỆU
Gồm 2 loại:
 Kiểu cơ sở
Tích hợp sẵn trong ngôn ngữ
 Số nguyên
 Số thực
 Luận lý
 Mảng (xét sau)
 Chuỗi (xét sau)
 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Ở
STT KIỂU GHI CHÚ KÍCH THƯỚC
KIỂU LIÊN TỤC (SỐ THỰC)
1
float 4 bytes
2
double 8 bytes
3
long double 8 bytes
KIỂU RỜI RẠC (SỐ NGUYÊN)
1 char
Ký tự 1 byte
Số nguyên 1 byte
2
unsigned char Số nguyên dương 1 byte
3

short Số nguyên 2 bytes
4
unsigned short Số nguyên dương 2 bytes
5
int Số nguyên 4 bytes
6
unsigned int Số nguyên dương 4 bytes
7
long Số nguyên 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
22/04/2011
8
KHAI 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;
Ví dụ:
int a, x, y;
43
KHAI BÁO BIẾN
Qui tắc đặt tên biến
 Bắt đầu bằng một ký tự.

 Các ký tự trong tên biến chỉ có thể là các ký tự chữ, số
hoặc dấu gạch dưới (_)
 Không có khoảng trắng trong tên biến.
 Không dài quá 256 ký tự.
 Không được trùng với các từ khoá của C
struct, long, int, while, for, if, else, continue, typedef,
do, goto, case, define, …
 Không được trùng với phạm vi khai báo.
 Tên gợi nhớ.
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ị;
Ví dụ:
int a = 5;
float b = 5.4, c = 9.2;
char ch = ‘n’;
45 46
STT
PHÉP
TOÁN
Ý NGHĨA GHI CHÚ
PHÉP TOÁN SỐ HỌC
1 + Cộng
2 - Trừ
3 * Nhân
4 / Chia lấy phần nguyên
5 % Chia lấy phần dư
PHÉP TOÁN QUAN HỆ

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 nhau
6 != Khác nhau
KÝ HIỆU CÁC PHÉP TOÁN
47
PHÉP TOÁN LOGIC
1 ! NOT
2 && AND
3 || OR
TOÁN TỬ TĂNG GIẢM
1 ++ Tăng 1 Nếu toán tử tăng giảm đặt

trước thì tăng giảm trước rồi

tính biểu thức hoặc ngược lại.
2 Giảm 1
PHÉP TOÁN THAO TÁC TRÊN BIT
1 & AND
2 | OR
3 ^ XOR
4 << Dịch trái
5 >> Dịch phải
6 ~ Lấy phần bù theo bit
Ví dụ:
int x = 5, y = 11;
int z = ++x + y++;
Kết quả: x=6; y=12; z=17

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>
Ví dụ:
int n;
(n%2==0)? n ++ : n ;

nếu n = 10 thì giá trị n = 11

nếu n = 21 thì giá trị n = 20
48
22/04/2011
9
THỨ TỰ ƯU TIÊN PHÉP TOÁN
Toán tử Độ ưu tiên Trình tự kết hợp
() [] -> 1 Từ trái qua phải
! ~ ++ - + * & sizeof 2 Từ phải qua trái
* / % 3 Từ trái qua phải
+ - 4 Từ trái qua phải
<< >> 5 Từ trái qua phải
< <= >= > 6 Từ trái qua phải
== != 7 Từ trái qua phải
& 8 Từ trái qua phải
| 9 Từ trái qua phải
^ 10 Từ trái qua phải
&& 11 Từ trái qua phải
|| 12 Từ trái qua phải
? : 13 Từ phải qua trái
= += -= *= /= %= 14 Từ phải qua trá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ới
biến.
 Sử dụng biến trong một biểu thức khi nó chưa có giá trị. Lỗi này
thì không được phát hiện bởi trình biên dịch, khi đó giá trị của
biế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ường
xuấ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ưng
lạ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
dấu nháy kép “” )
Ví dụ:
int b = 7, c = 9;
cout<< “Gia tri của b =“ << b << “ gia tri cua c = “ << c;
51
XUẤT CÓ ĐỊNH DẠNG

Thư viện iomanip.h
cout<<setw(n)<<tênbiến;
 Chừa 1 khoảng n ký tự để xuất giá trị
Ví dụ:
int a=7, b=9;
cout<<a<<setw(5)<<b;//Chừa 5 vị trí để xuất giá
trị b
Kết quả: 7 9
52
XUẤT CÓ ĐỊNH DẠNG
cout<<setprecision(n);
 Xuất số thập phân gồm n-1 chữ số lẻ (phần thập phân)
Ví dụ:
float a=7.56745F, b=5.339F;
cout<<a<<endl;
cout<<setprecision(3)<<a<<endl;
cout<<setprecision(2)<<b<<endl;
cout<<setprecision(5)<<b;
Kết quả:
7.56745
7.57
5.3
5.339
53
XUẤT KÝ TỰ ĐẶC BIỆT
Ký tự Ý nghĩa Ví dụ
\’ Xuất dấu nháy đơn
cout<<“ \’ ”;
Kết quả: ‘
\” Xuất dấu nháy đôi

cout<<“ \” ”;
Kết quả: “
\\ Xuất dấu chéo ngược “\”
cout<<“ \\ ”;
Kết quả: \
\0 Ký tự Null
Dùng để gán ký tự kết thúc của chuỗi
\a Alert : Tiếng bip
\t Tab vào một đoạn ký tự trắng
cout<<"xyz\tzyx”;
Kết quả: xyz zyx
\b Xuất lùi về sau
cout<<"xyz\t\bzyx”;
Kết quả: xyzzyx
\n
hoặc endl
Xuống dòng
cout<<"xyz\nzyx”;
Kết quả: xyz
zyx
\r Về đầu dòng
cout<<"xyz\rzyx”;
Kết quả: zyx
54
22/04/2011
10
BÀI TẬP
Cho biết kết quả của những lệnh sau:
int a, b;
b=a++ + ++a + a;

cout<<"a=“<<a<<“, b=“<<b;
Với a = 2 Kết quả:
Với a = 9 Kết quả:

int a, b;
b= a + a;
b;
cout<<"a=“<<a<<“, b=“<<b;
Với a = 19 Kết quả:
Với a = 10 Kết quả:
55
int a, b;
b=a%2 + a/2 + a;
cout<<"a=“<<a<<“, b=“<<b;
Với a = 17 Kết quả:
Với a = 3 Kết quả:

int a, b;
b=a/3 + a ;
cout<<"a=“<<a<<“, b=“<<b;
Với a = 8 Kết quả:
Với a =21 Kết quả:

int k;
cout<<(k%3==0)?k++: k ;
Với k =10 Kết quả:
Với k =15 Kết quả:
56
Các định danh nào sau đây là không hợp lệ?
i. Main

ii. Tinh Tong
iii. Tinh-Tong
iv. Tinh_Tong
v. x_Mu_2
vi. 2_Mu_2
vii. using
viii. class
ix. Tien$
x. default
xi. yahoo.com
57
 Cho biết những chỗ sai và sửa lại cho đúng
int n = -100;
uint i = -100;
int = 2.9;
long m = 2, p = 4;
int 2k;
float y = y * 2;
charch = “b”;
 Viết chương trình in ra màn hình thông tin cá nhân theo
mẫu sau:
Ho ten:
Lop:
Thong tin lien lac:
Dia chi:
So dien thoai:
58
 Viết chương trình nhập vào giờ phút và giây, đổi ra giây
và xuất kết quả ra màn hình.
 Viết chương trình nhập vào 3 số nguyên a, b và c, tính

giá trị trung bình cộng của 3 số trên và xuất kết quả ra
màn hình.
 Viết chương trình nhập vào số nguyên dương n, tính tổng
từ 1 đến n và xuất kết quả ra màn hình.
 Viết chương trình cho phép nhập vào một số đo nhiệt độ
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:
 Viết chương trình nhập vào 3 số nguyên a, b và c, cho
biết 3 số vừa nhập có thứ tự tăng dần (a<b<c) không?

xuất
kết
quả
.
59
)32(
9
5
00
 FC
CHƯƠNG 3
CẤU TRÚC ĐIỀU KHIỂN
LƯU ĐỒ (FLOWCHART)
60
22/04/2011
11
PHÂ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

thì lập thành bảng có dạng sau:
61
Bước (hoặc lần lặp
hoặc dòng lệnh
thực hiện)
Biến 1 Biến 2 … Biến k
Kết quả trả về
(hoặc in ra màn
hì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ế
tiếp.
63 64
void main()
{ int a, b, tong, hieu, tich;
float thuong;
cout<<"Nhap vao a: “;

cin>>a;
cout<<"Nhap vao b: “;
cin>>b;
tong = a + b;
hieu = a - b;
tich = a * b;
thuong = (float)a / b;
cout<<"Tong: " <<tong;
cout<<"Hieu: “<<hieu;
cout<<"Tich: “<<tich;
cout<<"Thuong: “<<thuong;
}
65
CẤU TRÚC RẼ NHÁNH
 Cấu trúc rẽ nhánh chỉ cho máy tính chọn thực hiện một
dãy lệnh nào đó dựa vào kết quả của một điều kiện (biểu
thức quan hệ hay biểu thức so sánh)
 Gồm 2 dạng:
Chỉ xét trường hợp đúng
if (biểu thức điều kiện)
{
<khối lệnh> ;
}
Nếu biểu thức điều kiện cho kết quả true thì thực hiện
khối lệnh bên trong if.
66
22/04/2011
12
Ví 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)
{
<khối lệnh 1>;
}
else
{
<khối lệnh 2>;
}
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
69
Ví dụ 1: Nhập vào số nguyên a và b, nếu a là bội số của b thì in
thông báo “a là bội số của b”, ngược lại in “a khong la boi so cua b”
70
void main()
{
int a, b;
cout<<“Nhap vao a: “;

cin>>a;
cout<<“Nhap vao b: “;
cin>>b;
if(a%b= =0)
cout<<“a la boi so cua b”;
else
cout<<“a khong la boi so cua b”;
}
71
Ví dụ 2: Giải và biện luận phương trình: ax+b=0
72
22/04/2011
13
void main()
{ float a, b;
cout<<"Nhap vao a: “;
cin>>a;
cout<<“Nhap vao b: “;
cin>>b;
if (a == 0)
if (b == 0)
cout<<"Phuong trinh vo so nghiem”;
else
cout<<"Phuong trinh vo nghiem”;
else
cout<<"Phuong trinh co nghiem x = “<< -b / a;
}
73
BÀI TẬP – CHO BIẾT KẾT QUẢ
int a=9, b=6;

a++;
a=a+b ;
a=a+( b);
if(a%2==0)
cout<<"Gia tri cua a la chan”;
cout<<"Tong cua a va b la: " <<(a + b);
74
int a=7, b=8;
a++;
a=a+b ;
b;
a ;
a = ( a)+( b);
if(a%2 != 0)
cout<<"a la so le”;
else
cout<<"a la so chan”;
cout<<"Gia tri cua a: " <<a;
75
int x = 5, y;
y = x++ + 5;
cout<<"x= " <<x<<", y= “<<y;
y *= 6;
x = y % 7;
cout<<"x= “<<x<<", y= “<<y<<", y/x= “<<y/x;
76
BÀI TẬP – VẼ LƯU ĐỒ
VÀ VIẾT CHƯƠNG TRÌNH
1. Nhập vào hai số nguyên a, b. In ra màn hình giá trị lớn
nhất.

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
hai biến phụ).
4. Viết chương trình nhập vào một số nguyên n gồm ba
chữ số. Xuất ra màn hình chữ số lớn nhất ở vị trí nào?
Ví dụ: n=291. Chữ số lớn nhất nằm ở hàng chục (chữ
số 9).
77
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
22/04/2011
14
10. 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ó
kết quả là nguyên).
79
CẤU TRÚC LỰA CHỌN
switch (biểu thức)

case n1:
các câu lệnh ;
break ;
case n2:
các câu lệnh ;
break ;
………
case nk:
<các câu lệnh> ;
break ;
[default: các câu lệnh]


80
Với:
 n
i
là các hằng số nguyên hoặc ký tự.
 Phụ thuộc vào giá trị của biểu thức viết sau switch, nếu:
 Giá trị này = n
i
thì thực hiện câu lệnh sau case n
i
.
 Khi giá trị biểu thức không thỏa tất cả các n
i
thì thực
hiện câu lệnh sau default nếu có, hoặc thoát khỏi câu
lệnh switch.
 Khi chương trình đã thực hiện xong câu lệnh của case
n
i
nào đó thì nó sẽ thực hiện luôn các lệnh thuộc case
bên dưới nó mà không xét lại điều kiện (do các n
i
đượ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
trường hợp, ta dùng lệnh break.
81
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
BÀI TẬP – VẼ LƯU ĐỒ VÀ VIẾT CHƯƠNG TRÌNH
13. Viết chương trình nhập vào 1 số
nguyên dương gồm 3 chữ số, in ra cách
đọc của số này
Sites.google.com/site/thaitranminh
83
CẤU TRÚC LẶP
84
22/04/2011
15
FOR
for (<biểu thức khởi gán> ; <biểu thức điều kiệ
n>
; <biểu thức tăng/giảm>)
{
<khối lệnh>;
}

Bấ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
trở lại bước 2.
Ngược lại thoát khỏi lặp.
87
Ví dụ: In ra màn hình 10 dòng chữ “Xin chao”
88
void main()
{
for (int buoc = 1; buoc <= 10; buoc++)
cout<<"Xin chao“<<endl;
}
89
 Ví dụ: Tính tổng: , với n>0
90
nS





321
22/04/2011

16
WHILE
< Khởi gán>
while ( <biểu thức điều kiện>)

lệnh/ khối lệnh;
<biểu thức tăng/ giảm>


Lưu ý: Cách hoạt động của while giống for
91
Ví dụ: In ra màn hình 10 dòng chữ “Xin chao”
void main()
{
int buoc = 1;
while(buoc <= 10)
{
cout<<"Xin chao“<<endl;
buoc++;
}
}
92
DO … WHILE
< Khởi gán>
do
{
<khối lệnh>;
<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ập
lại.
void main()
{
int n;
do{
cout<<"Nhap vao mot so nguyen duong: ";
cin>>n;
if (n <= 0)
cout<<"Nhap sai, hay nhap lai!“<<endl;
} while (n <= 0);
cout<<"Ban da nhap dung, ket thuc chuong trinh”;
}
94

Ngược lại với cấu trúc lặp for
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
22/04/2011
17
LỆ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 đó
nếu thỏa điều kiện.
97
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;
}
}
}
98
Ví dụ: In ra màn hình giá trị từ 10 đến 20 trừ đi số
13 và số 17.
void main()
{
for (int k = 10; k <= 20; k++)
{
cout<<k<<" ";
if (k == 13 || k == 17)
continue;
}
}
99
CHO BIẾT KẾT QUẢ
int a=18;
for(int i = 1; i <= a; i++)
if(a%i == 0)
cout<<i <<“\t”;

for(int i = 0; i < 5; i++)

{
for(int j = 0; j <= i; j++)
cout<<j<<“\t”;
cout<<endl;
}
100
int i = 10, s = 0;
while(i > 0)
{
if(i%2 == 0)
s+=i;
else
if(i > 5)
s+=2*i;
i ;
}
cout<<“s = ” <<s; 101
int a = 18, i = 1;
do{
if(a%i == 0)
cout<<i<<“\t”;
i++;
} while(i <= a);
102
22/04/2011
18
int a = 11, b = 16, i = a;
while( i < b )
{
if(i%2 == 0)

{
Console.Write(i + "\t");
break;
}
i++;
}
103
int a = 10, s = 0, i = 0;
while( i < a )
{
i++;
if (i % 2 == 0)
continue;
else
s=s+i;
}
cout<<"s = " <<s;
104
int i = 1, s = 0;
while(true)
{
s = s + i++;
if (i % 2)
i = i + 2;
else
i = i + 1;
if (i > 20)
break;
}
cout<<"s = " <<s;

105
14. 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
 f
1
= f
0
=1;
 f
n

= f
n-1
+ f
n-2
; (n>1)
107
XÁC ĐỊNH KẾT QUẢ BẰNG CÔNG CỤ DEBUG
 Dùng để xác định lỗi logic (lỗi thiết kế giải thuật) trong
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à:
 Dùng chấm phẩy sau: if, else, for, while, do…while mà
chưa thực hiện lệnh;
 Không dùng cặp dấu ngoặc nhọn ({}) để bao khối lệnh;
 Khai báo sai kiểu dữ liệu;
 Chia cho 0;
 Không có điều kiện dừng (điều kiện dừng sai);
 Phân tích thuật toán thiếu (chưa vét hết các trường hợp)
hoặc sai;
108
22/04/2011
19
Bướ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.
111
Bước 3: Nhấn phím F10 để thực hiện
lệnh kế tiếp (hoặc phương thức kế
tiếp).
Nếu muốn xem lệnh thực hiện bên
trong của hàm thì nhấn phím F11 (nếu
lệnh là lời gọi thực hiện phương thức –
lưu ý: không nên nhấn phím F11 khi
thực hiện các phương thức thư viện (ví
dụ: cin, cout)
112
Chương 4
HÀM CON
22/04/2011
113
CẤU TRÚC CHƯƠNG TRÌNH C
22/04/2011
114
Khai báo
Cài đặt hàm

Hàm main()
CHƯƠNG TRÌNH C
Khai báo thư viện hàm
Khai báo hàm
Khai báo hằng số …
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
22/04/2011
20
int Tong(int a, int b)
{
int s=a+b;
return s;
}
void main()
{
int kq = Tong (12, 3);
cout<<“Tong cua 12 va 3: “<<kq;
}
22/04/2011
115
Truyền đối số
Tham số
Gọi hàm
KHÁI NIỆM
 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 đề.
22/04/2011
116
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)
22/04/2011
117
 TênHàm: Đặt tên theo qui ước sao cho phản ánh đúng
chức năng thực hiện của hàm
 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à
thamchiếu)
22/04/2011
118
HÀM TRẢ VỀ KIỂU VOID
Cài đặt
void TênHàm([danh sách các tham số])
{

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ê
22/04/2011
119
VÍ DỤ 1
Viết chương trình nhập số nguyên dương n và in ra màn
hình các ước số của n
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: 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
nên có thể đặt là LietKeUocS
void LietKeUocSo(int n);
22/04/2011
120
22/04/2011
21
File khaibao.h
#pragma once
#include <iostream.h>
void LietKeUocSo(int n);

File caidat.cpp
#include “khaibao.h”
void LietKeUocSo(int n)
{
for (int i = 1; i <= n; i++)
if (n % i == 0)
cout<<i<<“\t”;
}
File main.cpp
#include “khaibao.h”
void main()
{
int n;
cout<<"Nhap so nguyen duong n: ";
cin>>n;
cout<<"Cac uoc so cua “<<n<<“: “;
LietKeUocSo(n);
}
22/04/2011
121
Có dấu chấm phẩy
Không dấu chấm phẩy
Kết quả chương trình
22/04/2011
122
HÀM TRẢ VỀ 1 GIÁ TRỊ
Cài đặt
<Kiểu dữ liệu trả về> TênHàm([danh sách các tham số])
{
<Kiểu dữ liệu trả về> kq;

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.
return kq;
}
Gọi hàm
<Kiểu dữ liệu trả về của hàm> Tên biến = TênHàm (danh sách tên các
đối số);
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
22/04/2011
123
VÍ DỤ 2
Viết chương trình nhập số nguyên dương n và tính tổng
 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
int TongS(int n);
22/04/2011
124
0;321  nnS
n

File khaibao.h
#pragma once
#include <iostream.h>

int TongS(int n);
File caidat.cpp
#include “khaibao.h”
int TongS(int n)
{
int kq = 0;
for (int i = 1; i <= n; i++)
kq + = i;
return kq;
}
File main.cpp
#include “khaibao.h”
void main()
{
int n, S;
cout<<"Nhap vao so nguyen n: ";
cin>>n;
S = TongS(n);
cout<<"Tong tu 1 den n: " <<S;
}
22/04/2011
125
Kết quả
22/04/2011
126
22/04/2011
22
THAM SỐ LÀ THAM CHIẾU
 Tham số làm kết quả đầu ra
 Tham số vừa làm đầu vào và đầu ra

 Dùng dấu & phía trước tên tham số khi cài đặt hàm
22/04/2011
127
VÍ DỤ 3
Xét chương trình hoán vị 2 số nguyên a, b cho trước
Viết chương trình với 2 trường hợp
3.1. Trường hợp không dùng tham chiếu
3.2. Trường hợp dùng tham chiếu
22/04/2011
128
void HoanVi(int a, int b)
{
int tam = a;
a = b;
b = tam;
cout<<"Trong HoanVi: a = “<<a<<“ ;b = “<<b;
}
void main()
{
int a = 5, b = 21;
cout<<"Truoc khi HoanVi: a = “<<a<<“ ; b = “<<b;
HoanVi(a, b);
cout<<"Sau khi goi HoanVi: a = “<<a<<“ ;b = “<<b;
}
22/04/2011
129
Kết quả
22/04/2011
130
void HoanVi(int &a, int &b)

{
int tam = a;
a = b;
b = tam;
cout<<"Trong HoanVi: a = “<<a<<“ ;b = “<<b;
}
void main()
{
int a = 5, b = 21;
cout<<"Truoc khi HoanVi: a = “<<a<<“ ; b = “<<b;
HoanVi(a, b);
cout<<"Sau khi goi HoanVi: a = “<<a<<“ ;b = “<<b;
}
22/04/2011
131
Kết quả
22/04/2011
132
22/04/2011
23
NGUYÊN TẮC XÂY DỰNG HÀM
Trước khi xây dựng hàm phải trả lời những câu hỏi sau:
 Hàm trả về gì?  Xác định kiểu dữ liệu trả về của hàm
 Hàm làm gì?  Xác định tên hàm
 Cần những thông tin gì để hàm xử lý?  Xác định tham số
Ứng với mỗi thông tin đã xác định, xác định xem đã có giá
trị trước khi vào hàm chưa,
- Nếu chưa có  Tham chiếu
- Nếu có mà sau khi thực hiện xong hàm vẫn không thay đổi
 Tham trị (không là tham chiếu)

- Nếu có mà sau khi thực hiện xong hàm thì giá trị cũng bị
thay đổi theo  Tham chiếu
22/04/2011
133
BÀI TẬP 1
Xác định các khai báo hàm của các bài toán sau:
1.Viết chương trình tính diện tích và chu vi của hình chữ
nhật với chiều dài và chiều rộng được nhập từ bàn phím.
2.Viết chương trình tính diện tích và chu vi hình tròn với
bán kính được nhập từ bàn phím.
3.Nhập vào 3 số thực a, b, c và kiểm tra xem chúng có
thành lập thành 3 cạnh của một tam giác hay không? Nếu
có hãy tính diện tích, chiều dài mỗi đường cao của tam
giác và in kết quả ra màn hình.
4.Viết chương trình nhập 2 số nguyên dương a, b. Tìm
USCLN và BSCNN của hai số nguyên đó
22/04/2011
134
BÀI TẬP 2
1. Cài lại các bài tập ở chương 2 bằng phương pháp hàm
2. Viết chương trình nhập số nguyên dương n, tính tổng các
ước số dương của n.
Ví dụ: Nhập n=6
Tổng các ước số từ 1 đến n: 1+2+3+6=12.
3. 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.
22/04/2011
135
BÀI TẬP VỀ NHÀ
1. Cài đặt hoàn chỉnh bài tập 1

Gợi ý bt tam giác
 Công thức tính diện tích
s = sqrt(p*(p-a)*(p-b)*(p-c) )
 Công thức tính các đường cao:
h
a
= 2s/a, h
b
=2s/b, h
c
=2s/c.
2. Viết chương trình nhập số nguyên dương n gồm k chữ
số, đếm xem n có bao nhiêu chữ số là số nguyên tố.
22/04/2011
136
4. Viết chương trình tính tiền thuê máy dịch vụ Internet và
in ra màn hình kết quả. Với dữ liệu nhập vào là giờ bắt
đầu thuê (GBD), giờ kết thúc thuê (GKT), số máy thuê
(SoMay).
 Điều kiện cho dữ liệu nhập: 6<=GBD<GKT<=21.
Giờ là số nguyên.
 Đơn giá: 2500đ cho mỗi giờ máy trước 17:30 và
3000đ cho mỗi giờ máy sau 17:30.
5. Viết chương trình tính tiền lương ngày cho công nhân,
cho biết trước giờ vào ca, giờ ra ca của mỗi người.
Giả sử rằng:
 Tiền trả cho mỗi giờ trước 12 giờ là 6000đ và sau 12
giờ là 7500đ.
 Giờ vào ca sớm nhất là 6 giờ sáng và giờ ra ca trễ
nhất là 18 giờ (Giả sử giờ nhập vào nguyên).

22/04/2011
137

×