1. Trang chủ
  2. » Công Nghệ Thông Tin

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

591 2 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Giáo Trình Ngôn Ngữ Lập Trình C
Tác giả Lê Trung Kiên, Lê Thị Chi Phạm, Thái Thuần, Nguyễn Thị Kim Huệ
Trường học Đại Học Giao Thông Vận Tải
Chuyên ngành Ngôn Ngữ Lập Trình
Thể loại Giáo trình
Năm xuất bản 2020
Thành phố Hà Nội
Định dạng
Số trang 591
Dung lượng 2,95 MB

Cấu trúc

  • 1.1. GIðI THIàU NGÔN NGČ C (0)
    • 1.1.1. Lách sċ ngôn ngč lÁp trình C (0)
    • 1.1.2. Các tính chÃt cąa ngôn ngč C (0)
  • 1.2. TÀP KÝ TĎ HĀP Là TRONG C (0)
    • 1.2.1. TÁp ký tď (23)
    • 1.2.2. Tĉ khóa (0)
    • 1.2.3. Đánh danh (24)
  • 1.3. MợT Sổ QUY ÊðC KHI VIÀT CHÊĂNG TRèNH (25)
    • 1.3.1. Ch¤¢ng trình đ¿u tiên (0)
    • 1.3.2. CÃu trúc ch¤¢ng trình viÁt trong C (26)
      • 1.3.2.1. Ph ầ n tài li ệ u (28)
      • 1.3.2.2. Phần liên kết (Bao hàm tệp) (29)
      • 1.3.2.3. Ph ần định nghĩa marco (30)
      • 1.3.2.4. Khai báo nguyên m ẫ u (31)
      • 1.3.2.5. Ph ần định nghĩa các cấ u trúc (31)
      • 1.3.2.6. Định nghĩa hàm (32)
      • 1.3.2.7. Hàm main() (32)
      • 1.3.2.8. Câu l ệ nh (33)
      • 1.3.2.9. Chú thích (34)
    • 1.3.3. Trỡnh tď cỏc bÔủc thďc thi mùt chÔÂng trỡnh viÁt bÁng C (0)
  • 1.4. KIÄU DČ LIàU TRONG C (0)
    • 1.4.1. KiÅu dč liáu nguyên thąy (0)
      • 1.4.1.1. Ki ể u ký t ự (39)
      • 1.4.1.2. Kiểu nguyên (39)
      • 1.4.1.3. Ki ể u th ự c (39)
      • 1.4.1.4. Ki ể u void (40)
    • 1.4.2. KiÅu dč liáu d¿n xuÃt (0)
      • 1.4.2.1. B ổ t ừ signed và unsigned (41)
      • 1.4.2.2. B ổ t ừ short và long (42)
    • 1.4.3. KiÅu dč liáu do ng¤ói dùng đánh ngh*a (0)
  • 1.5. BIÀN VÀ HÀNG (43)
    • 1.5.1. BiÁn (43)
      • 1.5.1.1. Định nghĩa (43)
      • 1.5.1.2. Khai báo bi ế n (44)
      • 1.5.1.3. Khai báo và kh ở i t ạ o giá tr ị cho các bi ế n (44)
      • 1.5.1.4. Ph ạ m vi c ủ a bi ế n (45)
    • 1.5.2. HÁng (0)
      • 1.5.2.1. Định nghĩa (46)
      • 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)
      • 1.5.2.4. Phân lo ạ i h ằ ng (49)
  • 1.6. BIÄU THĆC VÀ PHÉP TOÁN (0)
    • 1.6.1. Toán tċ gán (0)
    • 1.6.2. Ép kiÅu dč liáu (0)
    • 1.6.3. BiÅu thćc (53)
      • 1.6.3.1. Định nghĩa biể u th ứ c (53)
      • 1.6.3.2. Bi ể u th ứ c s ố h ọ c (53)
      • 1.6.3.3. Bi ể u th ứ c logic (54)
      • 1.6.3.4. Biểu thức điều kiện (55)
    • 1.6.4. Các toán tċ (55)
      • 1.6.4.1. Toán t ử s ố h ọ c (56)
      • 1.6.4.2. Toán t ử quan h ệ (57)
      • 1.6.4.3. Toán t ử logic (59)
      • 1.6.4.4. Toán tử tăng giảm (60)
      • 1.6.4.5. Toán t ử gán (62)
      • 1.6.4.6. Toán t ử bit (63)
  • 1.7. MợT Sổ TOOL SĊ DĂNG (0)
    • 1.7.1. Turbo C (68)
      • 1.7.1.1. G ọ i Turbo C (68)
      • 1.7.1.2. So ạ n th ảo ch°¡ng trình mớ i (69)
      • 1.7.1.3. Ghi ch°¡ng trình đang soạ n th ảo vào đĩa (71)
      • 1.7.1.4. Th ự c hi ện ch°¡ng trình (72)
      • 1.7.1.5. Ch ạy ch°¡ng tr ình (72)
    • 1.7.2. DevC (72)
      • 1.7.2.1. So ạ n th ảo ch°¡ng trình C bằ ng DevC++ (72)
      • 1.7.2.2. Th ự c hi ện ch°¡ng trình (74)
  • A. BÀI TÀP CÓ LòI GIÀI (76)
  • B. BÀI TÀP TĎ GIÀI (80)
    • 2.1. NHÀP XUÂT DČ LIàU (0)
      • 2.1.1. Hàm kÁt xuÃt dč liáu printf() (0)
      • 2.1.2. Hàm nhÁp liáu scanf() (0)
      • 2.1.3. Hàm đãc và ghi táp trong C (0)
        • 2.1.3.1. Hàm fprintf() (102)
        • 2.1.3.2. Hàm fscanf() (103)
    • 2.2. HÀM NHÀP/XUÂT KÍ TĎ VÀ DÒNG VÀO STDIN (0)
      • 2.2.1. Dòng vào stdin (104)
        • 2.2.1.1. Hàm gets() (105)
        • 2.2.1.2. Hàm getchar() (107)
      • 2.2.2. Các hàm xuÃt ký tď puts(), putchar() (0)
        • 2.2.2.1. Hàm puts() (110)
        • 2.2.2.2. Hàm putchar() (111)
      • 2.2.3. Các hàm vào ra trên màn hình, bàn phím (112)
        • 2.2.3.1. Hàm getch() (112)
        • 2.2.3.2. Hàm getche() (113)
        • 2.2.3.3. Hàm putch() (114)
        • 2.2.3.4. Hàm kbhit() (115)
    • 2.3. MợT Sổ VÍ DĂ (115)
  • ChÔÂng 3 CÁC C Â U TRÚC PHÂN NHÁNH VÀ VềNG L ắ P (0)
    • 3.1. CÂU TRÚC PHÂN NHÁNH (0)
      • 3.1.1. Câu lánh điÃu kián If (0)
        • 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)
      • 3.1.2. CÃu trúc switch (144)
      • 3.1.3. Toán tċ goto và nhãn (0)
        • 3.1.3.1. Cú pháp (152)
        • 3.1.3.2. Ho ạt độ ng (152)
    • 3.2. CÂU TRÚC VÒNG LÀP (FOR, WHILE, DO& WHILE) (0)
      • 3.2.1. CÃu trúc vòng lÁp For (157)
        • 3.2.1.1. Cú pháp (157)
        • 3.2.1.2. Ho ạt độ ng (157)
        • 3.2.1.3. S¡ đồ kh ố i (158)
      • 3.2.2. CÃu trúc vòng lÁp while (0)
        • 3.2.2.1. Cú pháp (167)
        • 3.2.2.2. Ho ạt độ ng (168)
        • 3.2.2.3. S¡ đồ kh ố i (168)
      • 3.2.3. CÃu trúc vòng lÁp do & while (0)
        • 3.2.3.1. Cú pháp (173)
        • 3.2.3.2. Ho ạt độ ng (173)
    • 3.3. CÂU LàNH BREAK, CONTINUE (0)
      • 3.3.1. Câu lánh break (0)
      • 3.3.2. Câu lánh continue (0)
    • 4.1. KHÁI NIàM HÀM (0)
      • 4.1.1. Khái niám (211)
        • 4.1.1.1. Định nghĩa (211)
        • 4.1.1.2. Phân lo ạ i hàm (213)
        • 4.1.1.4. Cách xác đị nh m ộ t hàm (214)
      • 4.1.2. Khai báo hàm (214)
        • 4.1.2.1. C ấu trúc ch°¡ng trình chứ a hàm (214)
        • 4.1.2.2. Khai báo hàm (215)
    • 4.2. SĊ DĂNG HÀM (0)
      • 4.2.1. Vá trí viÁt hàm (218)
      • 4.2.2. Lúi gói hàm và truyÃn tham sỗ (219)
        • 4.2.2.1. L ờ i g ọ i hàm (219)
        • 4.2.2.2. Truy ề n tham s ố (221)
    • 5.1. MÀNG (275)
      • 5.1.1. MÁng mùt chiÃu (275)
        • 5.1.1.1. Khai báo mảng (275)
        • 5.1.1.2. Truy c ậ p các ph ầ n t ử c ủ a m ả ng (276)
        • 5.1.1.3. Các d ạ ng bài t ậ p m ả ng m ộ t chi ề u (278)
      • 5.1.2. MÁng hai chiÃu (297)
        • 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 (0)
      • 5.2.4. Con trồ và hàm (326)
      • 5.2.5. QuÁn lý bù nhủ đùng (328)
        • 5.2.5.1. Hàm malloc() (329)
        • 5.2.5.2. Hàm calloc() (329)
        • 5.2.5.3. Phân bi ệ t gi ữ a malloc() và calloc() (329)
        • 5.2.5.4. Hàm free() (330)
      • 5.2.6. Mùt sỗ bài tÁp sċ dăng con trồ (0)
    • 5.3. CHUìI KÝ TĎ (334)
      • 5.3.1. Đánh ngh*a (334)
      • 5.3.2. Khai báo (337)
        • 5.3.2.1. Khai báo b ằ ng m ả ng (337)
        • 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 (0)
        • 5.3.4.1. Hàm xác định độ dài chu ỗ i (343)
        • 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)
      • 5.3.5. Mùt sỗ d¿ng bài tÁp và chuới ký tď (363)
    • 6.1. ĐàNH NGH)A (421)
      • 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 (0)
      • 6.1.3. Khõi t¿o kiÅu cÃu trúc (0)
      • 6.1.4. Khai bỏo vủi tĉ khúa typedef (0)
      • 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 (0)
      • 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 (197)
      • 6.3.1. Phát biÅu bài toán (462)
      • 6.3.2. HÔủng giÁi quyÁt vÃn đà (462)
        • 6.3.2.1. Lựa chọn cấu trúc dữ liệu để giải quyết bài toán (462)
        • 6.3.2.2. Gi ả i quy ế t v ấn đề (475)
    • 7.1. KHÁI NIàM VÂ TàP TIN (0)
      • 7.1.1. Khái niám táp (0)
      • 7.1.2. Phân lo¿i táp (500)
        • 7.1.2.1. T ệp văn bả n (500)
        • 7.1.2.2. T ệ p nh ị phân (500)
    • 7.2. THAO TÁC XĊ LÝ VðI TàP (0)
      • 7.2.1. Cỏc thao tỏc vủi tỏp tin (500)
      • 7.2.2. Khai báo táp tin (0)
      • 7.2.3. Mõ táp tin (0)
      • 7.2.4. Đóng táp (503)
      • 7.2.5. Đóc và ghi vủi tỏp văn bÁn (0)
      • 7.2.6. Đãc và ghi táp nhá phân (0)
        • 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)
      • 7.2.7. Mùt sỗ hàm khỏc đÔāc sċ dăng đÅ xċ lý tỏp (0)
        • 7.2.7.1. Hàm fputs() (512)
        • 7.2.7.2. Hàm fgets() (513)
        • 7.2.7.3. Hàm fputc() (0)
        • 7.2.7.4. Hàm fgetc() (514)
    • 7.3. MợT Sổ VÍ DĂ VÂ TàP (0)
    • 8.1. GIðI THIàU (555)
      • 8.1.1. Ch¤¢ng trình đ¿u tiên (0)
      • 8.1.2. GiÁi thích và các lánh (555)
    • 8.2. CÁC HÀM Đè HâA (557)
      • 8.2.1. ThiÁt lÁp chÁ đù độ hóa (557)
      • 8.2.2. ThiÁt lÁp màu s¿c (558)
      • 8.2.3. Các hàm đé hãa đÅ v¿ hình (560)
    • 8.3. MợT Sổ VÍ DĂ (564)

Nội dung

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

GIðI THIàU NGÔN NGČ C

TÀP KÝ TĎ HĀP Là TRONG C

TÁp ký tď

Mỗi ngôn ngữ lập trình đều có những ký tự riêng biệt Các ký tự này đượ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 nhất định để 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 thực hiện 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, ,

- Các ký tď toán hãc: +, - , *, /, =, (, ),

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

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

b ? a : b);

- Phộp thay thÁ macro đÂn giÁn chò là thay nùi dung macro vào vỏ trớ tên cąa nó do vÁy s¿ không có c¢ chÁ kiÅm tra kiÅu

Khi định nghĩa các macro có tham số, việc không sử dụng dấu ngoặc có thể dẫn đến kết quả không như mong muốn Ví dụ, với macro #define bp(a) a*a, khi sử dụng bp(x + y), kết quả sẽ là x + y * x + y, không đúng với ý định ban đầu Do đó, để tránh sai sót, chúng ta nên sử dụng dấu ngoặc cho các tham số trong macro, như #define bp(a) (a)*(a).

Trong phần này, chúng ta sẽ cung cấp 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, không nhằm mục đích trình bày chi tiết về hàm và các thành phần cụ thể, vì những nội dung đó 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

([khai bỏo đỗi]);

Cho các khai bao nguyên m¿u sau đây: int min (int, int); float binhphuong (float y); float giatri(int, float);

Phân khai bỏ đổi của nguyên mẫu, mặc đớch là xác định số đổi số và kiểu của tầng đổi số Do vậy, bạn cần phải viết tên của đổi số theo kiểu của chúng, và bạn phải liệt kê đây là kiểu của tầng đổi số.

1.3.2.5 Phần định nghĩa các cấu trúc

Ngoài những kiểu chuẩn đã được cung cấp sẵn của ngôn ngữ, ngôn ngữ lập trình còn hỗ trợ định nghĩa ra các kiểu mũi tên, trong đó các kiểu này được tạo ra bằng cách sử dụng từ khóa typedef (type define).

Vủi cỳ phỏp nhÔ sau: typedef ;

Trong đú, tên kiểu mũi là tên kiểu được tạo ra theo quy tắc và tên của ngôn ngữ, trong khi 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.

Cho hai đánh ngh*a cÃu trúc sau đây: typedef unsigned char byte; typedef long nguyen_dai;

Trong ngôn ngữ lập trình, kiểu dữ liệu byte thường được sử dụng để định nghĩa các biến có tên như a và b, với cú pháp khai báo là: byte a, b; trong đó byte là kiểu dữ liệu tương ứng với unsigned char Đồng thời, kiểu dữ liệu nguyên dài được biểu diễn bằng từ khóa long.

Trong phần này, chúng ta sẽ đánh giá các hàm của ngôn ngữ lập trình, bao gồm định nghĩa hàm, các tham số của hàm và thân hàm Việc hiểu rõ cấu trúc và chức năng của hàm là rất quan trọng để tối ưu hóa quá trình lập trình.

([khai bỏo đỗi])

Xõy dďng hàm tỡm sỗ bộ nhÃt cąa hai sỗ nguyờn a, b int max( int a, int b)

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()

KIÄU DČ LIàU TRONG C

KiÅu dč liáu d¿n xuÃt

short int e; long int f; long double g;

1.4.2.1 Bổ từ signed và unsigned

Khi khai báo mút số nguyên, mảng đỏnh đúng là số nguyên có dấu (âm, dương) Bởi vì ký hiệu signed và unsigned đều xác định dạng thể hiện dấu của các kiểu dữ liệu ký tự hoặc số nguyên.

Có hai kiểu dữ liệu trong lập trình là char và int, trong đó int có thể có dấu âm hoặc không Theo quy định, kiểu int được xem là kiểu có dấu, cho phép lưu trữ các số âm Để sử dụng kiểu không có dấu, lập trình viên cần khai báo unsigned int Ngoài ra, thay vì sử dụng unsigned int, người ta cũng có thể sử dụng kiểu int, nhưng điều này chỉ áp dụng cho trường hợp không cần lưu trữ số âm.

Khai báo unsigned int a và unsigned a đ¤āc ch¤¢ng trình xem là t¤¢ng đ¤¢ng nhau

Kiểu unsigned cho rừ ràng mút biến cho cú thể nhấn giỏ trỏ động Bởi cách này thường được sử dụng với kiểu int và trong một vài trường hợp có thể được áp dụng với kiểu dữ liệu float, nhưng điều này làm mất tính linh động của mẫu lệnh.

Vủi viỏc thờm bở tĉ unsigned vào trÔủc kiÅu dč liỏu int, miÃn giỏ trỏ cąa cỏc sỗ dÔÂng này đÔāc tăng lờn gÃp đụi

Khi khai báo biến `unsigned int a;`, phạm vi của biến a sẽ là [0, 65535], khác với phạm vi [-32768, 32767] của kiểu `int` Đặc thù của C không xác định rõ ràng kiểu `char` có dấu hay không có dấu, và điều này phụ thuộc vào quy định của nhà phát hành trình biên dịch Do đó, để tránh sai sót khi làm việc trên nhiều loại trình biên dịch C khác nhau, cần khai báo rõ ràng các kiểu dữ liệu là signed hay unsigned khi làm việc với kiểu `char` Điều này đặc biệt quan trọng khi sử dụng kiểu `char` như một kiểu "ký tự".

 Ví dā 1.21 unsigned char g; signed char t;

Các kiểu dữ liệu char, signed char và unsigned char là những loại khác nhau trong lập trình Ngoài ra, các hàm chuẩn và dãy ký tự sử dụng các kiểu char không có định tính, nhiều trình biên dịch C có thể gặp lỗi nếu các kiểu ký tự khác được sử dụng thay thế cho dãy ký tự khi truyền vào các hàm này.

BÁng 1.3 KiÅu dč liáu char

KiÅu Ph¿m vi Kớch thÔủc

[signed] char -128 đÁn 127 1byte unsigned char 0 đÁn 255 1byte

 Ví dā 1.22 Đo¿n ch¤¢ng trình sau minh hãa sď khác nhau giča hai kiÅu char char ch1; unsigned char ch2; ch1 = 200; ch2 = 200;

Khi sử dụng câu lệnh in printf(\n' hoặc dữ liệu sau khoảng trống, điều này sẽ ảnh hưởng đến các hàm nhập dữ liệu sau đó.

Hàm gets() trong ngôn ngữ lập trình C được sử dụng để đọc một dòng dữ liệu từ chuẩn đầu vào (stdin) và lưu vào một biến chuỗi Khi chương trình đọc dữ liệu vào biến chuỗi, hàm gets sẽ tự động bỏ ký tự xuống dòng Nội dung phần 2.2.1.1 sẽ giới thiệu cách đọc dữ liệu chuỗi từ console bằng hàm gets() trong C và so sánh sự khác biệt giữa hàm gets() và hàm scanf().

Cú pháp: char *gets(char *str)

- str là con trồ kiÅu char trồ tủi vựng nhủ chća dóy ký tď

Hàm gets() là một hàm trong C được sử dụng để ghi nhận chuỗi ký tự từ stdin, cho đến khi gặp ký tự newline ('\n') Ký tự newline sẽ bị loại bỏ khỏi stdin, nhưng không được đưa vào chuỗi Chuỗi được đọc sẽ được bổ sung thêm ký tự null ('\0') và được lưu trữ trong biến mà con trỏ str trỏ tới Hàm này trả về độ dài của chuỗi đã đọc.

Cú thÅ sċ dăng cỳ phỏp sau: gets(); vủi variable_name: biÁn ghi nhÁn chuíi ký tď nhÁp vào

TrÔủc khi sċ dăng hàm gets(), phÁi khai bỏo thÔ viỏn

ViÁt ch¤¢ng trình nhÁp vào tên tr¤óng và hiÅn thá ra màn hình

1 // Vi du ve ham gets()

KÁt quÁ ch¤¢ng trình:

Truong Dai hoc Cong nghe GTVT

============Truong Dai hoc Cong nghe GTVT

- Hàm scanf() cũng đ¤āc sċ dăng đÅ nhÁp dč liáu tĉ thiÁt bá chuÁn, tuy nhiên giča hàm scanf() và hàm gets() khác nhau:

Hàm scanf() trong C có thể dừng lại khi gặp ký tự trắng, dấu phẩy hoặc End Of File (EOF), điều này khiến việc sử dụng hàm scanf() để nhập chuỗi có chứa ký tự trắng trở nên khó khăn Ngược lại, hàm gets() sẽ dừng lại khi người dùng nhấn phím Enter, cho phép nhập chuỗi mà không bị giới hạn bởi ký tự trắng.

- Hàm scanf() có thÅ đãc nhiÃu giá trá cąa các kiÅu dč liáu khác nhau, trong khi hàm gets() chò nhÁn kiÅu dč liỏu chuới ký tď

Ví dă sau đây so sánh sď khác nhau giča hàm gets() và hàm scanf()

5 printf("Nhap vao mot chuoi su dung ham gets(): \n");

7 printf("Chuoi ky tu vua nhap su dung ham gets() : %s\n", str);

8 printf("Nhap vao mot chuoi su dung ham scanf(): \n");

10 printf("Chuoi ky tu vua nhap su dung ham scanf() : %s\n", str);

KÁt quÁ ch¤¢ng trình:

Nhap vao mot chuoi su dung ham gets():

Truong Dai hoc Cong nghe GTVT

Chuoi ky tu vua nhap su dung ham gets(): Truong Dai hoc Cong nghe GTVT

Nhap vao mot chuoi su dung ham scanf():

Truong Dai hoc Cong nghe GTVT

Chuoi ky tu vua nhap su dung ham scanf(): Truong

Cú pháp: int getchar(void);

Chąc năng: Hàm getchar() đóc mùt ký tď đ¿u vào stdin (tĉ bàn phớm)

Hàm trÁ và ký tď đãc đ¤āc, nÁu thành công, trÁ và EOF nÁu thÃt b¿i

Muỗn sċ dăng hàm getchar(), phÁi khai bỏo thÔ viỏn ) Ngược lại, nếu có lỗi, hàm trả về EOF.

PhÁi khai bỏo thÔ viỏn trÔủc khi sċ dăng hàm puts()

ViÁt ch¤¢ng trình nhÁp vào 1 chuíi ký tď, sċ dăng hàm puts() in chuíi vĉa nhÁp ra màn hình

5 printf("Nhap vao chuoi ky tu: \n");

6 //Nhap chuoi su dung ham gets()

8 printf("Chuoi vua duoc nhap la - ");

9 //In chuoi ra man hinh

KÁt quÁ ch¤¢ng trình:

Nhap vao chuoi ky tu:

Chuoi vua duoc nhap la - Ha Noi!

Hàm puts() đơn giản hơn hàm printf() trong việc hiển thị chuỗi văn bản, vì nó chỉ cần một tham số là chuỗi cần in ra Tuy nhiên, nếu chuỗi chứa các ký tự đặc biệt như % hay ?, hàm printf() sẽ xử lý chúng một cách linh hoạt hơn và cho ra kết quả khác Đặc biệt, khi chuỗi đầu vào là một chuỗi không được định nghĩa trước, việc sử dụng hàm printf() có thể dẫn đến các thông báo lỗi không mong muốn.

Hàm puts() cho phép di chuyển con trỏ đến vị trí tiếp theo trong luồng đầu ra Nếu không muốn di chuyển con trỏ, chúng ta có thể sử dụng hàm fputs(str, stdout) để ghi chuỗi mà không thay đổi vị trí của con trỏ.

Cú pháp: int putchar(int ch);

Trong đú: ch là mó ASCII cąa ký tď muỗn in ra màn hỡnh

Hàm trÁ và ký tď có mã ASCII lên stdout, nÁu thành công NÁu gÁp líi hàm trÁ và EOF

4 // Khoi tao ky tu de ghi

2.2.3 Các hàm vào ra trên màn hình, bàn phím

Cú pháp: int getch(void);

TrÁ và giá trá: hàm getch() trÁ và ký tď đãc tĉ bàn phím

MợT Sổ VÍ DĂ

ViÁt ch¤¢ng trình đãc tên, hã và năm sinh và hiÅn thá tên và năm cąa ng¤ói vĉa nhÁp

10 printf("Nhap vao nam sinh: ");

12 printf("%s %s %d\n", firstname, lastname, bir_year);

ViÁt chÔÂng trỡnh nhÁp vào thụng tin cąa mùt sinh viờn gộm: masv, hoten, diemtoan, diemanh

Yêu cÅu: a Tính tongdiem = diemtoan + diemanh b In thông tin cąa sinh viên đó lên màn hình gém: masv, hoten, tongdiem

- Xác đánh các biÁn đ¿u vào: masv (KiÅu char), hoten (KiÅu char), diemtoan (KiÅu float), diemanh (KiÅu float);

- Sċ dăng cõu lỏnh nhÁp, xuÃt, tớnh tởng điÅm;

- In thông tin cąa các sinh viên

7 float d_toan, d_anh, tong_diem;

8 printf("Nhap ma sinh vien: ");

10 puts("Nhap ho ten: "); gets(ht);

14 printf("Nhap diem tieng anh: ");

17 puts("Ma Sv: "); puts(masv);

18 puts("Ho ten: "); puts(ht);

19 printf("Tong diem: = %3.2f",tong_diem);

Nhap ma sinh vien: sv01

A BÀI TÀP CÓ LòI GIÀI

ViÁt chÔÂng trỡnh đởi tĉ đù C sang đù F

Thang đo độ C, hay còn gọi là thang đo Celsius, được phát triển bởi nhà thiên văn học người Thụy Điển, ông Anders Celsius Trong thang đo này, nước đóng băng ở 0 độ C và sôi ở 100 độ C.

Thang đo Fahrenheit đ¤āc phát triÅn bõi nhà vÁt lý ng¤ói Đćc Daniel Gabriel Fahrenheit Trong thang đo Fahrenheit, nÔủc đúng băng ừ 32 đù và sụi ừ 212 đù

Cụng thćc chuyÅn đởi tĉ centigrade sang Fahrenheit là:

- NhÁp vào nhiỏt đù ừ đù C;

- Sċ dăng cụng thćc tớnh đÅ chuyÅn sang đù F;

- In kÁt quÁ ra màn hỡnh, vủi đỏnh d¿ng chò gộm 2 chč sỗ thÁp phõn

6 printf("Nhap nhiet do (do C): ");

9 printf("Do F tuong ung la: %2.2f \n", do_f);

ViÁt ch¤¢ng trình tính thÅ tích hình c¿u, khi biÁt bán kính cąa hình c¿u Công thćc tính thÅ tích hình c¿u:

- NhÁp bán kinh cąa hình c¿u

- Sċ dăng công thćc tính V = đÅ tính thÅ tích hình c¿u

- In kÁt quÁ ra màn hỡnh, vủi đỏnh d¿ng chò gộm 2 chč sỗ thÁp phõn

5 float r; // ban kinh cua hinh cau

6 float V; // the tich cua hinh cau

7 printf("Nhap vao ban kinh cua hinh cau: ");

10 printf("The tich cua hinh cau ban kinh %.2f la %5.2f.\n", r, V);

KÁt quÁ căa ch¤¢ng trình

Nhap vao ban kinh cua hinh cau: 6

The tich cua hinh cau ban kinh 6.00 la 904.78

ViÁt ch¤¢ng trình tính chu vi và dián tích cąa hình chč nhÁt, khi biÁt chiÃu dài và chiÃu rùng

Chu vi cąa hỡnh chč nhÁt CV = 2*(a + b) vủi a, b là chiÃu dài và chiÃu rùng cąa hỡnh chč nhÁt;

Dián tích cąa hình chč nhÁt S = a * b

- NhÁp vào chiÃu dài và chiÃu rùng cąa hỡnh chč nhÁt;

- Sċ dăng công thćc tính chu vi và dián tính hình chč nhÁt đÅ tính

- In kÁt quÁ ra màn hình

7 printf("Nhap chieu dai cua hinh chu nhat: ");

9 printf("Nhap chieu rong cua hinh chu nhat: ");

11 cv = 2.0 * (chieu_dai + chieu_rong);

13 printf("Chu vi cua hinh chu nhat la % 4.2f\n", cv);

14 printf("Dien tich cua hinh chu nhat la %4.2f\n", S);

Nhap chieu dai cua hinh chu nhat: 8.2

Nhap chieu rong cua hinh chu nhat: 6.4

Chu vi cua hinh chu nhat la 29.20

Dien tich cua hinh chu nhat la 52.48

ViÁt ch¤¢ng trình nhÁp vào thói gian di chuyÅn cąa các ph¤¢ng tián (tớnh theo giú và phỳt) Quy đởi thúi gian di chuyÅn sang phỳt

KÁt quÁ mong muỗn: 277 phỳt

- NhÁp vào sỗ giú di chuyÅn sỗ phỳt di chuyÅn

