Bài giảng Lập trình cơ bản - Hà Đại Dương
MỤC LỤC
Bài 1 - TỔNG QUAN 6
I. Giới thiệu 6
1. Mục đích, Yêu cầu 6
2. Nội dung môn học 7
3. Tài liệu học tập và tham khảo 9
4. Hình thức đánh giá kết quả môn học 9
II. Bài toán và việc giải bài toán trên máy tính 9
1. Phương pháp tổng quát để giải một bài toán trên máy tính 9
2. Xác định bài toán 10
3. Cấu trúc dữ liệu và Giải thuật 11
4. Chương trình 17
III. Công cụ lập trình 17
1. Ngôn ngữ lập trình 17
2. Công cụ lập trình 18
3. Công cụ lập trình Dev-C++ 19
IV. Tóm tắt nội dung bài học 20
V. Bài tập 21
Bài 2 - NGÔN NGỮ LẬP TRÌNH C/C++ 22
I. Giới thiệu 22
II. Một số khái niệm cơ bản 23
1. Bộ ký tự 23
2. Từ khóa 23
3. Kiểu dữ liệu 24
4. Tên, Biến, hằng 25
5. Biểu thức 29
III. Cấu trúc một chương trình đơn giản 33
1. Cấu trúc chung 33
2. Khai báo sử dụng thư viện 34
3. Khai báo hằng, biến, kiểu 34
4. Một số lệnh đơn 35
5. Chú thích 35
6. Chương trình chính 35
IV. Nhập/Xuất dữ liệu 35
1. Nhập dữ liệu từ bàn phím – Hàm scanf() 35
2. Xuất dữ liệu ra màn hình - Hàm printf() 37
3. Ví dụ 40
V. Tóm tắt nội dung bài học 41
VI. Bài tập 41
Bài 3 - Bài thực hành: MÔI TRƯỜNG LẬP TRÌNH VÀ CÁC LỆNH VÀO/RA 42
I. Làm quen môi trường Dev-C++ 42
1. Khởi động Dev-C++ 42
2. Giao diện chính 42
II. Thực hiện các ví dụ sau 42
1. Tính diện tích một tam giác 42
2. Tính tổng, hiệu, tích, thương của 2 số 44
III. Bài tập tự làm 45
Bài 4 - ĐIỀU KHIỂN CHỌN VÀ LẶP 48
I. Điều khiển chọn 48
1. Khối lệnh 48
2. Cấu trúc IF 50
3. Cấu trúc SWITCH 53
II. Điều khiển lặp 57
1. Cấu trúc FOR 57
2. Cấu trúc WHILE 59
3. Cấu trúc DO . WHILE 61
4. Lệnh break và continue 64
III. Tóm tắt nội dung bài học 64
IV. Bài tập 64
Bài 5 - Bài thực hành: ĐIỀU KHIỂN CHỌN VÀ LẶP 65
I. Thực hiện các ví dụ sau 65
1. Giải phương trình bậc 2 65
2. Tìm USCNLN của hai số 66
II. Bài tập tự làm 68
Bài 6 - MẢNG, CON TRỎ VÀ XÂU KÝ TỰ 71
I. Mảng 71
1. Mảng trong C 71
2. Mảng một chiều 71
3. Mảng nhiều chiều 76
II. Con trỏ 79
1. Khai báo và sử dụng biến con trỏ 79
2. Con trỏ và mảng 84
3. Con trỏ và tham số hình thức của hàm 88
III. Xâu ký tự 89
1. Khai báo 89
2. Các thao tác trên chuỗi ký tự 90
IV. Tóm tắt nội dung bài học 95
V. Bài tập 95
Bài 7 - Bài thực hành: MẢNG, CON TRỎ VÀ XÂU KÝ TỰ 96
I. Thực hiện các ví dụ sau 96
1. Tìm phần tử lớn nhất của mảng 96
2. Lấy Tên từ họ tên người Việt 97
II. Bài tập tự làm 99
1. Mảng 99
2. Con trỏ 100
3. Xâu ký tự 100
Bài 8 - HÀM VÀ CẤU TRÚC CHƯƠNG TRÌNH 102
I. Tổ chức chương trình 102
1. Ví dụ 102
2. Cấu trúc chương trình 103
3. Hàm xây dựng sẵn 106
II. Hàm do người dùng định nghĩa 106
1. Khai báo và định nghĩa Hàm 107
2. Lời gọi Hàm 109
3. Hàm với đối mặc định 110
4. Khai báo hàm trùng tên 111
5. Truyền tham số 112
6. Hàm và mảng 118
III. Con trỏ hàm 124
1. Khai báo 125
2. Sử dụng con trỏ hàm 125
3. Mảng con trỏ hàm 126
IV. Đệ qui 127
1. Khái niệm 127
2. Lớp các bài toán giải được bằng đệ qui 128
3. Các ví dụ 129
V. Tóm tắt nội dung bài học 131
VI. Bài tập 132
Bài 9 - Bài thực hành: HÀM VÀ CẤU TRÚC CHƯƠNG TRÌNH 133
I. Thực hiện các ví dụ sau 133
1. Xác định vị trí tương đối của 1 điểm với tam giác ABC 133
2. Viết hàm đếm số từ của một xâu ký tự 134
II. Bài tập tự làm 135
Bài 10 - CẤU TRÚC DỮ LIỆU DO NGƯỜI DÙNG TỰ ĐỊNH NGHĨA 137
I. Cấu trúc dữ liệu do người dùng tự định nghĩa 137
1 Khái niệm 137
2. Khai báo biến cấu trúc 139
3. Các thao tác trên biến kiểu cấu trúc 140
4. Con trỏ cấu trúc 142
5. Cấu trúc với thành phần kiểu bit 146
6. Câu lệnh typedef 147
7. Hàm sizeof() 147
II. Ngăn xếp 147
1. Khái niệm 147
2. Cài đặt ngăn xếp sử dụng mảng 148
3. Cài đặt ngăn xếp sử dụng con trỏ liên kết 149
4. Một số ứng dụng của ngăn xếp 151
III. Hàng đợi 153
1. Khái niệm 153
2. Cài đặt hàng đợi sử dụng mảng 153
3. Cài hàng đợi sử dụng con trỏ 155
4. Một số ứng dụng của hàng đợi 156
IV. Kiểu hợp 156
1. Khai báo 156
2. Truy cập 157
V. Kiểu liệt kê 157
VI. Tóm tắt nội dung bài học 158
VII. Bài tập 158
Bài 11 - Bài thực hành: CẤU TRÚC DỮ LIỆU DO NGƯỜI DÙNG TỰ ĐỊNH NGHĨA 159
I. Thực hiện các ví dụ sau 159
1. Biểu diễn và thực hiện các phép toán phân số 159
2. Chuyển biểu thức trung tố về dạng hậu tố 161
II. Bài tập tự làm 164
Bài 12 - LÀM VIỆC VỚI FILE 166
I. Một số khái niệm 166
II. Các thao tác trên tập tin 167
1. Khai báo biến tập tin 167
2. Mở tập tin 167
3. Đóng tập tin 168
4. Kiểm tra đến cuối tập tin hay chưa? 168
5. Di chuyển con trỏ tập tin về đầu tập tin - Hàm rewind() 168
III. Truy cập tập tin văn bản 169
1. Ghi dữ liệu lên tập tin văn bản 169
2. Đọc dữ liệu từ tập tin văn bản 170
3. Ví dụ 171
IV. Truy cập tập tin nhị phân 172
1. Ghi dữ liệu lên tập tin nhị phân 172
2. Đọc dữ liệu từ tập tin nhị phân 173
3. Ví dụ 173
V. Tóm tắt nội dung bài học 176
VI. Bài tập 176
Bài 13 - ĐỒ HỌA 177
I. Khởi động đồ hoạ 177
II. Các hàm đồ hoạ 180
1. Mẫu và màu 180
2. Vẽ và tô màu đường tròn 182
3. Vẽ đường gấp khúc và đa giác 183
4. Vẽ điểm, miền 186
5. Hình chữ nhật 187
6. Cửa sổ (Viewport) 188
III. Xử lý văn bản trên màn hình đồ hoạ 189
1. Hiển thị văn bản trên màn hình đồ hoạ 189
2. Sử dụng các Fonts chữ 190
3. Bề rộng và chiều cao của kí tự 191
IV. Hiệu ứng hoạt hình đồ họa 191
V. Tóm tắt nội dung bài học 193
VI. Bài tập 194
Bài 14 - Bài thực hành: LÀM VIỆC VỚI FILE VÀ ĐỒ HỌA 195
I. Thực hiện các ví dụ sau 195
1. Ví dụ 1 195
2. Ví dụ 2 196
II. Bài tập tự làm 196
Bài 15 - ÔN TẬP 198
Bài 1 - Tổng quan 198
Bài 2. Ngôn ngữ lập trình C/C++ 198
Bài 3 - Bài thực hành: Môi trường lập trình và các lệnh vào/ra 198
Bài 4 - Điều khiển Chọn và Lặp 198
Bài 5 - Bài thực hành: Các cấu trúc điều khiển 198
Bài 6 - Mảng, Con trỏ và xâu ký tự 198
Bài 7 - Bài thực hành: Mảng, Con trỏ và Xâu ký tự 198
Bài 8 - Cấu trúc dữ liệu do người dùng tự định nghĩa 198
Bài 9 - Bài thực hành: Cấu trúc dữ liệu do người dùng tự định nghĩa 198
Bài 10 - Hàm 198
Bài 11 - Bài thực hành: Hàm 199
Bài 12 - Làm việc với File 199
Bài 13 - Đồ Họa 199
Bài 14 - Bài thực hành: Làm việc với File và Thuật toán nâng cao 199
ạ Cú pháp: void outtext(char *s); s: chuỗi văn bản được hiển thị tại vị trí con trỏ đồ họa hiện tại Cú pháp: void outtextxy(int x, int y,char *s); (x,y): tọa độ sẽ hiển thị chuỗi s: chuỗi văn bản sẽ được hiển thị 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ả. 2. 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: Cú pháp : void settextstyle(int font, int direction, int charsize); + font : lựa 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 + 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. + 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,1,3);//DevC++ không chuyển thẳng đứng 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: Cú pháp: void settextjustify(int horiz, int vert); + 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). + 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"); 3. Bề rộng và chiều cao của kí tự - Chiều cao của chuỗi ký tự Cú pháp: int textheight(char *s); + s: chuỗi ký tự cần kiểm tra + trả về độ cao của chuỗi ký tự khi in ra màn hình tình bằng pixel. 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=0,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 của kí tự: Cú pháp: int textwidth(char *s); + s: chuỗi ký tự cần kiểm tra + trả về độ rộng của chuỗi ký tự khi in lên màn hình IV. Hiệu ứng hoạt hình đồ họa Hiệu ứng hoạt hình là hiệu ứng các đối tượng di chuyển trên màn hình. Bản chất của việc dịch chuyển trên màn hình là xóa vị trí cũ và vẽ đối tượng sang vị trí mới. - Xóa vị trí cũ bằng cách vẽ đối tượng với màu của màu nền Ví dụ vẽ quả bóng di chuyển từ góc trên trái xuống góc phải dưới #include "graphics.h" #include "stdio.h" #include "conio.h" #include int draw(int x, int y, int color) { setcolor(color); setbkcolor(color); setfillstyle(0,color); pieslice(x,y,0,360,10); return 0; } main() { int i,x,y; int dx=5; int dy=5; int md=0,mode; initgraph(&md,&mode,"C:\\TC\\BGI"); x=10; y=10; while(!kbhit()) { draw(x,y,15); delay(10); draw(x,y,0); x+=dx; y+=dy; if(y300) dy=-dy; if(x400) dx=-dx; } getch(); closegraph(); } - Trong tình huống nền có hình ảnh khác việc vẽ lại màu nền sẽ xóa các đối tượng trên nền. Để giải quyết vấn đề này cần phải lưu trữ lại tình trạng màn hình trước khi vẽ, sau đó hồi phục lại màn hình để tiếp tục vẽ sang vị trí mới. #include "graphics.h" #include "stdio.h" #include "conio.h" #include #define r 5 char *b; int draw(int x, int y, int color) { setcolor(color); setbkcolor(color); setfillstyle(0,color); pieslice(x,y,0,360,r); return 0; } int main() { int i,x,y; int dx=5; int dy=5; delay(10); int md=0,mode=0; initgraph(&md,&mode,"C:\\TC\\BGI"); b=(char*)malloc(imagesize(1,1,2*r+1,2*r+1)); if(b==NULL) { closegraph(); return -1; } line(0,0,getmaxx(),getmaxy()); line(0,getmaxy(),getmaxx(),0); x=10; y=10; while(!kbhit()) { getimage(x-r,y-r,x+r,y+r,b); draw(x,y,15); delay(10); putimage(x-r,y-r,b,COPY_PUT); x+=dx; y+=dy; if(y310) dy=-dy; if(x420) dx=-dx; } getch(); free(b); closegraph(); return 0; } V. Tóm tắt nội dung bài học I. Khởi động đồ hoạ II. Các hàm đồ hoạ 1. Mẫu và màu 2. Vẽ và tô màu 3. Vẽ đường gấp khúc và đa giác 4. Vẽ điểm, miền 5. Hình chữ nhật 6. Cửa sổ (Viewport) III. Xử lý văn bản trên màn hình đồ hoạ 1. Hiển thị văn bản trên màn hình đồ hoạ 2. Sử dụng các Fonts chữ 3. Bề rộng và chiều cao của kí tự IV. Tóm tắt nội dung bài học V. Bài tập VI. Bài tập Xem Bài 14 - Bài tập thực hành Làm việc với File và Thuật toán nâng cao Bài 14 - Bài thực hành: LÀM VIỆC VỚI FILE VÀ ĐỒ HỌA I. Thực hiện các ví dụ sau 1. Ví dụ 1 Yêu cầu: Viết chương trình cho phép nhập vào một mảng, tìm phần tử lớn nhất Soạn thảo văn bản chương trình như sau #include #include int a[100][100]; int n,m; int main() { int ma; char *infile="vao.txt", *outfile="ra.txt"; int i, j; FILE *f1; f1=fopen(infile,"rt"); if(f1==NULL) { printf("Loi mo file %s",infile); return -1; } fscanf(f1,"%d%d",&m,&n); for(i=0;i<m;i++) { for(j=0;j<n;j++) { fscanf(f1,"%d",&a[i][j]); } } //find max ma=a[0][0]; for(i=0;i<m;i++) { for(j=0;j<n;j++) { if(a[i][j]>ma) ma=a[i][j]; } } fclose(f1); printf("Gia tri max:%d",ma); getch(); return 0; } Thử nghiệm 1: Nhập thử file vao.txt có nội dung 4 5 1 2 3 4 5 5 6 7 8 9 1 3 5 7 9 2 4 6 8 0 Thử nghiệm 2: Nhập thử file vao.txt có nội dung 4 5 1 2 3 4 5 5 6 7 8 9 1 3 5 7 9 Đưa ra nhận xét, thay đổi đảm bảo hệ thống chạy tốt. 2. Ví dụ 2 Nhập lại ví dụ 2 trong hiệu ứng hoạt hình, thay đổi màu viên bóng, tạo thêm đường khung. II. Bài tập tự làm 1. Viết chương trình quản lý một tập tin văn bản theo các yêu cầu: a- Nhập từ bàn phím nội dung một văn bản sau đó ghi vào đĩa. b- Đọc từ đĩa nội dung văn bản vừa nhập và in lên màn hình. c- Đọc từ đĩa nội dung văn bản vừa nhập, in nội dung đó lên màn hình và cho phép nối thêm thông tin vào cuối tập tin đó. 2. Viết chương trình cho phép thống kê số lần xuất hiện của các ký tự là chữ (‘A’..’Z’,’a’..’z’) trong một tập tin văn bản. 3. Viết chương trình đếm số từ và số dòng trong một tập tin văn bản. 4. Viết chương trình nhập từ bàn phím và ghi vào 1 tập tin tên là DMHH.DAT với mỗi phần tử của tập tin là 1 cấu trúc bao gồm các trường: Ma (mã hàng: char[5]), Ten (Tên hàng: char[20]).Kết thúc việc nhập bằng cách gõ ENTER vào Ma. Ta sẽ dùng tập tin này để giải mã hàng hóa cho tập tin DSHH.DAT sẽ đề cập trong bài 5. 5. Viết chương trình cho phép nhập từ bàn phím và ghi vào 1 tập tin tên DSHH.Dat với mỗi phần tử của tập tin là một cấu trúc bao gồm các trường : mh (mã hàng: char[5]), sl (số lượng : int), dg ( đơn giá: float), st (Số tiền: float) theo yêu cầu: - Mỗi lần nhập một cấu trúc - Trước tiên nhập mã hàng (mh), đưa mh so sánh với Ma trong tập tin DMHH.DAT đã được tạo ra bởi bài tập 1, nếu mh=ma thì in tên hàng ngay bên cạnh mã hàng. - Nhập số lượng (sl). - Nhập đơn giá (dg). - Tính số tiền = số lượng * đơn giá. Kết thúc việc nhập bằng cách đánh ENTER vào mã hàng. Sau khi nhập xong yêu cầu in toàn bộ danh sách hàng hóa có sự giải mã về tên hàng theo mẫu sau: STT MA HANG TEN HANG SO LG DON GIA SO TIEN 1 a0101 Duong cat trang 25 10000.00 250000.00 2 b0101 Sua co gai Ha Lan 10 40000.00 400000.00 6. Viết chương trình cho phép hiển thị đồng hồ với tương tự (đồng hồ kim) có hai kim giờ và phút. Sử dụng hàm gettime để lấy dữ liệu. Theo thời gian các kim chạy hiển thị đúng hiện trạng của đồng hồ máy tính. 7. Viết chương trình mô tả dao động của con lắc đơn. 8. Vẽ đồ thị hàm số f(x)=3x3+4x2-x-1, trong khoảng [-4,4] . Bài 15 - ÔN TẬP Bài 1 - Tổng quan I. Giới thiệu II. Bài toán và việc giải bài toán trên máy tính III. Công cụ lập trình IV. Tóm tắt nội dung bài học Bài 2. Ngôn ngữ lập trình C/C++ I. Giới thiệu II. Một số khái niệm cơ bản III. Cấu trúc chương trình đơn giản trong C IV. Nhập/Xuất dữ liệu V. Tóm tắt nội dung bài học VI. Bài tập Bài 3 - Bài thực hành: Môi trường lập trình và các lệnh vào/ra Bài 4 - Điều khiển Chọn và Lặp I. Điều khiển chọn II. Điều khiển lặp III. Tóm tắt nội dung bài học IV. Bài tập Bài 5 - Bài thực hành: Các cấu trúc điều khiển Bài 6 - Mảng, Con trỏ và xâu ký tự I. Mảng II. Con trỏ III. Xâu ký tự IV. Tóm tắt nội dung bài học V. Bài tập Bài 7 - Bài thực hành: Mảng, Con trỏ và Xâu ký tự Bài 8 - Cấu trúc dữ liệu do người dùng tự định nghĩa I. Cấu trúc dữ liệu do người dùng tự định nghĩa II. Kiểu ngăn xếp III. Kiểu hàng đợi IV. Tóm tắt nội dung bài học V. Bài tập Bài 9 - Bài thực hành: Cấu trúc dữ liệu do người dùng tự định nghĩa Bài 10 - Hàm I. Khái niệm II. Xây dựng một hàm III. Truyền tham số cho hàm IV. Kỹ thuật đệ qui V. Tóm tắt nội dung bài học VI. Bài tập Bài 11 - Bài thực hành: Hàm Bài 12 - Làm việc với File I. Một số khái niêm II. Các thao tác trên tập tin III. Truy cập tập tin văn bản IV. Truy cập tập tin nhị phân V. Tóm tắt nội dung bài học VI. Bài tập Bài 13 - Đồ Họa I. Khởi động đồ hoạ II. Các hàm đồ hoạ III. Xử lý văn bản trên màn hình đồ hoạ IV. Tóm tắt nội dung bài học V. Bài tập Bài 14 - Bài thực hành: Làm việc với File và Thuật toán nâng cao
File đính kèm:
- Bài giảng Lập trình cơ bản - Hà Đại Dương.doc