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

Bài giảng môn cơ sở lập trình trong kinh tế

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 (3.57 MB, 133 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
KHOA HỆ THỐNG THÔNG TIN KINH TẾ

NGUYỄN VĂN HUÂN
VŨ XUÂN NAM
NGUYỄN VĂN GIÁP
ĐỖ VĂN ĐẠI

BÀI GIẢNG

CƠ SỞ LẬP TRÌNH
NGÀNH HỆ THỐNG THÔNG TIN QUẢN LÝ

THÁI NGUYÊN, NĂM 2012


MỤC LỤC
Chương 1: GIỚI THIỆU CƠ SỞ LẬP TRÌNH TRONG KINH TẾ ............................. 5
1.1. Các khái niệm cơ bản ........................................................................................... 5
1.1.1. Ngôn ngữ máy ................................................................................................. 5
1.1.2. Ngôn ngữ lập trình ........................................................................................... 5
1.1.3. Chương trình .................................................................................................... 6
1.2. Sơ lược về cơ sở lập trình trong kinh tế ............................................................... 8
1.2.1. Khái niệm ........................................................................................................ 8
1.2.2. Tìm hiểu một số bài toán kinh tế điển hình ....................................................... 9
1.2.3. Bài toán phục vụ đám đông ............................................................................ 11
1.2.4. Bài toán dự trữ ............................................................................................... 12
Chương 2: CƠ SỞ LẬP TRÌNH NGÔN NGỮ C ......................................................... 15
2.1. Giới thiệu về ngôn ngữ C .................................................................................... 15
2.1.1. Lịch sử hình thành và phát triển ngôn ngữ C .................................................. 15
2.1.2. Các tính chất đặc trưng của ngôn ngữ C ......................................................... 16


2.2. Những khái niệm và nguyên lý cơ bản của lập trình......................................... 20
2.2.1. Hệ thống ký hiệu và từ khoá........................................................................... 20
2.2.2. Khái niệm biến, hằng, biểu thức, câu lệnh ...................................................... 22
2.2.3. Các kiểu dữ liệu ............................................................................................. 27
2.2.4.. Các phép toán ............................................................................................... 34
2.3. Các cấu trúc điều khiển ...................................................................................... 37
2.3.1. Lệnh vào/ra .................................................................................................... 37
2.3.2. Lệnh lựa chọn if ............................................................................................. 41
2.3.3. Lệnh switch ................................................................................................... 44
2.3.4. Vòng lặp xác định for (biết trước số lần lặp)................................................... 45
2.3.5. Vòng lặp không xác định do ... while .. .......................................................... 49
2.3.6. Vòng lặp không xác định while ... .................................................................. 51
2.3.7. Các lệnh rẽ nhánh vô điều kiện....................................................................... 53
2.4. Cấu trúc mảng .................................................................................................... 56
2.4.1. Khái niệm ...................................................................................................... 56
2.4.2. Truy nhập đến các phần tử của mảng.............................................................. 57
2.4.3. Xâu kí tự và mảng .......................................................................................... 59
2.5. Con trỏ ................................................................................................................ 64
2.5.1. Khái niệm con trỏ........................................................................................... 64
2.5.2. Khai báo con trỏ ............................................................................................. 64
2.5.3. Các phép toán trên con trỏ .............................................................................. 67
2.5.4. Con trỏ và xâu ký tự....................................................................................... 68
2.6. Liên hệ giữa con trỏ và mảng ............................................................................. 70
2.6.1. Con trỏ và mảng một chiều ............................................................................ 70
2.6.2. Con trỏ và mảng hai chiều .............................................................................. 71
2.6.3. Con trỏ và mảng nhiều chiều .......................................................................... 72
2.6.4. Sử dụng biến trung gian ................................................................................. 73
2.6.5. Mảng các con trỏ ............................................................................................ 74
2.6.5. Cấp phát động con trỏ .................................................................................... 76
2.7. Kiểu cấu trúc....................................................................................................... 83

2.7.1. Khái niệm và định nghĩa cấu trúc ................................................................... 83
2.7.2. Khai báo cấu trúc ........................................................................................... 84
2.7.3. Truy cập các phần tử của cấu trúc ................................................................. 86

2


2.7.4. Mảng các cấu trúc .......................................................................................... 87
2.7.5. Con trỏ cấu trúc.............................................................................................. 90
2.8. Hàm và chương trình con ................................................................................... 92
2.8.1. Giới thiệu ....................................................................................................... 92
2.8.2. Các module chương trình trong C................................................................... 93
2.8.3. Thư viện các hàm chuẩn................................................................................. 93
2.8.4. Các hàm ......................................................................................................... 95
2.8.5. Các cơ chế truyền tham số .............................................................................. 99
2.8.6. Cấp lưu trữ và phạm vi hoạt động của các đối tượng .................................... 100
2.8.7. Con trỏ hàm ................................................................................................. 101
2.8.8. Hàm đệ qui .................................................................................................. 103
2.9. Các thao tác trên file văn bản........................................................................... 105
2.9.1. Mở file văn bản mới để cất dữ liệu .............................................................. 106
2.9.2. Đọc một file văn bản đã có ........................................................................... 106
2.9.3. Các thao tác vào/ra file mức thấp ................................................................. 109
2.9.4. Tạo file nhị phân để ghi................................................................................ 110
2.9.5. Đọc một file dữ liệu nhị phân ....................................................................... 112
2.9.6. Ghi file dữ liệu có cấu trúc (struct) ............................................................... 113
2.9.7. Đọc file dữ liệu cấu trúc ............................................................................... 115
2.9.8. Truy nhập trực tiếp file dữ liệu nhị phân....................................................... 116
2.9.9. So sánh và chọn phương án sử dụng ............................................................. 118
Chương 3: LẬP TRÌNH TRONG KINH TẾ.............................................................. 120
3.1. Bài toán lãi suất................................................................................................. 120

3.1.1. Phát biểu bài toán ......................................................................................... 120
3.1.2. Xây dựng chương trình ................................................................................ 120
3.2. Bài toán dự trữ.................................................................................................. 123
3.2.1. Mô hình quản lý dự trữ Wilson (tiêu thụ đều, bổ sung tức thời) .................... 123
3.2.2. Mô hình dự trữ tiêu thụ đều, bổ sung dần ..................................................... 125
3.3. Bài toán quy hoạch tuyến tính.......................................................................... 126
3.4. Bài toán phục vụ công cộng .............................................................................. 128

3


Lời nói đầu
Cơ sở lập trình là môn học quan trọng đối với sinh viên ngành Hệ thống
thông tin quản lý. Nhằm giúp các em sinh viên lam quen dần với lập trình và định
hướng vào các bài toán kinh tế, môn học này trang bị cho sinh viên những kiến thức
và kỹ năng lập trình và sử dụng nó như một công cụ để giải quyết những bài toán
kinh tế phổ biến hiện nay. Mặc dù đã ra đời và phát triển qua nhiều thế hệ, song
ngôn ngữ lập trình C là ngôn ngữ rất phù hợp cho việc thiết kế và phát triển các
chương trình tính từ đơn giản đến phức tạp, từ những bài toán đơn thuần đến những
tính toán khoa học phức tạp. Đặc trưng cơ bản của C là tốc độ thực hiện chương trình
nhanh, linh hoạt và dễ dàng cài đặt cũng như sử dụng.
Với thời lượng chương trình cho phép không nhiều nên bài giảng này chỉ tập
trung vào những vấn đề rất cơ bản của cơ cở lập trình trong kinh tế với 3 chương :
Chương 1 : Nghiên cứu tổng quan về cơ sở lập trình và giới thiệu sơ lược
một số dạng toán kinh tế cơ bản.
Chương 2 : Nghiên cứu về ngôn ngữ lập trình C từ cơ bản đến chuyên sâu.
Chương 3 : Tìm hiểu những bài toán kinh tế phổ biến và xây dựng chương
trình cho những bài toán dựa trên việc sử dụng ngôn ngữ lập trình C.
Đây là bài giảng phục vụ cho sinh viên ngành Hệ thống thông tin quản lý với
mục tiêu là hướng dẫn sinh viên nắm vững một ngôn ngữ lập trình cơ sở và cách

thức vận dụng nó để lập trình giải các bài toán kinh tế phổ biến nên mang tính chất
đặc thu riêng. Tuy nhiên, trong quá trình học tập sinh viên có thể tham khảo giáo
trình và bài giảng liên quan khác để xây dựng và giải quyết bài toán của mình một
cách tối ưu nhất.
Mặc dù các tác giả đã có nhiều cố gắng nhưng chắc chắn không tránh khỏi
những sai sót, những phần chưa được hoàn chỉnh trong bài giảng này. Chúng tôi rất
mong nhận được các ý kiến đóng góp của bạn đọc để chúng tôi có thể chỉnh sửa, bổ
sung giáo trình hoàn chỉnh phục vụ tốt hơn cho công tác giảng dạy, học tập của giáo
viên và sinh viên.
Thái Nguyên, tháng 02 năm 2012
Bộ môn Thương mại điện tử

4


Chương 1
GIỚI THIỆU CƠ SỞ LẬP TRÌNH TRONG KINH TẾ
1.1. Các khái niệm cơ bản
1.1.1. Ngôn ngữ máy
Ngôn ngữ máy (machine language hay machine code) là một loại ngôn ngữ
lập trình trong đó, mọi chỉ thị đều được biểu diễn bằng các con số nhị phân 0 và 1.
Đây là ngôn ngữ lập trình thế hệ đầu tiên. Tuy khó đọc và khó sử dụng, nhưng ngôn
ngữ máy là ngôn ngữ duy nhất mà bộ vi xử lí có thể nhận biết và thực hiện một cách
trực tiếp (tức không cần dịch sang bất kì ngôn ngữ nào khác). Lợi điểm chính của
các chương trình viết bằng ngôn ngữ máy là có thể được thực thi một cách nhanh
chóng (nhờ vi xử lí có thể xử lí các chỉ thị viết bằng ngôn ngữ máy một cách trực
tiếp), dù vậy, nó lại không độc lập nền (platform-independent) – tức khi đem qua
một máy có loại vi xử lí khác, chương trình có thể không thực thi được, do vi xử lí
khác loại có thể có các tập lệnh khác.
1.1.2. Ngôn ngữ lập trình

Ngôn ngữ lập trình (programming language) là một tập con của ngôn ngữ
máy tính. Đây là một dạng ngôn ngữ được chuẩn hóa (đối lập với ngôn ngữ tự
nhiên). Nó được dùng để miêu tả những quá trình, những ngữ cảnh một cách rất chi
tiết.
Định nghĩa (theo [Loud 94], T.3): Ngôn ngữ lập trình là một hệ thống được
ký hiệu hóa để miêu tả những tính toán (qua máy tính) trong một dạng mà cả con
người và máy đều có thể đọc và hiểu được.
Theo định nghĩa ở trên thì một ngôn ngữ lập trình phải thỏa mãn được hai
điều kiện cơ bản là:
1. Nó phải dễ hiểu và dễ sử dụng đối với người lập trình, để con người có thể
dùng nó giải quyết các bài toán khác.
2. Nó phải miêu tả một cách đầy đủ và rõ ràng các tiến trình (process), để có
thể chạy được trên các máy tính khác.
Một tập hợp các chỉ thị được biểu thị nhờ ngôn ngữ lập trình để thực hiện các
thao tác máy tính nào đó thông qua một chương trình. Các tên khác của khái niệm
này nếu không bị lầm lẫn là chương trình máy tính hay chương trình điện toán.
Lưu ý: Khái niệm chương trình (program) viết cho máy vi tính nhằm giải
quyết một vấn đế nào đó thường được gọi là phần mềm máy tính. (Thí dụ chương

5


trình MS Word là một cách gọi chung chung, chính xác hơn là phần mềm MS Word
thì rõ hơn đó là một chương trình ứng dụng.)
Chữ lập trình dùng để chỉ thao tác của con người nhằm kiến tạo nên các
chương trình máy tính thông qua các ngôn ngữ lập trình. Người ta còn gọi quá trình
lập trình đó là quá trình mã hoá thông tin tự nhiên thành ngôn ngữ máy. Trong các
trường hợp xác định thì chữ lập trình còn được viết là "viết mã" (cho chương trình
máy tính).
Như vậy, theo định nghĩa, mỗi ngôn ngữ lập trình cũng chính là một chương

trình, nhưng có thể được dùng để tạo nên các chương trình khác. Một chương trình
máy tính được viết bằng một ngôn ngữ lập trình thì những chỉ thị (của riêng ngôn
ngữ ấy) góp phần tạo nên chương trình được gọi là mã nguồn của chương trình ấy.
1.1.3. Chương trình
1.1.3.1. Khái niệm
Chương trình được xem như là một dãy các phát biểu (các lệnh) có thể thực
hiện được theo một thứ tự nhất định để đạt được mục đích. Việc lập thành một
chuỗi các lệnh được sắp xếp theo một trình tự xác định mô tả một lớp các quá trình
tính toán nào đó được gọi là lập trình.
1.1.3.2. Đặc trưng của chương trình
Một chương trình có thể được đánh giá theo ba đặc trưng sau
a. Tính cấu trúc của chương trình: cách viết và tổ chức các thành phần của
chương trình bao gồm:
+ Tính đơn thể: thường một chương trình được tổ chức thành nhiều đơn thể
(chương trình con – subroutine hay còn gọi là thủ tục hay hàm) và có liên kết với
nhau thông qua các lời gọi hàm.
+ Chương trình là một thể thống nhất: sự liên kết giữa các đơn thể bằng cơ
chế truyền tham số của các thủ tục, hàm trong chương trình.
+ Phong thái lập trình: cách lập trình phải rõ ràng, dễ đọc, ngắn gọn, súc tích
và nhất quán. Chương trình nguồn phải có các chú thích và có các hướng dẫn để
những người khác có thể sử dụng một cách dễ dàng.
b. Tính chức năng của chương trình: chỉ ra cách một chương trình đúng
đắn có thể thực hiện được những công việc đặt ra và mức độ dễ sử dụng chương
trình đó để giải quyết những bài toán tương tự hay thực hiện được trên nhiều máy
khác nhau. Đó là các tính chất:
+ Tính tin cậy: chương trình đúng đắn và thực hiện cho kết quả chính xác,

6



+ Tính phổ dụng: chương trình áp dụng được cho một lớp nhiều bài toán
tương tự có liên quan,
+ Tính tương thích: chương trình có thể dịch và thực hiện trên nhiều hệ máy
tính khác nhau.
c. Tính hiệu suất của chương trình: Một chương trình tốt có thể tương tác
với người sử dụng, với nhiều thiết bị khác, quản lý hiệu quả các tài nguyên của máy
tính (bộ nhớ, thời gian xử lý – bộ xử lý) và xử lý được các tình huống ngoại lệ khi
chương trình thực hiện. Tính hiệu quả của chương trình được thể hiện qua:
+ Thân thiện với người sử dụng: chương trình dễ sử dụng và thân thiện với
mọi người sử dụng,
+ Tính hiệu quả: chương trình sử hợp lý các tài nguyên của máy tính như bộ
nhớ, bộ xử lý (thời gian thực hiện) và các thiết bị ngoại vi, v.v.
+ Bố cục trong sáng, rõ ràng: chương trình có thể tự xử lý được các trương
hợp đặc biệt như các dữ liệu vào/ra không thích hợp hay những vấn đề tràn ô bộ
nhớ, v.v.
Thông thường, máy tính chỉ thực hiện được một nhóm các lệnh sơ cấp mà nó
“hiểu” được và tuân theo các lệnh đó không biết mệt mỏi và rất tin cậy.
1.1.3.3. Quá trình phát triển chương trình
Quá trình viết và thực hiện một chương trình truyền thống được thực hiện
theo qui trình sau:
+ Sử dụng một hệ soạn thảo (editor) như turbo C hay turbo pascal để viết
chương trình.
+ Dịch và gỡ lỗi cú pháp của chương trình,
+ Liên kết với các thư viện hay các mô đun chương trình khác
+ Thực hiện và kiểm thử chương trình: tìm lỗi ngữ nghĩa và lỗi thiết kế
chương trình.
+ Xây dựng các bộ dữ liệu mẫu và chạy kiểm nghiệm kết quả.
Quá trình này được mô tả như hình sau.

7



bài toán
thực tế

soạn thảo

chương trình
nguồn

dịch

chương trình mã
đích .obj

có lỗi
gỡ lỗi
có lỗi

có lỗi?

hết lỗi

chương trình
thực hiện .exe

có lỗi?

liên kết


hết lỗi

chương trình thư
viện

thực hiện bài
có lỗi

toán

có lỗi thưc

hết lỗi

hiện?

kết quả tính
toán

Hình 1-1 Các bước lập trình
1.2. Sơ lược về cơ sở lập trình trong kinh tế
1.2.1. Khái niệm
Cơ sở lập trình trong kinh tế là một môn học nghiên cứu và vận dụng những
công cụ lập trình cơ sở của công nghệ thông tin vào giải quyết các bài toán kinh tế.
Môn học này trang bị cho sinh viên những kiến thức cơ bản về kỹ thuật lập trình và
sử dụng ngôn ngữ lập trình đó để giải các bài toán kinh tế như: Bài toán trong kinh
tế, Bài toán tối ưu, bài toán phục vụ đám đông, Bài toán dự trữ,…
Từ khi máy tính điện tử ra đời đến nay, việc tính toán của con người đã thu
được những kết quả đáng kinh ngạc. Những thành tựu mà máy tính điện tử nói riêng
và ngành công nghệ thông tin và truyền thông nói chung đem lại đã làm thay đổi

diện mạo của toàn bộ đời sống kinh tế - xã hội và chính trị của tất cả các nước, các
khu vực trên toàn thế giới. Nhất là sự ảnh hưởng của nó đối với các hoạt động kinh
tế. Nhiều bài toán kinh tế thuộc các lĩnh vực tính toán phức tạp như: Toán Kinh tế,
mô hình tối ưu, lý thuyết hệ thống và điều khiển học ứng dụng trong kinh tế, lý
thuyết phục vụ đám đông… trước khi mày tính ra đời khó giải thậm chí là chưa thể
giải được thì nay với các các công cụ lập trình cơ sở như C/C++, Pascal, … đã xây

8


dựng và giải những bài toán này một cách nhanh chóng, chính xác góp phần to lớn
vào sự phát triển và cuộc sống kinh tế của con người.
Các bước nghiên cứu và ứng dụng lập trình cơ sở đối với các bài toán kinh tế
bao gồm:
a- Xác định vấn đề cần giải quyết, thu thập dữ liệu.
b- Áp dụng các mô hình toán học.
c- Xây dựng các thuật toán để giải bài toán đã mô hình hoá bằng ngôn ngữ
thuận lợi cho việc lập trình cho máy tính.
d- Tính toán thử và điều chỉnh mô hình nếu cần.
e- Áp dụng giải các bài toán thực tế.
1.2.2. Tìm hiểu một số bài toán kinh tế điển hình
1.2.2.1. Bài toán về lãi suất
Trong hoạt động kinh tế doanh nghiệp thì mảng kế toán - tài chính luôn được
quan tâm hàng đầu. Giả sử doanh nghiệp ABC trong khoảng thời gian t có một
khoản tiền nhàn rỗi là m và đem gửi ngân hàng với lãi suất là i%/năm. Tính xem
trong khoảng thời gian t đó doanh nghiệp thu được bao nhiêu lãi? Ngược lại, một
doanh nghiệp trong khoảng thời gian t’ có nhu cầu về vốn để đầu tư sản xuất kinh
doanh và doanh nghiệp đi vay ngân hàng với số tiền m’ và lãi suất là i%/năm. Tính
lãi mà doanh nghiệp phải trả cho ngân hàng?
Trên đây là một ví dụ cụ thể về bài toán lãi suất mà mỗi doanh nghiệp khi

thực hiện các kế hoạch sản xuất kinh doanh đều phải tính toán được. Tuy nhiên, với
mỗi dạng vay hay cho vay thì sẽ có tương ứng những cách tính lãi khác nhau. Các
cách tính lãi suất phổ biến hiện nay là:
a. Tính lãi đơn
Tính lãi đơn là cách tính lãi suất mà lãi thu được không được tính gộp vào
gốc cho kỳ tính lãi sau. Thông thường cách tính lãi này có kỳ hạn trả lãi và lãi suất
thường cao hơn các hình thức tính lãi khác.
b. Tính lãi kép
Tính lãi kép là cách tính lãi suất mà lãi suất thu được ở kỳ trước được tính
gộp với gốc để tính lãi tiếp cho kỳ tính lãi sau. Tính lãi kép thường có lãi suất thấp
hơn lãi đơn.
1.2.2.2. Bài toán về khấu hao tài sản
Khấu hao TSCĐ là một yếu tố chi phí trong giá thành sản phẩm của doanh
nghiệp nên việc lập kế hoạch khấu hao TSCĐ nằm trong nội dung của công tác lập
kế hoạch tài chính của doanh nghiệp và có ý nghĩa vô cùng quan trọng đối với

9


doanh nghiệp. Để hiểu rõ về bài toán khấu hao tài sản, chúng ta đi tìm hiểu một số
khái niệm cơ bản và các dạng khấu hao được áp dụng phố biến hiện nay.
Nguyên giá tài sản cố định hữu hình: là toàn bộ các chi phí mà doanh nghiệp
phải bỏ ra để có tài sản cố định tính đến thời điểm đưa tài sản đó vào trạng thái sẵn
sàng sử dụng.
Khấu hao tài sản cố định: là việc tính toán và phân bổ một cách có hệ thống
nguyên giá của tài sản cố định vào chi phí sản xuất, kinh doanh trong thời gian sử
dụng của tài sản cố định.
Một số dạng khấu hao:
- Phương pháp khấu hao tuyến tính cố định
Phương pháp khấu hao này có ưu điểm là việc tính toán đơn giản, tổng mức

khấu hao của TSCĐ được phân bổ đều đặn trong các năm sử dụng TSCĐ và không
gây ra sự đột biến trong giá thành sản phẩm hàng năm. Nhưng phương pháp này có
nhược điểm là trong nhiều trường hợp không thu hồi vốn kịp thời do không tính hết
được sự hao mòn vô hình của TSCĐ.
Trong thực tế, để tính khấu hao cho toàn bộ TSCĐ của doanh nghiệp, người
ta thường xác định tỷ lệ khấu hao tổng hợp bình quân chung. Có nhiều cách xác
định tỷ lệ khấu hao tổng hợp bình quân của doanh nghiệp nhưng cách xác định
thông dụng nhất là theo phương pháp bình quân gia quyền
- Phương pháp khấu hao nhanh
Để thu hồi vốn nhanh, người ta có thể áp dụng các phương pháp khấu hao
nhanh trong quá trình tính toán.
Hai phương pháp khấu hao nhanh thường được sử dụng là phương pháp khấu
hao theo số dư giảm dần và phương pháp khấu hao theo tổng số các năm, gọi tắt là
phương pháp khấu hao theo tổng số
1.2.2.1. Bài toán quy hoạch tuyến tính
Có thể tạm định nghĩa quy hoạch tuyến tính là lĩnh vực toán học nghiên cứu
các bài toán tối ưu mà hàm mục tiêu (vấn đề được quan tâm) và các ràng buộc (điều
kiện của bài toán) đều là hàm và các phương trình hoặc bất phương trình tuyến tính.
Hiện nay, với sự phát triển không ngừng khoa học công nghệ, với lợi ích và
mức độ ứng dụng của dạng toán quy hoạch tuyến tính hiện nay là rất rộng. Sự hiện

10


diện của các mô hình quy hoạch tuyến tính ở khắp nơi, bao trùm nhiều ngành khoa
học khác. Toán học ứng dụng coi quy hoạch tuyến tính là một ngành quan trọng
nhất và ngành càng có nhiều cống hiến cho xã hội. Trong kinh tế quy hoạch tuyến
tính lại có vị trí hết sức quan trọng đối với các bài toán về lập kế hoạch sản xuât,
các bài toán về cung cầu với hàm mục tiêu là cực đại lợi ích và cực tiểu nguồn lực.
Không chỉ dừng ở đó, quy hoạch tuyến tính còn được sử dụng để nghiên cứu một

loạt các ngành khoa học khác như: Điện tử viễn thông, Môi trường, Vật lý…
Đối với mỗi bài toán quy hoạch tuyến bao gồm hai thành phần chính:
1. Hàm mục tiêu: Hàm mục tiêu là vấn đề mà chúng ta cần nghiên cứu. Hàm
mục tiêu Max/min.
2. Các ràng buộc: Các ràng buộc là những điều kiện mà phương án chúng ta
cần tìm phải thỏa mãn.
3. Phương án tối ưu: là nghiệm của bài toán quy hoạch tuyến tính. Nghiệm
này có dạng một vector với những thành phần là các nhân tố có trong mô hình.
Một số bài toán về quy hoạch tuyến tinh:
- Bài toán lập kế hoạch sản xuất.
- Bài toán về vận tải
- Bài toán vốn đầu tư
1.2.3. Bài toán phục vụ đám đông
1.2.3.1. Mô tả hệ thống
Chúng ta có thể mô tả hệ thống phục vụ đám đông bằng phương pháp "hộp
đen" hoặc phương pháp “hộp trắng”. Sau đây ta mô tả hệ thống phục vụ đám đông
bằng phương pháp “hộp đen” như sau:
Dòng vào
********

Hàng chờ
********

Các kênh phục
vụ và nguyên
tắc phục vụ

Dòng ra (đã được phục vụ)
********
Các yêu cầu không thảo mãn


Các yêu cầu phục vụ

Hình 1.2. Mô hình phục vụ đám đông

11


1.2.3.2. Các yếu tố của hệ thống phục vụ
Một hệ thống phục vụ, dù ở qui mô nào, tính chất hoạt động ra sao, đều được
đặc trưng bởi các yếu tố chủ yếu sau:
a. Dòng vào.
Dòng vào là dòng các yêu cầu đến hệ thống phục vụ, đòi hỏi được thoả mãn
một yêu cầu nào đó:
Ví dụ: Khách hàng đến một cửa hàng siêu thị để mua hàng, các đơn vị quân
đội chờ qua phà để vượt sông, các khí tài chờ để được sửa chữa, bảo dưỡng v.v.
- Tại các thời điểm khác nhau, các yêu cầu đến hệ thống phục vụ là ngẫu
nhiên nên các dòng yêu cầu là những đại lượng ngẫu nhiên, tuân theo luật phân bố
xác suất nào đó, do vậy nó có nhiều loại dòng vào. Trong khuôn khổ môn học này
chúng ta chỉ xét hai loại dòng yêu cầu quan trọng, thường gặp nhất ở mọi hệ thống
phục vụ, đó là: Dòng vào tiền định và Dòng vào Poát xông.
b. Hàng chờ
Hàng chờ là tập hợp các yêu cầu sắp xếp theo nguyên tắc nào đó để chờ được
vào phục vụ trong hệ thống.
c. Kênh phục vụ
Kênh phục vụ là toàn bộ thiết bị kỹ thuật, con người hoặc một tổ hợp gồm
các thiết bị kỹ Thuật cùng công nghệ tương ứng mà hệ thống sử dụng để phục vụ
yêu cầu khách hàng.
Đặc trưng quan trọng nhất là của kênh phục vụ là thời gian phục vụ. Đó là
thời gian mỗi Kênh phải tiêu phí để phục vụ một yêu cầu. Thời gian phục vụ là một

đại lượng ngẫu nhiên tuân theo một quy luật xác suất nào đó. Các dòng yêu cầu
được phục vụ trong kênh phục vụ gọi là "dòng phục vụ".
Khi dòng yêu cầu được phục vụ trên các kênh phục vụ (dòng phục vụ) là tối
giản thì khoảng thời gian giữa các lần xuất hiện liên tiếp các yêu cầu là một đại
lượng ngẫu nhiên tuân theo luật chỉ số, nghĩa là đại lượng ngẫu nhiên có phân bố
xác suất dạng:
1.2.4. Bài toán dự trữ
1.2.4.1. Các định nghĩa
1. Hàng hoá: Hàng hoá là đối tượng vật chất được sử dụng, dự trữ cho hoạt
động của hệ thống kinh tế - xã hội nào đó.

12


2. Nhu cầu: Nhu cầu là khối lượng hàng hoá cần thiết sẽ được hệ thống tiêu
thụ trong một khoảng thời gian T (giả thiết T=1 đơn vị). Nhu cầu thông thường là
một biến ngẫu nhiên nên nó tuân theo qui luật phân phối xác suất nào đó.
3. Cung cấp: Cung cấp là khả năng đáp ứng hàng hoá cho quá trình dự trữ và
tiêu thụ của hệ thống. Trong các trường hợp cụ thể, cách thức cung cấp có thể khác
nhau: Cung cấp theo từng đợt tập trung cường độ lớn, cung cấp đều đặn trong các
khoảng thời gian v.v....
4. Thời gian đặt hàng: Thời gian đặt hàng là khoảng thời gian từ khi bắt đầu
đặt hàng đến khi hàng bắt đầu được dự trữ và tiêu thụ. Khoảng thời gian này cũng là
một đại lượng ngẫu nhiên, do vậy sẽ tuân theo luật phân phối xác suất nào đó.
5. Chu kỳ dự trữ - tiêu thụ: Chu kỳ dự trữ - tiêu thụ là khoảng thời gian dự
trữ và tiêu thụ khối lượng hàng của một lần đặt mua.
6. Điểm đặt hàng: Điểm đặt hàng là mốc mà lượng hàng dự trữ còn nhưng
cần bắt đầu đặt hàng cho chu kỳ “dự trữ - tiêu thụ” sau đó.
7. Các loại chi phí.
a. Chi phí mua hàng: Chi phí mua hàng là chi phí trực tiếp cho một đơn vị

hàng về đến kho ( bao gồm: giá hàng, chi phí vận chuyển, bốc xếp lên xuống..) chi
phí mua hàng còn gọi là giá hàng.
b. Chi phí đặt hàng: Chi phí đặt hàng là chi phí cố định cho một lần đặt hàng,
bao gồm chi phí giao dịch, chi phí cho các nghiệp vụ khác.
c. Chi phí dự trữ (Chi phí kho) Chi phí dự trữ là chi phí cho việc bảo quản
một đơn vị hang hoá trong một đơn vị thời gian. Chi phí dự trữ tỷ lệ với giá hàng
qua một hệ số gọi là hệ số chi phí dự trữ (hay còn gọi là hệ số bảo quản).
d. Chi phí do không đảm bảo nhu cầu: Chi phí do không đảm bảo nhu cầu là
chi phí phải chịu thiệt thòi khi thiếu một đơn vị hàng hoá trong một đơn vị thời ian.
e. Chi phí do dư thừa hàng: Chi phí do dư thừa hàng (dư thừa so với nhu cầu
thực tế) là chi phí phát sinh khi chúng ta dự trữ quá mức cần thiết. Chẳng hạn, tổn
thất do ứ đọng vốn, do hang quá thời gian sử dụng, do hàng giảm chất lượng v.v..
1.2.4.2. Các lớp mô hình quản lý dự trữ
Có 2 lớp mô hình quản lý dự trữ chủ yếu sau:
- Lớp mô hình quản lý dự trữ với các yếu tố phi ngẫu nhiên.
- Lớp mô hình quản lý dự trữ với các yếu tố ngẫu nhiên.
Trong hầu hết các hoạt động kinh tế - xã hội người ta phải giải quyết bài toán
dự trữ, thực chất là bài toán lựa chọn phương án dự trữ các nguồn lực sao cho chi
phí ít tốn kém nhất. Trong phần này chúng ta xét một lớp bài toán cụ thể giải quyết

13


các mối quan hệ kinh tế trong quá trình sự trữ. Việc thể hiện bài toán dưới dạng mô
hình cho phép mở rộng khả năng ứng dụng trong những tình huống tương tự, hoặc
khi có thể quy vấn đề cần giải quyết về dạng bài toán dự trữ.
Mô hình điều khiểu dữ trữ như tên gọi ban đầu của mô hình này, xuất phát từ
bài toán quản lý một hệ thống kho. Tuy nhiên trong thực tế, mô hình này không chỉ
được sử dụng để phân tích, điều khiển dự trự mà còn được dùng như một công cụ
mô hình hóa nhiều vấn đề trong các lĩnh vực quản lý sản xuất, kinh doanh dịch vụ.

Các đối tượng được mô hình hóa cũng theo đó mà ngày càng phức tạp hơn. Với một
số mô hình được giới thiệu sau đây chúng ta sẽ lần lượt nghiên cứu từ các mô hình
đơn giản. Với các yếu tố tất định, diễn biến đều đặn đến các mô hình trong đó các
yếu tố có tính ngẫu nhiên. Mặt khác, ta sẽ nghiên cứu từ các mô hình thuần túy dự
trữ đến các mô hình sản xuất kinh doanh.

14


Chương 2
CƠ SỞ LẬP TRÌNH NGÔN NGỮ C
2.1. Giới thiệu về ngôn ngữ C
2.1.1. Lịch sử hình thành và phát triển ngôn ngữ C
Ngôn ngữ C do Brian W. Kemighan và Dennis M. Ritchie phát triển vào đầu
những năm 70 tại phòng thí nghiệm Bell (thuộc công ty viễn thông T &T của hoa
kỳ) với mục đích ban đầu để phát triển hệ điều hành Unix. Song nhờ tính ưu việt và
mền dẻo nên nó đã được giới tin học nhanh chóng chấp nhận như là một ngôn ngữ
chính thống nhà nghề.
Đến năm 1978, bản in đầu tiên về ngôn ngữ C đã được in thành sách “The
Programming Language” do Kernighan và Richie viết. C cũng mau chóng được
Viện tiêu chuẩn hoá của Mỹ (ANSI: American National Standard Institute) làm
thành tiêu chuẩn với tên gọi “ANSI C” vào năm 1983. Tổ chức tiêu chuẩn quốc tế
ISO (International Standard Ogranization) cũng xây dựng chuẩn cho C.
Phần lớn các ý tưởng quan trọng nhất của C xuất phát từ một ngôn ngữ cũ
hơn có tên là BCPL do Martin Richards nghiên cứu ảnh hưởng của BCPL lên C
gián tiếp thông qua ngôn ngữ BCPL, do Ken Thompson viết năm 1970 cho hệ Unix
chạy trên họ máy tính PDP-7.
Ngoài việc C được dùng để viết hệ điều hành Unix (hiện nay trên 90%
chương trình nguồn của các hệ điều hành Unix (được viết bằng c, chưa đầy 10%
bằng hợp ngữ), người ta nhanh chóng nhận ra sức mạnh của C trong việc xử lý các

vấn đề hiện đại của tin học: xử lý số, văn bản, cơ sở dữ liệu, lập trình hướng đối
tượng. Thực tế C đã tổ hợp được các thành tựu tiên tiến của tin học và đã trở thành
một chuẩn mặc nhiên.
Liên quan đến sự hình thành và phát triển của ngôn ngữ, có một số sự kiện
đáng quan tâm sau:
Năm l978, cuốn giáo trình dạy lập trình bằng ngôn ngữ C với tên “The C
Programming Language” do chính hai tác giả của ngôn ngữ Brian W. Kemighan và
Dennis M. Ritchie biên soạn đã được xuất bản và được phổ biến rộng rãi.
Năm 1983 một tiểu ban của Viện tiêu chuẩn quốc gia Mỹ (ANSI) được thành
lập nhằm đề xuất ra một chuẩn cho ngôn ngữ.

15


Năm l988 chuẩn ANSI C chính thức được ban hành. Chuẩn này bao gồm các
mô tả về ngôn ngữ và quy định các thư viện chuẩn của ngôn ngữ C, nhờ đó tăng
tính khả chuyển của chương trình viết bằng C.
Trong thế giới PC, có các hệ chương trình dịch C nổi tiếng như là:
Turbo c, Borland C của Borland inc.
MSC, VC của Microsoft Corp.
Lattice C của Lattice
Sự phát triển của ngôn ngữ lập trình trong những năm 80 đã đưa đến phong
cách lập trình hướng đối tượng mà một trong những ngôn ngữ rất được ưa dùng là
C++, bổ sung mới các yếu tố hướng đối tượng vào ngôn ngữ C.
2.1.2. Các tính chất đặc trưng của ngôn ngữ C
2.1.2.1. Các tính chất đặc trưng của ngôn ngữ C
C là ngôn ngữ lập trình vạn năng được dùng để viết các hệ điều hành như
Unix cũng như các chương trình ứng dụng như qlvb (quản lý văn bản), csdl (cơ sở
dữ liệu), v . ...
C là ngôn ngữ có mức độ thích nghi cao. Do các kiểu dữ liệu và cấu trúc điều

khiển của C có hầu hết trên các máy tính nên thư viện lúc chạy cần để cài đặt chương
trình là khá gọn. Hơn nữa vì ngôn ngữ phản ánh khả năng của máy tính hiện đại nên
chương trình C tỏ ra là đủ hữu hiệu, tức là không nhất thiết phải cần tới hợp ngữ.
Mặc dù vậy C vẫn độc lập với bất kỳ kiến trúc máy đặc thù nào và với một
chút thận trọng vẫn dễ dàng viết các chương trình khả chuyển (portability) tức là
những chương trình có thể chạy mà không cần phải thay đổi gì khi có thay đổi về
phần cứng.
Ưu điểm
C là ngôn ngữ mạnh và mềm dẻo
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 sản xuất phần mềm hệ thống (hệ điều hành, chương trình dịch, soạn thảo văn
bản, cơ sở dữ liệu , bảng tính ...). một trong các lý do này là tính hiệu quả của
chương trình được dịch ra. một chương trình C khi dịch ra có thể đạt tới 80% tính
năng của chương trình đó viết bằng mã máy. Có khá nhiều thư viện và chương
trình tiện ích khác cho C có thể khai thác được..
C là ngôn ngữ có thể chuyển dịch được hay còn gọi là dẽ thích nghi. Tính
thích nghi hay tính di chuyển được hiểu là chương trình viết bằng C cho máy ibm

16


có thể chạy trên máy vax của công ty digital cho dịch lại vẫn chạy được ngay sau
khi có một vài chỉnh sửa nhỏ.
C là ngôn ngữ có ít từ khoá, là các từ dùng riêng cho ngôn ngữ khi viết
chương trình.
C là ngôn ngữ có cấu trúc Modul, đó chính là việc sử dụng các chương trình
con loại hàm (Function). Các hàm này có thể sử dụng nhiều lần trong chương trình
hay trong chương trình khác.
Nhược điểm
Cú pháp của ngôn ngữ C thuộc loại lạ và khó học.

Một số ký hiệu của C có nhiều nghĩa khác nhau. Thí dụ ký hiệu * là toán tử
nhân, là toán tử không định hướng, là toán tử thay thế ... Việc sử dụng các ký hiệu
này phụ thuộc vào ngữ cảnh sử dụng.
2.1.2.2. Cấu trúc cơ bản của một chương trình trong C
Hãy xem các thành phần của chương trình xinchao.c sau đây chương trình
hiện lên dòng “chao cac ban!” trên màn hình:
/*xinchao.c*/
#include<stdio.h>
#include<conio.h>
void main(){
printf("chao cac ban SV nganh HTTTKT!\n");
getch();
}
Thực hiện chương trình
Các bước để thực hiện chương trình này như sau: trước tiên bạn phải tạo ra
chương trình nguồn có tên xinchao.c trên một hệ soạn thảo nào đó; bước tiếp theo
là dịch chương trình để tạo ra một file chương trình ( xinchao.exe); sau bước thứ
hai nếu không có lỗi biên dịch, bạn đã có thể thực hiện được chương trình từ dấu
nhắc của hệ điều hành.
Định nghĩa hàm
Một chương trình C, với bất kỳ kích thước nào cũng đều bao gồm một hay
nhiều hàm, các hàm này sẽ xác định các thao tác tính toán thực tế cần phải thực
hiện. Các hàm của C cũng tương tự như các hàm và thủ tục của chương trình viết
bằng Pascal. Trong chương trình ví dụ trên, main() là một hàm như vậy. Thông

17


thường chúng ta có thể lấy bất kỳ tên nào để đặt cho hàm, nhưng main() là một hàm
đặc biệt - chương trình C luôn luôn bắt đầu thực hiện tại điểm đầu của hàm này.

Điều này có nghĩa mọi chương trình trong C đều phải có một (và chỉ một) hàm
main() ở đâu đó trong chương trình. Hàm main() này thường gọi tới các hàm khác
để thực hiện công việc của nó, một số hàm nằm trong chương trình, số khác nằm
trong các thư viện của các hàm chuẩn.
Khai báo File tiêu đề
Khi sử dụng các hàm trong các thư viện chuẩn, chúng ta phải khai báo file
tiêu đề (header file) chứa hàm nguyên mẫu tương ứng của hàm đó, câu lệnh được
bắt đầu bằng #include theo sau là tên header file. Trong ví dụ trên, chúng ta có sử
dụng hàm printf() là hàm chuẩn được khai báo trong file stdio.h và hàm getch()
được khai báo trong conio.h do đó trong chương trình có hai dòng sau ở trên đầu
# include <stdio.h>
#include <conio.h>
Dòng chú thích
Dòng chú thích giải thích mục đích của chương trình. Mọi ký tự nằm giữa /*
và */ đều được chương trình dịch bỏ qua; ta được phép dùng chúng để làm cho
chương trình dễ hiểu. Lời chú thích có thể xuất hiện ở bất kỳ đâu trong chương
trình, chứa được tất cả các ký tự và có thể trải dài trên nhiều dòng khác nhau.
Dấu kết thúc câu lệnh
Trong chương trình mỗi câu lệnh được kết thúc bằng dấu chấm phẩy (;). Ví dụ:
printf (“ xin chao cac ban\n “) ;
Mô hình tổng thể của một chương trình trong C

18


lời gọi các thư viện chương trình
# include
# define
Khai báo tên các hàm với các tham số: function


Khai báo các biến ngoài:

Định nghĩa kiểu dữ liệu : typedeft

phần mô tả của các hàm thành phần
function{
khai báo các biến, hằng
sử dụng các hàm khác
}

2.2.3 Các bước cơ bản khi viết một chương trình
Bước 1: Bước thảo chương
Dùng các hệ soạn thảo văn bản (text editor) để viết chương trình. Có thể
dùng bất cứ một hệ soạn thảo văn bản nào để soạn thảo, song mỗi ngôn ngữ đều có
một hệ soạn thảo riêng của mình, điều đó rất thuận lợi, nó giúp người lập trình sửa
lỗi cập nhật một cách dễ dàng. Sau khi soạn thảo xong thì cất chương trình lên đĩa.
Các file chương trình của C hay C++ có dạng *.cpp.
Bước 2: Dịch chương trình
Gọi chương trình dịch C. Chương trình dịch có nhiệm vụ dịch chương trình
viết bằng C của người lập trình sang mã máy với 2 giai đoạn: dich ra file obj và liên
kết các file obj lại với nhau qua chương trình liên kết linker. Kết quả dịch được
chứa trong các file *.com, *.exe, *.obj. Giai đoạn này cho phép ta phát hiện các lỗi
về cú pháp khi viết chương trình. Nếu có lỗi, chương trình dịch sẽ báo lỗi. Ta phải
quay về bước 1, dùng Editor để sửa.
Bước 3: Cho chạy chương trình và thử

19


Nếu các kết quả nhận được là sai thì ta phải tự tìm lỗi vì đây là lỗi logic, lỗi

về thuật toán giải, máy tính không thể phát hiện được các lỗi này như là các lỗi cú
pháp của chương trình.
Chương trình dịch có 2 kiểu:
Biên dịch (compiler)
Thông dịch (interpreter)
Biên dịch nghĩa là dịch toàn bộ chương trình đã được viết sẵn theo một ngôn
ngữ nào đó.
Thông dịch sẽ dịch và thực hiện ngay lập tức từng dòng lệnh trong quá trình
lập trình.
Có thể so sánh chương trình biên dịch như là người dịch sách, còn chương
trình thông dịch ví như người phiên dịch hay thông ngôn. C, Pascal là loại ngôn ngữ
được dịch theo kiểu biên dịch.
Ghi nhớ:
Các chú thích bắt đầu bằng /* và kết thúc bởi */. Người lập trình có thể chèn
các chú thêm vào bất kì chỗ nào có thể đặt dấu phân cách trong chương trình. Các
chú thích đưa chương trình dịch bỏ qua. Việc thêm các chú thích làm cho chương
trình dễ đọc hơn...
Chỉ thị tiền xử lý # include <stdio.h> báo cho chương trình dịch kết hợp file
tiêu đề chứa các khai báo của các hàm vào ra chuẩn trong chương trình.
Chương trình C bao gồm một hoặc nhiều hàm, trong số đó nhất định phải có
một và chỉ một hàm main(). Mọi chương trình C bắt đầu được thực hiện tại điểm
bắt đầu của hàm main().
2.2. Những khái niệm và nguyên lý cơ bản của lập trình
2.2.1. Hệ thống ký hiệu và từ khoá
2.2.1.1. Bộ ký tự
Mọi ngôn ngữ lập trình đều được xây dựng từ một bộ ký tự nào đó. Các ký tự
được nhóm lại theo nhiều cách khác nhau để lập nên các từ. Đến lượt mình, các từ
lại được liên kết theo một qui tắc (đó là cú pháp của ngôn ngữ lập trình) nào đó để
tạo thành các câu lệnh. Một chương trình bao gồm nhiều câu lệnh diễn đạt một thuật
toán nào đó. Ngôn ngữ lập trình C được xây dựng trên bộ ký tự sau:

 Các chữ cái hoa : a.. z
 Các chữ cái thường: a .. z

20


 Các chữ số : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
 Các dấu chấm câu: , . ; : / ? [ ] { } ! @ # $ & * ( ) + - = < > ‘
 Các dấu ngăn cách không nhìn thấy như dấu cách, dấu nhảy
cách (tab), dấu xuống dòng (return).
 Dấu nối dưới
Không được dùng các ký hiệu khác cũng như là các chữ cái Tiếng Việt trong
khi viết các câu lệnh, tuy nhiên ta vẫn có thể dùng nó trong các lời giải thích, trong
các câu thuyết minh, trong các câu hiển thị văn bản lên màn hình hay lên máy in.
2.2.1.2. Các từ khoá
Cũng như các ngôn ngữ khác, ngôn ngữ C cũng có các từ khoá riêng của
mình, các từ khoá là các từ dành riêng của C và mỗi từ có một tác dụng, ý nghĩa cụ
thể, chúng không được định nghĩa lại. Trong C có nhiều từ khoá, dưới đây là một số
từ khoá thông dụng:
auto
defaul

break

case

char

continue


do

doubleelse

extern

float

for

goto
return

if

int

long

register

sizeof

static

struct

switch

union


unsigned

void

volatile

while

_cs

_ds

_es

_ss

_ah
_bx

_al

_ax

_bh

_bl

_ch
_dx


_cl

_cx

_dh

_dl

_bp

_di

_si

_sp

short
typedef

2.2.1.3. Tên và cách đặt tên
Tên (định danh) được dùng rất nhiều trong chương trình như tên hằng (hằng
số, hằng ký tự ... ), tên biến, tên chương trình, tên hàm, ... mọi tên trước khi sử dụng
đều phải khai báo.

21


Các ký tự dùng để đặt tên bao gồm: các chữ cái hoa A .. Z, các chữ cái
thường a .. z, chữ số 0 .. 9 và dấu nối dưới tên là một dãy các ký tự liền nhau, độ dài

không hạn chế (tuy nhiên tên không nên đặt quá dài), phải được bắt đầu bằng chữ
cái hoặc dấu nối dưới, không được chứa các ký tự đặc biệt như dấu cách, dấu chấm
câu, ...
Ngôn ngữ C phân biệt giữa chữ hoa và chữ thường. Các tên abc, ABC, Abc,
aBc, abC là khác nhau. Theo thói quen người ta thường dùng chữ hoa đặt tên cho các
hằng, còn chữ thường được dùng để đặt tên cho các biến, các hàm, các cấu trúc v.v. . .
Tên phải phản ánh được bản chất của đối tượng được đặt tên.
2.2.1.4. Cách ghi lời giải thích
Mỗi khi viết chương trình, bạn nên viết thêm lời giải thích cho chương trình
thêm sáng sủa và dễ hiểu. Lời giải thích không có tác dụng tạo ra mã chương tình,
nó chỉ đơn giản là lời thuyết minh cho chương trình thêm dễ hiểu. Phần văn bản
nằm giữa hai cặp dấu /* và */ chính là phần thuyết minh. Trong C++ lời giải thích
trên một dòng còn được viết sau cặp dấu //.
Sự khác nhau giữa cặp dấu /* , */ và //: trong trường hợp thứ nhất các lời
giải thích có thể nằm trên nhiều dòng, còn trong trường hợp thứ hai thì lời giải thích
chỉ là phần nằm sau dấu // và trên một dòng.
2.2.1.5. Câu lệnh và dấu chấm câu
Mỗi câu lệnh trong chương trình được kết thúc bằng dấu chấm phẩy “;”. Dấu
“;” được dùng để ngăn cách giữa các câu lệnh và bắt buộc phải viết vào, nếu không
máy sẽ báo lỗi khi dịch.
2.2.2. Khái niệm biến, hằng, biểu thức, câu lệnh
2.2.2.1. Biến
a. Khai báo
Mọi biến cần khai báo trước khi sử dụng. Việc khai báo biến được thực hiện
theo mẫu sau :
Type tên biến ;
Ví dụ :
Main()
{
int a,b,c ;


22


long ad,bd,cd;
char beta,alfa;
float x,y;
double xd,yd;
}
Biến kiểu int chỉ nhận được các giá trị kiểu int. Các biến khác cũng có ý
nghĩa tương tự, chẳng hạn biến kiểu char chỉ chứa được một ký tự. Để lưu trữ một
xâu ký tự cần sử dụng một mảng kiểu char.
b. Vị trí của các khai báo. Các khai báo cần đặt ngay sau dấu { đầu tiên của
thân hàm và cần đứng trước mọi câu lệnh khác. Như vậy, sau một câu lệnh gán
chẳng hạn thì không được khai báo nữa.
c. Việc khởi đầu cho các biến. Nếu trong khai báo, ngay sau tên biến ta đặt
dấu = và một giá trị nào đó thì đây chính là cách vừa khai báo vừa khởi đầu cho một
biến sử dụng cho chương trình.
Ví dụ:
int a,b = 1,c,d=2;
float e = -12.3, x = 15.5, y,z=30.0;
Ta cũng có thể khởi đầu cho các biến bằng toán tử gán. Vậy để đạt được ý
định như ví dụ trên ta có thể dùng các lệnh:
int a,b,c,d;
float e,x,y,z,t;
a=1 ; b=3 ; c=4 ;d=5 ;e=3.2 ;x=-3.6 ; y=45.6 ; z=-123.0 ; t=100.12 ;
d. Lấy địa chỉ của biến. Mỗi biến được cấp phát một vùng nhớ gồm một số
byte liên tiếp. Số liệu của byte đầu chính là địa chỉ của biến. Địa chỉ biến dùng
trong một số hàm như hàm scanf. Để nhận địa chỉ biến ta dùng phép toán :
&tên biến

2.2.2.2. Hằng
Hằng là các đại lượng mà giá trị của nó không thay đổi trong quá trình tính
toán. Dưới đây trình bày các loại hằng được sử dụng trong C :
a. Hằng dấu phẩy động (float và double) được viết theo hai cách
Cách 1: (dạng thập phân) : Số gồm phần nguyên, dấu chấm thập phân và
phần phân. Ví dụ : 123.45
-12345.67
1234.0

23


Chú ý: Phần nguyên hay phần phân có thể vắng mặt nhưng dấu chấm không
thể thiếu. Ví dụ: .34 hay 12.
Cách 2 (dạng khoa học hay dạng mũ) : Số được tách thành 2 phần là định trị
và phần bậc. Phần định trị là một số nguyên hoặc số thực dạng thập phân, phần bậc
là một số nguyên. Hai phần này cách nhau bởi ký tự e hoặc E. Ví dụ :
123.46E-4: Biểu diễn giá trị 0.012346
0.12E3: Biểu diễn giá trị 120.0
-12.5e-3: Biểu diễn giá trị -0.125
1E8: Biểu diễn giá trị 100000000.0
b. Hằng int: Là số nguyên có giá trị trong khoảng từ -32768 đến 32767.
Ví dụ :
-45

1234

Chú ý : phân biệt 123 và 123.0 : Số 123 là hằng nguyên còn 123.0 là hằng
thực (dấu phẩy động)
c. Hằng long được biết theo hai cách:

-4893L hoặc -4893l
(thêm L hoặc l vào đuôi). Một số số nguyên vượt ra ngoài miền xác định của
int cũng được xem là hằng long. Ví dụ : 453946L và 4563946 là hai hằng long có
cùng giá trị.
d. Hằng int hệ 8 được viết theo cách:
0c1c2c3….
Ở đây ci là một số nguyên trong khoảng từ 0 đến 7. Hằng nguyên hệ 8 luôn
luôn nhận giá trị dương. Ví dụ :
0345 là một hằng nguyên hệ 8. Giá trị của nó trong hệ 10 là
3*8*8 + 4*8 + 5 =229
e. Hằng nguyên hệ 16. Trong hệ này sử dụng 16 ký tự: 0,1,2,3,4,…,15. Để
tránh nhầm lẫn giữa chữ số 11 và hai số 1 người ta dùng quy ước sau:
Cách viết

Ý nghĩa

A hoặc a

10

B hoặc b

11

C hoặc c

12

24



D hoặc d

13

E hoặc e

14

F hoặc f

15

Hằng số hệ 16 có dạng : 0xc1c2c3… hoặc 0Xc1c2c3… trong đó ci là một
chữ số hệ 16. Ví dụ : 0xa9, 0Xa9, 0XA9 là 4 hằng số hệ 16 như nhau. Giá trị của
chúng trong hệ 10 là :
10*16+9=169 ;
f. Hằng ký tự là một ký tự riêng biệt được viết trong 2 dấu nháy đơn, ví dụ
‘a’. Giá trị của ‘a’ chính là mã ASCII của chữ a. Như vậy, giá trị của ‘a’ là 97 (xem
bảng mã ASCII). Hằng ký tự có thể tham gia vào các phép toán như mọi số nguyên
khác. Ví dụ
‘9’-‘0’=57-48=9
Hằng ký tự còn có thể được viết theo cách
‘\1c2c3’
Trong đó, c1c2c3 là một số hệ 8 mà giá trị của nó bằng mã ASCII của ký tự
cần biểu diễn. Ví dụ : chữ a có hệ 10 là 97 đổi hệ 8 là 0141. Vậy hằng ký tự ‘a’ có
thể viết dưới dụng’\144’. Đối với một vài hằng ký tự đặc biệt ta cần sử dụng cách
viết sau (thêm dấu \) :
Cách viết


Ký tự

‘\’’



‘\’’’

’’

‘\\’

\

‘\n’

Chuyển dòng

‘\0’

(Null)

‘\t’

Tab

‘\b’

Backspace


‘\r’

CR (về đầu dòng)

‘\f’

LF (sang trang)

25


×