- Sċ dăng cụng thćc chuyÅn đởi: sỗ phỳt (tởng) = Sỗ giú * 60 + sỗ phỳt

- In kÁt quÁ ra màn hình

2 #define M 60 // so phut cua mot gio

7 int tot_mins; //tong so phut

13 printf("Tong cong co: %d phut.\n", tot_mins);

ViÁt chÔÂng trỡnh thďc hiỏn phộp cùng, trĉ, nhõn, chia hai sỗ, chia lÃy d¤

Phác thÁo ch¤¢ng trình:

- NhÁp vào hai sỗ (kiÅu nguyờn hoÁc kiÅu thďc)

- Sċ dăng cỏc cụng thćc tớnh tởng, tớnh hiỏu, tớnh tớch, tớnh thÔÂng cąa hai sỗ

- In các kÁt quÁ thu đ¤āc ra màn hình

6 int tong, hieu, tich, mod;

8 printf("Nhap vao hai so cach nhau dau phay : ");

15 printf("Tong cua hai so = %d\n", tong); // in tong

16 printf("Hieu cua hai so = %d\n", hieu); // in hieu

17 printf("Tich cua hai so = %d\n", tich); //in tich

18 printf("Thuong cua hai so= %4.2f\n", thuong); // in thuong

19 printf("Du cua phep chia = %d\n", mod); // chia lay du

Nhap vao hai so cach nhau dau phay : 12, 6

ViÁt ch¤¢ng trình in lên màn hình dòng chč max thì gán b cho max;

9 printf("Gia tri lon nhat la: %d",max);

KÁt quÁ in ra màn hình:

Gia tri lon nhat la: 6

ViÁt chÔÂng trỡnh nhÁp vào tuởi cąa mùt ngÔúi, nÁu tuởi ngÔúi đú

> 18 tuởi thỡ in ra màn hỡnh 2 dũng:

Dũng 2: B¿n đą tuởi đÅ bồ phiÁu

NÁu tuởi ngÔúi đú < 18 tuởi thỡ khụng thďc hiỏn gỡ cÁ

- NhÁp vào tuởi cąa mùt ngÔúi

- KiÅm tra: nÁu tuởi 18 thỡ in ra 2 dũng nhÔ trờn

- NÁu tuởi < 18 thỡ khụng in gỡ cÁ

7 printf("Nhap vao ten cua ban:");

10 printf("Nhap vao tuoi cua ban %s: ", ten);

14 printf("Tuoi cua ban %s la 18+ \n",ten);

15 printf("Ban %s du tuoi de bo phieu",ten);

Nhap vao ten cua ban: Kien

Nhap vao tuoi cua ban Kien: 21

Tuoi cua ban Kien la 18+

Ban Kien du tuoi de bo phieu

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

Câu lệnh điều kiện được sử dụng để thực hiện các hành động khi điều kiện đúng Trong trường hợp điều kiện sai, khối lệnh if sẽ bị bỏ qua, và chương trình sẽ thực hiện các câu lệnh khác Trong hầu hết các chương trình, chúng ta thường muốn tựa vào giá trị của điều kiện để quyết định xem chương trình sẽ thực hiện một hoặc nhiều câu lệnh nào đó Cú pháp của câu lệnh điều kiện là if (biểu thức).

Trong đó: expression: điÃu kiỏn, là mùt biÅu thćc logic statement block 1, statement block 2: khỗi cỏc cõu lỏnh đÔāc thďc thi b Ho¿t đùng

Dựa vào biểu thức điều kiện đúng hoặc sai, chương trình sẽ thực hiện khối lệnh tổng cộng Nếu biểu thức điều kiện đúng, thì thực hiện khối lệnh 1; nếu biểu thức điều kiện sai, thì thực hiện khối lệnh 2 Sự điều chỉnh khối lệnh này giúp tối ưu hóa quy trình xử lý trong lập trình.

Hỡnh 3.3 SÂ độ khỗi biÅu diòn cõu lỏnh if đ¿y đą

Kiểm tra ký tự nhập vào từ người dùng Nếu ký tự này nằm trong khoảng từ 'a' đến 'z', chuyển đổi nó sang chữ in hoa và in ra Ngược lại, in ra thông báo "Ký tự bạn vừa nhập là: c".

CÁC C Â U TRÚC PHÂN NHÁNH VÀ VềNG L ắ P

CÂU TRÚC VÒNG LÀP (FOR, WHILE, DO& WHILE)

NÁu in ra màn hình 10 dòng trong khi mãi viếc trong t¿m kiÅm soát, nhưng vẫn cần in ra 1000 dũng Việc này có thể gây ra sự khó chịu nhất định, do số dũng code lÁp đi lÁp l¿i.

Chương trình dài dòng và lặp lại nhiều lần sẽ gây khó khăn cho việc hiểu rõ và tái sử dụng mã nguồn Giải pháp hiệu quả là sử dụng vòng lặp, giúp chương trình chạy nhanh hơn, gọn gàng hơn và dễ dàng tái sử dụng mã.

Trong mút vũng lÁp, mút chÔÂng trỡnh thực hiện chuỗi các câu lệnh nhiều lần cho đến khi điều kiện bỏ sai được thỏa mãn Mút vũng lÁp bao gồm hai phần: phần thân của vòng lÁp và câu lệnh điều khiển Câu lệnh điều khiển là sự kết hợp của mút số điều kiện, điều khiển sự thực thi của phần thân vũng lÁp cho đến khi điều kiện được đánh trừ thành sai.

CÃu trúc lÁp bao gém:

3.2.1.1 Cú pháp for (Exp1; Exp2; Exp3) statement;

- Exp1: BiÅu thćc khõi t¿o cho biÁn;

- Exp2: BiÅu thćc điÃu kián - điÃu kián lÁp;

- Exp3: BÔủc nhÁy - thay đởi giỏ trỏ cąa biÁn vũng lÁp

- statement: câu lánh đ¤āc thďc thi, có thÅ là câu lánh đ¢n, hoÁc câu lánh ghép

Exp1, Exp2, Exp3 có thÅ v¿ng mÁt trong câu lánh nh¤ng các dÃu chÃm phÁy phÁi xuÃt hián trong cÃu trúc

BÔủc 2: KiÅm tra điÃu kiỏn exp2

- NÁu điÃu kiỏn đỳng thỡ thďc hiỏn lỏnh statement và sang bÔủc 3

- NÁu điÃu kiỏn sai sang bÔủc 4

BÔủc 3: Thďc hiỏn exp3 và quay l¿i bÔủc 2

BÔủc 4: Thoỏt khồi vũng lÁp

Hỡnh 3.7 SÂ độ khỗi biÅu diòn vũng lÁp for

Khai bỏo biÁn tởng s, khừi t¿o giỏ trỏ ban đ¿u s = 0 ĐÅ tớnh tởng cỏc sỗ tĉ 1 đÁn 10, ta sċ dăng mùt biÁn i Ban đ¿u gỏn i

= 0, cho i ch¿y tĉ 1 đÁn 10, ćng vủi mới i ta cùng vào s nhÔ sau:

Vủi i = 10, s10 = (0 + 1 + 2 + 3 + & + 9) + 10 = s9 + 10 = s9 + i , tăng i = 11, dĉng ch¤¢ng trình

+ Vủi i 10 thỡ thďc hiỏn tớnh tởng, nÁu i > 10 thỡ dĉng chÔÂng trình

+ Vủi mới giỏ trỏ biÁn i ta cú hai biÅu thćc giỗng nhau: i + 1 và s + i

