Tải bản đầy đủ (.pdf) (591 trang)

Giáo trình ngôn ngữ lập trình c

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.95 MB, 591 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

Bỵ GIAO THƠNG VÀN TÀI

<b>TR£ịNG Đ¾I HâC CƠNG NGHÈ GIAO THƠNG VÀN TÀI </b>

<b>LÊ CHÍ LUÀN (Chă biên) </b>

<b>GIÁO TRÌNH </b>

NHÀ XUÂT BÀN KHOA HâC TĎ NHIÊN VÀ CÔNG NGHà

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>MĀC LĀC</b>

<b>DANH MĀC BÀNG ... 12 </b>

<b>DANH MĀC HÌNH ... 13 </b>

<b>DANH MĀC CHĊ VIÀT TÂT ... 14 </b>

<b>LịI NĨI ĐÄU ... 15 </b>

<b>ChÔÂng 1.CC KHI NIẩM CĂ BN CA NGễN NGĊ C ... 21 </b>

1.1. GIðI THIàU NGÔN NGČ C ... 21

1.4. KIÄU DČ LIàU TRONG C ... 37

1.4.1. KiÅu dč liáu nguyên thąy ... 39

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<i>1.5.2.2. Khai báo hằng sử dụng từ khóa const ... 48 </i>

<i>1.5.2.3. Khai báo hằng sử dụng chỉ thị #define ... 48 </i>

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

3.1.1. Câu lánh điÃu kián If ... 126

<i>3.1.1.1. Câu lệnh điều kiện dạng khuyết ... 126 </i>

<i>3.1.1.2. Câu lệnh điều kiện đầy đủ ... 129 </i>

<i>3.1.1.3. Câu lệnh điều kiện else… if ... 131 </i>

<i>3.1.1.4. Câu lệnh điều kiện lồng nhau ... 135 </i>

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

3.2.3. CÃu trúc vòng lÁp do & while ... 173

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<i>5.1.2.1. Khai báo mảng hai chiều ... 297 </i>

<i>5.1.2.2. Truy cập đến phần tử của mảng hai chiều ... 299 </i>

<i>5.1.2.3. Các dạng bài tập mảng một chiều ... 300 </i>

5.2. CON TRä ... 314

5.2.1. Đáa chß trong C ... 315

5.2.2. Khai báo con trå ... 317

5.2.3. Mỗi quan hỏ gia con trồ v mng ... 323

<i>5.3.2.2. Khai báo và khởi tạo giá trị ... 337 </i>

<i>5.3.2.3. Khai báo bằng con trỏ ... 338 </i>

5.3.3. Thao tác nhÁp xuÃt chuíi ký tď ... 339

<i>5.3.3.1. Nhập xuất chuỗi ký tự ... 339 </i>

<i>5.3.3.2. Xuất chuỗi ký tự ra màn hình ... 341 </i>

5.3.4. Các hàm xċ lý chi ký tď c¢ bÁn ... 343

<i>5.3.4.1. Hàm xác định độ dài chuỗi ... 343 </i>

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

<i>5.3.4.2. Hàm so sánh hai chuỗi ký tự ... 345 </i>

<i>5.3.4.3. Hàm sao chép chuỗi ... 348 </i>

<i>5.3.4.4. Hàm ghép chuỗi ... 351 </i>

<i>5.3.4.5. Hàm xác định chuỗi nghịch đảo. ... 355 </i>

<i>5.3.4.6. Chuyển đổi ký tự hoa sang ký tự th°ờng và ng°ợc lại ... 359 </i>

<i>5.3.4.7. Tóm tắt các hàm trong th° viện string.h ... 362 </i>

6.1.1. Khai báo kiÅu cÃu trúc ... 421

6.1.2. Truy cÁp đÁn các thành ph¿n cąa kiÅu cÃu trúc ... 424

6.1.3. Khõi t¿o kiÅu cÃu trúc ... 429

6.1.4. Khai báo vđi tĉ khóa typedef ... 430

6.1.5. Phép gán các biÁn cùng có kiÅu cÃu trúc ... 432

6.1.6. CÃu trúc léng nhau ... 434

<i>6.1.6.1. Định nghĩa cấu trúc riêng biệt ... 434 </i>

<i>6.1.6.2. Định nghĩa cấu trúc nhúng ... 434 </i>

<i>6.1.6.3. Truy cập đến thành phần của cấu trúc lồng ... 435 </i>

<i>6.1.6.4. Minh họa cấu trúc lng ... 435 </i>

6.1.7. Cu trỳc Ôc s dng nhÔ mùt tham sỗ ca hm ... 436

6.1.8. Cu trỳc và con trå ... 437

6.2. MÀNG CÂU TRÚC ... 439

6.2.1. Đánh ngh*a mÁng cÃu trúc ... 442

6.2.2. CÃp phát bï nhñ đïng cho kiÅu cÃu trúc ... 445

6.2.3. Mùt sỗ dng bi tp vủi cu trỳc ... 446

<b>6.3. CASE STYDY ... 462 </b>

6.3.1. Phát biÅu bài toán ... 462

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

7.2.1. Các thao tác vñi táp tin ... 500

7.2.2. Khai báo táp tin ... 501

7.2.3. Mõ táp tin ... 501

7.2.4. Đóng táp ... 503

7.2.5. Đãc và ghi vđi táp văn bÁn ... 503

7.2.6. Đãc và ghi táp nhá phân ... 506

<i>7.2.6.1. Ghi vào tệp nhị phân ... 506 </i>

<i>7.2.6.2. Đọc nội dung từ tệp nhị phân ... 507 </i>

<i>7.2.6.3. Lấy dữ liệu với hàm fseek() ... 508 </i>

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

PHĂ LĂC 1: TĈ KHÓA TRONG C ... 581

PHĂ LĂC 2: TêNG HĀP MỵT Sæ TH£ VIàN C CHUÀN ... 583

PHĂ LĂC 3: BÀNG MÃ ASCII ... 587

PHĂ LĂC 4: MĆC Đỵ £U TIÊN CĄA CÁC TOÁN TĊ ... 588

PHĂ LĂC 5: MÃ ĐàNH D¾NG ... 589

TÀI LIàU THAM KHÀO ... 591

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<b>DANH MĀC BÀNG </b>

<i><b>Bảng 1.1. Các kiểu dữ liệu - kích th°ớc và phạm vi... 38 </b></i>

<i><b>Bảng 1.2. Kiểu dữ liệu char ... 42 </b></i>

<i><b>Bảng 2.1. Mã định dạng t°¡ng ứng với các kiểu dữ liệu ... 97 </b></i>

<i><b>Bảng 2.2. Danh sách các tệp tiêu chuẩn ... 104 </b></i>

<i><b>Bảng 7.1. Mở tệp tin trong chế độ chuẩn I/O ... 502 </b></i>

<i><b>Bảng 8.1. Bảng màu đ°ợc sử dụng trong ch°¡ng trình đồ họa ... 559 </b></i>

