Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 96 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
96
Dung lượng
873,59 KB
Nội dung
BỘ GIAO THÔNG VẬN TẢI TRƢỜNG ĐẠI HỌC HÀNG HẢI BỘ MÔN: KHOA HỌC MÁY TÍ NH KHOA: CÔNG NGHỆ THƠNG TIN BÀI GIẢNG KỸ THUẬT LẬP TRÌNH C TÊN HỌC PHẦN : KỸ THUẬT LẬP TRÌNH C MÃ HỌC PHẦN : 17206 TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CHÍNH QUY DÙNG CHO SV NGÀNH : CƠNG NGHỆ THƠNG TIN HẢI PHÕNG - 2008 MỤC LỤC MỤC LỤC CHƢƠNG GIỚI THIỆU 1.1 Giới thiệu ngôn ngữ lập trình C 1.2 Thuật toán sơ đồ khối CHƢƠNG CÁC KHÁI NIỆM CƠ BẢN VỀ NGƠN NGỮ LẬP TRÌNH C 2.1 Các phần tử ngơn ngữ lập trình C 2.2 Cấu trúc chung chƣơng trình C 10 2.3 Các bƣớc lập chƣơng trình 11 2.4 Các kiểu liệu sở 12 2.5 Các khai báo chƣơng trình C 17 2.6 Biểu thức 21 2.7 Các hàm toán học 22 CHƢƠNG CÁC CÂU LỆNH CƠ BẢN 23 3.1 Lệnh gán giá trị, lệnh gộp 23 3.2 Hàm viết liệu hình 25 3.3 Hàm nhập liệu vào từ bàn phím 27 3.4 Câu lệnh điều kiện 31 3.5 Câu lệnh lựa chọn-lệnh switch 34 3.6 Câu lệnh lặp for 36 3.7 Câu lệnh while 37 3.8 Câu lệnh do… while 37 3.9 Câu lệnh break 38 3.10 Lệnh continue 38 3.11 Toán tử goto nhãn ( label ) 38 CHƢƠNG HÀM CHƢƠNG TRÌNH VÀ CẤU TRÚC CHƢƠNG TRÌNH 39 4.1 Khái niệm chƣơng trình 39 4.2 Hàm C 39 4.3 Chuyển tham số cho hàm 41 4.4 Biến toàn cục biến địa phƣơng 41 4.5.Tính đệ quy hàm 42 4.6 Bộ tiền xử lý C 46 CHƢƠNG MẢNG VÀ CÁC KIỂU DỮ LIỆU CÓ CẤU TRÚC 50 5.1.Dữ liệu kiểu mảng/con trỏ 50 5.3 Dữ liệu kiểu cấu trúc 61 CHƢƠNG DỮ LIỆU KIỂU TỆP 67 6.1 Khái niệm tệp tin 67 6.2 Cấu trúc phân loại tệp 67 6.3 Tạo tệp để đọc/ghi liệu 68 6.4 Một số hàm xử lý tệp C 70 6.5 Bài tập áp dụng 77 CHƢƠNG ĐỒ HOẠ 78 7.1 Giới thiệu chung 78 7.2 Các hàm đặt màu, vẽ điểm, tô màu 80 7.3 Các hàm vẽ hình 88 TÀI LIỆU THAM KHẢO 96 11.6 Tên học phần: Kỹ thuật lập trình (C) Bộ mơn phụ trách giảng dạy: Khoa học Máy tính Mã học phần: 17206 Loại học phần: Khoa phụ trách: CNTT Tổng số TC: TS tiết Lý thuyết Thực hành/Xemina Tự học Bài tập lớn Đồ án môn học 75 45 30 0 Điều kiện tiên quyết: Sinh viên phải học xong học phần sau đƣợc đăng ký học phần này: Tin đại cƣơng, Toán rời rạc, Đại số, Giải tích Mục tiêu học phần: Cung cấp cho sinh viên kiến thức rèn luyện kỹ lập trình dựa ngơn ngữ lập trình C Nội dung chủ yếu - Những vấn đề ngơn ngữ lập trình C - Cách thức xây dựng chƣơng trình dựa ngơn ngữ lập trình C - Các vấn đề trỏ, file đồ họa C Nội dung chi tiết học phần: TÊN CHƢƠNG MỤC Chƣơng 1: Giới thiệu 1.1 Giới thiệu ngơn ngữ lập trình C 1.1.1 Xuất xứ ngơn ngữ lập trình C 1.1.2 Trình biên dịch C cách sử dụng 1.2 Thuật toán sơ đồ khối Chƣơng Các khái niệm ngôn ngữ C 2.1 Các phần tử ngôn ngữ lập trình C 2.2 Cấu trúc chung chƣơng trình C 2.3 Các bƣớc lập chƣơng trình 2.4 Các kiểu liệu sở 2.5 Các khai báo chƣơng trình C 2.6 Biểu thức 2.7 Các hàm toán học Chƣơng Các câu lệnh điều khiển C 3.1 Lệnh gán giá trị, lệnh gộp 3.2 Hàm viết liệu hình 3.3 Hàm nhập liệu vào từ bàn phím 3.4 Câu lệnh điều kiện 3.5 Câu lệnh lựa chọn 3.6 Câu lệnh lặp for 3.7 Câu lệnh lặp while 3.8 Câu lệnh do…while 3.9 Câu lệnh break 3.10 Lệnh continue 3.11 Toán tử goto nhãn (label) Chƣơng Hàm 4.1 Khái niệm chƣơng trình 4.2 Hàm C TS PHÂN PHỐI SỐ TIẾT LT TH/Xemina BT 4 13 14 KT TÊN CHƢƠNG MỤC 4.3 Chuyển tham số cho hàm 4.4 Biến tồn cục biến địa phƣơng 4.5 Tính đệ quy hàm 4.6 Đối dòng lệnh hàm 4.7 Một số hàm đặc biệt Chƣơng Mảng kiểu liệu có cấu trúc 5.1 Dữ liệu kiểu mảng/con trỏ 5.1.1 Mảng chiều nhiều chiều 5.1.2 Con trỏ địa 5.1.3 Liên hệ mảng trỏ 5.1.4 Con trỏ hàm 5.2 Dữ liệu kiểu xâu ký tự Liên hệ trỏ xâu ký tự 5.3 Dữ liệu kiểu ghi 5.4 Một số ví dụ tổng hợp Chƣơng File 6.1 Khái niệm 6.2 Cấu trúc phân loại tệp 6.3 Tạo tệp để đọc / ghi liệu 6.4 Một số hàm xử lý tệp C 6.5 Bài tập áp dụng Chƣơng Đồ hoạ C 7.1 Giới thiệu chung 7.2 Các hàm đặt màu, vẽ điểm, tơ màu 7.3 Các hàm vẽ hình TS PHÂN PHỐI SỐ TIẾT LT TH/Xemina BT 21 12 10 KT Nhiệm vụ sinh viên : Tham dự buổi thuyết trình giáo viên, tự học, tự làm tập giáo viên giao, tham dự kiểm tra định kỳ cuối kỳ Tài liệu tham khảo: Phạm Văn Ất, Kỹ thuật lập trình C - Cơ sở nâng cao, NXB KHKT, 1998 Quách Tuấn Ngọc, Ngơn ngữ lập trình C, NXB GD, 1998 Một số website liên quan: http://www.codeproject.com, http://www.cprogramming.com, Hình thức tiêu chuẩn đánh giá sinh viên: Hình thức thi cuối kỳ : Thi vấn đáp máy tính, thời gian làm 45 phút Sinh viên phải đảm bảo điều kiện theo Quy chế Nhà trƣờng Bộ Thang điểm: Thang điểm chữ A, B, C, D, F Điểm đánh giá học phần: Z = 0,3X + 0,7Y Bài giảng tài liệu thức thống Bộ mơn Khoa học máy tính, Khoa Công nghệ thông tin đƣợc dùng để giảng dạy cho sinh viên Ngày phê duyệt: / /20 Trƣởng Bộ môn: ThS Nguyễn Hữu Tuân (ký ghi rõ họ tên) CHƢƠNG GIỚI THIỆU 1.1 Giới thiệu ngơn ngữ lập trình C 1.1.1 Xuất xứ ngơn ngữ lập trình C 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 Ngồ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 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 1.1.2 Trình biên dịch C cách sử dụng A Turbo C (TC) Giới thiệu chung TC Khởi động C nhƣ chƣơng trình khác cách nhấp đúp chuột lên biểu tƣợng chƣơng trình Khi chƣơng trình đƣợc khởi động giao diện gồm có menu công việc khung cửa sổ bên dƣới phục vụ cho soạn thảo Một trỏ nhấp nháy khung cửa sổ bắt đầu nhập nội dung (văn bản) chƣơng trình vào khung cửa sổ soạn thảo Mục đích giáo trình trang bị kiến thức lập trình thông qua NNLT C cho sinh viên bắt đầu nên chúng tơi chọn trình bày giao diện trình biên dịch quen thuộc Turbo C Borland C Về trình biên dịch khác độc giả tự tham khảo tài liệu liên quan Để kết thúc làm việc với C (soạn thảo, chạy chƣơng trình ) quay mơi trƣờng Windows ấn Alt-X Giao diện cửa sổ soạn thảo TC a Mô tả chung Khi gọi chạy C hình xuất menu xổ xuống cửa sổ soạn thảo Trên menu gồm có nhóm chức năng: File, Edit, Search, Run, Compile, Debug, Project, Options, Window, Help Để kích hoạt nhóm chức năng, ấn Alt+chữ biểu thị cho menu chức (là chữ có gạch dƣới) Ví dụ để mở nhóm chức File ấn Alt+F, sau dịch chuyển hộp sáng đến mục cần chọn ấn Enter Để thuận tiện cho NSD, số chức hay dùng đƣợc gắn với tổ hợp phím cho phép ngƣời dùng chọn nhanh chức mà khơng cần thông qua việc mở menu nhƣ mô tả Một số tổ hợp phím cụ thể đƣợc trình bày vào cuối phần Các chƣơng trình dịch hỗ trợ ngƣời lập trình mơi trƣờng tích hợp tức ngồi chức soạn thảo, cung cấp nhiều chức năng, tiện ích khác giúp ngƣời lập trình vừa soạn thảo văn chƣơng trình vừa gọi chạy chƣơng trình vừa gỡ lỗi … Các chức liên quan đến soạn thảo phần lớn giống với soạn thảo khác (nhƣ WinWord) chúng tơi trình bày tóm tắt mà khơng trình bày chi tiết b Các chức soạn thảo Giống hầu hết soạn thảo văn bản, soạn thảo Turbo C Borland C sử dụng phím sau cho q trình soạn thảo: − Dịch chuyển trỏ: phím mũi tên cho phép dịch chuyển trỏ sang trái, phải kí tự lên trên, xuống dƣới dòng Để dịch chuyển nhanh có phím nhƣ Home (về đầu dòng), End (về cuối dòng), PgUp, PgDn (lên, xuống trang hình) Để dịch chuyển xa kết hợp phím phím Control (Ctrl, ^) nhƣ ^PgUp: đầu tệp, ^PgDn: cuối tệp − Chèn, xố, sửa: Phím Insert cho phép chuyển chế độ soạn thảo chèn đè Các phím Delete, Backspace cho phép xố kí tự vị trí trỏ trƣớc vị trí trỏ (xố lùi) − Các thao tác với khối dòng: Để đánh dấu khối dòng (thực chất khối kí tự liền bất kỳ) ta đƣa trỏ đến vị trí đầu ấn Ctrl-KB Ctrl-KK vị trí cuối Cũng thao tác nhanh cách giữ phím Shift dùng cácphím dịch chuyển trỏ quét từ vị trí đầu đến vị trí cuối, khối kí tự đuợc đánh dấu chuyển mầu Một khối đƣợc đánh dấu dùng để cắt, dán vào nơi khác văn xoá khỏi văn Để thực thao tác cắt dán, phải đƣa khối đánh dấu vào nhớ đệm nhóm phím ShiftDelete (cắt), sau dịch chuyển trỏ đến vị trí cần nội dung vừa cắt ấn tổ hợp phím Shift-Insert Một đoạn văn đƣợc ghi vào nhớ đệm đƣợc dán nhiều lần vào nhiều vị trí khác bằngcách lặp lại tổ hợp phím Shift-Insert vị trí khác văn Để xố khối dòng đánh dấu mà khơng ghi vào nhớ đệm, dùng tổ hợp phím Ctrl-Delete Khi nội dung ghi vào nhớ đệm xố (ghi đè) nội dung cũ có, cần cân nhắc để sử dụng phím Ctrl-Delete (xố khơng lƣu lại nội dung vừa xoá vào đệm) Shift-Delete (xoá lƣu lại nội dung vừa xoá) cách phù hợp − Tổ hợp phím Ctrl-A thuận lợi cần đánh dấu nhanh toàn văn c Chức tìm kiếm thay Chức dùng để dịch chuyển nhanh trỏ văn đến từ cần tìm Để thực tìm kiếm bấm Ctrl-QF, tìm kiếm thay bấm Ctrl-QA Vào từ nhóm từ cần tìm vào cửa sổ Find, nhóm thay (nếu dùng Ctrl-QA) vào cửa sổ Replace đánh dấu vào tuỳ chọn cửa sổ bên dƣới sau ấn Enter Các tuỳ chọn gồm: khơng phân biệt chữ hoa/thƣờng, tìm từ độc lập hay đứng từ khác, tìm tồn văn hay phần đƣợc đánh dấu, chiều tìm đến cuối hay ngƣợc đầu văn bản, thay có hỏi lại hay không hỏi lại … Để dịch chuyển trỏ đến vùng khác menu hay cửa sổ chứa tuỳ chọn ta sử dụng phím Tab d Các chức liên quan đến tệp − Ghi tệp lên đĩa: Chọn menu File\Save phím F2 Nếu tên tệp chƣa có (còn mang tên Noname.cpp) máy yêu cầu cho tên tệp Phần mở rộng tên tệp đƣợc mặc định CPP − Soạn thảo tệp mới: Chọn menu File\New Hiện cửa sổ soạn thảo trắng tên file tạm thời lấy Noname.cpp − Soạn thảo tệp cũ: Chọn menu File\Open ấn phím F3, nhập tên tệp dịch chuyển trỏ vùng danh sách tệp bên dƣới đến tên tệp cần soạn ấn Enter Cũng áp dụng cách để soạn tệp không nhập vào tên tệp cụ thể − Ghi tệp soạn thảo lên đĩa với tên mới: Chọn menu File\Save As nhập tên tệp vào ấn Enter e Chức dịch chạy chương trình − Ctrl-F9: Khởi động chức dịch chạy tồn chƣơng trình − F4: Chạy chƣơng trình từ đầu đến dòng lệnh (đang chứa trỏ) − F7: Chạy lệnh hàm main(), kể lệnh hàm − F8: Chạy lệnh hàm main() Khi lời gọi hàm đƣợc xem lệnh (không chạy lệnh hàm đƣợc gọi) Các chức liên quan đến dịch chƣơng trình đƣợc chọn thơng qua menuCompile (Alt-C) f Tóm tắt số phím nóng hay dùng − Các phím kích hoạt menu: Alt+chữ đại diện cho nhóm menu Ví dụ Alt-F mở menu File để chọn chức cụ thể nhƣ Open (mở file), Save (ghi file lên đĩa), Print (in nội dung văn chƣơng trình máy in), … Alt-C mở menu Compile để chọn chức dịch chƣơng trình − Các phím dịch chuyển trỏ soạn thảo − F1: mở cửa sổ trợ giúp Đây chức quan trọng giúp ngƣời lập trình nhớ tên lệnh, cú pháp cách sử dụng − F2: ghi tệp lên đĩa − F3: mở tệp cũ sửa chữa soạn thảo tệp − F4: chạy chƣơng trình đến vị trí trỏ − F5: Thu hẹp/mở rộng cửa sổ soạn thảo − F6: Chuyển đổi cửa sổ soạn thảo − F7: Chạy chƣơng trình theo lệnh, kể lệnh hàm − F8: Chạy chƣơng trình theo lệnh hàm − F9: Dịch liên kết chƣơng trình Thƣờng dùng chức để tìm lỗi cú pháp chƣơng trình nguồn trƣớc chạy − Alt-F7: Chuyển trỏ nơi gây lỗi trƣớc − Alt-F8: Chuyển trỏ đến lỗi − Ctrl-F9: Chạy chƣơng trình − Ctrl-Insert: Lƣu khối văn đƣợc đánh dấu vào nhớ đệm − Shift-Insert: Dán khối văn nhớ đệm vào văn vị trí trỏ − Shift-Delete: Xoá khối văn đƣợc đánh dấu, lƣu vào nhớ đệm − Ctrl-Delete: Xố khối văn đƣợc đánh dấu (không lƣu vào nhớ đệm) − Alt-F5: Chuyển sang cửa sổ xem kết chƣơng trình vừa chạy xong − Alt-X: C lại Windows B Dev C C Visual C++ 1.2 Thuật toán sơ đồ khối Khái niệm: thuật toán hay giải thuật dùng để phƣơng pháp hay cách thức (method) để giải vấn đề Sơ dồ khối: sử dụng khối để biểu diễn thuật toán Bài tập: Vẽ sơ đồ khối giải thuật giải phƣơng trình bậc ax+b=0 Vẽ sơ đồ khối giải thuật giải bất phƣơng trình bậc ax+b>0 Vẽ sơ đồ khối giải thuật giải phƣơng trình bậc hai ax2+bx+c=0 Vẽ sơ đồ khối giải thuật tìm ƣớc số chung lớn số nguyên dƣơng Vẽ sơ đồ khối giải thuật tìm số nhỏ số CHƢƠNG CÁC KHÁI NIỆM CƠ BẢN VỀ NGƠN NGỮ LẬP TRÌNH C 2.1 Các phần tử ngơn ngữ lập trình C 2.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 tốn để giải tố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ự, VIETNAM có ký tự Chú ý : Khi viết chƣơng trình, ta khơng đƣợc sử dụng ký tự khác ngồi ký tự Ví dụ nhƣ lập chƣơng trình giải phƣơng trình bậc hai ax +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 2.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ừ khố khai báo kiểu nguyên int INT 2.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 khố Độ 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-Source-Identifier length dùng TURBO C Ví dụ : Các tên : a_1 Các tên sai: delta x1 _step GAMA 3MN Ký tự số m#2 Sử dụng ký tự # f(x) Sử dụng dấu ( ) Trùng với từ khoá te ta Sử dụng dấu trắng Y-3 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 Trong 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 2.2 Cấu trúc chung chƣơng trình C Một chƣơng trình C đƣợc đặt nhiều file văn khác Mỗi file văn chứa số phần chƣơng trình Với chƣơng trình đơn giản ngắn thƣờng cần đặt chúng file Một chƣơng trình gồm nhiều hàm, hàm phụ trách công việc khác chƣơng trình Đặc biệt hàm có hàm có tên hàm main() Khi chạy chƣơng trình, câu lệnh hàm main() đƣợc thực Trong hàm main() có câu lệnh gọi đến hàm khác cần thiết, hàm chạy lại gọi đến hàm khác đƣợc viết chƣơng trình (trừ việc gọi quay lại hàm main()) Sau chạy đến lệnh cuối hàm main() chƣơng trình kết thúc Cụ thể, thơng thƣờng chƣơng trình gồm có nội dung sau: − Phần khai báo tệp nguyên mẫu: khai báo tên tệp chứa thành phần có sẵn (nhƣ chuẩn, kiểu chuẩn hàm chuẩn) mà NSD dùng chƣơng trình − Phần khai báo kiểu liệu, biến, NSD định nghĩa đƣợc dùng chung tồn chƣơng trình − Danh sách hàm chƣơng trình (do NSD viết, bao gồm hàm main()) Cấu trúc chi tiết hàm đƣợc đề cập đến chƣơng Dƣới đoạn chƣơng trình đơn giản gồm hàm hàm main() Nội dung chƣơng trình dùng in hình dòng chữ: Chào bạn, 2giờ #include // khai báo tệp nguyên mẫu để đƣợc sử dụng hàm printf, scanf void main() 10 Để thay đổi giải màu đƣợc định nghĩa bảng trên, ta sử dụng hàm : void setpalete(int số_thứ_tự_màu, int màu ); Ví dụ : Câu lệnh : setpalete(0,lightcyan); biến màu bảng màu thành màu xanh lơ nhạt Các màu khác không bị ảnh hƣởng Lấy giải màu thời : + Hàm getcolor trả mầu xác định thủ tục setcolor trƣớc + Hàm getbkcolor trả mầu xác định hàm setbkcolor trƣớc 7.2.2 Vẽ tơ màu : Có thể chia đƣờng hình thành bốn nhóm : Cung tròn hình tròn Đƣờng gấp khúc đa giác Đƣờng thẳng Hình chữ nhật 7.2.2.1 Cung tròn đƣờng tròn : Nhóm bao gồm : Cung tròn, đƣờng tròn, cung elip hình quạt Cung tròn : Để vẽ cung tròn ta dùng hàm : void arc(int x, int y, int gd, int gc, int r); Trong : (x,y) toạ độ tâm cung tròn gd góc đầu cung tròn(0 đến 360 độ) gc góc cuối cung tròn (gd đến 360 độ) r bán kính cung tròn Ví dụ : Vẽ cung tròn có tâm (100,50), góc đầu 0, góc cuối 180, bán kính 30 arc(100,50,0,180,30); Đƣờng tròn : Để vẽ đƣờng tròn ta dùng hàm : void circle(int x, int y, int r); 82 Trong : (x,y) toạ độ tâm cung tròn r bán kính đƣờng tròn Ví dụ : Vẽ đƣờng tròn có tâm (100,50) bán kính 30 circle(100,50,30); Cung elip Để vẽ cung elip ta dùng hàm : void ellipse(int x, int y, int gd, int gc, int xr, int yr); Trong : (x,y) toạ độ tâm cung elip gd góc đầu cung tròn(0 đến 360 độ) gc góc cuối cung tròn (gd đến 360 độ) xr bán trục nằm ngang yr bán trục thẳng đứng Ví dụ : Vẽ cung elip có tâm (100,50), góc đầu 0, góc cuối 180, bán trục ngang 30, bán trục đứng 20 ellipse(100,50,0,180,30,20); Hình quạt : Để vẽ tơ màu hình quạt ta dùng hàm : void pieslice(int x, int y, int gd, int gc, int r); Trong : (x,y) toạ độ tâm hình quạt gd góc đầu hình quạt (0 đến 360 độ) gc góc cuối hình quạt (gd đến 360 độ) r bán kính hình quạt Ví dụ : Chƣơng trình dƣới vẽ cung tròn góc phần tƣ thứ nhất, cung elip góc phần tƣ thứ ba, đƣờng tròn hình quạt qt từ 90 đến 360 độ # include "graphics.h" #include "stdio.h" #include "conio.h" main() { 83 int md=0,mode; initgraph(&md,&mode,"C:\\TC\\BGI"); setbkcolor(BLUE); setcolor(YELLOW); setfillstyle(SOLID_FILL,RED);; arc(160,50,0,90,45); circle(160,150,45); pieslice(480,150,90,360,45); getch(); closegraph(); } 7.2.3 Vẽ đƣờng gấp khúc đa giác : Vẽ đƣờng gấp khúc : Muốn vẽ đƣờng gấp khúc qua n điểm : (x1,y1), (x2,y2), , (xn,yn) trƣớc hết ta phải gán toạ độ (xi,yi) cho mảng a kiểu int theo nguyên tắc sau : Toạ độ x1 gán cho a[0] Toạ độ y1 gán cho a[1] Toạ độ x2 gán cho a[2] Toạ độ y2 gán cho a[3] Toạ độ xn gán cho a[2n-2] Toạ độ yn gán cho a[2n-1] Sau gọi hàm : drawpoly(n,a); Nếu điểm cuối (xn,yn) trùng với điểm đầu (x1,y1) ta nhận đƣợc đƣờng gấp khúc khép kín Tơ màu đa giác : Giả sử ta có a mảng đề cập đến mục trên, ta gọi hàm : fillpoly(n,a); vẽ tơ màu đa giác có đỉnh điểm (x1,y1), (x2,y2), , (xn,yn) Ví dụ : Vẽ đƣờng gấp khúc hai đƣờng tam giác #include "graphics.h" #include "stdio.h" #include "conio.h" 84 int poly1[]={5,200,190,5,100,300}; int poly2[]={205,200,390,5,300,300}; int poly3[]={405,200,590,5,500,300,405,200}; main() { int md=0,mode; initgraph(&md,&mode,"C:\\TC\\BGI"); setbkcolor(CYAN); setcolor(YELLOW); setfillstyle(SOLID_FILL,MAGENTA); drawpoly(3,poly1); fillpoly(3,poly2); fillpoly(4,poly3); getch(); closegraph(); } Vẽ đƣờng thẳng : Để vẽ đƣờng thẳng nối hai điểm có toạ độ (x1,y1) (x2,y2) ta sử dụng hàm sau : void line(int x1, int y1, int x2, int y2); Con chạy đồ hoạ giữ nguyên vị trí Để vẽ đƣờng thẳng nối từ điểm chạy đồ hoạ đến điểm bất có toạ độ (x,y) ta sử dụng hàm sau : void lineto(int x, int y); Con chạy chuyển đến vị trí (x,y) Để vẽ đƣờng thẳng từ ví trí chạy ( giả sử điểm x,y ) đến điểm có toạ độ (x+dx,y+dy) ta sử dụng hàm sau : void linerel(int dx, int dy); Con chạy chuyển đến vị trí (x+dx,y+dy) Di chuyển chạy đồ hoạ : Để di chuyển chạy đến vị trí (x,y), ta sử dụng hàm sau : void moveto(int x, int y); Chọn kiểu đƣờng : Hàm void setlinestyle(int kiểu_đƣờng, int mẫu, int độ_dày); 85 tác động đến nét vẽ thủ tục vẽ đƣờng line, lineto,linerel , circle, rectangle (hàm vẽ hình chữ nhật, ta học phần vẽ miền dƣới) Hàm cho phép ta xác định ba yếu tố vẽ đƣờng thẳng, : Kiểu đƣờng, bề dày mẫu tự tạo Dạng đƣờng tham số kiểu_đƣờngxác định Bảng dƣới cho giá trị kiểu_đƣờng : Tên Giá trị số Kiểu đƣờng SOLID_LINE Nét liền DOTTED_LINE Nét chấm CENTER_LINE Nét chấm gạch DASHED_LINE Nét gạch USERBIT_LINE Mẫu tự tạo Bề dày đƣờng vẽ tham số độ_dày xác định, bảng dƣới cho giá trị độ_dày : Tên Giá trị số Bề dày NORM_WIDTH Bề dày bình thƣờng THICK_WIDTH Bề dày gấp ba Mẫu tự tạo : Nếu tham số thứ USERBIT_LINE ta tạo mẫu đƣờng thẳng tham số mẫu Ví dụ ta xét đoạn chƣơng trình : int pattern = 0x1010; setlinestile(USERBIT_LINE,pattern,NORM_WIDTH); line(0,0,100,200); Giá trị pattern hệ 16 1010, hệ : 0001 0000 0001 0000 Bit cho điểm sáng, bit làm tắt điểm ảnh Ví dụ : Chƣơng trình vẽ đƣờng gấp khúc đoạn thẳng Đƣờng gấp khúc qua đỉnh sau : (20,20),(620,20),(620,180),(20,180) (320,100) #include "graphics.h" #include "stdio.h" #include "conio.h" main() { int mh=0, mode; 86 initgraph(&mh,&mode,"C:\\TC\\BGI"); setbkcolor(BLUE); setcolor(YELLOW); setlinestyle(SOLID-LINE,0,THICK_WIDTH); moveto(320,100); /* chạy vị trí ( 320,100 ) */ line(20,20,620,20); /* chạy vị trí ( 320,100 ) */ linerel(-300,80); lineto(620,180); lineto(620,20); getch(); closegraph(); } 7.2.4 Vẽ điểm, miền : Vẽ điểm : Hàm : void putpixel(int x, int y, int color); tô điểm (x,y) theo mầu xác định color Hàm : unsigned getpixel(int x, int y); trả số hiệu mầu điểm ảnh vị trí (x,y) Chú ý : Nếu điểm chƣa đƣợc tô màu hàm vẽ hàm putpixel (mà đƣợc tạo màu setbkcolor) hàm cho giá trị Tơ miền : Để tơ màu cho miền hình, ta dùng hàm sau : void floodfill(int x, int y, int border); : (x,y) toạ độ điểm gọi điểm gieo Tham số border chứa mã màu Sự hoạt động hàm floodfill phụ thuộc vào giá trị x,y,border trạng thái hình + Khi hình có đƣờng cong khép kín đƣờng gấp khúc khép kín mà mã màu giá trị border : - Nếu điểm gieo (x,y) nằm miền miền giới hạn phía đƣờng đƣợc tơ màu - Nếu điểm gieo (x,y) nằm ngồi miền miền phía ngồi đƣờng đƣợc tơ màu 87 + Trong trƣờng hợp hình khơng có đƣờng cong nhƣ hình đƣợc tơ màu Ví dụ : Vẽ đƣờng tròn màu đỏ hình màu xanh Toạ độ (x,y) điểm gieo đƣợc nạp từ bàn phím Tuỳ thuộc giá trị cụ thể x,y chƣơng trình tơ màu vàng cho hình tròn phần hình bên ngồi hình tròn #include "graphics.h" #include "stdio.h" main() { int mh=mode=0, x, y; printf("\nVao toa x,y:"); scanf("%d%d",&x,&y); initgraph(&mh,&mode,""); if (graphresult != grOk) exit(1); setbkcolor(BLUE); setcolor(RED); setfillstyle(11,YELLOW); circle(320,100,50); moveto(1,150); floodfill(x,y,RED); closegraph(); } 7.3 Các hàm vẽ hình 7.3.1 Hình chữ nhật : Hàm : void rectangle(int x1, int y1, int x2, int y2); vẽ hình chữ nhật có cạnh song song với cạnh hình Toạ độ đỉnh trái hình chữ nhật (x1,y1) toạ độ đỉnh phải dƣới hành chữ nhật (x2,y2) Hàm : void bar(int x1, int y1, int x2, int y2); vẽ tơ màu hình chữ nhật Toạ độ đỉnh trái hình chữ nhật (x1,y1) toạ độ đỉnh phải dƣới hành chữ nhật (x2,y2) 88 Hàm : void bar3d(int x1, int y1, int x2, int y2, int depth, int top); vẽ khối hộp chữ nhật, mặt ngồi hình chữ nhật xác định toạ độ (x1,y1), (x2,y2) Hình chữ nhật đƣợc tơ màu thơng qua hàm setfillstyle Tham số depth xác định số điểm ảnh bề sâu khối chiều Tham số top nhận giá trị hay khối chiều tƣơng ứng có nắp khơng top=1 top=0 Ví dụ : Chƣơng trình dƣới tạo nên hình chữ nhật, khối hình chữ nhật hình hộp có nắp : #include "graphics.h" main() { int mh=mode=0; initgraph(&mh,&mode,""); if (graphresult != grOk) exit(1); setbkcolor(GREEN); setcolor(RED); setfillstyle(CLOSE_DOT_FILL,YELLOW); rectangle(5,5,300,160); bar(3,175,300,340); bar3d(320,100,500,340,100,1); closegraph(); } 7.3.2 Cửa sổ (Viewport) : Thiết lập viewport : Viewport vùng chữ nhật hình đồ hoạ Để thiết lập viewport ta dùng hàm : void setviewport(int x1, int y1, int x2, int y2, int clip); (x1,y1) toạ độ góc bên trái, (x2,y2) toạ độ góc dƣới bên phải Bốn giá trị phải thoả mãn : 89 x1 x2 y1 y2 Tham số clip nhận hai giá trị : clip=1 khơng cho phép vẽ ngồi viewport clip=0 cho phép vẽ ngồi viewport Ví dụ : setviewport(100,50,200,150,1); Lập nên vùng viewport hình chữ nhật có toạ độ góc trái cao (100,50) toạ độ góc phải thấp (200,150) (là toạ độ trƣớc đặt viewport) Chú ý : Sau lập viewport, ta có hệ toạ độ mà góc bên trái có toạ độ (0,0) Nhận diện viewport hành : Để nhận viewport thời ta dùng hàm : void getviewsetting(struct viewporttype *vp); kiểu viewporttype đƣợc định nghĩa nhƣ sau : struct viewporttype { int left,top,right,bottom; int clip; }; Xóa viewport : Sử dụng hàm : void clearviewport(void); Xố hình, đƣa chạy tạo độ (0,0) hình : Sử dụng hàm : void cleardevice(void); Toạ độ âm dƣơng : Nhờ sử dụng viewport viết chƣơng trình đồ hoạ theo toạ độ âm dƣơng Muốn ta thiết lập viewport cho clip để vẽ giới hạn viewport Sau đoạn chƣơng trình thực cơng việc : int xc,yc; xc=getmaxx()/2; yc=getmaxy()/2; 90 setviewport(xc,yc,getmaxx(),getmaxy(),0); Nhƣ thế, hình đƣợc chia làm bốn phần với toạ độ âm dƣơng nhƣ sau : Phần tƣ trái : x âm, y âm x : từ -getmaxx()/2 đến y : từ -getmaxy()/2 đến Phần tƣ trái dƣới : x âm, y dƣơng x : từ -getmaxx()/2 đến y : từ đến getmaxy()/2 Phần tƣ phải : x dƣơng, y âm x : từ đến getmaxx()/2 y : từ -getmaxy()/2 đến Phần tƣ phải dƣới : x dƣơng, y dƣơng x : từ đến getmaxx()/2 y : từ đến getmaxy()/2 Ví dụ : Chƣơng trình vẽ đồ thị hàm sin x hệ trục toạ độ âm dƣơng Hoành độ x lấy giá trị từ -4 đến 4 Trong chƣơng trình có sử dụng hai hàm settextjustify outtextxy ta đề cập phần sau #include "graphics.h" #include "conio.h" #include "math.h" #define TYLEX 20 #define TYLEY 60 main() { int mh=mode=DETECT; int x,y,i; initgraph(mh,mode,""); if (graphresult!=grOK ) exit(1); setviewport(getmaxx()/2,getmaxy()/2,getmaxx(),getmaxy(),0); setbkcolor(BLUE); setcolor(YELLOW); line(-getmaxx()/2,0,getmaxx()/2,0); line(0,-getmaxy()/2,0,getmaxy()/2,0); settextjustify(1,1); 91 setcolor(WHITE); outtextxy(0,0,"(0,0)"); for (i=-400;i5 triệu vào file hình Đề Câu 1: Nhập vào ma trận vuông cỡ n In phần tử lớn hàng ma trận Câu 2: Nhập vào danh sách gồm n sinh viên (có thơng tin: họ tên, mã số, điểm trung bình) Sắp xếp danh sách theo họ tên in kết hình Đề Câu 1: Nhập vào dãy số thực có n phần tử Tìm phần tử lớn dãy vị trí Câu 2: Nhập vào danh sách gồm n sinh viên (có thơng tin: họ tên, mã số, điểm trung bình) Tìm sinh viên có tên xyz đó, với xyz tên nhập vào từ bàn phím Đề Câu 1: Tìm tất số nguyên tố đoạn [n, m] Ghi kết tìm đƣợc vào file Câu 2: Nhập vào danh sách gồm n nhân viên (có thơng tin: tên nhân viên, hệ số lƣơng, địa chỉ) Tính lƣơng cho nhân viên theo công thức lƣơng nhân viên=hệ số lƣơng * 730000 In danh sách nhân viên có lƣơng năm >50 triệu vào file hình 95 TÀI LIỆU THAM KHẢO Các tài liệu tiếng Việt : 1.1 Ngơ Trung Việt - Ngơn ngữ lập trình C C++ - Bài giảng- Bài tập - Lời giải mẫu NXB giao thông vận tải 1995 1.2 Viện tin học - Ngơn ngữ lập trình C Hà nội 1990 1.3 Lê Văn Doanh - 101 thuật tốn chƣơng trình ngôn ngữ C Các tài liệu tiếng Anh : 2.1 B Kernighan and D Ritchie - The C programming language Prentice Hall 1989 2.2 Programmer's guide Borland C++ Version 4.0 Borland International, Inc 1993 2.3 Bile - Nabaiyoti - TURBO C++ The Waite Group's UNIX 1991 96