Chú ý: ủ CÃu trỳc for cú thÅ lộng vào nhau

ViÁt ch¤¢ng trình in ra hình chč nhÁt sao nh¤ sau:

Hỡnh chč nhÁt sao cú 5 hàng và 10 cùt là ma trÁn 5  10 Đỗi vủi 5 hàng: ta dựng biÁn ch¿y i tĉ 0 đÁn 4

Vủi i = 0, hàng đ¿u thỡ phÁi in ra đÔāc 10 cùt *, ta dựng biÁn ch¿y j, duyỏt cùt tĉ 0 đÁn 9

Vủi i = 1 hàng thć hai cũng phÁi in ra đÔāc 10 cùt *, ta dựng biÁn ch¿y j, duyỏt cùt tĉ 0 đÁn 9

Vủi i = 4, hàng thć 5 cũng phÁi in ra đÔāc 10 cùt *, ta dựng biÁn ch¿y j, duyỏt cùt tĉ 0 đÁn 9

Ta thÃy i duyát tĉ 0 đÁn 4, lÁp đi lÁp l¿i công viác biÁn j duyát tĉ 0 đÁn 9 và in ra dÃu *

Dựng mùt vũng for cho biÁn ch¿y i, ćng vủi mới i dựng mùt vũng for cho biÁn ch¿y j

ViÁt chÔÂng trỡnh in ra trờn màn hỡnh mùt ma trÁn cú n dũng m cùt nh¤ sau:

5 printf("\n Nhap vao so dong va so cot :");

Nhap vao so dong va so cot :7 8

7 8 9 10 11 12 13 14 ò Trong câu lánh for, có thÅ s¿ không có ph¿n Exp1 (ph¿n khõi t¿o) int i; i = 0; for (; i < 10; i++) printf( 0 nhÁp tĉ bàn phím) nh¤ sau: n = 4

- KiÅm tra điÃu kiỏn n đÔāc nhÁp vào đÁm bÁo lủn hÂn 0

- Vủi mới dũng in ra sỗ dÃu * bÁng đỳng thć tď dũng

8 // Kiem tra dieu kien cua n

11 printf("Phai nhap n > 0 \nNhap lai n: ");

14 // In ra tam giac vuong co chieu cao n

NhÁp vào mùt sỗ n (n > 0), kiÅm tra xem sỗ đú cú phÁi là sỗ hoàn hÁo không?

In ra cỏc sỗ hoàn hÁo nhồ hÂn n (sỗ hoàn hÁo là sỗ cú tởng cỏc Ôủc chớnh nú, chẳng h¿n 6 cú cỏc Ôủc 1, 2, 3 và 1 + 2 + 3 = 6)

Kiểm tra số nháp vào một số hoàn hảo là một quá trình xác định xem số đó có phải là số hoàn hảo hay không Để thực hiện việc này, chúng ta cần xác định các ước của số đó (trong đó ước là số n) và tính tổng các ước này Nếu tổng các ước bằng chính số nháp, thì kết luận đó là số hoàn hảo; ngược lại, nếu không bằng, thì số đó không phải là số hoàn hảo.

Để liệt kê tất cả các số hoàn hảo nhỏ hơn n, chúng ta kiểm tra từng số trong phạm vi từ 0 đến n, theo bước 1 Nếu số đó là số hoàn hảo, chúng ta sẽ in số đó ra, ngược lại sẽ bỏ qua và kiểm tra số tiếp theo.

9 if (sum == n) printf("%u la so hoan hao",n);

10 else printf("%u khong la so hoan hao",n);

11 printf( "\nCac so hoan hao nho hon %u: ", n );

50 khong la so hoan hao

Cac so hoan hao nho hon 50: 6 28

NhÁp mùt sỗ nguyờn dÔÂng n XuÃt ra sỗ ngÔāc l¿i

Liệu pháp thực hiện phép chia của số và nháp cho 10, kết quả thu được sẽ là phép chia cho 10, và vui lòng lấy phần dư Trong các số dư thu được, các phép chia sẽ được hiển thị trên màn hình.

7 printf("So dao cua %d la ", n);

ViÁt chÔÂng trỡnh tớnh căn sỗ liờn tăc sau:

Dò dàng nhÁn thÃy cụng thćc truy hội cąa căn liờn tăc trờn: ĐiÃu kián đ¿u: √

√ NhÔ vÁy, ta c¿n thďc hiỏn mùt vũng lÁp vủi biÁn đÁm k ch¿y tĉ 2 (vỡ s1 ćng vủi k = 1 đó đÔāc tớnh) đÁn n BiÅu thćc trong thõn vũng lÁp:

3.2.2.1 Cú pháp while (expression) statement;

- expression: BiÅu thćc điÃu kián

- statement: khỗi lỏnh (là cõu lỏnh đÂn hoÁc cõu lỏnh ghộp), gói là thân vòng lÁp

Chĉng nào biÅu thćc điÃu kián còn đúng thì thďc hián lánh, biÅu thćc điÃu kiỏn sai thỡ thoỏt khồi vũng lÁp

Hỡnh 3.8 SÂ độ khỗi biÅu diòn vũng lÁp while L¤u ý:

Câu lánh while có thÅ léng vào nhau: if (n < 10 && m < 20)

NhÁp mùt sỗ nguyờn dÔÂng n XuÃt ra sỗ ngÔāc l¿i

Để giải bài toán 3.23, chúng ta sử dụng vòng lặp for, tuy nhiên, trong vòng lặp này cần loại bỏ hai biểu thức Exp1 và Exp3 do không có biến chạy và bậc nhảy Cần xem xét điều kiện dừng của vòng lặp Bài toán này không biết trước số lần lặp lại.

Và chĉng nào điÃu kiỏn cũn đỳng n khỏc 0 thỡ thďc hiỏn phộp lÃy sỗ đÂn vỏ (n%10) và bồ sỗ đÂn vỏ (n/10)

Dùng while xċ lý nh¤ sau:

7 printf("So dao cua %d la ", n);

Qua ví dă 3.23 và 3.25, ta thÃy bài toán này dùng vòng lÁp while gãn và rõ ràng h¢n

 VÁy nhčng bài toỏn biÁt trÔủc sỗ l¿n lÁp ta dựng for;

 Bài toỏn khụng biÁt trÔủc sỗ l¿n lÁp ta dựng while

ViÁt chÔÂng trỡnh chuyÅn sỗ nhỏ phõn sang hỏ thÁp phõn

Phác hãa lói giÁi Đởi hỏ nhỏ phõn sang hỏ thÁp phõn:

Ta dựng mùt biÁn donvi đÅ l¿n lÔāt lÃy chč sỗ hàng đÂn vỏ cąa sỗ nhỏ phõn

BiÁn decimal đÅ tớnh sỗ thÁp phõn

BiÁn num đÅ lÃy ph¿n nguyờn sau khi bồ hàng đÂn vỏ

BiÁn base là c sỗ 2, ban đ¿u base = 1 = 2 0

Chĉng nào biÁn num cũn lủn hÂn 0 thỡ thďc hiỏn cỏc thao tỏc trờn

5 int num, binary, decimal = 0, base = 1, donvi;

6 printf("\nNhap so nhi phan(1 & 0): ");

16 printf("So nhi phan = %d \n", binary);

17 printf("Gia tri he thap phan = %d \n", decimal);

Gia tri he thap phan = 11

ViÁt chÔÂng trỡnh đởi hỏ thÁp phõn sang hỏ nhỏ phõn

