1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

27 50 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 1,99 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Để 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... C.ÍÌC iiíìà iTip trinh của hệ thống trên... • Một ưu điếm thứ h

Trang 1

H 9 C n Ệ H KỸ THUẬT QU&N s ự KHOA CÔNG NGHỆ THDNG TIN

Trang 2

HOC VIÊN KỶ THUẬT QUÀN sự

KHOA C Ô N G NGHÊ THÔNG TIN

Trang 3

MỜ ĐÀU

c.’ó t h ể nói ngôn ngữ c ỉà một ngôn ngừ "không t r u y ề n

th ố n g ” theo sự p h á t sinh và q u á t r i n h p h á t t r i ể n của mình Lịch sử phát tr i ể 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 I X lại liên quan chặt chẽ đến một hệ điều h àn h khác - hệ điều hành M U L T I C 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à M assachusetts 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 n h ư n g lại tỏ ra chưa th u ậ n tiện và khó khăn tro n g việc sừ dụng Đây là một tro n g các nguyên n h ân để A T

iSi T đình chị không tiếp tục phát tr i ể n hệ thố n g hơn nữa Ảnh

h ư ở n g bởi ý tư ở n g đ ầ u tiê n củ a M Ư L T Ỉ C S , K en T h o m c o n -

m ột tro n g n h ữ n g người th a m gia thiết kế hệ th ố n g này đã xây dựng một hệ điều h à n h khác, mà một tro n g n h ữ n g điều khác

biệt với M Ư L T Ỉ C S là sự th u ậ n tiện và dễ d àn g tro n g khi sử dụng Hệ điều h à n h này là phiên bản đàu tiên của U N I X và được Thomcon v iế t t r ê n n g ô n ngữ A ssemblly 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 t r o n g chế độ đa người sử dụng nhưng

nó đã tỏ r a có hiệu quả, t h u ậ n tiện và xứng đáng được p hát

t r i ể n t r ê 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 đã x u ấ 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 I X đã được đư a sang máy vi tính PDP-11 vào n ả m 1971 T rong cùng giai đoạn này, Dennis

Ritchie - một n h à lập trìn h nổi tiếng đâ th a m gia vào tậ p th ể

Trang 4

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 à n g cách này cặp U N I X - c đã tỏ rõ nh ừ n g 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 à n h 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 t r i n 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 r o n g thời gian này ngôn ngủ c cũng b ắ t đ ầ u được phổ

b iế n và b án t r ê n th ị trư ờ n g Cho đ ến n ã m 1978 khi B rian

K e r n íg h a n v à D e n n is R i t c h i e ch o x u ấ t b ả n c u ố n T h e c

P r o g r a m m in g L anguage thi có thể xem như c chính th ứ c được

r a đời

C ùng v-ới sự ra đời và phát tr i ể n của kỹ t h u ậ t vi m ạ ch (các

hệ vi xử lý 8080 và Z80) nhiều trình biên dịch của c đã ra đời

và p h à n nào đã đáp ứ ng được nhu cầu của thực t ế về tốc độ,

k h ả n ă n g biên dịch v.v Ngày nay tối thiểu t a có th ể đếm được

đ ến 17 trìn h biên dịch c đang thực sự phổ biến tr ê n thị trư ờn g PC

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 n hau 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à t r á n h sử d ụ n g các đặc tính mở rộng của một thư viện phụ thuộc trỉn h biên dịch đặc biệt, cd t h ể được xem như

m ộ t c h ư ơ n g t r ì n h có k h ả 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 ụ n g t r o n g các môi trư ờ n g tr i n h biên dịch/hệ điều h à n h máy tính khác Đây là một đặc tính được đ á n h giá

n g à y càng cao của ngôn ngữ c

Trang 5

• Một ưu điếm thứ hai của c lã sự súc tích và cô đọng của

ngồn ngữ Cú pháp của ngôn ngử c ban đàu rất đơn giản và

