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

112 1.3K 17
Giáo trình ngôn ngữ lập trình C

Đ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

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

Giíi thiƯu Tin häc lµ mét ngµnh khoa häc mịi nhọn phát triển nhanh chóng vài chục năm lại ngày mở rộng lĩnh vực nghiên cứu, ứng dụng mặt đời sống xà hội Ngôn ngữ lập trình loại công cụ giúp ngời thể vấn đề thực tế lên máy tính cách hữu hiệu Với phát triển tin học, ngôn ngữ lập trình dần tiến hoá để đáp ứng thách thức thực tế Khoảng cuối năm 1960 đầu 1970 xuất nhu cầu cần có ngôn ngữ bậc cao để hỗ trợ cho nhà tin học việc xây dựng phần mềm hệ thống, hệ điều hành Ngôn ngữ C đời từ đó, đà đợc phát triển phòng thí nghiệm Bell Đến năm 1978, giáo trình " Ngôn ngữ lập trình C " tác giả ngôn ngữ Dennish Ritchie B.W Kernighan viết, đà đợc xuất phổ biến rộng rÃi C ngôn ngữ lập trình vạn Ngoài việc C đợc dùng để viết hệ điều hành UNIX, ngời ta nhanh chóng nhận søc m¹nh cđa C viƯc xư lý cho vấn đề đại tin học C không gắn với hệ điều hành hay máy nào, đà đợc gọi " ngôn ngữ lập trình hệ thống" đợc dùng cho việc viết hệ điều hành, tiện lợi cho việc viết chơng trình xử lý số, xử lý văn sở liệu Và tìm hiểu giới ngôn ngữ C từ khái niệm ban đầu Hà nội tháng 11 năm 1997 Nguyn Hu Tun Chơng khái niệm 1.1 Tập ký tự dùng ngôn ngữ C : Mọi ngôn ngữ lập trình đợc xây dựng từ ký tự Các ký tự đợc nhóm lại theo nhiều cách khác để tạo nên từ Các từ lại đợc liên kết với theo qui tắc để tạo nên câu lệnh Một chơng trình bao gồm nhiều câu lệnh thể thuật toán để giải toán Ngôn ngữ C đợc xây dựng ký tự sau : 26 chữ hoa : A B C Z 26 chữ thờng : a b c z 10 chữ số : Các ký hiƯu to¸n häc : + - * / = ( ) Ký tự gạch nối : _ Các ký tù kh¸c : , : ; [ ] {} ! \ & % # $ DÊu c¸ch (space) dùng để tách từ Ví dụ chữ VIET NAM cã ký tù, cßn VIETNAM chØ cã ký tự Chú ý : Khi viết chơng trình, ta không đợc sử dụng ký tự khác ký tự Ví dụ nh lập chơng trình giải phơng trình bậc hai ax2 +bx+c=0 , ta cÇn tÝnh biƯt thøc Delta ∆= b2 - 4ac, ngôn ngữ C không cho phép dùng ký tự , ta phải dùng ký hiệu khác để thay 1.2 Từ khoá : Từ khoá từ đợc sử dụng để khai báo kiểu liệu, để viết toán tử câu lệnh Bảng dới liệt kê từ khoá TURBO C : asm break case cdecl char const continue default double else enum extern far float for goto huge if int interrupt long near pascal register return short signed sizeof static struct switch tipedef union unsigned void volatile while ý nghĩa cách sử dụng từ khoá đợc đề cập sau này, ta cần ý : - Không đợc dùng từ khoá để đặt tên cho hằng, biến, mảng, hàm - Từ khoá phải đợc viết chữ thờng, ví dụ : viết từ khoá khai báo kiểu nguyên int INT 1.3 Tên : Tên khái niệm quan trọng, dùng để xác định đại lợng khác chơng trình Chúng ta có tên hằng, tên biến, tên mảng, tên hàm, tên trỏ, tên tệp, tên cấu trúc, tên nhÃn, Tên đợc đặt theo qui tắc sau : Tên dÃy ký tự bao gồm chữ cái, số gạch nối Ký tự tên phải chữ gạch nối Tên không đợc trùng với khoá Độ dài cực đại tên theo mặc định 32 đợc đặt lại giá trị từ tới 32 nhờ chức : Option-Compiler-SourceIdentifier length dùng TURBO C Ví dụ : Các tên : a_1 delta x1 _step GAMA Các tên sai : 3MN m#2 f(x) te ta Y-3 Ký tự số Sư dơng ký tù # Sư dơng c¸c dÊu ( ) Trùng với từ khoá Sử dụng dấu trắng Sử dơng dÊu - Chó ý : Trong TURBO C, tªn chữ thờng chữ hoa khác ví dụ tên AB khác với ab C, ta thờng dùng chữ hoa để đặt tên cho dùng chữ thờng để đặt tên cho hầu hết cho đại lợng khác nh biến, biến mảng, hàm, cấu trúc Tuy nhiên điều bắt buộc 1.4 Kiểu liệu : Trong C sử dụng các kiểu liệu sau : 1.4.1 Kiểu ký tự (char) : Một giá trị kiểu char chiếm byte ( bit ) biểu diễn đợc ký tự thông qua bảng mà ASCII Ví dụ : Ký tù A B a b M· ASCII 048 049 050 065 066 097 098 Cã hai kiểu liệu char : kiểu signed char unsigned char KiĨu Char ( Signed char ) Unsigned char Ph¹m vi biĨu diƠn Sè ký tù KÝch th- -128 ®Õn 127 ®Õn 255 256 256 íc byte byte Ví dụ sau minh hoạ khác hai kiểu liệu : Xét đoạn chơng trình sau : char ch1; unsigned char ch2; ch1=200; ch2=200; Khi thực chất : ch1=-56; ch2=200; Nhng ch1 ch2 biểu diễn ký tự có mà 200 Phân loại ký tự : Có thể chia 256 ký tù lµm ba nhãm : Nhãm 1: Nhãm ký tự điều khiển có mà từ đến 31 Chẳng hạn ký tự mà 13 dùng để chuyển trỏ đầu dòng, ký tự 10 chuyển trỏ xuống dòng dới ( cột ) Các ký tự nhóm nói chung không hiển thị hình Nhóm : Nhóm ký tự văn có mà từ 32 đến 126 Các ký tự đợc đa hình máy in Nhóm : Nhóm ký tự đồ hoạ có mà số từ 127 đến 255 Các ký tự đ a hình nhng không in đợc ( lệnh DOS ) 1.4.2 KiĨu nguyªn : Trong C cho phÐp sư dụng số nguyên kiểu int, số nguyên dài kiểu long số nguyên không dấu kiểu unsigned Kích cỡ phạm vi biểu diễn chúng đợc bảng dới : Kiểu int unsigned int long unsigned long Phạm vi biểu diễn -32768 đến 32767 đến 65535 -2147483648 ®Õn 2147483647 ®Õn 4294967295 KÝch thíc byte byte byte byte Chó ý : Kiểu ký tự xem dạng kiểu nguyên 1.4.3 Kiểu dấu phảy động : Trong C cho phép sử dụng ba loại liệu dấu phảy động, float, double long double Kích cỡ phạm vi biểu diễn chúng đợc bảng dới : Kiểu Phạm vi biểu diễn Float Double long double Số chữ số 3.4E-38 đến 3.4E+38 1.7E-308 ®Õn 1.7E+308 3.4E-4932 ®Õn 1.1E4932 KÝch thíc cã nghÜa ®Õn 15 ®Õn 16 17 ®Õn 18 byte byte 10 byte Giải thích : Máy tính lu trữ đợc số kiểu float có giá trị tuyệt đối từ 3.4E-38 đến 3.4E+38 Các số có giá trị tuyệt đối nhỏ hơn3.4E-38 đợc xem Phạm vi biểu diễn số double đợc hiểu theo nghĩa tơng tự 1.5 Định nghĩa kiểu TYPEDEF : 1.5.1 Công dụng : Từ khoá typedef dùng để đặt tên cho kiểu liệu Tên kiểu đợc dùng để khai báo liệu sau Nên chọn tên kiểu ngắn gọn để dễ nhớ Chỉ cần thêm từ khoá typedef vào trớc khai báo ta nhận đợc tên kiểu liệu dùng tên để khai báo biến, mảng, cấu trúc, vv 1.5.2 Cách viết : Viết từ khoá typedef, sau kiểu liệu ( kiểu ), đến tên kiĨu VÝ dơ c©u lƯnh : typedef int nguyen; đặt tên kiểu int nguyen Sau ta dùng kiểu nguyen để khai báo biến, mảng int nh ví dụ sau ; nguyen x,y,a[10],b[20][30]; Tơng tự cho câu lệnh : typedef float mt50[50]; Đặt tên kiểu mảng thực chiều có 50 phần tử tên mt50 typedef int m_20_30[20][30]; Đặt tên kiểu mảng thực hai chiều có 20x30 phần tử tên m_20_30 Sau ta dùng kiểu khai báo : mt50 a,b; m_20_30 x,y; 1.6 Hằng : Hằng đại lợng mà giá trị không thay đổi trình tính toán 1.6.1 Tên : Nguyên tắc đặt tên ta đà xem xét mục 1.3 Để đặt tên hằng, ta dùng dòng lệnh sau : #define tên giá trị Ví dụ : #define MAX 1000 Lúc này, tất tên MAX chơng trình xuất sau đợc thay 1000 Vì vậy, ta thờng gọi MAX tên hằng, biểu diễn số 1000 Một ví dụ khác : #define pi 3.141593 Đặt tên cho float pi có giá trị 3.141593 1.6.2 Các loại : 1.6.2.1 Hằng int : Hằng int số nguyên có giá trị khoảng từ -32768 đến 32767 Ví dụ : #define number1 -50 #define sodem 2732 Định nghià int number1 có giá trị -50 Định nghià int sodem có giá trị 2732 Chú ý : Cần phân biệt hai 5056 5056.0 : 5056 số nguyên 5056.0 thực 1.6.2.2 Hằng long : Hằng long số nguyên có giá trị khoảng từ -2147483648 đến 2147483647 Hằng long đợc viết theo cách : 1234L 1234l ( thêm L l vào đuôi ) Một số nguyên vợt miền xác định int đợc xem long Ví dụ : #define sl 8865056L #define sl 8865056 Định nghià long sl có giá trị 8865056 Định nghià long sl có giá trị 8865056 1.6.2.3 Hằng int hệ : Hằng int hệ đợc viết theo cách 0c1c2c3 ci số nguyên dơng khoảng từ đến Hằng int hệ luôn nhận giá trị dơng Ví dụ : #define h8 0345 Định nghià int hệ có giá trị 3*8*8+4*8+5=229 1.6.2.4 Hằng int hệ 16 : Trong hƯ nµy ta sư dơng 16 ký tù : 0,1 ,9,A,B,C,D,E,F Cách viết a A b B c hc C d hc D e hc E f F Giá trị 10 11 12 13 14 15 H»ng sè hƯ 16 cã d¹ng 0xc1c2c3 hặc 0Xc1c2c3 ci số hƯ 16 VÝ dơ : #define h16 0xa5 #define h16 0xA5 #define h16 0Xa5 #define h16 0XA5 Cho ta c¸c hắng số h16 hệ 16 có giá trị nh Giá trị chúng hệ 10 : 10*16+5=165 1.6.2.5 H»ng ký tù : H»ng ký tù lµ ký tự riêng biệt đợc viết hai dấu nháy đơn, ví dụ 'a' Giá trị 'a' mà ASCII chữ a Nh giá trị cđa 'a' lµ 97 H»ng ký tù cã thĨ tham gia vào phép toán nh số nguyên khác VÝ dô : '9'-'0'=57-48=9 VÝ dô : #define kt 'a' Định nghià ký tự kt có giá trị 97 Hằng ký tự đợc viết theo cách sau : ' \c1c2c3' c1c2c3 số hệ mà giá trị mà ASCII cđa ký tù cÇn biĨu diƠn VÝ dơ : chữ a có mà hệ 10 97, đổi hƯ lµ 0141 VËy h»ng ký tù 'a' cã thể viết dới dạng '\141' Đối với vài ký tự đặc biệt ta cần sử dụng cách viết sau ( thêm dấu \ ) : Cách viết '\'' '\"' '\\' '\n' '\0' '\t' '\b' '\r' '\f' Ký tù ' " \ \n (chun dßng ) \0 ( null ) Tab Backspace CR ( đầu dòng ) LF ( sang trang ) Chú ý : Cần phân biệt h»ng ký tù '0' vµ '\0' H»ng '0' øng víi chữ số có mà ASCII 48, '\0' øng víi kýtù \0 ( thêng gäi lµ ký tù null ) cã m· ASCII lµ H»ng ký tự thực số nguyên, dùng số nguyên hệ 10 để biểu diƠn c¸c ký tù, vÝ dơ lƯnh printf("%c%c",65,66) sÏ in AB 1.6.2.5 H»ng x©u ký tù : H»ng x©u ký tự dÃy ký tự đặt hai dÊu nh¸y kÐp VÝ dơ : #define xau1 "Ha noi" #define xau2 "My name is Giang" X©u ký tự đợc lu trữ máy dới dạng bảng có phần tử ký tự riêng biệt Trình biên dịch tự động thêm ký tự null \0 vào cuối xâu ( ký tự \0 đợc xem dấu hiệu kết thúc xâu ký tự ) Chú ý : Cần phân biệt hai 'a' "a" 'a' ký tự đợc lu trữ byte, "a" xâu ký tự đợc lu trữ mảng hai phần tử : phần tử thứ chứa chữ a phần tử thứ hai chứa \0 1.7 Biến : Mỗi biến cần phải đợc khai báo trớc đa vào sử dụng Việc khai báo biến đợc thực theo mẫu sau : Kiểu liệu biến tên biến ; Ví dô : int a,b,c; long dai,mn; char kt1,kt2; float x,y double canh1, canh2; Khai báo ba biến int a,b,c Khai báo hai biến long dai mn Khai báo hai biến ký tự kt1 kt2 Khai báo hai biến float x y Khai báo hai biÕn double lµ canh1 vµ canh2 BiÕn kiĨu int nhận đợc giá trị kiểu int Các biến khác có ý nghĩa tơng tự Các biến kiểu char chứa đợc ký tự Để lu trữ đợc xâu ký tự cần sử dụng mảng kiểu char Vị trí khai báo biến : Các khai báo cần phải đợc đặt sau dấu { thân hàm cần đứng trớc câu lệnh khác Sau ví dụ vỊ khai b¸o biÕn sai : ( Kh¸i niƯm vỊ hàm cấu trúc chơng trình nghiên cứu sau này) main() { int a,b,c; a=2; int d; /* Vị trí khai báo sai */ } Khởi đầu cho biến : Nếu khai báo sau tên biến ta đặt dấu = giá trị cách vừa khai báo vừa khởi đầu cho biến Ví dụ : int a,b=20,c,d=40; float e=-55.2,x=27.23,y,z,t=18.98; Việc khởi đầu việc khai báo biến gán giá trị cho sau hoàn toàn tơng đơng Lấy địa biến : Mỗi biến đợc cấp phát vùng nhớ gồm số byte liên tiếp Số hiệu byte đầu địa biến Địa biến đợc sử dụng số hàm ta nghiên cứu sau ( ví dụ nh hàm scanf ) Để lấy địa biến ta sử dụng phép toán : & tên biến 1.8 Mảng : Mỗi biến biểu diễn giá trị Để biểu diễn mét d·y sè hay mét b¶ng sè ta cã thĨ dùng nhiều biến nhng cách không thuận lợi Trong trờng hợp ta có khái niệm mảng Khái niệm mảng ngôn ngữ C giống nh khái niệm ma trận đại số tuyến tính 10 } getch(); } Móc nối theo chiều ngợc (Vào sau tríc LIFO last in first out ): #include "stdio.h" #include "alloc.h" #include "conio.h" #include "string.h" typedef struct pp { char ht[25]; char qq[20]; int tuoi; struct pp *tiep; } nhansu; main() { char tt; nhansu *pdau,*pcuoi,*p; char tam[10]; clrscr(); pdau=NULL; { p=(nhansu*)malloc(sizeof(nhansu)); printf("\n Ho ten : "); gets(p->ht); printf(" Que quan : "); gets(p->qq); printf(" Tuoi: "); gets(tam); p->tuoi=atoi(tam); if (pdau==NULL) { 98 pdau=p; pcuoi=p; p->tiep=NULL; } else { p->tiep=pcuoi; pcuoi=p; } printf("\nBam phim bat ky de tiep tuc, ESC de dung"); tt=getch(); } while(tt!=27) ; /* Đa danh sách liên kết hình, trỏ pdau tro */ printf("\n Danh sach nhu sau :\n"); p=pcuoi; while (p!=NULL) { printf("\n Ho ten: %25s Que : %20s Tuoi : %d",(*p).ht,(*p).qq,(*p).tuoi); p=p->tiep; } getch(); } 99 Ch¬ng tËp tin - file 9.1 Kh¸i niƯm vỊ tƯp tin : Tệp tin hay tệp liệu tập hợp liệu có liên quan với có kiểu đợc nhóm lại với thành dÃy Chúng thờng đợc chứa thiết bị nhớ tính (đĩa mềm, đĩa cứng ) dới tên Tên tiếng Anh tệp file, đợc dùng để hộp đựng phiếu hay thẻ ghi th viện Một hình ảnh rõ nét giúp ta hình dung tệp lµ tđ phiÕu cđa th viƯn Mét hép cã nhiỊu phiếu giống hình thức tổ chức, song lại khác nội dung đây, tủ phiếu tệp, phiếu thành phần tệp Trong máy tính, đĩa cứng đĩa mềm đóng vai trò tủ (để chứa nhiều tệp) Tệp đợc chứa nhớ ngoài, điều có nghĩa tệp đợc lu trữ để dùng nhiều lần tồn chơng trình kết thúc điện Chính lý trên, liệu cần lu trữ ( nh hồ sơ chẳng hạn) ta nên dùng đến tệp Tệp kiểu liệu có cấu trúc Định nghĩa tệp có phần giống mảng chỗ chúng tập hợp phần tử liệu kiểu, song mảng thờng có số phần tử cố định, số phần tử tệp không đợc xác định định nghĩa Trong C, thao tác tệp đợc thực nhờ hàm th viện Các hàm đợc chia làm hai nhóm : nhóm nhóm Các hàm cấp hàm nhập / xuất hệ thống, chúng thực việc đọc ghi nh DOS Các hàm cấp làm việc với tệp thông qua biến trỏ tệp Do hàm cấp có nhiều kiểu truy xuất dễ dùng so với hàm cấp nên chơng trình viết C, hàm cấp hay đợc sử dụng Một tệp tin dù đợc xây dựng cách đơn giản dÃy byte ghi đĩa (có giá trị từ ®Õn 255) Sè byte cđa d·y chÝnh lµ ®é dµi tệp Có hai kiểu nhập xuất liệu lên tệp : Nhập xuất nhị phân nhập xuất văn Nhập xuất nhị phân : ã Dữ liệu ghi lên tệp theo byte nhị phân nh nhớ, trình nhập xuất, liệu không bị biến đổi ã Khi đọc tệp, gặp cuối tệp ta nhận đợc mà kết thúc tệp EOF ( đợc định nghĩa stdio.h -1) hàm feof cho giá trị khác 100 Nhập xuất văn bản: ã Kiểu nhập xuất văn khác kiểu nhị phân xư lý ký tù chun dßng ( m· 10) ký tự mà 26 Đối với ký tự khác, hai kiểu đọc ghi nh ã Mà chun dßng : Khi ghi, mét ký tù LF (m· 10) đợc chuyển thành ký tự CR (mà 13) LF Khi đọc, ký tự liên tiếp CR LF tệp cho ta ký tự LF M· kÕt thóc tƯp : Trong ®äc, nÕu gặp ký tự có mà 26 cuối tệp ta nhận đợc mà kết thúc tệp EOF ( -1) hàm feof(fp) cho giá trị khác ( b»ng 1) 9.2 Khai b¸o sư dơng tƯp - mét số hàm thờng dùng thao tác tệp : 9.2.1 Khai báo sử dụng tệp : Để khai báo sư dơng tƯp, ta dïng lƯnh sau : FILE biÕn_con_trá_tƯp; Trong biến_con_trỏ_tệp biến đơn hay danh sách biến phân cách dấu phảy ( dÊu , ) VÝ dô : FILE *vb, *np; /* Khai b¸o hai biÕn trá tƯp */ 9.2.2 Mở tệp - hàm fopen : Cấu trúc ngữ pháp hàm : FILE *fopen(const char *tên_tệp, const char *kiểu); Nguyên hàm : stdio.h Trong : Đối thứ tên tệp, đối thứ hai kiểu truy nhập Công dụng : 101 Hàm dùng để mở tệp Nếu thành công hàm cho trỏ kiểu FILE ứng với tệp vừa mở Các hàm cấp hai làm việc với tệp thông qua trỏ Nếu có lỗi hàm trả giá trị NULL Bảng sau giá trị kiểu : Tên kiĨu "r" "rt" ý nghÜa Më mét tƯp ®Ĩ ®äc theo kiểu văn Tệp cần "w" "wt" đọc phải đà tồn tại, không có lỗi Mở tệp để ghi theo kiểu văn Nếu tệp "a" "at" đà tồn bị xoá Mở tệp để ghi bổ xung theo kiểu văn "rb" Nếu tệp cha tồn tạo tệp Mở tệp để đọc theo kiểu nhị phân Tệp cần "wb" đọc phải đà tồn tại, không có lỗi Mở tệp để ghi theo kiểu nhị phân Nếu "ab" tệp đà tồn bị xoá Mở tệp để ghi bổ xung theo kiểu nhị phân "r+" "r+t" Nếu tệp cha tồn tạo tệp Mở tệp để đọc/ghi theo kiểu văn Tệp "w+" "w+t" cần đọc phải đà tồn tại, không có lỗi Mở tệp để đọc/ghi theo kiểu văn Nếu "a+" "a+t" tệp đà tồn bị xoá Mở tệp để đọc/ghi bổ xung theo kiểu văn "r+b" Nếu tệp cha tồn tạo tệp Mở tệp để đọc/ghi theo kiểu nhị phân Tệp "w+b" cần đọc phải đà tồn tại, không có lỗi Mở tệp để đọc/ghi theo kiểu nhị phân "a+b" Nếu tệp đà tồn bị xoá Mở tệp để đọc/ghi bổ xung theo kiểu nhị phân Nếu tệp cha tồn tạo tệp Chú ý : Trong kiểu đọc ghi, ta nên lầm vùng đệm trớc chuyển từ đọc sang ghi ngợc lại Ta đề cập đến hàm với tính xoá sau Ví dụ : f=fopen("TEPNP","wb"); 9.2.3 Đóng tệp - hàm fclose : Cấu trúc ngữ pháp hàm : int fclose(FILE *fp); 102 Nguyên hàm : stdio.h Trong : fp trỏ ứng với tệp cần đóng Công dụng : Hàm dùng để đóng tệp kết thúc thao tác Khi đóng tệp, máy thực công việc sau : ã Khi ghi liệu máy đẩy liệu vùng đệm lên đĩa ã Khi đọc liệu máy xoá vùng đệm ã Giải phóng biến trỏ tệp ã Nếu lệnh thành công, hàm cho giá trị 0, trái lại cho hàm EOF Ví dụ : fclose(f); 9.2.4 Đóng tất tệp mở- hàm fcloseall : Cấu trúc ngữ pháp hàm : int fcloseall(void); Nguyên hàm : stdio.h Công dụng : Hàm dùng để đóng tất tệp mở Nếu lệnh thành công, hàm cho giá trị số số tệp đợc đóng, trái lại cho hàm EOF Ví dụ : fcloseall(); 9.2.5 Làm vùng đệm - hàm fflush : Cấu trúc ngữ pháp hàm : int fflush(FILE *fp); Nguyên hàm : stdio.h 103 Công dụng : Dùng làm vùng đệm tệp fp Nếu lệnh thành công, hàm cho giá trị 0, trái lại cho hàm EOF Ví dụ : fflush(f); 9.2.6 Làm vùng đệm tệp mở - hàm fflushall : Cấu trúc ngữ pháp hàm : int fflushall(void); Nguyên hàm : stdio.h Công dụng : Dùng làm vùng đệm tất tệp mở Nếu lệnh thành công, hàm cho giá trị số tệp mở, trái lại cho hàm EOF Ví dụ : fflushall(); 9.2.7 Kiểm tra lỗi file - hàm ferror : Cấu trúc ngữ pháp hàm : int ferror(FILE *fp); Nguyên hàm : stdio.h Trong fp trỏ tệp Công dụng : Hàm dùng để kiểm tra lỗi thao tác tệp fp Hàm cho giá trị lỗi, trái lại hàm cho giá trị khác 9.2.8 KiĨmtra ci tƯp - hµm feof : CÊu tróc ngữ pháp hàm : int feof(FILE *fp); 104 Nguyên hàm : stdio.h Trong fp trỏ tệp Công dụng : Hàm dùng để kiểm tra cuối tệp Hàm cho giá trị khác gặp cuối tệp đọc, trái lại hàm cho giá trị 9.2.9 Truy nhập ngẫu nhiên - hàm di chuyên trỏ vị : 9.2.7.1 Chuyển trỏ vị đầu tệp - Hàm rewind : Cấu trúc ngữ pháp : void rewind(FILE *fp); Nguyên hàm : stdio.h Trong fp trỏ tệp Công dụng : Chuyển trỏ vị tệp fp đầu tệp Khi việc nhập xuất tệp fp đợc thực từ đầu Ví dụ : rewind(f); 9.2.9.2 Chuyển trỏ vị trí cần thiết - Hàm fseek : Cấu trúc ngữ pháp : int fseek(FILE *fp, long sb, int xp); Nguyên hàm : stdio.h Trong fp trỏ tệp sb số byte cần di chuyển xp cho biết vị trí xuất phát mà việc dịch chuyển đợc xp nhận giá trị sau : xp=SEEK_SET hay : Xuất phát từ đầu tệp xp=SEEK_CUR hay 1: Xuất phát từ vị trí cđa trá chØ vÞ 105 xp=SEEK_END hay : Xuất phát từ cuối tệp Công dụng : Chuyển trỏ vị tệp fp vị trí xác định xp qua số byte xác định giá trị tuyệt đối sb Chiều di chuyển cuối tệp sb dơng, trái lại di chuyển đầu tệp Khi thành công, hàm trả giá trị Khi có lỗi hàm trả giá trị khác không Chú ý : Không nên dùng fseek tệp tin văn bản, chuyển đổi ký tự làm cho việc định vị thiếu xác Ví dụ : fseek(stream, SEEK_SET, 0); 9.2.9.3 Vị trí trỏ vị - Hàm ftell : Cấu trúc ngữ pháp : int ftell(FILE *fp); Nguyên hàm : stdio.h Trong fp trỏ tệp Công dụng : Hàm cho biết vị trí trỏ vị (byte thứ tệp fp) thành công Số thứ tự tính từ Trái lại hàm cho giá trị -1L Ví dụ : Sau lệnh fseek(fp,0,SEEK_END); ftell(fp) cho giá trị Sau lệnh fseek(fp,-1,SEEK_END); ftell(fp) cho giá trị 9.2.10 Ghi mẫu tin lên tệp - hàm fwrite : Cấu trúc ngữ pháp hàm : 106 int fwrite(void *ptr, int size, int n, FILE *fp); Nguyên hàm : stdio.h Trong : ptr trỏ trỏ tới vùng nhớ chứa liệu cần ghi size kÝch thíc cđa mÉu tin theo byte n lµ sè mẫu tin cần ghi fp trỏ tệp Công dơng : Hµm ghi n mÉu tin kÝch thíc size byte từ vùng nhớ ptr lên tệp fp Hàm trả giá trị số mẫu tin thực ghi đợc Ví dụ : #include "stdio.h" struct mystruct { int i; char ch; }; main() { FILE *stream; struct mystruct s; stream = fopen("TEST.TXT", "wb") /* Më tÖp TEST.TXT */ s.i = 0; s.ch = 'A'; fwrite(&s, sizeof(s), 1, stream); /* ViÕt cÊu tróc vµo tƯp */ fclose(stream); /* Đóng tệp */ return 0; } 9.2.11 Đọc mÉu tin tõ tƯp - hµm fread : 107 CÊu trúc ngữ pháp hàm : int fread(void *ptr, int size, int n, FILE *fp); Nguyên hàm : stdio.h Trong : ptr trỏ trỏ tới vùng nhớ chứa liệu cần ghi size kích thíc cđa mÉu tin theo byte n lµ sè mÉu tin cần ghi fp trỏ tệp Công dụng : Hàm đọc n mẫu tin kích thớc size byte từ tệp fp lên lên vùng nhớ ptr Hàm trả giá trị số mẫu tin thực đọc đợc Ví dụ : #include "string.h" #include "stdio.h" main() { FILE *stream; char msg[] = "KiÓm tra"; char buf[20]; stream = fopen("DUMMY.FIL", "w+"); /* Viết vài liệu lên tệp */ fwrite(msg, strlen(msg)+1, 1, stream); /* Tìm điểm đầu file */ fseek(stream, SEEK_SET, 0); /* Đọc số liệu hiển thị */ fread(buf, strlen(msg)+1, 1, stream); printf("%s\n", buf); fclose(stream); return 0; } 108 9.2.10 NhËp xuÊt ký tự : 9.2.10.1 Các hàm putc fputc : Cấu trúc ngữ pháp : int putc(int ch, FILE *fp); int fputc(int ch, FILE *fp); Nguyên hàm : stdio.h Trong : ch giá trị nguyên fp trỏ tệp Công dụng : Hàm ghi lªn tƯp fp mét ký tù cã mÉ b»ng m=ch % 256 ch đợc xem giá trị nguyên không dấu Nếu thành công hàm cho mà ký tự đợc ghi, trái lại cho EOF Ví dụ : #include "stdio.h" main() { char msg[] = "Hello world\n"; int i = 0; while (msg[i]) putc(msg[i++], stdout); /* stdout thiÕt bÞ chuẩn - Màn hình*/ return 0; } 9.2.12.2 Các hàm getc fgettc : Cấu trúc ngữ pháp : int gretc(FILE *fp); int fputc(FILE *fp); 109 Nguyên hàm : stdio.h Trong : fp trỏ tệp Công dụng : Hàm đọc ký tự từ tệp fp Nếu thành công hàm cho mà đọc đợc ( có giá trị từ đến 255) Nếu gặp cuối tệp hay có lỗi hàm trả EOF Trong kiểu văn bản, hàm đọc lợt hai mà 13, 10 trả giá trị 10 Khi gặp mà 26 hàm trả EOF VÝ dô : #include "string.h" #include "stdio.h" #include "conio.h" main() { FILE *stream; char string[] = "Kiem tra"; char ch; /* Më tƯp ®Ĩ cËp nhËt*/ stream = fopen("DUMMY.FIL", "w+"); /*Viết xâu ký tự vào tệp */ fwrite(string, strlen(string), 1, stream); /* Tìm vị trí đầu tệp */ fseek(stream, 0, SEEK_SET); { /* §äc mét ký tù tõ tƯp */ ch = fgetc(stream); /* HiĨn thÞ ký tù */ putch(ch); } while (ch != EOF); fclose(stream); return 0; 110 } 9.2.13 Xoá tệp - hàm unlink: Cấu trúc ngữ pháp : int unlink(const char *tên_tệp) Nguyên hàm : dos.h, io.h, stdio.h Trong tên_tệp tên tệp cần xoá Công dụng : Dùng để xoá tệp đĩa Nếu thành công, hàm cho giá trị 0, trái lại hàm cho giá trị EOF VÝ dô : #include #include int main(void) { FILE *fp = fopen("junk.jnk","w"); int status; fprintf(fp,"junk"); status = access("junk.jnk",0); if (status == 0) printf("Tệp tồn tại\n"); else printf("Tệp không tån t¹i\n"); fclose(fp); unlink("junk.jnk"); status = access("junk.jnk",0); if (status == 0) printf("Tệp tồn tại\n"); else printf("Tệp không tồn tại\n"); return 0; } 111 112 ... kÕt th? ?c \0 cho ct Ký tù chuyển dạng : Ký tự chuyển dạng x? ?c định c? ?ch th? ?c dò đ? ?c ký tự dòng vào nh c? ?ch chuyển dịch thông tin đ? ?c đự? ?c tr? ?c gán cho địa tơng ứng C? ?ch dò ®? ?c thø nhÊt lµ ®? ?c theo... phần bắt bu? ?c chơng trình Chơng trình bắt đầu th? ?c câu lệnh hàm main() kết th? ?c gặp dấu } cuối hàm Khi chơng trình làm vi? ?c, máy chạy từ hàm sang hàm kh? ?c C? ?c chơng trình C đ? ?c tổ ch? ?c theo mÉu... th? ?c, tuỳ thu? ?c giá trị máy chọn c? ?ch th? ?c nh sau : Nếu biểu th? ?c có giá trị ( biĨu th? ?c sai ), m¸y sÏ khái chu trình chuyển tới th? ?c câu lệnh tiếp sau chu trình chơng trình Nếu biểu th? ?c có

Ngày đăng: 18/08/2012, 11:08

Hình ảnh liên quan

Một giá trị kiểu char chiế m1 byte (8 bi t) và biểu diễn đợc một kýtự thông qua bảng mã ASCII - Giáo trình ngôn ngữ lập trình C

t.

giá trị kiểu char chiế m1 byte (8 bi t) và biểu diễn đợc một kýtự thông qua bảng mã ASCII Xem tại trang 3 của tài liệu.
/* Đa danh sách liên kết ra màn hình, trỏ pdau tro */ printf("\n Danh sach nhu sau :\n"); - Giáo trình ngôn ngữ lập trình C

a.

danh sách liên kết ra màn hình, trỏ pdau tro */ printf("\n Danh sach nhu sau :\n"); Xem tại trang 97 của tài liệu.
• Bảng trên cho ta các hằng và giá trị của chúng mà các biến graphdtriver và graphmode có thể nhận - Giáo trình ngôn ngữ lập trình C

Bảng tr.

ên cho ta các hằng và giá trị của chúng mà các biến graphdtriver và graphmode có thể nhận Xem tại trang 114 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan