1. Trang chủ
  2. » Luận Văn - Báo Cáo

Lap trinh c 6474 20120830050916 617

284 3 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

Thông tin cơ bản

Định dạng
Số trang 284
Dung lượng 1,56 MB

Nội dung

Bài Những khái niệm ngôn ngữ C Mục tiêu: Kết thúc học này, bạn có thể:  Phân biệt khác Câu lệnh, Chương trình Phần mềm  Biết trình hình thành C  Nên dùng C  Nắm cấu trúc chương trình C  Hiểu rõ khái niệm giải thuật (algorithms)  Vẽ lưu đồ (flowchart)  Liệt kê ký hiệu dùng lưu đồ Giới thiệu Ngày nay, khoa học máy tính thâm nhập vào lĩnh vực Tự động hóa ngành chủ chốt điều hướng phát triển giới Bất ngành nghề cần phải hiểu biết nhiều Cơng nghệ Thơng tin lập trình nói chung Cụ thể, C ngơn ngữ lập trình cấp cao mà lập trình viên cần phải biết Vì thế, giáo trình này, nghiên cứu chi tiết cấu trúc ngơn ngữ C Ðầu tiên tìm hiểu khác khái niệm: Lệnh (Command), Chương trình (Program) Phần mềm (Software) 1.1 Ra lệnh cho máy tính làm việc Khi máy tính khởi động, tự động thực thi số tiến trình xuất kết hình Ðiều diễn nào? Câu trả lời đơn giản nhờ vào Hệ điều hành cài đặt bên máy tính Hệ điều hành (operating system) xem phần mềm hệ thống Phần mềm khởi động máy tính thiết lập thông số ban đầu trước trao quyền cho người dùng Để làm điều này, hệ điều hành phải cấu tạo từ tập hợp chương trình Mọi chương trình cố gắng đưa lời giải cho hay nhiều toán đóMọi chương trình cố gắng đưa giải pháp cho hay nhiều vấn đề Mỗi chương trình tập hợp câu lệnh giải toán cụ thể Một nhóm lệnh tạo thành chương trình nhóm chương trình tạo thành phần mềm Để rõ hơn, xem xét thí dụ : Một người bạn đến nhà chơi mời sữa dâu Anh ta thấy ngon miệng muốn xin công thức làm Chúng ta hướng dẫn cho làm sau : Lấy sữa Đổ nước ép dâu vào Trộn hỗn hợp làm lạnh Bây bạn theo dẫn này, họ tạo sữa dâu tuyệt vời Chúng ta phân tích thị (lệnh)  Lệnh : Lệnh hoàn chỉnh chưa ? Nó có trả lời câu hỏi lấy sữa ‘ở đâu’ ?  Lệnh thứ hai : Một lần nữa, lệnh khơng nói rõ nước ép dâu để ‘ở đâu’ Những khái niệm ngôn ngữ C May mắn bạn đủ thơng minh để hiểu cơng thức pha chế nói trên, nhiều điểm chưa rõ ràng Do muốn phổ biến cách làm, cần bổ sung bước sau : Rót ly sữa vào máy trộn Đổ thêm vào nước dâu ép Ðóng nắp máy trộn Mở điện bắt đầu trộn Dừng máy trộn lại Nếu trộn tắt máy, ngược lại trộn tiếp Khi trộn xong, rót hỗn hợp vào tơ đặt vào tủ lạnh Ðể lạnh lúc lấy dùng So sánh hai cách hướng dẫn nêu trên, hướng dẫn thứ hai chắn hoàn chỉnh, rõ ràng hơn, đọc hiểu Tương tự, máy tính xử lý liệu dựa vào tập lệnh mà nhận Ðương nhiên thị đưa cho máy vi tính cần phải hồn chỉnh có ý nghĩa rõ ràng Những thị cần phải tuân thủ quy tắc: Tuần tự Có giới hạn Chính xác Mỗi thị tập thị gọi “câu lệnh” tập câu lệnh gọi “chương trình” Chúng ta xét trường hợp chương trình hướng dẫn máy tính cộng hai số Các lệnh chương trình : Nhập số thứ nhớ Nhập số thứ hai nhớ Thực phép cộng số thứ số thứ hai, nhớ kết phép cộng Hiển thị kết Kết thúc Tập lệnh tuân thủ tất quy tắc đề cập Vì vậy, tập lệnh chương trình thực thành cơng việc cộng hai số máy tính Ghi chú: Khả nhớ người biết đến trí nhớ, khả nhớ liệu đưa vào máy tính gọi “bộ nhớ” Máy tính nhận liệu thời điểm làm việc với liệu vào thời điểm khác, nghĩa máy tính ghi liệu vào nhớ sau đọc để truy xuất giá trị liệu làm việc với chúng Khi khối lượng cơng việc giao cho máy tính ngày nên nhiều phức tạp tất câu lệnh khơng thể đưa vào chương trình, chúng cần chia thành số chương trình nhỏ Tất chương trình cuối tích hợp lại để chúng làm việc với Một tập hợp chương trình gọi phần mềm Lập trình C Mối quan hệ ba khái niệm câu lệnh, chương trình phần mềm biểu diễn sơ đồ hình 1.1: Software Program Program Commands Commands Commands Hình 1.1: Phần mềm, chương trình câu lệnh 1.2 Ngôn ngữ C Vào đầu năm 70 phịng thí nghiệm Bell, Dennis Ritchie phát triển ngôn ngữ C C sử dụng lần đầu hệ thống cài đặt hệ điều hành UNIX C có nguồn gốc từ ngơn ngữ BCPL Martin Richards phát triển BCPL sau Ken Thompson phát triển thành ngôn ngữ B, người khởi thủy C Trong BCPL B không hỗ trợ kiểu liệu, C có nhiều kiểu liệu khác Những kiểu liệu gồm : kiểu ký tự (character), kiểu số nguyên (interger) kiểu số thực (float) C liên kết chặt chẽ với hệ thống UNIX khơng bị trói buộc vào máy tính hay hệ điều hành C hiệu để viết chương trình thuộc nhiều lĩnh vực khác C dùng để lập trình hệ thống Một chương trình hệ thống có ý nghĩa liên quan đến hệ điều hành máy tính hay tiện ích hỗ trợ Hệ điều hành (OS), trình thơng dịch (Interpreters), trình soạn thảo (Editors), chương trình Hợp Ngữ (Assembly) chương trình hệ thống Hệ điều hành UNIX phát triển dựa vào C C sử dụng rộng rãi tính hiệu linh hoạt Trình biên dịch (compiler) C có sẵn cho hầu hết máy tính Mã lệnh viết C máy biên dịch chạy máy khác cần thay đổi khơng thay đổi Trình biên dịch C dịch nhanh cho mã đối tượng không lỗi C thực thi nhanh hợp ngữ (Assembly) Lập trình viên tạo bảo trì thư viện hàm mà chúng tái sử dụng cho chương trình khác Do đó, dự án lớn quản lý dễ dàng mà tốn cơng sức 1.2.1 C – Ngôn ngữ bậc trung C hiểu ngôn ngữ bậc trung kết hợp yếu tố ngôn ngữ cấp cao chức hợp ngữ (ngôn ngữ cấp thấp) C cho phép thao tác thành phần máy tính bits, bytes, địa chỉ… Hơn nữa, mã C dễ di chuyển nghĩa phần mềm viết cho loại máy tính chạy loại máy tính khác Mặc dù C có năm kiểu liệu bản, khơng xem ngang hàng với ngôn ngữ cao cấp mặt kiểu liệu C cho phép chuyển kiểu liệu Nó cho phép thao tác trực tiếp bits, bytes, word trỏ (pointer) Vì vậy, dùng cho lập trình mức hệ thống 1.2.2 C - Ngôn ngữ cấu trúc Những khái niệm ngôn ngữ C Thuật ngữ ngôn ngữ cấu trúc khối (block-structured language) không áp dụng với C Ngôn ngữ cấu trúc khối cho phép thủ tục (procedures) hay hàm (functions) khai báo bên thủ tục hàm khác C không cho phép việc tạo hàm hàm nên khơng phải ngơn ngữ cấu trúc khối Tuy nhiên, xem ngơn ngữ cấu trúc có nhiều điểm giống với ngôn ngữ cấu trúc ALGOL, Pascal số ngôn ngữ tương tự khác C cho phép có tổng hợp mã lệnh liệu Ðiều đặc điểm riêng biệt ngơn ngữ cấu trúc Nó liên quan đến khả tập hợp ẩn dấu tất thông tin lệnh khỏi phần cịn lại chương trình để dùng cho tác vụ riêng biệt Ðiều thực qua việc dùng hàm hay khối mã lệnh (Code Block) Các hàm dùng để định nghĩa hay tách rời tác vụ yêu cầu chương trình Ðiều cho phép chương trình hoạt động đơn vị thống Khối mã lệnh nhóm câu lệnh chương trình nối kết với theo trật tự logic xem đơn vị thống Một khối mã lệnh tạo tập hợp nhiều câu lệnh dấu ngoặc mở đóng xoắn đây: { i = i + 1; } while (i < 40); Ngôn ngữ cấu trúc hỗ trợ nhiều cấu trúc dùng cho vòng lặp (loop) while, do-while, for Những cấu trúc lặp giúp lập trình viên điều khiển hướng thực thi chương trình 1.3 Cấu trúc chương trình C C có số từ khóa, xác 32 Những từ khóa kết hợp với cú pháp C hình thành ngơn ngữ C Nhưng nhiều trình biên dịch cho C thêm vào từ khóa dùng cho việc tổ chức nhớ giai đoạn tiền xử lý định Vài quy tắc lập trình C sau : - Tất từ khóa chữ thường (khơng in hoa) Ðoạn mã chương trình C có phân biệt chữ thường chữ hoa Ví dụ : while khác với DO WHILE Từ khóa khơng thể dùng cho mục đích khác đặt tên biến (variable name) tên hàm (function name) Hàm main() hàm gọi đến chương trình bắt đầu chạy (chúng ta xem xét kỹ phần sau) Xem xét đoạn mã chương trình: main () { /* This is a sample program */ int i = 0; i = i + 1; } Lập trình C Ghi chú: Những khía cạnh khác chương trình C xem xét qua đoạn mã Ðoạn mã xem đoạn mã mẫu, dùng lại suốt phần cịn lại giáo trình 1.3.1 Ðịnh nghĩa Hàm Chương trình C chia thành đơn vị gọi hàm Ðoạn mã mẫu có hàm main() Hệ điều hành ln trao quyền điều khiển cho hàm main() chương trình C thực thi Tên hàm ln theo sau cặp dấu ngoặc đơn () Trong dấu ngoặc đơn có hay khơng có tham số (parameters) 1.3.2 Dấu phân cách (Delimiters) Sau định nghĩa hàm dấu ngoặc xoắn mở { Nó thơng báo điểm bắt đầu hàm Tương tự, dấu ngoặc xoắn đóng } sau câu lệnh cuối hàm điểm kết thúc hàm Dấu ngoặc xoắn mở đánh dấu điểm bắt đầu khối mã lệnh, dấu ngoặc xoắn đóng đánh dấu điểm kết thúc khối mã lệnh Trong đoạn mã mẫu có câu lệnh dấu ngoặc xoắn Hơn nữa, hàm, dấu ngoặc xoắn dùng để phân định đoạn mã trường hợp dùng cho cấu trúc vòng lặp lệnh điều kiện 1.3.3 Dấu kết thúc câu lệnh (Terminator) Dòng int i = 0; đoạn mã mẫu câu lệnh (statement) Một câu lệnh C kết thúc dấu chấm phẩy (;) C khơng hiểu việc xuống dịng dùng phím Enter, khoảng trắng dùng phím spacebar hay khoảng cách dùng phím tab Có thể có nhiều câu lệnh hàng câu lệnh phải kết thúc dấu chấm phẩy Một câu lệnh không kết thúc dấu chấm phẩy xem câu lệnh sai 1.3.4 Dịng thích (Comment) Những thích thường viết để mơ tả cơng việc lệnh đặc biệt, hàm hay toàn chương trình Trình biên dịch khơng dịch chúng Trong C, thích bắt đầu ký hiệu /* kết thúc */ Trường hợp thích có nhiều dòng, ta phải ý ký hiệu kết thúc (*/), thiếu ký hiệu này, tồn chương trình bị coi thích Trong đoạn mã mẫu dòng chữ "This is a sample program" dòng thích Trong trường hợp thích dịng ta dùng // Ví dụ: int a = 0; // Biến ‘a’ khai báo kiểu số nguyên (interger) 1.3.5 Thư viện C (Library) Tất trình biên dịch C chứa thư viện hàm chuẩn dùng cho tác vụ chung Một vài cài đặt C đặt thư viện tập tin (file) lớn đa số lại chứa nhiều tập tin nhỏ Khi lập trình, hàm chứa thư viện dùng cho nhiều loại tác vụ khác Một hàm (được viết lập trình viên) đặt thư viện dùng nhiều chương trình yêu cầu Vài trình biên dịch cho phép hàm thêm vào thư viện chuẩn số khác lại yêu cầu tạo thư viện riêng 1.4 Biên dịch thực thi chương trình (Compiling and Running) Những bước khác việc dịch chương trình C từ mã nguồn thành mã thực thi thực sau :  Soạn thảo/Xử lý từ Những khái niệm ngôn ngữ C Ta dùng trình xử lý từ (word processor) hay trình soạn thảo (editor) để viết mã nguồn (source code) C chấp nhận loại mã nguồn viết dạng tập tin văn chuẩn Vài trình biên dịch (compiler) cung cấp mơi trường lập trình (xem phụ lục) gồm trình soạn thảo  Mã nguồn Ðây đoạn văn chương trình mà người dùng đọc Nó đầu vào trình biên dịch C  Bộ tiền xử lý C Từ mã nguồn, bước chuyển qua tiền xử lý C Bộ tiền xử lý xem xét câu lệnh bắt đầu dấu # Những câu lệnh gọi thị tiền biên dịch (directives) Điều giải thích sau Chỉ thị tiền biên dịch thường đặt nơi bắt đầu chương trình đặt nơi khác Chỉ thị tiền biên dịch tên ngắn gọn gán cho tập mã lệnh  Mã nguồn mở rộng C Bộ tiền xử lý C khai triển thị tiền biên dịch đưa kết Ðây gọi mã nguồn C mở rộng, sau chuyển cho trình biên dịch C  Trình biên dịch C (Compiler) Trình biên dịch C dịch mã nguồn mở rộng thành ngôn ngữ máy để máy tính hiểu Nếu chương trình lớn chia thành tập tin riêng biệt tập tin biên dịch riêng rẽ Ðiều giúp ích mà tập tin bị thay đổi, tồn chương trình khơng phải biên dịch lại  Bộ liên kết (Linker) Mã đối tượng với thủ tục hỗ trợ thư viện chuẩn hàm dịch riêng lẻ khác kết nối lại Bộ liên kết mã thực thi Lập trình C  Bộ nạp (Loader) Mã thực thi thi hành nạp hệ thống Tiến trình mơ tả qua lưu đồ 1.2 sau : # include file Source file Tập tin thêm vào Chương trình gốc Library File Compiler Thư viện Trình biên dịch Object File Other Usergenerated Object File Các tập tin thực thi khác người dùng Tập tin đối tượng Linker Bộ liên kết Executable File Tập tin thực thi Hình 1.2: Biên dịch thực thi chương trình 1.5 Các bước lập trình giải vấn đề Chúng ta thường gặp phải toán Để giải tốn đó, cần hiểu chúng trước sau hoạch định bước cần làm Giả sử muốn từ phòng học đến quán ăn tự phục vụ tầng hầm Ðể thực việc cần hiểu tìm bước giải trước thực thi bước đó: BƯỚC : Rời phịng BƯỚC : Ðến cầu thang BƯỚC : Xuống tầng hầm BƯỚC : Ði tiếp đến quán ăn tự phục vụ Thủ tục liệt kê tập hợp bước thực xác định rõ ràng cho việc giải vấn đề Một tập hợp bước gọi giải thuật (Algorithm hay gọi vắn tắt algo ) Một giải thuật (cịn gọi thuật tốn) định nghĩa thủ tục, cơng thức hay cách giải vấn đề Nó gồm tập hợp bước giúp đạt lời giải Qua phần trên, thấy rõ ràng để giải toán, trước tiên ta phải hiểu tốn đó, cần tập hợp tất thơng tin liên quan tới Bước kế xử lý mẩu thơng tin Cuối cùng, cho lời giải tốn Những khái niệm ngơn ngữ C Giải thuật có tập hợp bước liệt kê dạng ngôn ngữ đơn giản Rất bước hai người khác viết tương tự ngơn ngữ dùng diễn tả bước khác Do đó, cần thiết có phương pháp chuẩn mực cho việc viết giải thuật để người dễ dàng hiểu Chính , giải thuật viết cách dùng hai phương pháp chuẩn mã giả (pseudo code) lưu đồ (flowchart) Cả hai phương pháp dùng để xác định tập hợp bước cần thi hành để có lời giải Liên hệ tới vấn đề đến quán ăn tự phục vụ trên, vạch kế hoạch (thuật tốn) để đến đích Tuy nhiên, để đến nơi, phải cần thi hành bước thật Tương tự, mã giả lưu đồ đưa bước cần làm Lập trình viên phải viết mã cho việc thực thi bước qua việc dùng ngơn ngữ Chi tiết về mã giả lưu đồ trình bày 1.5.1 Mã giả (pseudo code) Nhớ mã giả mã thật Mã giả sử dụng tập hợp từ tương tự mã thật khơng thể biên dịch thực thi mã thật Chúng ta xem xét mã giả qua ví dụ sau.Ví dụ hiển thị câu 'Hello World!' Ví dụ 1: BEGIN DISPLAY 'Hello World!' END Qua ví dụ trên, đoạn mã giả phải bắt đầu với từ BEGIN START, kết thúc với từ END hay STOP Ðể hiển thị giá trị đó, từ DISPLAY WRITE dùng Khi giá trị hiển thị giá trị (không đổi), trường hợp (Hello World), đặt bên dấu nháy Tương tự, để nhận giá trị người dùng, từ INPUT hay READ dùng Ðể hiểu điều rõ hơn, xem xét ví dụ 2, ví dụ ta nhập hai số máy hiển thị tổng hai số Ví dụ 2: BEGIN INPUT A, B DISPLAY A + B END Trong đoạn mã giả này, người dùng nhập vào hai giá trị, hai giá trị lưu nhớ truy xuất A B theo thứ tự Những vị trí đặt tên nhớ gọi biến Chi tiết biến giải thích phần sau chương Bước đoạn mã giả hiển thị tổng hai giá trị biến A B Tuy nhiên, đoạn mã trên, ta bổ sung để lưu tổng hai biến biến thứ ba hiển thị giá trị biến ví dụ sau Ví dụ 3: BEGIN INPUT A, B Lập trình C C = A + B DISPLAY C END Một tập hợp thị hay bước mã giả gọi chung cấu trúc Có ba loại cấu trúc : tuần tự, chọn lựa lặp lại Trong đoạn mã giả ta viết trên,chúng ta dùng cấu trúc Chúng gọi thị thi hành tuần tự, sau khác điểm Hai loại cấu trúc lại đề cập chương sau 1.5.2 Lưu đồ (Flowcharts) Một lưu đồ hình ảnh minh hoạ cho giải thuật Nó vẽ biểu đồ luồng thị hay hoạt động tiến trình Mỗi hoạt động biểu diễn qua ký hiệu Ðể hiểu điều rõ hơn, xem lưu đồ hình 1.3 dùng hiển thị thông điệp truyền thống ‘Hello World!’ S TA R T DIS P L AY 'H e ll o W o rld !' STO P Hình 1.3: Lưu đồ Lưu đồ giống với đoạn mã giả bắt đầu với từ BEGIN START, kết thúc với từ END hay STOP Tương tự, từ khóa DISPLAY dùng để hiển thị giá trị đến người dùng Tuy nhiên, đây, từ khóa nằm ký hiệu Những ký hiệu khác mang ý nghĩa tương ứng trình bày bảng Hình 1.4 Hình 1.4: Ký hiệu lưu đồ Những khái niệm ngôn ngữ C Ta xét lưu đồ cho ví dụ Hình 1.5 Ký hiệu bắt đầu: Dùng để bắt đầu lưu đồ Ký hiệu xuất/nhập: Dùng để nhập hai số A, B Ký hiệu xử lý: Dùng để cộng hai số Ký hiệu xuất/nhập: Dùng để hiển thị tổng C Ký hiệu kết thúc: Dùng kết thúc lưu đồ Hình 1.5: Lưu đồ cộng hai số Tại bước mà giá trị hai biến cộng gán cho biến thứ ba xem xử lý trình bày hình chữ nhật Lưu đồ mà xét đơn giản.Thông thường, lưu đồ trải rộng nhiều trang giấy Trong trường hợp thế, biểu tượng nối dùng để điểm nối hai phần chương trình nằm hai trang Vòng tròn nối kết phải chứa ký tự số hình 1.6 Như thế, tạo liên kết giưa hai lưu đồ chưa hồn chỉnh Hình 1.6: Bộ nối Bởi lưu đồ sử dụng để viết chương trình, chúng cần trình bày cho lập trình viên hiểu chúng dễ dàng Nếu có ba lập trình viên dùng ba ngơn ngữ lập trình khác để viết mã, toán họ cần giải phải Trong trường hợp này, mã giả đưa cho lập trình viên giống ngơn ngữ lập trình họ dùng tất nhiên cú pháp khác Nhưng kết cuối Do đó, cần thiết phải hiểu rõ tốn mã giả phải viết cẩn thận Chúng ta kết luận mã giả độc lập với ngôn ngữ lập trình Vài điểm cần thiết khác phải ý vẽ lưu đồ :  Lúc đầu tập trung vào khía cạnh logic tốn vẽ luồng xử lý lưu đồ  Một lưu đồ phải có điểm bắt đầu (START) điểm kết thúc (STOP) 10 Lập trình C Tóm tắt  Ngơn ngữ C khơng chứa câu lệnh nhập/xuất tường minh Tất thao tác nhập/xuất thực cách sử dụng hàm thư viện chuẩn C  Có hai kiểu stream – stream văn stream nhị phân  Một stream văn chuỗi ký tự  Một stream nhị phân chuỗi byte  Một tập tin từ tập tin đĩa đến thiết bị đầu cuối hay máy in  Một trỏ tập tin trỏ trỏ đến cấu trúc, chứa thơng tin tập tin, bao gồm tên, vị trí hành tập tin, tập tin đọc ghi, có lỗi xuất hay đến cuối tập tin  Hàm fopen() mở stream để dùng liên kết tập tin với stream  Hàm fclose() đóng stream mở hàm fopen()  Hàm fcloseall() sử dụng cần đóng nhiều stream mở lúc  Hàm fputc() dùng để ghi ký tự, hàm fgetc() dùng để đọc ký tự từ tập tin mở  Hàm fgets() fputs() thao tác giống hàm fgetc() fputc(), ngoại trừ chúng làm việc chuỗi  Hàm feof() dùng để cuối tập tin tập tin mở cho thao tác nhị phân  Hàm rewind() đặt lại vị trí trỏ định vị trí đầu tập tin  Hàm ferror() xác định liệu thao tác tập tin có sinh lỗi hay khơng  Hàm remove() xóa tập tin cho  Hàm fflush() làm chép buffer Nếu tập tin mở để đọc, vùng đệm nhập trống, tập tin mở để ghi vùng đệm xuất ghi vào tập tin  Hàm fseek() sử dụng để đặt lại vị trí trỏ định vị bên tập tin  Các hàm thư viên fread() fwrite() dùng để đọc ghi toàn khối liệu vào tập tin  Hệ thống nhập xuất có vùng đệm bao gồm hai hàm fprintf() fscanf(), hai hàm tương tự hàm printf() scanf(), ngoại trừ chúng thao tác tập tin Quản lý tập tin 299 Kiểm tra tiến độ học tập Có hai kiểu stream stream stream _ Các tập tin mở đóng lại chương trình bị treo hay kết thúc bất thường Hàm _ mở stream để dùng liên kết tập tin với stream (Đúng /Sai) Hàm dùng để ghi ký tự vào tập tin Hàm fgets() xem ký tự sang dòng phần chuỗi (Đúng / Sai) Hàm đặt lại vị trí trỏ định vị bên tập tin đầu tập tin Mỗi ký tự đọc hay ghi từ stream, _ tăng lên Các tập tin mà hàm fread() fwrite() thao tác phải mở chế độ Vị trí hành trỏ kích hoạt hành tìm thấy trợ giúp hàm 300 Lập trình C Bài tập tự làm Viết chương trình để nhập liệu vào tập tin in theo thứ tự ngược lại Viết chương trình để truyền liệu từ tập tin sang tập tin khác, loại bỏ tất nguyên âm (a, e, i, o, u) Loại bỏ nguyên âm dạng chữ hoa lẫn chữ thường Hiển thị nội dung tập tin Quản lý tập tin 301 302 Lập trình C Bài 22 Quản Lý Tập Tin Mục tiêu: Kết thúc học này, bạn có thể:  Thực thao tác tập tin văn tập tin nhị phân  Mở đóng tập tin  Đọc từ tập tin ghi vào tập tin  Sử dụng trỏ tập tin Các bước cho giải thích cặn kẽ, dễ hiểu tư cẩn thận từ đầu đến cuối Bài viết để đáp ứng mục tiêu học để hiểu hồn tồn công cụ Xin thực theo bước cách cẩn thận Phần I – Trong thời gian 30 phút đầu: 22.1 Quản lý tập tin C C cung cấp giao diện đồng cho việc quản lý nhập xuất Các phương pháp truy cập tập tin giống phương pháp quản lý thiết bị khác Giải pháp cho tính đồng C khơng có kiểu tập tin C xem tất tập tin stream 22.1.1 Đọc, ghi truy cập liệu tập tin Có số hàm xử lý tập tin tập tin header stdio.h Chúng ta viết chương trình C sử dụng hàm Chương trình tạo hệ thống ngân hàng đơn giản Các chi tiết khách hàng nhập vào lưu tập tin gọi customer Chi tiết giao dịch gửi tiền rút tiền kiểm tra hợp lệ tập tin customer Các giao dịch hợp lệ ghi nhận tập tin trans Một báo cáo khách hàng có số vốn thấp in Các bước liệt kê sau: Định nghĩa structure để lưu trữ liệu khách hàng giao dịch Câu lệnh là: struct cust_st { int acc_no; char cust_nm[30]; float bal; }; struct tran_st { int acc_no; char trantype; float amt; }; Hiển thị danh mục để thực thao tác khác dựa lựa chọn người dùng Câu lệnh là: while(choice != 4) { clrscr(); printf("\nSelect choice from menu\n\n1 Accept customer details\n2 Record Withdrawal/Deposit Quản lý tập tin 305 transaction\n3 Print Low Balance Report\n4 Exit\n\nEnter choice: "); scanf(" %d", &choice); } Gọi hàm tương ứng dựa vào lựa chọn người dùng Câu lệnh là: if(choice == 1) addcust(); else if(choice == 2) rectran(); else if(choice == 3) prnlowbal(); Trong hàm thêm chi tiết khách hàng, định nghĩa trỏ tập tin để kết hợp với tập tin customer Khai báo biến cấu trúc để nhập liệu khách hàng Câu lệnh là: FILE *fp; struct cust_st custdata; Mở tập tin customer theo chế độ append để thêm mẫu tin Xác nhận thao tác mở tập tin thực Câu lệnh là: if((fp = fopen("customer", "a+")) == NULL) { printf("\nERROR opening customer file"); getch(); return; } Nhập liệu khách hàng vào biến cấu trúc ghi liệu vào tập tin customer Câu lệnh là: fwrite(&custdata, sizeof(struct cust_st), 1, fp); Đóng tập tin customer sau nhập liệu Câu lệnh là: fclose(fp); Trong hàm dùng để ghi giao dịch, định nghĩa biến trỏ để trỏ đến tập tin customer tập tin trans Và định nghĩa biến cấu trúc để nhập vào liệu giao dịch đọc liệu khách hàng Câu lệnh là: FILE *fp1, *fp2; struct cust_st custdata; struct tran_st trandata; Mở hai tập tin theo chế độ thích hợp Tập tin customer phải mở để đọc cập nhật, tập tin trans phải cho phép thêm mẫu tin Câu lệnh là: if((fp1=fopen("customer", "r+w"))==NULL) { printf("\nERROR opening customer file"); getch(); return; } 306 Lập trình C if((fp2 = fopen("trans", "a+")) == NULL) { printf("\nERROR opening transaction file"); getch(); return; } 10.Nhập vào số tài khoản cho giao dịch bảo đảm tồn tập tin customer Câu lệnh là: while((fread(&custdata, size, 1, fp1)) == && found == 'n') { if(custdata.acc_no == trandata.acc_no) { found='y'; break; } } 11.Để bảo đảm nhập vào kiểu giao dịch hợp lệ, câu lệnh là: if(trandata.trantype!='D' && trandata.trantype!='d' && trandata.trantype!='W' && trandata.trantype!='w') printf("\t\tInvalid transaction type, please reenter"); 12.Đối với giao dịch rút tiền, phải bảo đảm số tiền rút phải sẳn có tài khoản khách hàng Nếu sẳn có, cập nhật số tiền lại tài khoản Cũng cần cập nhật số tiền tài khoản cho giao dịch gửi tiền Câu lệnh là: if(trandata.trantype=='W' || trandata.trantype=='w') { if(trandata.amt>custdata.bal) printf("\nAccount balance is %.2f Please reenter withdrawal amount.", custdata.bal); else { custdata.bal-=trandata.amt; } } else { custdata.bal+=trandata.amt; } 13.Ghi mẫu tin chứa giao dịch vào tập tin trans cập nhật mẫu tin khách hàng tập tin customer Câu lệnh là: fwrite(&trandata, sizeof(struct tran_st), 1, fp2); fseek(fp1, (long)(-size), 1); fwrite(&custdata, size, 1, fp1); Quản lý tập tin 307 Lưu ý suốt trình kiểm tra số tài khoản khách hàng, mẫu tin đọc cuối khách hàng thực giao dịch Vì vậy, trỏ tập tin tập tin customer phải nằm cuối mẫu tin cần cập nhật Con trỏ tập tin đặt lại vị trí đầu mẫu tin sử dụng hàm fseek() Ở size biến số nguyên chứa kích cở cấu trúc cho liệu khách hàng 14.Đóng hai tập tin sau nhập giao dịch Câu lệnh là: fclose(fp1); fclose(fp2); 15.Trong hàm hiển thị tài khoản có số vốn ít, định nghĩa trỏ tập tin để kết hợp với tập tin customer Khai báo biến cấu trúc để đọc liệu khách hàng Câu lệnh là: FILE *fp; struct cust_st custdata; 16.Sau mở tập tin chế độ đọc, đọc mẩu tin khách hàng kiểm tra số vốn Nếu 250, in mẩu tin Câu lệnh là: while((fread(&custdata, sizeof(struct cust_st), 1, fp))==1) { if(custdata.bal custdata.bal) printf("\nAccount balance is %.2f Please reenter withdrawal amount.", custdata.bal); else { custdata.bal -= trandata.amt; val_flag = 'y'; } } else { custdata.bal += trandata.amt; val_flag = 'y'; } } fwrite(&trandata, sizeof(struct tran_st), 1, fp2); fseek(fp1, (long)(-size), 1); fwrite(&custdata, size, 1, fp1); } else printf("\nThis account number does not exist"); printf("\nRecord another transaction? (y/n): "); scanf(" %c", &flag); } fclose(fp1); fclose(fp2); } prnlowbal() { FILE *fp; struct cust_st custdata; char flag = 'n'; clrscr(); if((fp = fopen("customer", "r")) == NULL) { printf("\nERROR opening customer file"); getch(); return; } printf("\nReport on account balances below 250\n\n"); while((fread(&custdata, sizeof(struct cust_st), 1, fp)) == 1) { if(custdata.bal < 250) { flag = 'y'; printf("\n%d\t%s\t%.2f", custdata.acc_no, custdata.cust_nm, custdata.bal); } } if(flag == 'n') Quản lý tập tin 311 printf("\nNo account balances found below 250"); getch(); fclose(fp); } Để xem kết quả, thực bước sau đây: Lưu tập tin với tên filesI.C Biên dịch tập tin, filesI.C Thực thi chương trình, filesI.C Trở chương trình soạn thảo Kết xuất chương trình sau: Select choice from menu Accept customer details Record Withdrawal/Deposit transaction Print Low Balance Report Exit Enter choice: Một mẫu kết xuất hàm thêm vào chi tiết khách hàng sau: Enter Account number: 123 Enter Customer Name: E.Wilson Enter Account Balance: 2000 Add another? (y/n): Một mẫu kết xuất hàm thêm vào chi tiết giao dịch sau: Enter Account number: 123 Enter Transaction type (D/W): W Enter amount: 1000 Record another transaction? (y/n): Một mẫu kết xuất hàm hiển thị báo cáo tài khoản có vốn thấp sau: Report on account balances below 250 104 312 Jones 200 Lập trình C 113 120 Quản lý tập tin Sharon 150 Paula 200 313 Phần II – Trong thời gian 30 phút kế tiếp: Viết chương trình C để hiển thị khác hai tập tin nhập vào đối số dòng lệnh Với khác nhau, hiển thị vị trí tìm thấy khác ký tự hai tập tin vị trí Cũng cần phải bảo đảm người sử dụng nhập vào số lượng đối số hợp lệ Cuối cùng, hiển thị tổng số khác tìm thấy Để làm điều này, a Khai báo biến argv argc để nhận vào đối số từ dòng lệnh b Khai báo trỏ trỏ đến hai tập tin c Kiểm tra tính hợp lệ argc để bảo đảm nhập số đối số d Mở hai tập tin chế độ đọc e Đặt vòng lặp để đọc ký tự từ hai tập tin đến cuối hai tập tin f Nếu ký tự khác nhau, hiển thị chúng với vị trí chúng Tăng số đếm khác lên g Nếu đến cuối tập tin, in ký tự lại tập tin khác biệt h Kiểm tra số đếm khác để hiển thị thơng báo thích hợp i Đóng hai tập tin 314 Lập trình C Bài tập tự làm Viết chương trình C để chép nội dung tập tin vào tập tin khác loại trừ từ a, an, the Viết chương trình C để nhập vào hai chuỗi số Lưu trữ chuỗi hai tập tin riêng biệt Sắp xếp chuỗi tập tin Trộn hai chuỗi vào một, xếp lưu lại chuỗi kết vào tập tin Hiển thị nội dung tập tin Quản lý tập tin 315 ... Những c? ??u tr? ?c cho vi? ?c rẽ nhánh c? ??u tr? ?c chọn lựa, c? ??u tr? ?c điều kiện hay rẽ nhánh Những c? ??u tr? ?c đề c? ??p chi tiết sau đây:  C? ??u tr? ?c IF (Nếu) C? ??u tr? ?c chọn lựa c? ??u tr? ?c ‘IF’ Ðể hiểu c? ??u tr? ?c xem... h? ?c ch? ?c chúng C? ?c tốn tử ngơi ++ Ch? ?c Lấy đối số Tăng giá trị Giảm giá trị C? ?c tốn tử hai ngơi + * % / ^ Ch? ?c Cộng Trừ Nhân Lấy phần dư Chia Lấy số mũ Bảng 2.2: C? ?c toán tử số h? ?c ch? ?c  C? ?c. .. lư? ?c qua mã sau: IF khách hàng mua 100 giảm giá 10% C? ??u tr? ?c dùng c? ?u lệnh IF Hình th? ?c chung cho c? ?u lệnh IF (c? ??u tr? ?c IF) sau: IF Điều kiện C? ?c câu lệnh Phần thân c? ??u tr? ?c IF END IF Một c? ??u

Ngày đăng: 23/12/2022, 11:09

w