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

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

Bài 1 – Giới thiệu

Email ngohuudung@iuh.edu.vn Blog

ngohuudung.blogspot.com/

2 Ngôn ngữ lập trình C - Tổng quan

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  Hàm  Mảng và chuỗi  Giải thuật đệ quy  Kiểu dữ liệu cấu trúc  Kiểu con trỏ  Kiểu tập tin

3 Ngôn ngữ lập trình C - 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 Ngôn ngữ lập trình C - 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

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

6

4

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

3

3

TK

6

5

Mảng và chuỗi

3

3

GK

6

6

Quy nạp toán học và Lập trình đệ quy

3

3

6

7

Kiểu cấu trúc và ứng dụng

3

3

6

8

Biến động và kiểu con trỏ

3

3

6

9

Kiểu tập tin, vào/ra dữ liệu

3

3

TK

6

10

Ôn tập

3

3

6

11-12

6

CK

12

30

30

5 Ngôn ngữ lập trình C - Tổng quan

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ỉ: 3 (60 tiết)

 Lý thuyết: 30  Thực hành: 30

6 Ngôn ngữ lập trình C - Tổng quan

Thảo luận

 Học cái gì?

 Học như thế nào?

 Vì sao phải học môn này?

 Kỹ sư là gì?

 Làm thế nào để giải được một bài toán?

7 Ngôn ngữ lập trình C - Tổng quan

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  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 Ngôn ngữ lập trình C - Tổng quan

Tính tổng hai số nguyên 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 //Biểu thức

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);// Xuất return 0;

//Kết thúc

11. 12. }

9 Ngôn ngữ lập trình C - Tổng quan

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

10 Ngôn ngữ lập trình C - Tổng quan

Nhận xét (2)

 Nhập: Nhập từ bàn phím giá trị cho biến

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

 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("<định dạng>", ,);

 printf("Tong la %d \n", tong);  printf("Thuong la %f \n", thuong);

11 Ngôn ngữ lập trình C - Tổng quan

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 ý:

1.

#include /*Khai báo thư viện*/

2.

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

3.

int main() {

4.

5.

6.

7.

8.

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

//Kết thúc

9.

}

12 Ngôn ngữ lập trình C - Tổng quan

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

1.

2.

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

3.

#include /*Khai báo thư viện*/ int main() {

4.

5.

//Khai báo

6.

7.

8.

9.

10.

11.

12.

13.

//Biểu thức

14.

15.

16.

17.

int x, y, tong, hieu, tich; float thuong; printf("Nhap so nguyen x: "); scanf("%d", &x); //Nhập x printf("Nhap so nguyen y: "); //Nhập y scanf("%d", &y); //Biểu thức tong = x + y; //Biểu thức hieu = x - y; tich = x * y; //Biểu thức thuong = (float)x / y; printf("Tong la %d \n", tong); // Xuất printf("Hieu la %d \n", hieu); // Xuất // Xuất printf("Tich la %d \n", tich); printf("Thuong la %f \n", thuong); // Xuất return 0;

//Kết thúc

18. 19. }

13 Ngôn ngữ lập trình C - 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.

//Nhập x, y

8.

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;//Biểu thức 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. }

14 Ngôn ngữ lập trình C - Tổng quan

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

b

DT = ? CV = ?

 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 15

Ngôn ngữ lập trình C - Tổng quan

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ố?

r

DT = ? CV = ?

16 Ngôn ngữ lập trình C - Tổng quan

Hình tròn (tham khảo) 1. #include

2. int main() 3. { 4.

5.

6.

7.

8.

9.

10.

11.

// 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 = 3.14 * r * r; CV = 2 * 3.14 * r; printf("Dien tich hinh tron: %f\n", DT); printf("Chu vi hinh tron: %f", CV); return 0;

12. 13. }

Ngôn ngữ lập trình C - Tổng quan 17

// PI là hằng số

Hằng số 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. }

18 Ngôn ngữ lập trình C - Tổng quan

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)

19 Ngôn ngữ lập trình C - 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. }

Ngôn ngữ lập trình C - Tổng quan 20

Một số khái niệm

 Thư viện

 Xuất

 printf(“hello!”);

 Biểu thức

 stdio.h, math.h  Chương trình chính  int main(){…}

 tong = x + y;

 Toán tử

 +, -, *, /  Hằng số

 Kiểu biến  int, float  Tên biến  xA, xB

 #define PI 3.14

 Nhập

 Hàm

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

 sqrt, pow, scanf, printf

21 Ngôn ngữ lập trình C - Tổng quan

Công cụ lập trình

 C-Free

22 Ngôn ngữ lập trình C - 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/

23 Ngôn ngữ lập trình C - Tổng quan

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

Một số khái niệm khác  Thuật toán/giải thuật?  Cách giải bài toán

 Đếm, tìm kiếm, tính toán,

 Toán tử?

thêm, xóa, sắp xếp…

 Quan hệ, luận lý, tăng/giảm,

 Đệ quy?

gán, trên bit…  Lệnh cấu trúc?

 Hàm gọi lại chính nó

 if, else, switch, case  for, while, do while

 Kiểu cấu trúc?

 Vòng lặp?

 Do người dùng định nghĩa

 for, while, do while

 Kiểu con trỏ?

 Hàm?

 Chương trình con

 Biến lưu địa chỉ của biến

 Mảng?

 Kiểu tập tin?

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

 Thao tác với tập tin

24 Ngôn ngữ lập trình C - Tổng quan

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. 5. 6. 7. 8. 9. 10. 11.

int x, y, temp; x = 10; y = 60; printf("x=%d, y=%d.\n", x, y); // Hoán vị temp = x; x = y; y = temp;

printf("x=%d, y=%d.", x, y); return 0;

12. 13. 14. }

25 Ngôn ngữ lập trình C - Tổng quan

Lệnh cấu trúc ? – 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ệ

printf("a lon nhat");

2. 3. else

4.

printf("b lon nhat");

printf("a lon nhat");

 >  <  >=  <=  ==  !=

 Toán tử luận lý

printf("a bang b");

 &&  ||

1. if (a>b) 2. 3. else if (a==b) 4. 5. else 6.

printf("b lon nhat");

26 Ngôn ngữ lập trình C - Tổng quan

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 < 10 || a >= 100) 4.

printf("a khong la so co 2 chu so.\n");

100

10

printf("a la so co 2 chu so.\n");

5. if (a >= 10 && a < 100) 6. 7. else 8.

printf("a khong la so co 2 chu so.\n");

27 Ngôn ngữ lập trình C - Tổng quan

Toán tử tăng, giảm ?

1. #include 2. int main() 3. { 4.

5.

// Tăng trước

6.

7.

// Tăng sau

8.

9.

// Giảm trước

10.

11.

// Giảm sau

12.

int a, b = 10; a = ++b; // Tương đương: b = b + 1; a = b; a = b++; // Tương đương: a = b; b = b + 1; a = --b * 2; // Tương đương: b = b - 1; a=b*2; a = b-- * 2; // Tương đương: a=b*2; b = b - 1; return 0;

13. 14. }

Ngôn ngữ lập trình C - Tổng quan 28

Toán tử trên bit ?

// 0011 0100 // 0001 1101

// Phép AND 0001 0100

// Phép OR 0011 1101

// Phép XOR 0010 1001

// Phép NOT 1100 1011

// Dịch trái 1101 0000

// Dịch phải 0000 1101

int a = 52; int b = 29; int c; c = a & b; printf("%d & %d = %d\n", a, b, c); c = a | b; printf("%d | %d = %d\n", a, b, c); c = a ^ b; printf("%d ^ %d = %d\n", a, b, c); c = ~a; printf("~%d = %d\n", a, c); c = a << 2; printf("%d << 2 = %d\n", a, c); c = a >> 2; printf("%d >> 2 = %d\n", a, c); return 0;

1. #include 2. int main() 3. { 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. }

29 Ngôn ngữ lập trình C - Tổng quan

