Bài giảng Kỹ thuật lập trình C
MỤC LỤC
MỤC LỤC . 2
CHƢƠNG 1. GIỚI THIỆU . 6
1.1. Giới thiệu ngôn ngữ lập trình C. . 6
1.2. Thuật toán và sơ đồ khối . 8
CHƢƠNG 2. CÁC KHÁI NIỆM CƠ BẢN VỀ NGÔN NGỮ LẬP TRÌNH C . 9
2.1. Các phần tử cơ bản của ngôn ngữ lập trình C. . 9
2.2. Cấu trúc chung của chƣơng trình C . 10
2.3. Các bƣớc cơ bản khi lập chƣơng trình . 11
2.4. Các kiểu dữ liệu cơ sở . 12
2.5. Các khai báo trong 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 3. 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 dữ liệu ra màn hình . 25
3.3. Hàm nhập dữ 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 và nhãn ( label ) . 38
CHƢƠNG 4. HÀM CHƢƠNG TRÌNH VÀ CẤU TRÚC CHƢƠNG TRÌNH. . 39
4.1. Khái niệm về chƣơng trình con . 39
4.2. Hàm trong C . 39
4.3. Chuyển tham số cho hàm. 41
4.4. Biến toàn cục và biến địa phƣơng . 41
4.5.Tính đệ quy của hàm . 42
4.6. Bộ tiền xử lý C . 46
CHƢƠNG 5. 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 6. DỮ LIỆU KIỂU TỆP . 67
6.1. Khái niệm về tệp tin . 67
6.2. Cấu trúc và phân loại tệp . 67
3
6.3. Tạo tệp mới để đọc/ghi dữ liệu . 68
6.4. Một số hàm xử lý tệp của C . 70
6.5. Bài tập áp dụng . 77
CHƢƠNG 7. ĐỒ 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 cơ bản. 88
TÀI LIỆU THAM KHẢO . 96
nh chữ nhật : Hàm : void rectangle(int x1, int y1, int x2, int y2); sẽ vẽ một hình chữ nhật có các cạnh song song với các cạnh của màn hình. Toạ độ đỉnh trái trên của hình chữ nhật là (x1,y1) và toạ độ đỉnh phải dƣới của hành chữ nhật là (x2,y2). Hàm : void bar(int x1, int y1, int x2, int y2); sẽ vẽ và tô màu một hình chữ nhật. Toạ độ đỉnh trái trên của hình chữ nhật là (x1,y1) và toạ độ đỉnh phải dƣới của hành chữ nhật là (x2,y2). 89 Hàm : void bar3d(int x1, int y1, int x2, int y2, int depth, int top); sẽ vẽ một khối hộp chữ nhật, mặt ngoài của nó là hình chữ nhật xác định bởi các toạ độ (x1,y1), (x2,y2). Hình chữ nhật này đƣợc tô màu thông qua hàm setfillstyle . Tham số depth xác định số điểm ảnh trên bề sâu của khối 3 chiều. Tham số top có thể nhận các giá trị 1 hay 0 và khối 3 chiều tƣơng ứng sẽ có nắp hoặc không. Ví dụ : Chƣơng trình dƣới đây tạo nên một hình chữ nhật, một khối hình chữ nhật và mộ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 là một vùng chữ nhật trên màn 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); trong đó (x1,y1) là toạ độ góc trên bên trái, (x2,y2) là toạ độ góc dƣới bên phải. Bốn giá trị này vì thế phải thoả mãn : top=1 top=0 90 0 x1 x2 0 y1 y2 Tham số clip có thể nhận một trong hai giá trị : clip=1 không cho phép vẽ ra ngoài viewport. clip=0 cho phép vẽ ra ngoài viewport. Ví dụ : setviewport(100,50,200,150,1); Lập nên một vùng viewport hình chữ nhật có toạ độ góc trái cao là (100,50) và toạ độ góc phải thấp là (200,150) (là toạ độ trƣớc khi đặt viewport). Chú ý : Sau khi lập viewport, ta có hệ toạ độ mới mà góc trên bên trái sẽ có toạ độ (0,0). Nhận diện viewport hiện hành : Để nhận viewport hiện thời ta dùng hàm : void getviewsetting(struct viewporttype *vp); ở đây 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); Xoá màn hình, đƣa con chạy về tạo độ (0,0) của màn hình : Sử dụng hàm : void cleardevice(void); Toạ độ âm dƣơng : Nhờ sử dụng viewport có thể viết các chƣơng trình đồ hoạ theo toạ độ âm dƣơng. Muốn vậy ta thiết lập viewport và cho clip bằng 0 để có thể vẽ ra ngoài giới hạn của viewport. Sau đây là đoạn chƣơng trình thực hiện công việc trên : int xc,yc; xc=getmaxx()/2; yc=getmaxy()/2; 91 setviewport(xc,yc,getmaxx(),getmaxy(),0); Nhƣ thế, màn hình sẽ đƣợc chia làm bốn phần với toạ độ âm dƣơng nhƣ sau : Phần tƣ trái trên : x âm, y âm. x : từ -getmaxx()/2 đến 0. y : từ -getmaxy()/2 đến 0. Phần tƣ trái dƣới : x âm, y dƣơng. x : từ -getmaxx()/2 đến 0. y : từ 0 đến getmaxy()/2. Phần tƣ phải trên : x dƣơng, y âm. x : từ 0 đến getmaxx()/2. y : từ -getmaxy()/2 đến 0. Phần tƣ phải dƣới : x dƣơng, y dƣơng. x : từ 0 đến getmaxx()/2. y : từ 0 đến getmaxy()/2. Ví dụ : Chƣơng trình vẽ đồ thị hàm sin x trong hệ trục toạ độ âm dƣơng. Hoành độ x lấy các giá trị từ -4 đến 4. Trong chƣơng trình có sử dụng hai hàm mới là settextjustify và outtextxy ta sẽ đề cập ngay trong 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); 92 setcolor(WHITE); outtextxy(0,0,"(0,0)"); for (i=-400;i<=400;++i) { x=floor(2*M_PI*i*TYLEX/200); y=floor(sin(2*M_PI*i/200)*TYLEY); putpixel(x,y,WHITE); } getch(); closegraph(); } 7.3.3. Xử lý văn bản trên màn hình đồ hoạ Hiển thị văn bản trên màn hình đồ hoạ : Hàm : void outtext(char *s); cho hiện chuỗi ký tự ( do con trỏ s trỏ tới ) tại vị trí con trỏ đồ hoạ hiện thời. Hàm : void outtextxy(int x, int y,char *s); cho hiện chuỗi ký tự ( do con trỏ s trỏ tới ) tại vị trí (x,y). Ví dụ : Hai cách viết dƣới đây : outtextxy(50,50," Say HELLO"); và moveto(50,50); outtext(" Say HELLO"); cho cùng kết quả. Sử dụng các Fonts chữ : Các Fonts chữ nằm trong các tập tin *.CHR trên đĩa. Các Fonts này cho các kích thƣớc và kiểu chữ khác nhau, chúng sẽ đƣợc hiển thị lên màn hình bằng các hàm outtext và outtextxy. Để chọn và nạp Fonts ta dùng hàm : void settextstyle(int font, int direction, int charsize); Tham số font để chọn kiểu chữ và nhận một trong các hằng sau : DEFAULT_FONT=0 TRIPLEX_FONT=1 SMALL_FONT=2 93 SANS_SERIF_FONT=3 GOTHIC_FONT=4 Tham số derection để chọn hƣớng chữ và nhận một trong các hằng sau : HORIZ_DIR=0 văn bản hiển thị theo hƣớng nằm ngang từ trái qua phải. VERT_DIR=1 văn bản hiển thị theo hƣớng thẳng đứng từ dƣới lên trên. Tham số charsize là hệ số phóng to của ký tự và có giá trị trong khoảng từ 1 đến 10. Khi charsize=1, font hiển thị trong hình chữ nhật 8*8 pixel. Khi charsize=2 font hiển thị trong hình chữ nhật 16*16 pixel. ............ Khi charsize=10, font hiển thị trong hình chữ nhật 80*80 pixel. Các giá trị do settextstyle lập ra sẽ giữ nguyên tới khi gọi một settextstyle mới. Ví dụ : Các dòng lệnh : settextstyle(3,VERT_DIR,2); outtextxy(30,30,"GODS TRUST YOU"); sẽ hiển thị tại vị trí (30,30) dòng chữ GODS TRUST YOU theo chiều từ dƣới lên trên, font chữ chọn là SANS_SERIF_FONT và cỡ chữ là 2. Đạt vị trí hiển thị của các xâu ký tự cho bởi outtext và outtextxy : Hàm settextjustify cho phép chỉ định ra nơi hiển thị văn bản của outtext theo quan hệ với vị trí hiện tại của con chạy và của outtextxy theo quan hệ với toạ độ (x,y); Hàm này có dạng sau : void settextjustify(int horiz, int vert); Tham số horiz có thể là một trong các hằng số sau : LEFT_TEXT=0 ( Văn bản xuất hiện bên phải con chạy). CENTER_TEXT ( Chỉnh tâm văn bản theo vị trí con chạy). RIGHT_TEXT (Văn bản xuất hiện bên trái con chạy). Tham số vert có thể là một trong các hằng số sau : BOTTOM_TEXT=0 ( Văn bản xuất hiện phía trên con chạy). CENTER_TEXT=1 ( Chỉnh tâm văn bản theo vị trí con chạy). TOP_TEXT=2 ( Văn bản xuất hiện phía dƣới con chạy). Ví dụ : settextjustify(1,1); outtextxy(100,100,"ABC"); sẽ cho dòng chữ ABC trong đó điểm (100,100) sẽ nằm dƣới chữ B. Bề rộng và chiều cao văn bản : 94 Chiều cao : Hàm : textheight(char *s); cho chiều cao ( tính bằng pixel ) của chuỗi do con trỏ s trỏ tới. Ví dụ 1 : Với font bit map và hệ số phóng đại là 1 thì textheight("A") ch giá trị là 8. Ví dụ 2 : #include "stdio.h" #include "graphics.h" main() { int mh=mode=DETECT, y,size; initgraph(mh,mode,"C:\\TC\\BGI"); y=10; settextjustify(0,0); for (size=1;size<5;++size) { settextstyle(0,0,size); outtextxy(0,y,"SACRIFICE"); y+=textheight("SACRIFICE")+10; } getch(); closegraph(); } Bề rộng : Hàm : textwidth(char *s); cho bề rộng chuỗi ( tính theo pixel ) mà con trỏ s trỏ tới dựa trên chiều dài chuỗi, kích thƣớc font chữ, hệ số phóng đại. Bài tập: 1. Vẽ và tô màu các hình cơ bản 2. Vẽ hình tròn rồi cho chạy đi chạy lại trên màn hình Một số đề thi mẫu Đề 1 Câu 1: Viết chƣơng trình nhập vào một dãy số gồm n phần tử. In các số đã nhập ra màn hình và tính tổng các số chẵn trong dãy. 95 Câu 2: Viết chƣơng trình nhập vào một danh sách gồm n sinh viên (có các thông tin: họ tên, mã số, điểm trung bình). In danh sách ban đầu và các sinh viên có điểm trung bình >7 ra màn hình. Đề 2 Câu 1: Nhập vào một ma trận có n hàng, m cột. Tính tổng các phần tử trên đƣờng chéo chính. In kết quả vào file. Câu 2: Nhập vào một danh sách gồm n nhân viên (có các thông tin: tên nhân viên, hệ số lƣơng, địa chỉ). Tính lƣơng cho các nhân viên theo công thức lƣơng nhân viên=hệ số lƣơng * 730000. In danh sách các nhân viên có lƣơng >5 triệu vào file và ra màn hình. Đề 3 Câu 1: Nhập vào một ma trận vuông cỡ n. In ra các phần tử lớn nhất của từng hàng trong ma trận. Câu 2: Nhập vào một danh sách gồm n sinh viên (có cá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 và in kết quả ra màn hình. Đề 4 Câu 1: Nhập vào một dãy số thực có n phần tử. Tìm phần tử lớn nhất trong dãy và vị trí của nó. Câu 2: Nhập vào một danh sách gồm n sinh viên (có các thông tin: họ tên, mã số, điểm trung bình). Tìm sinh viên có tên là xyz nào đó, với xyz là tên bất kỳ nhập vào từ bàn phím. Đề 5 Câu 1: Tìm tất cả các số nguyên tố trong đoạn [n, m]. Ghi kết quả tìm đƣợc vào một file. Câu 2: Nhập vào một danh sách gồm n nhân viên (có các thông tin: tên nhân viên, hệ số lƣơng, địa chỉ). Tính lƣơng cho các nhân viên theo công thức lƣơng nhân viên=hệ số lƣơng * 730000. In danh sách các nhân viên có lƣơng một năm >50 triệu vào file và ra màn hình. 96 TÀI LIỆU THAM KHẢO 1. Các tài liệu tiếng Việt : 1.1. Ngô Trung Việt - Ngôn ngữ lập trình C và 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 toán và chƣơng trình bằng ngôn ngữ C 2. 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
File đính kèm:
- Bài giảng Kỹ thuật lập trình C.pdf