Phác hãa lói giÁi Đởi hỏ thÁp phõn sang hỏ nhỏ phõn:

Ta lÃy sỗ thÁp phõn chia d¿n cho 2 chĉng nào thÔÂng = 0 thỡ phộp chia dĉng, cỏch chuyÅn đởi đÔāc lÃy tĉ dÔủi lờn

BiÁn ng đÅ l¤u ph¿n d¤ cąa phép chia decimal cho 2

BiÁn base =1 míi l¿n lÁp tăng d¿n lên 10 l¿n

BiÁn num đÅ lÃy ph¿n nguyên sau khi decimal chia cho 2

BiÁn binary đÅ lÔu cỏc sỗ dÔ cąa phộp chia decimal cho 2

Chĉng nào biÁn num cũn lủn hÂn 0 thỡ thďc hiỏn cỏc thao tỏc trờn

Hỡnh 3.9 ChuyÅn sỗ thÁp phõn sang sỗ nhỏ phõn

5 unsigned long num, binary = 0, decimal, base = 1, ng;

6 printf("\nNhap so nguyen he thap phan: ");

16 printf("So thap phan = %d \n", decimal);

17 printf("So nhi phan = %d \n", binary);

Nhap so nguyen he thap phan: 125

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

- expression: BiÅu thćc điÃu kiỏn, là mùt biÅu thćc logic

- statement: Câu lánh trong vòng lÁp

BÔủc 1: Thďc hiỏn cỏc lỏnh bờn trong thõn vũng lÁp do&while BÔủc 2: KiÅm tra điÃu kiỏn, chĉng nào điÃu kiỏn cũn đỳng thỡ thďc hiỏn lỏnh, điÃu kiỏn sai thỡ thoỏt khồi vũng lÁp

Hỡnh 3.10 SÂ độ khỗi biÅu diòn vũng lÁp do& while

L¤u ý: ủ Cõu lỏnh do& while cú thÅ lộng nhau do

} while (a < 20); ò Câu lánh do& while s¿ đ¤āc thďc hián ít nhÃt 1 l¿n do

ViÁt ch¤¢ng trình thďc hián các yêu c¿u sau:

Nhập vào 3 số thực a, b, c trên bàn phím Đầu tiên, kiểm tra xem a, b, c có lập thành ba cạnh của một tam giác hay không Nếu có, tiếp tục xác định loại tam giác: cân, đều, vuông hay thường Cuối cùng, tính chu vi và diện tích của tam giác, sau đó in kết quả ra màn hình.

KÁt quÁ mong đāi: Không là ba c¿nh tam giác

KÁt quÁ mong đāi: Tam giác th¤óng

Để giải quyết bài toán này, chúng ta sẽ sử dụng cấu trúc lặp do while, trong đó điều kiện sẽ được kiểm tra sau khi thực hiện khối lệnh Cụ thể, chúng ta sẽ viết ràng buộc cho các biến a, b, c để đảm bảo rằng các giá trị này thỏa mãn yêu cầu đề bài.

21 if (a == b && b == c) printf( 1000000) và sỗ tiÃn s¿ nhÁn đÔāc b (ràng buùc điÃu kiỏn b > a) Yờu c¿u in ra sỗ năm c¿n gċi, biÁt mćc lãi xuÃt 8 % /năm

- Tớnh theo cụng thćc lói kộp, lói nhÁp vỗn:

+ Lói = gỗc*(1+lói suÃt)^n - gỗc

+ Sỗ tiÃn rỳt ra = gỗc*(1+lói suÃt kỳ)^n (cụng thćc cąa FV) vủi n là sỗ năm gċi

