Đăng ký Đăng nhập
Trang chủ Giáo dục - Đào tạo Cao đẳng - Đại học Đại cương Ngôn ngữ lập trình c học và sử dụng...

Tài liệu Ngôn ngữ lập trình c học và sử dụng

.PDF
27
17
141

Mô tả:

H 9C n Ệ H KỸ THUẬT QU&N s ự KHOA CÔNG NGHỆ THDNG TIN TS. DƯONG TỨ CƯ ỜN ÍỈ IH ! ^ a â s ì S ỉ^ í^ 19 ____ OT _ J_ l ậ n Ẽ r ìiiH ìí HỌC VÀ SỬ DỤN gV • m M IÀ X ÍIẨ T BẢN KHOA HOC VÀ KỶ THUÀT HOC VIÊN KỶ THUẬT QUÀN sự KHOA C Ô NG NGHÊ THÔNG TIN TS. DƯƠNG TỬ CƯỜNG NGÔN NCỮ LẬP TRÌNH c HỌC vn sử DỤNG (In lần thứ ba có chỉnh lý) í.v\; : ‘C-: '_.:A NOi ' • ^ìi Thíị i - .v - ổ o / m ì 5 | NHÀ XUẤT BẢN KHOA HỌC VÀ KỸ THUẬT HÀ NÔI - 2001 ■ ■ MỜ ĐÀU c.’ó t h ể nói ngôn ngữ c ỉà một ngôn ngừ "không tru y ề n th ố n g ” theo sự p h á t sinh và quá trin h p h á t tr iể n của mình. Lịch sử phát triể n của ngôn ngữ c được gắn liền với hệ điều hành UNIX. Đến lượt minh hệ điều hành U N IX lại liên quan chặt chẽ đến một hệ điều hành khác - hệ điều hành M U L T IC S , một hệ điều hành với sự phân chia thời gian. Hệ điều hành M Ư L T Ỉ C S là kết quả hợp tác của A T & T Bell Laboratories, General Electric và Massachusetts Institute o f Techonology. Trên thực tế nguyên mẫu của hệ thống M Ư L T ĨC S đã đáp ứng được như cầu đặt ra như n g lại tỏ ra chưa th uận tiện và khó khăn trong việc sừ dụng. Đây là một trong các nguyên nhân để A T iSi T đình chị không tiếp tục phát triể n hệ thống hơn nữa. Ảnh hưởng bởi ý tư ở n g đầu tiên của M Ư L T ỈC S , Ken Thom con một trong những người th a m gia thiết kế hệ thống này đã xây dựng một hệ điều hành khác, mà một tro ng những điều khác biệt với M Ư L T ỈC S là sự th u ậ n tiện và dễ dàng trong khi sử dụng. Hệ điều hành này là phiên bản đàu tiên của U N IX và được Thomcon v iế t t r ê n n g ô n ngữ Assemblly d à n h cho m áy P D P - 7 vào n ám 1969. Mặc dù hệ điều h à n h này ban đầu còn chưa cho phép làm việc tro n g chế độ đa người sử dụng nhưng nó đã tỏ ra có hiệu quả, th u ậ n tiện và xứng đáng được phát triể n tr ê n n h ữ n g máy tính điện tử khác. Để thực hiện được điều này, năm 1970 Thomcon đã xây dựng một ngôn ngữ hệ thống (thông dịch) với tên gọi là ngôn ngữ B. Khi xây dựng ngỏn ngữ này, ông đã xuất p h á t từ một ngôn ngữ khác - ngôn ngừ BCPL được viết vào n ăm 1969 bởi M artin Richards. Với hệ thông dịch này hệ điều hàn h U N IX đã được đưa sang máy vi tính PDP-11 vào nảm 1971. Trong cùng giai đoạn này, Dennis Ritchie - một n h à lập trình nổi tiếng đâ th a m gia vào tập th ể C.ÍÌC iiíìà iTip trinh của hệ thống trên. Năm 1972 Dennis Ritchie cùng cac cộng sự đã phát triển ngôn ngữ B th àn h ngôn ngữ c . Bàng cách này cặp U N IX - c đã tỏ rõ nhừng khả n ă n g hiếm có của minh trong kỹ th u ậ t ìập trình. Với ngôn ngữ c hệ điêu hàn h Ư N ĨX đã được xây dựng vào nãm 1973 và được xem như hệ điều hành tương thích (Portable Operating System) đa người sử dụng. N ăm 1975 phiên bản thứ 6 của hệ điều h à n h U N I X b ắt đầu được phổ biến rộng ,rãi. Một điểm đặc biệt cần lưu ý là h ầ u như toàn bộ hệ điều hành UNIX, bao gồm các tr in h điều k h iể n thiết bị, trình biên dịch c đều được viết trên ngòn ngữ c . T ro n g thời gian này ngôn ngủ c cũng b ắ t đầu được phổ b iế n và bán tr ê n thị trường. Cho đến n ã m 1978 khi Brian K erníghan và D ennis R itc h ie cho x u ấ t b ả n c u ố n T h e c P r o g r a m m in g Language thi có thể xem như c chính thức được r a đời. Cùng v-ới sự ra đời và phát triển của kỹ t h u ậ t vi hệ vi xử lý 8080 và Z80) nhiều trình biên dịch của c và phàn nào đã đáp ứng được nhu cầu của thực tế kh ả n ăn g biên dịch v.v. Ngày nay tối thiểu ta có th ể đến 17 trình biên dịch c đang thực sự phổ biến trên PC. m ạch (các đã ra đời về tốc độ, đếm được thị trường Ngôn ngừ c đang là một trong các ngôn ngừ được đ án h giá cao trên thực t ế do nhiều nguyên nhân: • Khả n ă n g tương thích trên nhiều loại máy khác nhau có t h ể xem là ưu điểm được quảng cáo nhiều n h ấ t của ngôn ngữ c . Một chương trình được viết tuân thủ theo các nguyên tác củ a c và trá n h sử dụ ng các đặc tính mở rộng của một thư viện phụ thuộc trỉnh biên dịch đặc biệt, cd th ể được xem như m ộ t c h ư ơ n g t r ì n h có khả n ă n g t h à n h công n h iều n h ấ t khi m a n g s a n g sử dụ ng tr o n g các môi trường tr in h biên dịch/hệ điều hành máy tính khác. Đây là một đặc tính được đánh giá ngày càng cao của ngôn ngữ c. • Một ưu điếm thứ hai của c lã sự súc tích và ngồn ngữ. Cú pháp của ngôn ngử c ban đàu rất chi d ự a trên 27 từ khóa. Điều này làm cho ngôn được p h á t triể n và thực hiện một cách dễ dàng tính lớn và máy vi tính. cô đọng của đơn giản và ngữ có th ể ở trên má}^ • Ngôn ngữ c đưa ra những khả năng cao cho lập trỉnh có cáu trú c , một cơ cấu truyền đạt, truyền thông (Comniunication) th u ậ n tiện giữa các đơn vị chương trình khác nhau, khả năn g biên dịch độc lập, tính đệ qui v.v... • c còn được chú ý đến là do hiệu quả của \iệc kết sinh mã (Code Generation). Điều này bắt nguồn từ việc ngôn ngữ c đi s á t với cấu trúc ký ức và thanh ghi của phần cứng, yếu tố nià dỉựa trên ngôn ngữ được thiết kế và phát triển. Người ta t h ư ờ n g xem c n h ư là m ộ t ngôn ng ừ cấp cao n h ư P a s c a l, F o r t r a n v.v... bởi sự thuận tiện khi sử dụng và phương pháp lập t r ì n h có cấu trúc của nó. Tuy vậý ngoài nhừng chức n ă n g bậc c a o đó, c lại cho phép thực hiện nhiều công việc ở "mức thấp'" n h ư ngôn ngữ Assembly. Các ch u y ên gia đã th ố n g kê được rằn g cổ đến 90% các trường hợp có th ể sử dụng ngôn ngữ c thỉay th ế cho ngôn ngữ Assembly, n h ấ t là trong các lỉnh vực liên iquan đến phần cứng và các bài toán điều khiển. Điều đó chứriig tỏ rằng với các khả năng của một ngôn ngữ bậc cao, c cd thiể đ ạt đến kết quả đặc trư n g cho ngôn ngữ Assembly trong điều kiện t h u ậ n tiện, dễ dàng hơn khi xây dựng và sửa đổi chươmg trỉnh. Miặt dù hiện nay trên thị trư ờ n g đã tồn tại nhiều tài liệu viết về ngôn ngữ c nhưng có th ể noi tài liệu này được biên soạn theo m ộ t phong cách khác h ẳ n . Một t r o n g n h ữ n g đặc trưngỊ đd là tí n h hệ thống, dầy đủ và được xây dựng theo mức độ tĨẨ/. tháp đến cao và do đó có th ể được sử dụng bởi nhiều đối tượnịg với trình độ và khả năng lập trìn h khác nhau. Cáic khái niệm và kiến thức tro ng tài tiệư được minh họa với 5 nhiều ví dụ, chương trình khác nhau. Các ví dụ được t r i n h bày theo một ý tưởng thông nhất: mô tà các vấn đề đặt ra. các dcìi lượng cần sử dụng trong chương trỉnh, giới thiệu t h u â t toán (nếu càn), Listing của chương trình, giải thích v.v .. T r ê n thực t ế khả nãng lập trinh không th ể tách rời khỏi thực h à n h nên c h ú n g tôi đề nghị các bạn nghiên cứu kỹ các ví dụ được đưa ra tro n g tài liệu. Mục đích chính của tài liệu là eung cấp cho bạn đọc một cách hệ thống và đầy đủ n h ấ t những vấn đề cơ bản liên quan đến ngôn ngừ c. Chính vỉ lý do này tr o n g tài liệu không đề cập đến một số vấn đề nân g cao của c như đồ họa, truy nhập đến phần cứng của máy, các vấn đề về files cũng chỉ được đề cập ở mức độ cơ bản v.v... Tuy vậy, chúng tôi hy vọng rằng tài liệu sẽ là nền móng chác chán và tạo điều kiện dễ dàng để bạn đọc nghiên cứu các vấn đề chưa được đề cập đến ở giai đoạn tiếp theo. T r o n g tài liệu có sử d ụ n g các t h u ậ t ngữ và các ký hiệu c h u ẩ n được công n h ậ n và phổ biến chính thức trong các tài liệu viết về ngôn ngữ c. Các khái niệm và kiến thức về ngôn ng ữ c được đưa ra trong tài liệu này m a n g ý nghĩa chung nià k h ô n g phụ thuộc vào các khả n ă n g riê n g biệt của tùng loại m áy khác nhau. H iện nay, trên thực t ế đang phổ biến nhiều trỉnh biên dịch cao c ấ p được sử d ụ n g t r o n g môi t r ư ờ n g D O S và VHndoivs n h ư n g nhữ ng vấn đề được đưa ra trong tài liệu là những kiến th ứ c bạn không th ể thiếu khi tiến tới làm việc vối nhửrg phiên b ản cao cấp của ngôn ngừ c. Chúc các bạn th à n h công. 6 C hưong I NHỮNG KHÁI NIỆM CO BẢN CỦA NGÔN NGỮ c T r o n g lỉnh vực tin học có một câu ngạn ngữ rất bổ ích dành cho c.ác bạn muốn đi sâu vào kỹ th u ậ t lập trỉnh: "Máy tính chỉ thực h iệ n n h ữ n g điều mà con người mong muốn"... Chính vì vậy đ ể máy tính thực hiện được n h ữ n g điều bạn muốn, b ạn phải chi thị chính xác các thông tin cho máy. Thông thư ờng các t h ô n g tin được đưa vào máy thông qua một chương tr ìn h viết bàn g m ột ngòn ngữ lập trìn h nào đó. Để đạt được điều này người lập trỉn h phải nám chác những khái niệm cơ bản, n h ữ n g nguyên tác lập trình của ngôn ngữ. Một chương trìn h được tạo r a bao gồm các chỉ thị (các lệnh của máy) n h ằ m thực hiện m ột mục đích nào đó và thường được thiết lập dự a trê n cơ sở của m ột t h u ậ t toán đã lập trước. Thuật toán này diễn tả các h à n h động khác nhau để đi đến mục đích cuối cùng. Chương I đưa Ị3. những khái niệm cơ bản của ngôn ngữ c h ằn g số, chú giải, các kiểu dữ liệu, m ả n g và khởi tạo dữ liệu. Trong chương này củng đưa ra nhữ ng thông tin chung n h ấ t về hàm, cấu trú c và cách thực hiện một chương trình viết bàn g ngôn ngừ c. Để thuận tiện cho việc theo dõi các ví dụ tro n g chương trình, trong phần này chúng tôi xin giới thiệu m ột số hàm kết x u ấ t thồng tin vào ra thường được sử dụng - printf, scanf, getchar. N hững bạn đã cd ít nhiều kinh nghiệm tro n g lập trình c cd th ể bỏ qua chương này như ng chác chán r ằ n g m ột lúc nào đd bạn cũng sẽ cần th a m khảo một số thông tin ở đây. 1.1 CÁC KỶ H IỆU CO BẤN CỦA c Việc náni vững các ký hiệu cơ bản của ngôn ngữ là điều đàu tiên không th ể bỏ qua đối với nhữ ng ai muốn đi vào lĩnh vực lập trinh. Các ký hiệu cơ bản bao gồm n h ữ ng ký tự cho phép dùng, trong ngôn ngữ như chữ cái. số và tổ hợp các ký tự khác Ngôn ngừ c sử dụng một số ký tự sau: - 52 chữ cái in thường, in hoa và ký tự a, b, c, ... A, B, c, ... z gạch nối: và - - Các chừ số: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ^ - Các ký tự đặc biệt, được dùng riêng tro ng ngôn ngữ như: . ( ) [ ] + - * / = ^ • ’ ” { } # $ - Một số ký tự khác như dấu cách (ký tự trắng), dấu xuống hàng, dấu canh theo cột (TAB) và chú giải. Dấu xuống h à n g là ký hiệu hay tập hợp các ký hiệu được đặt ở cuối dòng hiện thời và cổ tác dụng di chuyển con trỏ xuống đầu dòng sau. Chu giải được đưa vào chương trình nhầm mục đích giải thích thêm cho chương trình được rõ ràn g hơn và sẽ được đề cập chi tiết trong p h ầ n 1.6. T ro n g c có một số từ được dùng riêng gọi là các từ khđa. Các từ này được dùng để viết và xây dựng các toán lệnh của chương trình. Cần chú ý rằn g trong c các từ này luôn được viết với các chữ th ư ờ n g và không được d ùng chúng cho các m ục đích riêng như đật tên cho các biến, các hàm... Các từ khóa tro ng c chuẩn bao gôm au to case break con tinu e d efault do else entry enum flo at go to for ỉn t long register sizeof static short sw itch ty p ed ef u n io n w h ile v o id asm pascal ada 8 char d o u b le extern if retu rn struct un sig n ed f o r tr a n 1.2 H Ằ N G SỐ H àng số là các thông tin được đưa vào chương trình và có gia trị không đổi trong quá trình thực hiện chương trình. H ằn g riố baơ gôm các số hoặc dãv ký tự cđ giá trị không đổi. Tồn tại 3 loại h ằ n g trong C: hằng số học, hằng ký tự và hằng kiểu chuỗi. Ịĩỉínỉỉ sỏ' học được p h â n ìàni h ai ỉoại: h à n g số nguyên và hầ%g s6 thực. Giá trị của các hằng này bằng giá trị của các số mà chún g biểu diễn. Hang sff nguyên có th ể được biểu díển dưới dạng cơ số 10, cơ số 8 và cơ sô 16. Các hằn g cơ số 10 có th ể là số dương hoặc số âm. Dấu của hằng được viết trước số đó, trong trường hợp số dương, dấu có th ể được bỏ qua. Cần chú ý J à khống dươc dùng sô' 0 như là chừ số đầu tiên của hảng sổ_nguyen. Ví dụ 1.1 + 14 - H ằng số nguyên dương cd giá trị là 14; -12 - Hàng số nguyên âm cd giá trị là -12; 012 - Không phài là số nguyên dương. Các hằng số nguyên cơ số 8 được viết không _có (Mu bằng các chữ số sử dụng trong hệ đếm cơ số 8 - các số từ 0 đến 7. C hữ số đầu tiên trong trường hợp này phải là số 0. Đây chính là nguyên nhân không cho phép sử dụng số 0 như là chừ số điầư tiên của hằng cơ số 10. Ví dụ 1.2 014 - Hằng cơ số 8 với giá trị 12 (cơ số 10); 0114 - Hằng cơ số 8 với giá trị 76 (cơ số 10); Các hằng số nguyên cơ số 16 được viết không có d ấu và 9 luôn bát đầu bởi o x hoặc Ox. Trong hệ dếin cơ số 16 người ta dùng các 30 từ 0 đến 9. Ngoài ra các số từ A đến F hoặc từ o đến f không phân biệt chữ thường hay chừ viết hoa biểu diền các số t ừ ^"0"“đến 15. Ví dụ 1.3 oxc hoặc Oxc - H àng cơ số 16 cd giá trị 12 (cơ số 10); OXFF hoặc Oxff - H àng cơ số 16 có giá trị 255 (cơ số 10); Thông thường các hằng số nguyên được lưu trử vào 2 byte của máy tính. Các hằng này có th ể n h ận các giá trị nguyên trong khoảng -32768 đến +32767. Trong trường hợp chúng ta muốn sử dụn g các hằng sổ với giá trị ở ngoài khoảng này ta cần biểu diễn chúng bằng kiểu long (4 byte). 0 dạng này. sau giá trị của các số ta phải đ ặ t th ê m ký tự L h a y vi dụ: -50000L, -40000L, OXFEOOL. Thực ra cách biểu diễn này sẽ làm cho chương trình được viết trở th à n h rõ ràng hơn, trong trường hợp h ằ n g số cd giá trị vượt quá giá trị cho phép xihưng không được biểu diễn bằng kiểu long máy sẽ tự động chuyển chúng về kiểu này. Hăng số thục là một loại hằng số học khác dùng để biểu diễn các số thực cổ giá trị không đổi và Qhi được viết dưới d ạ i g cơ số 10. Một h ằ n g só thực c d .t h ể được vTết dưới dạng thập phân hay sổ mũ. Ví dụ 1.4 12.0 - H ằng sô' thực dương có giá trị là 12.0; 0.123 - H ằng số thực dương có giá trị là 0.123; -12.15 - H ằng số thực âm có giá trị là -12.15. Các h ằn g số thực có giá trị r ấ t lớn hay rấ t nhỏ được biểu diễn dưới dạng cơ số mũ. . I 'U i Vi d u 1.5 1 .2E1 hoặc 1.2el Hằng số thực với giá trị 12; 120E- hoặc e- 1 - H ằng số thực với giá trị 12; 0.123E2 - H ằng số thực với giá trị 12.3. Hấỉìỉỉ ký tư bao gòni các ký tự đơn được viết trong dấu nháy đơn, vị dụ Mỗi ký tự có giá trị bàng mã ASCĨI của nố ímã ASCỈI là số thứ tự tương ứng của ký tự trong bảng mà ASCĩĩ). ví dụ theo bảng này ’A ’ có giá trị là 65 và ’0 ’ có giá trị là 48. Một ký tự cd th ể được biểu diễn bằng 2 cách: bằng tên của ký tự và bằng mã A S C ĩ ỉ của kv tự. Chẳng hạn để niô tả hằng ký tự A t a có t h ể viết ’A’ hoặc ’Ịổ5’. Càn chú ý rằ n g mã A S C I Ỉ tro n g trường hợp này phải được viết sau dấu \ và cũng phải đ ậ t trong dấu nháy. Khi sử dụng hằng ký tự t a củng phải chú ý đến sự khác biệt giữa h ằ n g số học và hằng ký tự. Một hằng số học có giá trị bằng giá trị của số mà nđ biểu diễn, trong khi hằng ký tự có giá trị bằng mã A S C I I của nó. v í dụ hằng số 0 cd giá trị là 0 còn hàng ký tự ' 0 ’ có giá trị là 48. Hăriịĩ kiều chuỗi là một dãy ký tự liên tục đưỢc đặt trong dấu nháy kép", ví dụ "This is a s tr in g ” là một hằng kiểu chuỗi. Độ dài của hằng kiểu chuỗi (số lượng các ký tự trong chuỗi) là không hạn chế và cố th ể chỉ chứa một ký tự hoặc không chứa bất cứ ký tự nào. Trong quá trìn h biên dịch, sau ký tự cuổi cùng của hằng kiểu chuỗi, trỉnh biên dịch tự động đặt thêm một byte cd giá trị là 0 (NU LL). Để phân biệt với ký tự Byte này được viết dưới d ạ n g '\0 \ N hư vậy ký tự này được dùng để xác định vị trí cuối cùng của chuỗi. Các ký tự dùng riêng (là n h ữ n g ký tự không in ra được) có th ể được sử dụng như những ký tự bình thường nhưng trước chúng phải đặt ký tự \. Chẳng hạpi ký tự \ cd th ể được sử dụng trong chuỗi nếu viết \\. '\, 11 Ví dụ 1.6 "\\ví dụ ve \"hầng chuỗi kiểu chuỗi 1" trong c\\" sẽ b iểu diễn cho hàng kiểu chuỗi \vi dụ ve "hằng kiểu chuỗi" trong Ci được viết trong chương trình. H ằng kiểu chuỗi được lưu trữ trong bộ nhớ của m á y tính như là một m ảng một chiều với phần tử cuối cùng là \0 do trình biên dịch tự động đưa vào. Như vậy số phần' tử củ a mảng luôn lớn hơn 1 so với số ký tự của chuỗi. 0 đâv ta củng phải tự và chuỗi ký tự, chẳng xác định ở chỗ xâu ký m ảng gồm hai ký tự ’A ’ chú ý rằng cd sự khác biệt giữa hằng ký hạn ’A ’ và "A". Sự khác biệt này được tự "A" có th ể được xem n h ư là một và \ ồ \ Có một sô ký tự thuộc kiểu khồng in ra được (có giá trị A S C I I từ 0 đến 31) n h ư n g trìn h biên dịch có th ể nhận biết được các ký tự này. thông qua một cặp ký tự thông thường (cặp này luôn luôn bát đầu bằng ký tự \). Các ký tự này thường được dùng để điều khiển m àn hình hoặc máy in. Bảng 1.1 mô tả một số ký tự đặc biệt thư ờng dùng: Bảng ỈA Tác dimg Mô tà trong c Byte trắng Lùi Trờ về đầu dòng Gaiứi theo cột Xuống dòng mói Xuống ưang mói Tín hiệu chuông Dấu nháy đon Dấu nháy kép Dấu hỏi Mã ký tự (bít patten) 12 \0 \b \r \t \n \f \a \’ \" \? \ooo Mã ASCII 0 8 B 9 10 12 '7 39 34 63 K ý hiệu NUL (Null Byte) BS (Backspace) CR (Cartage) T (Horizontal tab) ML (New line) FF (Fomi Feed) Bel (Bdl) (jingle quote) (Double quote) 7 Mả ký tự \ooo được dùng để biểu diễn một ký tự trong bảng A S C Ĩ Ỉ Dằng các số trong hệ đếm cơ số 8 . Trong trường hỢp này m ã ký tự bao gồm kv tự điều khiển và mã cơ 30 8 của ký tự. Chẳng hạn hằng kiểu chuỗi "{ABCD}" có thể được viết dưới d ạ n g "\173ABC\175\ Việc sử dụng các ký tự đậc biệt trong bảng L ỉ sẽ được giải thích cụ th ể frong các phần sau của giáo trình. Ngoài các ký tự này, t ấ t cả các ký tự khác sẽ không thay đổi ý nghĩa của chúng nếu được viết sau ký tự \. Nói cách khác Ví’ có thể được viết dưới dạng '\k \ 1.3 B IẾN T ấ t cả các chương trình được viết trong máv tính đều nhằm mục đích cuối cùng là xử lý thông tin. N hững thông tin có giá trị không đổi trong suốt quá trình thực hiện chương trỉnh được biểu diễn qua các hằng (phân 1.2). Các thông tin mà giá trị có t h ể thav đổi được gọi là biến. Biến là một đại lượng thuộc một kiểu nhất, định (số nguyêri, số thực v.v... m à giá trị của nd cd thể thay đổi trong quá trinh thực hiện chương trình. Giá trị của biến được sử dụng thông q u a tên của biến. Thực ra biến là một ô ký ức (hoặc một số ô kv ức) trong bộ nhớ dùng để lưu trữ giá trị tức thời của nó. Bởi vì tấ t cả các ô kỹ ức của bộ nhớ đều có một địa chỉ n h ất định, do đó việc sử dụn g tên của một biến hoàn toàn đồng n h ấ t với việc truy nhập một địa chỉ tron g bộ nhớ và giá trị chứa trong địa chỉ đó. Khi đặt tên cho biến càn phải thông qua các quy tác sau: 1. Tên bao gồm một dãy các chữ cái và số và phải bắt đầu bằng chữ cái. Có thể dùng ký tự gạch dưới (_) để đặt tên cho biến, ví dụ h o j e n là một tên cho phép. Cũng cần lưu ý rằng độ dài của các tên biến cũng phải hạn chế và điều đđ hoàn toàn phụ thuộc vào các trình biên dịch khác nhau. 13 2. Tên của biến không được trùn g với từ khda. Vi dụ không được dùng for, while, unsigned v.v dể đặt tồn cho biến, 3. Trong ngôn ngữ c cd sự khác biệt giửa chử thường và chữ hoa. Như vậy FOR, W H IL E có th ể được d ù n g để đặt tên cho biến vì chúng không tr ù n g với các từ khóa for, while. Cũng vậy hai biến N A M E và nam e là hoàn toàn khác nhau. Về nguyên tắc ta có th ể dùng một tên bất kỳ để đặt cho biến, tuy vậy để chương trỉnh được dễ hiểu th ông thường ta nên dùng các tên có th ể biểu diễn tính chất vật lý của một biến ở một mức độ ĩiào đó. Ví dụ 1.7 count - Tên của biến được sử dụng làm bộ đếm center X, center y - Tọa độ X, y của tâm vòng tròn. 1.4. CẤC LOẠI DỮ LIỆU VÀ CÁCH KHAI BÁO T ấ t cả các biến trong ngôn ngữ c trước khi sử dụng đều phải được khai báo. Tồn tại nhiều kiểu biến tro n g c và qua việc khai báo t a đã định ra kích thước của biến, tức là số ìượng byte cần d ùng để lưu trữ giá trị của biến trong bộ nhớ. Việc khai báo biến cd cú pháp sau: KiềuJ>iẽn Tên_bỉễn; Trong c sử dụng một số từ khóa để khai báo kiểu cùa biến. Các từ khóa đó là: char - Khai báo cho dữ liệu kiểu ký tự; int - Khai báo cho dử liệu kiểu số nguyên; float - Khai báo cho dữ liệu kiểu số thực; double - Khai báo cho dữ liệu kiểu số thực với độ chính xác gấp đôi. Ví dụ, nếu hai biến i, j sẽ nhận giá trị là các số nguyên hav 14 i. j là k i ể u int. c ò n b i ế n -V n h ậ n g i á trị t h ự c - float t hi c h ú n g rfí* được khai báo như sau: int i, j; íloat x; Như được chi ra tro n g ví dụ trên, các biến có cùng kiểu có th ế được khai báo sau từ khóa (kiểu của biến) và được viết cách n hau bởi d ấ u phẩy. T ấ t nhiên chúng cũn g có th ể được khai báo trê n các dòng khác nhau, chảng hạn: int i; int j; float x; Loại biến int cố t h ể được khai báo chính xác hơn nếu ta dùng thêm các từ k hóa sau; s h o r t - Dùng để khai báo biến với kích thước nhỏ hơn loại in t th ư ờ n g dùng. T r ê n các máy 16 bits, short có kích thước giống int\ lo n g - Dùng đ ể khai báo biến với kích thước cd độ dài lớn gấp 2 lần. u n s i g n e d - D ù ng để khai báo biến với giá trị không âm. Khi sử dụng các từ khóa trên, từ khóa int có th ể được bỏ qua; tron g trư ờng hợp được sử dụng, từ khda int phải được viết sau các từ khda trên . Chẳng hạn: short int i; tương đương với short i; long int j; tương đương với long j; unsigned int k; tương đương với unsigned k; Ngoài ra long có th ể được đặt trước floaty khi đó biến được khai báo theo kiểu double (chú ý tro ng trư ờng hợp này từ khóa flo at không được bỏ qua). Qua việc khai báo biến chúng ta đã cà n thiết trong m áy để lưu giữ giá trị dành riêng một số byte của biến và cũng thông 15 qua đó chúng ta đã xác định giá trị lớn n h ất m à biến có thể nhận được. Kích thước của biến í tính bằng bxte) phụ thuộc vào kiểu của biến, ỉoại tr i n h biên dịch và loại máy tín h . T ro n g bảng 1.2 cd đưa ra kích thước của một số kiểu biến cho từng loại máy tính. Bàng 1.2 Kích thước tính bằng bỵte Kiều biến char mt short long float double Motorola 6800 Intel 80280 IBM 360/370 8 32 16 32 32 3? 8 16 16 32 32 64 8 32 16 32 32 64 Đối với các loại máy 16 bit các biến có kích thước được chỉ ra trong bảng ỉ . 3. Bảng Ị.3 Kiều PCích thước (bit) Giá ữị char mt hoặc short ^ unsignal mt 0 ■ long mt float u 'í double hoặc long float 8 16 16 32 32 64 [0, 4-255] [-32768, 4-32767] [0, 65535] [-2e9, +2e9] [± lOe-37, 10e37] [± lOe-307, lOe 30^] Đối với m ột vài tr ì n h biên dịch, nếu giá trị của h ằ n g số nguyên vượt quá giá trị lớn n h ấ t của kiểu int^ h ằng số sẽ được t ự động c h u y ể n về k iể u long và t ư ơ n g tự k iể u float th à n h double. 16 \ / { 1.5 MẤNG Mảng là tập hợp các biến cùng kiểu được phân bố liên tục trong bộ nhớ và cũng như biến, m ảng được gọi qua tên của nđ. Tèn của m ả n g cũng được đặt như tên của biến và mỗi biến trong m ản g là một phàn tử của mảng. Cũng như biến, trước khi được sử dụng m ảng cũng phải được khai báo. Việc khai báo m àng tuân theo cú pháp sau; Kiểu_mảng íênjnàng [hiểu thức]; Biểu thức được đặt trong dấu ngoặc vuông [] dùng để xác định số phần tử của m ảng và phải là một hằng số và thường phải được viết ở dạng cơ số 10. Sau đây là một số ví dụ về khai báo mảng: Ví dụ 1.8 int X [5]: char a[3], b[5]; -m ảng X với 5 phần tử thuộc kiểu ínt: -m ảng a với 3 phần tử thuộc kiểu char và mảng b với 5 phần tử thuộc kiểu char. float c[100]; m ảng c với 100 phần tử thuộc kiểu float. Mỗi phàn tử của m ảng có thể được xem và xử lý như là niột biến, do đó chúng cd th ể nhận các giá trị khác nhau và tham gia vào các phép toán. T ất cả các phàn tử của m ảng đều cố cùng một tên, đó là tên mảng. Để truy nhập đến một phần tử nào đó của m ả n g t a phải dùn g tê n của m ả n g và chỉ số (index) của phần tử đó tro n g mảng. Chỉ số của một phần tử chỉ ra vị trí của phần tử đó trong mảng. Cần chú ý rằ n g trong c, phần tử đầu tiên của m ảng bao giờ cũng có chỉ số 0 , như vậy x[ l] sẽ là phần tử thứ 2 của mảng. Qua việc khai báo int x[5], 5 p h ần tử của m ả n g X sẽ x[2], x[3], x[4J. Trong bộ nhớ của máy các phàn tử in à y sệ sạp :Ịcốp theo^thứ ,tự sau: 2 byte x[0] x[l] x[2] xp] x[4] Thông thường các trỉnh biên dịch của c không kiểm tra giá trị được gán cho chỉ sô' của các phần tử của m ảng cố vượt quá kích thước của mảng hay không. Điều này gây ra lỗi r ấ t khó phát hiện trong khi lập trình bởi vì các phần tử với chỉ số vượt ra giới hạn cho phép sẽ thuộc về các ô ký ức trong bộ nhớ có chứa các giá trị ngẫu nhiên. Trong c có thể định nghĩa nhiều kiểu mảng. Mảng một chiều là mảng trong đó các phần tử được phân biệt với nhau bằng một chỉ số, ví dụ x[5] là mảng một chiều. Nếu để phân biệt các phàn tử của mảng mà phải dùng đến 2 chỉ số, mảng được gọi là 2 chiều. Ví dụ 1.9 int mat[3][3]; Mảng này gồm có 9 phần tử và tên của các phần tử lần lượt là: mat[0] [0], m a t[0] [ 1], m at[0] [2], m a t[l][ 0], m a t[ l] [ l] , m a t[ l] [ 2], mat[2][0], m a t[2][l], m at[2][2]. Cũng như trong toán học, chỉ số đàu của phần tử dùng để chỉ h àng và chỉ số thứ hai dùng để chỉ cột. Các phần tử của m ảng được sắp xếp tro n g bộ nhớ theo thứ tự sau: m a t[ l][ 0] ................. mat[2][2] m a t[0][0] 18. m a t[0][l] m a t[0][2] Bằng cách tương tự ta cd th ể định nghía một m ảng nhiều chiều, tro n g đó số các chi số hoàn toàn phụ thuộc vào loại trình biên dịch cũng như bộ nhớ còn giải phóng của máy. Kích thước cần thiết cho một m ảng bàng tích số các phần tử của ĩiìảng và kích thước của mỗi phàn tử. v í dụ nếu kiểu của m àn g x[5][2] là float thì kích thước của m ảng sẽ là 5*2*4 = 40 byte. Theo định nghỉa, t a củng có th ể định nghía một m ảng thuộc kiểu char, ví dụ: char n a m e [ 12]; M ảng thuộc kiểu char là một dãy liên tục các ký tự, trong m ảng này ta cđ thể viết tện người, tên sách v.v. Một dăy liên tục các ký tự được gọi là biến kiểu chuỗi. Tương tự như các hằng kiểu chuỗi, các biến kiểu chuỗi phải được kết thúc bằng byte trán g (ký tự '\0'). Trong ví dụ trên m ảng name sẽ được gọi là biến kiểu chuỗi nếu m ản g cd chứa 11 ký tự và ký tự cuối cùng (chỉ số 11) là byte trắng. Đây cũng là nguyên nhân thường phát sinh ra lỗi vỉ khi sử dụng m ảng người lập trỉnh thường quên p h ần tử cuối cùng của m ảng khi khái báo kích thước của mảng. 1.6 CHÚ GIẨI T ấ t cả các chương trình do những người lập trình cổ kinh nghiệm viết bao giờ cũng được giải thích bằng chú giải. Mục đích của việc đưa chú giải vào chương trìn h là để làm rõ thêm ý nghía của các hàm, câu lệnh và giải thích ý nghĩa của các biến được sử dụng, do đd chú giải sẽ làm cho chương trìn h thêm dễ hiểu và tiện cho việc tìm hiểu chương trình. Trong c chú giải là m ột đoạn văn bản được viết giữa 2 ký hiệu /* (bát đàu) và */ (kết thúc), trong đó hai ký tự / và * phải được viết cạnh nhau. Ví dụ /* H àm vẽ vòng tròn */ là một chú giải trong c. Chú giải cố th ể được đặt ở bất cứ vị trí nào trong chương 19 trinh và khi biên dịch không chiếm bất cứ ô ký ức n,ào trong bộ nhớ. Điều đố cho phép ta cố th ể đưa các chú giải vdi độ dài bất kỳ vào chương trình. TUy vậy cũng không nên lạ m dụng điều này bởi vì các chú giải dài dòng chi làm cho c h ư ơ n g trinh thêm phức tạp và rắc rối. 1.7 CẤU TRÚC CỦA CHƯONG t r ì n h C Một chương trỉnh viết bằng ngôn ngữ c phải tu â n theo các nguyên tắc, yêu cầu riêng của m ình khi thiết lập. T ấ t cả các chương trình viết bằng ngôn ngữ c đều được xâv d ự n g từ các chương trình con. Các chương trìn h này được gọi là hàm. Số lượng hàm trong chương trỉnh là không hạn chế n h ư n g chương trỉn h bao giờ cũng phải cd ít n h ấ t là một hàm. Có m ột hàm (và chi một) trong số các hàm được định nghỉa như là hàm chính và qua hàm này ta cố thể liên hệ với hệ điều hàn h cũng như với các hàm khác của chương trình. Trong quá trình thực hiện chương trình, thông qua các hàm ta có thể trao đổi thông tin giữa chúng. Nhìn m ột cách tổ n g quát, một chương trìn h viết bằng ngôn ngữ c phải có cấu trú c như sau: Khai báo các hàm th ư viện chuấn sẽ sử dụng Định nghĩa các biến ngoài Hàm chính (main) Hàm ỉ Hàm 2 Trong khi lập trìn h ta cổ thể sử dụ ng một số hàm của thư viện chuẩn. Các h àm này thường được thiết lập sẵn để giải quyết một số bài toán nào đd mà không cần làm lại mỗi khi sử dụng. Các hàm này được khai báo t r o n g thư viện chuẩn và được phân bố kèm theo trỉnh biên dịch. Việc khai báo các hàm thư viện chuẩn thường đặt ở đàu chương trình thông qua việc sử dụng chi thị ^includ e. Chỉ thị này sẽ được đề cập chi tiết ở phần 5.4. Các File cđ chứa các h àm này được gọi lầ File tiêu 20
- Xem thêm -

Tài liệu liên quan