chi d ự a trê n 27 từ khóa Điều này làm cho ngôn ngữ có t h ể được p h á t t r i ể n và thực hiện một cách dễ d à n g ở trê n má}^ tính lớn và máy vi tính

• Ngôn ngữ c đưa ra những khả n ă n g cao cho lập trỉn h có cáu t r ú c , một cơ cấu truyền đạt, tru y ề n thông (Comniunication)

t h u ậ n tiện giữa các đơn vị chương trìn h 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à th a n h 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 x em c n h ư là m ộ t n g ô n n g ừ cấp cao n h ư P a s c a l ,

F o r t r a n v.v bởi sự th u ậ 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 n h ừ 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 ư n g ô n ngữ Assembly Các c h u y ê n gia đã t h ố n g kê được r ằ n g cổ đến 90% các trư ờng hợp có t h ể sử dụng ngôn ngữ

c thỉay t h ế cho ngôn ngữ Assembly, n h ấ t là trong các lỉnh vực liên iquan đến p hần cứng và các bài toán điều khiển Điều đó chứriig tỏ r ằ n g 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 t r ư n g cho ngôn ngữ Assembly tr o n g

điều kiện t h u ậ n tiện, dễ d à n g hơn khi xây d ự n g 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ó t h ể noi tài liệu này được biên soạn theo m ộ t pho n g 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ó t h ể được sử dụng bởi nhiều đối

tượnịg với trìn h độ và khả n ă n g lập tr ì n h khác nhau

Cáic khái niệm và kiến thức tr o n g tài tiệư được minh họa với

5

Trang 6

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 tro n g 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 ế k h ả n ãng lập trin h 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

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 c hí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

n g ữ c được đư a r a tro n g 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 r i ê n g biệt của tùng loại

m á y khác nhau

H iệ n nay, tr ê n thực t ế đ a n g phổ biến n hiề u trỉnh biên dịch

c a o 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 n h ữ n g vấn đề được đư a r a tro n g tài liệu là những kiến

th ứ c b ạn không t h ể 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

Trang 7

C h ư o n g 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 n gạn ngữ rấ t bổ ích d à n h cho c.ác bạn m uố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" C h ín h vì vậy đ ể m áy tín h 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 ư ờ n g 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 t r ì n h nào đó Để đạt được điềunà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ìn h 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 t r ê n

cơ sở của m ộ t t h u ậ t toán đã lập trước T h u ậ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 ữ n g 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 r a n h ữ n g 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ìn h viết b à n g ngôn ngừ c Để thuậ n tiện cho việc theo dõi các ví dụ tr o n g chương trình, tr o n g phần này chúng tôi xin giới thiệu m ộ t số

h àm kết x u ấ t th ồ n g tin vào ra thường được sử dụng - p r in tf,

scanf, getchar N hững bạn đã cd ít nhiều kinh nghiệm tr o n g lập

trình c cd t h ể bỏ qua chương này n h ư n g 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

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 t h ể bỏ qua đối với n h ữ n g ai muốn đi vào lĩnh vực

Trang 8

lập trin h Các ký hiệu cơ bản bao gồm n h ữ n g ký tự cho phép dùng, tro n g 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ự gạch nối:

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ìn h nhầm mục đích giải thích th ê m cho

c hư ơ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 r o 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 ù n g để viết và xây dựng các toán lệnh của

c h ư ơ n g trình Cần chú ý rằ n g trong c các từ này luôn được

v iế t với các chữ t h ư ờ n g và không được d ù n g 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 n g c chuẩn bao gôm

Trang 9

1.2 H Ằ N G SỐ

H à n g số là các thông tin được đưa vào chương trình và có

gia trị k h ông đổi tro n g 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 ằ n g số học, hằng ký tự và h ằ n g kiểu chuỗi

Ịĩỉínỉỉ sỏ' học được p h â n ìàni h a i ỉoại: h à n g số n g u y ê 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à c h ú n g biểu diễn

