(NB) Giáo trình Lập trình C cung cấp cho người học những kiến thức như: Giới thiệu về ngôn ngữ C; Đối tượng trong chương trình; Cấu trúc lệnh tuần tự; Cấu trúc điều khiển; Cấu trúc lệnh lặp; Các kiểu dữ liệu có cấu trúc. Mời các bạn cùng tham khảo nội dung giáo trình phần 1 dưới đây.
ỦY BAN NHÂN DÂN THÀNH PHỐ HÀ NỘI TRƯỜNG CAO ĐẲNG NGHỀ VIỆT NAM - HÀN QUỐC THÀNH PHỐ HÀ NỘI TRỊNH THỊ HẠNH (Chủ biên) NGUYỄN ANH DŨNG – TRẦN VĂN NAM GIÁO TRÌNH LẬP TRÌNH C Nghề: Điện tử cơng nghiệp Trình độ: Cao đẳng (Lưu hành nội bộ) Hà Nội - Năm 2018 LỜI NĨI ĐẦU Ngơn ngữ lập trình C ngơn ngữ lập trình cấp cao, sử dụng phổ biến để lập trình hệ thống với Assembler phát triển ứng dụng Ngơn ngữ lập trình C ngơn ngữ lập trình hệ thống mạnh “mềm dẻo”, có thư viện gồm nhiều hàm (function) tạo sẵn Người lập trình tận dụng hàm để giải toán mà không cần phải tạo Hơn nữa, ngôn ngữ C hỗ trợ nhiều phép toán nên phù hợp cho việc giải toán kỹ thuật có nhiều cơng thức phức tạp Ngồi ra, C cho phép người lập trình tự định nghĩa thêm kiểu liệu trừu tượng khác Tuy nhiên, điều mà người vừa học lập trình C thường gặp “rắc rối” “hơi khó hiểu” “mềm dẻo” C Dù vậy, C phổ biến rộng rãi trở thành cơng cụ lập trình mạnh, sử dụng ngôn ngữ lập trình chủ yếu việc xây dựng phần mềm Nhóm biên soạn tham khảo tài liệu: “Lập trình C” dùng cho sinh viên Trường Cao đẳng Tài liệu “Nhập ngơn ngữ lập trình C” nhiều tài liệu khác Mặc dù nhóm biên soạn có nhiều cố gắng khơng tránh thiếu sót Rất mong đồng nghiệp độc giả góp ý kiến để giáo trình hồn thiện Xin chân thành cảm ơn! Hà Nội, ngày … tháng … năm 2018 Chủ biên: Trịnh Thị Hạnh MỤC LỤC LỜI NÓI ĐẦU MỤC LỤC CHƯƠNG TRÌNH MƠ ĐUN Bài Giới thiệu ngôn ngữ c 1.1 Ngơn ngữ lập trình 1.2 Giới thiệu ngôn ngữ lập trình c 1.3 Mơi trường lập trình turbo c 22 Bài Đối tượng chương trình 26 2.1 Hằng 26 2.2 Biến 29 2.3 Biểu thức 30 2.4 Hàm chuẩn 31 Bài Cấu trúc lệnh 32 3.1 Lệnh gán biểu thức 32 3.2 Thâm nhập vào thư viện chuẩn 32 3.3 Các hàm vào chuẩn 33 3.4 Đưa kết lên hình - hàm printf 34 3.5 Vào số liệu từ bàn phím - hàm scanf 37 3.6 Đưa kết máy in 39 Bài Cấu trúc điều khiển 44 4.1 Cấu trúc có điều kiện 44 4.2 Lệnh nhảy không điều kiện - câu lệnh goto 48 4.3 Cấu trúc rẽ nhánh - câu lệnh switch 49 Bài Cấu trúc lệnh lặp 64 5.1 Cấu trúc lặp với for while 64 5.2 Chu trình do-while 69 5.3 Câu lệnh break 70 5.4 Câu lệnh continue 71 Bài Các kiểu liệu có cấu trúc 80 6.1 Mảng 80 6.2 Xâu ký tự 89 6.3 Cấu trúc 95 Bài Hàm 146 7.1 Cơ sở 146 7.2 Hàm không cho giá trị 149 7.3 Hàm đệ quy 151 7.4 Bộ tiền xử lý C 155 TÀI LIỆU THAM KHẢO 179 CHƯƠNG TRÌNH MƠ ĐUN Tên mơ đun: Lập trình C Mã mơ đun: MĐ26 Thời gian mô đun: 90 giờ; (Lý thuyết: 25 giờ; TH: 60 giờ; KT: giờ) I VỊ TRÍ TÍNH CHẤT CỦA MƠN HỌC - Vị trí: Là mơn học bố trí sau sinh viên học xong môn chung, môn học sở chuyên ngành đào tạo chun mơn nghề - Tính chất: Là mơn học bắt buộc chương trình đào tạo nghề tin học II MỤC TIÊU MÔ ĐUN Về kiến thức - Nắm cú pháp ngơn ngữ lập trình C - Sử dụng mơi trường lập trình C để soạn thảo, biên dịch hiệu chỉnh chương trình Về kỹ - Viết thực chương trình máy tính Về lực tự chủ - Rèn luyện cho học sinh thái độ nghiêm túc, cẩn thận, xác học tập thực công việc III NỘI DUNG MÔ ĐUN 1.Nội dung tổng quát phân bố thời gian: Thời gian STT Tên mô đun Thực Tổng Lý số thuyết hành Kiểm tra Bài 1: Giới thiệu ngôn ngữ c Bài 2: Đối tượng chương trình Bài 3: Cấu trúc lệnh Bài 4: Cấu trúc điều khiển 5 Bài 5: Cấu trúc lệnh lặp 6 Bài 6: Các kiểu liệu có cấu trúc 33 21 Bài 7: Hàm 18 13 90 25 60 Cộng Bài Giới thiệu ngôn ngữ c Mục tiêu: - Cung cấp khái niệm C - Sự đời phát triển ngôn ngữ C - Nắm chức mơi trường lập trình Turbo C Nội dung: 1.1 Ngơn ngữ lập trình 1.1.1 Khái niệm ngơn ngữ lập trình Ngơn ngữ lập trình ngơn ngữ dùng để viết chương trình cho máy tính Ta chia ngơn ngữ lập trình thành loại sau: ngôn ngữ máy, hợp ngữ ngôn ngữ cấp cao Ngôn ngữ máy (machine language): Là thị dạng nhị phân, can thiệp trực tiếp vào mạch điện tử Chương trình viết ngơn ngữ máy thực không cần qua bước trung gian Tuy nhiên chương trình viết ngơn ngữ máy dễ sai sót, cồng kềnh khó đọc, khó hiểu tồn số Hợp ngữ (assembly language): Bao gồm tên câu lệnh quy tắc viết câu lệnh Tên câu lệnh bao gồm hai phần: phần mã lệnh (viết tựa tiếng Anh) phép toán cần thực địa chứa toán hạng phép tốn Ví dụ: INPUT a ; Nhập giá trị cho a từ bàn phím LOAD a ; Đọc giá trị a vào ghi tổng A PRINT a; Hiển thị giá trị a hình INPUT b ADD b; Cộng giá trị ghi tổng A với giá trị b Trong lệnh INPUT, LOAD, PRINT, ADD mã lệnh a, b địa Để máy thực chương trình viết hợp ngữ chương trình phải dịch sang ngơn ngữ máy Cơng cụ thực việc dịch gọi Assembler Ngôn ngữ cấp cao (High level language): Ra đời phát triển nhằm phản ánh cách thức người lập trình nghĩ làm Rất gần với ngôn ngữ người (Anh ngữ) xác ngơn ngữ tốn học Cùng với phát triển hệ máy tính, ngơn ngữ lập trình cấp cao phát triển đa dạng phong phú, việc lập trình cho máy tính mà có nhiều khuynh hướng khác nhau: lập trình cấu trúc, lập trình hướng đối tượng, lập trình logic, lập trình hàm Một chương trình viết ngơn ngữ cấp cao gọi chương trình nguồn (source programs) Để máy tính "hiểu" thực lệnh chương trình nguồn phải có chương trình dịch để dịch chuơng trình nguồn (viết ngơn ngữ cấp cao) thành dạng chương trình có khả thực thi 1.1.2 Chương trình dịch Như trình bày, muốn chuyển từ chương trình nguồn sang chương trình đích phải có chương trình dịch Thơng thường ngơn ngữ cấp cao có chương trình dịch riêng lại có hai cách dịch: thơng dịch biên dịch Thông dịch (interpreter): Là cách dịch lệnh một, dịch tới đâu thực tới Chẳng hạn ngơn ngữ LISP sử dụng trình thơng dịch Biên dịch (compiler): Dịch tồn chương trình nguồn thành chương trình đích sau thực Các ngơn ngữ sử dụng trình biên dịch Pascal, C Giữa thơng dịch biên dịch có khác chỗ: Do thơng dịch vừa dịch vừa thực thi chương trình cịn biên dịch dịch xong tồn chương trình thực thi nên chương trình viết ngơn ngữ biên dịch thực nhanh chương trình viết ngôn ngữ thông dịch Một số ngôn ngữ sử dụng kết hợp thông dịch biên dịch chẳng hạn Java Chương trình nguồn Java biên dịch tạo thành chương trình đối tượng (một dạng mã trung gian) thực lệnh chương trình đối tượng thơng dịch thành mã máy 1.2 Giới thiệu ngơn ngữ lập trình c 1.2.1 Giới thiệu C ngơn ngữ lập trình cấp cao, sử dụng phổ biến để lập trình hệ thống với Assembler phát triển ứng dụng Vào năm cuối thập kỷ 60 đầu thập kỷ 70 kỷ XX, Dennish Ritchie (làm việc phịng thí nghiệm Bell) phát triển ngơn ngữ lập trình C dựa ngơn ngữ BCPL (do Martin Richards đưa vào năm 1967) ngôn ngữ B (do Ken Thompson phát triển từ ngôn ngữ BCPL vào năm 1970 viết hệ điều hành UNIX máy PDP-7) cài đặt lần hệ điều hành UNIX máy DEC PDP-11 Năm 1978, Dennish Ritchie B.W Kernighan cho xuất “Ngơn ngữ lập trình C” phổ biến rộng rãi đến Lúc ban đầu, C thiết kế nhằm lập trình mơi trường hệ điều hành Unix nhằm mục đích hỗ trợ cho cơng việc lập trình phức tạp Nhưng sau, với nhu cầu phát triển ngày tăng công việc lập trình, C vượt qua khn khổ phịng thí nghiệm Bell nhanh chóng hội nhập vào giới lập trình để cơng ty lập trình sử dụng cách rộng rãi Sau đó, công ty sản xuất phần mềm đưa phiên hỗ trợ cho việc lập trình ngôn ngữ C chuẩn ANSI C khai sinh từ Ngơn ngữ lập trình C ngơn ngữ lập trình hệ thống mạnh “mềm dẻo”, có thư viện gồm nhiều hàm (function) tạo sẵn Người lập trình tận dụng hàm để giải tốn mà khơng cần phải tạo Hơn nữa, ngơn ngữ C hỗ trợ nhiều phép tốn nên phù hợp cho việc giải toán kỹ thuật có nhiều cơng thức phức tạp Ngồi ra, C cho phép người lập trình tự định nghĩa thêm kiểu liệu trừu tượng khác Tuy nhiên, điều mà người vừa học lập trình C thường gặp “rắc rối” “hơi khó hiểu” “mềm dẻo” C Dù vậy, C phổ biến rộng rãi trở thành công cụ lập trình mạnh, sử dụng ngơn ngữ lập trình chủ yếu việc xây dựng phần mềm 1.2.2 Những đặc điểm ngơn ngữ C - Tính đọng (compact): C có 32 từ khóa chuẩn 40 tốn tử chuẩn, hầu hết biểu diễn chuỗi ký tự ngắn gọn - Tính cấu trúc (structured): C có tập hợp thị lập trình cấu trúc lựa chọn, lặp… Từ chương trình viết C tổ chức rõ ràng, dễ hiểu - Tính tương thích (compatible): C có tiền xử lý thư viện chuẩn vô phong phú nên chuyển từ máy tính sang máy tính khác chương trình viết C hồn tồn tương thích - Tính linh động (flexible): C ngôn ngữ uyển chuyển cú pháp, chấp nhận nhiều cách thể hiện, thu gọn kích thước mã lệnh làm chương trình chạy nhanh - Biên dịch (compile): C cho phép biên dịch nhiều tập tin chương trình riêng rẽ thành tập tin đối tượng (object) liên kết (link) đối tượng lại với thành chương trình thực thi (executable) thống 1.2.3 Các thành phần ngơn ngữ lập trình C 1.2.3.1 Tập ký tự dùng ngôn ngữ C Mọi ngơn ngữ lập trình xây dựng từ ký tự Các ký tự nhóm lại theo nhiều cách khác để tạo nên từ Các từ lại liên kết với theo qui tắc để tạo nên câu lệnh Một chương trình bao gồm nhiều câu lệnh thể thuật toán để giải tốn Ngơn ngữ C xây dựng ký tự sau: 26 chữ hoa: A B C Z 26 chữ thường: a b c z 10 chữ số: Các ký hiệu toán học: + - * / = () Ký tự gạch nối: _ Các ký tự khác: ,: ; [ ] {} ! \ & % # $ Dấu cách (space) dùng để tách từ Ví dụ chữ VIET NAM có ký tự, cịn VIETNAM có ký tự Chú ý: Khi viết chương trình, ta không sử dụng ký tự khác ngồi ký tự Ví dụ lập chương trình giải phương trình bậc hai ax2 +bx+c=0 , ta cần tính biệt thức Delta = b2 - 4ac, ngôn ngữ C không cho phép dùng ký tự , ta phải dùng ký hiệu khác để thay 1.2.3.2 Từ khoá Từ khoá từ sử dụng để khai báo kiểu liệu, để viết toán tử câu lệnh Bảng liệt kê từ khoá TURBO C: asm break case cdecl char const continue default double else enum extern far float for goto huge if int interrupt long near pascal register return short signed sizeof static struct switch tipedef union unsigned void volatile while Ý nghĩa cách sử dụng từ khoá đề cập sau này, ta cần ý: - Khơng dùng từ khố để đặt tên cho hằng, biến, mảng, hàm - Từ khố phải viết chữ thường, ví dụ: viết từ khoá khai báo kiểu nguyên int INT 1.2.3.3 Tên Tên khái niệm quan trọng, dùng để xác định đại lượng khác chương trình Chúng ta có tên hằng, tên biến, tên mảng, tên hàm, tên trỏ, tên tệp, tên cấu trúc, tên nhãn, Tên đặt theo qui tắc sau: Tên dãy ký tự bao gồm chữ cái, số gạch nối Ký tự tên phải chữ gạch nối Tên khơng trùng với khố Độ dài cực đại tên theo mặc định 32 đặt lại giá trị từ tới 32 nhờ chức năng: Option-Compiler-Source-Identifier length dùng TURBO C Ví dụ: Các tên đúng: a_1 delta x1 _step GAMA Các tên sai : 3MN Ký tự số m#2 Sử dụng ký tự # f(x) Sử dụng dấu () Trùng với từ khoá te ta Sử dụng dấu trắng Y-3 Sử dụng dấu - Chú ý: Trong TURBO C, tên chữ thường chữ hoa khác ví dụ tên AB khác với ab Trong C, ta thường dùng chữ hoa để đặt tên cho dùng chữ thường để đặt tên cho hầu hết cho đại lượng khác biến, biến mảng, hàm, cấu trúc Tuy nhiên điều bắt buộc 1.2.3.4 Kiểu liệu Trong C sử dụng các kiểu liệu sau: Kiểu ký tự (char): Một giá trị kiểu char chiếm byte (8 bit) biểu diễn ký tự thông qua bảng mã ASCII Ví dụ: ++i; s=s+i; if (i c ) printf("%d la so lon nhat.", b); else if ( c > a && c > b ) printf("%d la so lon nhat.", c); else printf("Gia tri cua cac so la khong nhat"); return 0; } Biên dịch chương trình C cho kết quả: Bài tập 3: Kiểm tra số số chẵn hay số lẻ? Bài toán kiểm tra số chẵn lẻ chương trình C điển hình Với tốn này, sử dụng lệnh IF – ELSEtrong C để giải Giải thuật cho tập C Dưới bước giải thuật đơn giản để giải tập C trên: 54 Bước 1: Khai báo biến nguyên A Bước 2: Gá Bài tập C Ví dụ chương trình C điển hình ví dụ in dịng chữ "Hello World" Từ ví dụ đơn giản này, bạn biết cấu trúc tổng quát chương trình C nói chung bao gồm: Khai báo thư viện (các lệnh tiền xử lý) Các hàm Các biến Các lệnh biểu thức Comment Ngoài ra, phần tập C minh họa giúp bạn cách khai báo sử dụng biến kiểu liệu khác nhau, ví dụ: integer, float, double, char, … với phép tính cộng, trừ, nhân, chia, … biến Dưới danh sách tập C bản: Chương trình Hello World C Biến C Toán tử số học C n giá trị cho biến Bước 3: Thực phép chia lấy phần dư A cho Kiểm tra kết xem có khơng Bước 4: Nếu true, in dòng chữ A la so chan Bước 5: Nếu flase, in dòng chữ A la so le Chương trình C Dưới phần code chương trình C thực để giải tập kiểm tra số chẵn lẻ C: #include int main() { int even = 24; int odd = 31; if (even % == 0) { 55 printf("%d la so chan\n", even); } else { printf("%d la so le\n", even); } if (odd % != ) { printf("%d la so le\n", odd); } else { printf("%d la so chan\n", odd); } return 0; } Biên dịch chương trình C cho kết quả: Bài tập 4: Kiểm tra số số âm hay số dương? Tương tự tập C kiểm tra số chẵn lẻ, tập C đơn giản giúp bạn làm quen dần với cách sử dụng lệnh IF-ELSE C Giải thuật cho tập C Dưới bước giải thuật đơn giản để giải tập C trên: Bước 1: Khai báo biến nguyên A Bước 2: Gán giá trị cho biến Bước 3: Kiểm tra xem A có lớn khơng Bước 4: Nếu true, in dòng chữ A la so duong Bước 5: Nếu false, in dòng chữ A la so am Chương trình C Dưới phần code chương trình C thực để giải tập kiểm tra số âm, số dương C: 56 #include int main() { int number = -2; if (number >= 0) printf("%d la so duong\n", number); else printf("%d la so am\n", number); return 0; } Biên dịch chương trình C cho kết quả: Bài tập 5: Kiểm tra năm nhuận? Bài tập kiểm tra năm xem có phải năm nhuận không tập phức tạp chút Trước hết, tìm hiểu điều kiện để năm năm nhuận: Năm chia hết cho không chia hết cho 100 Hoặc năm chia hết cho 400 Giải thuật cho tập C Dưới bước giải thuật cho tập C trên: Bước 1: Khai báo biến để biểu diễn năm Bước 2: Gán giá trị cho biến Bước 3: Kiểm tra điều kiện năm chia hết cho không chia hết cho 100, hiển thị Day la nam nhuan Bước 4: Kiểm tra điều kiện năm chia hết cho 400, hiển thị Day la nam nhuan Bước 5: Nếu không, hiển thị Day khong la nam nhuan Chương trình C Dưới chương trình C để giải tập kiểm tra năm nhuận C: 57 #include int main() { int year; year = 2016; if (((year % == 0) && (year % 100!= 0)) || (year% 400 == 0)) printf("%d la mot nam nhuan", year); else printf("%d khong phai la nam nhuan", year); return 0; } Biên dịch chương trình C cho kết quả: Bài tập 6: Tráo đổi giá trị hai biến sử dụng biến khác? Trong nhiều trường hợp, lập trình viên cần thực phép tráo đổi giá trị hai biến Trong chương này, tìm hiểu cách để tráo đổi giá trị hai biến nguyên, nhiên bạn thực tương tự để tráo đổi hai biến kiểu liệu khác Giá trị biến tráo đổi theo hai cách: Sử dụng biến thứ ba (một biến tạm) Không thông qua biến thứ ba Chương tìm hiểu cách tráo đổi giá trị sử dụng biến thứ ba Để tìm hiểu cách thức tráo đổi giá trị lại, mời bạn click chuột vào chương: Tráo đổi giá trị (không sử dụng biến thứ ba) C Giải thuật cho tập C Dưới bước giải thuật cho tập tráo đổi giá trị C: Giả sử có ba biến: var1, var2, temp Bước 1: Sao chép giá trị var1 sang temp Bước 2: Sao chép giá trị var2 sang var1 Bước 3: Sao chép giá trị temp sang var2 58 Chương trình C Dưới chương trình C để giải tập tráo đổi giá trị C: #include int main() { int a, b, temp; a = 11; b = 121; printf("Gia tri truoc trao doi: \n a = %d, b = %d \n\n", a, b); temp = a; a = b; b = temp; printf("Gia tri sau trao doi: \n a = %d, b = %d \n", a, b); return 0; } Biên dịch chương trình C cho kết quả: Bài tập 7: tráo đổi giá trị hai biến không sử dụng biến thứ ba Trong nhiều trường hợp, lập trình viên cần thực phép tráo đổi giá trị hai biến Trong chương này, tìm hiểu cách để tráo đổi giá trị hai biến nguyên, nhiên bạn thực tương tự để tráo đổi hai biến kiểu liệu khác Giá trị biến tráo đổi theo hai cách: Sử dụng biến thứ ba (một biến tạm) Không thông qua biến thứ ba 59 Chương tìm hiểu cách tráo đổi giá trị thứ hai Để tìm hiểu cách thức tráo đổi giá trị lại, mời bạn click chuột vào chương: Tráo đổi giá trị (sử dụng biến thứ ba) C Cách tráo đổi giá trị hai biến a, b thực đơn giản, cách: Cộng hai số a b, lưu kết vào biến a Trừ a cho b, lưu kết vào biến b, b giữ giá trị biến a ban đầu Tiếp tục trừ a cho b (vừa lưu) lưu kết vào biến a, a giữ giá trị biến b ban đầu Giải thuật cho tập C Dưới bước giải thuật cho tập tráo đổi giá trị C: Giả sử có hai biến var1 var2 Bước 1: Cộng var1 var2, sau lưu kết vào var1 Bước 2: Trừ giá trị var2 từ var1, sau lưu kết vào var2 Bước 3: Trừ giá trị var2 từ var1, sau lưu kết vào var1 Chương trình C Dưới chương trình C để giải tập tráo đổi giá trị C: #include int main() { int a, b; a = 11; b = 121; printf("Gia tri truoc trao doi: \n a = %d, b = %d \n\n", a, b); a = a + b; // ( 11 + 121 = 132) b = a - b; // ( 132 - 121 = 11) a = a - b; // ( 132 - 11 = 121) printf("Gia tri sau trao doi: \n a = %d, b = %d \n", a, b); return 0; } 60 Biên dịch chương trình C cho kết quả: Bài tập 8: Giải phương trình bậc hai? Giải phương trình bậc hai tập quen thuộc bạn học lập trình Đây tốn điển hình lệnh rẽ nhánh C, lệnh IFELSE Tương ứng với trường hợp, bạn có nhánh khác Chương trình C Dưới chương trình C để giải phương trình bậc hai C: #include #include #include #include main() { float a,b,c,d; printf("Nhap vao so a, b, c: "); scanf("%f%f%f",&a,&b,&c); if(a==0) { if(b==0) { if(c==0) printf("Phuong trinh co vo so nghiem!"); else printf("Phuong trinh vo nghiem!"); } else 61 printf("Phuong trinh co nghiem nhat la: %f ",-c/b); } else { d=b*b-4*a*c; if (d