<i><b>Bảng 8.2.Các hàm trong Graphics.h đ°ợc sử dụng để vẽ đồ hoạ... 561 </b></i>

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<i><b>Hình 1.5. Giao di</b>ện màn hình của Turbo C ... 69 </i>

<i><b>Hình 1.6. Kh</b>ởi động soạn thảo ch°¡ng trình C bằng DevC++ ... 73 </i>

<i><b>Hình 1.7. Màn hình New Project ... 73</b></i>

<i><b>Hình 1.8. Màn hình so</b>ạn thảo ch°¡ng trình C bằng DevC++ ... 74 </i>

<i><b>Hình 1.9. Màn hình khi biên d</b>ịch thành cơng ... 75 </i>

<i><b>Hình 1.10. Màn hình kết quả ... 75 </b></i>

<i><b>Hình 3.1. Phân c</b>ấp các câu lệnh trong ch°¡ng trình C ... 125 </i>

<i><b>Hình 3.2. </b>S¡ đồ khối biểu diễn câu lệnh if dạng khuyết ... 127 </i>

<i><b>Hình 3.3. </b>S¡ đồ khối biểu diễn câu lệnh if đầy đủ. ... 130 </i>

<i><b>Hình 3.4. </b>S¡ đồ khối biểu diễn câu lệnh else if ... 132 </i>

<i><b>Hình 3.5. </b>S¡ đồ khối biểu diễn câu lệnh if else lồng nhau ... 136 </i>

<i><b>Hình 3.6. </b>S¡ đồ khối biểu diễn câu lệnh switch ... 145 </i>

<i><b>Hình 3.7. </b>S¡ đồ khối biểu diễn vịng lặp for ... 158 </i>

<i><b>Hình 3.8. </b>S¡ đồ khối biểu diễn vịng lặp while ... 168 </i>

<i><b>Hình 3.9. Chuy</b>ển số thập phân sang số nhị phân ... 172 </i>

<i><b>Hình 3.10. S¡ đồ khối biểu diễn vòng lặp do… while ... 173 </b></i>

<i><b>Hình 4.1. Minh h</b>ọa cách thức thực thi hàm functionName() ... 215 </i>

<i><b>Hình 4.2. Minh h</b>ọa cách truyền tham số. ... 220 </i>

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<b>LịI NĨI ĐÄU</b>

Năm 2016, C là ngôn ngč lÁp trình ho¿t đïng m¿nh thć 8 trên GitHub xÁp sau cỏc ngụn ng nhÔ Javascript, Java, Python, Ruby, PHP, C#, C++. Tuy nhiên, GitHub chÔa phi l hỡnh nh chính xác nhÃt đÅ đánh giá bõi GitHub ln thiên vá vđi nhčng ngơn ngč mã ngn mõ và hāp thói. Trên thďc tÁ, t¿p chí IEEE Spectrum xÁp ngụn ng C nhÔ l ngụn ng hng u trong nm 2017 trÔủc c Java, C # v Javascript. Cú mùt sỗ lý do các b¿n sinh viên nên b¿t đ¿u vđi ngơn ngč lÁp trình C.

Thć nhÃt, C là ngơn ngč cÃp thp so vủi ngụn ng trỡu tÔng khỏc. Bn cú thÅ viÁt mã g¿n gũi vñi ph¿n cćng và trďc tiÁp điÃu khiÅn bï nhñ. MÁc dù đây là mït trong nhng phn khin ngÔúi hóc khú hóc C nhÔng đó cũng chính là lý do t¿i sao các lÁp trình viên ngơn ngč này cú xu hÔủng phự hp hÂn vủi cỏch hot ùng ca mỏy tớnh. vit mó C tỗt, bn cn suy ngh* nhÔ mỏy tớnh.

Th hai, nhiu lp trình viên nói rÁng: Khi đã biÁt mït ngơn ngč lÁp trình, b¿n s¿ biÁt tÃt cÁ nhčng ngôn ngč khác nča. Câu nói này có v ỳng, c biỏt l ỗi vủi ngụn ng C. Ví dă, viác hãc tĉ ngơn ngč cÃp thÃp nhÔ C sang mùt ngụn ng cp cao hÂn nhÔ Python, Ruby khỏ dò dng nhÔng hóc ngÔc li thỡ khụng h Ân gin. Bng cách hãc C, b¿n chą yÁu s¿ hãc các nÃn tÁng cąa ngơn ngč lÁp trình hián đ¿i. NÁu b¿n thďc sď hiÅu C, b¿n s¿ có thÅ hãc bÃt cć ngơn ngč nào khác mït cách dß dàng bõi hu ht cỏc ngụn ng hiỏn i thÔúng cao cp h¢n C.

Lý do thć ba, h¿u hÁt các ngơn ng hiỏn i u Ôc sinh ra ỏp ng nhčng thiÁu sót cąa ngơn ngč khác: ngơn ngč C++ ra đói đáp ćng nhčng thiÁu sót cąa ngôn ngč C, tiÁp theo sď ra đói cąa Java ỏp ng nhng im chÔa hon thiỏn cąa C++ và C# ra đói đÅ cÁi thián Java v.v. Vì thÁ bÁng cách hãc C, b¿n có thÅ hiu rừ lý do ti sao mùt sỗ ngụn ng Ôc thit k theo cỏch ú v cú kh nng ỏnh giỏ tỗt hÂn v s tiỏn li m cỏc ngơn ngč cao h¢n cung cÃp.

Lý do thć tÔ, hu ht cỏc ngụn ng lp trỡnh hiỏn i u Ôc s dng cho ba mc ớch, ú l các ćng dăng kinh doanh, các ćng dăng web và di ùng, cuỗi cựng l phõn tớch d liỏu. Tuy nhiờn, nu bn muỗn phỏt trin phn mm Ôc kt nỗi trc tip vñi ph¿n cćng, b¿n s¿ c¿n mït ngơn ngč thÃp h¢n - và C l ngụn ng Ôc s dng nhiu nht. Cỏc ćng dăng đáng chú ý bao gém há điÃu hành, ngơn ngč lÁp trình, trình biên

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

dỏch, cỏc hỏ thỗng nhỳng, v.v. Chng hn, Linux kernel Ôc vit bng ngụn ng C v Assembly. Cỏc ngụn ng phở bin nhÔ Python, PHP, Perl v Ruby u Ôc thc hiỏn trong C. Thm chớ, C cng Ôc vit bng chớnh nú. Bừi nhiu hỏ thỗng nhúng có giđi h¿n tài ngun nghiêm ngÁt nên C thÔúng l ngụn ng Ôc la chón nhiu nht vỡ tỗn ớt chi phớ.

Trong chÔÂng trỡnh mụn hóc ca ngnh Hỏ thỗng thụng tin v mủi nht l ngnh Cụng nghỏ thụng tin, C l mụn hóc Ôc Ôa vào sđm nhÃt đÅ giÁng d¿y nÃn tÁng lÁp trình cho sinh viờn ca khoa Cụng nghỏ thụng tin, TrÔúng Đ¿i hãc Cơng nghá Giao thơng vÁn tÁi.

