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

591 1 0
Tài liệu đã được kiểm tra trùng lặp
Giáo trình ngôn ngữ lập trình c

Đ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

Dòng 1: #include : 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 chuÁn đ¿u vào/đ¿u ra, cho

Trang 1

Bî GIAO THÔNG VÀN TÀI

TR£òNG Đ¾I HâC CÔNG NGHÈ GIAO THÔNG VÀN TÀI LÊ CHÍ LUÀN (Chă biên)

GIÁO TRÌNH

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

Trang 3

MĀC LĀC

DANH MĀC BÀNG 12

DANH MĀC HÌNH 13

DANH MĀC CHĊ VIÀT TÂT 14

LòI NÓI ĐÄU 15

Ch¤¢ng 1.CÁC KHÁI NIÈM C¡ BÀN CĂA NGÔN NGĊ C 21

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

Trang 4

1.5.2.2 Khai báo hằng sử dụng từ khóa const 48

1.5.2.3 Khai báo hằng sử dụng chỉ thị #define 48

Trang 6

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

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

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

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

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

Trang 7

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

Trang 8

5.1.2.1 Khai báo mảng hai chiều 297

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

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

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á giča con trå và mÁng 323

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

5.3.2.3 Khai báo bằng con trỏ 338

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

5.3.3.1 Nhập xuất chuỗi ký tự 339

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

5.3.4 Các hàm xċ lý chuíi ký tď c¢ bÁn 343

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

Trang 9

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

5.3.4.3 Hàm sao chép chuỗi 348

5.3.4.4 Hàm ghép chuỗi 351

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

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

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

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

6.1.6.1 Định nghĩa cấu trúc riêng biệt 434

6.1.6.2 Định nghĩa cấu trúc nhúng 434

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

6.1.6.4 Minh họa cấu trúc lồng 435

6.1.7 CÃu trúc đ¤āc sċ dăng nh¤ mït tham sç cąa hàm 436

6.1.8 CÃu 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ç d¿ng bài tÁp vñi cÃu trúc 446

6.3 CASE STYDY 462

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

Trang 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

7.2.6.1 Ghi vào tệp nhị phân 506

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

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

Trang 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

Trang 12

DANH MĀC BÀNG

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

Bảng 1.2 Kiểu dữ liệu char 42

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

Bảng 2.2 Danh sách các tệp tiêu chuẩn 104

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

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

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

Trang 13

Hình 1.5 Giao diện màn hình của Turbo C 69

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

Hình 1.7 Màn hình New Project 73

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

Hình 1.9 Màn hình khi biên dịch thành công 75

Hình 1.10 Màn hình kết quả 75

Hình 3.1 Phân cấp các câu lệnh trong ch°¡ng trình C 125

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

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

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

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

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

Hình 3.7 S¡ đồ khối biểu diễn vòng lặp for 158

Hình 3.8 S¡ đồ khối biểu diễn vòng lặp while 168

Hình 3.9 Chuyển số thập phân sang số nhị phân 172

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

Hình 4.1 Minh họa cách thức thực thi hàm functionName() 215

Hình 4.2 Minh họa cách truyền tham số 220

Trang 15

LòI NÓI ĐÄU

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 phÁi là hình Ánh chính xác nhÃt đÅ đánh giá bõi GitHub luôn thiên vá vñi nhčng ngôn ngč mã nguén 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č hàng đ¿u trong năm 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 thÃp so vñi ngôn ngč trìu t¤āng khác B¿n 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 nhčng ph¿n khiÁn 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ù hāp h¢n vñi cách ho¿t đïng cąa máy tính ĐÅ viÁt mã C tçt, b¿n c¿n suy ngh* nh¤ máy tính

