TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH

Nhập môn lập trình Tổng quan TS. Ngô Hữu Dũng

Bài 1 – Giới thiệu

Blog Email

ngohuudung.blogspot.com ngohuudung@iuh.edu.vn

2 Nhập môn lập trình - Tổng quan

Nội dung

 Tổng quan lập trình  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  Lệnh lựa chọn - rẽ nhánh  Thuật toán  Vòng lặp  Hàm – chương trình con  Kiểu dữ liệu mảng  Chuỗi ký tự

3 Nhập môn lập trình - Tổng quan

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 Nhập môn lập trình - Tổng quan

Lịch trình

Tuần

Nội dung

Tự học

Lý thuyết

Thực hành

Kiểm tra

1

Giới thiệu môn học

2

4

Các thành phần cơ bản của Ngôn ngữ C

4

2

2

Nhập xuất dữ liệu và các thư viện

4

3

Các câu lệnh có cấu trúc

2

6

10

4

Vòng lặp – thuật toán

2

TK

6

10

5

Hàm – chương trình con

2

GK

6

10

6

Mảng

2

6

10

7

Mảng và chuỗi

2

6

10

8

Ôn tập

1

6

8

9

6

6

10

6

6

11

6

6

12

6

6

94

60

15 Nhập môn lập trình - Tổng quan

5

Kiểm tra đánh giá  Lý thuyết

 Kiểm tra thường kỳ

 Thực hành

 Kiểm tra thường kỳ  Thi giữa kỳ  Thi cuối kỳ  Điểm liệt: <3  Số tín chỉ: 3

 Lý thuyết: 15  Thực hành: 60  Tự học: 94

6 Nhập môn lập trình - Tổng quan

Thảo luận

 What?

 Why?

 How?

7 Nhập môn lập trình - Tổng quan

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?

8 Nhập môn lập trình - Tổng quan

Chương trình?

1. /* Xuất ra màn hình dòng chữ: 2. Hello world! 3. */ 4. #include

5. int main() 6. {

7.

printf("Hello world! "); return 0;

8. 9. }

9 Nhập môn lập trình - Tổng quan

Các bước lập trình

 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  Cài đặt (viết) chương trình và biên dịch  Chạy thử và sửa lỗi  Hoàn thiện và tối ưu hóa

10 Nhập môn lập trình - Tổng quan

Ví dụ về các bước lập trình  Bài toán: 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  Cài đặt (viết) và biên dịch chương trình  Chạy thử và sửa lỗi  Hoàn thiện và tối ưu hóa

11 Nhập môn lập trình - Tổng quan

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 dữ liệu,

 Cần lưu hai số nguyên  Cần lưu tổng hai số nguyên

 Xây dựng thuật toán và trình tự,

 Khai báo các biến để lưu trữ, bao nhiêu biến? Kiểu gì?  Nhập vào 2 số nguyên  Tính tổng  Xuất kết quả

 Viết và biên dịch chương trình,  Chạy thử và sửa lỗi

12 Nhập môn lập trình - Tổng quan

Cấu trúc chương trình C 1. //Khai báo thư viện

2. //Chương trình chính 3. int main() 4. { 5.

6.

// Khai báo biến // Nội dung chương trình return 0;

//Kết thúc

7. 8. } 9. // Ghi chú: // là dấu chú thích, 10. // không ảnh hưởng đến chương trình

13 Nhập môn lập trình - Tổng quan

Khai báo thư viện 1. #include // Thư viện stdio.h 2. // Chứa các hàm nhập xuất cơ bản : standard C input output 3. // stdio 4. // .h : header 5. //Chương trình chính 6. int main() 7. { 8.

9.

// Khai báo biến // Nội dung chương trình return 0;

//Kết thúc

10. 11. }

14 Nhập môn lập trình - Tổng quan

Khai báo biến 1. #include

// Thư viện

2. //Chương trình chính 3. int main() 4. {

5.

6.

7.

// int: integer – số nguyên // Cú pháp: ;

8.

9.

// Khai báo biến int x; int y; int tong; // Hoặc: int x, y, tong; // Nội dung chương trình return 0;

//Kết thúc

10. 11. }

15 Nhập môn lập trình - Tổng quan

Trình tự của chương trình 1. #include

// Thư viện

2. //Chương trình chính 3. int main() 4. { 5.

//Khai báo biến

6.

7.

8.

int x, y, tong; // Nhập giá trị cho x và y // Tính tổng // Xuất ra màn hình giá trị tổng return 0;

//Kết thúc

9. 10. }

16 Nhập môn lập trình - Tổng quan

Lưu đồ thuật toán và Mã giả

Dùng để biểu diễn, mô tả giải thuật

Start

Read x Read y

tong = x + y

Print tong

Problem Tính tổng Input x, y: Integer Output tong: Integer READ x, y tong = x + y WRITE tong END

End

17 Nhập môn lập trình - Tổng quan

Nhập giá trị cho biến 1. #include

// Thư viện

//Chương trình chính

2. int main() 3. {

4.

//Khai báo biến

5.

6.

7.

//Nhập x //Nhập y

8.

9.

int x, y, tong; // Nhập giá trị cho x và y scanf("%d", &x); scanf("%d", &y); // Tính tổng // Xuất ra màn hình giá trị tổng return 0;

//Kết thúc

10. 11. }

18 Nhập môn lập trình - Tổng quan

//Khai báo thư viện

Tính toán – Xử lý 1. #include

//Chương trình chính

2. int main() 3. { 4.

//Khai báo biến

5.

6.

7.

//Nhập x //Nhập y

8.

9.

10.

11.

int x, y, tong; // Nhập giá trị cho x và y scanf("%d", &x); scanf("%d", &y); // Tính tổng // Phép gán tong = x + y; // Cú pháp: = ; // Xuất ra màn hình giá trị tổng //Kết thúc return 0;

12. 13. }

Nhập môn lập trình - Tổng quan 19

Xuất ra màn hình 1. #include

//Khai báo thư viện

//Chương trình chính

2. int main() 3. { 4.

//Khai báo biến

5.

6.

7.

//Nhập x //Nhập y

8.

9.

10.

11.

// Xuất

int x, y, tong; // Nhập giá trị cho x và y scanf("%d", &x); scanf("%d", &y); // Tính tổng // Phép gán tong = x + y; // Xuất ra màn hình giá trị tổng printf("Tong la %d \n", tong); return 0;

//Kết thúc

12. 13. }

Nhập môn lập trình - Tổng quan 20

Chương trình tính tổng tham khảo 1. #include

//Khai báo thư viện

//Chương trình chính

2. int main() 3. {

4.

//Khai báo biến

5.

6.

//Nhập x

7.

8.

9.

//Nhập y //Tính tổng

10.

// Xuất

int x, y, tong; printf("Nhap x: "); scanf("%d", &x); printf("Nhap y: "); scanf("%d", &y); tong = x + y; printf("Tong la %d \n", tong); return 0;

//Kết thúc

11. 12. }

21 Nhập môn lập trình - Tổng quan

How’s it work? 1. #include

7 y

11 tong

4 x

2. int main() 3. { 4.

5.

6.

7.

Nhap x: 4 Nhap x: Nhap y: 7 Nhap y: Tong la 11 Tong la 11

8.

9.

10.

int x, y, tong; printf("Nhap x: "); scanf("%d", &x); printf("Nhap y: "); scanf("%d", &y); tong = x + y; printf("Tong la %d \n", tong); return 0;

11. 12. }

22

Nhận xét – Thư viện

 Thư viện

 Chứa các hàm đã được định nghĩa sẵn

 Khai báo

 #include

// Nhập xuất

// Toán học

 #include  #include // Thư viện chuẩn  #include  #include // Chuỗi ký tự  #include  #include

// Ký tự // Thời gian

23 Nhập môn lập trình - Tổng quan

Nhận xét – Chương trình chính main

 Chương trình chính:

 Nơi chương trình bắt đầu  Cần duy nhất một chương trình chính

int main() {

// nội dung chương trình return 0;

// Kết thúc

}

24 Nhập môn lập trình - Tổng quan

Nhận xét – Biến (variable)

 Biến

 Lưu trữ dữ liệu cần thiết  Giá trị có thể thay đổi  Có kiểu dữ liệu cụ thể (nguyên, thực, ký tự…)

 Khai báo

, ;

// Biến kiểu số thực // Biến kiểu ký tự

 int x, y, tong, hieu, tich;// Số nguyên  float thuong;  char kyTu;  char chuoi[50]; // Biến kiểu chuỗi ký tự

25 Nhập môn lập trình - Tổng quan

Nhận xét – Nhập dữ liệu

 Nhập

 Nhập từ bàn phím giá trị cho biến  Nhập đúng kiểu dữ liệu tương ứng với kiểu của biến

 scanf("<định dạng>", &);

// c: char

 scanf("%d", &x); // d: decimal  scanf("%i", &y); // i: integral  scanf("%f", &thuong);// f: float  scanf("%c", &kyTu);  scanf("%s", &chuoi); // s: string

 gets();

 gets(chuoi);

26 Nhập môn lập trình - Tổng quan

Nhận xét – Tính toán

 Phép gán, biểu thức

= ;

 tong = x + y;  tich = x * y;  thuong = (float)x/y;  trungBinhCong = (x + y)/2.0;

 Toán tử số học

 +: Cộng, -: Trừ, *: Nhân,  /: Chia,  %: Chia lấy dư (dành cho số nguyên)

27 Nhập môn lập trình - Tổng quan

Nhận xét – Xuất

 Xuất ra màn hình dòng chữ, giá trị của biến

 printf("<định dạng>", ,);

 printf("Tong: %d \n", tong);  printf("Thuong: %f \n", thuong);  printf("Ky tu: %c \n", kyTu);  printf("Chuoi: %s \n", chuoi);

28 Nhập môn lập trình - Tổng quan

Nhận xét – Mã giả

 Dùng để biểu diễn thuật toán  Không nhất thiết chính xác về cú pháp  Không nhất thiết tuân theo một ngôn ngữ cụ thể  Ví dụ một số từ khoá: READ, WRITE, IF, ELSE, ENDIF, FOR, ENDFOR, WHILE, ENDWHILE.  Mỗi lệnh hoặc mỗi bước chỉ nên viết trên một dòng  Dùng thụt đầu dòng cho các lệnh có cấu trúc  Kết thúc lệnh bằng ENDIF, ENDFOR…

29 Nhập môn lập trình - Tổng quan

Nhận xét – Lưu đồ thuật toán

 Biểu diễn thuật toán bằng sơ đồ khối

Hình dạng

Tên gọi

Hành động

Terminator

Data

Bắt đầu hoặc kết thúc chương trình Nhập hoặc xuất dữ liệu

Process

Xử lý, thực hiện một thao tác

Decision

Quyết định hướng xử lý theo điều kiện Flow direction Hướng đi của luồng xử lý

Connector

Điểm kết nối

30 Nhập môn lập trình - Tổng quan

Hằng số

 Đề 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 ý:

 Hằng số PI?

r

DT = ? CV = ?

 #define PI 3.14  const int IP = 3.14;

31 Nhập môn lập trình - Tổng quan

// PI là hằng số

Hằng số - tham khảo 1. #include 2. #define PI 3.14 3. int main() 4. { 5.

6.

7.

8.

9.

10.

11.

12.

// Bán kính float r; // Diện tích, chu vi float DT, CV; printf("Nhap ban kinh hinh tron: "); scanf("%f", &r); DT = PI * r * r; CV = 2 * PI * r; printf("Dien tich hinh tron: %.2f\n", DT); printf("Chu vi hinh tron: %.2f", CV); return 0;

13. 14. }

32 Nhập môn lập trình - Tổng quan

 Xuất - Output

 printf(“hello!”);

 Phép toán – Operation

Một số khái niệm  Thư viện – Library  stdio.h, math.h  Chương trình chính  int main(){…}

 tong = x + y;

 Kiểu biến – Data type

 Toán tử - Operator

 int, float

 +, -, *, /

 Tên biến – Variable name

 xA, xB

 Chú thích - Comment

 // Lời chú thích

 Hằng số - Constant  #define PI 3.14  const float PI = 3.14

 Nhập - Input

 Hàm - Function

 scanf(“%d”,&x);

 sqrt, pow, scanf, printf

33 Nhập môn lập trình - Tổng quan

Công cụ lập trình

 C-Free, Dev-C, CodeBlocks, Visual Studio…

34 Nhập môn lập trình - Tổng quan

Một số trình biên dịch khác

 Codeblocks: http://www.codeblocks.org/downloads/  Dev-C++: http://www.bloodshed.net/dev/devcpp.html  Visual studio: http://www.visualstudio.com/en-

US/products/visual-studio-express-vs

 TurboC: http://borlandc.org/download-turbo-c-3-0-for-

windows-7-windows-8-and-windows-xp/

 Eclipse: http://www.eclipse.org/ide/  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/

35 Nhập môn lập trình - Tổng quan

Giảng viên: Instructor

36 Nhập môn lập trình - Tổng quan

Tự tìm hiểu nội dung môn học  Thuật toán? Algorithm

 Các thao tác cơ bản

 Cách giải bài toán

 Lệnh lựa chọn? Selection

 (Lệnh rẽ nhánh)  if .. else, switch .. case

 Vòng lặp? Loop

 for, while, do while

 Hàm? Function

 Chương trình con

 Mảng? Array

input  Nhập output  Xuất,  Đếm, count  Tìm kiếm, search  Tính toán, calculation  Trích xuất, list list  Liệt kê add  Thêm, remove  Xóa,  Sắp xếp… sort

 Dãy số  Chuỗi ký tự

37 Nhập môn lập trình - Tổng quan

Bài tập 1.1 – Các thao tác lập trình

38 Nhập môn lập trình - Tổng quan

Bài tập 1.1 – Các thao tác lập trình  Khởi động: Kích đôi vào biểu tượng C-Free hoặc

Dev-C++

 Mở tập tin mới: File  New, hoặc kích vào Biểu

tượng 2

 Lưu file nguồn: File  Save, hoặc File  Save

as…, hoặc kích Biểu tượng 3

 Gõ chương trình Hello world vào khu vực số 4  Biên dịch, chạy chương trình, dừng chương trình ở

khu vực số 5

 Kiểm tra và sửa lỗi biên dịch ở khu vực số 6  Xem và kiểm tra kết quả ở màn hình số 7

39 Nhập môn lập trình - Tổng quan

Bài tập 1.2 – Tính toán

 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*/

//Chương trình chính

int main() {

. . . . . . . . . . . . return 0;

// Khai báo biến // Nhập // Biểu thức, tính toán // Xuất //Kết thúc

}

40 Nhập môn lập trình - Tổng quan

Tính tổng, hiệu, tích, thương (tham khảo 1)

1.

2.

/*Khai báo thư viện*/ //Chương trình chính

3.

#include int main() {

4.

5.

//Khai báo

6.

7.

//Nhập x

8.

9.

10.

11.

12.

13.

//Nhập y //Biểu thức tính tổng //Biểu thức tính hiệu //Biểu thức tính tích //Biểu thức tính thương

14.

15.

16.

// Xuất tổng // Xuất hiệu // Xuất tích

17.

