Giáo trình Ngôn ngữ lập trình C - Nguyễn Hữu Tuấn

Tóm tắt Giáo trình Ngôn ngữ lập trình C - Nguyễn Hữu Tuấn: ... float a,b,max; printf("\n Cho a="); scanf("%f",&a); printf("\n Cho b="); scanf("%f",&b); max=a; if (b>max) max=b; printf(" \n Max cua hai so a=%8.2f va b=%8.2f la Max=%8.2f",a,b,max); } #include "stdio.h" main() { float a,b,max; printf("\n Cho a="); sca...thể xâm nhập vào đối t−ợng gián tiếp qua con trỏ. Giả sử x là một biến kiểu int, và giả sử px là con trỏ đ−ợc tạo ra theo một cách nào đó. Phép toán một ngôi & sẽ cho địa chỉ của đối t−ợng, nên câu lệnh : px=&x; sẽ gán địa chỉ của biến x cho trỏ px, và px bây giờ đ−ợc gọi là " trỏ tới biến x...u trúc tự trỏ person: Cách 1 : typedef struct pp { char ht[20]; char qq[25]; int tuoi; struct pp *tiep; } person; Cách 2 : typedef struct pp person struct pp { char ht[20]; char qq[25]; int tuoi; person *tiep; }; Cách 3 : struct pp { char ht[20...

pdf144 trang | Chia sẻ: havih72 | Lượt xem: 196 | Lượt tải: 1download
Nội dung tài liệu Giáo trình Ngôn ngữ lập trình C - Nguyễn Hữu Tuấn, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
phần t− thứ ba, một đ−ờng tròn và một hình quạt quét từ 90 đến 360 độ. 
# include "graphics.h" 
#include "stdio.h" 
#include "conio.h" 
main() 
 { 
 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(); 
 } 
123 
10.2.3. Vẽ đ−ờng gấp khúc và đa giác : 
• Vẽ đ−ờng gấp khúc : 
 Muốn vẽ đ−ờng gấp khúc đi qua n điểm : (x1,y1), (x2,y2), ...., (xn,yn) thì tr−ớc hết ta phải 
gán các toạ độ (xi,yi) cho một mảng a kiểu int nào đó 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 cùng (xn,yn) trùng với điểm đầu (x1,y1) thì ta nhận đ−ợc một đ−ờng gấp 
khúc khép kín. 
• Tô màu đa giác : 
 Giả sử ta có a là mảng đã đề cập đến trong mục trên, khi đó ta gọi hàm : 
 fillpoly(n,a); 
sẽ vẽ và tô màu một đa giác có đỉnh là các điểm (x1,y1), (x2,y2), ...., (xn,yn) 
Ví dụ : 
 Vẽ một đ−ờng gấp khúc và hai đ−ờng tam giác. 