Thć hai, nhiÃu lÁp 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č cÃp cao h¢n nh¤ Python, Ruby khá dß dàng nh¤ng đÅ hãc ng¤āc l¿i thì không hà đ¢n giÁn BÁng 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 h¿u hÁt các ngôn ngč hián đ¿i th¤óng cao cÃp 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 nhčng điÅm ch¤a hoàn 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Å hiÅu rõ lý do t¿i sao mït sç ngôn ngč đ¤āc thiÁt kÁ theo cách đó và có khÁ năng đánh giá tçt h¢n và sď tián lāi mà các ngôn ngč cao h¢n cung cÃp

Lý do thć t¤, h¿u hÁt các ngôn ngč lÁp trình hián đ¿i đÃu đ¤āc sċ dăng cho ba măc đí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, nÁu b¿n muçn phát triÅn ph¿n mÃm đ¤āc kÁt nçi trďc tiÁp 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ċ dăng nhiÃu nhÃt 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

Trang 16

dách, các há thçng nhúng, v.v Chẳng h¿n, Linux kernel đ¤āc viÁt bÁng ngôn ngč C và Assembly Các ngôn ngč phë biÁn nh¤ Python, PHP, Perl và Ruby đÃu đ¤āc thďc hián trong C ThÁm chí, C cũng đ¤āc viÁt bÁng chính nó Bõi nhiÃu há thçng nhúng có giñi h¿n tài nguyên nghiêm ngÁt nên C th¤óng là ngôn ngč đ¤āc lďa chãn nhiÃu nhÃt vì tçn ít chi phí

Trong ch¤¢ng trình môn hãc cąa ngành Há thçng thông tin và mñi nhÃt là ngành 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 cąa 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 huyÁt 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 ngành Há thçng thông tin đã biên so¿n cuçn <Giáo trình Ngôn ngč lÁp 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à hành trang trên giÁng đ¤óng đ¿i hãc và lÁp nghiáp sau này

Giáo trình gém 8 ch¤¢ng:

CH£¡NG 1: CÁC KHÁI NIàM C¡ BÀN CĄA NGÔN NGČ C

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

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

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

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

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

Trang 17

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

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

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

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

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

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

đị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

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

CH£¡NG 4: HÀM

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

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

đúng cách

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

Trang 18

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

Ngoài ra, Ch°¡ng 5 còn trình bày một vấn đề, có thể nói là khá khó với

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

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

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

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

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

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°

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

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

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

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 hoàn toàn độc lập, v.v

Trang 19

CH£¡NG 7: TàP

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

đố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ế

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

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 để

CH£¡NG 8: Đè HâA

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

để 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 nội dung đầy đủ và phong phú h¡n

Cuçi míi ch¤¢ng đÃu xây dďng há thçng câu håi và bài tÁp đÅ sinh viên ôn tÁp, rèn luyán và cąng cç lý thuyÁt môn hãc <Giáo trình Ngôn ngč lÁp 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 t¿i 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 so¿n giáo trình này, nhóm tác giÁ có tham khÁo mït sç giáo trình viÁt và ngôn ngč C cąa mït sç tr¤óng đ¿i hãc có uy tín õ Viát Nam, mït sç chuyên gia nëi tiÁng và mït sç tài liáu uy tín cąa n¤ñc ngoài, đ¤ā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č lÁp 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 thành cÁm ¢n NCS.ThS Tr¿n Nguyên H¤¢ng, giÁng 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 quá trình nhóm biên so¿n cuçn giáo trình này

Trang 20

Trong quá trình biên so¿n, nhóm tác giÁ đã rÃt cç g¿ng đÅ có đ¤āc mït tài liáu tham khÁo có chÃt l¤āng, tuy nhiên không thÅ tránh khåi nhčng thiÁu sót RÃt mong đ¤āc sď đóng góp ý kiÁn đÅ giáo trình đ¤āc cÁp nhÁt và hoàn thián h¢n

Trang 21

Ch¤¢ng 1