Vì nhčng lý do đó, nhóm tác giÁ vđi sď nhiát hut cąa mình, vđi kinh nghiám đã giÁng d¿y mơn hãc nhiÃu năm cho các thÁ há sinh viên tĉ K64 n K68 ngnh Hỏ thỗng thụng tin ó biờn son cuỗn <Giỏo trỡnh Ngụn ng lp trỡnh C=. Giỏo trình nhÁm cung cÃp nhčng kiÁn thćc nÃn tÁng cąa mït ngơn ngč đã có tĉ lâu đói, là nÃn tÁng, cïi nguén cąa các ngôn ngč hián đ¿i ngày nay, đÅ tĉ đây nhóm tác giÁ hy vãng các b¿n sinh viên có thÅ l*nh hïi và làm chą kiÁn thćc và mït ngơn ngč lÁp trình nào đó mà mình theo đuëi, là hnh trang trờn ging Ôúng đ¿i hãc và lÁp nghiáp sau ny.

Giỏo trỡnh gộm 8 chÔÂng:

CHÊĂNG 1: CC KHI NIàM C¡ BÀN CĄA NGÔN NGČ C

<i>Một số vấn đề trọng tâm đ°ợc trình bày trong Ch°¡ng 1 bao gồm: </i>

<i>nghĩa của từng từ. Ngoài ra, Ch°¡ng 1 còn giới thiệu cấu trúc, thành </i>

CH£¡NG 2: CÁC LàNH NHÀP - XUÂT DČ LIàU TRONG C

<i>liệu vào ch°¡ng trình để xử lý và đ°a dữ liệu sau khi xử lý ra ngoài. Ch°¡ng 2, đề cập đến các lệnh đ°ợc sử dụng để đ°a dữ liệu từ bàn phím </i>

<i>chuỗi ký tự, có thể là dữ liệu dạng số nguyên, số thực, v.v. Vì vậy một nội </i>

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

<i>dung khá quan trọng của Ch°¡ng 2, giới thiệu các mã định dạng, để đ°a </i>

CH£¡NG 3: CÁC CÂU TRÚC PHÂN NHÁNH VÀ VỊNG LÀP

<i>Hầu hết các ngơn ngữ lập trình đều cố gắng diễn đạt các hoạt động </i>

<i>nào viết tr°ớc thì đ°ợc xử lý tr°ớc, thứ hai là cấu trúc điều kiện, hay cịn </i>

<i>một cơng việc nào đó đ°ợc lặp đi lặp lại, có thể vô hạn, dựa vào một biểu </i>

<i>Ch°¡ng 3, giới thiệu các câu lệnh điều kiện if, cấu trúc lựa chọn </i>

<i>định với hai câu lệnh do… while và while. Với từng cấu trúc của các lệnh </i>

<i>năng hoạt động thơng qua các ví dụ minh họa đ°ợc trình bày khá chi tiết trong giáo trình. </i>

CH£¡NG 4: HÀM

<i>lập trình, là xây dựng một ch°¡ng trình gọn gàng với số dịng mã ít, tối °u. Làm thế nào để phân chia ch°¡ng trình hợp lý nhất, sử dụng code nh° thế nào cho hợp lý, tránh tr°ờng hợp một đoạn code xuất hiện nhiều </i>

<i>ngữ thuần C. Có rất nhiều ví dụ đ°ợc đ°a ra trong Ch°¡ng 4, giúp cách </i>

<i>đúng cách. </i>

CH£¡NG 5: MÀNG VÀ CON TRä

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

<i>Mảng, chuỗi ký tự là những kiểu dữ liệu nh° vậy. Ch°¡ng 5, trình bày </i>

<i>Ngồi ra, Ch°¡ng 5 cịn trình bày một vấn đề, có thể nói là khá khó với </i>

<i>nh°ng thơng qua biến con trỏ có thể xử lý các đối t°ợng mà con trỏ đó đang </i>

CH£¡NG 6: KIÄU CÂU TRÚC

<i>định nghĩa, kiểu bản ghi (kiểu cấu trúc), phản ánh cho sự đa dạng của </i>

<i>chúng ta loay hoay tìm một kiểu dữ liệu phù hợp cho một đối t°ợng thực </i>

<i>phim, v.v. Rõ ràng các đối t°ợng này có rất nhiều thuộc tính, chẳng hạn nh° cuốn sách có các thuộc tính nh° mã sách, tên sách, tác giả của cuốn sách, năm xuất bản, v.v. Vậy đối t°ợng này khi đ°a vào để xử lý phải làm nh° thế nào? Kiểu cấu trúc cho phép lập trình viên định nghĩa ra một cấu </i>

<i>nên khá đ¡n giản, khi lập trình xử lý các biến thuộc kiểu Sach giống nh° </i>

<i>Trong Ch°¡ng 6, đề cập đến định nghĩa kiểu cấu trúc, cách thức </i>

<i>t°ợng nh° C++ hoặc Java. Chẳng hạn với lập trình h°ớng đối t°ợng, khi </i>

<i>thành phần: các thuộc tính và các ph°¡ng thức (tức là các hàm), trong </i>

<i>t°ợng) chỉ phải khai báo các thuộc tính của các đối t°ợng, các hàm tác động lên kiểu cấu trúc đó đ°ợc xây dựng hồn toàn độc lập, v.v. </i>

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

CH£¡NG 7: TàP

<i>Trong đề c°¡ng của môn học đối với sinh viên ngành Hệ thống thơng </i>

<i>đối với một lập trình viên, không thể không biết cách làm việc và xử lý trên tệp, vì đó là x°¡ng sống của hầu hết các ứng dụng. Chính vì thế </i>

<i>thêm Ch°¡ng 7, là một nội dung để các bạn tham khảo và h¡n cả là làm </i>

<i>ghi tệp, đóng tệp. Nắm đ°ợc nguyên tắc c¡ bản này, trong hầu hết các ứng dụng, các bạn đều phải tuần tự thực hiện việc tạo tệp, dùng lệnh để </i>

CH£¡NG 8: Đè HâA

<i>Nội dung của Ch°¡ng 8, giới thiệu những kiến thức c¡ bản về đồ </i>

<i>để tạo ra những hình ảnh chuyển động. Ch°¡ng 8, thực sự mới chỉ mang đến cho các bạn cái nhìn tổng quan, nhóm tác giả hy vọng trong những lần tái bản sau sẽ đem đến một ni dung y v phong phỳ hĂn. </i>