int x, y, tong, hieu, tich; float thuong; printf("Nhap so nguyen x: "); scanf("%d", &x); printf("Nhap so nguyen y: "); scanf("%d", &y); tong = x + y; hieu = x - y; tich = x * y; thuong = (float)x / y; printf("Tong la %d \n", tong); printf("Hieu la %d \n", hieu); printf("Tich la %d \n", tich); printf("Thuong la %f \n", thuong); // Xuất thương return 0;

//Kết thúc

18. 19. }

41 Nhập môn lập trình - Tổng quan

//Khai báo thư viện //Chương trình chính

Tính tổng, hiệu, tích, thương (tham khảo 2) 1. #include 2. int main() 3. { 4.

//Khai báo

5.

6.

7.

8.

//Nhập x, y //Tính toán

9.

10.

11.

12.

13.

int x, y, tong, hieu, tich; float thuong; printf("Nhap vao hai so nguyen: "); scanf("%d%d", &x, &y); tong = x + y; hieu = x - y; tich = x * y; thuong = (float)x / y; printf("%d + %d = %d \n", x, y, tong);// Xuất printf("%d - %d = %d \n", x, y, hieu); printf("%d * %d = %d \n", x, y, tich); printf("%d / %d = %f \n", x, y, thuong); return 0;

//Kết thúc

14. 15. }

42 Nhập môn lập trình - Tổng quan

Bài tập 1.3 – Hình chữ nhật

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, chu vi và chiều dài đường chéo của hình chữ nhật.

a

 Gợi ý:

 Giả sử chiều dài đường chéo là c

b

DT = ? CV = ? c = ?

 c2 = a2 + b2  Tính căn bậc hai  Hàm sqrt(x) =  Hàm sqrt thuộc thư viện math.h

43 Nhập môn lập trình - Tổng quan

Hình chữ nhật (tham khảo) 1. #include 2. #include 3. int main() 4. { 5.

6.

// Hai cạnh // Đường chéo

7.

8.

9.

10.

11.

12.

13.

14.

15.

float a, b; float c; float dienTich, chuVi; printf("Nhap hai canh: "); scanf("%f%f", &a, &b); dienTich = a * b; chuVi = (a + b)*2; c = sqrt(a*a + b*b); printf("Dien tich: %f\n", dienTich); printf("Chu vi: %f\n", chuVi); printf("Duong cheo: %f\n", c); return 0;

Nhập môn lập trình - Tổng quan

16. 17. } 44

Bài tập 1.4 – 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

 sqrt(x):

 Hàm pow tính lũy thừa

 pow(x, 2): x2

B(xB, yB)

45 Nhập môn lập trình - Tổng quan

Khoảng cách (tham khảo) 1. #include 2. #include 3. int main() 4. { 5.

6.

7.

// A(xA, yA) // B(xB, yB) // Khoảng cách

8.

9.

10.

11.

12.

13.

float xA, yA; float xB, yB; float KC; printf("Nhap A(xA, yA): "); scanf("%f%f", &xA, &yA); printf("Nhap B(xB, yB): "); scanf("%f%f", &xB, &yB); KC = sqrt(pow(xA-xB,2) + pow(yA-yB,2)); printf("Khoang cach: %f\n", KC); return 0;

14. 15. }

Nhập môn lập trình - Tổng quan 46

Bài tập 1.5 – Chữ số

 Viết chương trình nhập vào một số nguyên có hai chữ số, xuất ra màn hình chữ số hàng chục và chữ số hàng đơn vị của số nguyên ấy.

 Gợi ý:

 Số hàng chục: Dùng phép chia lấy phần nguyên, ví

dụ: chuc = so / 10;

 Số hàng đơn vị: Dùng phép chia lấy dư, ví dụ donvi

= so % 10;

 Yêu cầu: Phân biệt hai phép chia lấy dư và chia lấy

nguyên

47 Nhập môn lập trình - Tổng quan