Bộ xử lý số học ALU Là bộ phận “sản xuất” của máy tính Thực hiện các phép toán cộng, trừ, nhân, chia... Chứa chương trình hoặc dữ liệu mà hiện thời không bị truy xuất bởi các bộ ph
Trang 1CƠ SỞ LẬP TRÌNH
Đại học Tôn Đức Thắng
Khoa CNTT-TƯD ThS Dương Thị Thùy Vân
Trang 2CHƯƠNG 0 GIỚI THIỆU MÔN HỌC
ThS Dương Thị Thùy Vân
Khoa CNTT-TƯD
Trang 3Mục tiêu môn học
Cung cấp những kiến thức nền tảng cho việc lập trình trên máy tính qua việc tìm hiểu ngôn ngữ C/C++ và viết chương trình với các giải thuật cơ bản.
Trang 4Nội dung môn học
Trang 5Tài liệu tham khảo
[1] Brian W.Kernigan & Dennis M.Ritchie (2000), The C
Programming Language, Prentice Hall, 1988
[2] Quách Tuấn Ngọc, Ngôn ngữ lập trình C, NXB Giáo Dục, 1998
[3] Phạm Văn Ất, Kỹ thuật lập trình C – Cơ sở và nâng
cao, NXB KHKT, 1995
[4] Bjarne Stroustrup, The C++ programming language,
3rd edition, AddisonWesley, 1997
[5] Teach Yourself C in 21 Days, Sams.Net
[6] Deitel, C – How to program, 4th edition, Deitel, 2004
Trang 6Phương thức tiến hành
1 Lý thuyết: 45 tiết (15 tuần: 3tiết/tuần)
2 Thực hành: 30 tiết (10 tuần: 3 tiết/tuần)
3 Tự học: 120 tiết (15 tuần: 8 tiết/tuần)
Trang 8CHƯƠNG 1 TỔNG QUAN VỀ LẬP TRÌNH
ThS Dương Thị Thùy Vân
Khoa CNTT-TƯD
Trang 111 Một số khái niệm (1)
Một máy tính được chia thành 6 bộ phận chính:
1. Bộ phận nhập (input)
Nhận dữ liệu từ các thiết bị nhập (input devices)
VD: keyboard, mouse, disk, hoặc scanner
Để dữ liệu cho các bộ phận khác sử dụng
2. Bộ phận xuất (output)
Xuất thông tin đã được xử lý ra các thiết bị xuất
(ouput devices)
VD: màn hình, giấy in, loa
Đặt thông tin bên ngoài máy tính
Trang 121 Một số khái niệm (2)
3. Bộ nhớ chính (memory)
Truy cập nhanh, là “kho hàng” cỡ nhỏ
Lưu trữ dữ liệu nhập thông qua bộ phận nhập
Lưu trữ các thông tin đã được xử lý đang chờ gửi đến bộ
phận xuất
Thường được gọi là bộ nhớ, bộ nhớ chính, bộ nhớ truy
xuất ngẫu nhiên (Random Access Memory - RAM)
4. Bộ xử lý số học (ALU)
Là bộ phận “sản xuất” của máy tính
Thực hiện các phép toán (cộng, trừ, nhân, chia)
Trang 131 Một số khái niệm (3)
5. Bộ xử lý trung tâm (CPU)
Là bộ phận “quản trị” của máy tính
Phối hợp và quản lý các bộ phận khác
6. Bộ nhớ thứ cấp
Là “kho hàng” cỡ lớn và dài hạn
Chứa chương trình hoặc dữ liệu mà hiện thời
không bị truy xuất bởi các bộ phận khác
Truy xuất chậm hơn bộ nhớ chính
Trang 14có liên quan chặt chẽ với kiến trúc máy tính
mà nó chạy trên đó.
Trang 151 Một số khái niệm (5)
Các yêu cầu đối với một ngôn ngữ lập trình:
1. Tính dễ viết (writability)
Ngôn ngữ phải có tính diễn đạt cao
Ngôn ngữ phải đơn giản
Ngôn ngữ phải linh hoạt
2. Tính dễ đọc (readability)
Người bình thường vẫn có thể đọc hiểu
3. Tính tin cậy (reliability)
Xác xuất chạy đúng ở mức cao
Trang 162 Sự tiến hóa của NNLT (1)
High Level Language
Trang 172 Sự tiến hóa của NNLT (2)
Là ngôn ngữ “tự nhiên” của máy tính
Là các chuỗi số biểu diễn các lệnh cụ thể của máy.
Được định nghĩa dựa trên thiết kế phần cứng của máy
tính
Phụ thuộc vào máy tính
Buồn tẻ và không hấp dẫn đối với các lập trình viên
VD: 1300042774
14005934191200274027
Trang 182 Sự tiến hóa của NNLT (3)
Là các từ viết tắt tiếng Anh được tạo ra để thay thế cho
ngôn ngữ máy
Thể hiện các thao tác cơ bản của máy tính
Các chương trình dịch - gọi là các assembler - thực hiện
việc chuyển mã từ ngôn ngữ assembly sang mã máy
VD: LOAD BASEPAY
ADD OVERPAYSTORE GROSSPAY
Trang 192 Sự tiến hóa của NNLT (4)
Được sinh ra khi ngôn ngữ assembly trở nên quá tốn
thời gian và không tương xứng với nhu cầu tăng nhanh của việc sử dụng máy tính
Các lệnh đơn có thể được cấu thành từ nhiều tác vụ
Chương trình dịch được gọi là trình biên dịch – compiler: dịch mã lệnh sang mã máy
Mã lệnh tương tự như các từ tiếng Anh thông dụng
Có sử dụng các ký hiệu toán học
VD: grossPay = basePay + overTimePay
Trình thông dịch (interpreter): thực thi trực tiếp các
chương trình của ngôn ngữ cấp cao
Trang 21 Được phát triển bởi Sun Microsystem từ 1991
Được dùng để phát triển ứng dụng Web và các ứng dụng
Trang 225 Một số NNLT cấp cao (2)
cho các ứng dụng về khoa học kỹ thuật
COmmon Business Oriented Language
(1959) dùng cho xử lý các lượng dữ liệu lớn
chủ yếu dùng trong học thuật
6. Ada:
do Bộ Quốc Phòng Mỹ phát triển (1970s-đầu 1980s)
Hỗ trợ lập trình đa nhiệm (multitasking)
Trang 236 Quá trình phát triển 1 chương
trình
Các pha của một chương trình C, C++
Trang 247 Chương trình C đầu tiên
Trang 26CHƯƠNG 2 CÁC THÀNH PHẦN CỦA MỘT
CHƯƠNG TRÌNH C/C++
ThS Dương Thị Thùy Vân
Khoa CNTT-TƯD
Trang 281 Giới thiệu BorlandC 3.1
1. Cài đặt BorlandC 3.1
2. Chạy BorlandC
3. Giới thiệu thanh menu
4. Tạo mới file
5. Lưu file
6. Mở file
7. Các thao tác trên cửa sổ soạn thảo
8. Tùy chọn option
Trang 292 Ví dụ minh họa
Trang 314.Lệnh printf và cout
1. printf
Thư viện: stdio.h
Ý nghĩa: đưa chuỗi có định dạng ra stdin
Trang 346.Hàm main
1. Hàm main
Mỗi chương trình chỉ có duy nhất một hàm main
Hàm main có thể gọi tất cả các hàm khác, nhưng ngược lại thì không
Trang 357 Giới thiệu Visual C++ 6.0
1. Chạy chương trình Visual C++ 6.0
2. Tạo mới dự án (project)
Trang 367.1 Chạy Visual C++ 6.0
Trang 377.2 Tạo mới dự án
1 Dạng project
2 Nơi lưu trữ
3 Tên project
Trang 387.2 Tạo mới dự án (tt)
1 2
Trang 397.2 Tạo mới dự án (tt)
Tạo file mới cho dự án:
1 Menu File\ New
2 Chọn tab Files
Chọn C++
Trang 407.3 Viết chương trình
Trang 417.4 Biên dịch và thi hành
Menu Build:
1 Build vidu01.exe (F7)
2 Kết quả Build ứng dụng
3 Exexcute vidu01.exe (Ctrl-F5)
1
Trang 427.5 Mở một dự án có sẵn
Cách 1: mở file dsw từ Windows Explorer
Trang 437.5 Mở một dự án có sẵn
Cách 2: mở dự án từ chương trình Visual C++
1 Menu File\ Open
2 Chọn dạng file là Workspaces
3 Chọn file dsw của dự án
4 Nhấn nút Open
Trang 447.6 Đƣa một file vào dự án
Cách đưa file có sẵn vào dự án đang mở:
- Tại tab FileView, click phải vào folder Source Files\ Add Files to Folder…
- Chọn file để đưa vào dự án
Trang 45Tóm tắt
1. Cấu trúc cơ bản của một chương trình C?
2. #include dùng để làm gì?
3. Cách viết chú thích như thế nào?
4. Hàm main là gì? Trong một chương trình có
thể có bao nhiêu hàm main?
Trang 46CHƯƠNG 3 CÁC KIỂU DỮ LIỆU CƠ BẢN
ThS Dương Thị Thùy Vân
Khoa CNTT-TƯD
Trang 47Nội dung
1. Các định danh(indentifers) & từ khóa
(keywords)
2. Khái niệm về kiểu dữ liệu
3. Phân loại kiểu dữ liệu
4. Giới thiệu các kiểu dữ liệu cơ bản
5. Hằng & biến
Trang 481.Các định danh & từ khóa
Định danh:
1 Các tên biến, tên hàm và tên kiểu dữ liệu do người
dùng định nghĩa đều được gọi chung là các định
danh Trong ngôn ngữ C/C++, các định danh gồm
chuỗi các chữ cái, chữ số và dấu gạch dưới; tuy
nhiên định danh không được bắt đầu bằng chữ số.
2 Các định danh có thể có chiều dài bất kỳ Tuy nhiên
Trang 491.Các định danh & từ khóa
Trang 502.Khái niệm về kiểu dữ liệu
Các thông tin được nhập và lưu trữ trong bộ nhớ của máy dưới các dạng: số, chữ, hình
ảnh, âm thanh,.v.v mà thuật ngữ tin học gọi chung là dữ liệu
Tính đa dạng của dữ liệu đòi hỏi phải tổ chức
và phân phối bộ nhớ thích hợp để lưu trữ và
xử lý tốt các dữ liệu
Ngôn ngữ lập trình chia các dữ liệu thành
từng nhóm riêng trên đó xây dựng một số
phép toán tạo nên các kiểu dữ liệu khác nhau
Trang 513.Phân loại kiểu dữ liệu
Kiểu nguyên
Kiểu thực
Kiểu lôgic
Kiểu ký tự
Kiểu liệt kê
Kiểu dữ liệu có cấu
Trang 524.Các kiểu dữ liệu cơ bản
Trang 54Kiểu thực dấu chấm động
số có nghĩa
Số byte
long double 3.4E-4932 → 1.1E+4932 17-18 10
Trang 55Kiểu thực dấu chấm động
Một số cách biểu diễn số thực:
Trang 56Kiểu luận lý
Đối tượng dữ liệu chỉ nhận 1 trong 2 giá trị True
hoặc False
Trong ngôn ngữ C không có kiểu boolean
Có thể sử dụng kiểu số nguyên để biểu diễn
0 đại diện cho False
1 đại diện cho True
Trong ngôn ngữ C, giá trị của biểu thức luận lý:
Bằng 0 ⇔ False
Khác 0 ⇔ True
Trang 57Kiểu ký tự
Trang 59Tóm tắt các kiểu dữ liệu cơ bản
Trang 605. Khởi tạo giá trị cho các biến
6. Truy xuất đến địa chỉ của biến
7. Nhập xuất giá trị cho biến
Trang 61Khái niệm hằng & biến
Quá trình xử lý trong máy tính đòi hỏi mỗi giá trị phải được lưu trữ ở một ô nhớ của máy,
và ô nhớ này được đặt một cái tên để gọi
Khi đó mọi việc tính toán hay xử lý liên quan đến mỗi giá trị được thực hiện gián tiếp thông qua tên của ô nhớ chứa giá trị đó.
Trang 62Khái niệm hằng & biến
1. Biến (variable): là đối tượng dữ liệu được đặt tên
và giá trị dữ liệu của nó có thể thay đổi trong thời
gian sống
2. Hằng (constant): là đối tượng dữ liệu có tên nhưng
giá trị dữ liệu của nó không thay đổi trong suốt
thời gian sống
Hằng theo ký tự (literal): tên của nó cũng chính là dạng
biểu diễn giá trị dữ liệu của chính nó
Hằng được định nghĩa bởi người lập trình
(programmer-defined constant): hằng có tên do người lập trình đặt
Trang 63 “Lap trinh C” là hằng chuỗi ký tự
Hằng ký hiệu (do người dùng định nghĩa):
#define PI 3.1416
#define MAX 100
Hằng liệt kê:
enum months { JAN = 1, FEB, MAR, APR, MAY, JUN,
JUL, AUG, SEP, OCT, NOV, DEC };
/* FEB = 2, MAR = 3, …*/
Trang 64Một số hằng theo từng kiểu dữ liệu
1. Kiểu ký tự:
Trang 65Một số hằng theo từng kiểu dữ liệu
2. Kiểu nguyên:
Trang 66Một số hằng theo từng kiểu dữ liệu
Trang 67Cách khai báo biến
Mỗi biến trong chương trình đều phải được khai báo trước khi sử dụng Cú pháp khai báo biến như sau:
<Kiểu dữ liệu> <danh_sách_tên_biến>;
Lưu ý: nếu có nhiều tên biến thì giữa các tên biến
phải có dấu phẩy: “,”
Ví dụ:
int a, b; //a và b là 2 số nguyên
float x, y;
double diem, dtb
Trang 68Khởi tạo giá trị cho các biến
1. Ngay trên dòng khai báo ta có thể gán cho
biến một giá trị Việc làm này gọi là khởi tạo
giá trị cho biến.
2. Ví dụ: int a, b=6, d=1;
3. Hằng biến:
Cú pháp: const <kiểu DL> <tên hằng> = <giá trị>;
const float PI = 3.1416;
const float EPSILON = 0.0001;
Trang 69Truy xuất đến địa chỉ của biến
Khái niệm bộ nhớ:
Mọi biến đều tương ứng với một địa chỉ trong bộ nhớ Tất cả các biến đều có một tên, một kiểu dữ liệu, kích thước lưu trữ và một giá trị.
Trang 70Truy xuất đến địa chỉ của biến(tt)
1. Một số hàm của C dùng đến địa chỉ của biến ví
dụ như hàm scanf Để nhận địa chỉ của biến,
Trang 71Gán giá trị cho biến
Giá trị được gán cho biến phải thuộc cùng
kiểu dữ liệu với biến đó
Trang 72Nhập xuất giá trị cho biến
1. Nhập: nhập từ bàn phím
2. Xuất: xuất ra màn hình (console)
3. Hai nhóm hàm nhập xuất chuẩn:
ANSI C: printf và scanf
C++: cout và cin
Trang 73Nhập xuất giá trị cho biến
d i int Xem như một số nguyên hệ 10 có dấu
ld li long Xem như một số nguyên hệ 10 có dấu
u lu int, long Xem như một số nguyên hệ 10 không dấu
Chuyển sang dạng thập phân.
Trang 74Nhập xuất giá trị cho biến
Trang 75Nhập xuất giá trị cho biến
Trang 76Tóm tắt
1 Thế nào là định danh và từ khóa?
2 Dữ liệu là gì? Kiểu dữ liệu là gì?
3 Có mấy loại kiểu dữ liệu?
4 Kiểu số nguyên trong ngôn ngữ C có những kiểu nào?
5 Thế nào là hằng và biến?
6 Có mấy loại hằng? Hằng ký hiệu và hằng biến khác nhau như thế nào?
7 Cách khai báo biến? Biến được lưu trữ như thế nào?
8 Lấy địa chỉ của biến như thế nào?
9 Khởi tạo và gán giá trị cho biến như thế nào?
10 Cách nhập xuất giá trị cho biến?
Trang 78CHƯƠNG 4 PHÉP TOÁN VÀ BIỂU THỨC
ThS Dương Thị Thùy Vân
Khoa CNTT-TƯD
Trang 79Nội dung
1. Biểu thức
2. Các phép toán – Toán tử
Trang 80Biểu thức
1. Biểu thức là sự kết hợp hợp lệ của những toán tử
thực hiện trên các biến, hằng hoặc các giá trị của hàm
2. Một biểu thức bao gồm các toán tử (toán tử) và
các toán hạng (biến, hằng ) và các dấu ngoặc.
3. Kiểu của biểu thức là kiểu của kết quả sau khi tính
biểu thức
4. Ví dụ :
int result, x = 2, y = 7;
result = (x+2*y);
Trang 81Các phép toán - toán tử
1. Các toán tử số học
2. Các phép thao tác bit
3. Các toán tử quan hệ và logic
4. Chuyển đổi kiểu dữ liệu
5. Các toán tử tăng, giảm
6. Câu lệnh gán
7. Toán tử phẩy
8. Toán tử điều kiện – Biểu thức điều kiện
9. Thứ tự ưu tiên giữa các toán tử
10. Quy tắc tính thứ tự ưu tiên
Trang 821.Các toán tử số học
1. Phép Cộng (+), trừ (-), nhân (*), chia (/)
thực hiện trên các kiểu dữ liệu int, char,
float, double…
2. Phép modulo(%) để lấy phần dư của phép
chia hai số nguyên
float x = 5,y = 2, z;
z = x/y; // 2.5
z = x%y; //error: illegal use of floating
point
Trang 832.Các toán tử trên bit
Các toán tử AND(&), OR(|), XOR(^):
Toán hạng 1 Toán hạng 2 Kết quả
• Các toán tử dịch trái(<<), dịch phải (>>):
- Biểu thức a<<n sẽ dịch chuyển các bit trong a sang trái n vị trí.
Trang 84Ví dụ
Trang 853.Các toán tử quan hệ & logic
Trang 864.Chuyển đổi kiểu dữ liệu
1 Khi hai toán hạng trong một toán tử khác kiểu dữ liệu thì
kiểu dữ liệu thấp được nâng thành kiểu dữ liệu cao trước khi tính toán.
Ví dụ: float f; int i; f +i ,
Biến i sẽ tạm thời chuyển sang kiểu float để thực hiện phép cộng.
2. Trong trường hợp f có kiểu float, i1 và i2 có kiểu int Trong
biểu thức f=i1/i2, để thu được kết quả chính xác, cần sử
dụng phép ép kiểu: f=(float) i1/i2
Trang 875 Toán tử tăng, giảm
Các toán tử ++ và dùng để tăng hoặc giảm 1
đơn vị đối với các biến nguyên hoặc thực
thức mẫu
Diễn giải
++ Tăng trước ++a Tăng a 1 đơn vị Sau đó sử dụng
giá trị mới của a vào biểu thức
++ Tăng sau a++ Sử dụng giá trị hiện tại của a vào
biểu thức Sau đó tăng a 1 đơn vị
Giảm trước a Giảm b 1 đơn vị Sau đó sử dụng
giá trị mới của b vào biểu thức.
Giảm sau a Sử dụng giá trị hiện tại của b vào
Trang 89int so = 10; /* Gia tri ban dau */
so += 5; /* tương đương so=so+5 cho kết quả so=15 */
so -= 3; /* tương đương so=so-3 cho kết quả so=12 */
so *= 3; /* tương đương so=so*3 cho kết quả so=36 */
x+=(y=5); /* nghĩa là gán giá trị 5 vào biến y rồi cộng 5 vào x*/
Trang 907.Toán tử phẩy
1. Đây là một toán tử đặc biệt có ký hiệu là “,”
2. Một biểu thức phẩy bao gồm một cặp biểu thức
cách nhau bằng dấu phẩy và được tính toán từ
biểu thức bên trái rồi sau đó đến biểu thức bên
phải
3. Kết quả của toàn bộ biểu thức phẩy là kết quả của
biểu thức bên phải
4. Ví dụ:
int m,t,h;
Trang 918.Toán tử & biểu thức điều kiện
Có ký hiệu là ?
<điều kiện> ? <biểu thức 1>:<biểu thức 2>
Kết quả của biểu thức này bằng biểu thức 1 nếu
điều kiện có kết quả khác 0, ngược lại kết quả của biểu thức này bằng biểu thức 2
Trang 929.Thứ tự ƣu tiên của các toán tử
Trang 9310.Quy tắc tính thứ tự ƣu tiên
Có 3 nguyên tắc tính thứ tự ưu tiên trong
Qui tắc 3: Phần trong ngoặc đơn từ trong ra ngoài
sẽ được tính toán để trở thành một giá trị đơn
Trang 944. Phép toán tăng giảm thực hiện ra sao?
5. Cách tính thứ tự ưu tiên của các phép toán
trong một biểu thức như thế nào?
Trang 95Bài tập
1. Để in ra màn hình từng chữ số của một số
có 5 chữ số, các bước thực hiện ra sao?
VD: 42399 -> 4 2 3 9 9
2. Hãy cho biết kết quả phép chia 7/2
3. Để có được kết quả phép chia ở trên là số
thực thì làm cách nào?
Trang 96CHƯƠNG 5 CẤU TRÚC ĐIỀU KHIỂN
ThS Dương Thị Thùy Vân
Khoa CNTT-TƯD
Trang 981.Giới thiệu câu lệnh và khối lệnh
1 Câu lệnh - statement:
Mỗi câu lệnh thực hiện một chức năng nào đó.
Câu lệnh có thể được viết trên một hoặc nhiều dòng và được kết thúc bằng dấu chấm phẩy (;)
2 Khối lệnh – block of statements:
Một dãy các câu lệnh được đặt trong cặp dấu { và } được gọi
một là một khối lệnh.
Những câu lệnh của một hàm, những câu lệnh của một cấu trúc phải được đặt vào dấu {}
3 Các toán tử điều khiển trình tự:
Cho phép thay đổi trật tự thực hiện các câu lệnh (khối lệnh)
Do đó máy có thể đang từ một câu lệnh này nhảy tới thực hiện một câu lệnh ở trước, hoặc sau nó.
Trang 99… Lệnh n
Trang 100 Câu lệnh goto và nhãn cần nằm trong một hàm.
Không cho phép dùng toán tử goto nhảy từ
ngoài vào trong một khối lệnh, tuy nhiên nhảy từ
Trang 101int soHS, soHSDau, kqHS;
soHS++;
if(soHS<10) goto lap;
if(soHSDau >= 8) printf(“Day tot – Hoc tot”);
Trang 1023 Các cấu trúc chọn
2. Phát biểu if…else : chọn đầy đủ
3. Phát biểu switch : chọn 1 trong nhiều
4. Biểu thức điều kiện
5. Ví dụ
Trang 1033.1 Phát biểu if
Trang 1043.2 Phát biểu if…else
Trang 105Phát biểu if…else dạng phức