30.11.2016
TRƢỜNG ĐẠI HỌC KINH TẾ QUỐC DÂN
VIỆN CÔNG NGHỆ THÔNG TIN KINH TẾ
BÀI GIẢNG
CƠ SỞ LẬP TRÌNH
THÔNG TIN GIẢNG VIÊN
2
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:
Số điện thoại: (84-4) 36 280280 / 6689
Email:
;
1
30.11.2016
KẾ HOẠCH GIẢNG DẠY
3
Phân bố thời gian giảng dạy
STT
Nội dung
Trong đó
Tổng số
tiết
Lý thuyết
Bài tập, thực
hành, kiểm tra
1
2
3
4
5
6
Chƣơng 1
Chƣơng 2
Chƣơng 3
Chƣơng 4
Chƣơng 5
Chƣơng 6
3
3
4
3
8
8
3
2
3
2
5
4
0
1
1
1
3
4
7
Chƣơng 7
6
4
2
8
9
Chƣơng 8
Chƣơng 9
6
4
4
3
2
1
45
30
15
Cộng
Ghi chú
Học trên
phòng
máy tính
KẾ HOẠCH GIẢNG DẠY
4
Thời điểm kiểm tra giữa kỳ:
Sau tuần học thứ 10
Thời gian làm bài kiểm tra:
60 phút, lập trình trên máy tính
Phạm vi, nội dung kiểm tra:
Các kiến thức đã học
2
30.11.2016
PHƢƠNG PHÁP ĐÁNH GIÁ HỌC PHẦN
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
CHƢƠNG 1
6
NHỮNG KHÁI NIỆM CƠ BẢN CỦA LẬP TRÌNH
3
30.11.2016
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à 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
thuật toán;
Phân biệt đƣợc các khái niệm: dữ liệu, cấu trúc dữ liệu,
chƣơng trình;
NỘI DUNG
8
1.1. Quy trình giải bài toán trên MTĐT
1.2. Chƣơng trình và lập chƣơng trình
1.3. Lịch sử ra đời và phát triển của C và C++
1.4. Các kỹ thuật lập trình
1.5. Thuật toán
1.6. Cấu trúc dữ liệu
4
30.11.2016
1.1. Quy trình giải bài toán trên MTĐT
9
1.
Xác định bài toán
2.
Mô hình hoá bài toán
3.
Tìm phƣơng pháp giải
4.
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
1.2. Chƣơng trình và lập chƣơng trình
10
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).
5
30.11.2016
1.2. Chƣơng trình và lập chƣơng trình
11
Phần mềm
Chƣơng
trình 1
Câu lệnh
Chƣơng
trình 2
Câu lệnh
Câu lệnh
1.2. Chƣơng trình và lập chƣơng trình
12
Sự phát triển của các công cụ lập trình
Lập trình bằng ngôn ngữ máy
Lập trình bằng hợp ngữ (Assembler)
Lập trình bằng ngôn ngữ lập trình
6
30.11.2016
1.3. Lịch sử ra đời và phát triển của C và C++
13
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.
1.3. Lịch sử ra đời và phát triển của C và C++
14
Lý do sử dụng ngôn ngữ C:
C là một ngôn ngữ mạnh và mềm dẻo
C là một ngôn ngữ có ít từ khóa.
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,…).
7
30.11.2016
1.4. Các kỹ thuật lập trình
15
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
có chức năng riêng.
Mỗi khối có một lối vào duy nhất ở đầu khối và một lối ra duy
nhất ở cuối khối.
Khi máy tính thực hiện xong một khối nó sẽ chuyển đến một khối
khác hoặc kết thúc chƣơng trình.
Lập trình cấu trúc còn đƣợc gọi là lập trình thủ tục, lập trình
truyền thống.
1.4. Các kỹ thuật lập trình
16
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à:
Tính
đóng gói (Encapsulation)
Tính
kế thừa (Inheritance)
Tính
đa hình (Polymorphism)
Tính
trừu tƣợng (Abstraction)
Khái niệm trọng tâm của lập trình hƣớng đối tƣợng là lớp (Class) và đối
tượng (Object).
8
30.11.2016
1.5. Thuật toán
17
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
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.
9
30.11.2016
1.5.2. Các tính chất của thuật toán
19
Tính kết thúc (tính dừng)
Tính đúng đắn
Tính phổ dụng
Tính xác định đầu vào – đầu ra.
Tính hiệu quả
1.5.3. Các cách biểu diễn thuật toán
20
Sử dụng ngôn ngữ tự nhiên
Mã giả
Lƣu đồ
10
30.11.2016
1.5.3. Các cách biểu diễn thuật toán – Mã giả
21
Không là mã thật. Một phƣơng pháp viết giải thuật sử dụng
một tập hợp các từ tƣơng tự mã thật
Ví dụ:
BEGIN
DISPLAY ‘Hello World !’
END
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
1.5.3. Các cách biểu diễn thuật toán – Lƣu đồ
22
Lƣu đồ: là một hình ảnh minh hoạ cho giải thuật
BEGIN/START
DISPLAY ‘Hello World !’
END/STOP
11
30.11.2016
1.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 đồ
12
30.11.2016
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
13
30.11.2016
TÓ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
14
30.11.2016
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
15
30.11.2016
2.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
2.1.2. Từ khoá
2.1.3. Cách đặt tên trong C
2.1.1. Tập ký tự dùng trong ngôn ngữ C
32
Tập ký tự là tập các phần tử cơ bản tạo nên chƣơng trình
Tổ
hợp các ký tự → từ
Liên
Tổ
kết các từ theo cú pháp → câu lệnh
chức các câu lệnh → chƣơng trình
Ví dụ:
include, void, main…
printf(“…”), getch();
16
30.11.2016
2.1.1. Tập ký tự dùng trong ngôn ngữ C
33
Tập ký tự trong C
26 chữ cái hoa: A B C ... X Y Z
26 chữ cái thƣờng: a b c … x y z.
10 chữ số: 0 1 2 3 4 5 6 7 8 9.
Các kí hiệu toán học:+ - * / = < >
Các dấu ngăn cách: . ; , : space tab
Các dấu ngoặc:( ) [ ] { }
Các kí hiệu đặc biệt:_ ? $ & # ^ \ ! „ “ ~
2.1.2. Từ khoá
34
Từ khóa (keyword)
•
Có sẵn trong mỗi ngôn ngữ lập trình
•
Dành riêng cho các mục đích xác định
Đặ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
17
30.11.2016
2.1.2. Từ khoá
35
Từ khóa hay dùng trong C
break
case
char
const
continue
default
do
goto
double
if
else
enum
int
float
interrupt
for
long
return
short
signed
sizeof
static
struct
switch
typedef union
unsigned void
while
2.1.3. Cách đặt tên trong C
36
Đị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:
• Biến
• Hằng số
• Hàm
• Kiểu dữ liệu
Định danh có thể đƣợc đặt bởi
• Ngôn ngữ lập trình → các từ khóa
• Ngƣời lập trình
18
30.11.2016
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
từ khóa của C
Chú ý: C là ngôn ngữ có phân biệt chữ hoa và chữ thường
2.1.3. Cách đặt tên trong C
38
Ví dụ
Định danh hợp lệ:
x, y, a, b,
_function, PI, gia_tri_1
Định danh không hợp lệ:
•
1_a, 3d, 55x (bắt đầu bằng chữ số)
•
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)
19
30.11.2016
2.1.3. Cách đặt tên trong C
39
Một số quy ƣớc
Nên sử dụng dấu gạch dƣới để phân tách các định danh gồm
nhiều từ
Định danh nên có tính gợi nhớ
Quy ƣớc thƣờng đƣợc sử dụng
Hằng
Các
số dùng chữ cái hoa
biến, hàm, cấu trúc dùng chữ cái thƣờng
Ví dụ
Định danh
Loại đối tƣợng
HANG_SO_1, _CONSTANT_2
Hằng số
a, b, i, j, count
Biến
nhap_du_lieu, tim_kiem, xu_li
Hàm
sinh_vien, mat_hang
Cấu trúc
2.2. Một số quy tắc khi viết chƣơng trình
40
Quy tắc 1
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
đến dấu ;. Đó là vì câu văn này không phải là lệnh của C.
20
30.11.2016
2.2. Một số quy tắc khi viết chƣơng trình
41
Quy tắc 2
Khi viết chƣơng trình, nên viết thêm lời giải thích để cho dễ hiểu
và làm sáng sủa.
Lời giải thích đƣợc đặt giữa cặp dấu /*….*/ và có thể đƣợc viết :
- Trên một dòng
- Trên nhiều dòng
- 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:
#include <ten_ham.h>;
Ví dụ:
#include <stdio.h>;
#include <conio.h>;
#include <string.h>;
#include <math.h>;
21
30.11.2016
2.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ụ
22
30.11.2016
2.3.1. Cấu trúc tổng quát
45
1.
#include <…>
2.
main( )
3.
{
Các câu lệnh
4.
}
5.
6.
/* Khai báo các hàm */
7.
Kiểu dữ liệu
8.
{
tên hàm (các tham số)
/* Các lệnh của hàm */
9.
10.
……
11.
return( );
12.
}
2.3.1. Cấu trúc tổng quát
46
Gồm 6 phần có thứ tự nhƣ sau:
Phầ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
23
30.11.2016
2.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
các hàm sử dụng trong chƣơng trình.
Phần 4: Khai báo các biến toàn cục
Ví dụ:
int a, b;
int tong, hieu, tich;
24
30.11.2016
2.3.1. Cấu trúc tổng quát
49
Phần 5: Hàm main( )
•
Khi thực hiện, chƣơng trình sẽ bắt đầu bằng việc thực hiện các
lệnh trong hàm main( ).
•
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
Câu lệnh
•
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 (;)
25