Ngôn ngữ lập trinh c dược sử dụng để mô tả, minh họa các khái niệm đồng thời như là một ngôn ngừ cụ thể để sinh viên rèn luyện kỳ năng lập trình, giải qiiyếl vấn đề.. N h ư một nhà toán
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
T ú SÁ C H
KM O A H Ọ C
ĐẠI HỌC QUỐC GIA HÀ NỘI
74-KHTN-2012
Chủ biên: Hồ Sĩ Đàm
Q uyển 6
VỚI
Tác giả: Bùi Thế Duy
T T T V - D K Q G H N
tu-i)(6)
2012
Õ Ỡ 0 3 #
Trang 2LẬP TRÌNH Cơ BẢN VỚI c
Trang 3M Ụ C L ỤC
Lời nói đ ầ u 7
Chương I. Lập trình và ngôn ngữ lập t r ìn h 9
1.1 Giài quyết vấn đ ề 9
1.1.1 Giải quyết vấn đề trong cuộc sống hàng n à y 9
1.1.2 Giải quyết vấn đề bàng máy tín h 10
1.1.3 Phân tích bài toán/vấn đ ề 10
1.2 Lập t r ì n h 11
1.3 Ngôn ngừ tự nhiên và ngôn ngữ lập t r ì n h 12
1.4 Các thành phần cơ bản của ngôn ngữ lập trinh c 13
1.4.1 Bảng chừ c á i 13
1.4.2 Quy tấc cú p h á p 14
1.4.3 N g ữ n g h ĩ a 14
1.5 Kết c h ư ơ n g 14
Câu hòi và bài t ậ p 15
Bài đọc thêm: Những thành công của ngôn n g ữ lập trình c 16
Chương 2. Chưo’ng trình máy tính 19
2.1 Khái niệm về chương trình máy t í n h 19
2.2 Cấu trúc m ột chương trình trong ngôn ngữ lập trình c 20
2.3 Một chương ưìn h đơn g i à n 20
2.4 Dịch chương tr ìn h 23
2.5 Liên kết chương t r ì n h 23
2.6 Viết inột chương t r ì n h 24
2.6.1 Mô tà vấn đ ề 24
2.6.2 Xem xét bài to án 25
2.6.3 Các giai đoạn phát triển chương t r ì n h 26
2.6.4 Chiến lược phát triển chương trình phần m ề m 26
2.7 Kết c h ư ơ n g 29
Câu hỏi và bài t ậ p 30
Chương 3 Biến, hằng và kiểu d ữ l i ệ u 31
3.1 B iển 31
3.1,1 Đăt tên b i ế n 32
Trang 4l Ạ p t r I nh c ơ bản v ớ i C
3.1.2 Câu lệnh g á n 33
3.2 Một số kiểu dừ liệu c h u ẩ n 34
3.3 n Ị i g 1 37
3.4 Kết c h ư ơ n g 38
Câu hỏi và bài t ậ p 39
Chương 4. Xuất/nhập d ữ l i ệ u 4 1 4.1 Xuất dừ liệu ra màn h ì n h 41
4.2 Nhập dữ liệu từ bàn p h í m 43
4.3 Nhập dữ liệu và k i ể u 44
4.4 Kết c h ư ơ n g 46
Câu hỏi và bài t ậ p 47
C hương 5. Phép toán, biểu d i ễ n 49
5.1 Phép t o á n 49
5.2 Biểu th ứ c 51
5.2.1 Biểu thức số h ọ c 51
5.2.2 Biểu thức quan h ệ 53
5.2.3 Biểu thức l o g i c 53
5.3 Thứ tự cùa các phép t í n h 54
5.4 Kiểu cùa biểu t h ứ c 55
5.5 Các hàm toán h ọ c 56
5.6 Toán từ kết h ợ p 57
5.7 Kết c h ư ơ n g 59
Câu hỏi và bài t ậ p 60
C hưong 6. c ấ u trúc điều k h i ể n 63
6.1 Các cấu trúc điều khiển cơ bản trong lập t r ì n h 63
6.1.1 Tuần t ự 63
6.1.2 Rẽ n h á n h 63
6.1.3 L ặ p 64
6.2 Câu lệnh rẽ nhánh trong c 65
6.2.1 Câu lệnh i f 65
6.2.2 Câu lệnh s w i t c h 68
6.2.3 Khối chương t r ì n h 70
6.3 Cấu trúc lặp trong c 71
6.3.1 Câu lệnh w h i l e 71
6.3.2 Câu lệnh do., w h i l e 75
6.3.3 Câu lệnh f o r 76
Trang 56.3.4 Câu lệnh break và c o n tin u e 79
6.4 Kốt c h ư ơ n g 80
Càu hỏi và bài t ậ p 81
C hương 7 Con trỏ và M ả n g 85
7.1 Con trò 85
7.1.1 Khai báo biến kiểu con t r ỏ 86
7.1.2 Lay địa chỉ của một b i ế n 86
7.1.3 Cấp phát bộ nhớ đ ộ n g 87
7.1.4 Tham chiếu giá trị của con t r ò 88
7.1.5 Gán giá t r ị 88
7.2 Mảng một c h i ề u 89
7.2.1 Khai báo m ảng một chiề u 89
7.2.2 Truy cập các phần t ừ 91
7.2.3 Saojchep m ả n g 93
7.3 Mảng nhiều c h i ề u 94
7.4 Xâu.T .97
7.5 Kết c h ư ơ n g 99
C âu hòi và bài t ậ p 100
C hương 8. Vào/ra với t ệ p 103
8.1 Giới t h i ệ u 103
8.2 T h ư viện vào/ra c h u ẩ n 103
8.3 Thao tác trực tiếp với t ệ p 104
8.4 Các thao tác với nội dung t ệ p 104
8.4.1 Khai báo t ệ p 104
8.4.2 Mở t ệ p 104
8.4.3 Đóng t ệ p 106
8.4.4 Đọc và ghi d ữ liệu với tệp văn b ả n 106
8.5 Vào/ra tệp nhị p h â n 107
8.6 Kết c h ư o n g 108
C âu hòi và bài t ậ p 109
C hương 9. H à m 111
9.1 Lý do cần quan tâm đến h à m 111
9.2 Cấu trúc cùa một h à m 112
9.3 Thực hiện h à m 116
9.4 Trà về giá trị thông qua tham s ố 118
9.5 Khai báo h à m 119
M IX JA)C 5
Trang 6l a p t r ìn h c ơ bản v ớ i c
9.6 Biến cục bộ và biến toàn c ụ c 1 19
9.7 Đệ q u y ’ 120
9.8 Kết c h ư ơ n g 121
Càu hỏi và bài t ậ p 122
Chươìĩg 10. Kiểu d ữ liệu có cấu t r ú c 123
10.1 Khai b á o 124
10.2 Truy cập giá t r ị 125
10.3 Gán giá t r ị 125
10.4 Một sổ ví dụ ứng d ụ n g 126
10.5 Kết c h ư ơ n g 131
Câu hỏi và bài t ậ p 132
Chương II. L ỗ i 133
11.1 GỠIỒL 133
11.1.1 Lỗi lúc d ịc h 133
11.1.2 Lỗi cú p h á p 136
11.1.3 Lồi k iể u 137
11.1.4 Các cảnh báo lúc dịc h 138
11.2 Lỗi lúc liên k ế t 138
11.3 Lỗi lúc chạy chương trình 139
11.4 Lỗi logic 141
11.5 G ỡ lồi bàng thực n g h i ệ m 141
11.6 X ử lý l ỗ i 142
11.7 Các nguyên nhân tạo ra l ỗ i 143
11.8 Xử lý lồ i 144
11.8.1 Phần mã gọi hàm x ử lý lỗi 144
11.8.2 Phần m ã hàm xử lý lồi 146
11.9 Kết c h ư ơ n g 147
Tài liệu tham k h ả o 149
Trang 7LỜI NÓI Đ À U
Giáo trình được biên soạn theo đề cương môn học “Lập trình cơ bán với C"’ đã được Đại học Quốc gia Hà Nội phô duyệt Môn học nhàm cung cấp các khái niệm cơ bản về lộp trình và ngôn ngừ lập trình bậc cao Ngôn ngữ lập trinh c dược sử dụng để mô tả, minh họa các khái niệm đồng thời như là một ngôn ngừ cụ thể để sinh viên rèn luyện kỳ năng lập trình, giải qiiyếl vấn đề Mục tiêu của giáo trinh là giúp cho người đọc suy nghĩ như một người làm Tin học Cách suy nghĩ này là sự kết hcrp những đặc tính tốt nhất cùa toán học, kỳ sư, và khoa học tự nhiên N h ư một nhà toán học, các nhà Tin học dùng ngôn ng ừ hình thức để thể hiện các ý tường của minh Như các kv sư, các nhà Tin học thiết kế, lẳp ráp các thành phần thành các hệ thống và đánh giá các hệ thống đỏ N h ư các nhà khoa học, các nhà Tin học quan sát hành vi của các hệ thống phức tạp, đưa ra các giả thuyết và kiểm tra các già thuyết dó
Bùi Thế Duy, HỒ Sĩ Đàm
Trang 8Chương I
LẬP T RÌ NH VÀ N G Ô N NGỮ LẬP T R Ì N H
Kỹ năng cần có cùa naười làm Tin học là khà năng mô tà vấn dề, suy nghĩ sáng tạo dể giải quvết vấn dề, và trình bày giải pháp một cách rõ ràng
và chính xác Học lập trinh là một cơ hội rất tốt để thực hành các kỳ năng giái quvết vấn đề
1,1 Giải quyết vấn đề
/ 1.1 Giải (Ịuyểt vẩn đề trong cuộc sổng /làng này
ỉ làng ngày, lúc nào chúng ta cũng phủi sử dụng các kỳ năng giải quyết vấn dề, dưa ra sự lựa chọn và đưa ra quyết định Ví dụ, ta nên xem ti vi hay
di xem phim, ta sẽ chọn nghề nghiệp nào, Các phương án giải quyết vấn
dề không lốt, các quyết định không tốt có thể gây ra hậu quà, thậm chí là nghiêm Irọng Ví dụ trong kinh doanh, một phương án không tốt, một quyết dịnh không tốl có ihế gây ra thua lỗ về tiền bạc và mất mát về thời gian Cliính vì vậy, biết cách giái quyết vấn đồ, biết cách dưa ru quyết định là một
kv nâng rất quan trọng Dể giải quyết vấn dồ, chúng ta thường sử dụng các bước sau;
1 Xác dịnh/hiểu vấn đề; Ncu chúng ta không biết vấn đề là gì, chúng
ta không thể giài quyết nó, chính vì vậy phủi xác định rõ vấn đề cũne như dầu vào và dầu ra của vấn dề thì mứi giải quyết được;
2 Xác dịnh các giài pháp khác nhau để giải quyết vấn dề; tạo ra một danh sách càng nhièu càng tốt các cách giải quyết, trao đổi với những người khác để có nhũng giải pháp mà chúng ta chưa nghĩ tới Neu chúng ta chưa có đầy đú các giải pháp, chúng ta chưa thê đưa ra quyết định tổt;
Trang 910 _ l a p t r in h c ơ bần VỚỊ_C
3 ỉ)ánh giá cái được và mất cho mồi giài pháp de chọn ra giai pháp tốt nhất;
4 Liệt kê các bước cho phép chúng la giái quyết \ an dồ theo giãi pháp đã được chọn lựa;
5 Thực hiện các bước và đánh giá giải pháp
T ó m lại, để có thể giải quyết tốt một vấn đề, cần:
• vấn đề được xác định rõ ràng;
• các giải pháp khác nhau đều được xcni xét;
• đánh giá tính khả thi của giải pháp
1.1.2 Giải quyết vấn đề bằng máy tính
Như vậy, giải quyết vấn đề là một kỳ năng mà chúng ta phái sừ dụng hàng ngày Hãy xem xét hai loại vấn đề mà chúng ta phải gặp hàng ngày:
• Loại vấn đề có giải pháp kiểu thuật toán: đây là các vấn dổ mà
có thể giải quyết bằng một chuồi các hành động
• Loại vấn đề có giải pháp kiểu ơ-ris-tic {heuristic) - các giài pháp không dưới dạng một chuỗi các bước - ví dụ nh ư làm thế nào dể mua chứng khoán tốt nhất?
Các vấn đề loại đầu khá thích hợp đổ giải quyết Ircn m áy tính, còn loại thứ hai đề giải quyết được trên máy tính cần kết hợp nhiều phưcmg pháp khác nhau
I.Ỉ.3 p/iãn tích hài toảiưvẩn đề
Dẻ có thể giải quyết tốt một bài toán bàng m áy tính, chúng ta cần tiến hành phân tích bài toán trước khi thực sự trièn khai trên máy Một phưưng pháp tốt để phân tích bài toán là tách bài toán ra làm bốn phần: d ừ liệu dầu vào, yêu cầu kết quả, các bước xử lý cần làm, và các giải pháp khác
Sau đày là mẫu cùa bảng biểu dùng để phân tích bài toán/vấn đè:
Trang 10CHƯONG 1 LẬP TRÌNH VA NGỔN NGỮ LẬP TRlNH 1 1
- Dữ liệu trong bài toán hoặc cung cấp bởi
người dùng
- Các hảng số dử liệu
Các yêu cầu về kết quả đầu ra
Danh sách các bước xử lý cản ỉám các công
thừc (vi dụ các kỹ thuật tìm kiếm hay sắp xếp
các thuặt toán)
—
Danh sách các giải pháp khảc
Ví dụ, với bài toán tính tổng sổ tiền phải trả cho người lao động theo giừ theo công thức;
Tồng tiền phải trả = Tổng số giờ đã làm * Định mức trả theo giờ
chúng ta có Ihề phân tích như trong bảng sau;
Tống số giờ đã làm
Định mửc trả theo giờ
Tổng số tiền phải trả
Tỏng tiền phải trả = Tồng số giờ đã làm • Định
mức trả theo giờ
Coi định mửc trả theo giờ là hằng số
1.2 Lập trình
Trên máy tính, chúng ta có thể lập trình giải các bài toán có thuật toán giài sau khi xác định d ừ liệu vào và dữ liệu ra của bài toán
Lập trình là lựa chọn và sử dụng các cấu trúc d ừ liệu thích hợp và các câu lệnh của một ngôn ngừ lập trình cụ thể đế mô tả dữ liệu (dừ liệu vào, dữ liệu ra và d ữ liệu trung gian) và các thao tác cùa thuật toán.
Giáo trình này coi việc dạy lập trình là ưu tiên nhất và việc dạy ngôn ngữ lập trình, như là m ột công cụ, chi là ưu tiên thứ hai Mục tiêu chính là giúp người đọc hiểu những khái niệm, những nguyên tẳc, và những kỹ thuật chung, ví dụ như các kỳ thuật cơ bản để viết mã không bị lồi, cách viết mã một cách logic và đơn giản, cách sử dụng cách hàng số, hay cách tách phần
Trang 11khai báo ra khỏi phần cài dặt thực sự Tuy nhiên, cũng không thể hièu những vấn dề này mà không có ngôn ngữ lập trình Ví dụ, chi tiết vè cú pháp, cách thức triển khai những khái niệm, những nguyên tăc của các niíỏn ngừ lập trình khác nhau cỏ thể khác nhau 1'hC'm vào dó, các kỹ ihuật lập trình và thiết kế phài được học thông qua việc sử dụng một ngôn n e ữ lập trình Thiết kế, tổ chức mã, và gỡ lỗi không phải là các kỹ nãng mà ta có thế thu được một cách trừu tượng, c ầ n phải viết mã trong niột ntìôn nizừ lạp trình nào đó và thu được kinh nghiệm thực tế từ đó Diều này có nghĩa là phải tìm hiểu những vấn đề căn bản cùa một ngôn ngữ lập trình
1.3 Ngôn n g ữ tự nhiên và ngôn n g ữ lập trình
Ngôn ngừ tự nhiên là ngôn ngữ mà con người dùng đê giao liếp với nhau, ví dụ như tiếng Việt, tiếng Anh, và tiếng Nhật Ngôn ngữ lự nhicn được hình thành và phát triển cùng với sự phát triẻn cùa loài người Ngôn ngữ hình thức là các ngôn ngữ được thiết kế bởi con người cho những ứng dụng nhất định Ví dụ, các công thức và ký hiệu mà các nhà toán học dùng
là một ligôn ngừ hình thức để ghi lại mối quan hệ giừa các số và biếu lượng Các nhà hóa học dùng ngôn ngừ hình thức cùa họ để thể hiện cấu trúc hóa học của các phân tử Và có lẽ quan trọng nhất, ngôn ng ữ lập trinh là các ngôn ngữ hình thức được thiết kế để thể hiện các lính toán
Ngôn ngữ lập trình là ngôn ngữ do con người thiết kế đế mõ tả dữ liệu
và thuật toán d ư ớ i d ạ n g mà m á y tính h o ặ c trực tiê p h o ặ c giá n íiêp
"hiểu ” được.
Mặc dù ngôn ngữ lập trình có nhiều điểm giống ngôn ngữ lự nhiên, tuy nhiên cũng có rất nhiều điềm khác nhau:
- Sự nhập nhàng: Ngôn ngừ tự nhiên chứa đựng rất nhiều sự nliập nhàng Con ngưừi xử lý những sự nhập nhàng này bằng cách sừ dụng các thông tin tình huống Trong các ngôn ng ừ lập trình không
có sự nhập nhàng Điều đó có nghĩa là mồi câu chỉ mang đúng rnột
ý nghĩa bất kể tình huống nào
- Sự dư thừa: Đẻ giảm bớt sự khó hiểu cũng nh ư vì các lý do giao tiếp, ngôn n g ừ tự nhiên thường có thêm nhiều thành phần dư thừa
_[2 _ l a p TRINH CƠ BAN v ờ i c
Trang 12CHƯƠNG 1 LẬP TRÌNH VẢ NGỔN NGỮLẢP TRÌNH 13
Trong khi đó, ngôn ng ừ lập trình rất cô đ ọng và không c h ứ a sự
dư thừa
- N gừ nghĩa; Ngôn ngữ tự nhiên thường sử dụng nhiều thành ngữ và phép ẩn dụ, do vậy một câu có thể mang nghĩa đen và nhiều nghĩa bóng Trong ngôn ngữ lập trinh, một câu chi mang đúng một nghĩa
mà thôi
Chính vl vậy, chúng ta cần phải lưu ý những điểm sau khi đọc hiểu các cliLumu trinh máy tính Tarớc hết, cần lưu ý ràng ngôn ngừ hinh thức cô đọng hơn ngôn ngừ tự nhiên, do vậy, cần nhiều thời gian để đọc hơn Nhớ ràng các chi tiết rất quan trọng irong một chương trinh máy tính Các lồi rất nhỏ như đặt sai chấm phẩy có thể dễ dàng được bỏ qua trong ngôn ngữ tự nhiên, nliưng lại lạo ra các khác biệt rất lớn trong các chương trình máy tính
1.4 C á c thành p h ầ n cơ bản của ngôn n g ữ lập trình c
Mỗi ngôn ngừ lập trình được xác định bởi ba thành phần cơ bản là; bàng chữ cái, quy tấc cú pháp và ngừ nghĩa các khái niệm
1.4 ỉ Bảng chữ cái
Bàng chừ cái là tập hợp các ký tự dùng để viết chương trình Nhìn chung bảng chừ cái của các ngôn ngữ lập trình không khác nhau nhiều
Bùiig chừ cái của ngôn ngữ lập trình c bao gồm:
• Các chừ cái thường và chữ cái hoa của bảng chừ cái tiếng Anh:
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
• 10 chữ số Ảrập:
0 1 2 3 4 5 6 7 8 9
• Các ký tự đặc biệt: