Tài liệu Phương pháp lập trình - Tổng quan - Ngô Hữu Dũng: Phương pháp lập trình
Tổng quan
TS. Ngô Hữu Dũng
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH
Bài 1 – Giới thiệu
Phương pháp lập trình - Tổng quan
Blog ngohuudung.blogspot.com
Email ngohuudung@iuh.edu.vn
2
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
Phương pháp lập trình - Tổng quan3
Tài liệu
Phương pháp lập trình - Tổng quan
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 L...
45 trang |
Chia sẻ: putihuynh11 | Lượt xem: 586 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Phương pháp lập trình - Tổng quan - 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
Phương pháp lập trình
Tổng quan
TS. Ngô Hữu Dũng
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH
Bài 1 – Giới thiệu
Phương pháp lập trình - Tổng quan
Blog ngohuudung.blogspot.com
Email ngohuudung@iuh.edu.vn
2
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
Phương pháp lập trình - Tổng quan3
Tài liệu
Phương pháp lập trình - Tổng quan
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
Lịch trình
Phương pháp lập trình - Tổng quan
Tuần Nội dung
Lý
thuyết
Thực
hành
Kiểm
tra
Tự học
1 Giới thiệu môn học 3 6
2
Các thành phần cơ bản của Ngôn ngữ C
3
6
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
Kiểm tra đánh giá
Phương pháp lập trình - Tổng quan
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
Thảo luận
Phương pháp lập trình - Tổng quan7
Why?
What?
How?
Where?
When?
Giới thiệu về môn học qua một số ví dụ
Phương pháp lập trình - Tổng quan8
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
Các bước giải bài toán
Phương pháp lập trình - Tổng quan9
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ả
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. }
Phương pháp lập trình - Tổng quan10
Nhận xét
Phương pháp lập trình - Tổng quan11
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
Nhận xét (2)
Phương pháp lập trình - Tổng quan12
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);
Tính tổng, hiệu, tích, thương
Phương pháp lập trình - Tổng quan13
Đề 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
}
Tính tổng, hiệu, tích, thương (tham khảo 1)
Phương pháp lập trình - Tổng quan14
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. }
Tính tổng, hiệu, tích, thương (tham khảo 2)
Phương pháp lập trình - Tổng quan15
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. }
Hình chữ nhật
Phương pháp lập trình - Tổng quan16
Đề 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 ý:
Khai báo thư viện
Chương trình chính
Khai báo biến
Nhập
Biểu thức
Xuất
Kết thúc
a
b
DT = ?
CV = ?
Hình tròn
Phương pháp lập trình - Tổng quan17
Đề 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ố? rDT = ?
CV = ?
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. }
Phương pháp lập trình - Tổng quan18
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. }
Phương pháp lập trình - Tổng quan19
Khoảng cách
Phương pháp lập trình - Tổng quan20
Đề 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.
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
A(xA, yA)
B(xB, yB)
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. }
Phương pháp lập trình - Tổng quan21
Một số khái niệm
Phương pháp lập trình - Tổng quan22
Thư viện
stdio.h, math.h
Chương trình chính
int main(){}
Kiểu biến
int, float
Tên biến
xA, xB
Chú thích
// Lời chú thích
Nhập
scanf(“%d”,&x);
Xuất
printf(“hello!”);
Biểu thức
tong = x + y;
Toán tử
+, -, *, /
Hằng số
#define PI 3.14
Hàm
sqrt, pow, scanf, printf
Công cụ lập trình
Phương pháp lập trình - Tổng quan23
C-Free
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: https://netbeans.org/downloads/index.html
Ideone: Biên dịch online, hỗ trợ nhiều ngôn ngữ lập trình
https://ideone.com/
Phương pháp lập trình - Tổng quan24
Nội dung môn học
Phương pháp lập trình - Tổng quan25
Thuật toán/giải thuật?
Cách giải bài toán
Lệnh cấu trúc?
if, else, switch, case
for, while, do while
Vòng lặp?
for, while, do while
Hàm?
Chương trình con
Mảng?
Dãy số
Chuỗi ký tự
Các thao tác cơ bản
Đếm, tìm kiếm, tính toán,
thêm, xóa, sắp xếp
Đệ quy?
Hàm gọi lại chính nó
Kiểu cấu trúc?
Do người dùng định nghĩa
Kiểu con trỏ?
Biến lưu địa chỉ của biến
Kiểu tập tin?
Thao tác với tập tin
Tìm hiểu sơ lược nội dung qua ví dụ
Phương pháp lập trình - Tổng quan26
Thuật toán?
Toán tử ?
Luận lý?
Quan hệ?
Tăng giảm?
Trên bit?
Gán?
Lệnh rẽ nhánh?
if, else, else if
switch
Vòng lặp?
for
while
do while
Hàm?
Mảng?
Chuỗi?
Đệ quy?
Kiểu cấu trúc?
Kiểu con trỏ?
Kiểu tập tin?
Thuật toán ?
Phương pháp lập trình - Tổng quan27
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. }
Toán tử luận lý ?
1. if (a >= 10 && a < 100)
2. printf("a la so co 2 chu so.\n");
3. if (a = 100)
4. printf("a khong la so co 2 chu so.\n");
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");
Phương pháp lập trình - Tổng quan28
10 100
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. }
Phương pháp lập trình - Tổng quan29
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 trái 1101 0000
16. printf("%d << 2 = %d\n", a, c);
17. c = a >> 2; // Dịch phải 0000 1101
18. printf("%d >> 2 = %d\n", a, c);
19. return 0;
20. }
Phương pháp lập trình - Tổng quan30
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. }
Phương pháp lập trình - Tổng quan31
Lệnh rẽ nhánh ? – if – else if - else
Phương pháp lập trình - Tổng quan32
Ví dụ: Tìm giá trị lớn nhất giữa hai số nguyên A và B.
1. if (a>b)
2. printf("a lon nhat");
3. else
4. printf("b lon nhat");
1. if (a>b)
2. printf("a lon nhat");
3. else if (a==b)
4. printf("a bang b");
5. else
6. printf("b lon nhat");
Toán tử quan hệ
>
<
>=
<=
==
!=
Toán tử luận lý
&&
||
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. }
Phương pháp lập trình - Tổng quan33
Vòng lặp ? – for – while – do while
Phương pháp lập trình - Tổng quan34
Đề 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;
2. do{
3. printf("%d ", i);
4. i++;
5. }while(i <= 10);
1. i = 0;
2. while(i <= 10)
3. {
4. printf("%d ", i);
5. i++;
6. }
Hàm/Chương trình con ?
35
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. }
Phương pháp lập trình - Tổng quan
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;
14. }
mang[0] mang[1] mang[2] mang[3] mang[4]
0 ? ? ? ?
Phương pháp lập trình - Tổng quan36
Chuỗi ký tự ?
1. #include
2. #include
3. int main()
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. }
'C' 'h' 'a' 'o' '!' '\0'
Phương pháp lập trình - Tổng quan37
Đệ quy ?
38
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. }
Phương pháp lập trình - Tổng quan
Kiểu dữ liệu cấu trúc ?
39
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. }
Phương pháp lập trình - Tổng quan
Kiểu con trỏ - pointer ?
40
1. #include
2. int main()
3. {
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. }
Biến x p
Địa chỉ 0073FB60 0073FB54
Giá trị 20 0073FB60
Phương pháp lập trình - Tổng quan
Đọc tập tin ?
41
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. }
Phương pháp lập trình - Tổng quan
Ghi vào tập tin ?
42
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. }
Phương pháp lập trình - Tổng quan
Một số gợi ý
Phương pháp lập trình - Tổng quan43
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?
Hết bài 1
Phương pháp lập trình - Tổng quan
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
Nội dung tiếp theo (Yêu cầu tự học trước)
Phương pháp lập trình - Tổng quan45
Thư viện
stdio.h, math.h, string.h
Chương trình chính
int main(){}
Kiểu biến
int, float
Tên biến
xA, xB
Chú thích
// Lời chú thích
Nhập
scanf(“%d”,&x);
Xuất
printf(“hello!”);
Biểu thức
tong = x + y;
Toán tử
+, -, *, /
Hằng số
#define PI 3.14
Hàm
sqrt, pow, scanf, printf
Các file đính kèm theo tài liệu này:
- bai_giang_phuong_phap_lap_trinh_ts_ngo_huu_dung_1_phuong_phap_lap_trinh_tong_quan_7137_1985347.pdf