Cuỗi mới chÔÂng u xõy dng hỏ thỗng cõu hồi v bi tÁp đÅ sinh viên ôn tÁp, rèn luyán và cąng cỗ lý thuyt mụn hóc. <Giỏo trỡnh Ngụn ng lp trỡnh C= Ôc biờn so¿n công phu, nghiêm túc dďa trên kinh nghiám giÁng d¿y môn hãc cho sinh viên tĉ khóa 64 đÁn khóa 68 ti TrÔúng i hóc Cụng nghỏ Giao thông vÁn tÁi cąa các giÁng viên bï môn Há thỗng thụng tin. Khi biờn son giỏo trỡnh ny, nhúm tỏc gi cú tham kho mùt sỗ giỏo trỡnh vit v ngụn ng C ca mùt sỗ trÔúng i hóc cú uy tớn ừ Viỏt Nam, mùt sỗ chuyờn gia nởi ting v mùt sỗ ti liỏu uy tớn ca nÔủc ngoi, Ôc s tham gia v úng gúp ý kiÁn cąa nhiÃu th¿y cô đã và đang giÁng d¿y mụn Ngụn ng lp trỡnh C ừ cỏc trÔúng i hãc trên đáa bàn Hà Nïi. Nhóm tác giÁ chân thnh cm Ân NCS.ThS. Trn Nguyờn HÔÂng, ging viờn TrÔúng Đ¿i hãc Kinh doanh và Công nghá Hà Nïi, đã góp nhiÃu ý kiÁn quý báu, chia sẻ nhiÃu kinh nghiám trong q trình nhóm biên so¿n cuỗn giỏo trỡnh ny.

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

Trong quỏ trỡnh biờn son, nhúm tỏc gi ó rt cỗ gng cú Ôc mùt ti liỏu tham kho cú cht lÔng, tuy nhiên không thÅ tránh khåi nhng thiu sút. Rt mong Ôc s úng gúp ý kin giỏo trỡnh Ôc cp nht v hon thiỏn hÂn.

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

<b>ChÔÂng 1 </b>

<b>CC KHI NIẩM C¡ BÀN CĂA NGƠN NGĊ C </b>

<i>chẳng hạn nh° ngơn ngữ đó sử dụng tập ký hiệu nào là hợp lệ, quy cách </i>

<i>đại l°ợng nh° biến và hằng trong một ch°¡ng trình và kiểu dữ liệu của </i>

<i>nào để soạn thảo và biên dịch ch°¡ng trình. Những vấn đề này sẽ đ°ợc </i>

Năm 1972, t¿i phịng thí nghiám Bell, lÁp trình viên Dennis Ritchie đã t¿o ra mït ngơn ng mủi cú tờn C. (Ôc dựng thay th ngơn ngč lÁp trình cũ mà anh ta đang sċ dng l ngụn ng B. C cú nguộn gỗc t ngôn ngč BCPL do Martin Richards phát triÅn, BCPL sau ú ó Ôc Ken Thompson phỏt trin thnh ngơn ngč B. Trong khi BCPL và B khơng hí trā kiÅu dč liáu, thì C đã có nhiÃu kiÅu dč liáu khác nhau. Nhčng kiÅu dč liáu chính gém: kiu ký t (character), kiu sỗ nguyờn (interger) v kiu sỗ thc (float)).

Ngụn ng C Ôc thit kÁ vñi mït măc tiêu: Sċ dăng đÅ viÁt há điÃu hành. (Ban đ¿u, ngôn ngč C Ôc phỏt trin sċ dăng trong há điÃu hành UNIX. Nó kÁ thĉa nhiÃu tính năng cąa các ngụn ng trÔủc õy nhÔ B v BCPL). Ngơn ngč cďc kỳ đ¢n giÁn và linh ho¿t và sủm Ôc s dng cho nhiu loi chÔÂng trỡnh khỏc nhau. Nú nhanh chúng trừ thnh mùt trong nhčng ngơn ngč lÁp trình phë biÁn nhÃt trên thÁ giñi.

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

Sď phë biÁn cąa C là do hai yu tỗ chớnh. u tiên là ngôn ngč không cÁn trõ lÁp trình viên. Anh ta có thÅ làm bÃt cć điÃu gì bÁng cách sċ dăng cÃu trúc C thích hāp. Lý do thć hai mà C phë biÁn là trình biên dách C có s¿n cho h¿u hÁt các mỏy tớnh. Do ú, mói ngÔúi cú th ớnh kốm trình biên dách C cho máy cąa hã mït cách dß dàng và ít chi phí. Các mã lánh viÁt bng C trờn mỏy ny cú th Ôc biờn dỏch và ch¿y trên mït máy khác chß c¿n thay đëi rÃt ít hc khơng phÁi thay đëi gì cÁ.

Năm 1980, Bjarne Stroustrup b¿t đ¿u làm viác vđi mït ngơn ng mủi, Ôc gói l <C++=. Ngụn ng ny Ôc ci thiỏn v tng cÔúng trờn C bng cỏch thờm mùt sỗ tớnh nng mủi.

Mùt trong nhčng ngơn ngč mđi nhÃt, Java, dďa trên C++, Java l Ôc thit k trừ thnh <C++ vủi cỏc lới ó Ôc sa=.

<b>1.1.2. Cỏc tớnh cht ca ngụn ng C </b>

C l ngụn ng Ôc s dăng rïng rãi. C có nhčng tính chÃt sau đây:

<b>- Đ¢n giÁn </b>

<i>cận có cấu trúc (để giải quyết vấn đề thành nhiều phần), tập hợp phong phú các hàm th° viện, kiểu dữ liệu, v.v. </i>

<b>- Máy đïc lÁp và linh ho¿t </b>

<i>Không giống nh° ngôn ngữ Assembly, các ch°¡ng trình C có thể đ°ợc thực thi trên các máy khác nhau với một số thay đổi cụ thể của máy. Do đó, C là một ngơn ngữ độc lập máy. </i>

<b>- Ngơn ngċ lÁp trình bÁc trung </b>

<i>Ban đầu, C đ°ợc dự định để làm lập trình cấp thấp. Nó đ°ợc sử </i>

<i>v.v. Nó cũng hỗ trợ các tính năng của ngơn ngữ cấp cao. Đó là lý do tại sao nó đ°ợc gọi là ngôn ngữ bậc trung. </i>

<b>- Ngôn ngċ lÁp trình cÃu trúc </b>

<i>ch°¡ng trình thành các phần bằng các hàm. Vì vậy, nó rất dễ hiểu và sửa đổi. Các hàm cũng cung cấp khả năng sử dụng li mó. </i>

<b>- ThÔ viẫn phong phỳ </b>

<i>trỡnh. </i>

<b>- Qun lý bï nhñ </b>

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

<i>C hỗ trợ tính năng phân bổ bộ nhớ động. Trong ngơn ngữ C, chúng </i>

<i>dụng các con trỏ cho bộ nhớ, cấu trúc, hàm, mảng, v.v. </i>

<b>- ĐÉ quy </b>

<i>ph°¡ng pháp quay lui. </i>

- Mõ rïng

<i>các trình dịch, các th° viện và các phần mềm thông dịch của các ngụn </i>

<b>1.2. TP Kí T HỵP Lẩ TRONG C 1.2.1. TÁp ký tč </b>

