Giáo trình Lập trình căn bản (Nghề Truyền thông và mạng máy tính Trung cấp)

114 3 0
Giáo trình Lập trình căn bản (Nghề Truyền thông và mạng máy tính  Trung cấp)

Đ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

ỦY BAN NHÂN DÂN TỈNH ĐỒNG THÁP TRƢỜNG CAO ĐẲNG CỘNG ĐỒNG ĐỒNG THÁP GIÁO TRÌNH MƠN HỌC/ MƠ ĐUN: LẬP TRÌNH CĂN BẢN NGÀNH, NGHỀ: TRUYỀN THƠNG VÀ MẠNG MÁY TÍNH TRÌNH ĐỘ: TRUNG CẤP (Ban hành kèm theo Quyết định số: /QĐ-CĐCĐ ngày tháng năm 2017 Hiệu trƣởng trƣờng Cao đẳng Cộng đồng Đồng Tháp) Đồng Tháp, năm 2017 TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin đƣợc phép dùng nguyên trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm LỜI GIỚI THIỆU Khi bắt đầu làm quen với ngơn ngữ lập trình – Cụ thể ngơn ngữ C – Sinh Viên thƣờng gặp khó khăn việc chuyển vấn đề lý thuyết sang cài đặt cụ thể máy Sách “Giáo Trình Lập trình bản” nhằm cung cấp cho Học Sinh - Sinh Viên Trƣờng Cao đẳng cộng đồng Đồng Tháp thống tập, kỹ thực hành nâng cao ngơn ngữ lập trình C Cuốn sách đƣợc xem nhƣ tài liệu hƣớng dẫn bƣớc cho Học Sinh - Sinh Viên Trƣờng việc học áp dụng kiến thức lý thuyết lớp cách thành thạo sâu rộng Giáo trình đƣợc chia thành 10 chƣơng theo nội dung kiến thức, kèm theo Các đề thi mẫu phụ lục hƣớng dẫn viết chƣơng trình, chuẩn đốn lỗi sửa lỗi Mỗi chƣơng gồm phần: Phần lý thuyết: đƣợc tóm tắt ngắn gọn với đầy đủ ví dụ minh hoạ kèm theo Phần tập: với nhiều tập đƣợc chia làm hai mức độ luyện tập nâng cao, tập có đánh dấu * tập khó dành cho sinh viên luyện tập thêm Phần kết luận: Tóm tắt nội dung thao tác mà sinh viên cần nắm hay lƣu ý chƣơng Trong q trình biên soạn, chúng tơi cố gắng trích lọc kiến thức bản, lỗi hay gặp ngƣời lập trình Bên cạnh chúng tơi bổ sung thêm số tập nâng cao để rèn luyện thêm kỹ lập trình Tuy nhiên, chủ đích giáo trình phục vụ cho mơn học nên chắn khơng thể tránh khỏi thiếu sót, thế, mong nhận đƣợc góp ý quý báu thầy cô, đồng nghiệp bạn Học Sinh – Sinh Viên để giáo trình ngày hoàn thiện ……, ngày … tháng … năm 2017 Tham gia biên soạn MỤC LỤC  CHƢƠNG TỔNG QUAN 1.1 Giới thiệu ngôn ngữ lập trình C 1.2Đặc điểm ngơn ngữ lập trình C 1.3Cấu trúc chƣơng trình C 1.3.1 Các thị tiền xử lý 1.3.2 Định nghĩa kiểu liệu 1.3.3 Khai báo biến 1.3.4 Khai báo prototype hàm tự tạo 1.3.5 Hàm main 1.3.6 Định nghĩa hàm tự tạo 1.4Thƣ viện hàm chuẩn C 10 1.5Ƣu nhƣợc điểm 11 1.5.1 Ƣu điểm 11 1.5.2 Nhƣợc điểm 11 Bài tập chƣơng 12 CHƢƠNG 2.KIỂU DỮ LIỆU VÀ PHÉP TOÁN 13 2.1 Danh hiệu 13 2.1.1 Kí hiệu 13 2.1.2 Tên 13 2.1.3 Từ khóa 13 2.1.4 Chú thích 14 2.2Biến 15 2.3Các kiểu liệu chuẩn 16 2.3.1 Kiểu char 16 2.3.2 Kiểu int 18 2.3.3 Kiểu float double 18 2.3.4 Các kiểu liệu bổ sung 19 2.4Hằng số 21 2.5Biểu thức 22 2.6Các phép toán 22 2.6.1 Toán tử số học 22 2.6.2 Toán tử quan hệ 23 2.6.3 Toán tử logic 24 2.6.4 Toán tử bit 25 2.6.5 Toán tử tăng giảm 25 2.6.6 Toán tử gán 26 2.6.7 Toán tử phẩy – biểu thức phẩy 27 2.6.8 Phép toán biểu thức điều kiện 27 2.6.9 Độ ƣu tiên toán tử 28 Bài tập chƣơng 28 CHƢƠNG 3.CÁC LỆNH ĐIỀU KHIỂN 30 3.1Câu lệnh 30 3.1.1 Lệnh đơn 30 3.1.2 Lệnh phức 30 3.2Lệnh điều kiện 31 3.2.1 Lệnh if 31 3.2.2 Lệnh switch case 35 3.3Lệnh lặp 39 3.3.1 Lệnh for 39 3.3.2 Lệnh while 41 3.3.3 Lệnh do…while 43 Bài tập chƣơng 44 CHƢƠNG HÀM 47 4.1Khái niệm hàm 47 4.2Định nghĩa hàm 48 4.3Thực thi hàm 49 4.4Truyền tham số 52 4.5Kết trả về: 53 4.6Prototype hàm 53 4.7Các hàm chuẩn 54 4.8Thƣ viện hàm 55 4.9Sự đệ quy 55 Bài tập chƣơng 56 CHƢƠNG MẢNG VÀ CON TRỎ 57 5.1Mảng chiều 57 5.1.1 Khái niệm khai báo mảng chiều 57 5.1.2 Gán giá trị vào phần tử mảng 58 5.1.3 Lấy giá trị phần tử mảng 59 5.1.4 Các phần tử mảng nhớ 60 5.1.5 Khởi tạo mảng 60 5.2Mảng chiều 62 5.2.1 Khái niệm 62 5.2.2 Chỉ số mảng 62 5.2.3 Truy xuất phần tử mảng chiều 63 5.2.4 Khởi tạo mảng chiều 63 5.3Con trỏ (Pointer) 64 5.3 1.Khái niệm 64 5.3 2.Khai báo biến trỏ 64 5.3 3.Toán tử địa (&) toán tử nội dung (*) 65 5.3 4.Tính tốn Pointer 67 5.3 5.Truyền tham số địa 69 5.4 Cấp phát giải phóng vùng nhớ cho biến trỏ 70 5.4.1 Cấp phát vùng nhớ cho biến trỏ 70 5.5Sự liên hệ cách sử dụng mảng pointer 72 5.5.1 Khai thác pointer theo cách mảng 72 5.5.2 Khai thác mảng pointer 73 5.5.3 Những điểm khác quan trọng mảng trỏ 73 5.5.4 Hàm có đối số mảng 74 5.5.5 Hàm trả pointer mảng 76 5.5.6 Mảng trỏ trỏ trỏ (pointer pointer) 77 5.6Chuỗi kí tự 80 5.6.1 Chuỗi kí tự 80 5.6.2 Một số hàm thao tác chuỗi 81 Bài tập chƣơng 84 CHƢƠNG 6.KIỂU DỮ LIỆU CẤU TRÚC 90 6.1Kiểu struct 90 6.1.1 Giới thiệu 90 6.1.2 Định nghĩa 90 6.1.3 Khai báo 92 6.1.4 Cấu trúc lồng 93 6.1.5 Khởi tạo cấu trúc 94 6.1.6 Truy xuất thành phần biến cấu trúc 94 6.2Mảng struct 95 6.3Pointer đến struct 95 6.4Cấu trúc đệ quy 96 Bài tập chƣơng 97 CHƢƠNG 7.FILE DỮ LIỆU 99 7.1Giới thiệu file 99 7.1.1 Giới thiệu 99 7.1.2 Khái niệm File 99 7.1.3 Cách thao tác với file: 100 7.1.4 Tổ chức lƣu trữ liệu file 100 7.2Định nghĩa biến file thao tác mở/đóng file 101 7.2.1 Định nghĩa biến file C 102 7.2.2 Hàm mở, đóng file chuẩn 102 7.2.3 Thao tác nhập / xuất với file 106 Bài tập chƣơng 112 MỘT SỐ HÀM CHUẨN TRONG C 115 TÀI LIỆU THAM KHẢO 127 GIÁO TRÌNH MƠN HỌC Tên mơn học: LẬP TRÌNH CĂN BẢN Mã mơn học: MH 11 Thời gian thực môn học: 75 giờ; (Lý thuyết: 12 giờ; Thực hành, thí nghiệm, thảo luận, tập: 59 giờ; Kiểm tra giờ) I Vị trí, tính chất mơn học: - Vị trí: Mơn học Kỹ thuật lập trình thuộc nhóm mơn sở ngành đƣợc bố trí giảng dạy trƣớc mơn Cấu trúc liệu - Tính chất: mơn học sở ngành bắt buộc, kiến thức môn kiến thức lập trình, làm tảng để học mơn lập trình sau II Mục tiêu mơn học: - Kiến thức: + Hiểu đƣợc công dụng ngôn ngữ lập trình, hiểu cú pháp, cơng dụng câu lệnh dùng ngơn ngữ lập trình + Phân tích đƣợc chƣơng trình: xác định nhiệm vụ chƣơng trình (phải làm gì), phân tích, thiết kế giải thuật giải toán - Kỹ năng: + Vận dụng điều kiện, trợ giúp môi trƣờng ngôn ngữ lập trình, chẳng hạn: thao tác biên tập chƣơng trình, công cụ, điều khiển, thực đơn lệnh trợ giúp, gỡ rối, bẫy lỗi,v.v + Viết chƣơng trình thực chƣơng trình máy tính - Về lực tự chủ trách nhiệm: + Nghiêm túc tham gia học tập + Xử lý đƣợc toán ứng với chƣơng chƣơng trình học III Nội dung môn học: Nội dung tổng quát phân bổ thời gian: Thời gian (giờ) Thực hành, Số Tên chƣơng, mục Tổng Lý thí nghiệm, Kiểm TT số thuyết thảo luận, tra tập 2 0 Chƣơng 1: CÁC KHÁI NIỆM CƠ BẢN Chƣơng 2: CẤU TRÚC ĐIỀU KHIỂN 12 10 Chƣơng 3: HÀM 12 Chƣơng 4: MẢNG 12 10 Chƣơng 5: CHUỖI KÝ TỰ 16 14 Chƣơng 6: KIỂU CẤU TRÚC 21 17 75 12 59 Cộng Nội dung môn học/mô đun: CHƢƠNG TỔNG QUAN Mục tiêu bài: + Hiểu khái niệm lập trình + Biết bƣớc lập trình + Khởi động đƣợc Borland C + Bƣớc đầu làm quen với lập trình C Nội dung bài: o Giới thiệu ngơn ngữ lập trình C o Đặc điểm ngơn ngữ lập trình C o Cấu trúc chƣơng trình C o Thƣ viện hàm chuẩn C o Ƣu nhƣợc điểm o Bài tập chƣơng 1.1 Giới thiệu ngơn ngữ lập trình C C ngơn ngữ lập trình cấp cao, đƣợc sử dụng phổ biến để lập trình hệ thống với Assembler phát triển ứng dụng Vào năm cuối thập kỷ 60 đầu thập kỷ 70 kỷ XX, Dennish Ritchie (làm việc phịng thí nghiệm Bell) phát triển ngơn ngữ lập trình C dựa ngơn ngữ BCPL (do Martin Richards đƣa vào năm 1967) ngôn ngữ B (do Ken Thompson phát triển từ ngôn ngữ BCPL vào năm 1970 viết hệ điều hành UNIX máy PDP-7) đƣợc cài đặt lần hệ điều hành UNIX máy DEC PDP-11 Năm 1978, Dennish Ritchie B.W Kernighan cho xuất “Ngơn ngữ lập trình C” đƣợc phổ biến rộng rãi đến Lúc ban đầu, C đƣợc thiết kế nhằm lập trình mơi trƣờng hệ điều hành Unix nhằm mục đích hỗ trợ cho câu lệnh lập trình phức tạp Nhƣng sau, với nhu cầu phát triển ngày tăng câu lệnh lập trình, C vƣợt qua khn khổ phịng thí nghiệm Bell nhanh chóng hội nhập vào giới lập trình, cơng ty lập trình sử dụng ngơn ngữ lập trình C cách rộng rãi Sau đó, cơng ty sản xuất phần mềm lần lƣợt đƣa phiên hỗ trợ cho việc lập trình ngơn ngữ lập trình C chuẩn ANSI C đời Ngôn ngữ lập trình C ngơn ngữ lập trình hệ thống mạnh “mềm dẻo”, có thƣ viện gồm nhiều hàm (function) đƣợc tạo sẵn Ngƣời lập trình tận dụng hàm để giải tốn mà khơng cần phải tạo Hơn nữa, ngơn ngữ lập trình C hỗ trợ nhiều phép toán nên phù hợp cho việc giải tốn kỹ thuật có nhiều cơng thức phức tạp Ngồi ra, C cho phép ngƣời lập trình tự định nghĩa thêm kiểu liệu trừu tƣợng Tuy nhiên, điều mà ngƣời vừa học lập trình C thƣờng gặp “rắc rối” “hơi khó hiểu” “mềm dẻo” C Dù vậy, C đƣợc phổ biến rộng rãi trở thành cơng cụ lập trình mạnh, đƣợc sử dụng nhƣ ngơn ngữ lập trình chủ yếu việc xây dựng phần mềm 1.2 Đặc điểm ngơn ngữ lập trình C  Tính đọng (compact): C có 32 từ khóa chuẩn 40 tốn tử chuẩn, nhƣng hầu hết đƣợc biểu diễn chuỗi ký tự ngắn gọn  Tính cấu trúc (structured): C có tập hợp thị lập trình nhƣ cấu trúc lựa chọn, lặp… Từ chƣơng trình viết C đƣợc tổ chức rõ ràng, dễ hiểu  Tính tương thích (compatible): C có tiền xử lý thƣ viện chuẩn vô phong phú nên chuyển từ máy tính sang máy tính khác chƣơng trình viết C hồn tồn tƣơng thích  Tính linh động (flexible): C ngơn ngữ uyển chuyển cú pháp, chấp nhận nhiều cách thể hiện, thu gọn kích thƣớc mã lệnh làm chƣơng trình chạy nhanh  Biên dịch (compile): C cho phép biên dịch nhiều tập tin chƣơng trình riêng rẽ thành tập tin đối tƣợng (object) liên kết (link) đối tƣợng lại với thành chƣơng trình thực thi đƣợc (executable) thống Ngơn ngữ lập trình C công cụ để truy nhập vào nhớ máy tính, truy cập chức bên DOS BIOS, lập trình điều khiển cho linh kiện điện tử khác 1.3 Cấu trúc chƣơng trình C Một chƣơng trình C bao gồm phần nhƣ: Các thị tiền xử lý, định nghĩa kiểu liệu mới, khai báo biến ngoài, hàm tự tạo, hàm main Cấu trúc chƣơng trình C: Các thị tiền xử lý Định nghĩa kiểu liệu Khai báo biến Khai báo prototype hàm tự tạo Hàm main Định nghĩa hàm tự tạo 1.3.1 Các thị tiền xử lý Bƣớc tiền xử lý giúp diễn giải mã lệnh đặc biệt gọi thị dẫn hƣớng tiền xử lý (destination directive of preprocessor) Các thị đƣợc nhận biết chúng bắt đầu ký hiệu (symbol) # Có hai thị quan trọng: 10 Thao tác xuất nhập mức hệ thống : Trong IO.H int read (int f, void*buf, unsigned len); :Đọc lên byte từ file f đƣa vào buffer buf Giá trị trả về:  Thành công trả số nguyên dƣơng cho biết số byte đọc đƣợc  Khi hết file : trả giá trị khơng đƣợc byte Ghi int write(int f, void * buf, unsigned len); : Đọc lên byte từ file f đƣa vào buffer buf Giá trị trả về:  Thành công trả số nguyên cho biết số byte ghi đƣợc  Thất bại trả –1 Truy xuất lỗi xuất nhập file Có thể có nhiều trƣờng hợp có lỗi mở file nhƣ hết khoảng trống đĩa, đĩa mềm dán chống ghi, đĩa hỏng, ổ đĩa hƣ, … Khi mở file có lỗi, hàm fopen() trả giá trị NULL 100 Ví dụ 7.2: xuất nội dung file “textfile.txt” hình Mở file có kiểm tra, khơng mở đƣợc, xuất thơng báo, mở đƣợc đọc kí tự vào biến ch xuất hình đóng file lại # include # include # include void main() { FILE*fptr; int ch; if(fptr = fopen(“textfile.txt”,”r”) ==NULL { printf(“Không thể mở file\n”); getch(); exit(0); } while(ch =fgetc(fptr) != EOF) printf(“%c”,ch); fclose(fptr); // Đóng file } Để xác định lỗi file hay không ta dùng hàm: int ferror(FILE *fptr); - Hàm trả giá trị khơng có lỗi, trả giá trị khác có lỗi void perror(const char *string); - xuất thông báo lỗi mà ta muốn thơng báo lên hình Quy trình xử lý File : gồm ba bƣớc: Bƣớc 1: Mở file  Xác định chế độ mở xác(text/binary)  Kiểm tra lỗi Bƣớc 2: Truy xuất xử lý  Áp dụng hợp lý hàm truy xuất tùy theo chế độ mở  Quản lý trỏ vị trí  Kiểm tra lỗi Bƣớc 3: Đóng file - Đảm bảo tính tồn vẹn liệu 101 Ví dụ thao tác mở file nhƣ sau: //Mở chế độ text FILE *fTXT; fTXT = fopen(“D:\\Z\\TEST.TXT”,”wt”); // Mở để ghi/tạo fTXT = fopen(“D:\\Z\\TEST.TXT”,”rt”); // Mở để đọc fTXT = fopen(“D:\\Z\\TEST.TXT”,”r+t”); // Mở để đọc/ghi //Mở chế độ binary FILE *fBIN; fBIN = fopen(“D:\\Z\\TEST.BIN”,”wb”); // Mở để ghi/tạo fBIN = fopen(“D:\\Z\\TEST.BIN”,”rb”); // Mở để đọc fBIN = fopen(“D:\\Z\\TEST.BIN”,”r+b”); // Mở để đọc/ghi fBIN = fopen(“D:\\Z\\TEST.BIN”,”ab”); // Mở để ghi thêm (append) vào cuối //Xử lý lỗi if(fTXT == NULL) { printf(“Loi mo file = %d Noi dung = %s”,errno,strerror(errno)); return 0; } Lưu ý : Thao tác đọc /ghi thực liền nhau, cần phải có thao tác fseek hay rewind Ta xét ví dụ sau: FILE*fBIN; fBIN = fopen(“D:\\z\\TEST.BIN”.”r+b”); // Mở để update int x; while(fread(&x,sizeof(x),1,fBIN)) if(x == 0) { x++; fseek(fBIN,-sizeof(x),SEEK_CUR); fwrite(&x, sizeof(x),1, fBIN); } fclose(fBIN); Kết quả: Chỉ update đƣợc phần tử Ví dụ truy xuất liệu chế độ text n =fscanf(fTXT,”%d,%f,%s”,&Item,&fItem,szItem); // trả số phần tử đọc 102 If (n < || n ==EOF) { printf(“Không đọc số phần tử cần thiết M lỗi = %d”,errno); … // Các xử lý đặc biệt } n=fprintf(fTXT,“%d,%f,%s”,&Item,&fItem,szItem); //trả số byte ghi được; if(n < sizeof(Item)+sizeof(fItem)+strlen(szItem) ||) { printf(“Ghi không thành công M lỗi = %d”,errno); … // Các xử lý đặc biệt } Ví dụ truy xuất liệu chế độ binary n = fread(&Item, sizeof(Item), nItemRead, fBIN);//trả số phần tử đọc if(n < nItemRead) { printf(“Không đọc số phần tử cần thiết M lỗi = %d”,errno); … // Các xử lý đặc biệt } n = fwrite(&Item, sizeof(Item), nItemWrite, fBIN);//trả số byte đọc if(n < nItemWrite) { printf(“Ghi không thành công M lỗi = %d”,errno); … // Các xử lý đặc biệt } Ví dụ sau thực việc cập nhật SAI phần tử quản lý trỏ fread(&Item,sizeof(Item),1,f); Item fwrite(&Item,sizeof(Item),1,f); Ví dụ đóng file sau xử lý 103 ++; // cập nhật phần tử Item Đóng file: fclose(fTXT); fclose(fBIN); Đóng tất file mở: fcloseall(); Ví dụ sau cho thấy việc khơng bảo tồn liệu khơng đóng file char szFileName[] = “D:\\z\\TEST.BIN”; Ghi liệu lên file FILE*f = fopen(szFileName,”wb”); for( i = 0; i < n; i++) fwrite(&i,sizeof(i),1,f); Đọc liệu từ file i = 0; f = fopen(szFileName,”rb”); while(fread(&i,sizeof(i),1,f)) i++; printf(“%d”,i); fclose(f); Kết quả: (tùy thuộc vào hệ thống) n = 100  n = 500  n = 513  n = 1000  i=0 i = 256 i = 512 i = 768 104 Bài tập chƣơng Cho tập tin chứa chi tiết nhân viên nhƣ Mã NV, tên, tuổi, lƣơng trợ cấp Thực yêu cầu sau:  Viết câu lệnh để tạo tập tin Employee.dat nhận giá trị Mã NV, tên, tuổi, lƣơng trợ cấp vào field  Gán chi tiết vào biến sau lần lƣợt gán vào field  Sau tạo tập tin Employee, Hãy liệt k tất mẩu tin tập tin  Liệt kê nhân viên có lƣơng 1000  Cập nhật lại tiền trợ cấp cho tất nhân viên thành 300 lƣơng nhỏ 2000 ngƣợc lại lên 500  Xóa mẩu tin tập tin Employee vào mã nhân viên nhập vào  Tìm nhân viên tập tin Employee theo mã nhân viên, hiển thị thông tin đầy đủ nhân viên tìm thấy Liệt kê sƣu liệu đƣợc sử dụng chƣơng trình Viết chƣơng trình tìm độ dài file (nhớ mở file dạng nhị phân) Viết chƣơng trình đọc file text xóa dịng trống có file Viết chƣơng trình cắt bỏ dịng thừa, cắt bỏ khoảng trống thừa, đổi kí tự đầu từ chữ hoa file text Lập chƣơng trình tạo tập tin chứa giá trị ngẫu nhiên Sắp xếp chúng lƣu trữ sang tập tin khác Viết chƣơng trình tính số lần xuất kí tự chữ tập tin văn Viết chƣơng trình tính số từ có tập tin văn Viết chƣơng trình nối hai tập tin văn với thành tập tin văn Viết chƣơng trình nhập liệu nhân viên quan lƣu vào file Sau thực câu lệnh sau: Nhập vào số thứ tự, sửa liệu nhân viên theo thứ tự này, lƣu lại nhân viên vào file Viết hàm thực câu lệnh sau:  Tìm lƣơng thấp quan  Tìm lƣơng trung bình quan  In danh sách nhân viên  In ngƣời có lƣơng cao  In ngƣời có lƣơng thấp 10 Viết chƣơng trình quản lý lớp học array Mỗi học sinh đƣợc mơ tả bằng: mã số (int), họ(8 kí tự), tên lĩt(24 kí tự), tên( kí tự), điểm tốn, lý, hóa Lƣu học sinh vào file HOCSINH.DAT Chƣơng trình có chức sau:  Thêm vào học sinh  Xóa học sinh  Xuất danh sách học sinh (khơng có điểm)  Xuất danh sách học sinh có xếp hạng, hạng theo tên 11 Viết chƣơng trình tìm độ dài file (nhớ mở file dạng nhị phân) 105 12 Viết chƣơng trình đọc file text xóa dịng trống có file 13 Viết chƣơng trình cắt bỏ dịng thừa, cắt bỏ khoảng trống thừa, đổi kí tự đầu từ chữ hoa file text 14 Lập chƣơng trình tạo tập tin chứa giá trị ngẫu nhiên Sắp xếp chúng lƣu trữ sang tập tin khác 15 Viết chƣơng trình tính số lần xuất kí tự chữ tập tin văn 16 Viết chƣơng trình tính số từ có tập tin văn 17 Viết chƣơng trình nối hai tập tin văn với thành tập tin văn 18 Viết chƣơng trình nhập liệu nhân viên quan lƣu vào file Sau thực câu lệnh sau: Nhập vào số thứ tự, sửa liệu nhân viên theo thứ tự này, lƣu lại nhân viên vào file Viết hàm thực câu lệnh sau:  Tìm lƣơng thấp quan  Tìm lƣơng trung bình quan  In danh sách nhn viên  In ngƣời có lƣơng cao  In ngƣời có lƣơng thấp 19 Viết chƣơng trình quản lý lớp học array Mỗi học sinh đƣợc mô tả bằng: mã số (int), họ (8 kí tự), tên lót (24 kí tự), tên (8 kí tự), điểm tốn, lý, hóa Lƣu học sinh vào file HOCSINH.DAT Chƣơng trình có chức sau :  Thêm vào học sinh  Xóa học sinh  Xuất danh sách học sinh (khơng có điểm)  Xuất danh sách học sinh có xếp hạng, hạng theo tên 106 MỘT SỐ HÀM CHUẨN TRONG C File ctype.h: Xử lý kí tự Các hàm sau thực việc kiểm tra, trả sai, trả giá trị khác int isalpha(int c) : Kiểm tra c có phải kí tự chữ hay khơng ? (A … Z, a … z) int isascii(int c): Kiểm tra c có phải kí tự ASCII hay khơng ?(0 … 127) int iscntrl(int c): Kiểm tra c có phải kí tự điều khiển hay không? int isdigit(int c): Kiểm tra c có phải kí tự số … int isgraph(int c): Kiểm tra c có phải kí tự in đƣợc, trừ khoảng trống int islower(int c): Kiểm tra c có phải kí tự thƣờng hay khơng ? int isprintf(int c): Kiểm tra c có phải kí tự in đƣợc int ispunct(int c): Kiểm tra c có phải kí tự điều khiển hay khoảng trống int isspace(int c): Kiểm tra c có phải kí tự khoảng trống? int isuppper(int c): Kiểm tra c có phải kí tự hoa ? (A … Z) + Các hàm tốn học double acos(double x): Tính arc cosince(x) double asin(double x): Tính arc sine(x) double atan(double x): Tính arc tangent(x) double atan2(double x, double y): Tính arc tangent(x/y) double ceil(double x): Trả số nguyên(có kiểu double) nhỏ khơng nhỏ x double cos(double x): Tính cosine(x), x : radian double double double double lớn x cosh(double x) exp(double x) fabs(double x) floor(double x) : : : : Tính Hãyoerbolic cosine(x) Tính ex Tính | x | Trả số nguyên lớn không double fmod(double x, double y) : phép chia nguyên x/y double frexp(double x, int*exponent) Trả số dƣ(kiểu double) Chia x làm thành phần định exponent trị(mantisa) luỹ thừa(exponent) ( x = a*2 ) trả giá trị a exp double ldexp(double x, int exp): Ngƣợc lại với frexp, trả x*2 double log(double x): Trả giá trị log Neper x double log10(double x): Trả giá trị log 10 x double modf(double x, double*intptr) Chia x thành phần lẻ(fractional – kết hàm) phần nguyên 107 double double double double double double pow(double x, doubley): Tính xy sin(double x): Tính since(x), x:radian sinh(double x): Tính Hãyperbolic x sqrt(double x): Tính bậc x tan(double x): Tính tangent x tanh(double x): Tính Hãy perbolic tangent x Các hàm xuất nhập chuẩn: Các hàm xuất nhập liệu thơng thƣờng int getchar(void) : Nhập kí tự từ bên phím (stdin) int putchar(int c): Xuất kí tự hình (stdout) char* gets(char*s) : Nhập chuỗi kí tự từ bên phím int puts(const char*s): Xuất chuỗi kí tự hình(có xuống dịng) int printf(const char * format, [argument, …]) Xuất liệu có định dạng hình int scanf(const char * format, [address, …]) Nhập liệu có định dạng hình int sprintf(char*buffer,const char*format[argument, … ]); Xuất liệu có định dạng sang chuỗi int sscanf(const char*buffer, const char*format[argument, … ]) Đọc chuỗi int vprintf(const char * format, va_list arlist);Xuất liệu định dạng dùng danh sách đối số int vscanf(const char * format, va_list arlist); Nhập liệu định dạng dùng danh sách đối số int vsprintf(char * buffer,const char*format, va_list arlist);Xuất liệu định dạng chuỗi dùng danh sách đối số int vsscanf(const char * buffer,const char*format, va_list arlist);Nhập liệu định dạng vào chuỗi dùng danh sách đối số + a b Xuất nhập file void clearerr(FILE*stream): Xóa thơng báolỗi int fclose(FILE*stream): Đóng file int fcloseall(void): Đóng tất file mở FILE*fdopen(int handle, char*type) : Gán dòng(stream) cho file handle FILE*fopen(const char*filename, char*type): Mở file FILE*freopen(const char*filename,const char * mode,FILE*stream); Mở file gán cho hfile handle đ mở Mở file với chế độ dùng chung 108 _fsopen: #include #include FILE*_fsopen(const char*filename, const char*mode,int shflg); int feof(FILE*stream): Kiểm tra hết file(Macro) int ferror(FILE*stream): Kiểm tra có lỗi hay khơng int fflush(FILE*stream): Ghi buffer dịng(stream) ln file int fgetc(FILE*stream): Lấy kí tự từ file int fputc(int c, FILE*stream): Ghi kí tự c ln file int fgetchar(void): Lấy kí tự từ thiết bị nhập chuẩn(stdin) int fputchar(int c): Xuất lí tự thiết bị xuất chuẩn(stdout) int getpos(FILE*stream, fpos_t*pos): Lấy vị trí hnh int fsetpos(FILE*stream, const fpos_t*pos) Ấn định vị trí file hành char* fgets(char*s, int n, FILE*stream): Lấy chuỗi từ file int fputs(const char*s, FILE*stream): Ghi chuỗi ln file int fileno(FILE*stream): Lấy file handle int fflushall(void): Xố buffer dòng nhập Ghi buffer dòng xuất lên file int fprintf(FILE*stream, const char*format, [ , argument,… ]) Ghi kết xuất có định dạng lên file int fscanf(FILE*stream, const char*format, [ , address,… ]) Đọc liệu có định dạng từ file size_t fread(void *ptr, size_t size, size n, FILE*stream); :Đọc liệu từ file size_t fwrite(const void *ptr, size_t size, size n, FILE*stream);:Ghi liệu lên file int fseek(FILE*stream, long offset, int whence): Nhẩy đến vị trí offset file kể từ vị trí whence long ftell(FILE*stream): Lấy vị trí file hình int getw(FILE*stream): Đọc số nguyên từ file int putw(int w, FILE*stream): Xuất số nguyên từ file void perror(const char*s): Xuất thông báo lỗi hệ thống int remove(const char*filename): Macro xóa file int rename(const char*oldname, const char*newname) Đổi tên file void rewind(FILE*stream): Đƣa trỏ đầu file int rmtmp(void): Xoá file tạm mở Gán buffer cho file: void setbuf(FILE*stream, char buf) 109 int setvbuf(FILE*stream, char*buf, int type, size_t size) FILE*tmpfile(void): Mở file tạm nhị phân char* tempnam(char*dir, char *prefix): Tạo file có tên thƣ mục int unget(int c, FILE*stream): Trả kí tự cho file int unlink(const char*filename): Xóa file Tạo thơng báo: char*_strerror(const char*s); char*strerror(int errnum); + Các hàm tiện ích a Đổi số thành chuỗi Đổi số thực thành chuỗi, lấy ndig số hạng, dec số lẻ, đƣa dấu vào biến sign char*ecvt(double value, int ndig, int *dec, int *sign); char*fcvt(double value, int ndig, int *dec, int *sign); char*itoa(int value, char*string, int radix); char*ltoa(long value, char*string, int radix); char*utoa(unsigned long value, char*string, int radix); char*gcvt(double value, int ndec, char*buf); b Đổi chuổi thành số double atof(const char*s); long double _atold(const char*s); int atoi(const char*s); double strtod(const char *s, char**endptr); long strtol(const char *s, char**endptr, int radix); long double strtold(const char *s, char**endptr); unsigned long strtoul(const char *s, char**endptr, int radix); c Xử lý số Lấy trị tuyệt đối số nguyên, số thực, số phức: int abs(int x); complex: double abs(complex x); double cabs(struct complex z); long double cabsl(struct _complex z); double fabs(double x); long double fabsl(long double @E(x)); long int labs(long int x); d.Tạo số ngẫu nhiên void randomize(void); : Khởi động chế lấy số ngẫu nhiên int rand(void); : Lấy số ngẫu nhiên từ đến RAND_MAX Lấy số ngẫu nhiên từ đến num – Macro : random(num); Function: int random(int num); Lấy số ngẫu nhiên từ đến seed void srand(unsigned seed); 110 e Cấp phát thu hồi nhớ: Hàm xin cấp phát vùng nhớ có size bytes/ nbytes void * malloc(size_t size); void far*farmalloc(unsigned long nbytes); Hàm xin cấp phát vùng nhớ cho nitems phần tử, phần tử có size bytes void * calloc(size_t nitems, size_t size); void far*farcalloc(unsigned long nitems, unsigned long size); Hàm xin cấp phát lại vùng nhớ lúc trƣớc cấp phát địa oldblock với kích thƣớc size, có copy nội dung cũ sang vùng nhớ void * realloc(void * oldblock, size_t size); void far* farrealloc(void far* oldblock, unsigned long nbytes); Hàm trả nhớ cho hệ thống void * free(void*block); void far* farfree(void far*block); + Xử lý string Copy khối nhớ n bytes từ src sang dest void *memcácpy(void *dest, const void *src, int c, size_t n); void *memcpy (void *dest, const void *src, size_t n); void *memmove(void *dest, const void *src, size_t n); void far * far _fmemcácpy(void far *dest, const void far *src, int c, size_t n); void far * far _fmemcpy (void far *dest, const void far *src,size_t n); Tìm kiếm kí tự c khối nhớ s(n byte) void *memchr (const void *s, int c, size_t n); void far * far _fmemchr(const void far *s, int c, size_t n); So sánh n byte hai chuỗi s1 s2, hàm memicmp so sánh nhƣng không phân biệt chữ hoa chữ thƣờng int memcmp (const void *s1, const void *s2, size_t n); int memicmp(const void *s1, const void *s2, size_t n); int far _fmemcmp (const void far *s1, const void far *s2, size_t n); int far _fmemicmp(const void far *s1, const void far *s2, size_t n); Cho n byte s kí tự c void *memset (void *s, int c, size_t n); void far * far _fmemset(void far *s, int c, size_t n); 111 Nối chuỗi src vo chuỗi dest char *strúcat(char *dest, const char *src); char far * far _fstrúcat(char far *dest, const char far *src); Tìm địa vị trí xuất kí tự c chuỗi s char *strúchr(const char *s, int c); char far * far _fstrúchr(const char far *s, int c); So sánh hai chuỗi, strúcmpi, _fstricmp, stricmp không phân biệt chữ hoa chữ thƣờng int strúcmp(const char *s1, const char*s2); int strúcmpi(const char *s1, const char *s2) int stricmp(const char *s1, const char *s2); int far _fstrúcmp(const char far *s1, const char far *s2); int far _fstricmp(const char far *s1, const char far *s2); Copy chuỗi src sang chuỗi dest char *strúcpy(char *dest, const char *src); char far * _fstrúcpy(char far *dest, const char far *src); Tìm đoạn chuỗi s1 khơng chứa kí tự có s2 size_t strúcspn(const char *s1, const char *s2); size_t far _fstrúcspn(const char *s1, const char far *s2); Tìm đoạn chuỗi s1 có chứa kí tự có s2 size_t strspn(const char *s1, const char *s2); size_t far _fstrspn(const char far *s1, const char far *s2); Copy chuỗi sang vị trí khc char *strdup(const char *s); char far * far _fstrdup(const char far *s); Tìm độ dài chuỗi size_t strlen(const char *s); size_t far _fstrlen(const char far *s); Đổi chuỗi thành chuỗi chữ thƣờng char *strlwr(char *s); char far * far _fstrlwr(char far *s); Đổi chuỗi thành chuỗi chữ hoa char *strupr(char *s); char far * far _fstrupr(char far *s); Nối đoạn chuỗi src vào chuỗi dest char *strêncat(char *dest, const char *src, size_t maxlen); char far * far _fstrêncat(char far *dest, const char far *src, size_t maxlen); So snh hai chuỗi 112 int strúcmp(const char *s1, const char*s2); int far _fstrúcmp(const char far *s1, const char far *s2); So sánh hai chuỗi, không phân biệt chuỗi hoa chuỗi thƣờng int strúcmpi(const char *s1, const char *s2) int stricmp(const char *s1, const char *s2); int far _fstricmp(const char far *s1, const char far *s2); Copy tối đa maxlen kí tự từ chuỗi src sang chuỗi dest char *strêncpy(char *dest, const char *src, size_t maxlen); char far * far _fstrêncpy(char far *dest, const char far *src size_t maxlen); Cho n byte chuỗi s l kí tự ch char *strênset(char *s, int ch, size_t n); char far * far _fstrênset(char far *s, int ch, size_t n); Tìm xuất kí tự chuỗi s2 chuỗi s1 char *strpbrk(const char *s1, const char *s2); char far *far _fstrpbrk(const char far *s1, const char far *s2); Tìm xuất cuối kí tự c chuỗi s char *strrchr(const char *s, int c); char far * far _fstrrchr(const char far *s, int c); Đảo chuỗi char *strrev(char *s); char far * far _fstrrev(char far *s); Thiết lập tất chuỗi s mang kí tự ch char *strset(char *s, int ch); char far * far _fstrset(char far *s, int ch); Tìm xuất chuỗi s2 s1 char *strstr(const char *s1, const char *s2); char far * far _fstrstr(const char far *s1, const char far *s2); Tìm từ s1 khơng có mặt s2 char *strtok(char *s1, const char *s2); char far * far _fstrtok(char far *s1, const char far *s2); 113 TÀI LIỆU THAM KHẢO [1] Ngơn ngữ lập trình, Khoa CNTT, trƣờng ĐH CNTP TPHCM, 2003 [2] Nguyễn Thanh Thủy (chủ biên), Nhập mơn lập trình ngơn ngữ C, Nhà xuất Khoa học Kỹ thuật, 2005 [3] Brian.W.Kernighan, Dennis M.RitChie, C Programming Language, 2nd Edition, Prentice Hall Software Series, [4] http://publications.gbdirect.co.uk/c_book/ : The C Book, Mike Banahan, Declan Brady and Mark Doran (the online version) [5] Nguyễn Đình Tê, Hồng Đức Hải, Giáo trình Lý thuyết tập ngôn ngữ C Tập 1, Nhà xuất Giáo dục, 1999 [6] Nguyễn Đình Tê, Hồng Đức Hải, Giáo trình Lý thuyết tập ngơn ngữ C Tập 2, Nhà xuất Giáo dục, 1999 [7] Nguyễn Thanh Thủy Nguyễn Quang Huy, Bài tập lập trình ngơn ngữ C, Nhà xuất Khoa học Kỹ thuật, 1999 [8] Đặng Thành Tín, Tin Học II, Nhà xuất Giáo dục 114 ... hội nhập vào giới lập trình, cơng ty lập trình sử dụng ngơn ngữ lập trình C cách rộng rãi Sau đó, cơng ty sản xuất phần mềm lần lƣợt đƣa phiên hỗ trợ cho việc lập trình ngơn ngữ lập trình C chuẩn... Hiểu khái niệm lập trình + Biết bƣớc lập trình + Khởi động đƣợc Borland C + Bƣớc đầu làm quen với lập trình C Nội dung bài: o Giới thiệu ngơn ngữ lập trình C o Đặc điểm ngơn ngữ lập trình C o Cấu... đầu làm quen với ngôn ngữ lập trình – Cụ thể ngơn ngữ C – Sinh Viên thƣờng gặp khó khăn việc chuyển vấn đề lý thuyết sang cài đặt cụ thể máy Sách ? ?Giáo Trình Lập trình bản? ?? nhằm cung cấp cho Học

Ngày đăng: 27/10/2022, 04:00

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

  • Đang cập nhật ...

Tài liệu liên quan