1. Trang chủ
  2. » Cao đẳng - Đại học

Bài giảng tin học cơ sở 2

107 18 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 107
Dung lượng 1,01 MB

Nội dung

Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT HỌ VI N TH NG TIN V TRU NG NGH N TH NG ƢU H NH VI N TH NG  I GI NG TIN HỌ Ơ SỞ HO PH TR H: hoa CNTT1 H I N: TS PH N THỊ H H N i – Năm 2016 Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT M CL C Contents GIỚI THIỆU CHUNG 1.1 Ngơn ngữ lập trình 1.2 Thuật toán (Algorithm) 1.3 Sự đời phát triển ngôn ngữ C MỘT SỐ KIẾN THỨC CƠ SỞ 2.1 Bộ kí tự, từ khóa,tên 2.1.1 Bộ kí tự C 2.1.2 Các từ khoá (Keywords) 2.1.3 Tên cách đặt tên 2.1.4 Lời giải thích 2.2 Cấu trúc chƣơng trình C 2.2.1 Cấu trúc tổng quát chƣơng trình C 2.2.2 Các bƣớc viết chƣơng trình 2.2.3 Chƣơng trình đơn giản C 11 2.3 Các kiểu liệu sở 13 2.4 Biến,hằng, câu lệnh phép toán 14 2.4.1 Biến 14 2.4.2 Câu lệnh 15 2.4.3 Các phép toán 15 2.5 Thủ tục vào chuẩn 19 2.5.1 Vào ra getchar(), putchar() 19 2.5.2 In theo khuôn dạng - Printf 20 2.5.3 Nhập vào có khn dạng - scanf 21 2.5.4 Thâm nhập vào thƣ viện chuẩn 24 CÁC CẤU TRÚC LỆNH ĐIỀU KHIỂN 27 3.1 Câu lệnh khối 27 3.2 Cấu trúc lệnh if 27 3.3 Cấu trúc lệnh switch 29 3.4 Vòng lặp for 30 3.5 Vịng lặp khơng xác định while Cú pháp: 32 3.6 Vịng lặp khơng xác định while Cú pháp: 33 3.7 Lệnh break lệnh Continue 35 HÀM VÀ PHẠM VI HOẠT ĐỘNG CỦA BIẾN 35 4.1 Tính chất hàm 35 4.2 Khai báo, thiết kế hàm 36 4.3 Phƣơng pháp truyền tham biến cho hàm 39 4.4 Biến địa phƣơng, biến toàn cục 41 4.5 Tính đệ qui hàm 44 CẤU TRÚC DỮ LIỆU KIỂU MẢNG (Array) 47 5.1 Khái niệm mảng 47 5.2 Các thao tác mảng 50 Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT 5.3 Mảng đối hàm 53 5.4 Xâu kí tự (string) 56 5.5 Kiểu liệu Con trỏ 61 5.5.1 Con trỏ địa 62 5.5.2Con trỏ đối hàm 64 5.5.3 Con trỏ mảng 64 5.5.4Cấp phát nhớ cho trỏ 68 5.6 Mảng trỏ 82 5.7 Đối hàm main() 83 5.8 Con trỏ hàm 85 Dữ liệu kiều tệp (FILE) 87 6.1 Thâm nhập vào thƣ viện chuẩn 87 6.2 Thâm nhập tệp 91 6.3 Xử lý lỗi - Stderr Exit 94 6.4 Đƣa vào đƣa dòng 95 6.5 Đọc ghi file fread, fwrite 96 6.6 Đọc ghi file fscanf, fprintf 99 6.7 Một số hàm thông dụng khác 103 Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT NGÔN NGỮ LẬP TRÌNH C MỞ ĐẦU Tin học sở mơn học quan trọng chƣơng trình giáo dục đại cƣơng bậc đại học, môn bắt buộc tất sinh viên Học Viện CNBCVT Tài liệu nhằm cung cấp cho sinh viên kiến thức tổng quan ngôn ngữ lập trình C Qua học viên nắm đƣợc khái niệm lập trình thiết lập đƣợc số chƣơng trình đơn giản phục vụ cho khoa học kĩ thuật đặc biệt làm công cụ để phục vụ cho môn học tin học viễn thông mà em học Chúng biên soạn giảng cho tất sinh viên ngành kỹ thuật bậc đại học với mục đích giúp cho sinh viên có tài liệu học cần thiết cho môn học để đáp ứng nhu cầu ngày cao tƣ liệu dạy học tin học GIỚI THIỆU CHUNG 1.1 Ngôn ngữ lập trình phần “Tin học sở 1” tìm hiểu Winword Excel, phần mềm ứng dụng công việc soạn thảo văn làm bảng tính tốn đƣợc Đặc điểm phần mềm ứng dụng định rõ phạm vi ứng dụng cung cấp nhiều tốt công cụ để hồn thành chức Tuy nhiên ngƣời sử dụng hầu nhƣ bị bó buộc phạm vi quy định phần mềm Chẳng hạn ta khó dùng Excel để giải tốn gồm nhiều bƣớc tính tốn nhƣ tính nghiệm gần phƣơng trình vi phân hay giải hệ phƣơng trình tuyến tính Mặc dầu phần mềm ứng dụng ngày nhiều thuộc đủ lĩnh vực nhƣ xây dựng, thiết kế, hội họa, âm nhạc nhƣng bao trùm hết vấn đề nẩy sinh thực tế vô phong phú Rõ ràng chuyên gia tin học mà ngƣời sử dụng, cán kỹ thuật, cần đến phần mềm uyển chuyển mềm dẻo hơn, có khả thực đƣợc nhiều thị ngƣời sử dụng để giúp họ giải cơng việc đa dạng máy tính Phần mềm có tính chất nhƣ đƣợc gọi ngơn ngữ lập trình Chính xác ngơn ngữ lập trình ngôn ngữ nhân tạo bao gồm tập từ vựng (mà ta gọi từ khóa để phân biệt với ngôn ngữ thông thƣờng) tập quy tắc (gọi Syntax - cú pháp) mà ta sử dụng để biên soạn lệnh cho máy tính thực Trong Nhƣ ta biết, nhớ máy tính biểu diễn số Vì ngơn ngữ mà máy hiểu trực tiếp ngơn ngữ lệnh dãy số nhị phân Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT đƣợc gọi ngôn ngữ máy (machine language) Mọi ngôn ngữ khác phải thông dịch biên dịch sang ngôn ngữ máy (Interpreter - thông dịch cho chạy lệnh Compiler - biên dịch thành chƣơng trình ngơn ngữ máy hồn chỉnh, chạy nhanh thơng dịch) Có nhiều loại ngơn ngữ lập trình, hầu hết nhà khoa học máy tính cho khơng có ngơn ngữ độc có đủ khả phục vụ cho yêu cầu tất lập trình viên Theo truyền thống, ngơn ngữ lập trình đƣợc phân làm loại: ngôn ngữ bậc thấp ngôn ngữ bậc cao Ngơn ngữ lập trình bậc thấp (low-level programming language): Ngơn ngữ máy, hợp ngữ (assembler: chƣơng trình dịch hợp ngữ, assembly language: ngôn ngữ hợp ngữ) Hợp ngữ ngơn ngữ lập trình bậc thấp từ ngơn ngữ máy Nó khác với ngơn ngữ máy việc sử dụng mã biểu thị chức mà máy thực Lập trình hợp ngữ phiền tối: có đến vài tá dịng mã cần thiết để thực phép cộng số Các chƣơng trình hợp ngữ khó viết; chúng khơng có cấu trúc modun hóa rõ ràng Chƣơng trình hợp ngữ khơng dễ chuyển từ loại máy tính sang loại máy tính khác Các chƣơng trình đƣợc viết theo tập lệnh đặc thù loại vi xử lý định Lập trình hợp ngữ mã gọn chạy nhanh Do hầu hết chƣơng trình điều hành hệ thống đƣợc viết hợp ngữ Tuy nhiên phức tạp công việc lập trình nên hãng sản xuất phần mềm chun dụng thích viết chƣơng trình ngơn ngữ C (do Bell Laboratories hãng AT&T xây dựng) loại ngôn ngữ kết hợp đƣợc cấu trúc ngôn ngữ bậc cao đại với tốc độ tính hiệu hợp ngữ cách cho phép nhúng lệnh hợp ngữ vào chƣơng trình Ngơn ngữ lập trình bậc cao: Các ngơn ngữ lập trình bậc cao nhƣ Basic, Pascal, C, C++ cho phép lập trình viên diễn đạt chƣơng trình từ khóa câu lệnh gần giống với ngơn ngữ tự nhiên Các ngôn ngữ dƣợc gọi “bậc cao” chúng giải phóng lập trình viên khỏi quan tâm lệnh đƣợc máy tính tiến hành nhƣ nào, phận thông dịch biên dịch chƣơng trình giải chi tiết mã nguồn đƣợc biến đổi thành ngôn ngữ máy Một câu lệnh ngôn ngữ bậc cao tƣơng ứng với số lệnh ngôn ngữ máy, bạn thảo chƣơng theo ngơn ngữ bậc cao nhanh so với bậc thấp Tuy nhiên bạn phải trả giá cho việc Chƣơng trình ngơn ngữ máy đƣợc dịch từ mã nguồn đƣợc viết ngôn ngữ bậc cao chứa nhiều chi tiết thừa, tốc độ chạy chậm nhiều so với chƣơng trình viết hợp ngữ Thơng thƣờng trình biên dịch đặc trƣng thƣờng sinh số lệnh mã máy gấp lần hay nhiều số lệnh cần thiết viết mã máy Một cách phân loại khác ngơn ngữ lập trình: Ngơn ngữ thủ tục (Procedural Language) ngôn ngữ khai báo (Declarative Language) Ngơn ngữ thủ tục: Lập trình viên phải xác định thủ tục mà máy tính tuân theo để Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT hoàn thành cơng việc định trƣớc Thí dụ: Basic, C, Fortran, Ngôn ngữ khai báo: Ngôn ngữ định nghĩa loạt yếu tố quan hệ, đồng thời cho phép bạn tiến hành xếp hàng kết xác định Thí dụ: Prolog, SQL (Structured Query Language) Điều then chốt việc lập trình chun dụng mơdun hóa ngơn ngữ - phát triển cho nhiệm vụ lập trình phân phối đƣợc cho thành viên nhóm lập trình, kết đạt đƣợc phận khác hoạt động phù hợp với nhiệm vụ ngƣời hoàn thành Ngơn ngữ lập trình mơdun, nhƣ Module-2 ngơn ngữ hƣớng đối tƣợng nhƣ C++, cho phép lập trình viên tập trung vào việc lập mã, biên dịch gỡ rối module chƣơng trình riêng biệt, đồng thời cho chạy (kiểm tra thử) riêng module Khi module riêng chạy tốt chúng đƣợc liên kết với mà khơng gây trục trặc 1.2 Thuật tốn (Algorithm) Thuật ngữ Algorithm đƣợc dịch tiếng Việt thuật toán, thuật giải giải thuật Ở dùng từ thuật toán cách gọi quen thuộc với nhiều ngƣời Thuật toán dãy hữu hạn bƣớc, bƣớc mơ tả xác phép tốn hành động cần thực hiện, để giải vấn đề Để hiểu đầy đủ ý nghĩa khái niệm thuật toán, nêu đặc trƣng sau thuật tốn: Input Mỗi thuật tốn thƣờng có số liệu vào Output Mỗi thuật tốn thƣờng có số liệu Tính xác định (Definiteness) Mỗi bƣớc đƣợc mơ tả xác, có cách hiểu đủ đơn giản để thực đƣợc Tính dừng (Finiteness) Thuật tốn phải dừng sau số hữu hạn bƣớc thực Tính hiệu (Effectiveness) Các phép toán bƣớc phải đủ đơn giản để thực đƣợc Tính tổng qt (Generalness) Thuật tốn phải có tính tổng qt, áp dụng cho lớp đối tƣợng Ví dụ: Thuật tốn Euclid: Tìm ước số chung lớn hai số tự nhiên m,n Input: m,n nguyên dương Output: g ước số chung lớn m n Phương pháp: r:= m mod n Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT Nếu r=0 g:=n Ngược lại (r>0) m:=n; n:=r quay lại bước 1.3 Sự đời phát triển ngôn ngữ C Năm 1970 Ken Thompson sáng tạo ngôn ngữ B dùng môi trƣờng hệ điều hành UNIX máy điện toán DEC PD-7 B chữ tắt BCPL (Basic Combined Progamming Language) Martin Richards viết Năm 1972 Dennis Ritchie hãng Bell Laboratories (và Ken Thompson) sáng tạo nên ngôn ngữ C nhằm tăng hiệu cho ngôn ngữ B Lúc đầu ngôn ngữ C không đƣợc ngƣời ƣa dùng Nhƣng sau D.Ritchie cho xuất "The C Programming Language" (“Ngôn ngữ lập trình C”) ngơn ngữ C đƣợc ý đƣợc sử dụng rộng rãi Ngƣời ta dùng C để viết hệ điều hành đa nhiệm UNIX, O/S ngôn ngữ Dbase C đƣợc cải tiến qua nhiều phiên bản: trình biên dịch Turbo C từ phiên đến phiên 5, Microsoft C từ phiên đến phiên Hiện nay, C lại đƣợc phát triển để thành C++ với trình biên dịch: Borland C++, Visual C++ Turbo C++ Mặc dù có nhiều ngơn ngữ lập trình mới, nhƣng C ngơn ngữ lập trình đƣợc ƣa chuộng C đƣợc ứng dụng để viết phần mềm nhiều lĩnh vực, đặc biệt khoa học kỹ thuật MỘT SỐ KIẾN THỨC CƠ SỞ 2.1 Bộ kí tự, từ khóa,tên 2.1.1 Bộ kí tự C Mọi ngôn ngữ đƣợc xây dựng kí tự (các chữ, kí hiệu) Đối với ngơn ngữ C sử dụng kí tự sau: Tập chữ in hoa: A, B, C, D, , Z Tập chữ in thƣờng: a, b, c, d, , z Tập chữ số: 0, 1, 2, 3, , Các dấu chấm câu: , ; : / ? [ ] { } ! @ # $ ^ & * ( ) + = - < > " Các kí tự khơng nhìn thấy: dấu trống (Space), dấu Tab, dấu xuống dòng (Enter), Dấu gạch dƣới _ 2.1.2 Các từ khoá (Keywords) Từ khoá tập từ dùng riêng ngơn ngữ, từ khố mang theo ý nghĩa tác dụng riêng Từ khố khơng thể định nghĩa lại khơng thể lấy từ khố đặt tên cho đối tƣợng Dƣới bảng liệt kê từ khố thơng dụng C auto break base char continue default double else extern float for Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT goto if int long register return short sizeof static struct switch typedef union unsigned void public while volatile 2.1.3 Tên cách đặt tên Tên hay gọi định danh (identifier) dùng để gọi biến, hàm Đối với ngôn ngữ C, tên phải đƣợc khai báo trƣớc sử dụng Tên dãy kí tự liền gồm chữ cái, a z, A Z, chữ số dấu gạch dƣới (dấu gạch dƣới thƣờng dùng để liên kết thành phần tên) Tuy nhiên, tên không đƣợc bắt đầu chữ số khơng chứa kí tự đặc biệt nhƣ dấu cách, dấu tab dấu chấm câu Khơng đƣợc lấy từ khố C để đặt tên cho đối tƣợng Ví dụ cách đặt tên đúng: Delta, E_Mu_X, Function1 Ví dụ cách đặt tên sai: 2Delta: bắt đầu kí tự số E Mu_X: chứa khoảng trắng Ngôn ngữ C phân biệt chữ in hoa chữ in thƣờng, tên sau khác nhau: x X, While while, For for Do vậy, cần lƣu ý viết chƣơng trình Thơng thƣờng tên biến, hàm đƣợc đặt chữ in thƣờng, tên đƣợc đặt chữ in hoa 2.1.4 Lời giải thích Trong viết chƣơng trình, đơi cần ghi thêm số lời ghi giải thích để chƣơng trình trở nên dễ hiểu dễ đọc Lời giải thích khơng có tác dụng tạo nên mã chƣơng trình đƣợc trình dịch bỏ qua dịch chƣơng trình Phần ghi biểu nhiều dịng đƣợc đánh dấu cặp kí hiệu /* đoạn văn ghi */ 2.2 Cấu trúc chương trình C 2.2.1 Cấu trúc tổng quát chương trình C Chƣơng trình tổng qt viết ngơn ngữ C đƣợc chia thành phần, có số phần có khơng có tuỳ thuộc vào nội dung chƣơng trình ý đồ lập trình viên Phần 1: Khai báo thị đầu tệp định nghĩa sử dụng chƣơng trình Phần 2: Định nghĩa cấu trúc liệu (user type) để sử dụng viết chƣơng trình Phần 3: Khai báo biến (biến toàn cục) đƣợc sử dụng chƣơng trình Phần 4: Khai báo nguyên mẫu cho hàm (Function Ptototype) Nếu khai báo qui cách xây dựng chuyền tham biến cho hàm, compiler tự động kiểm tra nguyên mẫu Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT hàm có phù hợp với phƣơng thức xây dựng hàm hay không văn chƣơng trình Phần 5: Mơ tả chi tiết hàm, hàm đƣợc mô tả phải phù hợp với nguyên mẫu đƣợc khai báo cho hàm Phần 6: Hàm main(), hàm xác định điểm bắt đầu thực chƣơng trình điểm kết thúc thực chƣơng trình 2.2.2 Các bước viết chương trình ƣớc 1: Soạn thảo chƣơng trình (dùng Turbo ) Soạn thảo chƣơng trình giai đoạn dùng chƣơng trình soạn thảo để viết văn chƣơng trình Turbo C trang bị chƣơng trình soạn thảo, dịch thực chƣơng trình mơi trƣờng C, chƣơng trình có tên TC.EXE Bản thân TC.EXE trang bị cho ngƣời sử dụng số phím chức giống nhƣ TURBO.EXE để soạn thảo Khi ghi file văn chƣơng trình lên đĩa, TC.EXE ngầm định đặt phần mở rộng file *.C mà ta thƣờng gọi chƣơng trình nguồn (source program) Sau số phím chức TC.EXE F1 (help) : Thực chƣơng trình trợ giúp viết chƣơng trình CTRL + F1 : Thực trợ giúp nhanh soạn thảo F2 (save) : Ghi file văn chƣơng trình lên đĩa với phần mở rộng *.c CTRL + F2 : Ghi file văn chƣơng trình lên đĩa với tên khác có phần mở rộng *.c F3 : Mở file để thực soạn thảo Alt + F3 : Đóng file văn cửa sổ soạn thảo thời F4 : Dịch thực chƣơng trình gặp dịng lệnh mà vị trí bấm F4 F5 : Mở rộng thu nhỏ vùng soạn thảo hình Alt+F5 : Nhìn lại kết thực chƣơng trình lần chạy trƣớc F6 : Thay đổi cửa sổ hình soạn thảo Alt +1, 2, 3: Qui định cửa sổ hình 1, 2, trang hình F7 : Thực chƣơng trình theo chế độ dòng lệnh kể lệnh thân hàm F8 : Thực chƣơng trình theo chế độ dòng lệnh nhƣng coi lời gọi hàm lệnh F9 : Dịch chƣơng trình nguồn thành file *.OBJ CTRL + F9 : Dịch thực chƣơng trình (đồng thời tạo file *.OBJ sau Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT tạo file mã máy *.EXE) F10 : Thực chế độ thực đơn Home : Đƣa trỏ đầu dòng End : Đƣa trỏ cuối dòng PgUp : Đƣa trỏ lên phía trang hình PgDn : Đƣa trỏ xuống phía dƣới trang hình Del : Xố kí tự vị trí trỏ Back Space : Xố kí tự nằm bên trái trỏ CTRL+ PgUp : Đƣa trỏ đầu văn CTRL+ PgDn : Đƣa trỏ cuối văn Shift +  : Đánh dấu khối văn sang bên trái Shift +  : Đánh dấu khối văn sang bên phải Shift +  : Đánh dấu khối văn theo dịng lên phía Shift +  : Đánh dấu khối văn theo dịng lên phía dứới CTRL + Y : Xố dịng chứa trỏ CTRL+Q+Y : Xố tới cuối dịng kể từ vị trí trỏ CTRL +K+Y : Xố khối văn đƣợc đánh dấu trƣớc CTRL+K+C : Copy khối văn đƣợc đánh dấu tới vị trí trỏ CTRL+K+V : Chuyển khối văn đƣợc đánh dấu tới vị trí trỏ CTRL+K+W : Ghi khối đƣợc đánh dấu lên đĩa Nếu tên tệp PRN nội dung đƣợc chuyển qua máy in CTRL+K+R : Đọc tệp khác từ đĩa vào, phần đƣợc đọc coi nhƣ khối đƣợc đánh dấu CTRL +Q+F : Tìm cụm từ xuất văn CTRL+Q+A : Tìm thay cụm từ xuất văn CTRL+L : Tìm thay từ xuất văn ƣớc 2: Dịch hiệu chỉnh chƣơng trình (dùng turbo c) Chúng ta gọi chƣơng trình dịch C trực tiếp chế độ soạn thảo cách bấm phím F9 Chƣơng trình dịch có nhiệm vụ dịch chƣơng trình ngƣời sử dụng từ file chƣơng trình nguồn có phần mở rộng *.C thành tệp có phần mở rộng *.OBJ, sau liên kết tệp *.OBJ lại với để tạo nên file chƣơng trình mã máy có dạng *.COM (chƣơng trình mã máy đƣợc nén) *.EXE (chƣơng trình mã máy chƣa đƣợc nén) Quá trình liên kết đƣợc thực thơng qua trình liên kết Linker 10 Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT Điều nói lên fp trỏ tới FLLE, fopen cho trỏ tới FLLE Lƣu ý FLLE tên kiểu, nhƣ int, khơng phải cấu trúc, đƣợc cài đặt thị typedef Lời gọi tới fopen chƣơng trình fp = fopen(name, mode); Đối thứ fopen tên tệp, có dạng xâu kí tự Đối thứ hai mode, xâu kí tự cách ta định sử dụng tệp Các mốt sử dụng mở tệp là: Mode xử lý ý nghĩa “r” Mở file tồn để đọc (read only) “w” Mở file để ghi Nếu file tồn tại, nội dung bị loại bỏ để thay vào nội dung “a” “r+” “w+” Mở file để ghi đọc Nếu file tồn nội dung bị huỷ để thay vào nội dung “a+” Mở file có tạo nên file để thực đọc ghi thêm liệu vào cuối file “rb” Mở file nhị phân tồn để thực đọc “wb” Mở file nhị để ghi Nếu file tồn tại, nội dung file bị xố bỏ để ghi vào thơng tin “ab” Mở file nhị phân tồn để ghi thêm liệu vào cuối file Nếu file chƣa tồn tại, file đƣợc tạo “r + b” Mở file nhị phân cho đọc ghi Nếu file tồn nội dung bị xố bỏ thay vào nội dung “a + b” Mở file nhị phân tồn ghi thêm liệu vào cuối file Nếu file chƣa tồn file đƣợc tạo Nếu mở tệp chƣa tồn để ghi hiệu đính đƣợc tạo (nếu có thể) Mở tệp có để ghi làm cho nội dung cũ bị Cố đọc tệp chƣa có lỗi, có nguyên nhân khác tạo lỗi (giống nhƣ việc cố đọc tệp không đƣợc phép đọc) Nếu có lỗi fopen cho trỏ NULL Có nhiều phƣơng pháp để đọc ghi, dùng fgetc để đọc kí tự fputc để đƣa kí tự đơn giản nhất, fgetc cho kí tự từ tệp; cần tới trỏ tệp để xác định tệp Vậy c = fgetc(fp) đặt vào c kí tự tiếp từ tệp, đƣợc trỏ fp đặt EOF đạt tới cuối tệp fputc ngƣợc lại fgetc fputc(c, fp) 92 Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT ghi kí tự c lên tệp fp cho kết c Giống getchar putchar, getc putc macro hàm Khi chƣơng trình chạy, ba tệp đƣợc tự động mở tệp đƣợc gán trỏ tệp Ba tệp tệp vào chuẩn tệp chuẩn tệp báo lỗi chuẩn; trỏ tệp tƣơng ứng đƣợc gọi stdin, stdout stderr getchar putchar đƣợc xác định dƣới dạng getc, putc, stdin stdout nhƣ sau: #define getchar() getc(stdin) #define putchar(c) putc(c, stdout) Đối với tệp vào có khn dạng, sử dụng hàm fcanf fprintf Các hàm đồng với scanf printf trừ đối thứ trỏ tệp xác định tệp phải đọc ghi; xâu điều khiển đối thứ hai Ví dụ 6.2: Đƣa nội dung tệp thiết bị chuẩn #include void filecopy (FILE *fp); void main (agrc, agrv) /*cat: ghép nối tệp*/ int agrc; char *agrv[ ]; { FLLE *fp, *fopen(); if (agrc = = 1) /*không đối: v o chuẩn*/ filecopy(stdin); else while ( argc > 0) if((fp = fopen(*+ +argv, “r”)) = = NULL) { printf(“cat: không mở đƣợc tệp%s\ n”, *argv); break; } else { filecopy(fp); fclose(fp); } } void filecopy(FILE *fp) /*sao tệp fp lên thiết bị ra*/ { int c; 93 Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT while ((c = fgetc(fp)) ! = EOF) putc(c, stdout); } Các trỏ tệp stdin stdout đƣợc xác định trƣớc thƣ viện vào / chuẩn; chúng đƣợc dùng ở đâu có đối tƣợng kiểu FILE xuất Tuy nhiên, chúng là biến Hàm fclose hàm ngƣợc lại fopen; phá vỡ mối liên hệ trỏ tệp tên ngồi đƣợc thiết lập fopen, giải phóng trỏ tệp để dùng cho tệp khác Vì hầu hết Hệ điều hành giới hạn số tệp mở đồng thời nên ý giải phóng tệp khơng cần sử dụng 6.3 Xử lý lỗi - Stderr Exit Việc xử lý lỗi ví dụ cat khơng phải tốt tệp khơng thể thâm nhập đƣợc lý thơng báo đƣợc in cuối kết ghép nối Điều chấp nhận đƣợc thiết bị vào hình, nhƣng vấn đề xấu dự thiết bị vào tệp chƣơng trình khác thơng qua đƣờng ống Để xử lý tốt tình này, gán thêm tệp thứ hai, đƣợc gọi stderr, cho chƣơng trình theo cách nhƣ làm với stdin stdout Nếu đƣợc output đƣợc ghi lên stderr xuất hình ngƣời sử dụng thiết bị chuẩn đƣợc hƣớng theo lối khác khơng hình Ví dụ 5.3: Cải biên cat.c để viết thông báo lỗi cho tệp lỗi chuẩn #include void filecopy(FILE *fp) /*sao tệp fp lên thiết bị ra*/ { int c; while ((c = fgetc(fp)) ! = EOF) putc(c, stdout); } void main (argc, argv) /*cat: ghép nối tệp*/ int argc; char *argx[ ]; { FILE *fp, fopen(); if (argc = = 1) /*khơng có đối, thiết bị chuẩn*/ filecopy(stdin); else 94 Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT while( argc > 0) if((fp = fopen(*+ + argv, “r”)) = = NULL) { fprintf(stderr,“cat: không mở đƣợc tệp %s \ n”), *argv); exit(1); } else { filecopy(fp); fclose(fp); } exit(0); } Chƣơng trình báo lỗi theo hai cách Chẩn đoán fprintf tạo đƣợc ghi lên stderr có cách để đƣa hình ngƣời sử dụng thay bị hút đƣờng ống ghi lên tệp Chƣơng trình sử dụng hàm thƣ viện chuẩn exit để kết thúc việc thực Đối exit thích hợp cho q trình gọi tới ta kiểm tra đƣợc thực chƣơng trình có thuận buồm xi gió hay khơng chƣơng trình khác sử dụng nhƣ tiến trình Theo quy ƣớc giá trị exit cho lại báo hiệu diễn trơi chảy, cịn giá trị khác báo hiệu tình bất thƣờng 6.4 Đưa vào đưa dòng Thƣ viện chuẩn cung cấp trình fgets để đọc dịng từ tệp Lời gọi tới fgets đƣợc thực thông qua: fgets(line, MAXLINE, fp) đọc vào bảng kí tự line (kể dấu xuống dòng) từ tệp fp nhiều MAXLINE kí tự Dịng kết line đƣợc kết thúc „\ 0‟ cịn gặp cuối tệp cho NULL Để đƣa dòng, hàm fputs ghi xâu (khơng thiết chứa dấu xuống dịng) lên tệp; fputs(line, fp) line bảng kí tự, fp trỏ file Ví dụ 6.4: Chuyển nội dung tệp văn thành nội dung tệp văn khác #include #include void filecopy(char *name1, char *name2){ 95 Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT FILE *fp1, *fp2; char str[256]; int n,i; fp1 = fopen(name1,"r");fp2 = fopen(name2,"w"); if (fp1==NULL){ printf("\n File khong ton tai"); delay(2000); return; } while (fgets(str, 255, fp1)!=NULL){ fputs(str, fp2); } fclose(fp1); fclose(fp2); } void main(void){ char name1[12], name2[12]; printf("\n Nhap ten file1:"); scanf("%s",name1); printf("\n Nhap ten file2:"); scanf("%s",name2); filecopy(name1, name2); } 6.5 Đọc ghi file fread, fwrite Đối với file không đƣợc tổ chức thành dòng nhƣ file số nguyên, file số thực file cấu trúc, việc đọc ghi file thực đƣợc fgets, fputs Chúng ta dùng hàm fread(), frwite() thƣ viện chuẩn C để đọc ghi block thông tin file size_t fread (void *ptr, size_t size, size_t n, FILE *fp); fread() đọc vào trỏ ptr n phần tử phần tử có kích cỡ n byte từ tệp đƣợc trỏ trỏ file fp, hàm trả lại số phần tử size_t thực đƣợc đọc size_t fwrite (void *ptr, size_t size, size_t n, FILE *fp); fwrite() ghi n phần tử kích cỡ phần tử size byte từ trỏ ptr vào tệp đƣợc trỏ trỏ file fp Trong ví dụ sau, thực hai công việc ghi n cấu trúc sinhvien vào tệp data.dat sau sử dụng fread đọc nội dung data.dat Ví dụ 6.5: Ghi n cấu trúc sinhvien vào tệp đọc cấu trúc sinhvien từ tệp #include #include #include 96 Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT typedef struct { int ngay; int thang; int nam; } date; typedef struct { int masv; char hoten[30]; date ngaysinh; float dki; float dkii; float dtk; char xeploai[12]; } sinhvien; void Fwrite_Struct(char *); void Fread_Struct(char *); void Fwrite_Struct(char *name){ sinhvien sv; FILE *fp;char c='y'; float t;clrscr(); fp=fopen(name,"w"); if(fp==NULL){ printf("\n Khong tao duoc tep"); delay(2000); return; } while (c) { printf("\n Ma sinh vien:"); scanf("%d",&sv.masv); printf("\n Ho va ten:");fflush(stdin);gets(sv.hoten); printf("\n Ngay sinh:");scanf("%d", &(sv.ngaysinh.ngay)); printf("\n Thang sinh:");scanf("%d", &(sv.ngaysinh.thang)); printf("\n Nam sinh:");scanf("%d", &(sv.ngaysinh.nam)); printf("\n Diem ky i:");scanf("%f", &t);sv.dki = t; printf("\n Diem ky ii:");scanf("%f", &t);sv.dkii = t; (sv.dtk) = ((sv.dki) + (sv.dkii))/2; 97 Phan Thị Hà-Khoa CNTT1-Học viện CNBCVT printf("\n Diem tong ket:%6.2f",sv.dtk); if ( (sv.dtk)>=8.5) strcpy(sv.xeploai, "Gioi"); else if((sv.dtk)>=7.0 && (sv.dtk)< 8.5 ) strcpy(sv.xeploai, "Kha"); else if((sv.dtk)>=5.0 && (sv.dtk)< 7.0 ) strcpy(sv.xeploai, "Trung binh"); else strcpy(sv.xeploai, "Yeu"); printf("\n Xep loai sinh vien:%s", sv.xeploai); fwrite(&sv,sizeof(sinhvien), 1, fp); printf("\n\n Tiep tuc (Y/N):"); c=getch(); if( tolower(c)=='n') break; else clrscr(); } fclose(fp); } void Fread_Struct(char *name){ sinhvien sv; FILE *fp;long int n, i=0; fp=fopen(name,"r"); if(fp==NULL){ printf("\n Khong tao duoc tep"); delay(2000); return; } clrscr(); /* Tính độ dài file */ n=filelength(fileno(fp))/sizeof(sinhvien); while (i

Ngày đăng: 26/03/2022, 23:01

HÌNH ẢNH LIÊN QUAN

Bi ến kiểu char có kích cỡ 1 byte dùng để biểu diễ n1 kí tự trong bảng mã ASCII, thực ch ất là số nguyên không dấu có giá trị từ0 đến 255 - Bài giảng tin học cơ sở 2
i ến kiểu char có kích cỡ 1 byte dùng để biểu diễ n1 kí tự trong bảng mã ASCII, thực ch ất là số nguyên không dấu có giá trị từ0 đến 255 (Trang 13)
Bảng tổng hợp thứ tự ƣu tiên tính toán các phép toán số học và so sánh - Bài giảng tin học cơ sở 2
Bảng t ổng hợp thứ tự ƣu tiên tính toán các phép toán số học và so sánh (Trang 19)

TỪ KHÓA LIÊN QUAN