Míi ngơn ngč lÁp trình u Ôc xõy dng t mùt bù ký t riờng ca nú. Cỏc ký t Ôc nhúm li theo nhiu cách khác nhau đÅ t¿o nên các tĉ. Sau đó cỏc t li Ôc liờn kt theo mùt nguyờn tc no ú to thnh cỏc cõu lỏnh. Mùt chÔÂng trình bao gém nhiÃu câu lánh đÅ dißn đ¿t mït thut toỏn no ú.

Ngụn ng C Ôc xõy dng trên bï ký tď gém:

- 26 chč cái latinh: a, b, c,&, x, y, z hoÁc chč cái hoa: A, B, C,..., X, Y, Z.

- 10 ch sỗ: 0, 1, 2,&, 8, 9.

- Cỏc ký tď toán hãc: +, - , *, /, =, (, ), ... - Ký tď gch nỗi _

- Cỏc ký t c biỏt khỏc nhÔ: . , : ; [ ] { } ? ! \ & | % # $, v.v.

<b>LÔu ý: </b>

- Du cỏch thc s l mùt khong cách dùng đÅ tách các tĉ.

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<b> Ví dā 1.2 </b>

Cho khai báo: int bien_dem;

Trong đó: int là tĉ khóa đÅ chß ra rÁng bien_dem l mùt bin kiu int (kiu sỗ nguyờn).

Ngụn ng C phõn biỏt gia hoa v ch thÔúng, vỡ vy tt c cỏc t khúa phi Ôc vit bng ch thÔúng. Sau õy l danh sỏch cỏc t khúa Ôc sċ dăng trong C:

<b>1.2.3. Đánh danh </b>

Khái niám đánh danh rÃt quan trãng trong quá trình lÁp trình, nó khơng nhčng thÅ hián rõ ý ngh*a trong chÔÂng trỡnh m cũn dựng xỏc ỏnh cỏc i lÔng khỏc nhau khi thc hiỏn chÔÂng trỡnh. ỏnh danh thÔúng Ôc t cho hng, bin, mng, con trồ, nhón, v.v. Chiu di tỗi a ca ỏnh danh là 32 ký tď.

<b>Quy tÃc đ¿t đánh danh: </b>

- Đánh danh phÁi là duy nhÃt.

- Mït đánh danh hāp lá chća các chč cái (cÁ chč hoa v ch thÔúng), ch sỗ, du gch dÔủi.

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

- Ký tď đ¿u tiên cąa đánh danh phi l ch cỏi hoc du gch dÔủi. - Khụng sċ dăng tĉ khóa làm đánh danh.

- ChiÃu dài tỗi a ca ỏnh danh l 32 ký t.

<b>LÔu ý: Nên đÁt đánh danh có ý ngh*a trong các bài tốn că thÅ.  Ví dā 1.3 </b>

Mït sỗ ỏnh danh ỳng: delta, a_1, x, x1, x2, Num_ODD; Mùt sỗ ỏnh danh sai:

a-1 (s dng du g¿ch ngang)

case khác Case (case là tĉ khóa, do đó b¿n đÁt tên là Case v¿n đúng).

<b>1.3. MỵT Sỉ QUY £ðC KHI VIT CHÊĂNG TRèNH 1.3.1. ChÔÂng trỡnh u tiờn </b>

Mùt vớ d kinh in Ôc s dng giủi thiỏu trong h¿u hÁt các ngơn ngč lÁp trình, in ra màn hình console dịng <Hello, World=.

1 #include <stdio.h> 2 int main()

3 {

4 /* Chuong trinh dau tien trong C */ 5 printf("Hello, World!\n");

6 return 0; 7 }

- Sċ dng DevC, gừ cỏc dũng code trờn; - LÔu chÔÂng trình vđi tên hello.c - NhÃn F9 đÅ biên dách.

- Nhn F10 chy chÔÂng trỡnh, dũng ch <Hello, World= s¿ hiÅn thá trên màn hình console.

<b>GiÁi thích: </b>

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

Dòng 1: #include <stdio.h>: bï lánh tiÃn xċ lý, thơng báo cho trình biên dách C ó thờm tỏp tiờu stdio.h trong chÔÂng trỡnh trÔủc khi biờn dỏch mó nguộn, stdio l cỏc chun u vo/u ra, cho phộp s dng cỏc lỏnh Ôc chća trong táp stdio.h

Dịng 2: int main(): hàm chính, nÂi bt u thc thi chÔÂng trỡnh. Dũng 4: /* Chuong trinh dau tien trong C */: s Ôc trỡnh biờn dỏch bồ qua, Ôc s dng thờm cỏc chỳ thớch trong chÔÂng trỡnh.

Dũng 5: printf("Hello, World! \n");: là mït chćc năng có s¿n trong C, hiÅn thá ra màn hình dịng Hello, World.

Dịng 6: return 0; : chÃm dćt hàm main() và trÁ và giá trá 0.

<b>1.3.2. Cu trỳc chÔÂng trỡnh vit trong C </b>

Mùt chÔÂng trỡnh trong C Ôc phõn chia thnh nhiu phn. Xem xét Ví dă 1.4 sau đây:

<b> Ví dā 1.4 </b>

Vit chÔÂng trỡnh tớnh tởng hai sỗ nguyờn a, b.

- Mô tÁ tên táp. - Tác giÁ.

- Túm tt nùi dung ca chÔÂng trỡnh.

2 * Vi_du_1_4.c - Le Thi Chi - 15.07.2019

3 *Tinh tong cua hai so nguyen a va b

4 */

5 #include <stdio.h> Ph¿n liên kÁt.

Ph¿n liên kÁt bao gém cỏc tỏp tiờu ca cỏc hm thÔ viỏn chun cú th Ôc s dng trong chÔÂng trình. 6 #include <conio.h>

7 int tinhtong(int, int); Ph¿n khai báo nguyên m¿u hàm.

Khai bỏo cỏc nguyờn mu hm Ôc s dng trong chÔÂng trỡnh.

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

9 { Ph¿n hàm main() là ph¿n quan trãng nhÃt ca bt k chÔÂng trỡnh C no. Trỡnh biờn dỏch bt u thc hiỏn chÔÂng trỡnh C tĉ hàm main(). Hàm main() là b¿t buïc trong lÁp trình C. Nó có hai ph¿n:

Ph¿n khai báo: TÃt c cỏc bin Ôc s dng sau ny trong phn thi hnh Ôc khai bỏo trong ph¿n này.

Ph¿n thďc thi: Ph¿n này cha cỏc cõu lỏnh s Ôc thc hián bõi trình biên dách.

10 int x, y, tong; 11 printf("Nhap x = "); 12 scanf("%d", &x); 13 printf("Nhap y = "); 14 scanf("%d", &y); 15 tong = tinhtong(x,y); 16 printf("Tong = %d ", tong); 17 getch();

18 }

19 int tinhtong(int a, int b) Ph¿n chÔÂng trỡnh con: Cha tt c cỏc hm do ngÔúi dựng ỏnh ngh*a.