#include "graphics.h" 
#include "stdio.h" 
#include "conio.h" 
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"); 
124 
 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 bất kỳ có toạ độ (x1,y1) và (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 con chạy đồ hoạ đến một điểm bất có toạ độ (x,y) ta sử 
dụng hàm sau : 
 void lineto(int x, int y); 
Con chạy sẽ chuyển đến vị trí (x,y). 
Để vẽ một đ−ờng thẳng từ ví trí con chạy hiện tại ( giả sử là đ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 sẽ chuyển đến vị trí (x+dx,y+dy). 
• Di chuyển con chạy đồ hoạ : 
 Để di chuyển con 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); 
tác động đến nét vẽ của các thủ tục vẽ đ−ờng line, lineto,linerel , circle, rectangle (hàm vẽ hình 
chữ nhật, ta sẽ học trong phần vẽ miền ở d−ới). 
 Hàm này sẽ cho phép ta xác định ba yếu tố khi vẽ đ−ờng thẳng, đó là : Kiểu đ−ờng, bề 
dày và mẫu tự tạo. 
125 
 Dạng đ−ờng do tham số kiểu_đ−ờng xác định. Bảng d−ới đây cho các giá trị khả dĩ 
của kiểu_đ−ờng : 
Tên hằng Giá trị số Kiểu đ−ờng 
SOLID_LINE 0 Nét liền 
DOTTED_LINE 1 Nét chấm 
CENTER_LINE 2 Nét chấm gạch 
DASHED_LINE 3 Nét gạch 
USERBIT_LINE 4 Mẫu tự tạo 
 Bề dày của đ−ờng vẽ do tham số độ_dày xác định,. bảng d−ới đây cho các giá trị khả dĩ 
của độ_dày : 
Tên hằng Giá trị số Bề dày 
NORM_WIDTH 1 Bề dày bình th−ờng 
THICK_WIDTH 3 Bề dày gấp ba 
 Mẫu tự tạo : Nếu tham số thứ nhất là USERBIT_LINE thì ta có thể tạo ra mẫu đ−ờng 
thẳng bằ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ị của pattern trong hệ 16 là 1010, trong hệ 2 là : 
 0001 0000 0001 0000 
Bit 1 sẽ cho điểm sáng, bit 0 sẽ làm tắt điểm ảnh. 
Ví dụ : 
 Ch−ơng trình vẽ một đ−ờng gấp khúc bằng các đoạn thẳng. Đ−ờng gấp khúc đi qua các 
đỉnh sau : 
 (20,20),(620,20),(620,180),(20,180) và (320,100) 
#include "graphics.h" 
#include "stdio.h" 
#include "conio.h" 
main() 
 { 
 int mh=0, mode; 
126 
 initgraph(&mh,&mode,"C:\\TC\\BGI"); 
 setbkcolor(BLUE); 
 setcolor(YELLOW); 
 setlinestyle(SOLID-LINE,0,THICK_WIDTH); 
 moveto(320,100); /* con chạy ở vị trí ( 320,100 ) */ 
 line(20,20,620,20); /* con chạy vẫn ở vị trí ( 320,100 ) */ 
 linerel(-300,80); 
 lineto(620,180); 
 lineto(620,20); 
 getch(); 
 closegraph(); 
 } 
10.2.4. Vẽ điểm, miền : 
• Vẽ điểm : 
 Hàm : 
 void putpixel(int x, int y, int color); 
sẽ tô điểm (x,y) theo mầu xác định bởi color. 
Hàm : 
 unsigned getpixel(int x, int y); 
sẽ trả về số hiệu mầu của điểm ảnh ở vị trí (x,y). 
Chú ý : 
 Nếu điểm này ch−a đ−ợc tô màu bởi các hàm vẽ hoặc hàm putpixel (mà chỉ mới đ−ợc tạo 
màu nền bởi setbkcolor) thì hàm cho giá trị 0. 
• Tô miền : 
 Để tô màu cho một miền nào đó trên màn hình, ta dùng hàm sau : 
 void floodfill(int x, int y, int border); 
ở đây : 
 (x,y) là toạ độ của một điểm nào đó gọi là điểm gieo. 
 Tham số border chứa mã của màu. 
Sự hoạt động của hàm floodfill phụ thuộc vào giá trị của x,y,border và trạng thái màn hình. 
127 
+ Khi trên màn hình có một đ−ờng cong khép kín hoặc đ−ờng gấp khúc khép kín mà mã màu của 
nó bằng giá trị của border thì : 
 - Nếu điểm gieo (x,y) nằm trong miền này thì miền giới hạn phía trong đ−ờng sẽ đ−ợc tô 
màu. 
 - Nếu điểm gieo (x,y) nằm ngoài miền này thì miền phía ngoài đ−ờng sẽ đ−ợc tô màu. 
+ Trong tr−ờng hợp khi trên màn hình không có đ−ờng cong nào nh− trên thì cả màn hình sẽ đ−ợc 
tô màu. 
Ví dụ : 
 Vẽ một đ−ờng tròn màu đỏ trên màn hình màu xanh. Toạ độ (x,y) của điểm gieo đ−ợc nạp 
từ bàn phím. Tuỳ thuộc giá trị cụ thể của x,y ch−ơng trình sẽ tô màu vàng cho hình tròn hoặc phần 
màn hình bên ngoài hình tròn. 
#include "graphics.h" 
#include "stdio.h" 
main() 
 { 
 int mh=mode=0, x, y; 
 printf("\nVao toa do 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(); 
 } 
10.2.5. Hình chữ nhật : 
• Hàm : 
 void rectangle(int x1, int y1, int x2, int y2); 
128 
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). 
• 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); 
 top=1 top=0 
129 
 rectangle(5,5,300,160); 
 bar(3,175,300,340); 
 bar3d(320,100,500,340,100,1); 
 closegraph(); 
 } 
10.2.6. 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 : 
 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; 
130 
 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; 
 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ụ : 
131 
 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ừ -4pi đến 4pi. 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); 
 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(); 
 } 
10.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ạ : 
132 
 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 
 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. 
133 
 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 : 
Chiều cao : 
134 
 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. 
135 
Mục lục 
Giới thiệu 
Ch−ơng 1 
Các khái niệm cơ bản 
1.1. Tập ký tự dùng trong ngôn ngữ C 
1.2. Từ khoá 
1.3. Tên 
1.4. Kiểu dữ liệu 
1.4.1. Kiểu ký tự (char) 
1.4.2. Kiểu nguyên 
1.4.3. Kiểu dấu phảy động 
1.5. Định nghĩa kiểu bằng TYPEDEF 
1.5.1. Công dụng 
1.5.2. Cách viết 
1.6. Hằng 
1.6.1. Tên hằng 
1.6.2. Các loại hằng 
1.6.2.1. Hằng int 
1.6.2.2. Hằng long 
1.6.2.3. Hằng int hệ 8 
1.6.2.4. Hằng int hệ 16 
1.6.2.5. Hằng ký tự 
1.6.2.5. Hằng xâu ký tự 
1.7. Biến 
1.8. Mảng 
Ch−ơng 2 
Các lệnh vào ra 
2.1. Thâm nhập vào th− viện chuẩn 
2.2. Các hàm vào ra chuẩn - getchar() và putchar() 
2.2.1. Hàm getchar() 
2.2.2. Hàm putchar() 
2.2.3. Hàm getch() 
136 
2.2.4. Hàm putch() 
2.3. Đ−a kết quả lên màn hình - hàm printf 
2.4. Vào số liệu từ bàn phím - hàm scanf 
2.5. Đ−a kết quả ra máy in 
Ch−ơng 3 
Biểu thức 
3.1. Biểu thức 
3.2. Lệnh gán và biểu thức 
3.3. Các phép toán số học 
3.4. Các phép toán quan hệ và logic 
3.5. Phép toán tăng giảm 
3.6. Thứ tự −u tiên các phép toán 
3.7. Chuyển đổi kiểu giá trị 
Ch−ơng 4 
Cấu trúc cơ bản của ch−ơng trình 
4.1. Lời chú thích 
4.2. Lệnh và khối lệnh 
4.2.1. Lệnh 
4.2.2. Khối lệnh 
4.3. Cấu trúc cơ bản của ch−ơng trình 
4.4. Một số qui tắc cần nhớ khi viết ch−ơng trình 
Ch−ơng 5 
Cấu trúc điều khiển 
5.1. Cấu trúc có điều kiện 
5.1.1. Lệnh if-else 
5.1.2. Lệnh else-if 
5.2. Lệnh nhảy không điều kiện - toán tử goto 
5.3. Cấu trúc rẽ nhánh - toán tử switch 
5.4. Cấu trúc lặp 
5.4.1. Cấu trúc lặp với toán tử while và for 
5.4.1.1. Cấu trúc lặp với toán tử while 
137 
5.4.1.2. Cấu trúc lặp với toán tử for : 
5.4.2. Chu trình do-while 
5.5. Câu lệnh break 
5.6. Câu lệnh continue 
Ch−ơng 6 
Hàm 
6.1. Cơ sở 
6.2. Hàm không cho các giá trị 
6.3. Hàm đệ qui 
6.3.3. Mở đầu 
6.3.2. Các bài toán có thể dùng đệ qui 
6.3.3. Cách xây dựng hàm đệ qui 
6.3.4. Các ví dụ về dùng hàm đệ qui 
6.4. Bộ tiền sử lý C 
Ch−ơng 7 
Con trỏ 
7.1. Con trỏ và địa chỉ 
7.2. Con trỏ và mảng một chiều 
7.2.1.Phép toán lấy địa chỉ 
7.2.2. Tên mảng là một hằng địa chỉ 
7.2.3. Con trỏ trỏ tới các phần tử của mảng một chiều 
7.2.4. Mảng, con trỏ và xâu ký tự 
7.3. Con trỏ và mảng nhiều chiều 
7.3.1.Phép lấy địa chỉ 
7.3.2. Phép cộng địa chỉ trong mảng hai chiều 
7.3.3. Con trỏ và mảng hai chiều 
7.4. Kiểu con trỏ kiểu địa chỉ, các phép toán trên con trỏ 
7.4.1. Kiểu con trỏ và kiểu địa chỉ 
7.4.2. Các phép toán trên con trỏ 
7.4.3. Con trỏ kiểu void 
7.5. Mảng con trỏ 
7.6. Con trỏ tới hàm 
138 
7.6.1. Cách khai báo con trỏ hàm và mảng con trỏ hàm 
7.6.2. Tác dụng của con trỏ hàm 
7.6.3. Đối của con trỏ hàm 
Ch−ơng 8 
Cấu trúc 
8.1. Kiểu cấu trúc 
8.2. Khai báo theo một kiểu cấu trúc đã định nghĩa 
8.3. Truy nhập đến các thành phần cấu trúc 
8.4. Mảng cấu trúc 
8.5. Khởi đầu một cấu trúc 
8.6. Phép gán cấu trúc 
8.7. Con trỏ cấu trúc và địa chỉ cấu trúc 
8.7.1. Con trỏ và địa chỉ 
8.7.2. Truy nhập qua con trỏ 
8.7.3. Phép gán qua con trỏ 
8.7.4. Phép cộng địa chỉ 
8.7.5. Con trỏ và mảng 
8.8. Cấu trúc tự trỏ và danh sách liên kết 
Ch−ơng 9 
Tập tin - file 
9.1. Khái niệm về tệp tin 
9.2. Khai báo sử dụng tệp - một số hàm th−ờng dùng khi thao tác trên tệp 
9.2.1. Khai báo sử dụng tệp 
9.2.2. Mở tệp - hàm fopen 
9.2.3. Đóng tệp - hàm fclose 
9.2.4. Đóng tất cả các tệp đang mở- hàm fcloseall 
9.2.5. Làm sạch vùng đệm - hàm fflush 
9.2.6. Làm sạch vùng đệm của các tệp đang mở - hàm fflushall 
9.2.7. Kiểm tra lỗi file - hàm ferror 
9.2.8. Kiểmtra cuối tệp - hàm feof 
9.2.9. Truy nhập ngẫu nhiên - các hàm di chuyên con trỏ chỉ vị 
9.2.9.1. Chuyển con trỏ chỉ vị về đầu tệp - Hàm rewind 
139 
9.2.9.2. Chuyển con trỏ chỉ vị trí cần thiết - Hàm fseek 
9.2.9.3. Vị trí hiện tại cuẩ con trỏ chỉ vị - Hàm ftell 
9.2.10. Ghi các mẫu tin lên tệp - hàm fwrite 
9.2.11. Đọc các mẫu tin từ tệp - hàm fread 
9.2.12. Nhập xuất ký tự 
9.2.12.1. Các hàm putc và fputc 
9.2.12.2. Các hàm getc và fgettc 
9.2.13. Xoá tệp - hàm unlink 
Ch−ơng 10 
Đồ hoạ 
10.1. Khởi động đồ hoạ 
10.2. Các hàm đồ hoạ 
10.2.1. Mẫu và màu 
10.2.2. Vẽ và tô màu 
10.2.3. Vẽ đ−ờng gấp khúc và đa giác 
10.2.4. Vẽ điểm, miền 
10.2.5. Hình chữ nhật 
10.2.6. Cửa sổ (Viewport) 
10.3. Sử lý văn bản trên màn hình đồ hoạ 
 Bài tập. 
