Bài giảng Tin học đại cương
BUỔI 1.
PHẦN 1. TIN HỌC CĂN BẢN
(16 tiết Lý thuyết, 4 tiết Bài tập, 6 tiết Thực hành)
I.1. Thông tin và biểu diễn thông tin (5T lý thuyết)
I.1.1. Các khái niệm cơ bản về thông tin và tin học (1T lý thuyết)
I.1.1.1. Thông tin và xử lý thông tin
a. Thông tin - Dữ liệu – Tri thức
Thông tin- Information
Khái niệm thông tin (information) được sử dụng thường ngày.Thông tin mang lại cho con người
sự hiểu biết, nhận thức tốt hơn về những đối tượng trong đời sống xã hội, trong thiên nhiên,.
giúp cho họ thực hiện hợp lý công việc cần làm để đạt tới mục đích một cách tốt nhất.
Người ta quan niệm rằng, thông tin là kết quả xử lý, điều khiển và tổ chức dữ liệu theo cách mà
nó sẽ bổ sung thêm tri thức cho người nhận. Nói một cách khác, thông tin là ngữ cảnh trong đó
dữ liệu được xem xét
Dữ liệu - Data
Dữ liệu (data) là biểu diễn của thông tin được thể hiện bằng các tín hiệu vật lý. Thông tin chứa
đựng ý nghĩa còn dữ liệu là các sự kiện không có cấu trúc và không có ý nghĩa nếu chúng không
được tổ chức và xử lý.
Dữ liệu trong thực tế có thể là:
Các số liệu thường được mô tả bằng số như trong các bảng biểu
Các ký hiệu qui ước, ví dụ chữ viết
Các tín hiệu vật lý ví dụ như ánh sáng, âm thanh, nhiệt độ, áp suất,
Theo quan niệm chung của những người làm công nghệ thông tin thì thông tin là những hiểu biết
của chúng ta về một lĩnh vực nào đấy, còn dữ liệu là thông tin được biểu diễn và xử lý trong
máy tính.
Tri thức – Knowledge
Tri thức theo nghĩa thường là thông tin ở mức trừu tượng hơn. Tri thức khá đa dạng, nó có thể là
sự kiện, là thông tin và cách mà một người thu thập được qua kinh nghiệm hoặc qua đào tạo. Nó
có thể là sự hiểu biết chung hay về một lĩnh vực cụ thể nào đó. Thuật ngữ tri thức được sử dụng
theo nghĩa “hiểu” về một chủ thể với một tiềm năng cho một mục đích chuyên dụng.
Hệ thống thông tin (information system) là một hệ thống ghi nhận dữ liệu, xử lý chúng để tạo
nên thông tin có ý nghĩa hoặc dữ liệu mới.
Tóm tắt nội dung tài liệu: Bài giảng Tin học đại cương
2010
TRƢỜNG ĐẠI HỌC
BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ
THÔNG TIN VÀ
TRUYỀN THÔNG
[BÀI GIẢNG TIN HỌC ĐẠI
CƢƠNG - IT1110]
[Type the abstract of the document here. The abstract is typically a short summary of the contents of the
document. Type the abstract of the document here. The abstract is typically a short summary of the
contents of the document.]
2
THÔNG TIN MÔN HỌC
Trình độ:
Sinh viên đại học các ngành
Khối lƣợng: 4(3-1-1-8)
Lý thuyết: 45 tiết
Bài tập/BTL: 15 tiết (bài tập, thảo luận)
Thí nghiệm: 5 bài (x 3 tiết) (thực hành)
Mô tả vắn tắt nội dung:
Khái niệm thông tin, biểu diễn thông tin trong máy tính. Hệ thống máy tính: phần cứng, phần
mềm, hệ điều hành, mạng máy tính. Giải quyết bài toán bằng máy tính. Các cấu trúc lập trình cơ
bản..
3
MỤC LỤC
PHẦN 1. TIN HỌC CĂN BẢN .............................................................................. 8
I.1. Thông tin và biểu diễn thông tin (5T lý thuyết) ............................................. 8
I.1.1. Các khái niệm cơ bản về thông tin và tin học (1T lý thuyết) ............................................ 8
I.1.1.1. Thông tin và xử lý thông tin ....................................................................................... 8
a. Thông tin - Dữ liệu – Tri thức....................................................................................... 8
b. Qui trình xử lý thông tin ............................................................................................... 9
I.1.1.2. Máy tính điện tử và phân loại .................................................................................... 9
a. Lịch sử phát triển của máy tính điện tử ........................................................................ 9
b. Phân loại máy tính điện tử .......................................................................................... 10
I.1.1.3. Tin học và các ngành công nghệ liên quan .............................................................. 10
a. Tin học ........................................................................................................................ 10
b. Công nghệ thông tin (Information Technology - IT) .................................................. 11
c. Công nghệ thông tin và truyền thông .......................................................................... 11
I.1.2. Biểu diễn dữ liệu trong máy tính (4T lý thuyết) ............................................................. 11
I.1.2.1. Biểu diễn số trong các hệ đếm ................................................................................. 11
a. Hệ đếm cơ số b ............................................................................................................ 11
b. Hệ đếm thập phân (Decimal system, b=10)................................................................ 12
c. Hệ đếm nhị phân (Binary system, b=2) ...................................................................... 13
d. Hệ đếm bát phân (Octal system, b=8) ........................................................................ 13
e. Hệ đếm thập lục phân (Hexa-decimal system, b=16) ................................................. 13
f. Chuyển đổi một số từ hệ thập phân sang hệ đếm cơ số b ........................................... 14
I.1.2.2. Biểu diễn dữ liệu trong máy tính và đơn vị thông tin .............................................. 14
a. Nguyên tắc chung ....................................................................................................... 14
b. Đơn vị thông tin .......................................................................................................... 15
I.1.2.3. Biểu diễn số nguyên ................................................................................................. 16
a. Số nguyên không dấu .................................................................................................. 16
b. Số nguyên có dấu ........................................................................................................ 16
c. Tính toán số học với số nguyên ........................................................................................ 17
Cộng/ trừ số nguyên ........................................................................................................ 17
Nhân/ chia số nguyên ...................................................................................................... 17
I.1.2.4. Biểu diễn số thực...................................................................................................... 18
a. Nguyễn tắc chung ....................................................................................................... 18
b. Chuẩn IEEE754/85 ..................................................................................................... 19
I.1.2.5. Biểu diễn ký tự ......................................................................................................... 20
a. Nguyên tắc chung ....................................................................................................... 20
b. Bộ mã ASCII .............................................................................................................. 20
c. Bộ mã Unicode ........................................................................................................... 22
I.2. HỆ THỐNG MÁY TÍNH (7 tiết) ................................................................. 23
I.2.1. Hệ thống máy tính (3T lý thuyết)................................................................................ 23
4
a. Mô hình cơ bản của máy tính ...................................................................................... 23
b. Bộ xử lý trung tâm – CPU .......................................................................................... 25
c. Bộ nhớ ......................................................................................................................... 26
d. Hệ thống vào-ra .......................................................................................................... 27
e. Liên kết hệ thống (buses) ............................................................................................ 29
I.2.1.2. Phần mềm máy tính ................................................................................................. 30
a. Dữ liệu và giải thuật .................................................................................................... 30
b. Chương trình và ngôn ngữ lập trình ........................................................................... 35
c. Phân loại phần mềm máy tính ..................................................................................... 37
I.2.2. Mạng máy tính (2T lý thuyết) ..................................................................................... 37
I.2.2.1. Lịch sử phát triển của mạng máy tính ...................................................................... 37
I.2.2.2. Phân loại mạng máy tính .......................................................................................... 38
I.2.2.3. Các thành phần cơ bản của một mạng máy tính ...................................................... 38
I.2.2.4. Mạng Internet ........................................................................................................... 40
I.2.3. Giới thiệu hệ điều hành (2T lý thuyết) ........................................................................ 41
I.2.3.1. Các khái niệm cơ bản ............................................................................................... 41
a. Khái niệm hệ điều hành .............................................................................................. 41
b. Tệp (File) .................................................................................................................... 41
c. Quản lý tệp của hệ điều hành ...................................................................................... 42
I.2.3.2. Hệ lệnh của hệ điều hành ......................................................................................... 43
I.2.3.3. Hệ điều hành Windows ............................................................................................ 44
a. Sự ra đời và phát triển ................................................................................................. 44
b. Khởi động và thoát khỏi Windows XP ....................................................................... 44
c. Một số thuật ngữ và thao tác thường sử dụng ............................................................. 45
d. Cấu hình Windows (Control Panel) ............................................................................ 47
e. Windows Explorer ...................................................................................................... 52
I.3. Các hệ thống ứng dụng (4T lý thuyết) .......................................................... 56
I.3.1. Các hệ thống quản lý thông tin........................................................................................ 56
I.3.1.1. Các khái niệm về thông tin và Hệ thống quản lý thông tin .......................................... 56
I.3.1.2. Phân loại ................................................................................................................... 56
a. Phân loại theo cấp bậc quản lý .................................................................................... 56
b. Phân loại theo chức năng nghiệp vụ ........................................................................... 59
c. Phân loại theo quy mô tích hợp .................................................................................. 60
I.3.2. Hệ thông tin bảng tính ..................................................................................................... 62
I.3.3. Hệ quản trị cơ sở dữ liệu ................................................................................................. 67
I.3.3.1. Cơ sở dữ liệu ............................................................................................................ 67
a. Khái niệm về Cơ Sở Dữ Liệu...................................................................................... 67
b. Hệ quản trị cơ sở dữ liệu ............................................................................................. 72
I.3.4. Các hệ thống thông minh ................................................................................................ 76
PHẦN II. GIẢI QUYẾT BÀI TOÁN .................................................................. 77
5
II.1. Thuật toán(4 tiết LT) .................................................................................... 77
II.1.1. Định nghĩa thuật toán ..................................................................................................... 77
II.1.2. Biểu diễn thuật toán ....................................................................................................... 78
II.1.2.1. Ngôn ngữ lưu đồ ..................................................................................................... 79
II.1.2.2. Mã giả ..................................................................................................................... 83
II.1.3. Thuật toán đệ qui ........................................................................................................... 84
II.1.4. Một số thuật toán thông dụng ........................................................................................ 85
II.1.4.1. Thuật toán số học .................................................................................................... 85
II.1.4.2. Thuật toán về dãy ................................................................................................... 86
II.1.5. Thuật giải heuristic ........................................................................................................ 87
II.1.5.1. Thuật giải – Sự mở rộng khái niệm của thuật toán ................................................. 87
II.1.5.2. Thuật giải heuristic ................................................................................................. 87
II.2. Giải quyết bài toán (4 tiết LT, 2 tiết BT) .................................................... 88
II.2.1. Khái niệm về bài toán .................................................................................................... 88
II.2.2. Các bước giải quyết bài toán bằng máy tính .................................................................. 89
Bài tập về Thuật toán (2 tiết BT) ......................................................................... 90
II.2.3. Các phương pháp giải quyết bài toán bằng máy tính ..................................................... 90
II.2.3.1. Giải quyết bài toán theo hướng xác định trực tiếp lời giải: .................................... 90
II.2.3.2. Giải quyết bài toán theo hướng tìm kiếm lời giải ................................................... 91
II.2.4. Phân loại bài toán ........................................................................................................... 91
II.2.4.1. Độ phức tạp thuật toán ............................................................................................ 91
II.2.4.2. Phân loại bài toán ................................................................................................... 93
PHẦN 3. LẬP TRÌNH .......................................................................................... 95
III.1. Tổng quan về ngôn ngữ C (3 tiết LT) ........................................................ 95
III.1.1. Lịch sử phát triển .......................................................................................................... 95
III.1.2. Các phần tử cơ bản của ngôn ngữ C ............................................................................. 96
1.2.1. Tập kí tự ................................................................................................................ 96
1.2.2. Từ khóa ................................................................................................................. 96
1.2.3. Định danh .............................................................................................................. 97
1.2.4. Các kiểu dữ liệu .................................................................................................... 98
1.2.5. Hằng ...................................................................................................................... 99
1.2.6. Biến ..................................................................................................................... 100
1.2.7. Hàm ..................................................................................................................... 100
1.2.8. Biểu thức ............................................................................................................. 101
1.2.9. Câu lệnh .............................................................................................................. 101
1.2.10. Chú thích .............................. ... nh con sin đó
thì ta vẫn thu được kết quả mong muốn mà không phải viết lại cả đoạn chương trình tính giá trị
sin(y).
Bên cạnh chương trình con sin còn có rất nhiều chương trình con khác được tạo sẵn như cos, exp
(dùng để tính lũy thừa cơ số e), pow (tính lũy thừa), sqrt (tính căn bậc 2), ... giúp người lập trình
tính toán giá trị của các đại lượng thông dụng. Những chương trình con này nằm trong thư viện
các chương trình con mẫu và được trình biên dịch C quản lý, vì vậy chúng còn được gọi là các
chương trình con chuẩn. Trình biên dịch Turbo C++ phân loại và đặt các chương trình con chuẩn
này trong các đơn vị chương trình khác nhau dưới dạng các tệp tiêu đề như stdio.h, conio.h,
math.h, string.h...
Ngoài ra còn có một lý do khác cần đến chương trình con. Khi ta giải quyết một bài toán lớn thì
chương trình của ta có thể rất lớn và dài, điều này làm cho việc sửa chữa, gỡ rối, hiệu chỉnh
chương trình gặp nhiều khó khăn. Nhưng nếu ta chia bài toán lớn, phức tạp ban đầu thành các bài
toán con nhỏ hơn và tương đối độc lập với nhau, rồi lập các chương trình con giải quyết từng bài
Bài giảng tin học đại cương
158
toán con, cuối cùng ghép các chương trình con đó lại thành một chương trình giải quyết bài toán
ban đầu thì sẽ rất tiện lợi cho việc phát triển, kiểm tra và sửa chữa cả chương trình.
Việc này tương tự như trong dây chuyền sản xuất công nghiệp khi ta lắp ráp sản phẩm hoàn thiện
từ các bán thành phẩm, các module được chế tạo ở những nơi khác nhau. Vì các bán thành phẩm
này được chế tạo độc lập nên khi phát hiện lỗi ở module nào ta chỉ việc tìm đến nơi sản xuất ra
nó để sửa chữa.
Việc chia nhỏ một chương trình thành các chương trình con đảm nhận những công việc nhỏ khác
nhau chính là tư tưởng chính cho phương pháp lập trình có cấu trúc (structured programming).
Cần lưu ý là có khi một chương trình con chỉ sử dụng đúng một lần nhưng nó vẫn làm cho
chương trình trở nên sáng sủa và dễ đọc, dễ hiểu hơn.
III.6.1.2. Phân loại chƣơng trình con:
Có 2 loại chương trình con là hàm (function) và thủ tục (procedure). Sự khác nhau giữa hàm và
thủ tục là ở chỗ hàm sau khi thực hiện xong thì sẽ trả về giá trị, còn thủ tục không trả về giá trị gì
cả.
Mặc dù vậy hàm và thủ tục là tương đương nhau, tức là có thể xây dựng được thủ tục có chức
năng tương đương với một hàm bất kì và có thể xây dựng được hàm có chức năng tương đương
với một thủ tục bất kì. Vì thế có những ngôn ngữ lập trình cho phép chương trình con có thể là
hàm và thủ tục (Pascal) và có những ngôn ngữ chỉ cho phép chương trình con là hàm mà thôi
(như C, Java).
Lưu ý là nếu chương trình con là hàm thì nó luôn có giá trị trả về. Nếu thực sự không có giá trị gì
để trả về (nghĩa là nó hoạt động giống thủ tục) thì ta phải khai báo hàm đó có kiểu giá trị trả về là
“không là kiểu giá trị nào cả” (kiểu void trong C).
III.6.2. Khai báo và sử dụng hàm
III.6.2.1. Khai báo hàm
Cú pháp khai báo một hàm trong C là như sau
[] ([,])
Thân hàm
Khai báo của một hàm được chia làm 2 phần:
- Dòng đầu hàm:
[] ([,])
- Thân hàm: là tập hợp các khai báo và câu lệnh đặt trong cặp dấu ngoặc nhọn
{
Bài giảng tin học đại cương
159
}
Trong thân hàm có ít nhất một lệnh return.
Ví dụ sau là khai báo và định nghĩa hàm tính giai thừa của một số nguyên dương. Ta quy ước
rằng giai thừa của một số âm thì bằng –1, của 0 bằng 0, của một số nguyên dương a là a! = a
(a-1) 1.
int giai_thua(int a)
{
int ket_qua;
int i;
ket_qua = 1;
for(i = 0;i<a;i++)
ket_qua = ket_qua * i;
if(a < 0) ket_qua = -1;
if(a == 0) ket_qua = 0;
return ket_qua;
}
Dòng đầu hàm
Các khai báo
Các câu lệnh
Các thành phần của dòng đầu hàm
Dòng đầu hàm là các thông tin được trao đổi giữa bên trong và bên ngoài hàm. Khi nói tới dòng
đầu hàm là ta nói tới tên của hàm, hàm đó cần những thông tin gì từ môi trường để hoạt động
(các tham số đầu vào), hàm đó cung cấp những thông tin gì cho môi trường (những tham số đầu
ra và giá trị trả về).
Dòng đầu hàm phân biệt các hàm với nhau, hay nói cách khác không được có 2 hàm có dòng đầu
hàm giống nhau.
Kiểu dữ liệu trả về của hàm
Thông thường hàm sau khi được thực hiện sẽ trả về một giá trị kết quả tính toán nào đó. Để sử
dụng được giá trị đó ta cần phải biết nó thuộc kiểu dữ liệu gì. Kiểu dữ liệu của đối tượng tính
toán được hàm trả về được gọi là kiểu dữ liệu trả về của hàm.
Trong C, kiểu dữ liệu trả về của hàm có thể là kiểu dữ liệu bất kì (kiểu dữ liệu có sẵn hoặc kiểu
dữ liệu do người dùng tự định nghĩa) nhưng không được là kiểu dữ liệu mảng.
Nếu kiểu dữ liệu trả về là kiểu void thì hàm không trả về giá trị nào cả.
Trường hợp ta không khai báo kiểu dữ liệu trả về thì chương trình dịch của C sẽ ngầm hiểu rằng
kiểu dữ liệu trả về của hàm là kiểu int.
Bài giảng tin học đại cương
160
Tên hàm
Tên hàm là có thể là bất kì một định danh hợp lệ nào. Tuy nhiên tên hàm nên mang nghĩa gợi ý
chức năng công việc mà hàm thực hiện. Ví dụ một hàm có chức năng tính và trả về bình phương
của một số thực x thì nên có tên là binh_phuong. Trong C, các hàm không được đặt tên trùng
nhau.
Tham số của hàm
Tham số của hàm là các thông tin cần cho hoạt động của hàm và các thông tin, kết quả tính toán
được hàm trả lại. Tức là có những tham số chứa dữ liệu vào cung cấp cho hàm, có những tham
số chứa dữ liệu ra mà hàm tính toán được.
Các tham số sử dụng trong lời khai báo hàm được gọi là tham số hình thức. Nó là tham số giả
định của hàm. Khi khai báo tham số hình thức của hàm phải chỉ ra tên của tham số và kiểu dữ
liệu của tham số.
Các tham số được cung cấp cho hàm trong quá trình thực hiện của hàm được gọi là tham số thực.
Kiểu dữ liệu của tham số thực cung cấp cho hàm trong chương trình phải giống kiểu dữ liệu của
tham số hình thức tương ứng với tham số thực đó, nếu không sẽ có báo lỗi biên dịch.
Một hàm có thể có một, nhiều hoặc không có tham số nào cả. Nếu có nhiều tham số thì chúng
phải được phân cách với nhau bằng dấu phẩy. Lưu ý là nếu hàm không có tham số nào cả thì vẫn
phải có cặp dấu ngoặc đơn sau tên hàm, ví dụ main().
Lệnh return
Trong chương trình, một hàm được thực hiện khi ta gặp lời gọi hàm của hàm đó trong chương
trình. Một lời gọi hàm là tên hàm theo sau bởi các tham số thực trong chương trình. Sau khi hàm
thực hiện xong, nó sẽ trở về chương trình đã gọi nó. Có 2 cách để từ hàm trở về chương trình đã
gọi hàm:
- Sau khi thực hiện tất cả các câu lệnh có trong thân hàm.
- Khi gặp lệnh return.
Cú pháp chung của lệnh return là
return biểu_thức;
Khi gặp lệnh này, chương trình sẽ tính toán giá trị của biểu_thức, lấy kết quả tính toán được làm
giá trị trả về cho lời gọi hàm rồi kết thúc việc thực hiện hàm, trở về chương trình đã gọi nó.
Trong lệnh return cũng có thể không có phần biểu_thức, khi đó ta sẽ kết thúc thực hiện hàm mà
không trả về giá trị nào cả.
Ví dụ và phân tích.
#include
#include
int max(int x, int y, int z)
{
int max;
max = x>y?x:y;
max = max>z?max:z;
Bài giảng tin học đại cương
161
return max;
}
void main()
{
int a,b,c;
clrscr();
printf("\n Nhap gia tri cho 3 so nguyen a, b, c: ");
scanf("%d %d %d",&a,&b,&c);
printf("\n Gia tri cac so vua nhap: ");
printf(" a = %-5d b = %-5d c = %-5d");
printf("\n Gia tri lon nhat trong 3 so la %d",max(a,b,c));
getch();
}
III.6.2.2. Sử dụng hàm
Một hàm sau khi khai báo thì có thể sử dụng. Để sử dụng một hàm (hay còn nói là gọi hàm) ta sử
dụng cú pháp sau:
([danh sách các tham số])
Ví dụ: chương trình dưới đây sẽ khai báo và định nghĩa một hàm có tên là Uscln với 2 tham số
đều có kiểu unsigned int. Hàm Uscln tìm ước số chung lớn nhất của 2 tham số này theo thuật
toán Euclid và trả về ước số chung tìm được. Sau đó ta sẽ gọi hàm Uscln trong hàm main để tìm
ước số chung lớn nhất của 2 số nguyên được nhập từ bàn phím.
#include
#include
unsigned int Uscln(unsigned int a, unsigned int b)
{
unsigned int u;
if (a<b)
{
u = a; a = b; b = u;
}
do
{
u = a%b;
a = b;
b = u;
}while (u!=0);
return a;
}
int main()
{
unsigned int a, b;
do
{
Bài giảng tin học đại cương
162
printf("\n Nhap vao 2 so nguyen duong a va b ");
printf("\n a = "); scanf("%d",&a);
printf("\n b = "); scanf("%d",&b);
if(a*b == 0)
{
printf("\n Khong hop le");
continue;
}
printf("\n Uoc chung lon nhat cua %d va %d la: %d", a, b, Uscln(a, b));
}while ((a != 0)||(b != 0));
printf("\n An phim bat ki de ket thuc chuong trinh...");
getch();
return 0;
}
Kết quả khi thực hiện:
Nhap vao 2 so nguyen duong a va b
a = 6
b = 9
Uoc chung lon nhat cua 6 va 9 la: 3
Nhap vao 2 so nguyen duong a va b
a = 15
b = 26
Uoc chung lon nhat cua 15 va 26 la: 1
Nhap vao 2 so nguyen duong a va b
a = 3
b = 0
Khong hop le
Nhap vao 2 so nguyen duong a va b
a = 0
b = 0
Khong hop le
An phim bat ki de ket thuc chuong trinh...
Lưu ý: Nếu có nhiều tham số trong danh sách tham số thì các tham số được phân cách với
nhau bằng dấu phẩy
Cho dù hàm có một, nhiều hay không có tham số thì vẫn luôn luôn cần cặp dấu
ngoặc đơn đứng sau tên hàm
Trong chương trình, khi gặp một lời gọi hàm thì hàm bắt đầu thực hiện bằng cách chuyển các
lệnh thi hành đến hàm được gọi. Quá trình diễn ra như sau:
- Nếu hàm có tham số, trước tiên các tham số sẽ được gán giá trị thực tương ứng.
- Chương trình sẽ thực hiện tiếp các câu lệnh trong thân hàm bắt đầu từ lệnh đầu tiên
đến câu lệnh cuối cùng.
Bài giảng tin học đại cương
163
- Khi gặp lệnh return hoặc dấu } cuối cùng trong thân hàm, chương trình sẽ thoát khỏi
hàm để trở về chương trình gọi nó và thực hiện tiếp tục những câu lệnh của chương
trình này.
III.6.3. Phạm vi của biến
Phạm vi của các biến
Một biến sau khi khai báo thì có thể được sử dụng trong chương trình. Tuy nhiên tùy vào vị trí
khai báo biến mà phạm vi sử dụng các biến sẽ khác nhau. Nguyên tắc sử dụng biến là biến khai
báo trong phạm vi nào thì được sử dụng trong phạm vi đó.
Một biến có thể được khai báo trong chương trình chính hoặc trong các chương trình con hoặc
thậm chí trong một lệnh khối. Nếu biến được khai báo trong một lệnh khối thì nó chỉ có thể được
gọi trong lệnh khối đó thôi, không thể gọi từ bên ngoài lệnh khối được. Một biến được khai báo
trong một chương trình con chỉ có thể được sử dụng trong phạm vi chương trình con đó. Một
biến được khai báo trong chương trình chính thì có thể được sử dụng trong toàn bộ chương trình,
trong tất cả các chương trình con cũng như trong các lệnh khối của chương trình.
Lưu ý
Một số ngôn ngữ lập trình như Pascal cho phép khai báo một chương trình con nằm trong
một chương trình con khác, nhưng ngôn ngữ C không cho phép khai báo một chương
trình con nằm trong một chương trình con khác.
Bên trong một lệnh khối thì có thể có chứa lệnh khối khác. Khi đó biến được khai báo ở
lệnh khối bên ngoài có thể được sử dụng ở lệnh khối bên trong.
Việc trùng tên của các biến: Trong cùng một phạm vi ta không được phép khai báo 2 biến
có cùng tên nhưng ta có thể khai báo 2 biến trùng tên thuộc 2 phạm vi khác nhau. Nếu có
2 biến trùng tên khai báo ở 2 phạm vi khác nhau thì xảy ra 2 trường hợp:
o Hai phạm vi này tách rời nhau: khi đó các biến sẽ có tác dụng ở phạm vi riêng của
nó, không ảnh hưởng đến nhau.
o Phạm vi này nằm trong phạm vi kia: khi đó nếu chương trình đang ở phạm vi
ngoài (tức là đang thực hiện câu lệnh nằm ở phạm vi ngoài) thì biến khai báo ở
phạm vi ngoài có tác dụng, còn nếu chương trình đang ở phạm vi trong (đang thực
hiện câu lệnh nằm ở phạm vi trong) thì biến khai báo ở phạm vi trong sẽ có tác
dụng và nó che lấp biến trùng tên ở bên ngoài.
Ví dụ:
#include
void main()
{
{
int a = 1;
printf(“\n a = %d”,a);
{
int a = 2;
Bài giảng tin học đại cương
164
printf(“\n a = %d”,a);
}
printf(“\n a = %d”,a);
}
{
int a = 3;
printf(“\n a = %d”,a);
}
}
Kết quả thực hiện chương trình
a = 1
a = 2
a = 1
a = 3
Phân loại biến
Theo phạm vi sử dụng, biến chia làm 2 loại: biến cục bộ (biến địa phương – local variable) và
biến toàn cục (global variable).
Biến địa phƣơng
Là các biến được khai báo trong lệnh khối hoặc trong thân chương trình con. Việc khai báo các
biến cục bộ phải được đặt trước phần câu lệnh trong lệnh khối hoặc trong chương trình con.
Biến toàn cục
Là biến được khai báo trong chương trình chính. Vị trí khai báo của biến toàn cục là sau phần
khai báo tệp tiêu đề và khai báo hàm nguyên mẫu.
Lưu ý: Hàm main() cũng chỉ là một chương trình con, nhưng nó là chương trình con đặc biệt ở
chỗ chương trình được bắt đầu thực hiện từ hàm main().
Biến khai báo trong hàm main() không phải là biến toàn cục mà là biến cục bộ của hàm
main().
Một số lệnh đặc trưng của C: register, static
Chúng ta biết rằng các thanh ghi có tốc độ truy nhập nhanh hơn so với các loại bộ nhớ khác
(RAM, bộ nhớ ngoài), do vậy nếu một biến thường xuyên sử dụng trong chương trình được lưu
vào trong thanh ghi thì tốc độ thực hiện của chương trình sẽ được tăng lên. Để làm điều này ta
đặt từ khóa register trước khai báo của biến đó.
Ví dụ
register int a;
Tuy nhiên có một lưu ý khi khai báo biến register là vì số lượng các thanh ghi có hạn và kích
thước của các thanh ghi cũng rất hạn chế (ví dụ trên dòng máy 80x86, các thanh ghi có kích
Bài giảng tin học đại cương
165
thước 16 bit = 2 byte) cho nên số lượng biến khai báo register sẽ không nhiều và thường chỉ áp
dụng với những biến có kích thước nhỏ như kiểu char, int.
Như ta đã biết, một biến cục bộ khi ra khỏi phạm vi của biến đó thì bộ nhớ dành để lưu trữ biến
đó sẽ được giải phóng. Tuy nhiên trong một số trường hợp ta cần lưu giá trị của các biến cục bộ
này để phục vụ cho những tính toán sau này, khi đó ta hãy khai báo biến với từ khóa static ở
đầu.
Ví dụ
static int a;
Từ khóa static giúp chương trình dịch biết được đây là một biến tĩnh, nghĩa là nó sẽ được cấp
phát một vùng nhớ thường xuyên từ lúc khai báo và chỉ giải phóng khi chương trình chính kết
thúc. Như vậy về thời gian tồn tại biến static rất giống với biến toàn cục, chỉ có một sự khác biệt
nhỏ là biến toàn cục thì có thể truy cập ở mọi nơi trong chương trình (miễn là ở đó không có biến
địa phương nào cùng tên che lấp nó), còn biến static thì chỉ có thể truy nhập trong phạm vi mà
nó được khai báo mà thôi.
Hãy xét ví dụ sau:
# include
# include
void fct()
{
static int count = 1;
printf("\n Day la lan goi ham fct lan thu %2d", count++);
}
void main()
{
int i;
for(i = 0; i < 10; i++)
fct();
getch();
}
Kết quả khi thực hiện
Day la lan goi ham fct lan thu 1
Day la lan goi ham fct lan thu 2
Day la lan goi ham fct lan thu 3
Day la lan goi ham fct lan thu 4
Day la lan goi ham fct lan thu 5
Day la lan goi ham fct lan thu 6
Day la lan goi ham fct lan thu 7
Day la lan goi ham fct lan thu 8
Day la lan goi ham fct lan thu 9
Day la lan goi ham fct lan thu 10
Bài giảng tin học đại cương
166
Bài tập về Lập trình (2 tiết BT)
File đính kèm:
bai_giang_tin_hoc_dai_cuong.pdf