CÁC KHÁI NIÈM C¡ BÀN CĂA NGÔN NGĊ C

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 l°ợng nh° biến và hằng trong một ch°¡ng trình và kiểu dữ liệu của

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

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ċ dăng 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 triÅn thành 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: kiÅu ký tď (character), kiÅu sç nguyên (interger) và kiÅu sç thďc (float))

Ngôn ngč C đ¤āc thiÁt 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 triÅn đÅ 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ċ dăng cho nhiÃu lo¿i ch¤¢ng trình khác nhau Nó nhanh chóng trõ thành mït trong nhčng ngôn ngč lÁp trình phë biÁn nhÃt trên thÁ giñi

Trang 22

Sď phë biÁn cąa C là do hai yÁu 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 bÁng C trên máy này 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 hoÁc 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č này đ¤āc cÁi thián và tăng c¤óng trên C bÁng cách thêm mït sç tính năng mñi

Mït trong nhčng ngôn ngč mñi nhÃt, Java, dďa trên C++, Java là đ¤āc thiÁt kÁ đÅ trõ thành <C++ vñi các líi đã đ¤āc sċa=

1.1.2 Các tính chÃt căa ngôn ngċ C

C là ngôn ngč đ¤āc sċ dăng rïng rãi C có nhčng tính chÃt sau đây:

- Đ¢n giÁn

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

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

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

- Ngôn ngċ lÁp trình bÁc trung

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

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

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

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 lại mã

- Th¤ viÉn phong phú

trình

- QuÁn lý bï nhñ

Trang 23

C hỗ trợ tính năng phân bổ bộ nhớ động Trong ngôn ngữ C, chúng

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

- ĐÉ quy

ph°¡ng pháp quay lui

- Mõ rïng

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

1.2 TÀP KÝ TČ HþP LÈ TRONG C 1.2.1 TÁp ký tč

Míi ngôn ngč lÁp trình đÃu đ¤āc xây dďng tĉ mït bï ký tď riêng cąa nó Các ký tď đ¤āc nhóm l¿i theo nhiÃu cách khác nhau đÅ t¿o nên các tĉ Sau đó các tĉ l¿i đ¤āc liên kÁt theo mït nguyên t¿c nào đó đÅ t¿o thành 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 thuÁt toán nào đó

Ngôn ngč C đ¤āc xây dďng 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ď g¿ch nçi _

- Các ký tď đÁc biát khác nh¤: , : ; [ ] { } ? ! \ & | % # $, v.v

L¤u ý:

- DÃu cách thďc sď là mït khoÁng cách dùng đÅ tách các tĉ

Trang 24

 Ví dā 1.2

Cho khai báo: int bien_dem;

Trong đó: int là tĉ khóa đÅ chß ra rÁng bien_dem là mït biÁn kiÅu int (kiÅu sç nguyên)

Ngôn ngč C phân biát giča hoa và chč th¤óng, vì vÁy tÃt cÁ các tĉ khóa phÁi đ¤āc viÁt bÁng chč th¤óng Sau đây là danh sách các tĉ khóa đ¤āc sċ dăng trong C:

1.2.3 Đánh danh

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 thďc hián ch¤¢ng trình Đánh danh th¤óng đ¤āc đÁt cho hÁng, biÁn, mÁng, con trå, nhãn, v.v ChiÃu dài tçi đa cąa đánh danh là 32 ký tď

Quy tÃc đ¿t đánh danh:

- Đá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ç, dÃu g¿ch d¤ñi

Trang 25

- Ký tď đ¿u tiên cąa đánh danh phÁi là chč cái hoÁc dÃu g¿ch d¤ñi - Không sċ dăng tĉ khóa làm đánh danh

- ChiÃu dài tçi đa cąa đánh danh là 32 ký tď

L¤u ý: Nên đÁt đánh danh có ý ngh*a trong các bài toán că thÅ  Ví dā 1.3

Mït sç đánh danh đúng: delta, a_1, x, x1, x2, Num_ODD; Mït sç đánh danh sai:

a-1 (sċ dăng dÃu g¿ch ngang)

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

1.3 MîT Sæ QUY £ðC KHI VIÀT CH£¡NG TRÌNH 1.3.1 Ch¤¢ng trình đÅu tiên

Mït ví dă kinh điÅn đ¤āc sċ dăng đÅ 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ċ dăng 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

- NhÃn F10 đÅ ch¿y ch¤¢ng trình, dòng chč <Hello, World= s¿ hiÅn thá trên màn hình console

GiÁi thích:

Trang 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 chuÁn đ¿u vào/đ¿u ra, cho phép sċ dăng các lánh đ¤āc chća trong táp stdio.h

Dòng 2: int main(): hàm chính, n¢i b¿t đ¿u thďc 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ċ dăng đÅ 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

1.3.2 CÃu trúc ch¤¢ng trình viÁt trong C

Mït ch¤¢ng trình trong C đ¤āc phân chia thành nhiÃu ph¿n Xem xét Ví dă 1.4 sau đây:

 Ví dā 1.4

ViÁt 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 t¿t nïi dung cąa 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 đà cąa các hàm th¤ vián chuÁn có thÅ đ¤āc sċ dăng 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 m¿u hàm đ¤āc sċ dăng trong ch¤¢ng trình

Trang 27

