Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 201 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
201
Dung lượng
2,46 MB
Nội dung
HỌC VIỆN KỸ THUẬT QUÂN SỰ KHOA CÔNG NGHỆ THÔNG TIN Bài giảng LẬP TRÌNH CƠ BẢN Biên soạn Hà Đại Dương Nguyễn Mậu Uyên Hà Nội - 11/2010 MỤC LỤC Bài - TỔNG QUAN .6 I Giới thiệu Mục đích, Yêu cầu Nội dung môn học Tài liệu học tập tham khảo Hình thức đánh giá kết môn học II Bài toán việc giải toán máy tính Phương pháp tổng quát để giải tốn máy tính Xác định toán 10 Cấu trúc liệu Giải thuật .11 Chương trình 16 III Công cụ lập trình 17 Ngơn ngữ lập trình 17 Cơng cụ lập trình 18 Cơng cụ lập trình Dev-C++ 19 IV Tóm tắt nội dung học 20 V Bài tập 21 Bài - NGÔN NGỮ LẬP TRÌNH C/C++ 22 I Giới thiệu 22 II Một số khái niệm 23 Bộ ký tự 23 Từ khóa 23 Kiểu liệu 24 Tên, Biến, .25 Biểu thức .29 III Cấu trúc chương trình đơn giản 33 Cấu trúc chung 33 Khai báo sử dụng thư viện 34 Khai báo hằng, biến, kiểu .34 Một số lệnh đơn .35 Chú thích .35 Chương trình .35 IV Nhập/Xuất liệu 35 Nhập liệu từ bàn phím – Hàm scanf() 35 Xuất liệu hình - Hàm printf() .37 Ví dụ 40 V Tóm tắt nội dung học 41 VI Bài tập 41 Bài - 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 Khởi động Dev-C++ .42 Giao diện .42 II Thực ví dụ sau 42 Tính diện tích tam giác 42 Tính tổng, hiệu, tích, thương số 44 III Bài tập tự làm 45 Bài - ĐIỀU KHIỂN CHỌN VÀ LẶP 48 I Điều khiển chọn 48 Khối lệnh .48 Cấu trúc IF 50 Cấu trúc SWITCH 53 II Điều khiển lặp 57 Cấu trúc FOR 57 Cấu trúc WHILE 59 Cấu trúc DO WHILE 61 Lệnh break continue 64 III Tóm tắt nội dung học 64 IV Bài tập 64 Bài - Bài thực hành: ĐIỀU KHIỂN CHỌN VÀ LẶP .66 I Thực ví dụ sau 66 Giải phương trình bậc 66 Tìm USCNLN hai số .67 II Bài tập tự làm 69 Bài - MẢNG, CON TRỎ VÀ XÂU KÝ TỰ 72 I Mảng 72 Mảng C 72 Mảng chiều .72 Mảng nhiều chiều 77 II Con trỏ 80 Khai báo sử dụng biến trỏ 80 Con trỏ mảng 85 Con trỏ tham số hình thức hàm 89 III Xâu ký tự 90 Khai báo 90 Các thao tác chuỗi ký tự 91 IV Tóm tắt nội dung học 96 V Bài tập 96 Bài - Bài thực hành: MẢNG, CON TRỎ VÀ XÂU KÝ TỰ 97 I Thực ví dụ sau 97 Tìm phần tử lớn mảng 97 Lấy Tên từ họ tên người Việt 98 II Bài tập tự làm 100 Mảng 100 Con trỏ 101 Xâu ký tự .101 Bài - HÀM VÀ CẤU TRÚC CHƯƠNG TRÌNH 103 I Tổ chức chương trình 103 Ví dụ 103 Cấu trúc chương trình 104 Hàm xây dựng sẵn .107 II Hàm người dùng định nghĩa 107 Khai báo định nghĩa Hàm 108 Lời gọi Hàm 110 Hàm với đối mặc định 111 Khai báo hàm trùng tên .112 Truyền tham số 113 Hàm mảng .119 III Con trỏ hàm 125 Khai báo 126 Sử dụng trỏ hàm 126 Mảng trỏ hàm .128 IV Đệ qui 128 Khái niệm 128 Lớp toán giải đệ qui .130 Các ví dụ .130 V Tóm tắt nội dung học 132 VI Bài tập 133 Bài - Bài thực hành: HÀM VÀ CẤU TRÚC CHƯƠNG TRÌNH .134 I Thực ví dụ sau 134 Xác định vị trí tương đối điểm với tam giác ABC .134 Viết hàm đếm số từ xâu ký tự 135 II Bài tập tự làm 136 Bài 10 - CẤU TRÚC DỮ LIỆU DO NGƯỜI DÙNG TỰ ĐỊNH NGHĨA .138 I Cấu trúc liệu người dùng tự định nghĩa 138 Khái niệm .138 Khai báo biến cấu trúc 140 Các thao tác biến kiểu cấu trúc 141 Con trỏ cấu trúc 143 Cấu trúc với thành phần kiểu bit 147 Câu lệnh typedef 148 Hàm sizeof() 148 II Ngăn xếp 148 Khái niệm 149 Cài đặt ngăn xếp sử dụng mảng 149 Cài đặt ngăn xếp sử dụng trỏ liên kết 151 Một số ứng dụng ngăn xếp 152 III Hàng đợi 154 Khái niệm 154 Cài đặt hàng đợi sử dụng mảng 155 Cài hàng đợi sử dụng trỏ 156 Một số ứng dụng hàng đợi 157 IV Kiểu hợp 158 Khai báo 158 Truy cập .158 V Kiểu liệt kê 159 VI Tóm tắt nội dung học 159 VII Bài tập 160 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 161 I Thực ví dụ sau 161 Biểu diễn thực phép toán phân số 161 Chuyển biểu thức trung tố dạng hậu tố 163 II Bài tập tự làm 166 Bài 12 - LÀM VIỆC VỚI FILE 168 I Một số khái niệm 168 II Các thao tác tập tin 169 Khai báo biến tập tin 169 Mở tập tin 169 Đóng tập tin 170 Kiểm tra đến cuối tập tin hay chưa? 170 Di chuyển trỏ tập tin đầu tập tin - Hàm rewind() 170 III Truy cập tập tin văn 171 Ghi liệu lên tập tin văn 171 Đọc liệu từ tập tin văn 172 Ví dụ 173 IV Truy cập tập tin nhị phân 174 Ghi liệu lên tập tin nhị phân 174 Đọc liệu từ tập tin nhị phân 175 Ví dụ 175 V Tóm tắt nội dung học 178 VI Bài tập 178 Bài 13 - ĐỒ HỌA 179 I Khởi động đồ hoạ 179 II Các hàm đồ hoạ 182 Mẫu màu 182 Vẽ tơ màu đường trịn .184 Vẽ đường gấp khúc đa giác 185 Vẽ điểm, miền 188 Hình chữ nhật 189 Cửa sổ (Viewport) .190 III Xử lý văn hình đồ hoạ 191 Hiển thị văn hình đồ hoạ .191 Sử dụng Fonts chữ 192 Bề rộng chiều cao kí tự 193 IV Hiệu ứng hoạt hình đồ họa 194 V Tóm tắt nội dung học 195 VI Bài tập 196 Bài 14 - Bài thực hành: LÀM VIỆC VỚI FILE VÀ ĐỒ HỌA 197 I Thực ví dụ sau 197 Ví dụ 197 Ví dụ 198 II Bài tập tự làm 198 Bài 15 - ÔN TẬP 200 Bài - Tổng quan 200 Bài Ngơn ngữ lập trình C/C++ 200 Bài - Bài thực hành: Mơi trường lập trình lệnh vào/ra 200 Bài - Điều khiển Chọn Lặp 200 Bài - Bài thực hành: Các cấu trúc điều khiển 200 Bài - Mảng, Con trỏ xâu ký tự 200 Bài - Bài thực hành: Mảng, Con trỏ Xâu ký tự 200 Bài - Cấu trúc liệu người dùng tự định nghĩa 200 Bài - Bài thực hành: Cấu trúc liệu người dùng tự định nghĩa 200 Bài 10 - Hàm 200 Bài 11 - Bài thực hành: Hàm 201 Bài 12 - Làm việc với File 201 Bài 13 - Đồ Họa 201 Bài 14 - Bài thực hành: Làm việc với File Thuật toán nâng cao 201 Bài - TỔNG QUAN Nội dung học I Giới thiệu Mục đích, u cầu Nội dung mơn học Tài liệu học tập tham khảo Hình thức đánh giá kết mơn học II Bài tốn việc giải tốn máy tính Xác định toán Cấu trúc liệu Giải thuật Chương trình III Cơng cụ lập trình Ngơn ngữ lập trình Cơng cụ lập trình Cơng cụ lập trình Dev-C++ IV Bài tập I Giới thiệu Mục đích, u cầu Mục đích mơn học cung cấp cho sinh viên kiến thức kỹ thuật lập trình nói chung kỹ sử dụng cơng cụ lập trình C/C++ việc giải tốn chương trình phần mềm máy tính Kết thúc mơn học sinh viên trang bị kiến thức về: - Cách thức giải tốn máy tính; - Cơng cụ, kiếm thức việc thuật tốn hóa tốn; - Ngơn ngữ lập trình C/C++; - Một số cấu trúc liệu giải thuật điển hình Yêu cầu sinh viên - Có hiểu biết cấu trúc máy tính; - Có hiểu biết hệ điều hành; - Biết sử dụng phần mềm hệ thống việc quản lý tài nguyên, chép/copy liệu; - Biết sử dụng phần mền ứng dụng công cụ soạn thảo văn bản, truy cập internet, web - Nghe giảng làm tập Nội dung mơn học Cấu trúc chương trình: 32 tiết lý thuyết, 24 tiết thực hành, tiết ôn tập, tổng 60 tiết Chi tiết nội dung chương trình cho bảng sau: STT Bài/Nội dung Số tiết Tổng quan I Giới thiệu II Bài toán việc giải tốn máy tính III Cơng cụ lập trình IV Tóm tắt nội dung học V Bài tập Ngơn ngữ lập trình C/C++ I Giới thiệu II Một số khái niệm III Cấu trúc chương trình đơn giản C IV Nhập/Xuất liệu V Tóm tắt nội dung học VI Bài tập Bài thực hành: Môi trường lập trình lệnh vào/ra I Làm quen với mơi trường lập trình Dev-C++ II Thực ví dụ III Bài tập tự làm Điều khiển Chọn Lặp I Điều khiển chọn II Điều khiển lặp III Tóm tắt nội dung học 4 IV Bài tập Bài thực hành: Các cấu trúc điều khiển I Thực ví dụ II Bài tập tự làm Mảng, Con trỏ Xâu ký tự I Mảng II Con trỏ III Xâu ký tự IV Tóm tắt nội dung học 4 V Bài tập Bài thực hành: Mảng, Con trỏ Xâu ký tự I Thực ví dụ II Bài tập tự làm Cấu trúc liệu người dùng tự định nghĩa I Cấu trúc liệu 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 học 4 V Bài tập 10 Bài thực hành: Cấu trúc liệu người dùng tự định nghĩa I Thực ví dụ II Bài tập tự làm Hàm I Khái niệm II Hàm tự tạo III Truyền tham số cho hàm IV Kỹ thuật đệ qui V Tóm tắt nội dung học 4 VI Bài tập 11 12 Bài thực hành: Hàm I Thực ví dụ II Bài tập tự làm Làm việc với File I Một số khái niệm II Các thao tác tập tin III Truy cập tập tin văn IV Truy cập tập tin nhị phân 4 V Tóm tắt nội dung học VI Bài tập 13 Đồ họa I Khởi động chế độ đồ họa II Các hàm đồ họa III Xử lý văn IV Tóm tắt nội dung học V Bài tập 14 Bài thực hành: Làm việc với File Đồ họa I Thực ví dụ II Bài tập tự làm 15 Ôn tập Tài liệu học tập tham khảo Hà Đại Dương, Nguyễn Mậu Uyên, Tập Bài giảng Lập trình co bản, HVKTQS 2010; Trần Đức Huyên, Phương pháp giải toán tin học, Nhà xuất giáo dục 1997; Đào Thanh Tĩnh, Hà Đại Dương, Tin học đại cương, Học viện KTQS, 2003; Đỗ Xuân Lôi, Cấu trúc liệu giải thuật, NXB Giáo dục, 1997; Robert Sedgewick, Algorithns in C++, Addison-Wesley 1992; Niklaus Wirth Bản dịch Nguyễn Quốc Cường, Cấu trúc liệu + Giải thuật = Chương trình, , NXB KHKT, 2001; Giáo trình Tin Học Đại Cương A, Nguyễn Văn Linh, Khoa Công Nghệ Thông Tin, Đại học Cần Thơ, 1991 Giáo trình lý thuyết tập ngơn ngữ C; Nguyễn Đình Tê, Hoàng Đức Hải, Nhà xuất Giáo dục, 1999 C - Tham khảo toàn diện, Nguyễn Cẩn, Nhà xuất Đồng Nai, 1996 10 Giúp tự học Lập Trình với ngôn ngữ C, Võ Văn Viện, Nhà xuất Đồng Nai, 2002 11 The C Programming Language, Brain W Kernighan & Dennis Ritchie, Prentice Hall Publisher, 1988 Hình thức đánh giá kết môn học Thang điểm 10, thành phần điểm xác định nội dung sau: STT Nội dung % Chuyên cần 10% Thường xuyên: Kiểm tra trực tiếp thực hành tất sinh viên 20% Thi kết thúc môn: Thi vấn đáp 70% Tổng cộng 100% II Bài toán việc giải toán máy tính Phương pháp tổng quát để giải tốn máy tính Để giải tốn máy tính cần thực bước sau: Xác định toán; Xác định cấu trúc liệu để mơ tả tốn; Xây dựng thuật tốn; Soạn thảo văn chương trình, kiểm tra hồn thiện chương trình Xác định tốn Khái qt tốn Trong q trình tồn phát triển, cá nhân phải giải nhiều tốn đặt sống Có thể nói sống chuỗi tốn mà ta phải đối đầu để giải Theo nhiều nhà nghiên cứu tốn diễn đạt theo sơ đồ chung sau: A => B (*) đó: - A giả thiết, điều kiện ban đầu, thông tin cho, biết; - B kết luận, mục tiêu cần đạt phải tìm, phải làm kết thúc toán; - => suy luận, giải pháp cần xác định chuỗi thao tác cần thực để có kết B từ có A Xác định tốn Theo sơ đồ việc xác định tốn có nghĩa xác định A, B xác định ln bước thực để “đi” từ A đến B Bài tốn máy tính Tương tự (*), - A gọi đầu vào (INPUT); - B gọi đầu (OUTPUT); - => CHƯƠNG TRÌNH MÁY TÍNH cho kết B với đầu vào A Khó khăn Việc xác định tốn máy tính thường gặp khó khăn sau: - Thơng tin A, B thường không rõ ràng không đầy đủ; - Thông báo điều kiện đặt cho cách giải (=>) thường không nêu cách minh bạch; Ví dụ 1: Hãy viết chương trình cho phép giải phương trình bậc A =???, B=??? Ví dụ 2: Giả sử người A có số tiền X đem gửi tiết kiện, lãi xuất tháng L% hỏi sau T tháng A có tiền biết tháng tiền lãi cộng vào gốc Ví dụ 3: Bài tốn hậu - Hãy tìm cách đặt hậu bàn cờ vua cho khơng có qn hậu ăn qn hậu khác Ví dụ 4: Cho dãy số a1, a2, , an xếp dãy theo thứ tự giảm dần Ví dụ 5: Hãy xây dựng hệ thống quản lý hồ sơ kết học tập sinh viên 10 Cú pháp: void lineto(int x, int y); (x,y): điểm vẽ đến từ trỏ đồ họa Vẽ đường thẳng: đường thẳng từ điểm trỏ đồ họa đến điểm cách điểm khoảng Cú pháp: void linerel(int dx, int dy); (dx,dy): khoảng cách với trỏ đồ họa tại, điểm (x,y) điểm cần vẽ (x+dx, y+dy) Di chuyển chạy đồ hoạ: Để di chuyển chạy đến vị trí Cú pháp: void moveto(int x, int y); + (x,y): điểm trỏ đồ họa Ví dụ: moveto(200,100); line(100,100,1,1); lineto(100,200); linerel(100,100); Chọn kiểu đường: kiểu đường để vẽ đường thẳng, đa giác ,… Cú pháp : void setlinestyle(int linestyle, int par, int thin); + linestyle : kiểu đường, miêu tả + par : tham số thứ USERBIT_LINE tuân thủ theo bit tham số để tạo điểm vẽ + thin : độ dày đường miêu tả Bảng 13-4 Mô tả 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ảng 13-5 Mô tả độ dày đường 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 Ví dụ: Chương trình vẽ đường gấp khúc đoạn thẳng Đường gấp khúc qua đỉnh sau: 187 (20,20),(620,20),(620,180),(20,180) (320,100) #include "graphics.h" #include "stdio.h" #include "conio.h" main() { int mh=0, mode; 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?n ? v? trí ( 320,100 ) */ linerel(-300,80); lineto(620,180); lineto(620,20); getch(); closegraph(); } Vẽ điểm, miền Vẽ điểm: vẽ điểm ảnh hình với màu xác định Cú pháp: void putpixel(int x, int y, int color); + (x,y): tọa độ điểm cần vẽ + color: màu vẽ Lấy màu điểm vẽ: xác định màu điểm hình Cú pháp: unsigned getpixel(int x, int y); + (x,y): Tọa độ điểm cần lấy màu + giá trị trả vè màu điểm hình Tơ miền: Tơ màu cho miền kín xác định màu biên, vùng khơng kín tơ màu hết vùng làm việc Cú pháp: void floodfill(int x, int y, int border); +(x,y): tọa độ xác định điểm tô màu + border: màu vùng biên Ví dụ: Vẽ đường trịn màu đỏ hình màu xanh Toạ độ (x,y) điểm gieo 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" #include main() { int mh=0,mode=0, x, y; printf("\nVao toa x,y:"); 188 scanf("%d%d",&x,&y); initgraph(&mh,&mode,""); setbkcolor(BLUE); setcolor(RED); setfillstyle(11,YELLOW); circle(320,100,50); moveto(1,150); floodfill(x,y,RED); getch(); closegraph(); } Hình chữ nhật Vẽ hình chữ nhật: xác định hai đỉnh góc trái cùng, góc phải hình chữ nhật Cú pháp: void rectangle(int x1, int y1, int x2, int y2); + (x1,y1) : tọa độ góc trái, phía hình chữ nhật + (x2,y2) : tọa độ góc phải phía hình chữ nhật Vẽ hình chữ nhật to kín: vẽ hình chữ nhật với miền tô màu Cú pháp : void bar(int x1, int y1, int x2, int y2); + (x1,y1) : tọa độ góc trái, phía hình chữ nhật + (x2,y2) : tọa độ góc phải phía hình chữ nhật Vẽ hình chữ nhật có tơ bóng: vẽ hình chữ nhật có tơ bóng 3D Cú pháp: void bar3d(int x1, int y1, int x2, int y2, int depth, int top); + (x1,y1) : tọa độ góc trái, phía hình chữ nhật + (x2,y2) : tọa độ góc phải phía hình chữ nhật + depth: độ sâu tơ bóng + top: vẽ đỉnh (0: khơng vẽ, 1: vẽ) Ví dụ: Chương trình 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=0,mode=0; initgraph(&mh,&mode,""); 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); getch(); closegraph(); } 189 Cửa sổ (Viewport) Thiết lập viewport: tạo cửa sổ làm việc ảo hình Cú pháp: void setviewport(int x1, int y1, int x2, int y2, int clip); + (x1,y1) : tọa độ góc bên trái + (x2,y2) : tọa độ góc bên phải + clip : : cho phép vẽ viewport, : khơng cho phép vẽ ngồi viewport Ví dụ: setviewport(100,50,200,150,0); line(-20,-20,50,50); 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: thông tin viewport hành Cú pháp : void getviewsetting(struct viewporttype *vp); vp: thông tin viewport thời, cấu trúc viewport struct viewporttype { int left,top,right,bottom; int clip; }; Xóa viewport: xóa đối tượng vẽ viewport Cú pháp: void clearviewport(void); Xoá hình, đưa chạy tạo độ (0,0) hình: Cú pháp: void cleardevice(void); Toạ độ âm dương: Với chế độ cho phép vẽ viewport, hàm đồ họa vẽ ngồi viewport với tọa độ âm int xc,yc; xc=getmaxx()/2; yc=getmaxy()/2; setviewport(xc,yc,getmaxx(),getmaxy(),0); Như thế, hình chia làm bốn phần với toạ độ âm dương sau: Phần tư trái trên: x âm, y âm x: từ -getmaxx()/2 đến y: từ -getmaxy()/2 đến 190 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 trên: 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=0,mode=DETECT; int x,y,i; initgraph(&mh,&mode,""); 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); settextjustify(1,1); setcolor(WHITE); outtextxy(0,0,"(0,0)"); for (i=-400;i