Toán tử gán ?

// b = b % a; // b = b & a; // b = b | a; // b = b ^ a;

int a = 5, b; b = a++; // b=a;a=a+1; // b = b + a; b += a; // b = b – a; b -= a; // b = b * a; b *= a; // b = b / a; b /= a; b = 40; b %= a; b &= a; b |= a; b ^= a; return 0;

1. #include 2. int main() 3. { 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. }

30 Ngôn ngữ lập trình C - Tổng quan

Lệnh switch ? – Lựa chọn các trường hợp

time_t t = time(NULL); struct tm *time = localtime(&t); int today = time->tm_wday; printf("Hom nay la "); switch (today) {

case 1: printf("thu hai.");break; case 2: printf("thu ba.");break; case 3: printf("thu tu.");break; case 4: printf("thu nam.");break; case 5: printf("thu sau.");break; default: printf("cuoi tuan.");

} return 0;

1. #include 2. #include 3. int main() 4. { 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. }

31 Ngôn ngữ lập trình C - Tổng quan

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.

3.

1. int i; 2. for (i = 0; i <= 10; i++) printf("%d ", i);

1. i = 0; 2. do{

3.

1. i = 0; 2. while(i <= 10) 3. { 4.

printf("%d ", i); i++;

printf("%d ", i); i++;

4. 5. }while(i <= 10);

5. 6. }

32 Ngôn ngữ lập trình C - Tổng quan

Hàm/Chương trình con ?

// Hàm nhan kiểu int

1. #include 2. int nhan(int x, int y) 3. { 4.

// Biến z lưu giá trị phép nhân

5.

int z; z = x * y; // Thực hiện phép nhân return z;

// Trả về giá trị cho hàm nhan

6. 7. } 8. void main() 9. { 10.

11.

12.

// Khai báo // Gán giá trị cho a và b // c = giá trị hàm nhan

int a, b, c; a = b = 5; c = nhan(a, b); printf("%d x %d = %d",a,b,c); // Xuất kết quả

13. 14. }

33 Ngôn ngữ lập trình C - Tổng quan

Mảng – dãy số ? 1. #include 2. int main() 3. { 4.

5.

6.

7.

8.

9.

10.

11.

12.

int mang[5];// Dãy số gồm 5 phần tử int i; mang[0] = 0;// Phần tử đầu tiên mang[1] = 1; mang[2] = mang[0] + mang[1]; mang[3] = mang[1] + mang[2]; i = 4; mang[i] = mang[i-2] + mang[i-1]; printf("%d",mang[i]); return 0;

mang[0] mang[1] mang[2] mang[3] mang[4]

13. 14. }

0

?

?

?

?

Ngôn ngữ lập trình C - Tổng quan 34

'C'

'h'

'a'

'o' '!' '\0'

Chuỗi ký tự ? 1. #include 2. #include 3. int main() 4. { 5.

6.

7.

8.

9.

10.

11.

12.

char ten[30]; char gioithieu[50] = "Toi ten la "; char chao[6] = {'C','h','a','o','!','\0'}; printf("Nhap ten cua ban: "); scanf("%[^\n]s",&ten); strcat(gioithieu,ten); printf("%s \n%s \n", chao, gioithieu); printf("Ten co %d ky tu.",strlen(ten)); return 0;

13. 14. }

Ngôn ngữ lập trình C - Tổng quan 35

Đệ quy ?

1. #include 2. int factorial(int n) 3. { 4.

if (n<=0) return 1; return n * factorial(n-1);

5. 6. } 7. void main() 8. { 9.

10.

int n; do{

11.

scanf("%d",&n);

12.

}while(n<0); printf("Factorial(%d) = %d", n, factorial(n));

13. 14. }

36 Ngôn ngữ lập trình C - Tổng quan

Kiểu dữ liệu cấu trúc ?

// Khai báo kiểu struct

1. #include 2. struct sinhvien 3. { 4.

// Biến ID kiểu nguyên

int ID; float diem; // Biến điểm kiểu số thực

5. 6. };

