Bài giảng Phương pháp lập trình - Bài 1: Giới thiệu - Ngô Hữu Dũng

pdf 45 trang ngocly 2460
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phương pháp lập trình - Bài 1: Giới thiệu - Ngô Hữu Dũng", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_phuong_phap_lap_trinh_bai_1_gioi_thieu_ngo_huu_dun.pdf

Nội dung text: Bài giảng Phương pháp lập trình - Bài 1: Giới thiệu - Ngô Hữu Dũng

  1. TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH Phương pháp lập trình Tổng quan TS. Ngô Hữu Dũng
  2. Bài 1 – Giới thiệu Blog ngohuudung.blogspot.com Email ngohuudung@iuh.edu.vn 2 Phương pháp lập trình - Tổng quan
  3. Nội dung  Các thành phần cơ bản  Nhập xuất dữ liệu và các thư viện  Các câu lệnh có cấu trúc  Vòng lặp  Thuật toán  Hàm – chương trình con  Kiểu dữ liệu mảng và chuỗi  Giải thuật đệ quy  Kiểu dữ liệu cấu trúc  Kiểu con trỏ, tập tin 3 Phương pháp lập trình - Tổng quan
  4. Tài liệu  Brian W. Kernighan and Dennis M. Ritchie. The C Programming Language (Second Edition). Prentice-Hall. Englewood Cliffs, New Jersey, 1988.  Slide, bài giảng  Bài tập thực hành  Bản dịch tiếng Việt: Giáo trình Ngôn ngữ lập trình C  Tham khảo thêm  Phạm Văn Ất. Kỹ thuật lập trình C. NXB Khoa học và Kỹ thuật, 1995  Randal E.Bryant and David R.O’Hallaron. Computer’s Perspective, 2001  Bjarne Stroustrup. The C++ Programming Language, AT&T Labs Murray Hill, New Jersey Addison-Wesley, 1997.  Andy Oram and Greg Wilson, Beautiful Code, 2007  cplusplus.com 4 Phương pháp lập trình - Tổng quan
  5. Lịch trình Lý Thực Kiểm Tuần Nội dung Tự học thuyết hành tra 1 Giới thiệu môn học 3 6 Các thành phần cơ bản của Ngôn ngữ C 6 2 3 Nhập xuất dữ liệu và các thư viện 6 3 Các câu lệnh có cấu trúc 3 3 7.5 5-6 Vòng lặp – thuật toán 6 6 TK 15 7-8 Hàm – chương trình con 6 6 GK 15 9-10 Mảng và chuỗi 6 6 15 11 Lập trình đệ quy 3 3 7.5 12 Kiểu cấu trúc 3 3 7.5 13 Kiểu con trỏ 3 3 TK 7.5 14 Kiểu tập tin 3 6 15 Ôn tập 3 CK 6 45 30 105 5 Phương pháp lập trình - Tổng quan
  6. Kiểm tra đánh giá  Lý thuyết  Kiểm tra thường kỳ  Thi cuối kỳ  Thực hành  Kiểm tra thường kỳ  Thi giữa kỳ  Kiểm tra cuối kỳ  Điểm liệt: <3  Số tín chỉ: 4  Lý thuyết: 45  Thực hành: 30  Tự học: 105 6 Phương pháp lập trình - Tổng quan
  7. Thảo luận  Why?  What?  How?  Where?  When? 7 Phương pháp lập trình - Tổng quan
  8. Giới thiệu về môn học qua một số ví dụ  Nhập, tính toán, xuất  Đề bài: Viết chương trình nhập vào hai số nguyên, xuất ra màn hình tổng của hai số nguyên đó.  Các bước chính để giải bài toán:  Xác định rõ yêu cầu của bài toán  Lựa chọn các biến và cấu trúc dữ liệu  Xây dựng giải thuật (cách giải) cho bài toán  Xây dựng trình tự để giải bài toán  Viết chương trình (cài đặt) và biên dịch  Chạy thử và sửa lỗi  Hoàn thiện và tối ưu hóa 8 Phương pháp lập trình - Tổng quan
  9. Các bước giải bài toán  Xác định yêu cầu  Nhập 2 số nguyên, tính tổng, xuất ra tổng.  Lựa chọn các biến  2 biến số nguyên  1 biến tổng kiểu số nguyên  Xây dựng thuật toán và trình tự  Khai báo các biến  Nhập vào 2 số nguyên  Tính tổng  Xuất kết quả 9 Phương pháp lập trình - Tổng quan
  10. Tính tổng hai số nguyên 1. #include //Khai báo thư viện 2. int main() //Chương trình chính 3. { 4. int x, y, tong; //Khai báo biến 5. printf("Nhap x: "); 6. scanf("%d", &x); //Nhập x 7. printf("Nhap y: "); 8. scanf("%d", &y); //Nhập y 9. tong = x + y; //Biểu thức 10. printf("Tong la %d \n", tong); // Xuất 11. return 0; //Kết thúc 12. } 10 Phương pháp lập trình - Tổng quan
  11. Nhận xét  Khai báo thư viện: Chứa các hàm cần dùng  #include  #include  #include  Chương trình chính: Nơi chương trình bắt đầu int main() { (nội dung chương trình) return 0; }  Khai báo biến: Lưu trữ dữ liệu  Kiểu , ;  int x, y, tong, hieu, tich;  float thuong; // Biến kiểu số thực 11 Phương pháp lập trình - Tổng quan
  12. Nhận xét (2)  Nhập: Nhập từ bàn phím giá trị cho biến  scanf(" ", & );  scanf("%d", &x);  scanf("%f", &z);  Biểu thức: Phép gán, tính toán  = ;  tong = x + y; tich = x * y;  thuong = (float)x/y;  Xuất: Xuất ra màn hình dòng chữ, giá trị của biến  printf(" ", , );  printf("Tong la %d \n", tong);  printf("Thuong la %f \n", thuong); 12 Phương pháp lập trình - Tổng quan
  13. Tính tổng, hiệu, tích, thương  Đề bài: Viết chương trình nhập vào hai số nguyên, xuất ra màn hình tổng, hiệu, tích và thương của của số nguyên đó.  Gợi ý: #include /*Khai báo thư viện*/ int main() //Chương trình chính { . . . // Khai báo biến . . . // Nhập . . . // Biểu thức, tính toán . . . // Xuất return 0; //Kết thúc } 13 Phương pháp lập trình - Tổng quan
  14. Tính tổng, hiệu, tích, thương (tham khảo 1) 1. #include /*Khai báo thư viện*/ 2. int main() //Chương trình chính 3. { 4. int x, y, tong, hieu, tich; 5. float thuong; //Khai báo 6. printf("Nhap so nguyen x: "); 7. scanf("%d", &x); //Nhập x 8. printf("Nhap so nguyen y: "); 9. scanf("%d", &y); //Nhập y 10. tong = x + y; //Biểu thức tính tổng 11. hieu = x - y; //Biểu thức tính hiệu 12. tich = x * y; //Biểu thức tính tích 13. thuong = (float)x / y; //Biểu thức tính thương 14. printf("Tong la %d \n", tong); // Xuất tổng 15. printf("Hieu la %d \n", hieu); // Xuất hiệu 16. printf("Tich la %d \n", tich); // Xuất tích 17. printf("Thuong la %f \n", thuong); // Xuất thương 18. return 0; //Kết thúc 19. } 14 Phương pháp lập trình - Tổng quan
  15. Tính tổng, hiệu, tích, thương (tham khảo 2) 1. #include //Khai báo thư viện 2. int main() //Chương trình chính 3. { 4. int x, y, tong, hieu, tich; //Khai báo 5. float thuong; 6. printf("Nhap vao hai so nguyen: "); 7. scanf("%d%d", &x, &y); //Nhập x, y 8. tong = x + y; hieu = x - y; //Biểu thức 9. tich = x * y; thuong = (float)x / y; 10. printf("%d + %d = %d \n", x, y, tong);// Xuất 11. printf("%d - %d = %d \n", x, y, hieu); 12. printf("%d * %d = %d \n", x, y, tich); 13. printf("%d / %d = %f \n", x, y, thuong); 14. return 0; //Kết thúc 15. } 15 Phương pháp lập trình - Tổng quan
  16. Hình chữ nhật  Đề bài: Viết chương trình nhập vào hai cạnh của hình chữ nhật, xuất ra màn hình diện tích và chu vi của hình chữ nhật.  Gợi ý: a  Khai báo thư viện  Chương trình chính  Khai báo biến DT = ?  Nhập b CV = ?  Biểu thức  Xuất  Kết thúc 16 Phương pháp lập trình - Tổng quan
  17. Hình tròn  Đề bài: Viết chương trình nhập vào bán kính hình tròn, xuất ra màn hình diện tích và chu vi hình tròn.  Gợi ý:  Kiểu biến?  Hằng số? DT = ? r CV = ? 17 Phương pháp lập trình - Tổng quan
  18. Hình tròn (tham khảo) 1. #include 2. int main() 3. { 4. float r; // Bán kính 5. float DT, CV; // Diện tích, chu vi 6. printf("Nhap ban kinh hinh tron: "); 7. scanf("%f", &r); 8. DT = 3.14 * r * r; 9. CV = 2 * 3.14 * r; 10. printf("Dien tich hinh tron: %f\n", DT); 11. printf("Chu vi hinh tron: %f", CV); 12. return 0; 13. } 18 Phương pháp lập trình - Tổng quan
  19. Hằng số 1. #include 2. #define PI 3.14 // PI là hằng số 3. int main() 4. { 5. float r; // Bán kính 6. float DT, CV; // Diện tích, chu vi 7. printf("Nhap ban kinh hinh tron: "); 8. scanf("%f", &r); 9. DT = PI * r * r; 10. CV = 2 * PI * r; 11. printf("Dien tich hinh tron: %.2f\n", DT); 12. printf("Chu vi hinh tron: %.2f", CV); 13. return 0; 14. } 19 Phương pháp lập trình - Tổng quan
  20. Khoảng cách  Đề bài: Viết chương trình nhập vào tọa độ của hai điểm A(xA, yA) và B(xB, yB), xuất ra màn hình khoảng cách giữa hai điểm. A(xA, yA)  Gợi ý:  Thư viện math.h?  Hàm sqrt tính căn bậc hai  Hàm pow tính lũy thừa B(xB, yB) 20 Phương pháp lập trình - Tổng quan
  21. Khoảng cách (tham khảo) 1. #include 2. #include 3. int main() 4. { 5. float xA, yA; // A(xA, yA) 6. float xB, yB; // B(xB, yB) 7. float KC; // Khoảng cách 8. printf("Nhap A(xA, yA): "); 9. scanf("%f%f", &xA, &yA); 10. printf("Nhap B(xB, yB): "); 11. scanf("%f%f", &xB, &yB); 12. KC = sqrt(pow(xA-xB,2) + pow(yA-yB,2)); 13. printf("Khoang cach: %f\n", KC); 14. return 0; 15. } 21 Phương pháp lập trình - Tổng quan
  22. Một số khái niệm  Thư viện  Xuất  stdio.h, math.h  printf(“hello!”);  Chương trình chính  Biểu thức  int main(){ }  tong = x + y;  Kiểu biến  int, float  Toán tử  Tên biến  +, -, *, /  xA, xB  Hằng số  Chú thích  #define PI 3.14  // Lời chú thích  Hàm  Nhập  sqrt, pow, scanf, printf  scanf(“%d”,&x); 22 Phương pháp lập trình - Tổng quan
  23. Công cụ lập trình  C-Free 23 Phương pháp lập trình - Tổng quan
  24. Một số trình biên dịch khác  Codeblocks:  Dev-C++:  Visual studio: US/products/visual-studio-express-vs  TurboC: windows-7-windows-8-and-windows-xp/  Eclipse:  Netbeans:  Ideone: Biên dịch online, hỗ trợ nhiều ngôn ngữ lập trình 24 Phương pháp lập trình - Tổng quan
  25. Nội dung môn học  Thuật toán/giải thuật?  Các thao tác cơ bản  Cách giải bài toán  Đếm, tìm kiếm, tính toán,  Lệnh cấu trúc? thêm, xóa, sắp xếp  if, else, switch, case  ĐệĐệ quy?  for, while, do while  Hàm gọi lại chính nó  Vòng lặp?  Kiểu cấu trúc?  for, while, do while  Do người dùng định nghĩa  Hàm?  Kiểu con trỏ?  Chương trình con  Biến lưu địa chỉ của biến  Mảng?  Dãy số  Kiểu tập tin?  Chuỗi ký tự  Thao tác với tập tin 25 Phương pháp lập trình - Tổng quan
  26. Tìm hiểu sơ lược nội dung qua ví dụ  Thuật toán?  Vòng lặp?  Toán tử ?  for  while  Luận lý?  do while  Quan hệ?  Hàm?  Tăng giảm?  Mảng?  Trên bit?  Chuỗi?  Gán?  Đệ quy?  Lệnh rẽ nhánh?  Kiểu cấu trúc?  if, else, else if  Kiểu con trỏ?  switch  Kiểu tập tin? 26 Phương pháp lập trình - Tổng quan
  27. Thuật toán ?  Ví dụ: Viết chương trình hoán vị hai số nguyên. 1. #include 2. int main() 3. { 4. int x, y, temp; 5. x = 10; 6. y = 60; 7. printf("x=%d, y=%d.\n", x, y); 8. 9. // Hoán vị 10. temp = x; 11. x = y; 12. y = temp; 13. printf("x=%d, y=%d.", x, y); 14. return 0; 15. } 27 Phương pháp lập trình - Tổng quan
  28. Toán tử luận lý ? 1. if (a >= 10 && a = 100) 4. printf("a khong la so co 2 chu so.\n"); 10 100 5. if (a >= 10 && a < 100) 6. printf("a la so co 2 chu so.\n"); 7. else 8. printf("a khong la so co 2 chu so.\n"); 28 Phương pháp lập trình - Tổng quan
  29. Toán tử tăng, giảm ? 1. #include 2. int main() 3. { 4. int a, b = 10; 5. a = ++b; // Tăng trước 6. // Tương đương: b = b + 1; a = b; 7. a = b++; // Tăng sau 8. // Tương đương: a = b; b = b + 1; 9. a = b * 2; // Giảm trước 10. // Tương đương: b = b - 1; a=b*2; 11. a = b * 2; // Giảm sau 12. // Tương đương: a=b*2; b = b - 1; 13. return 0; 14. } 29 Phương pháp lập trình - Tổng quan
  30. Toán tử trên bit ? 1. #include 2. int main() 3. { 4. int a = 52; // 0011 0100 5. int b = 29; // 0001 1101 6. int c; 7. c = a & b; // Phép AND 0001 0100 8. printf("%d & %d = %d\n", a, b, c); 9. c = a | b; // Phép OR 0011 1101 10. printf("%d | %d = %d\n", a, b, c); 11. c = a ^ b; // Phép XOR 0010 1001 12. printf("%d ^ %d = %d\n", a, b, c); 13. c = ~a; // Phép NOT 1100 1011 14. printf("~%d = %d\n", a, c); 15. c = a > 2; // Dịch phải 0000 1101 18. printf("%d >> 2 = %d\n", a, c); 19. return 0; 20. } 30 Phương pháp lập trình - Tổng quan
  31. Toán tử gán ? 1. #include 2. int main() 3. { 4. int a = 5, b; 5. b = a++; // b=a;a=a+1; 6. b += a; // b = b + a; 7. b -= a; // b = b – a; 8. b *= a; // b = b * a; 9. b /= a; // b = b / a; 10. b = 40; 11. b %= a; // b = b % a; 12. b &= a; // b = b & a; 13. b |= a; // b = b | a; 14. b ^= a; // b = b ^ a; 15. return 0; 16. } 31 Phương pháp lập trình - Tổng quan
  32. Lệnh rẽ nhánh ? – if – else if - else  Ví dụ: Tìm giá trị lớn nhất giữa hai số nguyên A và B. 1. if (a>b)  Toán tử quan hệ 2. printf("a lon nhat");  > 3. else  =  b)  == 2. printf("a lon nhat");  != 3. else if (a==b)  Toán tử luận lý 4. printf("a bang b");  && 5. else  || 6. printf("b lon nhat"); 32 Phương pháp lập trình - Tổng quan
  33. Lệnh switch ? – Lựa chọn các trường hợp 1. #include 2. #include 3. int main() 4. { 5. time_t t = time(NULL); 6. struct tm *time = localtime(&t); 7. int today = time->tm_wday; 8. printf("Hom nay la "); 9. switch (today) 10. { 11. case 1: printf("thu hai.");break; 12. case 2: printf("thu ba.");break; 13. case 3: printf("thu tu.");break; 14. case 4: printf("thu nam.");break; 15. case 5: printf("thu sau.");break; 16. default: printf("cuoi tuan."); 17. } 18. return 0; 19. } 33 Phương pháp lập trình - Tổng quan
  34. Vòng lặp ? – for – while – do while  Đề bài: Xuất ra màn hình các số nguyên từ 0 đến 10. 1. int i; 2. for (i = 0; i <= 10; i++) 3. printf("%d ", i); 1. i = 0; 1. i = 0; 2. while(i <= 10) 2. do{ 3. { 3. printf("%d ", i); 4. printf("%d ", i); 4. i++; 5. i++; 5. }while(i <= 10); 6. } 34 Phương pháp lập trình - Tổng quan
  35. Hàm/Chương trình con ? 1. #include 2. int nhan(int x, int y) // Hàm nhan kiểu int 3. { 4. int z; // Biến z lưu giá trị phép nhân 5. z = x * y; // Thực hiện phép nhân 6. return z; // Trả về giá trị cho hàm nhan 7. } 8. void main() 9. { 10. int a, b, c; // Khai báo 11. a = b = 5; // Gán giá trị cho a và b 12. c = nhan(a, b); // c = giá trị hàm nhan 13. printf("%d x %d = %d",a,b,c);// Xuất 14. } 35 Phương pháp lập trình - Tổng quan
  36. Mảng – dãy số ? 1. #include 2. int main() 3. { 4. int mang[5]; // Dãy số gồm 5 phần tử 5. int i; 6. mang[0] = 0; // Phần tử đầu tiên 7. mang[1] = 1; 8. mang[2] = mang[0] + mang[1]; 9. mang[3] = mang[1] + mang[2]; 10. i = 4; 11. mang[i] = mang[i-2] + mang[i-1]; 12. printf("%d",mang[i]); 13. return 0; mang[0] mang[1] mang[2] mang[3] mang[4] 14. } 0 ? ? ? ? 36 Phương pháp lập trình - Tổng quan
  37. Chuỗi ký tự ? 1. #include 2. #include 3. int main() 'C' 'h' 'a' 'o' '!' '\0' 4. { 5. char ten[30]; 6. char gioithieu[50] = "Toi ten la "; 7. char chao[6] = {'C','h','a','o','!','\0'}; 8. printf("Nhap ten cua ban: "); 9. scanf("%[^\n]s",&ten); 10. strcat(gioithieu,ten); 11. printf("%s \n%s \n", chao, gioithieu); 12. printf("Ten co %d ky tu.",strlen(ten)); 13. return 0; 14. } 37 Phương pháp lập trình - Tổng quan
  38. Đệ quy ? 1. #include 2. int factorial(int n) 3. { 4. if (n<=0) return 1; 5. return n * factorial(n-1); 6. } 7. void main() 8. { 9. int n; 10. do{ 11. scanf("%d",&n); 12. }while(n<0); 13. printf("Factorial(%d) = %d", n, factorial(n)); 14. } 38 Phương pháp lập trình - Tổng quan
  39. Kiểu dữ liệu cấu trúc ? 1. #include 2. struct sinhvien // Khai báo kiểu struct 3. { 4. int ID; // Biến ID kiểu nguyên 5. float diem; // Biến điểm kiểu số thực 6. }; 7. void main() 8. { 9. struct sinhvien a; // Khai báo biến 10. a.ID = 123456; // Gán ID cho a.ID 11. a.diem = 5.5; // Gán điểm cho a.diem 12. printf("ID: %s\n", a.ID); // Xuất ID 13. printf("Diem: %d\n", a.diem); // Xuất diem 14. } 39 Phương pháp lập trình - Tổng quan
  40. Kiểu con trỏ - pointer ? Biến x p 1. #include 2. int main() Địa chỉ 0073FB60 0073FB54 3. { Giá trị 20 0073FB60 4. int x = 20; // Giá trị của biến x 5. int *p; // Biến con trỏ 6. p = &x; // Gán địa chỉ của biến x cho p 7. printf("Gia tri cua bien x: %d \n", x); 8. printf("Dia chi cua bien x: %p \n", &x); 9. printf("Dia chi luu trong bien p: %p \n", p); 10. printf("Gia tri cua *p: %d \n", *p); 11. p = NULL; // Gán giá trị rỗng 12. printf("Dia chi luu trong bien p: %p.", p); 13. return 0; 14. } 40 Phương pháp lập trình - Tổng quan
  41. Đọc tập tin ? 1. #include 2. void main() 3. { 4. FILE *f; // Khai báo biến kiểu FILE 5. char buffer[256]; // Kiểu chuỗi 6. f = fopen("input.txt", "r"); // Mở file 7. if (f == NULL) // Không có file này 8. printf("Lỗi khi mở file\n"); 9. else 10. { 11. while (fgets(buffer, 256, f) != NULL) 12. printf("%s",buffer); // Xuất 13. fclose(f); // Đóng file 14. } 15. } 41 Phương pháp lập trình - Tổng quan
  42. Ghi vào tập tin ? 1. #include 2. void main() 3. { 4. FILE *f; // Khai báo biến kiểu FILE 5. char buffer[256]="Lap trinh C";// Kiểu chuỗi 6. f = fopen("output.txt", "w");// Mở file để ghi 7. if (f == NULL) // Không có file này 8. printf("Loi khi mo file\n"); 9. else 10. { 11. fputs(buffer, f); // Ghi chuỗi vào file 12. fclose(f); // Đóng file 13. } 14. } 42 Phương pháp lập trình - Tổng quan
  43. Một số gợi ý  Bám sát các nội dung thực hành (quan trọng!)  Đọc tài liệu, slide trước khi đến lớp  In tài liệu, slide, bài tập  Tự đặt câu hỏi và trả lời  Tự làm bài tập ở nhà  Tóm tắt các nội dung chủ yếu  Vắng học? 43 Phương pháp lập trình - Tổng quan
  44. Hết bài 1  Giới thiệu  Nội dung  Tài liệu  Lịch trình  Kiểm tra  Nội dung môn học qua một số ví dụ 44 Phương pháp lập trình - Tổng quan
  45. Nội dung tiếp theo (Yêu cầu tự học trước)  Thư viện  Xuất  stdio.h, math.h, string.h  printf(“hello!”);  Chương trình chính  Biểu thức  int main(){ }  tong = x + y;  Kiểu biến  Toán tử  int, float  +, -, *, /  Tên biến   xA, xB Hằng số  Chú thích  #define PI 3.14  // Lời chú thích  Hàm  Nhập  sqrt, pow, scanf, printf  scanf(“%d”,&x); 45 Phương pháp lập trình - Tổng quan