Giáo trình Kỹ thuật lập trình C gồm sáu chƣơng chứa đựng tương đối đầy đủ các vấn đề cơ bản nhất của ngôn ngữ lập trình C, các loại ví dụ và bài tập chọn lọc cùng một số vấn đề liên quan, giúp người học có khả năng sử dụng thành thạo ngôn ngữ này trong việc giải quyết một số lớp bài toán thông dụng trong thực tế.
TẬP ĐỒN DỆT MAY VIỆT NAM TRƢỜNG CAO ĐẲNG CƠNG NGHỆ THÀNH PHỐ HỒ CHÍ MINH Giáo trình KỸ THUẬT LẬP TRÌNH C Nghề: Cơng nghệ thơng tin Trình độ: Cao Đẳng (Ban hành theo Quyết định số: ngày tháng năm trường Cao đẳng Công nghệ Tp.HCM) TP.HỒ CHÍ MINH, THÁNG 08 NĂM 2021 TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin đƣợc phép dùng ngun trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm LỜI NÓI ĐẦU Ngơn ngữ lập trình loại cơng cụ giúp ngƣời thể vấn đề thực tế lên máy tính cách hữu hiệu Với phát triển tin học, ngơn ngữ lập trình dần cải tiến để đáp ứng thách thức thực tế Khoảng cuối năm 1960 đầu 1970 xuất nhu cầu cần có ngơn ngữ bậc cao để hỗ trợ cho nhà tin học việc xây dựng phần mềm hệ thống, hệ điều hành Ngơn ngữ C đời từ đó, đƣợc phát triển phịng thí nghiệm Bell Đến năm 1978, giáo trình " Ngơn ngữ lập trình C " tác giả ngơn ngữ Dennish Ritchie B.W Kernighan viết, đƣợc xuất phổ biến rộng rãi C ngơn ngữ lập trình vạn Ngoài việc C đƣợc dùng để viết hệ điều hành UNIX, ngƣời ta nhanh chóng nhận sức mạnh C việc xử lý cho vấn đề đại tin học C không gắn với hệ điều hành hay máy nào, đƣợc gọi " ngơn ngữ lập trình hệ thống" đƣợc dùng cho việc viết hệ điều hành, tiện lợi cho việc viết chƣơng trình xử lý số, xử lý văn sở liệu Toàn giáo trình gồm sáu chƣơng chứa đựng tƣơng đối đầy đủ vấn đề ngôn ngữ lập trình C, loại ví dụ tập chọn lọc số vấn đề liên quan, giúp ngƣời học có khả sử dụng thành thạo ngơn ngữ việc giải số lớp toán thơng dụng thực tế Giáo trình đƣợc biên soạn cho đối tƣợng học sinh THCN, kỹ thuật viên tin học, nhiên tài liệu tham khảo bổ ích cho bậc đại học ngƣời quan tâm cố gắng nhiều trình biên soạn giáo trình này, nhƣng chắn khơng tránh khỏi có thiếu sót Rất mong nhận đƣợc ý kiến đóng góp độc giả đồng nghiệp để giáo trình ngày hồn thiện Và tìm hiểu giới ngôn ngữ C từ khái niệm ban đầu MỤC LỤC i MỤC LỤC CHƢƠNG TRÌNH MƠN HỌC I Vị trí, tính chất mơn học: II Mục tiêu môn học: III Nội dung môn học: Chƣơng 1: GIỚI THIỆU NGÔN NGỮ C I GIỚI THIỆU 1 Phƣơng pháp tổng quát để giải toán máy tính Xác định toán Cấu trúc liệu Giải thuật Chƣơng trình II KHỞI ĐỘNG VÀ THỐT CHƢƠNG TRÌNH Ngơn ngữ lập trình Ngơn ngữ lập trình C 10 Cơng cụ lập trình 11 Cơng cụ lập trình Dev-C++, C-Free Pro 13 Làm quen môi trƣờng Dev-C++ 13 BÀI TẬP 15 Chƣơng 2: CÁC THÀNH PHẦN TRONG NGÔN NGỮ C 15 I TỪ KHÓA 15 II TÊN 15 Tên 15 Biến 16 Hằng 18 III KIỂU DỮ LIỆU 19 Kiểu số nguyên 19 Kiểu số thực 20 IV CHÚ THÍCH 21 VI KHAI BÁO BIẾN 21 Khai báo (định nghĩa) Hằng 21 Khai báo (định nghĩa) Biến 21 Biểu thức 21 VI NHẬP / XUẤT DỮ LIỆU 25 Nhập liệu từ bàn phím – Hàm scanf() 25 Xuất liệu hình - Hàm printf() 27 Cấu trúc chƣơng trình 28 Ví dụ 32 BÀI TẬP 33 a Bài tập làm theo yêu cầu 33 b Bài tập tự làm 35 Chƣơng 3: CẤU TRƯC RẼ NHÁNH CĨ ĐIỀU KIỆN 36 I LỆNH VÀ KHỐI LỆNH 36 MỤC LỤC ii II LỆNH IF 37 Cú pháp 37 Lƣu đồ 38 Giải thích: 38 III LỆNH SWITCH 41 Cú pháp: 41 Lƣu đồ: 41 Giải thích: 42 Biểu thức 42 BÀI TẬP 45 a Bài tập làm theo yêu cầu 45 b Bài tập tự làm 48 Chƣơng 4: CẤU TRÖC LẶP 49 I LỆNH FOR 49 Cú pháp: 49 Lƣu đồ: 49 II LỆNH BREAK 51 III LỆNH CONTINUE 52 IV LỆNH WHILE 53 Cú pháp: 53 Lƣu đồ: 53 Giải thích: 53 V LỆNH DO WHILE 55 Cú pháp: 55 Lƣu đồ: 55 Giải thích: 56 VI VÒNG LẶP LỒNG NHAU 58 Cú pháp để lồng vòng lặp for 58 Cú pháp để lồng vòng lặp while 59 Cú pháp để lồng vòng lặp while 60 Cú pháp để lồng vòng lặp kết hợp 61 VII SO SÁNH SỰ KHÁC NHAU CỦA CÁC VÒNG LẶP 62 Vòng lặp for, while: 62 Vòng lặp do…while: 62 BÀI TẬP 64 a Bài tập làm theo yêu cầu 64 b Bài tập tự làm 67 Chƣơng 5: HÀM 70 I CÁC VÍ DỤ VỀ HÀM 70 Ví dụ hàm 70 Khai báo định nghĩa Hàm 70 Lời gọi Hàm 73 II THAM SỐ DẠNG THAM BIẾN VÀ THAM TRỊ 76 MỤC LỤC iii Truyền theo tham trị 76 Truyền theo tham biến 77 Truyền theo dẫn trỏ 79 III SỬ DỤNG BIẾN TOÀN CỤC 82 Biến cục gì? 82 Biến toàn cục gì? 83 IV SỬ DỤNG TIẾN XỬ LÝ #DEFINE 84 Các thị tiền xử lý 84 Định nghĩa kiểu liệu 86 Khai báo prototype 86 Khai báo biến (các biến toàn cục) 86 Chƣơng trình 86 Cài đặt hàm 86 Hàm xây dựng sẵn 86 BÀI TẬP 88 a Bài tập làm theo yêu cầu 88 b Bài tập tự làm 92 Chƣơng 6: MẢNG VÀ CHUỖI 93 I MẢNG 93 Mảng C 93 Mảng chiều 93 Mảng nhiều chiều 98 II CHUỖI 101 Khai báo 101 Nhập xuất chuỗi 102 Một số hàm xử lý chuỗi 103 BÀI TẬP 108 a Bài tập làm theo yêu cầu 108 b Bài tập tự làm 113 CHƢƠNG TRÌNH MƠN HỌC Tên mơn học: Kỹ thuật lập trình Mã môn học: MH 11 Thời gian thực môn học: 45 giờ; (Lý thuyết: 15 giờ; Thực hành, thí nghiệm, thảo luận, tập: 27 giờ; Kiểm tra: giờ) I Vị trí, tính chất mơn học: - Vị trí: mơn học đƣợc bố trí vào học kỳ - Tính chất: mơn học sở ngành II Mục tiêu mơn học: - Về kiến thức: Trình bày đƣợc quy tắc, cú pháp ngôn ngữ, hoạt động vào/ra, lựa chọn biểu thức lồng (đệ quy), tuyến tính Trình bày đƣợc điều khiển áp dụng cho việc nhập liệu đảm bảo xác, có chu trình xử lý liệu Mô tả đƣợc chức cách viết chƣơng trình logic (pseudo code) mơ đun xử lý hệ thống Trình bày đƣợc cấu trúc rẽ nhánh, cấu trúc lặp, hàm, mảng chuỗi - Về kỹ năng: Xác định đƣợc môi trƣờng hoạt động hệ thống (các điều khiển, công cụ, thành phần, tập hợp liệu, nhập liệu, in kết ) Giải đƣợc toán sử dụng cấu trúc rẽ nhánh, cấu trúc lặp Sử dụng đƣợc biến cục bộ, toàn cục hàm Giải đƣợc toán sử dụng mảng chuỗi - Về lực tự chủ trách nhiệm: Rèn luyện tƣ logic để phân tích, tổng hợp Thao tác cẩn thận, tỉ mỉ III Nội dung mơn học: Chƣơng 1: GIỚI THIỆU NGƠN NGỮ C Chƣơng 1: GIỚI THIỆU NGÔN NGỮ C I GIỚI THIỆU Phƣơng pháp tổng quát để giải tốn máy tính Để giải tốn máy tính cần thực bƣớc sau: - Xác định toán; - Xác định cấu trúc liệu để mơ tả tốn; - Xây dựng thuật tốn; - Soạn thảo văn chƣơng trình, kiểm tra hồn thiện chƣơng trình Xác định tốn 2.1 Khái qt tốn Trong q trình tồn phát triển, cá nhân phải giải nhiều tốn đặt sống Có thể nói sống chuỗi tốn mà ta phải đối đầu để giải Theo nhiều nhà nghiên cứu tốn diễn đạt theo sơ đồ chung nhƣ sau: AB (*) đó: - A giả thiết, điều kiện ban đầu, thông tin cho, biết; - B kết luận, mục tiêu cần đạt phải tìm, phải làm kết thúc tốn; suy luận, giải pháp cần xác định chuỗi thao tác cần thực để có đƣợc kết B từ có A 2.2 Xác định tốn Theo sơ đồ việc xác định tốn có nghĩa xác định A, B xác định ln bƣớc thực để ―đi‖ đƣợc từ A đến B 2.3 Bài tốn máy tính Tƣơng tự nhƣ (*), - A gọi đầu vào (INPUT); - B gọi đầu (OUTPUT); CHƢƠNG TRÌNH MÁY TÍNH cho kết B với đầu vào A 2.4 Khó khăn Việc xác định tốn máy tính thƣờng gặp khó khăn sau: - Thơng tin A, B thƣờng không rõ ràng không đầy đủ; - Thông báo điều kiện đặt cho cách giải (=>) thƣờng không đƣợc nêu cách minh bạch; Chƣơng 1: GIỚI THIỆU NGƠN NGỮ C Ví dụ 1: Hãy viết chƣơng trình cho phép giải phƣơng trình bậc A = ???, B = ??? Ví dụ 2: Giả sử ngƣời A có số tiền X đem gửi tiết kiện, lãi xuất tháng L% hỏi sau T tháng A có tiền biết tháng tiền lãi đƣợc cộng vào gốc Ví dụ 3: Bài tốn hậu - Hãy tìm cách đặt hậu bàn cờ vua cho khơng có qn hậu ăn quân hậu khác Ví dụ 4: Cho dãy số a1, a2, , an xếp dãy theo thứ tự giảm dần Ví dụ 5: Hãy xây dựng hệ thống quản lý hồ sơ kết học tập sinh viên A = ???, B = ??? 2.5 Nhận xét quan trọng Việc xác định tốn rất quan trọng, ảnh hƣởng tới cách thức chất lƣợng việc giải toán; - Một toán cho dù đƣợc diễn đạt chi tiết, rõ ràng nên giả định phần lớn thông tin A, B tiềm ẩn đầu ngƣời giải Thông tin A B thƣờng biểu tƣợng gợi nhớ đến thông tin tiềm ẩn - Bƣớc để xác định toán phải phát biểu lại toán cách xác theo ngơn ngữ riêng cách tiếp cận tốn, hiểu tốn - Bƣớc tiếp tìm hiểu thơng tin Input A, Output B mối liên hệ chúng; - Nên xét vài trƣờng hợp cụ thể để thơng qua hiểu đƣợc tốn, thấy rõ đƣợc thao tác phải làm Thực tế cho thấy có tốn tin học mơ tả đƣợc thơng qua ví dụ (nhƣ: ) Cấu trúc liệu Giải thuật 3.1 Cấu trúc liệu - Trong khoa học máy tính, cấu trúc liệu cách tổ chức lƣu trữ truy cập liệu máy tính cho đƣợc sử dụng cách hiệu (và phụ thuộc vào cơng cụ lập trình) - Ví dụ (trong C): Mảng (Array), Con trỏ (Pointer), Xâu ký tự (String), File, Stack, Queue - Thông thƣờng, cấu trúc liệu đƣợc chọn cẩn thận cho phép thực Chƣơng 1: GIỚI THIỆU NGÔN NGỮ C thuật toán hiệu - Việc chọn cấu trúc liệu thƣờng chọn cấu trúc liệu trừu tƣợng Một cấu trúc liệu đƣợc thiết kế tốt cho phép thực nhiều phép tốn, sử dụng tài ngun, thời gian xử lý không gian nhớ tốt - Các cấu trúc liệu đƣợc triển khai cách sử dụng kiểu liệu, tham chiếu phép tốn đƣợc cung cấp ngơn ngữ lập trình 3.2 Thuật tốn - Thuật tốn, cịn gọi giải thuật, tập hợp hữu hạn thị hay phƣơng cách đƣợc định nghĩa rõ ràng cho việc hoàn tất số việc từ trạng thái ban đầu cho trƣớc; thị đƣợc áp dụng triệt để dẫn đến kết sau nhƣ dự đoán - Thuật toán qui tắc hay qui trình cụ thể nhằm giải vấn đề số bƣớc hữu hạn, nhằm cung cấp kết từ tập hợp kiện đƣa vào Ví dụ 1: Giả sử có hai bình A B đựng hai loại chất lỏng khác nhau, A chứa dung dịch Da, B chứa dung dịch Db Giải thuật để đổi dung dịch Da vào bình B Db vào A là: Yêu cầu phải có thêm bình thứ ba gọi bình C Bƣớc 1: Đổ dung dịch Db vào bình C; Bƣớc 2: Đổ dung dịch Da vào bình B; Bƣớc 3: Đổ dung dịch Db vào bình A Ví dụ 2: Một giải thuật tìm ƣớc chung lớn hai số a b là: Bƣớc 1: Nhập vào hai số a b Bƣớc 2: So sánh số a,b chọn số nhỏ gán cho UCLN Bƣớc 3: Nếu hai số a b chia hết cho UCLN Thực bƣớc Bƣớc 4: Giảm UCLN đơn vị quay lại bƣớc Bƣớc 5: In UCLN - Kết thúc 3.3 Một thuật tốn có tính chất sau: - Tính xác: để đảm bảo kết tính tốn hay thao tác mà máy tính thực đƣợc xác - Tính rõ ràng: Thuật toán phải đƣợc thể câu lệnh minh bạch; câu lệnh đƣợc xếp theo thứ tự định - Tính khách quan: Một thuật toán dù đƣợc viết nhiều ngƣời nhiều máy tính phải cho kết nhƣ Chƣơng 6: MẢNG VÀ CHUỖI 100 Nhap(a,M,N); printf("Nhap ma tran B\n"); Nhap(b,M,N); printf("Ma tran A: \n"); InMaTran(a,M,N); printf("Ma tran B: \n"); InMaTran(b,M,N); CongMaTran(a,b,M,N,c); printf("Ma tran tong C:\n"); InMaTran(c,M,N); getch(); return 0; } Ví dụ 2: Nhập vào ma trận chiều gồm số thực, in tổng phần tử đƣờng chéo ma trận Ta nhận thấy giả sử ma trận a có M dịng, N cột phần tử đƣờng chéo phần tử có dạng: a[i][i] với i [0…min(M,N)-1] #include #include int main() { float a[10][10], T=0; int M, N, i,j, Min; printf("Ma tran co bao nhieu dong? "); scanf("%d",&M); printf("Ma tran co bao nhieu cot? "); scanf("%d",&N); for(i=0;i