7. void main() 8. { 9.

// Khai báo biến

10.

11.

12.

// Gán ID cho a.ID // Gán điểm cho a.diem // Xuất ID

struct sinhvien a; a.ID = 123456; a.diem = 5.5; printf("ID: %s\n", a.ID); printf("Diem: %d\n", a.diem); // Xuất diem

13. 14. }

37 Ngôn ngữ lập trình C - Tổng quan

Kiểu con trỏ - pointer ?

Biến

x

p

Địa chỉ

0073FB60

0073FB54

Giá trị

20

0073FB60

1. #include 2. int main() 3. { 4.

5.

6.

// Biến con trỏ // Gán địa chỉ của biến x cho p

7.

8.

9.

10.

11.

12.

int x = 20; // Giá trị của biến x int *p; p = &x; printf("Gia tri cua bien x: %d \n", x); printf("Dia chi cua bien x: %p \n", &x); printf("Dia chi luu trong bien p: %p \n", p); printf("Gia tri cua *p: %d \n", *p); p = NULL; // Gán giá trị rỗng printf("Dia chi luu trong bien p: %p.", p); return 0;

13. 14. }

38 Ngôn ngữ lập trình C - Tổng quan

Đọc tập tin ?

1. #include 2. void main() 3. { 4.

// Khai báo biến kiểu FILE

5.

6.

// Mở file

7.

FILE *f; char buffer[256]; // Kiểu chuỗi f = fopen("input.txt", "r"); if (f == NULL)

// Không có file này

8.

printf("Lỗi khi mở file\n");

9.

10.

else {

11.

12.

while (fgets(buffer, 256, f) != NULL) // Xuất

printf("%s",buffer);

13.

fclose(f); // Đóng file

}

14. 15. } 39

Ngôn ngữ lập trình C - Tổng quan

Ghi vào tập tin ? 1. #include 2. void main() 3. { 4.

// Khai báo biến kiểu FILE

5.

6.

7.

FILE *f; char buffer[256]="Lap trinh C";// Kiểu chuỗi f = fopen("output.txt", "w");// Mở file để ghi if (f == NULL)

// Không có file này

8.

printf("Loi khi mo file\n");

9.

10.

else {

11.

12.

fputs(buffer, f); // Ghi chuỗi vào file fclose(f);

// Đóng file

}

13. 14. }

40 Ngôn ngữ lập trình C - Tổng quan

Nội dung tuần tới

 Thư viện

 Xuất

 stdio.h, math.h, string.h…

 printf(“hello!”);

 Biểu thức

 Chương trình chính  int main(){…}

 tong = x + y;

 Toán tử

 +, -, *, /  Hằng số

 Kiểu biến  int, float  Tên biến  xA, xB

 #define PI 3.14

 Nhập

 Hàm

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

 sqrt, pow, scanf, printf

41 Ngôn ngữ lập trình C - Tổng quan

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

Nội dung môn học  Thuật toán/giải thuật?  Cách giải bài toán

 Đếm, tìm kiếm, tính toán,

thêm, xóa, sắp xếp…

 Lệnh cấu trúc?

 Đệ quy?  Đệ quy?

 if, else, switch, case  for, while, do while

 Hàm gọi lại chính nó  Hàm gọi lại chính nó

 Vòng lặp?

 Kiểu cấu trúc?  Kiểu cấu trúc?

 for, while, do while

 Do người dùng định nghĩa  Do người dùng định nghĩa

 Hàm?

 Kiểu con trỏ?  Kiểu con trỏ?

 Chương trình con

 Biến lưu địa chỉ của biến  Biến lưu địa chỉ của biến

 Mảng?

 Kiểu tập tin?  Kiểu tập tin?

 Thao tác với tập tin  Thao tác với tập tin

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

42 Ngôn ngữ lập trình C - Tổng quan

C - ngôn ngữ lập trình nền tảng

43 Ngôn ngữ lập trình C - 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?

44 Ngôn ngữ lập trình C - Tổng quan

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ụ

45 Ngôn ngữ lập trình C - Tổng quan