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