Khi biờn dỏch chÔÂng trỡnh, căn cć vào các lói gói hm, m cỏc mó chÔÂng trỡnh ca cỏc hm tÔÂng ng Ôc thc thi.

20 { 21 int t; 22 t = a + b ; 23 return t; 24 }

<b>Như vậy, một chương trình bao gồm các thành phần cơ bản sau đây </b>

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

3

[Ph¿n đánh ngh*a marco]

Xác ỏnh cỏc hng tÔng trÔng trong chÔÂng trỡnh. Hng tÔng trÔng l cỏc i lÔng có giá trá khơng thay ởi trong chÔÂng trỡnh. Phn ny khụng bt buùc phÁi có.

4

[Ph¿n khai báo nguyên hàm m¿u]

Khai báo các ngun m¿u hàm. Ph¿n này khơng b¿t bục, trong trÔúng hp phn ỏnh ngh*a cỏc hm Ôc t õ vá trí này thì bå qua các ngun hàm m¿u.

Thân hàm main(): chća các khai báo và các lánh thďc thi, chća các lói gãi hàm;

}

Đây l phn bt buùc phi cú. ChÔÂng trỡnh khi biờn dỏch Ôc thc hiỏn bt u t õy.

7

[ỏnh ngh*a hm ca ngÔúi dựng]

Nu cú lúi gói hm thì ph¿n này b¿t bục phÁi có. Có hai vá trí có thÅ đÁt các đánh ngh*a hàm.

Vá trí 1: TrÔủc hm main(), khi ú cú th bồ qua các khai báo nguyên hàm m¿u.

Vá trí 2: Sau hm main(), nhÔ vy bt buùc phi cú phn khai bỏo nguyờn hm mu trÔủc hm main().

õy l phn u tiờn trong mùt chÔÂng trỡnh vit bng ngụn ng C. Nhiám vă cąa ph¿n tài liáu cung cÃp nhčng thụng tin c bn v chÔÂng trỡnh: tỏc gi, ngy giú, tờn tỏp chÔÂng trỡnh v cú th thờm phn túm tt nùi dung ca chÔÂng trỡnh.

Khi biờn dỏch, chÔÂng trỡnh s bồ qua phn ny, bừi vỡ tt c nhng nùi dung trong phn ny, Ôc chÔÂng trỡnh hiÅu là các chú thích.

Các chú thích trong C Ôc th hiỏn dÔủi hai dng:

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

Ghi chú thích trên 1 dịng, sċ dăng ký hiáu //: // dịng chú thích

Ghi chú thích trên nhiÃu dòng, các dòng trong chỳ thớch Ôc t trong cp /* v */ nhÔ sau:

Trong chÔÂng trỡnh C (trong hm main cng nhÔ cỏc hm khỏc do ngÔúi lp trỡnh vit) cú th s dng cỏc hàm, hÁng, kiÅu dč liáu, v.v. (gãi chung là các thnh phn) ó Ôc ỏnh ngh*a trong thÔ viỏn ca C. ĐÅ sċ dăng các thành ph¿n này chúng ta phi chò dn cho chÔÂng trỡnh dỏch bit cỏc thụng tin và các thành ph¿n c¿n sċ dăng, các thông tin ú Ôc khai bỏo trong tỏp gãi là táp tiêu đà (có ph¿n mõ rïng là h - viÁt t¿t cąa header). Và ph¿n các bao hàm táp là các chß d¿n chÔÂng trỡnh gùp cỏc tỏp ny vo chÔÂng trỡnh. Trong mùt chÔÂng trình, có thÅ khơng dùng hoÁc dùng nhiÃu táp tiêu đÃ.

Cú pháp cąa mït dòng bao hàm táp:

#include <tên_táp> hoÁc #include <tên_táp=.

<b>Trong ú: tờn_tỏp l tờn cú th cú c Ôúng dn cąa táp tiêu đà (.h) </b>

mà chúng ta c¿n sċ dăng, míi lánh bao hàm táp trên mït dịng.

<b> Ví dā 1.6 </b>

Cho các khai báo bao hàm táp sau đây: #include<stdio.h>

#include <conio.h>

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

#include <phanso.h=

Sď khác nhau giča cÁp < > và < = bao quanh tên táp là vñi cÁp < >, chÔÂng trỡnh dỏch tỡm tờn tỏp tiờu trong thÔ mc ngm ỏnh xỏc ỏnh bừi Ôúng d¿n trong măc Option/Directories, còn vủi cp < = chÔÂng trỡnh dỏch tỡm tỏp trong thÔ mc hiỏn ti, nu khụng cú mủi tỡm trong thÔ mc cỏc tỏp tiờu ngm ỏnh nhÔ trÔúng hp < >.

Khỏi niỏm macro l gỡ? Gi s trong chÔÂng trỡnh cú mùt nùi dung (giá trá) nào đó và chỳng ta muỗn s dng nú nhiu ln trong chÔÂng trỡnh, nhÔng chỳng ta khụng muỗn vit trc tip nú vo chÔÂng trỡnh lỳc son tho, vỡ mùt vi lý do no ú (chng hn nhÔ nú s lm chÔÂng trình khó đãc, khó hiÅu, hc khi thay đëi s¿ khó, v.v.). Lúc này chúng ta hãy gán cho nïi dung đó mït <tên= và b¿n sċ dăng <tên= ú vit trong chÔÂng trỡnh nguộn. Khi biờn dỏch chÔÂng trỡnh, chÔÂng trỡnh dỏch s tď đïng thay thÁ nïi dung cąa <tên= vào đúng vá trí cąa <tên= đó. Thao tác này gãi là phép thÁ macro và chúng ta gãi <tên= là tên ca macro v nùi dung ca nú Ôc gói l nùi dung ca macro.

Mùt macro Ôc ỏnh ngh*a nhÔ sau: #define tên_macro nïi_dung

Trong đó, tên macro là mït tờn hp lỏ, nùi dung (giỏ trỏ) ca macro Ôc coi thu¿n tuý là mït xâu c¿n thay thÁ vào vỏ trớ xut hiỏn tờn ca macro tÔÂng ng, gia tên và nïi dung cách nhau mït hay nhiÃu khoÁng trỗng (du cỏch). Nùi dung ca macro bt u t kớ t khỏc du trỗng u tiờn sau tờn macro cho tđi hÁt dịng.

<b> Ví dā 1.7 </b>

<i>#define SOCOT 20 </i>

#define max(a,b) (a > b ? a:b)

Vñi hai vớ d trờn, khi gp tờn SOCOT, chÔÂng trỡnh dỏch s¿ tď đïng thay thÁ bõi 20 và max(a, b) s Ôc thay th bừi (a > b ? a : b);

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

kt qu khụng nhÔ chỳng ta mong i. Trong trÔúng hp ny chỳng ta nờn s dng du ngoc cho cỏc tham sỗ ca macro #define bp(a) (a)*(a).

