1. Trang chủ
  2. » Giáo Dục - Đào Tạo

CMP214 ky thuat lap trinh de cuong

136 53 0

Đ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

Nội dung

KỸ THUẬT LẬP TRÌNH Ấn 2017 MỤC LỤC I MỤC LỤC MỤC LỤC I HƯỚNG DẪN IV BÀI 1: MẢNG MỘT CHIỀU 1.1 KHÁI NIỆM 1.1.1 Mảng chiều 1.1.2 Cách khai báo mảng chiều 1.1.3 Truy cập vào phần tử mảng 1.1.4 Nhập liệu cho mảng chiều 1.1.5 Xuất liệu cho mảng chiều 1.1.6 Một vài thuật toán mảng chiều 1.2 CHUỖI KÝ TỰ (MẢNG MỘT CHIỀU CÁC KÝ TỰ) 1.2.1 Ký tự (character) 1.2.2 Chuỗi 11 1.2.3 Các thao tác chuỗi ký tự 12 1.2.4 Một số hàm xử lý chuỗi (trong < string.h>) 13 TÓM TẮT 22 CÂU HỎI ÔN TẬP 22 BÀI 2: MẢNG HAI CHIỀU 28 2.1 KHÁI NIỆM 28 2.2 CÁCH KHAI BÁO MẢNG HAI CHIỀU 28 2.2.1 Cú pháp 28 2.2.2 Ví dụ 29 2.2.3 Truy cập vào phần tử mảng 29 2.3 NHẬP DỮ LIỆU CHO MẢNG HAI CHIỀU 30 2.3.1 Nhập liệu cho mảng hai chiều số nguyên 30 2.3.2 Nhập liệu cho mảng hai chiều số thực 32 2.4 XUẤT DỮ LIỆU CHO MẢNG HAI CHIỀU 34 2.4.1 Xuất liệu cho mảng hai chiều số nguyên 34 2.4.2 Xuất liệu cho mảng hai chiều số thực 35 2.5 MỘT VÀI THUẬT TOÁN TRÊN MẢNG HAI CHIỀU 37 2.5.1 Bài toán 37 2.5.2 Bài toán 38 TÓM TẮT 39 CÂU HỎI ÔN TẬP 40 BÀI 3: KIỂU DỮ LIỆU CÓ CẤU TRÚC 43 3.1 KHÁI NIỆM 43 3.2 CÁCH KHAI BÁO KIỂU CẤU TRÚC 44 II MỤC LỤC 3.2.1 Cú pháp 44 3.2.2 Ví dụ 44 3.2.3 Ví dụ 45 3.2.4 Ví dụ 45 3.3 TRUY CẬP VÀO TỪNG PHẦN TỬ CỦA CẤU TRÚC 46 3.3.1 Cú pháp 46 3.3.2 Ví dụ 46 3.3.3 Ví dụ 46 3.4 NHẬP DỮ LIỆU CHO KIỂU DỮ LIỆU CÓ CẤU TRÚC 47 3.4.1 Nhập liệu cho phân số 47 3.4.2 Nhập vào điểm sinh viên .48 3.5 XUẤT DỮ LIỆU 49 3.5.1 Xuất liệu cho phân số 49 3.5.2 Xuất liệu điểm 49 3.6 MẢNG CẤU TRÚC 49 3.6.1 Bài toán .49 3.6.2 Bài toán .51 3.7 MỘT VÀI GIẢI THUẬT TRÊN MẢNG CẤU TRÚC 51 3.7.1 Bài toán .51 3.7.2 Bài toán .52 TÓM TẮT 52 CÂU HỎI ÔN TẬP 53 BÀI 4: KIỂU CON TRỎ 57 4.1 KHÁI NIỆM VỀ ĐỊA CHỈ Ô NHỚ VÀ CON TRỎ 57 4.2 KHAI BÁO VÀ SỬ DỤNG BIẾN CON TRỎ 58 4.2.1 Khai báo biến trỏ 58 4.2.2 Các thao tác trỏ 59 4.3 CÁC PHÉP TOÁN TRÊN CON TRỎ 61 4.3.1 Phép gán .61 4.3.2 Phép tăng giảm địa 62 4.3.3 Phép truy nhập nhớ 62 4.3.4 Phép so sánh 63 4.4 SỬ DỤNG CON TRỎ ĐỂ CẤP PHÁT VÀ THU HỒI BỘ NHỚ ĐỘNG 63 4.4.1 Các hàm cấp phát vùng nhớ 64 4.4.2 Toán tử thu hồi nhớ động 66 4.4.3 Toán tử sizeof: .66 4.5 CON TRỎ VÀ MẢNG MỘT CHIỀU 67 4.5.1 Truy cập phần tử mảng theo dạng trỏ 67 4.5.2 Truy cập phần tử quản lý trỏ theo dạng mảng 68 4.6 CON TRỎ VÀ MẢNG HAI CHIỀU 72 4.6.1 Bài toán .72 HƯỚNG DẪN III 4.6.2 Cách 73 4.6.3 Cách 76 4.7 CON TRỎ VỚI KIỂU DỮ LIỆU CÓ CẤU TRÚC (STRUCT) 79 4.7.1 Ví dụ 79 4.7.2 Ví dụ 79 4.7.3 Truyền structure sang hàm 81 TÓM TẮT 83 CÂU HỎI ÔN TẬP 83 BÀI 5: ĐỆ QUY 95 5.1 KHÁI NIỆM 95 5.2 PHÂN LOẠI HÀM ĐỆ QUY 97 5.2.1 Đệ qui tuyến tính 98 5.2.2 Đệ qui nhị phân 99 5.2.3 Đệ qui phi tuyến 100 5.2.4 Đệ qui Hỗ Tương 101 5.3 KỸ THUẬT GIẢI BÀI TOÁN BẰNG ĐỆ QUY 102 5.3.1 Một số toán kinh điển dùng phương pháp đệ quy 103 5.4 NHẬN XÉT 106 5.5 CẤU TRÚC LẶP VÀ ĐỆ QUY 106 TÓM TẮT 107 CÂU HỎI ÔN TẬP 107 BÀI 6: TẬP TIN (FILE) 110 6.1 KHÁI NIỆM 110 6.2 CÁC THAO TÁC TRÊN TẬP TIN 111 6.2.1 Khai báo biến tập tin 112 6.2.2 Mở tập tin 112 6.2.3 Đóng tập tin 113 6.2.4 Kiểm tra đến cuối tập tin hay chưa? 113 6.2.5 Di chuyển trỏ tập tin đầu tập tin - Hàm rewind() 114 6.3 TRUY CẬP TẬP TIN VĂN BẢN 114 6.3.1 Ghi liệu lên tập tin văn 114 6.3.2 Đọc liệu từ tập tin văn 116 6.4 TRUY CẬP TẬP TIN NHỊ PHÂN 118 6.4.1 Ghi liệu lên tập tin nhị phân - Hàm fwrite() 118 6.4.2 Đọc liệu từ tập tin nhị phân - Hàm fread() 118 6.4.3 Di chuyển trỏ tập tin - Hàm fseek() 118 TÓM TẮT 125 CÂU HỎI ÔN TẬP 125 TÀI LIỆU THAM KHẢO 128 IV HƯỚNG DẪN HƯỚNG DẪN MƠ TẢ MƠN HỌC Mơn Kỹ Thuật Lập Trình cung cấp cho sinh viên kiến thức nâng cao lập trình thơng qua ngơn ngữ lập trình C Mơn học tảng để tiếp thu hầu hết môn học khác chương trình đào tạo Mặt khác, nắm vững mơn sở để phát triển tư kỹ lập trình để giải tốn ứng dụng thưc tế Học xong môn này, sinh viên phải nắm vấn đề sau: - Khái niệm ngơn ngữ lập trình - Khái niệm kiểu liệu - Tổng quan Ngôn ngữ lập trình C - Các kiểu liệu C - Các lệnh có cấu trúc - Cách thiết kế sử dụng hàm C - Một số cấu trúc liệu C - Xử lý toán mảng chiều - Xử lý toán mảng hai chiều - Kỹ thuật dùng trỏ - Biết kỹ thuật viết đệ quy khử đệ qui - Biết xây dựng xử lý tốn liệu có cấu trúc người dùng định nghĩa - Cách lưu trữ xử lý file C - Tìm hiểu cài đặt số toán kinh điển “Tháp Hà Nội“ ,“Bài toán mã tuần”, “bài toán tám hậu” phương pháp đệ quy hay đệ quy quay lui, Phương pháp sinh liệu HƯỚNG DẪN V NỘI DUNG MÔN HỌC - Bài Mảng chiều: Bài cung cấp cho học viên khái niệm mảng chiều, cách nhập, xuất, lưu trữ mảng chiều với liệu kiểu số kiểu chuỗi, xử lý tốn tính tổng giá trị mảng chiều số nguyên, số thực, tìm phần tử nhỏ nhất, lớn nhất, thêm, xóa, xếp phần tử mảng liệu kiểu số, xử lý toán liệu kiểu chuỗi - Bài Mảng hai chiều: Bài cung cấp cho học viên khái niệm mảng hai chiều, cách nhập, xuất, lưu trữ mảng hai chiều, xử lý tốn tính tổng giá trị mảng số nguyên, số thực, tìm phần tử nhỏ nhất, lớn nhất, xếp phần tử mảng liệu kiểu số, kiểu chuỗi - Bài Kiểu liệu có cấu trúc: Bài cung cấp cho học viên khái niệm kiểu liệu có cấu trúc người dùng định nghĩa Biết Nhập Xuất liệu có cấu trúc cho phần tử Biết Nhập, Xuất liệu có cấu trúc lưu mảng chiều Cách tìm kiếm xếp liệu mảng chiều với thành phần liệu Đi sâu vào giải thuật mảng chiều tìm kiếm, xếp, thêm phần tử, xóa phần tử - Bài Kiểu trỏ: Bài cung cấp cho học viên khái niệm kiểu liệu trỏ, cách khai báo sử dụng biến kiểu trỏ Mảng phép toán mảng chiều theo kiểu trỏ Mảng phép toán mảng hai chiều theo kiểu trỏ Đi sâu vào giải thuật mảng chiều, chiều tìm kiếm, xếp, thêm phần tử, xóa phần tử theo kiểu trỏ Con trỏ với kiểu liệu có cấu trúc - Bài Đệ quy: Bài cung cấp cho học viên khái niệm kiểu lập trình phương pháp đệ quy, kiểu đệ quy Ưu điểm nhược điểm cài đặt hàm phương pháp đệ quy Giải số toán kinh điển phương pháp đệ quy Xử lý giải thuật mảng chiều phương pháp đệ quy - Bài Tập tin: Bài cung cấp cho học viên số khái niệm tập tin Các bước thao tác với tập tin Thao tác tập tin văn Thao tác tập tin nhị phân VI HƯỚNG DẪN KIẾN THỨC TIỀN ĐỀ Môn học Kỹ Thuật Lập Trình u cầu sinh viên phải có tảng mơn lập trình bản, có tư tốn học tốt U CẦU MƠN HỌC Người học phải dự học đầy đủ buổi lên lớp làm tập đầy đủ nhà CÁCH TIẾP NHẬN NỘI DUNG MƠN HỌC Để học tốt mơn này, người học cần ôn tập học, trả lời câu hỏi làm đầy đủ tập; đọc trước tìm thêm thơng tin liên quan đến học Đối với học, người học đọc trước mục tiêu tóm tắt học, sau đọc nội dung học Kết thúc ý học, người đọc trả lời câu hỏi ôn tập kết thúc toàn học, người đọc làm tập PHƯƠNG PHÁP ĐÁNH GIÁ MÔN HỌC Môn học đánh giá gồm: - Điểm thực hành: 30% Thi thực hành máy Hình thức nội dung GV định, phù hợp với quy chế đào tạo tình hình thực tế nơi tổ chức học tập - Điểm trình: 20% Do giảng viên lý thuyết quy định dựa tiêu chí chuyên cần, điểm danh, làm tập lớp, làm tập nhà… - Điểm thi: 50% Hình thức thi tự luận 90 phút Nội dung gồm tập thuộc thứ đến thứ BÀI 1: MẢNG MỘT CHIỀU BÀI 1: MẢNG MỘT CHIỀU Sau học xong này, học viên có thể: - Hiểu khái niệm kiểu liệu mảng ứng dụng nó; - Biết cách khai báo biến kiểu mảng phép toán phần tử mảng; - Đi sâu vào giải thuật mảng chiều tìm kiếm, xếp, thêm phần tử, xóa phần tử 1.1 KHÁI NIỆM 1.1.1 Mảng chiều Mảng tập hợp phần tử cố định có kiểu liệu, gọi kiểu phần tử Kiểu phần tử có kiểu bất kỳ: ký tự, số, chuỗi ký tự…; có ta sử dụng kiểu mảng để làm kiểu phần tử cho mảng (trong trường hợp ta gọi mảng mảng hay mảng nhiều chiều) Ta chia mảng làm loại: mảng chiều mảng nhiều chiều Mảng kiểu liệu sử dụng thường xuyên Chẳng hạn, người ta cần quản lý danh sách họ tên khoảng 100 sinh viên lớp Nhận thấy họ tên để lưu trữ ta cần biến kiểu chuỗi, 100 họ tên cần khai báo 100 biến kiểu chuỗi Nếu khai báo đoạn khai báo thao tác họ tên dài dòng rắc rối Vì thế, kiểu liệu mảng giúp ích ta trường hợp này; cần khai báo biến, biến coi tương đương với 100 biến kiểu chuỗi ký tự; mảng mà phần tử chuỗi ký tự Hay để lưu trữ từ khóa ngơn ngữ lập trình C, ta dùng đến mảng để lưu trữ chúng Kích thước mảng số phần tử mảng Kích thước phải biết khai báo mảng BÀI 1: MẢNG MỘT CHIỀU Nếu xét góc độ tốn học, mảng chiều giống vector Mỗi phần tử mảng chiều có giá trị khơng phải mảng khác 1.1.2 Cách khai báo mảng chiều 1.1.2.1 Khai báo tường minh (số phần tử xác định) Cú pháp [] Ý nghĩa: - : đặt theo quy tắc đặt tên danh biểu Tên mang ý nghĩa tên biến mảng - [] : số nguyên, cho biết số lượng phần tử tối đa mảng (hay nói khác kích thước mảng) - : kiểu liệu phần tử mảng Ví dụ Khai báo mảng chiều có tên songuyen gồm10 phần tử kiểu sở int int songuyen [10] ; Khai báo mảng chiều có tên sothuc gồm15 phần tử kiểu sở float float sothuc [15] ; Khai báo mảng chiều có tên daykytu gồm30 phần tử kiểu sở char char daykytu [30] ; 1.1.2.2 Khai báo không tường minh(số phần tử không xác định) Cú pháp [ ] Khi khai báo, không cho biết rõ số phần tử mảng, kiểu khai báo thường áp dụng trường hợp: vừa khai báo vừa gán giá trị, khai báo mảng tham số hình thức hàm 114 BÀI 6: TẬP TIN (FILE) 6.2.5 Di chuyển trỏ tập tin đầu tập tin - Hàm rewind() Khi ta thao tác tập tin mở, trỏ tập tin di chuyển phía cuối tập tin Muốn cho trỏ quay đầu tập tin mở nó, ta sử dụng hàm rewind() Cú pháp: void rewind (FILE *f) 6.3 TRUY CẬP TẬP TIN VĂN BẢN 6.3.1 Ghi liệu lên tập tin văn Hàm putc() Hàm dùng để ghi ký tự lên tập tin văn mở để làm việc Cú pháp: int putc (int c, FILE *f) Trong đó, tham số c chứa mã Ascii ký tự Mã ghi lên tập tin liên kết với trỏ f Hàm trả EOF gặp lỗi Hàm fputs() Hàm dùng để ghi chuỗi ký tự chứa vùng đệm lên tập tin văn Cú pháp: int puts (const char *buffer, FILE *f) Trong đó, buffer trỏ có kiểu char đến vị trí chuỗi ký tự ghi vào Hàm trả giá trị buffer chứa chuỗi rỗng trả EOF gặp lỗi Hàm fprintf() Hàm dùng để ghi liệu có định dạng lên tập tin văn Cú pháp: fprintf (FILE *f, const char *format, varexpr) Trong đó: - format: chuỗi định dạng (giống với định dạng hàm printf()) - varexpr: danh sách biểu thức, biểu thức cách dấu phẩy (,) BÀI 6: TẬP TIN (FILE) Định dạng %d 115 Ý nghĩa Ghi số nguyên %[.số chữ số thập phân] f Ghi số thực có theo quy tắc làm tròn số %o Ghi số nguyên hệ bát phân %x Ghi số nguyên hệ thập lục phân %c Ghi ký tự %s Ghi chuỗi ký tự %e %E %g %G Ghi số thực dạng khoa học (nhân 10 mũ x) Ví dụ: Viết chương trình ghi chuỗi ký tự lên tập tin văn D:\\Baihat.txt #include #include int main () { FILE *f; clrscr (); f = fopen ("D:\\Baihat.txt","r+"); if (f!=NULL) { fputs("Em oi Ha Noi pho.\n",f); fputs("Ta em, mui hoang lan; ta em, mui hoa sua.",f); fclose(f); } getch(); return 0; } Nội dung tập tin Baihat.txt mở trình soạn thảo văn Notepad 116 BÀI 6: TẬP TIN (FILE) 6.3.2 Đọc liệu từ tập tin văn Hàm getc() Hàm dùng để đọc liệu từ tập tin văn mở để làm việc Cú pháp: int getc ( FILE *f ) Hàm trả mã Ascii ký tự (kể EOF) tập tin liên kết với trỏ f Hàm fgets() Cú pháp: char *fgets (char *buffer, int n, FILE *f) Hàm dùng để đọc chuỗi ký tự từ tập tin văn mở liên kết với trỏ f đọc đủ n ký tự gặp ký tự xuống dòng ‘\n’ (ký tự đưa vào chuỗi kết quả) hay gặp ký tự kết thúc EOF (ký tự không đưa vào chuỗi kết quả) Trong đó: - buffer (vùng đệm): trỏ có kiểu char đến vùng nhớ đủ lớn chứa ký tự nhận - n: giá trị nguyên độ dài lớn chuỗi ký tự nhận - f: trỏ liên kết với tập tin - Ký tự NULL (‘\0’) tự động thêm vào cuối chuỗi kết lưu vùng đệm Hàm trả địa vùng đệm không gặp lỗi chưa gặp ký tự kết thúc EOF Ngược lại, hàm trả giá trị NULL Hàm fscanf() Hàm dùng để đọc liệu từ tập tin văn vào danh sách biến theo định dạng Cú pháp: fscanf ( FILE *f, const char *format, varlist ) Trong đó: format: chuỗi định dạng (giống hàm scanf()); BÀI 6: TẬP TIN (FILE) 117 varlist: danh sách biến biến cách dấu phẩy (,) Ví dụ: Viết chương trình chép tập tin D:\Baihat.txt sang tập tin D:\Baica.txt #include #include int main() { FILE *f1,*f2 ; clrscr(); f1=fopen("D:\\Baihat.txt","rt"); f2=fopen("D:\\Baica.txt","wt"); if (f1!=NULL && f2!=NULL) { int ch=fgetc (f1); while (! feof (f1)) { fputc(ch,f2); ch=fgetc(f1); } fcloseall(); } getch(); return 0; } 118 BÀI 6: TẬP TIN (FILE) 6.4 TRUY CẬP TẬP TIN NHỊ PHÂN 6.4.1 Ghi liệu lên tập tin nhị phân - Hàm fwrite() Cú pháp: size_t fwrite(const void *ptr, size_t size, size_t n, FILE*f) Trong đó: - ptr: trỏ đến vùng nhớ chứa thông tin cần ghi lên tập tin - n: số phần tử ghi lên tập tin - size: kích thước phần tử - f: trỏ tập tin mở Giá trị trả hàm số phần tử ghi lên tập tin Giá trị n trừ xuất lỗi 6.4.2 Đọc liệu từ tập tin nhị phân - Hàm fread() Cú pháp: size_t fread (const void *ptr, size_t size, size_t n, FILE *f) Trong đó: - ptr: trỏ đến vùng nhớ nhận liệu từ tập tin - n: số phần tử đọc từ tập tin - size: kích thước phần tử - f: trỏ tập tin mở Giá trị trả hàm số phần tử đọc từ tập tin Giá trị n hay nhỏ n chạm đến cuối tập tin có lỗi xuất 6.4.3 Di chuyển trỏ tập tin - Hàm fseek() Việc ghi hay đọc liệu từ tập tin làm cho trỏ tập tin dịch chuyển số byte, kích thước kiểu liệu phần tử tập tin Khi đóng tập tin mở lại nó, trỏ ln vị trí đầu tập tin 119 BÀI 6: TẬP TIN (FILE) Nhưng ta sử dụng kiểu mở tập tin “a” để ghi nối liệu, trỏ tập tin di chuyển đến vị trí cuối tập tin Ta điều khiển việc di chuyển trỏ tập tin đến vị trí định hàm fseek() Cú pháp: int fseek ( FILE *f, long offset, int whence ) Trong đó: - fseek di chuyển trỏ f đến vị trí offset theo mốc whence - f : trỏ tập tin thao tác - offset: số byte cần dịch chuyển trỏ tập tin kể từ vị trí trước Phần tử vị trí - whence: vị trí bắt đầu để tính offset, ta chọn điểm xuất phát là: • • #define SEEK_SET // #define SEEK_CUR #define SEEK_END // tính từ cuối tập tin // tính tính từ vị từ trí đầu hành tập tin trỏ fseek trả về: thành công, 0 di chuyển có lỗi Ví dụ 1: Viết chương trình ghi lên tập tin CacSo.Dat giá trị số (thực, nguyên, nguyên dài) Sau đọc số từ tập tin vừa ghi hiển thị lên hình #include #include int main() { FILE *f; clrscr(); f=fopen ("D:\\CacSo.txt","wb"; if (f!=NULL) { 120 BÀI 6: TẬP TIN (FILE) double d=3.14; int i=101; long l=54321; fwrite (&d,sizeof(double),1,f); fwrite(&i,sizeof(int),1,f); fwrite(&l,sizeof(long),1,f); /* Doc tu tap tin*/ rewind(f); fread (&d,sizeof(double),1,f); fread(&i,sizeof(int),1,f); fread(&l,sizeof(long),1,f); printf("Cac ket qua la: %f %d %ld",d,i,l); fclose(f); } getch(); return 0; } Ví dụ 2: Mỗi sinh viên cần quản lý thông tin: mã sinh viên họ tên Viết chương trình cho phép lựa chọn chức năng: nhập danh sách sinh viên từ bàn phím ghi lên tập tin SinhVien.dat, đọc liệu từ tập tin SinhVien.dat hiển thị danh sách lên hình, tìm kiếm họ tên sinh viên dựa vào mã sinh viên nhập từ bàn phím Ta nhận thấy phần tử tập tin SinhVien.Dat cấu trúc có trường: mã họ tên Do đó, ta cần khai báo cấu trúc sử dụng hàm đọc/ghi tập tin nhị phân với kích thước phần tử tập tin kích thước cấu trúc BÀI 6: TẬP TIN (FILE) #include #include #include typedef struct { char Ma[10]; char HoTen[40]; } SinhVien; void WriteFile (char *FileName) { FILE *f; int n,i; SinhVien sv; f=fopen(FileName,"ab"); printf("Nhap bao nhieu sinh vien? "); scanf("%d",&n); fflush(stdin); for(i=1;i

Ngày đăng: 05/11/2019, 11:14

w