Phần thứ nhất : Nhóm các bài tập về tính toán,hàm và chu trình . 
Bài tập 1 : 
Viết ch−ơng trình hiển thị tháp Pascal : 
140 
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 
 BàI tập 
 Ngôn ngữ lập trình C 
 Phần 1 : Nhóm các bàI tập về tính toán, hàm và chu trình . 
BàI tập 1 : 
Viết ch−ơng trình hiển thị tháp PASCAL : 
 1 
 121 
 12321 
 1234321 
 123454321 
 12345654321 
 1234567654321 
 123456787654321 
 12345678987654321 
Viết ch−ơng trình hiển thị tháp đảo ng−ợc. 
BàI tập 2 : 
141 
Viết ch−ơng trình nhập ba số thực. Kiểm tra xem ba số đó có thể là chiều dài của ba cạnh 
của một tam giác đ−ợc không? Nếu đ−ợc thì tính chu vi và diện tích tam giác đó. 
BàI tập 3 : 
Viết ch−ơng trình tính hàm số : 
 f(x) = K0 
 x 
 K1+ ----------------------------------------- 
 x 
K2 + ------------------------ 
 x 
 K3 + ---------------------- 
 x 
 K4 + --------------------- 
 x 
 Kn-1 + ------------- 
 Kn 
Bài tập 4 : 
Viết ch−ơng trình tính tích hai ma trận C mxn = A mxn * B nxk . 
Bài tập 5 : 
Viết ch−ơng trình nhập vào một dãy số sau đó tách dãy này thành hai dãy chỉ chứa các 
số d−ơng và chỉ chứa các số âm. Tính tổng số phần tử của mỗi dãy sau đó sắp xếp để hai 
dãy có giá trị giảm dần. 
Bài tập 6 : 
Viết ch−ơng trình nhập vào một ma trận A nxm. Tìm giá trị cực đại và cực tiểu của các 
phần tử của mảng . 
Bài tập 7 : 
 Trăm trâu,trăm cỏ 
 Trâu đứng ăn năm 
 Trâu nằm ăn ba 
 Lụ khụ trâu già 
 Ba con một bó. 
Tính số trâu mỗi loại . 
Bài tập 8 : 
 Vừa gà vừa chó 
 Bó lại cho tròn 
 Đúng ba sáu con 
 Một trăm chân chẵn . 
142 
Tính số gà, số chó . 
Bài tập 9 : 

File đính kèm:

  • pdfgiao_trinh_ngon_ngu_lap_trinh_c_nguyen_huu_tuan.pdf