Trong ph¿n này chúng ta nêu mùt sỗ thụng tin v khai bỏo nguyờn mu gii thớch cu trỳc chÔÂng trỡnh ch khụng cú ý đánh trình bày và hàm, chi tiÁt và hàm s¿ Ôc trỡnh by trong phn ỏnh ngh*a hm.

Nguyờn mu mït hàm là dịng khai báo cung cÃp các thơng tin: tờn hm, kiu hm, sỗ ỗi sỗ v kiu tng ỗi sỗ ca hm.

Cỳ phỏp khai bỏo nguyờn mu

<kiu_hm> <tờn_hm> ([khai bỏo ỗi]);

typedef <mụ_t_kiu> <tờn_kiu_mủi>;

Trong ú <tờn_kiu_mủi> l tờn kiu cn to do ngÔúi lp trình đÁt theo quy t¿c và tên cąa ngơn ngč và <mô_tÁ_kiÅu> là ph¿n chúng ta đánh ngh*a các thành ph¿n cÃu thành lên kiÅu mñi.

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

Sau ỏnh ngh*a ny cỏc tờn mủi byte Ôc dùng vđi ý ngh*a là tên kiÅu dč liáu nó tÔÂng t nhÔ unsigned charv nguyen_dai tÔÂng t nhÔ long.

Chúng ta có thÅ đánh ngh*a biÁn a, b kiÅu byte nhÔ sau:

byte a, b; (byte Ôc s dng l kiu d liỏu va Ôc ỏnh ngh*a unsigned char).

<i>1.3.2.6. Định nghĩa hàm </i>

Trong ph¿n này chúng ta ỏnh ngh*a cỏc hm ca ngÔúi dựng, mùt ỏnh ngh*a hàm bao gém dòng tiêu đà cąa hàm và thân ca hm, vủi cỳ phỏp nhÔ sau:

<kiu_hm> <tờn_hm> ([khai bỏo ỗi]) {

< thõn hm > }

<i>1.3.2.7. Hàm main() </i>

Đây là thành ph¿n b¿t buïc duy nhÃt trong mùt chÔÂng trỡnh C, thõn ca hm main() bt đ¿u tĉ sau dÃu mõ móc mõ ngc {cho tđi du múc úng ngoc}. Khụng giỗng nhÔ chÔÂng trỡnh ca Pascal luụn cú phn chÔÂng trỡnh chớnh, chÔÂng trỡnh trong C Ôc phõn thnh cỏc hm ùc lp cỏc hm cú cỳ phỏp nhÔ nhau v cựng mc v mùt hm m nhiỏm phn thõn chớnh ca chÔÂng trỡnh, tc l chÔÂng trỡnh s bt u Ôc thďc hián tĉ dòng lánh đ¿u tiên và kÁt thúc sau lỏnh cuỗi cựng trong thõn hm main().

Trong ỏnh ngh*a mït hàm nói chung đÃu có hai ph¿n đó là tiêu đà cąa hàm, dòng này bao gém các thông tin: Tên hàm, kiÅu hàm (kiÅu giá trá hàm tr v), cỏc tham sỗ hỡnh thc (tờn tham sỗ và kiÅu cąa chúng). Ph¿n thć hai là thân cąa hàm, đây là tÁp các lánh (hoÁc khai báo) thďc hián các thao tác theo yêu c¿u và chćc năng cąa hàm đó. Hàm main() cũng chò l mùt trÔúng hp riờng ca hm nhÔng cú tờn cỗ ỏnh l main,

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

cú th cú hoc khụng cú cỏc ỗi sỗ v cú thÅ trÁ và giá trá, kiÅu cąa giá trá này Ôc xỏc ỏnh bừi <kiu_hm> (chi tit v ỗi, kiu ca hm main() s Ôc cp k hÂn trong cỏc phn sau).

Thõn hm main() Ôc bao bõi cÁp dÃu mõ ngoÁc { và dÃu đóng ngoÁc } có thÅ gém các lánh, các khai báo hoÁc đánh ngh*a biÁn, hÁng, kiÅu, các thành ph¿n này trõ thnh cc bù trong hm main().

<b>LÔu ý: </b>

- Cỏc thnh phn ca chÔÂng trình mà chúng ta vĉa nêu, trĉ hàm main() là thành ph¿n phÁi có và duy nht trong mùt chÔÂng trỡnh viÁt bÁng ngơn ngč C, cịn các thành ph¿n khác là tuỳ chãn, có thÅ khơng có hc có.

- Thć tď các thành ph¿n khơng b¿t bục theo trt t nhÔ trờn m chỳng cú th xut hiỏn theo trt t tu ý nhÔng phi m bo yờu cu mói thnh phn phi Ôc khai bỏo hay ỏnh ngh*a trÔủc khi s dng.

- Các biÁn, hÁng khai báo ngồi mãi hàm có ph¿m vi sċ dăng là tồn căc (tćc là có thÅ sċ dăng tĉ sau lánh khai báo cho tñi hÁt chÔÂng trỡnh). Cỏc hng, bin khai bỏo trong mùt hm (hoc trong mùt khỗi) l thnh phn cc bù (cú phm vi s dng trong hm hoc trong khỗi đó mà thơi).

- Các hàm trong C là mït mćc (tćc là trong hàm không chća đánh ngh*a hàm khỏc).

ChÔÂng trỡnh C Ôc tở chc thnh nhiu cõu lánh, míi câu lánh có thÅ thďc hián mït cơng viỏc no ú, cuỗi mới cõu lỏnh phi Ôc kt thúc bÁng dÃu chÃm phÁy (;). Trên mït dịng có thÅ viÁt nhiÃu câu lánh và mït câu lánh cũng có thÅ viÁt trên nhiÃu dịng.

T¿i nhčng vá trí cąa câu lánh mà cho phép xuÃt hián mït hoÁc nhiÃu dÃu khng cách thì ta có thÅ ng¿t ph¿n cũn li ca cõu lỏnh xuỗng dũng tip theo.

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

6 (x > y)

7 printf(<x> y=); 8 }

Trong ví dă trên, õ dịng lánh thć hai, gém có hai câu lánh. Cõu lỏnh if Ôc vit trờn ba dũng th 5, 6 v 7.

Trong trÔ7 trờn, ỏc cõu lÔ7 trờn, ừ dũng lỏnc cõu { v } thỡ Ôỡ } lÔ7 trờn, ừ dũng lỏnh th hai, gộm cú hai cõu lỏnh. Cõu lỏnh if Ô

Trong cỳ phỏp ca các câu lánh, t¿i nhčng vá trí chß cho phép xut hiỏn mùt cõu lỏnh m ta muỗn thc hiỏn nhiÃu câu lánh thì ta phÁi đÁt nhčng câu lánh ú trong mùt khỗi lỏnh.

6 max = a;

7 printf(<\n phan tu lon nhat = %d=, max); 8 }

9 & 10 }

Trong Ví d 1.12, on chÔÂng trỡnh

-

// nùi dung ghi chú. Khi đó nïi dung ghi chỳ Ôc ghi trờn mùt dũng hoc phn cũn l¿i cąa mït dòng.

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