Hang sff nguyên có t h ể đượ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ó t h ể là số dương hoặc số âm Dấu của

hằng được viết trước số đó, trong trư ờ n g hợp số dương, d ấu có

t h ể được bỏ qua Cần chú ý J à k h ố n g dươc d ù n g sô' 0 n hư là chừ số đầu tiê n của hảng s ổ_nguyen

Ví dụ 1.1

+ 14 - H ằn g 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 ằ n g

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 n h â n không cho phép sử d ụ n g số 0 như là chừ số điầư tiên của h ằ n g 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

Trang 10

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

o x c hoặc Oxc - H àn g cơ số 16 cd giá trị 12 (cơ số 10);

OXFF hoặc Oxff - H àn g cơ số 16 có giá trị 255 (cơ số 10);

Thông thư ờng các hằng số nguyên được lưu t r ử vào 2 byte của máy tính Các hằng này có t h ể n h ậ n các giá trị nguyên tro n g khoảng -32768 đến +32767 Trong trường hợp chúng ta muốn sử d ụ n g các h ằ n g 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 ạ n g này sau giá t r ị của các số t a p h ải đ ặ t th ê m ký tự L h a y vi dụ:

-50000L, -40000L, OXFEOOL Thực r a cách biểu diễn này sẽlàm cho chương trìn h được viết trở t h à n h rõ r à n g hơn, trong trư ờn g hợp h ằ n g số cd giá trị vượt q u á 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 ằ n g 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 ằn g sô' thực dương có giá trị là 12.0;0.123 - H ằn g số thực dương có giá trị là 0.123;-12.15 - H ằn g 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ũ

' U i

I

Trang 11

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 ằ n g số thực với giá trị 12;

0.123E2 - H ằ n g 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ã A S C Ĩ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 t h ể được biểu diễn bằng 2 cách: bằng tên của

ký tự và b ằ n g 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 Ỉ tr o n g trư ờng hợp này phải được viết sau dấu \ và cũng

phải đ ậ t tro n g dấu nháy

Khi sử d ụ n g h ằ n g 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 t r i n g ” là một h ằ n g kiểu chuỗi

Độ dài của h ằ n g kiểu chuỗi (số lượng các ký tự trong chuỗi) là không h ạn chế và cố t h ể 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 ằ n g kiểu chuỗi, trỉn h biên dịch tự động đ ặt thêm

một byte cd giá trị là 0 (N U 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 ữ n g ký tự bình thường nh ư n g trước chúng phải đặt ký tự \ Chẳng hạpi ký tự \ cd t h ể được sử dụng trong chuỗi nếu viết \\ ' \ ,

11

Trang 12

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 tro n g chương trình

H ằ n g kiểu chuỗi được lưu trữ trong bộ nhớ của m á y tính như là một m ả n g một chiều với phần tử cuối c ù n g 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 chú ý r ằ n g cd sự khác biệt giữa h ằng ký

tự và chuỗi ký tự, chẳng h ạn ’A ’ và "A" Sự khác biệt này được xác định ở chỗ xâu ký tự "A" có t h ể được xem n h ư là một

12

Trang 13

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

ký tự C h ẳn g 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ụ t h ể 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

c h ú n g 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 tro n g máv tính đều nhằm mục đích cuối cùng là xử lý thông tin N h ữ n g thông tin có giá trị k h ông đổi trong suốt quá trình thực hiện chương trỉnh được

biểu diễn q u a các h ằng (phân 1.2) Các thông tin m à giá trị có

t h ể th a v đổ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 ể th a y đổ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ỉ tr o n g bộ nhớ và giá trị chứ a trong địa chỉ đó

Khi đặt tên cho biến càn phải thông q u a 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 ằ n g 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 c h ế và điều đđ hoàn

to à n phụ thuộc vào các trìn h biên dịch khác nhau

13

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w