- Sċ dăng hàm pow (x, y) đÅ tính x^y (chú ý khai báo táp tiêu đÃ

9 printf("Nhap vao so tien can gui: ");

13 if (sotiengui 0) và thực hiện các yêu cầu sau: a Xác định số chữ số của n b Tìm chữ số cuối cùng của n c Tìm chữ số đầu tiên của n d Tính tổng các chữ số của n e Tìm số đảo ngược của n.

T¿i sao chúng ta c¿n hàm? Có ba lý do sau đây đ¤āc đ¤a ra giÁi thích cho lý do t¿i sao trong mùt chÔÂng trỡnh nờn cú cỏc hàm:

Hàm là công cụ quan trọng giúp chúng ta quản lý và tối ưu hóa mã nguồn trong lập trình Thay vì phải sao chép và dán mã nhiều lần trong một phần mềm, chúng ta có thể tạo ra một hàm và gọi nó từ nhiều nơi Điều này không chỉ giúp giảm thiểu việc sửa đổi mã ở nhiều vị trí khác nhau mà còn làm cho chương trình trở nên gọn gàng và dễ bảo trì hơn.

Hàm độc lập có cấu trúc giống các mô-đun, cho phép xử lý nhiều dữ liệu hiệu quả Việc đọc và sử dụng hàm này giúp tiết kiệm thời gian và nâng cao hiệu suất làm việc Các hàm được chia theo các mã độc lập, tạo điều kiện thuận lợi cho việc quản lý và vận hành dữ liệu.

Thế bào, hàm cung cấp sức trẻ trung Chúng ta có thể sử dụng các hàm như các thành phần mà không phải lo lắng về việc hoạt động bên trong của nó.

ChÔÂng 4 cąa giỏo trỡnh, giủi thiỏu cỏc khỏi niỏm và hàm, cỏch thćc khai bỏo hàm, truyÃn cỏc tham sỗ cho hàm và cỏch gói hàm trong chÔÂng trỡnh

Hàm là một công cụ quan trọng trong lập trình, cho phép thực hiện một khối công việc nhiều lần trong quá trình chạy chương trình Việc sử dụng hàm giúp tổ chức mã nguồn một cách hiệu quả, giảm thiểu sự phức tạp và tăng tính tái sử dụng trong lập trình.

Xem xét ví dă sau đây:

ViÁt chÔÂng trỡnh nhÁp vào ba sỗ nguyờn a, b, c L¿n lÔāt tớnh tởng a + b, a + c, b + c và in kÁt quÁ ra màn hình

5 printf("Nhap vao ba so: ");

Ch¤¢ng trình có nhčng công viác đ¤āc lÁp l¿i, chẳng h¿n các công viác õ dòng lánh 7 đÁn dòng lánh 9, dòng lánh 10 đÁn dòng lánh 12

Có thÅ xây dďng các hàm thÅ hián các công viác đó nh¤ sau:

2 void tong(int x, int y); // khai bao phuong thuc tong

6 printf("Nhap vao ba so: ");

13 void tong(int x,int y) // dinh nghia ham tinh tong

4.1.1.2 Phân loại hàm a Th° viện chuẩn

Các hàm trong thư viện chuẩn của ngôn ngữ C là những hàm được sử dụng để thực hiện các công việc tính toán trong toán học, xử lý đầu vào và đầu ra (I/O), cũng như xử lý chuỗi, v.v.

Các hàm trong táp tiêu chuẩn được sử dụng để thực hiện các thao tác đầu ra, trong đó hàm printf() là hàm phổ biến nhất để hiển thị dữ liệu trên màn hình Khi khai báo táp tiêu chuẩn này, các hàm có sẵn sẽ được sử dụng để in thông tin ra màn hình.

Cú rít nhiều hàm định nghĩa trong cục mút thư viện, chẳng hạn như trong thư viện , ngoài hàm printf(), còn có nhiều hàm như scanf(), fprintf(), getchar(), v.v Những hàm này sẽ được sử dụng khi đã khai báo tham số.

Hàm trong lập trình được chia thành hai loại chính: hàm có giá trị trả về như sqrt() và abs(), và hàm không có giá trị trả về như exit() và getch() Ngoài ra, người dùng cũng có thể định nghĩa các hàm riêng của mình.

Ngôn ngč C cho phép lÁp trình viên xác đánh các hàm Hàm đ¤āc t¿o bõi ng¤ói dùng đ¤āc gãi là hàm do ng¤ói dùng đánh ngh*a

Hàm do ng¤ói lÁp trình tď đánh ngh*a: có 2 lo¿i: o Hàm có giá trá trÁ vÃ: tong(), nguyento(), v.v o Hàm không có giá trá trÁ vÃ: nhapmang(), xuatmang(), v.v

4.1.1.3 ¯u điểm của hàm do ng°ời dùng định nghĩa

- ChÔÂng trỡnh dò hiÅu, dò duy trỡ và dò gÿ lới

- Tái sċ dăng mã trong nhiÃu ch¤¢ng trình khác

Mút chương trình lùn có thể được phân chia thành các mụ đun nhỏ hơn Điều này cho phép mút dạy ấn lùn có thể chia sẻ cho nhiều lập trình viên cùng thực hiện.

4.1.1.4 Cách xác định một hàm

Mùt hàm c¿n phÁi xỏc đỏnh 3 thụng tin:

- Tham sỗ cąa hàm (dč liỏu vào)

- KiÅu dč liáu trÁ và (kiÅu hàm)

4.1.2.1 Cấu trúc ch°¡ng trình chứa hàm

Trong đó: functionName(): tên cąa hàm

Chương trình bắt đầu thực thi từ hàm main() Khi trình biên dịch gặp hàm functionName() trong hàm main(), điều khiển chương trình sẽ chuyển đến hàm void functionName() Tại đây, trình biên dịch sẽ thực thi các mã lệnh bên trong hàm cho đến khi hoàn tất Sau khi tất cả mã trong thân hàm void functionName() được thực thi, điều khiển chương trình sẽ quay lại câu lệnh tiếp theo sau lệnh gọi hàm functionName() trong hàm main().

Hình 4.1 Minh hãa cách thćc thďc thi hàm functionName()

4.1.2.2 Khai báo hàm a Khai báo nguyên mẫu hàm

Mẫu nguyên mẫu hàm đần gián là một tài liệu quan trọng để khai báo hàm, bao gồm tên, tham số và kiểu trả về của hàm, không chỉ là thân hàm Mẫu nguyên mẫu hàm cung cấp thông tin cho trình biên dịch biết hàm này có thể được sử dụng sau này trong chương trình.

THAO TÁC XĊ LÝ VðI TàP

tĉ mỏy tớnh này sang mỏy tớnh khỏc mà khụng cú bÃt kỳ thay đởi nào

Mút tỏp là một tài nguyên được sử dụng để lưu trữ thông tin lâu dài, có thể truy cập dễ dàng cho các chương trình máy tính.

Tập tin trên RAM lưu trữ dữ liệu dưới dạng nhị phân (0 hoặc 1), nhưng loại thông tin mà chúng ta có thể nhận được phụ thuộc vào định dạng của tập tin và cách mà phần mềm xử lý nó Ví dụ, tệp png được chuyển đổi thành hình ảnh, trong khi Microsoft Word chuyển đổi dãy bit thành văn bản.

Trong ngụn ngữ lập trình C, Tóp là kiểu dữ liệu động, được sử dụng để xác định một stream và chứa các thông tin cần thiết để điều khiển, bao gồm một con trỏ trỏ đến buffer của nó, các thuộc tính và trạng thái của nó.

Trong ngôn ngč lÁp trình C, có hai lo¿i táp đ¤āc đà cÁp:

Các tệp văn bản là các tệp txt, có thể được tạo bằng Notepad hoặc bất kỳ trình soạn thảo văn bản đơn giản nào Khi mở các tệp này, chúng ta sẽ thấy nội dung trong tệp dưới dạng văn bản thuần túy, có thể dễ dàng chỉnh sửa hoặc xóa nội dung.

Các táp nhá phân chą yÁu là các táp bin trong máy tính, cho phép lưu trữ dữ liệu một cách hiệu quả Thay vì lưu trữ dữ liệu trong văn bản thuần túy, các táp này giúp quản lý và tổ chức thông tin một cách linh hoạt hơn.

(0 và 1) Chúng có thÅ chća l¤āng dč liáu cao h¢n, không thÅ đãc đ¤āc dò dàng và cung cÃp bÁo mÁt tỗt hÂn cỏc tỏp văn bÁn

7.2 THAO TÁC XĈ LÝ VðI TÈP

7.2.1 Cỏc thao tỏc vủi tẫp tin

Trong ngữ ngữ lập trình C, có thể thực hiện bốn thao tác chính trên tệp, bao gồm: tạo một tệp mới, mở tệp tin hiện có, đóng tệp tin và đọc cũng như ghi nội dung trong tệp tin.

Khi làm viỏc vủi cỏc tỏp, b¿n c¿n khai bỏo mùt con trồ cąa lo¿i tỏp Khai báo này là c¿n thiÁt đÅ liên l¿c giča các tÁp tin và ch¤¢ng trình

Trong đú fptr là biÁn con trồ, đ¿i diỏn cho tỏp tin

Trong đú f1, f2 là cỏc biÁn con trồ, đ¿i diỏn cho tỏp tin

Viác mõ táp đ¤āc thďc hián thông hàm fopen() trong th¤ vián

Cỳ phỏp mừ mùt tỏp tin tiờu chuÁn I/O: ptr = fopen("fileopen","mode")

 Ví dā 7.2 fopen("E:\\cprogram\\data1.txt","w");

Để tạo tệp tin data1.txt trong thư mục mặc định E:\cprogram (nơi lưu trữ các chương trình viết bằng ngôn ngữ C), hàm fopen() sẽ được sử dụng để tạo tệp tin với tên data1.txt Tệp tin này sẽ được ghi theo chế độ

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

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] PGS.TS. Ph¿m Văn Ât, Giáo trình Kỹ thuÁt lÁp trình C c¢ sõ và nâng cao, NXB Giao thông vÁn tÁi, 2006 Khác
[2] Nguyòn Linh Giang, Giỏo trỡnh Kỹ thuÁt lÁp trỡnh C, NXB Giỏo dăc Viát Nam, 2010 Khác
[3] Quỏch TuÃn Ngóc, Ngụn ngč lÁp trỡnh C, NXB Thỗng kờ, 2002 Khác
[4] Nguyòn Thanh Thąy, Nguyòn Quang Huy, Bài tÁp ngụn ngč lÁp trỡnh C, NXB Khoa hãc và Kỹ thuÁt, 2005 Khác
[5] Th.S Tr¿n Thỏ Hoa, Giỏo trỡnh lÁp trỡnh căn bÁn, LÔu hành nùi bù, Hãc vián Kỹ thuÁt mÁt mã, 2013 Khác
[6] Vũ Bá Duy, Giáo trình tin hãc c¢ sõ, ph¿n lÁp trình trên ngôn ngč C, LÔu hành nùi bù, Đ¿i hóc Quỗc gia Hà Nùi, 2003 Khác
[7] Brian W. Kernighan, Dennis M. Ritchie, The C programming language, Second Edition, Prentice Hall, Englewood Cliffs, New Jersey, 1988 Khác

TỪ KHÓA LIÊN QUAN

w