MỤC TIÊU 7 Mô tả được quy trình xây dựng bài toán trên MTĐT; So sánh được sự khác nhau giữa câu lệnh, chương trình và phần mềm; Biết được lịch sử ra đời, quá trình hình thành và p
Trang 1 Nhóm GV: ThS Nguyễn Quỳnh Mai
ThS Cao Thị Thu Hương ThS Trần Thị Mỹ Diệp
TS Phạm Minh Hoàn
Địa chỉ: BM Công nghệ thông tin - C100, ĐH Kinh tế Quốc dân,
207 Đường Giải Phóng, Hai Bà Trưng, Hà Nội
Website: http://cntt.neu.edu.vn
Số điện thoại: (84-4) 36 280280 / 6689
Trang 2Phân bố thời gian giảng dạy
Trang 33
5
Đánh giá của giảng viên: 10% số điểm
Hình thức: tham dự học, làm bài tập về nhà hàng tuần và
tham gia thảo luận trên lớp
Kiểm tra giữa kỳ: 20% số điểm
Hình thức: kiểm tra, lập trình trên máy tính
Thi kết thúc học phần: 70% số điểm
Hình thức: lập trình trên máy tính
Điều kiện dự thi:
Sinh viên phải có mặt trên lớp tối thiểu 80% số tiết học
PHƯƠNG PHÁP ĐÁNH GIÁ HỌC PHẦN
CHƯƠNG 1
NHỮNG KHÁI NIỆM CƠ BẢN CỦA LẬP TRÌNH
6
Trang 4MỤC TIÊU
7
Mô tả được quy trình xây dựng bài toán trên MTĐT;
So sánh được sự khác nhau giữa câu lệnh, chương trình và
phần mềm;
Biết được lịch sử ra đời, quá trình hình thành và phát triển
của ngôn ngữ C, C++;
Liệt kê được các kỹ thuật lập trình cơ bản;
Giải thích được khái niệm, tính chất và các cách biểu diễn
Trang 54. Chuẩn hoá dữ liệu
5. Viết thuật giải cho bài toán
6. Viết chương trình cho bài toán
7. Thử nghiệm chương trình
8. Chạy với dữ liệu thật
9. Phân tích, đánh giá, sử dụng kết quả và viết hướng dẫn sử dụng
9
1.2 Chương trình và lập chương trình
Chương trình: là một dãy các lệnh mà MTĐT hiểu được và cần
thực hiện theo một thứ tự xác định để giải một bài toán nào đó
Lập chương trình: (gọi tắt là lập trình) là quá trình viết chương
trình bằng một công cụ lập trình (ngôn ngữ lập trình) nào đó Người
viết chương trình được gọi là lập trình viên (programmer)
10
Trang 61.2 Chương trình và lập chương trình
Phần mềm
Chương trình 2
Chương trình 1
Câu lệnh Câu lệnh Câu lệnh
Trang 77
Ngôn ngữ C được thiết kế bởi Dennis Ritchie tại phòng thí nghiệm
Bell vào đầu những năm 1970
Sự phát triển của C dựa trên các ngôn ngữ đã có: ALGOL; CPL;
BCPL, B (Ken Thompson, 1970)
C là ngôn ngữ lập trình được sử dụng rất phổ biến để lập trình hệ
thống cùng với Assembler và phát triển các ứng dụng
Những năm 1980, ngôn ngữ C có một phiên bản mới là C++ Nó
thực hiện tất cả các chức năng của C, và được bổ sung nhiều khái
niệm và khả năng mới
C là một ngôn ngữ có cấu trúc Module
C là ngôn ngữ được các nhà tin học chuyên nghiệp dùng phổ
biến, nhất là trong việc viết các phần mềm hệ thống (hệ điều
hành, chương trình dịch, cơ sở dữ liệu, bảng tính,…)
14
Trang 81.4 Các kỹ thuật lập trình
Lập trình có cấu trúc
Chương trình giải bài toán được chia thành các phần nhỏ hơn, độc
lập với nhau, gọi là các khối chương trình Mỗi khối chương trình
Lập trình hướng đối tượng
Lập trình hướng đối tượng (Object Oriented Programming): là phương
pháp lập trình cho phép xây dựng các chương trình từ các đối tượng
Ưu thế của lập trình hướng đối tượng là:
Trang 99
1.5 Thuật toán
1.5.1 Khái niệm thuật toán
1.5.2 Các tính chất của thuật toán
1.5.3 Các cách biểu diễn thuật toán
17
1.5.1 Khái niệm thuật toán
18
Thuật toán (giải thuật): là một quá trình gồm một dãy hữu hạn
các thao tác có thể thực hiện đƣợc sắp xếp theo một trình tự nhất
định dùng để giải một bài toán
Trang 101.5.2 Các tính chất của thuật toán
Trang 11 Mỗi đoạn mã giả phải bắt đầu với một từ BEGIN Ðể hiển
thị giá trị nào đó, từ DISPLAY đƣợc dùng Mã giả kết thúc
với từ END
BEGIN DISPLAY ‘Hello World !’
Trang 121.5.3 Các cách biểu diễn thuật toán – Lưu đồ
Các biểu tượng trong lưu đồ
1.5.2 Các cách biểu diễn thuật toán - Lưu đồ
Trang 1313
1.6 Cấu trúc dữ liệu
25
Dữ liệu (Data):
Là những mẩu tin được máy tính lưu trữ và xử lý hoặc truy suất theo
yêu cầu của người dùng hoặc theo tiến trình hoạt động của máy
Dữ liệu được chứa trong bộ nhớ của máy tính với một số lượng ô
nhớ nhất định, tính theo đơn vị Byte
Kiểu dữ liệu (Data type): được định nghĩa với hai điểm chính:
Một tập hợp các giá trị (miền giá trị) mà một biểu thức thuộc kiểu
đó có thể nhận được
Trên đó xác định một số phép toán
1.6 Cấu trúc dữ liệu
26
Cấu trúc dữ liệu: là một cách tổ chức các dữ liệu thành một đơn
vị hoàn chỉnh bao gồm các thành phần (phần tử) là các dữ liệu cơ
bản, các mối liên kết giữa các phần tử ấy và các thao tác cơ bản trên
chúng Các thao tác này thường được gọi là các phép toán trên cấu
trúc dữ liệu xác định
Mối quan hệ giữa cấu trúc dữ liệu và giải thuật
Chương trình = Cấu trúc dữ liệu + Giải thuật
Trang 14TÓM TẮT CHƯƠNG 1
27
Một số thuật ngữ cơ bản: câu lệnh, chương trình, lập trình,
lập trình cấu trúc, lập trình hướng đối tượng, dữ liệu, cấu
trúc dữ liệu
Các bước trong quy trình giải toán trên máy tính
Lịch sử hình thành và phát triển của ngôn ngữ C, C++ Ưu
điểm của ngôn ngữ lập trình C
Khái niệm thuật toán và các cách biểu diễn thuật toán
CHƯƠNG 2
28
CÁC KHÁI NIỆM CƠ BẢN CỦA
NGÔN NGỮ LẬP TRÌNH C
Trang 1515
MỤC TIÊU
29
Giải thích được khái niệm cơ bản về ngôn ngữ lập trình C
Mô tả một số quy tắc khi viết chương trình
Trình bày cấu trúc một chương trình C
Làm quen với môi trường lập trình C
NỘI DUNG
30 2.1 Các khái niệm cơ bản
2.2 Một số quy tắc khi viết chương trình
2.3 Cấu trúc một chương trình
2.4 Giới thiệu môi trường lập trình C
Trang 162.1 Các khái niệm cơ bản
31 2.1.1 Tập ký tự dùng trong ngôn ngữ C
Trang 17Đặt tên cho kiểu dữ liệu: int, float, double…
Mô tả các lệnh, các cấu trúc lập trình: if, while, case…
Chú ý:
• Tất cả từ khóa trong C đều viết bằng chữ cái thường
Trang 182.1.2 Từ khoá
35
Từ khóa hay dùng trong C
break case char const continue
default
do double else enum float for
goto if int interrupt long
Định danh (Identifier – hoặc còn gọi là Tên) là một dãy các
kí tự dùng để gọi tên các đối tượng trong chương trình
Các đối tượng trong chương trình:
Trang 1919
2.1.3 Cách đặt tên trong C
37
Quy tắc đặt tên (định danh) trong C
Các kí tự được sử dụng: chữ cái, chữ số và dấu gạch dưới “_”
Bắt đầu của định danh phải là chữ cái hoặc dấu gạch dưới
“_”, không được bắt đầu định danh bằng chữ số
Định danh do người lập trình đặt không được trùng với các
• so luong, ti le (có dấu cách - kí tự không hợp lệ)
• int, char (trùng với từ khóa của ngôn ngữ C)
Trang 20nhap_du_lieu, tim_kiem, xu_li Hàm
sinh_vien, mat_hang Cấu trúc
Mỗi câu lệnh có thể viết trên một hoặc nhiều dòng, nhưng phải
được kết thúc bởi dấu chấm phảy (;)
Xâu ký tự phải được viết trong một cặp dấu nháy kép Mỗi xâu
ký tự chỉ được viết trên một dòng
Dấu ; được dùng để ngăn cách các câu lệnh và bắt buộc phải viết
vào Tuy nhiên trong chương trình C có một số chỗ không dùng
Trang 21- Trên phần còn lại của dòng
2.2 Một số quy tắc khi viết chương trình
42
Quy tắc 3
Trong chương trình có sử dụng hàm chuẩn thì đầu chương trình
cần khai báo thư viện chứa hàm đó như sau:
Trang 222.2 Một số quy tắc khi viết chương trình
43
Quy tắc 4: Cấu trúc chương trình C
Một chương trình C có một hàm main() bắt buộc và có thể
có thêm nhiều hàm khác
Hàm của C là đoạn chương trình được viết ra một lần song
có thể sử dụng nhiều lần
Về nguyên tắc hàm phải trả lại một giá trị nào đó cho tên
hàm Riêng đối với hàm main( ), chúng ta không trả lại kết
quả cho main nên người ta cũng thường viết void main( )
2.3 Cấu trúc một chương trình
44 2.3.1 Cấu trúc tổng quát
2.3.2 Câu lệnh
2.3.2 Khối lệnh
2.3.3 Hàm
2.3.4 Ví dụ
Trang 23Phần 1: Khai báo tệp tiêu đề: #include < >
Phần 2: Định nghĩa kiểu dữ liệu mới: typedef
Phần 3: Khai báo các nguyên mẫu hàm
Phần 4: Khai báo các biến toàn cục
Phần 5: Hàm main()
Phần 6: Nội dung các hàm đã khai báo
Trang 242.3.1 Cấu trúc tổng quát
47
Phần 1: Khai báo tệp tiêu đề:
• Thông báo cho chương trình dịch biết là chương trình có sử
dụng những thư viện nào
• VD: #include <stdio.h> // chứa các hàm vào ra dữ liệu
#include <math.h> // chứa các hàm toán học
Phần 2: Định nghĩa các kiểu dữ liệu mới
• Định nghĩa các kiểu dữ liệu mới (nếu cần) dùng cho cả chương
trình
2.3.1 Cấu trúc tổng quát
48
Phần 3: Khai báo các nguyên mẫu hàm:
Giúp cho chương trình dịch biết được những thông tin cơ bản của
Trang 25• Trong hàm main( ) có thể có lệnh gọi tới các hàm khác
Phần 6: Nội dung của các hàm đã khai báo
• Cài đặt (viết mã) cho các hàm đã khai báo nguyên mẫu ở phần 3
2.3.2 Câu lệnh
50
• Bắt đầu bằng một từ khóa, có thể viết trên một hoặc nhiều dòng
• Kết thúc câu lệnh bằng một dấu chấm phảy (;)
Trang 262.3.2 Khối lệnh
51
• Khối lệnh là một dãy các câu lệnh đặt trong dấu ngoặc nhọn {}
• Không đặt dấu ; sau dấu ngoặc nhọn kết thúc
• Khối lệnh tương đương với câu lệnh riêng lẻ về mặt cú pháp
2.3.3 Hàm
52
Hàm là đơn vị làm việc độc lập của chương trình:
Các hàm có vai trò ngang nhau Không cho phép xây dựng một
hàm ở bên trong một hàm khác
Mỗi hàm có các biến, mảng,… riêng của mình và chúng chỉ
được sử dụng nội bộ bên trong của hàm Nói cách khác hàm có
tính chất khép kín
Trang 2727
TÓM TẮT CHƯƠNG 2
53
Một số khái niệm cơ bản: tập kí tự, từ khóa, cách đặt tên
Cấu trúc một chương trình C và 4 quy tắc cần nhớ khi viết
chương trình
Cài đặt môi trường lập trình C: Có thể lựa chọn một trong
các công cụ sau: Turbo C, Borland C; Dev C, C Free; Code
Trang 28 Liệt kê, thảo luận các loại biểu thức, toán tử
Hiểu, áp dụng đƣợc việc chuyển đổi kiểu giá trị
NỘI DUNG
3.1 Các kiểu dữ liệu cơ bản
3.2 Các kiểu dữ liệu dẫn xuất
Trang 2929
3.1 Các kiểu dữ liệu cơ bản
57 3.1.1 Kiểu số nguyên (int)
3.1.2 Kiểu số thực với độ chính xác đơn (float)
3.1.3 Kiểu số thực với độ chính xác kép (double)
3.1.4 Kiểu kí tự
3.1.5 Kiểu void
void char
double
3.1 Các kiểu dữ liệu cơ bản
Kiểu dữ liệu cơ bản
float
int
58
Trang 323.1.5 Kiểu void
63
Không lưu bất cứ dữ liệu gì
Báo cho trình biên dịch không có giá trị trả về
3.2 Các kiểu dữ liệu dẫn xuất
int
( chiếm ít bộ nhớ hơn int )
Kiểu dữ liệu dẫn xuất Kiểu dữ liệu
Trang 3333
3.3 Hằng
Hằng (constant): là một đại lượng không thay đổi trong suốt thời
gian thực hiện chương trình
Trang 34const int SI_SO_LOP = 50;
const float DIEM_CHUAN = 20.5;
const char CN[20] = “Cong nghe”;
Trang 3535
3.4 Biến
69 3.4.1 Khái niệm
3.4.2 Khai báo biến
3.4.3 Khởi tạo giá trị cho biến
3.4.1 Khái niệm
Biến là đại lượng có thể thay đổi trong quá trình tính toán
Các ngôn ngữ lập trình hiện đại cho phép sử dụng các tên tượng
trưng gọi là biến (variable), chỉ đến một vùng bộ nhớ nơi mà các
giá trị cụ thể được lưu trữ
70
Trang 363.4.2 Khai báo biến
Một biến trước khi sử dụng phải được khai báo
Cú pháp khai báo:
kiểu_dữ_liệu tên biến;
char int ch; // biến kiểu kí tự
Nếu các biến thuộc cùng kiểu dữ liệu thì có thể khai báo trên
cùng một dòng:
kiểu_dữ_liệu danh sách tên biến;
float x, y;
72
Trang 3737
3.4.3 Khởi tạo giá trị cho biến
Có thể khởi tạo giá trị cho biến trong dòng khai báo bằng cú
Trang 383.5.1 Định nghĩa mảng
3.5.1 Định nghĩa mảng:
Mảng là một tập hợp các phần tử dữ liệu có cùng kiểu Mỗi phần tử
được lưu trữ ở các vị trí kế tiếp nhau trong bộ nhớ Những phần tử
Trang 39 Các phần tử của mảng có cùng kiểu dữ liệu
Mỗi phần tử của mảng có thể đƣợc sử dụng nhƣ một biến riêng lẻ
Kiểu dữ liệu của mảng có thể là int, char, float hoặc double
3.5.4 Một số quy tắc sử dụng mảng
Trang 403.5.5 Quản lý mảng trong C
79
Trong ngôn ngữ C, mảng được “đối xử” không giống hoàn toàn
với biến
Hai mảng có cùng kiểu và cùng kích thước cũng không được xem
là tương đương nhau
Không thể gán trực tiếp một mảng cho một mảng khác Phải gán
trị cho từng phần tử của mảng
3.5.6 Khởi tạo mảng
80
Các mảng cũng có thể được khởi tạo khi khai báo Điều này được
thực hiện bằng việc gán tên mảng với một danh sách các giá trị
phân cách nhau bằng dấu phẩy, đặt trong cặp dấu ngoặc nhọn {}
Các giá trị này được gán cho các phần tử trong mảng theo đúng
thứ tự xuất hiện
Ví dụ:
int deci[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
static float rates[4] = {0.0, -2.5, 13.75, 18.0};
char company[5] = {„A‟, „P‟, „P‟, „L‟, „E‟};
Trang 41 Mỗi ký tự trong chuỗi chiếm một byte và ký tự cuối cùng của
chuỗi là “\O” (null)
Các hàm xử lý chuỗi đƣợc tìm thấy trong thƣ viện chuẩn
<string.h>
3.5.7 Chuỗi - Mảng kí tự
Tên hàm Chức năng
strcmp(s1, s2) Trả về 0 nếu s1 và s2 là giống nhau; nhỏ hơn 0 nếu s1<s2; lớn hơn
0 nếu s1> s2
strstr(s1, s2) Trả về một con trỏ trỏ đến vị trí xuất hiện đầu tiên của chuỗi s2
trong chuỗi s1
82
Trang 423.6 Lớp lưu trữ
83
Mỗi biến trong C có một tính chất được gọi là lớp lưu trữ
Lớp lưu trữ định nghĩa hai đặc tính của biến:
Thời gian sống của một biến là khoảng thời gian nó duy trì
3.7.2 Toán tử
Trang 4343
3.7.1 Biểu thức
85 Biểu thức là sự kết hợp các toán tử và các toán hạng
- Nếu BT đúng, giá trị biểu thức là E1
- Ngƣợc lại giá trị của biểu thức là E2
và y
86
Trang 443.7.2 Toán tử
87
Toán tử gán:
Toán tử gán (=) có thể đƣợc dùng với bất kỳ biểu thức C hợp lệ nào
(Giá trị trái) (Giá trị phải)
Nhị phân (Bitwise)
Trang 4545
Toán tử số học
89 Những toán tử số học đƣợc sử dụng để thực hiện những thao tác
mang tính số học Chúng đƣợc chia thành hai lớp :
Toán tử số học một ngôi (unary)
Toán tử số học hai ngôi (binary)
Trang 46Toán tử quan hệ (so sánh)
91
Toán tử quan hệ: Ðƣợc dùng để kiểm tra mối quan hệ giữa hai
biến hay giữa một biến và một hằng
Toán tử luận lý: là những ký hiệu dùng để kết hợp hay phủ định
biểu thức chứa các toán tử quan hệ
Toán tử Ý nghĩa
&& AND: Kết quả là True khi cả 2 điều kiện
đều đúng
|| OR : Kết quả là True khi chỉ một trong
hai điều kiện là đúng (đúng cả khi cả hai
đk đúng)
! NOT: Tác động trên các giá trị riêng lẻ,
chuyển đổi True thành False và ngƣợc lại
Trang 4747
Độ ƣu tiên của các toán tử
93
Độ ƣu tiên của toán tử so sánh luôn đƣợc tính từ trái sang phải
Độ ƣu tiên của toán tử luận lý theo thứ tự là: NOT, AND, OR
Khi có nhiều toán tử luận lý trong một điều kiện, ta áp dụng quy
tắc tính từ phải sang trái
Khi một biểu thức có nhiều loại toán tử thì độ ƣu tiên giữa chúng
phải đƣợc thiết lập theo thứ tự sau:
3.8.2 Ví dụ
3.8.3 Ép kiểu
Trang 483.8 Chuyển đổi kiểu giá trị
95
Việc chuyển đổi kiểu giá trị thường diễn ra một cách tự động
trong hai trường hợp sau:
Khi biểu thức gồm các toán hạng khác kiểu
Khi gán một giá trị kiểu này cho một biến kiểu kia
Ngoài ra, ta cũng có thể chuyển từ một kiểu giá trị sang một kiểu
bất kỳ mà ta muốn bằng phép ép kiểu
96
1 char và short được chuyển thành int và float được chuyển thành
double
2 Nếu có một toán hạng kiểu double, toán hạng còn lại sẽ được
chuyển thành double, và kết quả là double
3 Nếu có một toán hạng kiểu long int, toán hạng còn lại sẽ được
chuyển thành long int, và kết quả là long int
4 Nếu có một toán hạng là unsigned, toán hạng còn lại sẽ được
chuyển thành unsigned và kết quả cũng là unsigned
5 Nếu tất cả toán hạng kiểu int, kết quả là int
3.8.1 Quy tắc chuyển đổi kiểu giá trị tự động