Mã máy machine language Là ngôn ngữ duy nhất máy tính trực tiếp hiểu được, là “ngôn ngữ tự nhiên” của máy tính Được định nghĩa bởi thiết kế phần cứng, phụ thuộc phần cứng Gồm các c
Trang 1TẬP BÀI GIẢNG ĐIỆN TỬ
KỸ THUẬT LẬP TRÌNH
(Theo phương thức đào tạo tín chỉ)
Trình độ đào tạo : Đại học
Giảng viên
VŨ TRUNG DŨNG
Hà Nội, 2018
Trang 2BÀI GIẢNG ĐIỆN TỬ SỐ 01
Trang 3BB
3
Học phần “Kỹ thuật lập trình ” nhằm cung cấp cho sinh viên
những kiến thức cơ sở cho lập trình hệ thống Qua đó sinhviên có được khái niệm chung về lập trình
Tiết đầu tiên chúng ta sẽ học về: MÃ MÁY, HỢP NGỮ VÀ
NGÔN NGỮ BẬC CAO, MỘT SỐ NGÔN NGỮ LẬPTRÌNH BẬC CAO
Trang 4CHƯƠNG 1: TỔNG QUAN VỀ
NGÔN NGỮ C++
HỌC PHẦN:
KỸ THUẬT LẬP TRÌNH
Trang 6BB 1.1 Mã máy, Hợp ngữ, và Ngôn ngữ bậc cao
a Mã máy (machine language)
Là ngôn ngữ duy nhất máy tính trực tiếp hiểu được, là “ngôn ngữ tự
nhiên” của máy tính
Được định nghĩa bởi thiết kế phần cứng, phụ thuộc phần cứng
Gồm các chuỗi số, => chuỗi các số 0 và 1
Dùng để lệnh cho máy tính thực hiện các thao tác cơ bản, mỗi lần
một thao tác
Trang 7BB
7
1.1 Mã máy, Hợp ngữ, và Ngôn ngữ bậc cao
Nặng nề, khó đọc đối với con người
Ví dụ:
+1300042774 +1400593419 +1200274027
Trang 9BB
9
1.1 Mã máy, Hợp ngữ, và Ngôn ngữ bậc cao
Máy tính không hiểu
• Cần đến các chương trình dịch hợp ngữ (assembler) để chuyển từ
Trang 10BB 1.1 Mã máy, Hợp ngữ, và Ngôn ngữ bậc cao
c Các ngôn ngữ bậc cao (high-level languages)
Tương tự với tiếng Anh, sử dụng các ký hiện toán học thông dụng
Một lệnh thực hiện được một công việc mà hợp ngữ cần nhiều lệnh để
thực hiện được
Các chương trình dịch (compiler) để chuyển sang mã máy
Trang 11BB
11
1.1 Mã máy, Hợp ngữ, và Ngôn ngữ bậc cao
Các chương trình thông dịch (Interpreter program) trực tiếp chạy các
chương trình viết bằng ngôn ngữ bậc cao
Ví dụ:
grossPay = basePay + overTimePay
Trang 12BB 1.2 Một số ngôn ngữ lập trình bậc cao
FORTRAN
Formula Translator (1954-1957: IBM)
Tính toán toán học phức tạp, thường dùng trong các ứng dụng khoa học và kỹ thuật
Common Business Oriented Language (1959)
Trang 13 Tác giả: Sun Microsystems (1991)
Ngôn ngữ điều khiển theo sự kiện (event-driven), hoàn toàn hướng đối tượng, tính khả chuyển (portable) rất cao
Trang 15 Dennis Ritchie (Bell Laboratories)
Là ngôn ngữ phát triển của hệ điều hành UNIX
Độc lập phần cứng => các chương trình khả chuyển (portable)
Trang 16BB
C++
Là mở rộng của C
Đầu những năm 1980: Bjarne Stroustrup (phòng thí nghiệm Bell)
Cung cấp khả năng lập trình hướng đối tượng
Ngôn ngữ lai
• Lập trình cấu trúc kiểu C
• Lập trình hướng đối tượng
• Cả hai1.2 Một số ngôn ngữ lập trình bậc cao
Trang 18BB
Visual C++
C++ của Microsoft và mở rộng
• Thư viện của Microsoft (Microsoft Foundation Classes -MFC)
• Thư viện chung
– GUI, đồ họa, lập trình mạng, đa luồng (multithreading), … – Dùng chung giữa Visual Basic, Visual C++, C#
1.2 Một số ngôn ngữ lập trình bậc cao
Trang 19BÀI GIẢNG ĐIỆN TỬ SỐ 02
Trang 20BB
Câu 1: Nêu khái niệm Pascal?
Câu 2: Nêu khái niệm Java?
KIỂM TRA BÀI CŨ:
Trang 22Các trang Web với nội dung tương tác độngPhát triển các ứng dụng quy mô lớn
TRẢ LỜI:
Trang 24BB 1.3 Lịch sử ngôn ngữ C và C++
Ngôn ngữ C được thiết kế bởi nhà khoa học Dennis Ritchie tại phòng thí nghiệm Bell Telephone vào năm 1972 C được thiết kế để viết hệ điều hành UNIX và để hỗ trợ cho các nhà lập trình nhanh chóng hoàn thành công việc của mình Về tên gọi, ngôn ngữ C được đặt tên như thế vì tiền thân của nó là ngôn ngữ B Ngôn ngữ B được phát triển bởi nhà khoa học Ken Thompson, ông cũng làm việc tại phòng thí nghiệm Bell
Trang 25khác nhau, và việc phân biệt hay sử dụng ngôn ngữ C bắt đầu làm cho các nhà lập trình bối rối Để giải quyết vấn đề này, Viện Định Chuẩn
Quốc Gia Mỹ (American National Standard Institute) gọi tắt là ANSI đã triệu một cuộc họp vào năm 1983 nhằm thiết lập các chuẩn mực cho
ngôn ngữ C và được gọi là ANSI C
Trang 26BB 1.3 Lịch sử ngôn ngữ C và C++
Ngoài ngôn ngữ C còn có rất nhiều ngôn ngữ lập trình cấp cao khác như Pascal, BASIC… nhưng theo đánh giá của các
chuyên gia điện toán, C có những ưu điểm nổi bật như sau:
C là ngôn ngữ rất mạnh và linh động, có khả năng thể hiện bất
kỳ ý tưởng nào của bạn Nó có thể chạy trên các hệ điều hành khác nhau và có thể chen các đoạn lệnh C vào cách chương
trình viết bằng ngôn ngữ khác.
Trang 28BB 1.3 Lịch sử ngôn ngữ C và C++
C là ngôn ngữ lập trình cô đọng, chỉ chứa các thuật ngữ gọi là
từ khóa, là cơ sở để xây dựng chương trình.
C là ngôn ngữ lập trình đơn thể Mã lệnh trong C có thể được
viết thành các hàm và có thể được sử dụng lại trong nhiều
chương trình khác nhau.
Trang 29nâng cấp đó.
Trang 31 Borland C (còn gọi là Turbo C)
Borland C++ 3.1 for DOS.
Trang 32BB 1.4.1 Môi trường phát triển chương trình
Môi trường C/C++:
Dev-C++
Visual C++ của Microsoft
Visual Stdio 2005 (sẽ thực hành trên môi trường này)
Trang 33 Biên tập chương trình nguồn (Trình EDIT ).
Biên dịch chương trình (Trình COMPILE ).
1.4.1 Môi trường phát triển chương trình
Trang 34BB
Chạy chương trình nguồn (Trình RUNTIME ).
Sửa lỗi chương trình nguồn (Trình DEBUG ).
1.4.1 Môi trường phát triển chương trình
Trang 37/* This is a sample Program*/
int i,j;
i=100;
j=200;
: }
Trang 41+ io.h: Thư viện chứa các hàm vào ra cấp thấp.
+ graphics.h: Thư viện chứa các hàm liên quan đến đồ họa
Trang 42BÀI GIẢNG ĐIỆN TỬ SỐ 03
Trang 43BB
43
Câu hỏi: Nêu khái niệm mã máy?
KIỂM TRA BÀI CŨ:
Trang 47void Nhap(int &); // Prototype ham Nhap int
TinhTong(int, int); // Protytype ham TinhTong
1.5 Các thành phần cơ bản
Trang 49BB
49
// Phan mo ta cac ham
void Nhap(int &n)
Trang 50BB
a main()
Chương trình C được chia nhỏ thành những đơn vị gọi là hàm
Cho dù có bao nhiêu hàm trong chương trình, Hệ điều hành luôn trao quyền điều khiển cho hàm main() khi một chương trình C được thực thi.
1.5 Các thành phần cơ bản
Trang 51BB
51
Theo sau tên hàm là dấu ngoặc đơn
Dấu ngoặc đơn có thể có chứa hay không chứa những tham số
1.5 Các thành phần cơ bản
Trang 55BB
55
Trình biên dịch C không hiểu việc xuống dòng, khoảng trắng hay tab
Một câu lệnh không kết thúc bằng dấu chấm phẩy sẽ được xem như dòng lệnh lỗi trong C
1.5 Các thành phần cơ bản
Trang 58BÀI GIẢNG ĐIỆN TỬ SỐ 04
Trang 59BB
59
Câu hỏi: Nêu khái niệm hợp ngữ?
KIỂM TRA BÀI CŨ:
Trang 62BB
e Từ khóa: Trong C có các từ khóa sau:
1.5.2 Từ khóa, tên và tiếp cận các thành phần cơ bản thông qua ví dụ đơn giản
break continue enum goto long short switch volatile case default extern huge near static typedef while
Trang 63Các từ khóa phải viết bằng chữ thường
1.5.2 Từ khóa, tên và tiếp cận các thành phần cơ bản thông qua ví dụ đơn giản
Trang 64BB
Khái niệm tên rất quan trọng trong quá trình lập trình, nó không
những thể hiện rõ ý nghĩa trong chương trình mà còn dùng để xác định các đại lượng khác nhau khi thực hiện chương trình Tên thường được đặt cho hằng, biến, mảng, con trỏ, nhãn… Chiều dài tối đa của
1.5.2 Từ khóa, tên và tiếp cận các thành phần cơ bản thông qua ví dụ đơn giản
Trang 65BB
65
Tên biến hợp lệ là một chuỗi ký tự liên tục gồm: Ký tự chữ, số và dấu
gạch dưới Ký tự đầu của tên phải là chữ hoặc dấu gạch dưới Khi đặt tên không được đặt trùng với các từ khóa.
Ví dụ 1:
Các tên đúng: delta, a_1, Num_ODD, Case
1.5.2 Từ khóa, tên và tiếp cận các thành phần cơ bản thông qua ví dụ đơn giản
Trang 66BB
Các tên sai:
3a_1 (ký tự đầu là số)
num-odd (sử dụng dấu gạch ngang)
int (đặt tên trùng với từ khóa)
del ta (có khoảng trắng)
1.5.2 Từ khóa, tên và tiếp cận các thành phần cơ bản thông qua ví dụ đơn giản
Trang 67BB
67
Lưu ý: Trong C, tên phân biệt chữ hoa, chữ thường, ví dụ như:
number khác với Number
case khác với Case (case là từ khóa, do đó bạn đặt tên là Case vẫn
đúng).
1.5.2 Từ khóa, tên và tiếp cận các thành phần cơ bản thông qua ví dụ đơn giản
Trang 68BB
g Tiếp cận các thành phần cơ bản thông qua ví dụ đơn giản.
Ví dụ 3: Chương trình in ra câu: bai hoc C dau tien
1 2 3 4 5
/* In ra cau bai hoc C dau tien */
#include <stdio.h>
void main(void) {
1.5.2 Từ khóa, tên và tiếp cận các thành phần cơ bản thông qua ví dụ đơn giản
Trang 69BB
69
Kết quả in ra màn hình:
Bai hoc C dau tien.
1.5.2 Từ khóa, tên và tiếp cận các thành phần cơ bản thông qua ví dụ đơn giản
Trang 70BB
Giải thích:
Dòng thứ 1: bắt đầu bằng /* và kết thúc bằng */ cho biết hàng này là
hàng diễn giải (chú thích) Khi dịch và chạy chương trình, dòng này
không được dịch và cũng không thi hành lệnh gì cả Mục đích của việc ghi chú này giúp chương trình rõ ràng hơn Sau này bạn đọc lại chương
1.5.2 Từ khóa, tên và tiếp cận các thành phần cơ bản thông qua ví dụ đơn giản
Trang 71BB
71
Dòng thứ 2: chứa phát biểu tiền xử lý #include <stdio.h> Vì trong
chương trình này ta sử dụng hàm thư viện của C là printf, do đó bạn cần phải có khai báo của hàm thư viện này để báo cho trình biên dịch C biết Nếu không khai báo chương trình sẽ báo lỗi.
Dòng thứ 3: hàng trắng viết ra với ý đồ làm cho bảng chương trình
thoáng, dễ đọc.
1.5.2 Từ khóa, tên và tiếp cận các thành phần cơ bản thông qua ví dụ đơn giản
Trang 72BB
Dòng thứ 4: void main(void) là thành phần chính của mọi chương trình
C (bạn có thể viết main() hoặc void main() hoặc main(void)) Tuy nhiên, bạn nên viết theo dạng void main(void) để chương trình rõ ràng hơn Mọi chương trình C đều bắt đầu thi hành từ hàm main Cặp dấu ngoặc () cho biết đây là khối hàm (function) Hàm void main(void) có từ khóa void đầu
1.5.2 Từ khóa, tên và tiếp cận các thành phần cơ bản thông qua ví dụ đơn giản
Trang 73BB
73
Dòng thứ 5 và 8: cặp dấu ngoặc móc {} giới hạn thân của hàm Thân
hàm bắt đầu bằng dấu { và kết thúc bằng dấu }.
Dòng thứ 6: printf("Bai hoc C dau tien.");, chỉ thị cho máy in ra chuỗi ký
tự nằm trong nháy kép ("") Hàng này được gọi là một câu lệnh, kết thúc một câu lệnh trong C phải là dấu chấm phẩy (;).
Dòng thứ 7: printf(“\n"); // con tro xuong 1 dong, cho con trỏ nhảy
xuống dòng kế tiếp để dễ theo dõi
1.5.2 Từ khóa, tên và tiếp cận các thành phần cơ bản thông qua ví dụ đơn giản
Trang 74BÀI GIẢNG ĐIỆN TỬ SỐ 05
Trang 75Câu 2: Nêu khái niệm hàm main()?
KIỂM TRA BÀI CŨ:
Trang 76BB
Câu 1:
- Tất cả trình biên dịch C đều chứa một thư viện hàm chuẩn
- Một hàm được viết bởi lập trình viên có thể được đặt trong
thư viện và được dùng khi cần thiết
- Một số trình biên dịch cho phép thêm hàm vào thư viện
chuẩn
- Một số trình biên dịch yêu cầu tạo một thư viện riêng
TRẢ LỜI:
Trang 77- Cho dù có bao nhiêu hàm trong chương trình, hệ điều hành
luôn trao quyền điều khiển cho hàm main() khi một chương
trình C được thực thi
- Theo sau tên hàm là dấu ngoặc đơn, dấu ngoặc đơn có thể có
chứa hay không chứa những tham số
TRẢ LỜI:
Trang 78BB
Tiết này chúng ta sẽ học về: CÁC KIỂU DỮ LIỆU CƠ BẢN
Trang 792.1 CÁC KIỂU DỮ LIỆU
CƠ BẢN
CHƯƠNG 2: CÁC KIỂU DỮ LIỆU CƠ BẢN
- CÁC CẤU TRÚC ĐIỀU KHIỂN
Trang 80BB 2.1 Các kiểu dữ liệu cơ bản
Kiểu số nguyên: Giá trị của nó là các số nguyên như 2912, -1706, …
Kiểu số thực: Giá trị của nó là các số thực như 3.1415, 29.12, -17.06, …
Kiểu luận lý: Giá trị đúng hoặc sai
Kiểu ký tự: 256 ký tự trong bảng mã ASCII
Trang 83BB
83
2.1.1 Kiểu số nguyên
n bit không dấu: 0 … 2n – 1
Trang 84BB 2.1.1 Kiểu số nguyên
Kiểu (Type)
Độ lớn (Byte)
Trang 86BB 2.1.2 Kiểu số thực
• (*) Độ chính xác đơn (Single-precision) chính xác đến 7 số lẻ
Kiểu (Type)
Độ lớn (Byte)
Miền giá trị
(Range)
Trang 87 C ngầm định một cách không tường minh:
• false (sai): giá trị 0
• true (đúng): giá trị khác 0, thường là 1
C++: bool
Trang 89 Tên kiểu: char
Miền giá trị: 256 ký tự trong bảng mã ASCII
Chính là kiểu số nguyên do:
• Lưu tất cả dữ liệu ở dạng số
• Không lưu trực tiếp ký tự mà chỉ lưu mã ASCII của ký tự đó
Trang 90BB 2.1.4 Kiểu ký tự
Lưu số 65 tương đương với ký tự 'A'…
Lưu số 97 tương đương với ký tự 'a'
Trang 91BÀI GIẢNG ĐIỆN TỬ SỐ 06
Trang 92BB
Câu hỏi: Nêu đặc điểm về kiểu luận lý, cho ví dụ?
KIỂM TRA BÀI CŨ:
Trang 93BB
93
- Đặc điểm
C ngầm định một cách không tường minh:
false (sai): giá trị 0 true (đúng): giá trị khác 0, thường là 1
Trang 952.2 PHÉP GÁN VÀ CÁC PHÉP
TOÁN SỐ HỌC
Trang 96unsigned char dem;
float ketqua, delta;
2.2.1 Biến, hằng, câu lệnh và biểu thức
Trang 97BB
97
a Biến
Phải khai báo biến trước khi sử dụng.
Trong C/ C++ có thể khai báo biến ở:
Ngoài hàm
Đầu hàm
Tham số hàm
Trong chương trình
Trang 101 Câu lệnh đơn: chỉ gồm một câu lệnh.
Câu lệnh phức (khối lệnh): gồm nhiều câu lệnh đơn được bao bởi { và}
Trang 103 Tạo thành từ các toán tử (Operator) và các toán hạng (Operand).
Toán tử tác động lên các giá trị của toán hạng và cho giá trị có kiểu
nhất định
Trang 105BÀI GIẢNG ĐIỆN TỬ SỐ 07
Trang 106BB
Câu hỏi: Nêu đặc điểm về kiểu ký tự, cho ví dụ?
KIỂM TRA BÀI CŨ:
Trang 107Lưu số 65 tương đương với ký tự 'A'…
Lưu số 97 tương đương với ký tự 'a'
TRẢ LỜI:
Trang 108BB
Tiết này chúng ta sẽ học về: TOÁN TỬ GÁN VÀ TOÁN
TỬ TOÁN HỌC
Trang 109 Thường được sử dụng trong lập trình.
Gán giá trị cho biến
a Toán tử gán
Trang 113 Chỉ có một toán hạng trong biểu thức.
++ (tăng 1 đơn vị), (giảm 1 đơn vị)
Trang 116BB b Các toán tử toán học
Có hai toán hạng trong biểu thức
+, –, *, /, % (chia lấy phần dư)
x = x + y x += y;
Trang 118BÀI GIẢNG ĐIỆN TỬ SỐ 08
Trang 119BB
119
Câu hỏi: Nêu khái niệm về toán tử 2 ngôi, cho ví dụ?
KIỂM TRA BÀI CŨ:
Trang 120BB
- Toán tử 2 ngôi, có hai toán hạng trong biểu thức
+, –, *, /, % (chia lấy phần dư)
Trang 121BB
121
Tiết này chúng ta sẽ học về: CÁC TOÁN TỬ TRÊN BIT,
CÁC TOÁN TỬ QUAN HỆ, CÁC TOÁN TỬ LUẬN LÝ, TOÁN TỬ ĐIỀU KIỆN VÀ TOÁN TỬ PHẨY
Trang 122BB 2.2.3 Các toán tử trên bit
Các toán tử trên bit
Tác động lên các bit của toán hạng (nguyên)
& (and), | (or), ^ (xor), ~ (not hay lấy số bù 1)
>> (shift right), << (shift left)
Toán tử gộp: &=, |=, ^=, ~=, >>=, <<=
Trang 126BB 2.2.4 Các toán tử quan hệ
So sánh 2 biểu thức với nhau
Cho ra kết quả 0 (hay false nếu sai) hoặc 1 (hay true nếu đúng)
==, >, >=, <, <=, !=
Trang 128BB 2.2.5 Các toán tử luận lý
Tổ hợp nhiều biểu thức quan hệ với nhau
&& (and), || (or), ! (not)
Trang 130BB 2.2.6 Toán tử điều kiện
Đây là toán tử 3 ngôi (gồm có 3 toán hạng)
<biểu thức 1> ? <biểu thức 2> : <biểu thức 3>
• <biểu thức 1> đúng thì giá trị là <biểu thức 2>
• <biểu thức 1> sai thì giá trị là <biểu thức 3>
Trang 132BB 2.2.7 Toán tử phẩy
Các biểu thức đặt cách nhau bằng dấu ,
Các biểu thức con lần lượt được tính từ trái sang phải
Biểu thức mới nhận được là giá trị của biểu thức bên phải cùng
Trang 134BÀI GIẢNG ĐIỆN TỬ SỐ 09
Trang 135BB
135
Câu hỏi: Nêu khái niệm các toán tử trên bit?
KIỂM TRA BÀI CŨ:
Trang 136 & (and), | (or), ^ (xor), ~ (not hay lấy số bù 1)
>> (shift right), << (shift left)
Toán tử gộp: &=, |=, ^=, ~=, >>=, <<=
TRẢ LỜI:
Trang 138BB 2.2.8 Độ ưu tiên của các toán tử
() [] ->
! ++ - + * (cast) & sizeof
* / %+ -
Trang 139BB
139
2.2.8 Độ ưu tiên của các toán tử
Trang 140BB 2.2.8 Độ ưu tiên của các toán tử
Thực hiện biểu thức trong ( ) sâu nhất trước
Thực hiện theo thứ tự ưu tiên các toán tử
=> Tự chủ động thêm ( )
Trang 143• Văn bản thường (literal text)
• Ký tự điều khiển (escape sequence)
• Đặc tả (conversion specifier)
Trang 144BB a Xuất dữ liệu ra màn hình
Được xuất y hệt như lúc gõ trong xâu định dạng
Xuất xâu Hello World
printf("Hello "); printf("World");
printf("Hello World");
Xuất xâu
Trang 145BB
145
Gồm dấu \ và một ký tự như trong bảng sau:
Ký tự điều khiển Ý nghĩa
Trang 147 Xác định kiểu của biến/giá trị muốn xuất.
Các đối số chính là các biến/giá trị muốn xuất, được liệt kê theo thứ tự cách nhau dấu phẩy
a Xuất dữ liệu ra màn hình
Trang 148Số nguyên không dấu
charint, short, longfloat, doublechar[], char*
unsigned int/short/long
a Xuất dữ liệu ra màn hình
Trang 152BB
int a = 1, b = 2;
Xuất 1 cong 2 bang 3 và xuống dòng
• printf("%d", a); // Xuất giá trị của biến a
• printf(" cong "); // Xuất xâu " cong "
• printf("%d", b); // Xuất giá trị của biến b
a Xuất dữ liệu ra màn hình