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

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

284 261 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 2,26 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 hoà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 đư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 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 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 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; } 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 lại giáo trình Lập trình C 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 trao quyền điều khiển cho hàm main() chương trình C thực thi Tên hàm theo sau cặp dấu ngoặc đơn () Trong dấu ngoặc đơn có hay 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, toà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, toàn chương trình 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 Other Usergenerated Object File 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 toá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 toá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 toá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 toá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 toá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 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 C = A + B Lập trình C 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 hoà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õ toá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 toá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 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 (Đúng /Sai) Hàm _ mở stream để dùng liên kết tập tin với stream 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 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 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 hoàn toà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 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 [...]... Không c n thiết phải mô tả từng bư c của chương trình trong lưu đồ mà chỉ c n c c bư c chính và c ý nghĩa c n thiết Chúng ta tuân theo những c u tr c tuần tự, mà trong đó luồng th c thi chương trình đi qua tất c c c chỉ thị bắt đầu từ chỉ thị đầu tiên Chúng ta c thể bắt gặp c c điều kiện trong chương trình, dựa trên c c điều kiện này hướng th c thi c a chương trình c thể rẽ nhánh Những c u tr c cho... vi c th c thi c thể đư c phân theo c c nhánh rẽ kh c nhau C u tr c lệnh như vậy gọi là c u tr c chọn lựa, điều kiện hay c u tr c rẽ nhánh  C u tr c chọn c bản là c u tr c “IF”  C u tr c IF …ELSE giúp lập trình viên chỉ làm so sánh đơn và sau đó th c thi c c bư c tùy theo kết quả c a phép so sánh là True (đúng) hay False (sai)  C u tr c IF lồng nhau là c u lệnh IF này nằm trong c u lệnh IF kh c. .. một trình biên dịch nhận diện 31 con số c ý nghĩa đầu tiên cho một tên định danh thì c c câu sau sẽ hiển thị c ng một kết quả: Đây là biến testing testing Đây là biến testing testing testing C c định danh trong C có phân biệt chữ hoa và chữ thường, c thể, arena thì kh c ARENA 2.3.1 C c nguyên t c cho vi c chỉ đặt tên C c quy t c đặt tên biến kh c nhau tuỳ ngôn ngữ lập trình Tuy nhiên, vài quy ư c chuẩn... Ch c năng Lấy đối số Tăng một giá trị Giảm một giá trị C c toán tử hai ngôi + * % / ^ Ch c năng 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 và ch c năng  C c toán tử hai ngôi Trong C, c c toán tử hai ngôi c ch c năng giống như trong c c ngôn ngữ kh c Những toán tử như +, -, * và / c thể đư c áp dụng cho hầu hết kiểu dữ liệu c sẵn trong C Khi toán tử / đư c áp dụng cho... tiên c a định danh phải là một chữ c i hay một dấu gạch dưới ( _ ) C c ký tự tiếp theo c thể là c c chữ c i, c c con số hay dấu gạch dưới Arena, s_count, marks40, và class_one là những định danh đúng C c ví dụ về c c định danh sai là 1sttest, oh!god, và start end C c định danh c thể c chiều dài tuỳ ý, nhưng số ký tự trong một biến đư c nhận diện bởi trình biên dịch thì thay đổi theo trình biên dịch... chảy (flow_lines) Những khái niệm c bản c a ngôn ngữ C 19 Tóm tắt bài h c  Phần mềm là một tập hợp c c chương trình  Một chương trình là một tập hợp c c chỉ thị (lệnh)  Những đoạn mã lệnh là c sở cho bất kỳ một chương trình C nào  Ngôn ngữ C có 32 từ khóa  C c bư c cần thiết để giải quyết một bài toán là nghiên c u chi tiết bài toán đó, thu thập thông tin thích hợp, xử lý thông tin và đi đến... con số c thể, gọi là địa chỉ bộ nhớ C c ngôn ngữ lập trình hiện đại cho phép chúng ta sử dụng c c tên tượng trưng gọi là biến (variable), chỉ đến một vùng bộ nhớ nơi mà c c giá trị c thể đư c lưu trữ Kiểu dữ liệu quyết định tổng số bộ nhớ đư c chỉ định Những tên đư c gán cho biến giúp chúng ta sử dụng lại dữ liệu khi c n đến Chúng ta đã quen với c ch sử dụng c c ký tự đại diện trong một c ng th c. .. chúng ta c u tr c IF…ELSE Dùng c u tr c này sẽ hiệu quả và tốt hơn để giải quyết vấn đề C u tr c IF …ELSE giúp lập trình viên chỉ làm một phép so sánh và sau đó th c thi c c bư c tùy theo kết quả c a phép so sánh là True (đúng) hay False (sai) C u tr c chung c a c u lệnh IF…ELSE như sau: IF Điều kiện 12 Lập trình c bản C Câu lệnh 1 ELSE C u lệnh 2 END IF C pháp c a c u tr c if…else trong C như sau:... biến Dạng th c chung cho vi c khai báo một biến: Kiểu dữ liệu (Tên biến) Kiểu dữ liệu thường đư c dùng trong c c công c lập trình c thể đư c phân chia thành: 1 Kiểu dữ liệu số - lưu trữ giá trị số 4 Lập trình c bản C 2 Kiểu dữ liệu ký tự – lưu trữ thông tin mô tả Những kiểu dữ liệu này c thể c tên kh c nhau trong c c ngôn ngữ lập trình kh c nhau Ví dụ, một kiểu dữ liệu số đư c gọi trong C là int trong... kh c nhau giữa biến và hằng (constants)  Nắm vững và sử dụng c c kiểu dữ liệu kh c nhau trong chương trình C  Hiểu và sử dụng c c toán tử số h c Giới thiệu Bất c chương trình ứng dụng nào c n xử lý dữ liệu c ng c n c nơi để lưu trữ tạm thời dữ liệu ấy Nơi mà dữ liệu đư c lưu trữ gọi là bộ nhớ Những vị trí kh c nhau trong bộ nhớ c thể đư c x c định bởi c c địa chỉ duy nhất Những ngôn ngữ lập trình ... 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... th c thi chương trình rẽ nhánh 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... số h c ch c chúng C c toán tử ++ Ch c Lấy đối số Tăng giá trị Giảm giá trị C c toán tử hai + * % / ^ 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 toán

Ngày đăng: 04/12/2015, 13:43

TỪ KHÓA LIÊN QUAN

w