-

/* nïi dung ghi chú */. Khi đó nïi dung ghi chú có thÅ ghi trên mït dịng, trên nhiÃu dịng hc trên ph¿n cịn l¿i cąa mït dịng.

<b> Ví d 1.13 </b>

Vit chÔÂng trỡnh in ra sỗ lủn nht gia 2 sỗ a v b. 1 void main()

Khi biờn dỏch chÔÂng trỡnh, C gp cp du ghi chú s¿ không dách ra ngôn ngč máy.

<b>1.3.3. Trỡnh t cỏc bÔủc thc thi mùt chÔÂng trỡnh vit bng C </b>

ChÔÂng trỡnh C tuõn theo nhiu bÔủc trong thc thi. hiu rừ v trỡnh t cỏc bÔủc ca chÔÂng trỡnh C, trÔủc tiờn chỳng ta hóy xem mùt chÔÂng trỡnh Ân gin sau õy:

<b> Vớ d 1.14 </b>

Táp: simple.c

1 #include <stdio.h> 2 int main(){

3 printf("Xin chao! Day la chuong trinh don gian!"); 4 return 0;

5 }

Chúng ta hãy s¿ tìm hiÅu quá trình thc thi ca chÔÂng trỡnh trờn bng Hỡnh 1.1:

<b>BÔủc 1: Mó nguộn ca chÔÂng trỡnh C (C program, tỏp simple.c) </b>

Ôc gi đÁn bï tiÃn xċ lý (preprocessor). Bï tiÃn xċ lý có trách nhiám chun đëi các chß thá tiÃn xċ lý thnh cỏc giỏ trỏ tÔÂng ng ca chỳng. Bù tiÃn xċ lý t¿o ra mït mã nguén mõ rïng (Expanded source code, táp simple.i).

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

<b>Hình 1.1. Quỏ trỡnh th</b>c thi chÔÂng trỡnh

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

<b>BÔủc 2: Mó nguộn mừ rùng (tỏp simple.i) Ôc gċi đÁn trình biên </b>

dách (compiler) đÅ biên dách mã và chuyÅn đëi nó thành mã assembly (mã máy, táp simple.s).

<b>BÔủc 3: Mó asembly (tỏp simple.s) Ôc gi n trình biên dách mã </b>

(assembler) chuyÅn đëi simple.s thành mã ỗi tÔng (Object code). Bõy giú mùt tỏp tin simple.obj Ôc to ra.

<b>BÔủc 4: Mó ỗi tÔng (tỏp simple.obj) Ôc gi n trỡnh liờn kt </b>

liờn kt nú vủi thÔ viỏn, chng hn nhÔ cỏc tỏp tiờu . Sau ú, nú Ôc chuyn ởi thnh mó thďc thi (executable code). Mït tp tin Ân simple.exe Ôc to ra.

<b>BÔủc 5: Mó thc thi (tỏp simple.exe) Ôc gi n trình tÁi (loader) </b>

s¿ tÁi vào bï nhđ và sau ú nú Ôc thc thi. Sau khi thc hiỏn, u ra Ôc gi n bn iu khin.

<b>1.4. KIU D LIẩU TRONG C </b>

Kiu d liỏu Ôc hỏ thỗng dựng xỏc ỏnh cỏc thuùc tớnh c bn khỏc nhau v d liỏu Ôc lÔu trong bù nhủ. Các thục tính đó bao gém: lo¿i dč liáu, ph¿m vi ca d liỏu, sỗ byte bỏ chim dng, v.v.

Cỏc kiu d liỏu trong C Ôc phõn chia thnh 3 nhóm chính:

<b>Hình 1.2. Các ki</b>Åu dč liáu cąa ngơn ngč C <small>Kißu dữ liệu </small>

<small>Kißu dữ liệu ngun thÿy </small>

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

<small>signed long signed long int </small>

<small>unsigned long long </small>

<small>unsigned long long int </small>

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

<b>1.4.1. KiÅu dċ liÉu nguyên thăy </b>

Ngôn ng C hớ tr bỗn kiu d liỏu nguyờn thy, bao gém char, int, float và void. Các kiÅu dč liỏu nguyờn thy cũn Ôc gói l cỏc kiu d liỏu c bn, Ôc xỏc ỏnh trÔủc.

<b>Bng 1.2. Kiu dč liáu nguyên thąy </b>

</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">

hoÁc double, trong ú t khúa float xỏc ỏnh mùt sỗ chm đïng chính xác đ¢n trong ph¿m vi [1.2E-38, 3.4E+38], tĉ khúa double xỏc ỏnh mùt sỗ chm ùng chớnh xỏc kộp trong phm vi [2.3E-308, 1.7E+308]. Sỗ ch sỗ cú ngh*a sau du thp phõn Ôc gói l ù chớnh xác, đï chính xác cąa kiÅu float là 6 chč sỗ thp phõn v double l 15 ch sỗ thp phân.

<b> Ví dā 1.17 </b>

Cho các khai báo sau đây: float percentage = 95.67;

const float PI = 3.14159265359f; double speed = 2.998e+8;

Giỗng nhÔ tờn, kiu void khụng xỏc ỏnh giỏ trỏ. T khúa void Ôc s dng đÅ xác đánh hàm không trÁ và giá trá hoÁc kiÅu con trå.

<b> Ví dā 1.18 </b>

void * p; //Đánh ngh*a con trå p kiÅu void.

<b>1.4.2. KiÅu dċ liÉu d¿n xuÃt </b>

Các kiÅu dč liáu nguyờn thy Ôc trỡnh by trong 1.4.1 Ôc s dng cho viỏc khai bỏo cỏc bin trong chÔÂng trỡnh, tựy thuùc vào ph¿m vi sċ dăng. Nhčng kiÅu dč liáu này cú th Ôc sa ởi cho phự hp vủi nhng tỡnh huỗng khỏc nhau. Kt qu ca viỏc sa ởi ú, chỳng ta cú Ôc nhng kiu d liỏu dn xuÃt tĉ các kiÅu nguyên thąy này.

Mït kiÅu dč liỏu dn xut Ôc xỏc ỏnh bng cỏch xỏc ỏnh cỏc bở t chò kớch thÔủc hoc du cựng vủi các kiÅu dč liáu nguyên thąy. Các kiÅu d¿n xuÃt Ôc to bng cỏc d liỏu nguyờn thy cựng vủi cỏc hnh vi hay thuùc tớnh Ôc sa ởi. Cỏc bở t Ôc s dng kt hp trong C bao gém: signed, unsigned, long và short. Các bë tĉ trờn Ôc ỏp dng vủi kiu d liỏu ký t v kiu d liỏu sỗ nguyờn, bở t long cng cú th Ôc ỏp dng vủi kiu double.

khai báo kiÅu dč liáu d¿n xuÃt, ta đÁt các bë t trÔủc cỏc kiu d liỏu nguyờn thy.

<b> Vớ dā 1.19 </b>

signed int a; unsigned int b; signed char c;

</div>

×