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