9 { Ph¿n hàm main() là ph¿n quan trãng nhÃt cąa bÃt kỳ ch¤¢ng trình C nào Trình biên dách b¿t đ¿u thďc 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 biÁn đ¤āc sċ dăng sau này trong ph¿n thi hành đ¤āc khai báo trong ph¿n này

Ph¿n thďc thi: Ph¿n này chća các câu lánh s¿ đ¤āc thďc 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: Chća tÃt cÁ các hàm 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 hàm, mà các mã ch¤¢ng trình cąa các hàm t¤¢ng ćng đ¤āc thďc thi

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

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

Trang 28

3

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

Xác đánh các hÁng t¤āng tr¤ng trong ch¤¢ng trình HÁng t¤āng tr¤ng là các đ¿i l¤āng có giá trá không thay đëi trong ch¤¢ng trình Ph¿n này không b¿t buïc phÁi có

4

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

Khai báo các nguyên m¿u hàm Ph¿n này không b¿t buïc, trong tr¤óng hāp ph¿n đánh ngh*a các hàm đ¤āc đÁt õ vá trí này thì bå qua các nguyên 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à ph¿n b¿t buïc phÁi có Ch¤¢ng trình khi biên dách đ¤āc thďc hián b¿t đ¿u tĉ đây

7

[Đánh ngh*a hàm cąa ng¤ói dùng]

NÁu có lói gãi hàm thì ph¿n này b¿t buïc phÁi có Có hai vá trí có thÅ đÁt các đánh ngh*a hàm

Vá trí 1: Tr¤ñc hàm main(), khi đó có thÅ bå qua các khai báo nguyên hàm m¿u

Vá trí 2: Sau hàm main(), nh¤ vÁy b¿t buïc phÁi có ph¿n khai báo nguyên hàm m¿u tr¤ñc hàm main()

Đây là ph¿n đ¿u tiên trong mït ch¤¢ng trình viÁt bÁng ngôn ngč C Nhiám vă cąa ph¿n tài liáu cung cÃp nhčng thông tin c¢ bÁn và ch¤¢ng trình: tác giÁ, ngày gió, tên táp ch¤¢ng trình và có thÅ thêm ph¿n tóm t¿t nïi dung cąa ch¤¢ng trình

Khi biên dách, ch¤¢ng trình s¿ bå qua ph¿n này, bõi vì tÃt cÁ nhčng nïi dung trong ph¿n này, đ¤ā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 d¿ng:

Trang 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 cÁp /* và */ nh¤ sau:

Trong ch¤¢ng trình C (trong hàm main cũng nh¤ các hàm khác do ng¤ói lÁp trình viÁt) có thÅ sċ dăng các hàm, hÁng, kiÅu dč liáu, v.v (gãi chung là các thành ph¿n) đã đ¤āc đánh ngh*a trong th¤ vián cąa C ĐÅ sċ dăng các thành ph¿n này chúng ta phÁi chß d¿n cho ch¤¢ng trình dách biÁt 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 này vào 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=

Trong đó: tên_táp là tên có thÅ có cÁ đ¤óng d¿n cąa táp tiêu đà (.h)

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

 Ví dā 1.6

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

#include <conio.h>

Trang 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¤ măc ng¿m đánh xác đánh bõi đ¤óng d¿n trong măc Option/Directories, còn vñi cÁp < = ch¤¢ng trình dách tìm táp trong th¤ măc hián t¿i, nÁu không có mñi tìm trong th¤ măc các táp tiêu đà ng¿m đánh nh¤ tr¤óng hāp < >

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ċ dăng nó nhiÃu l¿n trong ch¤¢ng trình, nh¤ng chúng ta không muçn viÁt trďc tiÁp nó vào ch¤¢ng trình lúc so¿n thÁo, vì mït vài lý do nào đó (chẳng h¿n nh¤ nó s¿ làm ch¤¢ng trình khó đãc, khó hiÅu, hoÁc 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= đó đÅ viÁt 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 cąa macro và nïi dung cąa nó đ¤āc gãi là nïi dung cąa 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 hāp lá, nïi dung (giá trá) cąa macro đ¤āc coi thu¿n tuý là mït xâu c¿n thay thÁ vào vá trí xuÃt hián tên cąa macro t¤¢ng ćng, giča tên và nïi dung cách nhau mït hay nhiÃu khoÁng trçng (dÃu cách) Nïi dung cąa macro b¿t đ¿u tĉ kí tď khác dÃu trçng đ¿u tiên sau tên macro cho tñi hÁt dòng

 Ví dā 1.7

#define SOCOT 20

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

Vñi hai ví dă trên, khi gÁp 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);

Trang 31

kÁt quÁ không nh¤ chúng ta mong đāi Trong tr¤óng hāp này chúng ta nên sċ dăng dÃu ngoÁc cho các tham sç cąa 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 m¿u đÅ giÁi thích cÃu 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 bày trong ph¿n đánh ngh*a hàm

Nguyên m¿u mït hàm là dòng khai báo cung cÃp các thông tin: tên hàm, kiÅu hàm, sç đçi sç và kiÅu tĉng đçi sç cąa hàm

Cú pháp khai báo nguyên m¿u

<kiÅu_hàm> <tên_hàm> ([khai báo đçi]);

typedef <mô_tÁ_kiÅu> <tên_kiÅu_mñi>;

Trong đó <tên_kiÅu_mñi> là tên kiÅu c¿n t¿o do ng¤ói lÁp 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

Trang 32

Sau đánh ngh*a này 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ċ dăng là kiÅu dč liáu vĉa đ¤āc đánh ngh*a unsigned char)

1.3.2.6 Định nghĩa hàm

Trong ph¿n này chúng ta đánh ngh*a các hàm cąa 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 cąa hàm, vñi cú pháp nh¤ sau:

<kiÅu_hàm> <tên_hàm> ([khai báo đçi]) {

< thân hàm > }

1.3.2.7 Hàm main()

