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

27 48 0
Ngôn ngữ lập trình c   học và sử dụng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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 KHOA C Ô NG NGHÊ THÔNG TIN TS DƯƠNG TỬ CƯỜNG NGƠN NCỮ LẬP TRÌNH c HỌC sử DỤNG (In lần thứ ba có chỉnh lý) í.v\; : ‘C-: '_.:A NOi ' • ^ìi Thíị i - v - ổ o / m ì | 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 ỉà ngôn ngừ "không tru y ề n th ố n g ” theo p h t sinh trin h p h t tr iể n Lịch sử phát triể n ngôn ngữ 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 hệ điều hành khác - hệ điều hành M U L T IC S , hệ điều hành với phân chia thời gian Hệ điều hành M Ư L T Ỉ C S kết hợp tác A T & T Bell Laboratories, General Electric Massachusetts Institute o f Techonology Trên thực tế nguyên mẫu hệ thống M Ư L T ĨC S đáp ứng cầu đặt n g lại tỏ chưa th uận tiện khó khăn việc sừ dụng Đây nguyên nhân để A T iSi T đình chị khơng tiếp tục phát triể n hệ thống Ảnh hưởng ý tư n g M Ư L T ỈC S , Ken Thom người th a m gia thiết kế hệ thống xây dựng hệ điều hành khác, mà tro ng điều khác biệt với M Ư L T ỈC S th u ậ n tiện dễ dàng sử dụng Hệ điều hành phiên đàu tiên U N IX Thomcon v iế t t r ê n n g ô n ngữ Assemblly d n h cho m áy P D P - vào n ám 1969 Mặc dù hệ điều h n h ban đầu chưa cho phép làm việc tro n g chế độ đa người sử dụng tỏ có hiệu quả, th u ậ n tiện xứng đáng phát triể n tr ê n n h ữ n g máy tính điện tử khác Để thực điều này, năm 1970 Thomcon xây dựng ngôn ngữ hệ thống (thông dịch) với tên gọi ngôn ngữ B Khi xây dựng ngỏn ngữ này, ông xuất p h t từ ngôn ngữ khác - ngôn ngừ BCPL viết vào n ăm 1969 M artin Richards Với hệ thông dịch hệ điều hàn h U N IX đưa sang máy vi tính PDP-11 vào nảm 1971 Trong giai đoạn này, Dennis Ritchie - n h lập trình tiếng đâ th a m gia vào tập th ể C.ÍÌC iiíìà iTip trinh hệ thống Năm 1972 Dennis Ritchie cac cộng phát triển ngôn ngữ B th àn h ngôn ngữ c Bàng cách cặp U N IX - c tỏ rõ nhừng khả n ă n g có minh kỹ th u ậ t ìập trình Với ngơn ngữ c hệ điêu hàn h Ư N ĨX xây dựng vào nãm 1973 xem hệ điều hành tương thích (Portable Operating System) đa người sử dụng N ăm 1975 phiên thứ hệ điều h n h U N I X b đầu phổ biến rộng ,rãi Một điểm đặc biệt cần lưu ý h ầ u toàn hệ điều hành UNIX, bao gồm tr in h điều k h iể n thiết bị, trình biên dịch c viết ngòn ngữ c T ro n g thời gian ngôn ngủ c b ắ t đầu phổ b iế n bán tr ê n thị trường Cho đến n ã m 1978 Brian K erníghan 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 xem c thức r a đời Cùng v-ới đời phát triển kỹ t h u ậ t vi hệ vi xử lý 8080 Z80) nhiều trình biên dịch c phàn đáp ứng nhu cầu thực tế kh ả n ăn g biên dịch v.v Ngày tối thiểu ta có th ể đến 17 trình biên dịch c thực phổ biến PC m ạch (các đời tốc độ, đếm thị trường Ngôn ngừ c ngôn ngừ đ án h giá cao thực t ế nhiều nguyên nhân: • Khả n ă n g tương thích nhiều loại máy khác có t h ể xem ưu điểm quảng cáo nhiều n h ấ t ngôn ngữ c Một chương trình viết tuân thủ theo nguyên tác củ a c trá n h sử dụ ng đặc tính mở rộng thư viện phụ thuộc trỉnh biên dịch đặc biệt, cd th ể xem 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 m a n g s a n g sử dụ ng tr o n g môi trường tr in h biên dịch/hệ điều hành máy tính khác Đây đặc tính đánh giá ngày cao ngơn ngữ c • Một ưu điếm thứ hai c lã súc tích ngồn ngữ Cú pháp ngôn ngử c ban đàu chi d ự a 27 từ khóa Điều làm cho ngôn p h t triể n thực cách dễ dàng tính lớn máy vi tính đọng đơn giản ngữ có th ể má}^ • Ngơn ngữ c đưa khả cao cho lập trỉnh có cáu trú c , cấu truyền đạt, truyền thông (Comniunication) th u ậ n tiện đơ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 ý đến hiệu \iệc kết sinh mã (Code Generation) Điều bắt nguồn từ việc ngôn ngữ c s t với cấu trúc ký ức ghi phần cứng, yếu tố nià dỉựa ngôn ngữ thiết kế phát triển Người ta t h n g xem c n h 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 thuận tiện sử dụng phương pháp lập t r ì n h có cấu trúc Tuy vậý ngồi nhừng chức n ă n g bậc c a o đó, c lại cho phép thực 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ê rằn g cổ đến 90% 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ỉnh vực liên iquan đến phần cứng toán điều khiển Điều chứriig tỏ với khả ngôn ngữ bậc cao, c cd thiể đ ạt đến kết đặc trư n g cho ngôn ngữ Assembly điều kiện t h u ậ n tiện, dễ dàng xây dựng sửa đổi chươmg trỉnh Miặt dù thị trư n g tồn nhiều tài liệu viết ngôn ngữ c có th ể noi tài liệu 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 tí n h hệ thống, dầy đủ xây dựng theo mức độ tĨẨ/ tháp đến cao có th ể sử dụng nhiều đối tượnịg với trình độ khả lập trìn h khác Cáic khái niệm kiến thức tro ng tài tiệư minh họa với nhiều ví dụ, chương trình khác Các ví dụ t r i n h bày theo ý tưởng thông nhất: mô tà vấn đề đặt dcìi lượng cần sử dụng chương trỉnh, giới thiệu t h u â t tốn (nếu càn), Listing 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 đề nghị bạn nghiên cứu kỹ ví dụ đưa tro n g tài liệu Mục đích tài liệu eung cấp cho bạn đọc cách hệ thống đầy đủ n h ấ t vấn đề liên quan đến ngôn ngừ c Chính vỉ lý tr o n g tài liệu không đề cập đến số vấn đề nân g cao c đồ họa, truy nhập đến phần cứng máy, vấn đề files đề cập mức độ v.v Tuy vậy, hy vọng tài liệu móng chác chán tạo điều kiện dễ dàng để bạn đọc nghiên cứu vấn đề chưa đề cập đến giai đoạn T r o n g tài liệu có sử d ụ n g t h u ậ t ngữ ký hiệu c h u ẩ n công n h ậ n phổ biến thức tài liệu viết ngơn ngữ c Các khái niệm kiến thức ngôn ng ữ c đưa tài liệu m a n g ý nghĩa chung nià k h ô n g phụ thuộc vào khả n ă n g riê n g biệt tùng loại m áy khác H iện nay, thực t ế phổ biến nhiều trỉnh biên dịch cao c ấ p sử d ụ n g t r o n g môi t r n g D O S VHndoivs n h n g nhữ ng vấn đề đưa tài liệu kiến th ứ c bạn không th ể thiếu tiến tới làm việc vối nhửrg phiên b ản cao cấp ngôn ngừ c Chúc bạn th n h công 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ó câu ngạn ngữ bổ ích dành cho c.ác bạn muốn sâu vào kỹ th u ậ t lập trỉnh: "Máy tính thực h iệ n n h ữ n g điều mà người mong muốn" Chính đ ể máy tính thực n h ữ n g điều bạn muốn, b ạn thị xác thơng tin cho máy Thơng thư ờng t h ô n g tin đưa vào máy thơng qua chương tr ìn h viết bàn g m ột ngòn ngữ lập trìn h Để đạt điều người lập trỉn h phải nám chác khái niệm bản, n h ữ n g ngun tác lập trình ngơn ngữ Một chương trìn h tạo r a bao gồm thị (các lệnh máy) n h ằ m thực m ột mục đích thường thiết lập dự a trê n sở m ột t h u ậ t toán lập trước Thuật toán diễn tả h n h động khác để đến mục đích cuối Chương I đưa Ị3 khái niệm ngôn ngữ c h ằn g số, giải, kiểu liệu, m ả n g khởi tạo liệu Trong chương củng đưa nhữ ng thông tin chung n h ấ t hàm, cấu trú c cách thực chương trình viết bàn g ngôn ngừ c Để thuận tiện cho việc theo dõi ví dụ tro n g chương trình, phần chúng tơi xin giới thiệu m ột số hàm kết x u ấ t thồng tin vào thường sử dụng - printf, scanf, getchar N hững bạn cd nhiều kinh nghiệm tro n g lập trình c cd th ể bỏ qua chương ng chác chán r ằ n g m ột lúc đd bạn cần th a m khảo số thông tin 1.1 CÁC KỶ H IỆU CO BẤN CỦA c Việc náni vững ký hiệu ngôn ngữ điều đàu tiên không th ể bỏ qua nhữ ng muốn vào lĩnh vực lập trinh Các ký hiệu bao gồm n h ữ ng ký tự cho phép dùng, ngôn ngữ chữ số tổ hợp ký tự khác Ngôn ngừ c sử dụng số ký tự sau: - 52 chữ in thường, in hoa ký tự a, b, c, A, B, c, z gạch nối: - - Các chừ số: 0, 1, 2, 3, 4, 5, 6, 7, 8, ^ - Các ký tự đặc biệt, dùng riêng tro ng ngôn ngữ như: ( ) [ ] + - * / = ^ • ’ ” { } # $ - Một số ký tự khác dấu cách (ký tự trắng), dấu xuống hàng, dấu canh theo cột (TAB) giải Dấu xuống h n g ký hiệu hay tập hợp ký hiệu đặt cuối dòng thời cổ tác dụng di chuyển trỏ xuống đầu dòng sau Chu giải đưa vào chương trình nhầm mục đích giải thích thêm cho chương trình rõ ràn g đề cập chi tiết p h ầ n 1.6 T ro n g c có số từ dùng riêng gọi từ khđa Các từ dùng để viết xây dựng tốn lệnh chương trình Cần ý rằn g c từ viết với chữ th n g không d ùng chúng cho m ục đích riêng đật tên cho biến, hàm Các từ khóa tro ng c chuẩn bao gôm au to case break tinu e d efault 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 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ố thơng tin đưa vào chương trình có gia trị khơng đổi q trình thực chương trình H ằn g riố baơ gơm số dãv ký tự cđ giá trị không đổi Tồn loại h ằ n g C: số học, ký tự kiểu chuỗi Ịĩỉínỉỉ sỏ' học p h â n ìàni h ỉoại: h n g số nguyên hầ%g s6 thực Giá trị giá trị số mà chún g biểu diễn Hang sff ngun có th ể biểu díển dạng số 10, số sô 16 Các hằn g số 10 có th ể số dương số âm Dấu viết trước số đó, trường hợp số dương, dấu có th ể bỏ qua Cần ý J khống dươc dùng sô' chừ số hảng sổ_nguyen Ví dụ 1.1 + 14 - H ằng số nguyên dương cd giá trị 14; -12 - Hàng số nguyên âm cd giá trị -12; 012 - Không phài số nguyên dương Các số ngun số viết khơng _có (Mu chữ số sử dụng hệ đếm số - số từ đến C hữ số trường hợp phải số Đây ngun nhân khơng cho phép sử dụng số chừ số điầư tiên số 10 Ví dụ 1.2 014 - Hằng số với giá trị 12 (cơ số 10); 0114 - Hằng số với giá trị 76 (cơ số 10); Các số nguyên số 16 viết khơng có d ấu bát đầu o x Ox Trong hệ dếin số 16 người ta dùng 30 từ đến Ngoài số từ A đến F từ o đến f không phân biệt chữ thường hay chừ viết hoa biểu diền số t ^"0"“đến 15 Ví dụ 1.3 oxc Oxc - H àng số 16 cd giá trị 12 (cơ số 10); OXFF Oxff - H àng số 16 có giá trị 255 (cơ số 10); Thơng thường số nguyên lưu trử vào byte máy tính Các có th ể n h ận giá trị nguyên khoảng -32768 đến +32767 Trong trường hợp muốn sử dụn g sổ với giá trị khoảng ta cần biểu diễn chúng kiểu long (4 byte) dạng sau giá trị số ta phải đ ặ t th ê m ký tự L h a y vi dụ: -50000L, -40000L, OXFEOOL Thực cách biểu diễn làm cho chương trình viết trở th n h rõ ràng hơn, trường hợp h ằ n g số cd giá trị vượt giá trị cho phép xihưng không biểu diễn kiểu long máy tự động chuyển chúng kiểu Hăng số thục loại số học khác dùng để biểu diễn số thực cổ giá trị không đổi Qhi viết d i g số 10 Một h ằ n g só thực c d t h ể vTết 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ị 12.0; 0.123 - H ằng số thực dương có giá trị 0.123; -12.15 - H ằng số thực âm có giá trị -12.15 Các h ằn g số thực có giá trị r ấ t lớn hay rấ t nhỏ biểu diễn dạng số mũ I 'U i Mả ký tự \ooo dùng để biểu diễn ký tự bảng A S C Ĩ Ỉ Dằng số hệ đếm số Trong trường hỢp m ã ký tự bao gồm kv tự điều khiển mã 30 ký tự Chẳng hạn kiểu chuỗi "{ABCD}" viết d n g "\173ABC\175\ Việc sử dụng ký tự đậc biệt bảng L ỉ giải thích cụ th ể frong phần sau giáo trình Ngồi ký tự này, t ấ t ký tự khác không thay đổi ý nghĩa chúng viết sau ký tự \ Nói cách khác Ví’ viết dạng '\k \ 1.3 B IẾN T ấ t chương trình viết máv tính nhằm mục đích cuối xử lý thơng tin N hững thơng tin có giá trị khơng đổi suốt q trình thực chương trỉnh biểu diễn qua (phân 1.2) Các thơng tin mà giá trị có t h ể thav đổi gọi biến Biến đại lượng thuộc kiểu nhất, định (số nguyêri, số thực v.v m giá trị nd cd thể thay đổi trinh thực chương trình Giá trị biến sử dụng thông q u a tên biến Thực biến ô ký ức (hoặc số ô kv ức) nhớ dùng để lưu trữ giá trị tức thời Bởi tấ t kỹ ức nhớ có địa n h ất định, việc sử dụn g tên biến hoàn toàn đồng n h ấ t với việc truy nhập địa tron g nhớ giá trị chứa địa Khi đặt tên cho biến càn phải thông qua quy tác sau: Tên bao gồm dãy chữ số phải bắt đầu chữ Có thể dùng ký tự gạch (_) để đặt tên cho biến, ví dụ h o j e n tên cho phép Cũng cần lưu ý độ dài tên biến phải hạn chế điều đđ hồn tồn phụ thuộc vào trình biên dịch khác 13 Tên biến không trùn g với từ khda Vi dụ không dùng for, while, unsigned v.v dể đặt tồn cho biến, Trong ngôn ngữ c cd khác biệt giửa chử thường chữ hoa Như FOR, W H IL E có th ể d ù n g để đặt tên cho biến chúng khơng tr ù n g với từ khóa for, while Cũng hai biến N A M E nam e hoàn toàn khác Về nguyên tắc ta có th ể dùng tên để đặt cho biến, để chương trỉnh dễ hiểu th ông thường ta nên dùng tên có th ể biểu diễn tính chất vật lý biến mức độ ĩiào Ví dụ 1.7 count - Tên biến sử dụng làm đếm center X, center y - Tọa độ X, y tâm vòng tròn 1.4 CẤC LOẠI DỮ LIỆU VÀ CÁCH KHAI BÁO T ấ t biến ngôn ngữ c trước sử dụng phải khai báo Tồn nhiều kiểu biến tro n g c qua việc khai báo t a định kích thước biến, tức số ìượng byte cần d ùng để lưu trữ giá trị biến 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 số từ khóa để khai báo kiểu cùa biến Các từ khóa là: char - Khai báo cho liệu kiểu ký tự; int - Khai báo cho dử liệu kiểu số nguyên; float - Khai báo cho liệu kiểu số thực; double - Khai báo cho liệu kiểu số thực với độ xác gấp đơi Ví dụ, hai biến i, j nhận giá trị số nguyên hav 14 i j 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í* khai báo sau: int i, j; íloat x; Như chi tro n g ví dụ trên, biến có kiểu có th ế khai báo sau từ khóa (kiểu biến) viết cách n hau d ấ u phẩy T ấ t nhiên chúng cũn g có th ể khai báo trê n dòng khác nhau, chảng hạn: int i; int j; float x; Loại biến int cố t h ể khai báo xác ta dùng thêm từ k hóa sau; s h o r t - Dùng để khai báo biến với kích thước nhỏ loại in t th n g dùng T r ê n 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 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 từ khóa trên, từ khóa int có th ể bỏ qua; tron g trư ờng hợp sử dụng, từ khda int phải viết sau từ khda 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 long có th ể đặt trước floaty biến khai báo theo kiểu double (chú ý tro ng trư ờng hợp từ khóa flo at khơng bỏ qua) Qua việc khai báo biến cà n thiết m áy để lưu giữ giá trị dành riêng số byte biến thơng 15 qua xác định giá trị lớn n h ất m biến nhận Kích thước biến í tính bxte) phụ thuộc vào kiểu biến, ỉoại tr i n h biên dịch loại máy tín h T ro n g bảng 1.2 cd đưa kích thước số kiểu biến cho loại máy tính Bàng 1.2 Kích thước tính bỵte Kiều biến char mt short long float double Motorola 6800 Intel 80280 IBM 360/370 32 16 32 32 3? 16 16 32 32 64 32 16 32 32 64 Đối với loại máy 16 bit biến có kích thước bảng ỉ Bảng Ị.3 Kiều PCích thước (bit) Giá ữị char mt short ^ unsignal mt ■ long mt float u 'í double long float 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, giá trị h ằ n g số nguyên vượt giá trị lớn n h ấ t kiểu int^ h ằng số t ự động c h u y ể n k iể u long t n g tự k iể u float th n h double 16 \ / { 1.5 MẤNG Mảng tập hợp biến kiểu phân bố liên tục nhớ biến, m ảng gọi qua tên nđ Tèn m ả n g đặt tên biến biến m ản g phàn tử mảng Cũng biến, trước sử dụng m ảng phải 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 đặt dấu ngoặc vuông [] dùng để xác định số phần tử m ảng phải số thường phải viết dạng số 10 Sau số ví dụ khai báo mảng: Ví dụ 1.8 int X [5]: char a[3], b[5]; -m ảng X với phần tử thuộc kiểu ínt: -m ảng a với phần tử thuộc kiểu char mảng b với 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ử m ảng xem xử lý niột biến, chúng cd th ể nhận giá trị khác tham gia vào phép toán T ất phàn tử m ảng cố tên, tên mảng Để truy nhập đến phần tử m ả n g t a phải dùn g tê n m ả n g số (index) phần tử tro n g mảng Chỉ số phần tử vị trí phần tử mảng Cần ý rằ n g c, phần tử m ảng có số , x[ l] phần tử thứ mảng Qua việc khai báo int x[5], p h ần tử m ả n g X x[2], x[3], x[4J Trong nhớ máy phàn tử in y sệ sạp :Ịcốp theo^thứ ,tự sau: byte x[0] x[l] x[2] xp] x[4] Thông thường trỉnh biên dịch c không kiểm tra giá trị gán cho sô' phần tử m ảng cố vượt kích thước mảng hay không Điều gây lỗi r ấ t khó phát lập trình phần tử với số vượt giới hạn cho phép thuộc ô ký ức nhớ có chứa giá trị ngẫu nhiên Trong c định nghĩa nhiều kiểu mảng Mảng chiều mảng phần tử phân biệt với số, ví dụ x[5] mảng chiều Nếu để phân biệt phàn tử mảng mà phải dùng đến số, mảng gọi chiều Ví dụ 1.9 int mat[3][3]; Mảng gồm có phần tử tên phần 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 toán học, số đàu phần tử dùng để h àng số thứ hai dùng để cột Các phần tử m ảng xếp tro n g 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 ảng nhiều chiều, tro n g số chi số hoàn toàn phụ thuộc vào loại trình biên dịch nhớ giải phóng máy Kích thước cần thiết cho m ảng bàng tích số phần tử ĩiìảng kích thước phàn tử v í dụ kiểu m àn g x[5][2] float kích thước m ảng 5*2*4 = 40 byte Theo định nghỉa, t a củng có th ể định nghía m ảng thuộc kiểu char, ví dụ: char n a m e [ 12]; M ảng thuộc kiểu char dãy liên tục ký tự, m ảng ta cđ thể viết tện người, tên sách v.v Một dăy liên tục ký tự gọi biến kiểu chuỗi Tương tự kiểu chuỗi, biến kiểu chuỗi phải kết thúc byte trán g (ký tự '\0') Trong ví dụ m ảng name gọi biến kiểu chuỗi m ản g cd chứa 11 ký tự ký tự cuối (chỉ số 11) byte trắng Đây nguyên nhân thường phát sinh lỗi vỉ sử dụng m ảng người lập trỉnh thường quên p h ần tử cuối m ảng khái báo kích thước mảng 1.6 CHÚ GIẨI T ấ t chương trình người lập trình cổ kinh nghiệm viết giải thích giải Mục đích việc đưa giải vào chương trìn h để làm rõ thêm ý nghía hàm, câu lệnh giải thích ý nghĩa biến sử dụng, đd giải làm cho chương trìn h thêm dễ hiểu tiện cho việc tìm hiểu chương trình Trong c giải m ột đoạn văn viết ký hiệu /* (bát đàu) */ (kết thúc), hai ký tự / * phải viết cạnh Ví dụ /* H àm vẽ vòng tròn */ giải c Chú giải cố th ể đặt vị trí chương 19 trinh biên dịch không chiếm ô ký ức n,ào nhớ Điều đố cho phép ta cố th ể đưa giải vdi độ dài vào chương trình TUy khơng nên lạ m dụng điều giải dài dòng chi làm cho c h n g trinh thêm phức tạp 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 ngôn ngữ c phải tu â n theo nguyên tắc, yêu cầu riêng m ình thiết lập T ấ t chương trình viết ngôn ngữ c xâv d ự n g từ chương trình Các chương trìn h gọi hàm Số lượng hàm chương trỉnh không hạn chế n h n g chương trỉn h phải cd n h ấ t hàm Có m ột hàm (và chi một) số hàm định nghỉa hàm qua hàm ta cố thể liên hệ với hệ điều hàn h với hàm khác chương trình Trong trình thực chương trình, thơng qua hàm ta trao đổi thơng tin chúng Nhìn m ột cách tổ n g quát, chương trìn h viết ngơn ngữ c phải có cấu trú c sau: Khai báo hàm th viện chuấn sử dụng Định nghĩa biến ngồi Hàm (main) Hàm ỉ Hàm Trong lập trìn h ta cổ thể sử dụ ng số hàm thư viện chuẩn Các h àm thường thiết lập sẵn để giải số toán đd mà không cần làm lại sử dụng Các hàm khai báo t r o n g thư viện chuẩn phân bố kèm theo trỉnh biên dịch Việc khai báo 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ị đề cập chi tiết phần 5.4 Các File cđ chứa h àm gọi lầ File tiêu 20 đẽ ^Header file) Hàm tập hợp toán lệnh viết liên tiếp để thực nhiệm vụ trọn vẹn Khi lập hàm ta phải đ ặ t tên cho Cách đ ặ t tê n cho hàm phải tu â n theo nguyên Itác đật tên cho biến Tên hàm n h ấ t thiết phải main, hàm lại nhận m ột tên tùy ý Các tên tốt n h ấ t mức độ đ ó nên phàn ánh ý nghĩa, mục đích hàm Cấu trúc chung hàm c cđ dạng sau: K iểu ^ H m Tên_Hàm (khai háo báo tham sổ hình thức) { Khai báo hiến cục bộ; Các câu lệnh; } Dòĩig mô t ả tên hàm khai báo danh sách th a m số hình thức có Các th a m số phải viết cách dấu phẩy (,) Đây thơng tin đầu vào qua đối số ta cđ th ể đưa dử liệu vào cho hàm (giá trị tham số thiết lập thông qua việc gọi hàm từ chương tr ìn h triệu gọi) Các th a m số hinh thức n ày khơng cần thiết có th ể bỏ qua hai dấu ngoặc thi trường hợp phải viết Chẳng hạn getcharO tên hàm chuẩn, hàm không chứa danh sách th a m số đề cập đến phần 1.8 Kiểu hàm biến bao gồm kiểu char, int, float, double Ngồi r a trình biên dịch đưa thêm kiểu mới, đố kiểu có th ể n h ậ n giá trị sau thực Ví dụ 1.10 X ả y đựng chương trĩnh cụ thề cho c 21 main() Hàm bát buộc phải có { int i;/* Khai báo biến cục */ i = i+ l;/ * Câu lệnh printf ("i = %d",i); í* Hàm chuẩn dùng để biểu thị thông tin */ } Chương trìn h sử dụng h àm n hất, hàmi main, v í dụ mô tả cách viết niột hàm trọ n vẹn, cách khaii báo biến sử dụng giải tro n g chương trình Câu lệnhi cuối dùng để hiển thị giá trị i lên m àn hình Giá t r ị i h iển thị trước i chưa đượcc khởi tạo Ví dụ 1.11 mơ tả cách xây dựng hàm c cách gọi h m tro n g chương t r ỉ n h hàmi butlerO có kiểu void (không nhận giá trị tr ả về) không ccố th a m số truyền Kết thực chương trìn h ba dòn^g h iển thị m àn hình: Se goi ham butler Anh can gi o toi Toi chi muon chao anh Ví dụ 1.11 # in c ỉu d e < stdio.h> void butler(); void main() { printf("Se goí ham butler\n"); butler(); printf("Toi chi muon chao anh\n"); 22 void butlcrO { prinii'C’Anh can o toi\n'’); } T ro n g VI d ụ , h m p r in tf dùng để hiển thị chuỗi kív tự lên m àn hỉnh Ký tự ’\n ’ chuỗi cho phép ủiva trỏ x u ố n g dòng sau hiển thị T hơng tin h àm chương trình cd thể cđci với b ằ n g cách sử dụng tham số hình c:ác biến ngồi Các biến ngồi (biến tổng thể) ln mghĩa trước h m hàm co th ể tru y cchúng Các biến ngồi cục giải thích cụ iphần 4.5 trao thức định nhập đến th ể 11.8 CẤC HÀM K Ế T XUẤT TH Ô N G TIN ĐƠN GIẨN Một n h ữ n g ý tư ng thiết kế ngơn ngữ lập t trình c sử d ụ n g phải co tương thích nhiều loại miáy khác n h aù c phải cd khả n án g sử dụng m áy tcá nhân Để đ t mục đích này, cấu trúc ngơn ngữ Ịphải hạn chế só lượng chừng mực (CĨ thể hạn chế đến mức tối đa toán lệnh phụ thuộc vào Ịphần cứng máy Đ ể giải vấn đề này, ngôn ngữ Ikh ông đ a r a t o n l ệ n h ou tputỊinpu t (vàolra) m t h e o nguyên tắc thư ng phụ thuộc vào p h ần cứng máy T h ay vào câu lệnh người t a thiết lập hàm kết x u ấ t th ô n g tin vào, Các h m n ày khai báo th viện chuẨn h m h ay sử d ụ n g n h ấ t t r o n g c h n g trình- Trong phần h àm đưa mức độ đơn giàn để thuận tiện cho việc theo dõi ví dụ Chi tiết hàm bạn co th ể xem ph ần 9.1, 9.2 chương IX 23 1.8.1 Hàm printf Đây hàm hay sử dụng n h ấ t dùng^ để h iể n thị thơng tin lên hình H m n ày định nghỉai tro n g tệp tiêu đề stdio.h thư viện chu ẩn Như khii d ù n g h àm p r i n t f t a phải khai báo tệ p stdio.h đầu ch n g ĩ tr ìn h (xem phần 5.4) Hàm p r i n t f có cú pháp sau: print/ CTham số định dạng"y Các (ham số); T h a m số định dạng đặt tr o n g d ấ u n h y kép bao> gồm mã định dạng Các mã định dạng dùng để x c định số tham số cách biểu thị th a m số lên m n hình Mỗi tham số định dạng ln bắt đ u ký tự 'ĩc Ngoài mã định dạng, tron g th a m số định dạng có t h ể đ ặ t b ấ t kỳ đoạn văn ASCII đ ể làm rõ ý nghĩsỉ kết số T h a m số thường biến (thậm chí cđ thể biểau thức) m gịá trị nổ cần biểu thị lên m àn hình Để đưa co’iii trỏ x u ố n g hàng sau hiển thị kết quả, tham số địn.h d n g p hải kết thúc Ví d ụ 1.12 prin(f("Ngơn ngữ c ngơn ngữ khó \ n ”): cố th ể thay th ế lệnh sau: printf("Ngổn ngữ C"); printf("là ngơi\ ngữ”); printf("khó\n"); T ro n g hai trườĩig hợp, trê n m n hỉnh xuất d)rg chữ N g ô n ng ữ c m ột ngơn ngữ khó Ví dụ 1.13 printf("G iá trị X %3d, y % 6,3 f \ n ”,x,(x ự* tíif ịaO 24 + í :{: y)): .’i d ụ n y tr i n h bày phương pháp hiển thị giá trị biến c ũ r n g a n c ủ a biểu th ứ c lên m àn hình thơng qua mả định dạng, o đíV g*iá t r ị c ủ a b iế n X đupt/c h i ể n thị lên m n h ìn h n h mộột ;ó n g u y ê n gồni chử số, kết biểu thức (X + y* in ỉên sô thập phân gôm chữ sô (kéể (ả d ấ u chấm), tro n g có số hiển thị sau p h ầ n th ậ ậ p p h â n Ký tự d t r o n g m ã 3Ố định dạng thứ n h ất r r.n g t h a m số th ứ n h ấ t p h ả i h iể n th ị n hư m ộ t số -n • Ký tự f t r o n g m ã số thứ hai xác định cách hiển thị củaa h a m só t h ứ hai nh mã số thập phân T ro ng ví dụ tr ê ẽ n , n ế u X có giá trị 12 yk y có giá trị thỉ kết đưược in lên m n hỉnh ià: Giá trị X 12, y 20.000 1.83.2 Hàm scan t N rựợc lại với h àm printf^ hàn s ca n f dùng để nhập liệu iH bànn phím H àm sử d ụ n g qua cú pháp sau: SicanfCTfmm số định dạng'\ Các đối sổ); ‘ C úng hàm printf, tro n g h àm sca n f th a m số định d n g phảảii đ ặt tron g dấu nháy d ùng để xác định số th a m số phương pháp đưa liệu cho th a m số Các t h a m số địnnlh dạng bát đầu ký tự % Khác với hàm p r in tf, thaaini số trường hợp phải địa biến sẽ* nhậậin giá trị đưa yào từ bàn phím Ví t cdụ 1.14 s s>canf("%2d%r, &x, &y); - TMã định dạng %2d xác định rằ n g ta phải nh ập vào m ột số ngưuiyên có độ dài tối đa chữ số giá trị gán cho biến X Mã định dạng %f^áòì hỏi t a phải n hâp vào m ột số thựựcc có độ dài tối đa p h n th ậ p phân 1ngầijĩ_dịnh %/)*> giá trị gán cho biến y 25 .Để đưa địa biến tron g d a n h sách th a m số trư f đối số đd ta phải đặt ký tự Chẳng hạn: &x địa biến x; &y địa biến y Trong ví dụ ta đưa từ bàn phím số sau 56 723 thỉ X J cố giá trị tương ứng 56 723.000000 Nhỉn chung cần nhập x u ất liệu theo khn dạxi^í n h ấ t định có th ể sử dụng th a m số định dạng sau: %d: Số nguyên %c: Ký tự %s: Chuỗi %f: Số float (dấu phầy động) %ìĩ: Số double (dấy phẩy động với độ xác gấp đồi) %u: Số nguyên không âm %e: Số mũ %o: Cơ số khơng dấu %x: Cơ số 16 khơng dấu Ví dụ 1.15 mô tả cách sử dụng hàm p r in tf ■và sc a n f với th a m sổ định dạng Ví dụ 1.15 #include void main() { int tuoi; char teiì[30]; float luong; printf("Hay dua ten, luoi luoag cua ban\n") scanf("%s %d %f", len, &tuoi, &troig_luong); 26 Ị)nníl("Tcn eua han la ^.rs\n" len); p n n t t ‘('Tu 01 cua ban la ^/rd\n” luoi): prinir('Tr(,)nt; luong cua ban la troni;_Ịuong); } T r o n g ví dụ n y cần lưu ý: Sử d ụ n g b iế n k iể u m n g để chứa chuỗi ký tự tên ngíười - T ê n c ủ a m ả n g cũ ng ỉà địa đầu mảng đd, vậiỴ T:;rong chương tr ì n h để nhập tên ta chi sử dụng scann^Xs”, tem) khô ng d ù n g scanf("%s", &ten); - Có th ể dùng m ộ t h m scan f để đưa giá trị cd kiểu khác nhiau: ten, tuoi v trong_luong Để kết thúc nhập liệu cho nuột biến có th ể sử d ụ n g dấu cách phím Enter ^AB.3 Hàm getchar M ột hàm n ữ a m ta hay sử dụng tro n g ví dụ sau, h m getchar() H m n ày cho phép đư a m ộ t ký tự từ bàn ph iím (chính xác h n m ã ASCII ký, tự) H àm không cd) t h a m số H àm sử dụng qua cú pháp sau: Tên^Bỉẽn = getcharO; T ê n jy iế n không cần thiết co th ể bỏ qua Cần ỹ gặp h àm getcharQ chương trình tạm ngừng hoạt động chio đến ta đưa ký tự từ bàn phím Chương trìn h tiéếp tục hoạt động sau n h ấ n phím Enter Sau thực hồàm, Tên_piến cd giá trị m ã ASCII ký tự đưa vàào từ bàn phím Víí d ụ 1.16 c^getchar(); Sau thực lệnh này, ký tự ưa vào từ bàn phhím V c cố giá trị 89 (m ã ASCII ký tự v) 27 ... ứ c bạn không th ể thiếu tiến tới làm vi c vối nhửrg phiên b ản cao c p ngôn ngừ c Ch c bạn th n h c ng 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ó c u ngạn ngữ. .. trình c sử d ụ n g phải co tương thích nhiều loại miáy kh c n h aù c phải cd khả n án g sử dụng m áy tcá nhân Để đ t m c đích này, c u tr c ngôn ngữ Ịphải hạn chế só lượng chừng m c (C thể hạn chế... giản ngữ c th ể má}^ • Ngôn ngữ c đưa khả cao cho lập trỉnh c c u trú c , c u truyền đạt, truyền thông (Comniunication) th u ậ n tiện đơn vị chương trình kh c nhau, khả năn g biên dịch đ c lập,

Ngày đăng: 27/03/2020, 23:17

Tài liệu cùng người dùng

Tài liệu liên quan