Đây là thành ph¿n b¿t buïc duy nhÃt trong mït ch¤¢ng trình C, thân cąa hàm main() b¿t đ¿u tĉ sau dÃu mõ móc mõ ngoÁc {cho tñi dÃu móc đóng ngoÁc} Không giçng nh¤ ch¤¢ng trình cąa Pascal luôn có ph¿n ch¤¢ng trình chính, ch¤¢ng trình trong C đ¤āc phân thành các hàm đïc lÁp các hàm có cú pháp nh¤ nhau và cùng mćc và mït hàm đÁm nhiám ph¿n thân chính cąa ch¤¢ng trình, tćc là ch¤¢ng trình s¿ b¿t đ¿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 hàm 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 thćc (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 hāp riêng cąa hàm nh¤ng có tên cç đánh là main,

Trang 33

có thÅ có hoÁc 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 <kiÅu_hàm> (chi tiÁt và đçi, kiÅu cąa hàm main() s¿ đ¤āc đà cÁp kỹ h¢n trong các ph¿n sau)

Thân hàm 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õ thành căc bï trong hàm main()

L¤u ý:

- Các thành ph¿n cąa 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 nhÃt 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ó hoÁc có

- Thć tď các thành ph¿n không b¿t buïc theo trÁt tď nh¤ trên mà chúng có thÅ xuÃt hián theo trÁt tď tuỳ ý nh¤ng phÁi đÁm bÁo yêu c¿u mãi thành ph¿n phÁi đ¤āc khai báo hay đánh ngh*a tr¤ñc khi sċ dăng

- Các biÁn, hÁng khai báo ngoài mãi hàm có ph¿m vi sċ dăng là toà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 hÁng, biÁn khai báo trong mït hàm (hoÁc trong mït khçi) là thành ph¿n căc bï (có ph¿m vi sċ dăng trong hàm hoÁc 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ë chćc thành nhiÃu câu lánh, míi câu lánh có thÅ thďc hián mït công viác nào đó, cuçi míi câu lánh phÁi đ¤āc kÁt 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 khoÁng cách thì ta có thÅ ng¿t ph¿n còn l¿i cąa câu lánh xuçng dòng tiÁp theo

Trang 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 viÁt 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ánÁc 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 cąa các câu lánh, t¿i nhčng vá trí chß cho phép xuÃt hián mït câu lánh mà ta muçn thďc 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, đo¿n ch¤¢ng trình

- // nïi dung ghi chú Khi đó nïi dung ghi chú đ¤āc ghi trên mït dòng hoÁc ph¿n còn l¿i cąa mït dòng

Trang 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 hoÁc trên ph¿n còn l¿i cąa mït dòng

 Ví dā 1.13

ViÁt ch¤¢ng trình in ra sç lñn nhÃt giča 2 sç a và b 1 void main()

Khi biên dách ch¤¢ng trình, C gÁp cÁp dÃu ghi chú s¿ không dách ra ngôn ngč máy

1.3.3 Trình tč các b¤ñc thčc thi mït ch¤¢ng trình viÁt bÅng C

Ch¤¢ng trình C tuân theo nhiÃu b¤ñc trong thďc thi ĐÅ hiÅu rõ và trình tď các b¤ñc cąa ch¤¢ng trình C, tr¤ñc tiên chúng ta hãy xem mït ch¤¢ng trình đ¢n giÁn sau đây:

 Ví dā 1.14

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 thďc thi cąa ch¤¢ng trình trên bÁng Hình 1.1:

B¤ñc 1: Mã nguén cąa ch¤¢ng trình C (C program, táp simple.c)

đ¤āc gċi đÁn bï tiÃn xċ lý (preprocessor) Bï tiÃn xċ lý có trách nhiám chuyÅn đëi các chß thá tiÃn xċ lý thành các giá trá t¤¢ng ćng cąa 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)

Trang 36

Hình 1.1 Quá trình thďc thi ch¤¢ng trình

Trang 37

B¤ñc 2: Mã nguén mõ rïng (táp simple.i) đ¤āc gċi đÁn trình biên

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¤ñc 3: Mã asembly (táp simple.s) đ¤āc gċi đÁn trình biên dách mã

(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 t¿o ra

B¤ñc 4: Mã đçi t¤āng (táp simple.obj) đ¤āc gċi đÁn trình liên kÁt

liên kÁt nó vñi th¤ vián, chẳng h¿n nh¤ các táp tiêu đà Sau đó, nó đ¤āc chuyÅn đëi thành mã thďc thi (executable code) Mït tÁp tin đ¢n simple.exe đ¤āc t¿o ra

B¤ñc 5: Mã thďc thi (táp simple.exe) đ¤āc gċi đÁn trình tÁi (loader)

s¿ tÁi vào bï nhñ và sau đó nó đ¤āc thďc thi Sau khi thďc hián, đ¿u ra đ¤āc gċi đÁn bàn điÃu khiÅn

1.4 KIÄU DĊ LIÈU TRONG C

KiÅu dč liáu đ¤āc há thçng dùng đÅ xác đánh các thuïc tính c¢ bÁn khác nhau và dč liáu đ¤āc l¤u trong bï nhñ Các thuïc tính đó bao gém: lo¿i dč liáu, ph¿m vi cąa dč liáu, sç byte bá chiÁm dăng, v.v

Các kiÅu dč liáu trong C đ¤āc phân chia thành 3 nhóm chính:

Hình 1.2 Các kiÅu dč liáu cąa ngôn ngč C Kißu dữ liệu

Kißu dữ liệu nguyên thÿy

Trang 38

signed long signed long int

unsigned long long

unsigned long long int

Trang 39

1.4.1 KiÅu dċ liÉu nguyên thăy

Ngôn ngč C hí trā bçn kiÅu dč liáu nguyên thąy, bao gém char, int, float và void Các kiÅu dč liáu nguyên thąy còn đ¤āc gãi là các kiÅu dč liáu c¢ bÁn, đ¤āc xác đánh tr¤ñc

BÁng 1.2 KiÅu dč liáu nguyên thąy

Trang 40

hoÁc double, trong đó tĉ khóa float xác đánh mït sç chÃm đï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ç chÃm đïng chính xác kép trong ph¿m vi [2.3E-308, 1.7E+308] Sç chč sç có ngh*a sau dÃu thÁp phân đ¤āc gãi là đï chính xác, đï chính xác cąa kiÅu float là 6 chč sç thÁp phân và double là 15 chč sç thÁp phân

 Ví dā 1.17

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, kiÅu void không xác đánh giá trá Tĉ khóa void đ¤āc sċ dăng đÅ xác đánh hàm không trÁ và giá trá hoÁc kiÅu con trå

 Ví dā 1.18

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

1.4.2 KiÅu dċ liÉu d¿n xuÃt

Các kiÅu dč liáu nguyên thąy đ¤āc trình bày trong 1.4.1 đ¤āc sċ dăng cho viác khai báo các biÁn 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 sċa đëi cho phù hāp vñi nhčng tình huçng khác nhau KÁt quÁ cąa viác sċa đëi đó, chúng ta có đ¤āc nhčng kiÅu dč liáu d¿n xuÃt tĉ các kiÅu nguyên thąy này

Mït kiÅu dč liáu d¿n xuÃt đ¤āc xác đánh bÁng cách xác đánh các bë tĉ chß kích th¤ñc hoÁc dÃu cùng vñi các kiÅu dč liáu nguyên thąy Các kiÅu d¿n xuÃt đ¤āc t¿o bÁng các dč liáu nguyên thąy cùng vñi các hành vi hay thuïc tính đ¤āc sċa đëi Các bë tĉ đ¤āc sċ dăng đÅ kÁt hāp trong C bao gém: signed, unsigned, long và short Các bë tĉ trên đ¤āc áp dăng vñi kiÅu dč liáu ký tď và kiÅu dč liáu sç nguyên, bë tĉ long cũng có thÅ đ¤āc áp dăng vñi kiÅu double

ĐÅ khai báo kiÅu dč liáu d¿n xuÃt, ta đÁt các bë tĉ tr¤ñc các kiÅu dč liáu nguyên thąy

 Ví dā 1.19

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

Ngày đăng: 02/06/2024, 12:59