Lập trình căn bản - Chương 2: Các thành phần cơ bản của ngôn ngữ C
Bạn đang xem 20 trang mẫu của tài liệu "Lập trình căn bản - Chương 2: Các thành phần cơ bản của ngôn ngữ C", để 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:
- lap_trinh_can_ban_chuong_2_cac_thanh_phan_co_ban_cua_ngon_ng.ppt
Nội dung text: Lập trình căn bản - Chương 2: Các thành phần cơ bản của ngôn ngữ C
- LẬP TRÌNH CĂN BẢN Phần 2 - Chương 2 CÁC THÀNH PHẦN CƠ BẢN CỦA NGÔN NGỮ C N.C. Danh 1
- Nội dung chương này ⚫ Bộ chữ viết trong C ⚫ Các từ khóa ⚫ Cặp dấu ghi chú thích ⚫ Các kiểu dữ liệu sơ cấp chuẩn ⚫ Tên và hằng ⚫ Biến và biểu thức ⚫ Cấu trúc của một chương trình C 2
- Bộ chữ viết trong C ⚫ Bộ chữ viết trong ngôn ngữ C bao gồm các ký tự sau: ⚫ 26 chữ cái latinh lớn A,B,C Z ⚫ 26 chữ cái latinh nhỏ a,b,c z. ⚫ 10 chữ số thập phân 0,1,2 9. ⚫ Các ký hiệu toán học: +, -, *, /, =, , (, ) ⚫ Các ký hiệu đặc biệt: :. , ; " ' _ @ # $ ! ^ [ ] { } ⚫ Dấu cách hay khoảng trống. ⚫ Phân biệt chữ in hoa và in thường 3
- Các từ khóa trong C ⚫ Từ khóa là các từ dành riêng của C. ⚫ Ta không được dùng từ khóa để đặt cho các tên của riêng mình. 4
- Cặp dấu chú thích (comment) #include #include int main (){ char ten[50]; /* khai bao bien ten kieu char 50 ky tu */ printf(“Xin cho biet ten cua ban !”); scanf(“%s”,ten); /*Doc vao 1 chuoi la ten ban*/ printf(“Xin chao ban %s\n ”,ten); //Dung chuong trinh, cho go phim getch(); return 0; } ⚫ Khi biên dịch các phần chú thích bị bỏ qua ⚫ Dùng /* và */: chú thích dài nhiều dòng ⚫ Dùng //: chú thích chỉ 1 dòng 5
- Các kiểu dữ liệu sơ cấp chuẩn trong C ⚫ Kiểu số nguyên (integer) ⚫ Kiểu số thực (real) 6
- Kiểu số nguyên ⚫ Được dùng để lưu các giá trị nguyên hay còn gọi là kiểu đếm được. ⚫ Kiểu số nguyên 1 byte (8 bits) ⚫ Kiểu số nguyên 2 bytes (16 bits) ⚫ Kiểu số nguyên 4 byte (32 bits) 7
- Kiểu số thực ⚫ Được dùng để lưu các số thực hay các số có dấu chấm thập phân ⚫ Kiểu void ⚫ Mang ý nghĩa là kiểu rỗng không chứa giá trị gì cả ⚫ Ví dụ: void main(){ .} 8
- Dùng sizeof() ⚫ Kích thước 1 kiểu có thể được xác định lúc chạy chương trình (runtime), dùng sizeof: ⚫ Ví dụ: sizeof(double) =>8(byte) sizeof(long double)=>10(byte) 9
- Tên và hằng trong C ⚫ Tên (identifier) ⚫ Được dùng để đặt cho chương trình, hằng, kiểu, biến, chương trình con, ⚫ Có 2 loại: ⚫ Tên chuẩn: là tên do C đặt sẵn như tên kiểu: int, char, float, ; tên hàm: sin, cos ⚫ Tên do người lập trình tự đặt. 10
- Chú ý khi đặt tên 11
- Tên do người lập trình tự đặt ⚫ Ví dụ: ⚫ Tên đặt hợp lệ: Chieu_dai, Chieu_Rong, Chu_Vi ⚫ Tên không hợp lệ: Do Dai, 12A2 ⚫ Phải tuân thủ quy tắc: ⚫ Sử dụng bộ chữ cái, chữ số và dấu gạch dưới (_) ⚫ Bắt đầu bằng một chữ cái hoặc dấu gạch dưới. ⚫ Không có khoảng trống ở giữa tên. ⚫ Không được trùng với từ khóa. ⚫ Độ dài tối đa của tên là 32 ký tự, tuy nhiên cần đặt sao cho rõ ràng, dễ nhận biết và dễ nhớ. ⚫ Không cấm việc đặt tên trùng với tên chuẩn nhưng khi đó ý nghĩa của tên chuẩn không còn giá trị nữa. 12
- Hằng (Constant) ⚫ Là đại lượng không đổi trong suốt quá trình thực thi chương trình => không thể gán lạI giá trị cho hằng ⚫ Hằng có thể là: ⚫ 1 con số ⚫ 1 ký tự ⚫ 1 chuỗi ký tự 13
- Hằng số thực ⚫ Giá trị kiểu: float, double, long double ⚫ 2 cách thể hiện ⚫ Cách 1: viết thông thường ⚫ Ví dụ: 123.34 -223.333 3.00 -56.0 ⚫ Cách 2: viết theo số mũ hay số khoa học ⚫ Một số thực được tách làm 2 phần (phân cách bởi e/E) ▪ Phần giá trị: như cách 1 ▪ Phần mũ: là một số nguyên ⚫ Ví dụ: 1234.56e-3 = 1.23456 (là số 1234.56*10-3) 14 -123.45E4 = -1234500 ( là -123.45*104)
- Hằng số nguyên (1) ⚫ Hằng số nguyên 2 byte (int) hệ thập phân ⚫ Sử dụng 10 ký số 0 9 ⚫ Ví dụ: 123 (một trăm hai mươi ba) -242 (trừ hai trăm bốn mươi hai) ⚫ Hằng số nguyên 2 byte (int) hệ bát phân ⚫ Sử dụng 8 ký số 0 7 ⚫ Cách biểu diễn: 0 ⚫ Số bát phân : 0dndn-1dn-2 d1d0 ( di có giá trị từ 0 7) n i => giá trị: d i *8 i=0 ⚫ Ví dụ: 1 0 = 020=2*8 + 0*8 (16)10 15
- Hằng số nguyên (2) ⚫ Hằng số nguyên 2 byte (int) hệ thập lục phân ⚫ Là kiểu số nguyên dùng: ⚫ 10 ký số 0 9 và ⚫ 6 ký tự A, B, C, D, E ,F ⚫ Cách biểu diễn: 0x ⚫ Số thập lục phân : 0xdndn-1dn-2 d1d0 n i => Giá trị thập phân= d i *16 ⚫ Ví dụ: i=0 2 1 0 0x345=3*16 + 4*16 + 5*16 = (837)10 2 1 0 0x2A9= 2*16 + 10*16 + 9*16 = (681)10 16
- Hằng số nguyên (3) ⚫ Ví dụ: Kết quả của chương trình sau là gi? 17
- Hằng số nguyên (4) ⚫ Hằng số nguyên 4 byte (long) ⚫ Được biểu diễn như số int trong hệ thập phân nhưng kèm theo ký tự l hoặc L. ⚫ Ví dụ: 45345L hay 45345l hay 45345 18
- Hằng ký tự (char) ⚫ Ví dụ: ‘a’, ‘A’, ‘0’, ‘9’ ⚫ Là 1 ký tự được viết trong cặp dấu nháy đơn (‘). ⚫ Mỗi một ký tự tương ứng với 1 giá trị trong bảng mã ASCII. ⚫ Hằng ký tự cũng được xem như trị số nguyên. ⚫ Chúng ta có thể thực hiện các phép toán số học trên 2 ký tự (dùng giá trị ASCII của chúng) ⚫ ASCII = American Standard Code for Information Interchange 19
- Hằng chuỗi ký tự ⚫ Ví dụ: “Ngon ngu lap trinh C” ⚫ Là 1 chuỗi hay 1 xâu ký tự được đặt trong cặp dấu nháy kép (“). ⚫ Chú ý: ⚫ “” : chuỗi rỗng - không có nội dung ⚫ Khi lưu trữ trong bộ nhớ, một chuỗi được kết thúc bằng ký tự NULL (‘\0’: mã Ascii là 0). ⚫ Để biểu diễn ký tự đặc biệt bên trong chuỗi ta phải thêm dấu \ phía trước. ⚫ Ví dụ: Viết “I\’m a student” cho “I’m a student” Viết “Day la ky tu \“dac biet\”” cho “Day la ky tu “dac biet”” 20
- Biến và Biểu thức (variable and expression) ⚫ Biến dùng để chứa dữ liệu trong quá trình thực hiện chương trình. ⚫ Giá trị của biến có thể bị thay đổi. ⚫ Cú pháp khai báo biến: Danh sách các tên biến cách nhau bởi dấu phẩy; 21
- Khởi tạo giá trị cho biến lúc khai báo ⚫ Ví dụ: ⚫ Cách viết giá trị cho biết luôn kiểu của nó: ⚫ Chú ý: 8864L có kiểu long, còn 8864 có kiểu int 22
- Vị trí khai báo biến (1) ⚫ Biến ngoài ⚫ Được đặt bên ngoài tất cả các hàm ⚫ Ảnh hưởng đến toàn bộ chương trình (biến toàn cục) 23
- Vị trí khai báo biến (2) ⚫ Biến trong ⚫ Được đặt bên trong hàm, chương trình chính hay một khối lệnh ⚫ Ảnh hưởng đến hàm, chương trình hay khối lệnh chứa nó (biến cục bộ). 24
- Biểu thức (1) ⚫ Ví dụ: (-b + sqrt(Delta))/(2*a) ⚫ Biểu thức là một sự kết hợp giữa ⚫ Các toán tử (operator) và ⚫ Các toán hạng (operand) ⚫ Các loại toán tử trong C ⚫ Toán tử số học ⚫ Toán tử quan hệ và logic ⚫ Toán tử Bitwise ⚫ Toán tử ? ⚫ Toán tử con trỏ & và * ⚫ Toán tử dấu phẩy 25
- Các toán tử số học (1) 26
- Các toán tử số học (2) • Tăng và giảm (++ & ) ++x hay x++ giống x = x + 1 x hay x giống x = x – 1 • Tuy nhiên: • Còn: x = 10; x = 10; y = ++x; //y = 11, x=11 y = x++; //y = 10, x=11 27
- Các toán tử số học (3) ⚫ Đâu là sự khác nhau? x++ trả về giá trị hiện hành của x và sau đó tăng x ++x tăng x trước và sau đó trả về giá trị mới của x 28
- Biểu thức Boolean (boolean expression) ⚫ Chú ý! Không có kiểu Boolean rõ ràng trong C (điều này đã được giới thiệu ở C99). Thay vào đó C dùng các giá trị nguyên để tượng trưng cho giá trị Boolean, với qui ước: false Giá trị 0 true Bất kỳ giá trị nào ngoại trừ 0 ⚫ Chú ý! C dùng “=” cho phép gán, và dùng “==“ cho phép so sánh. Nó trả về 1 nếu bằng và 0 nếu ngược lại 29
- Các toán tử quan hệ và các toán tử Logic (1) ⚫ Các phép so sánh sau tạo ra các biểu thức logic có giá trị kiểu Boolean 30
- Các toán tử quan hệ và các toán tử Logic (2) ⚫ Ví dụ: ⚫ Các biểu thức logic trả về 0 nếu false(sai) 1 nếu true(đúng) 31
- Các toán tử quan hệ và các toán tử Logic (3) ⚫ Bảng chân trị cho các toán tử Logic ⚫ Thứ tự ưu tiên ⚫ Ví dụ: 10>5&&!(10 đúng (1) 32
- Các toán tử Bitwise(cho lop nghi hoc roi) ⚫ Toán tử Bitwise giúp kiểm tra, gán hay thay đổi các bit thật sự trong 1 byte của word. ⚫ Chỉ dùng cho kiểu char và int. 33
- Toán tử ? ⚫ Toán tử ? thực hiện như lệnh if-else. ⚫ Cú pháp: ⚫ E1 ? E2 : E3 ⚫ Ví dụ: X = (10 > 9) ? 100 : 200; =>X=100 X = (10 >15 )? 100 : 200; =>X=200 34
- Toán tử con trỏ & và * ⚫ Ví dụ: int *p; //con tro so nguyen int count=5, x; p = &count; =>Đặt vào biến m địa chỉ bộ nhớ của biến count ⚫ Toán tử * trả về nội dung của ô nhớ mà một con trỏ đang chỉ vào ⚫ Ví dụ: x = *p; // x=5 35
- Toán tử dấu phẩy ⚫ Ví dụ: ⚫ x = (y=3,y+1); ⚫ Trước hết gán 3 cho y rồi gán 4 cho x. ⚫ Được sử dụng để kết hợp các biểu thức lại với nhau. ⚫ Bên trái của dấu (,) luôn được xem là kiểu void. ⚫ Biểu thức bên phải trở thành giá trị của tổng các biểu thức được phân cách bởi dấu phẩy. 36
- Tổng kết về độ ưu tiên ⚫ Tổng kết về độ ưu tiên 37
- Phép gán được viết gọn lại x= x y; có thể được viết gọn lại (short form): 38
- Các tập tin thư viện thông dụng ⚫ stdio.h: Định nghĩa các hàm vào/ra chuẩn (standard input/output):printf(), scanf(), getc(), putc(), gets(), puts(), fflush(), fopen(), fclose(), fread(), fwrite(), getchar(), putchar(), getw(), putw() ⚫ conio.h: Định nghĩa các hàm vào ra trong chế độ DOS: clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(), clreol(), ⚫ math.h: Định nghĩa các hàm tính toán: abs(), sqrt(), log(). log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(), ⚫ alloc.h: Định nghĩa các hàm liên quan đến việc quản lý bộ nhớ: calloc(), realloc(), malloc(), free(), farmalloc(), farcalloc(), farfree(), ⚫ io.h: Định nghĩa các hàm vào ra cấp thấp: open(), _open(), read(), _read(), close(), _close(), creat(), _creat(), creatnew(), eof(), filelength(), lock(), ⚫ graphics.h: Định nghĩa các hàm liên quan đến đồ họa: initgraph(), line(), circle(), putpixel(), getpixel(), setcolor(), 39
- Cấu trúc của 1 chương trình C (1) ⚫ Cấu trúc một chương trình C ⚫ Tiền xử lý và biên dịch ⚫ Prototype ⚫ Các tập tin thư viện thông dụng 40
- Cấu trúc của 1 chương trình C (2) Các chỉ thị tiền Chương xử lý trình chính Định nghĩa kiểu mới Prototype Khai báo biến Cài đặt ngoài các hàm 41
- Tiền xử lý và biên dịch (preprocess and compile) ⚫ Các chỉ thị định hướng (directive): ⚫ #include , #define ⚫ Có thể chứa các lệnh phức tạp như if-else. ⚫ Bộ tiền xử lý (preprocessor) sẽ thông dịch các directive và xóa bỏ nó trước khi cung cấp cho trình biên dịch C. 42
- Chia chương trình ra các module (1) ⚫ 1 chương trình phức tạp có thể được chia ra vài module 43
- Chia chương trình ra các module (2) ⚫ Vấn đề: testmodule.c phải biết các prototype của foor và bar. ⚫ Giải pháp 1 (tệ): ⚫ Chèn tay các prototype vào các file .c có dùng nó. ⚫ Bất lợi: Mỗi khi prototype bị thay đổi => phải chỉnh lại prototype trong tất cả các file .c dùng nó. ⚫ Giải pháp 2 (tốt): ⚫ Lưu các prototype vào 1 file riêng biệt mymodule.h (h: header). ⚫ Dùng #include mymodule.h ở đầu các chương trình có dùng nó. 44
- #include ⚫ Với #include, bộ tiền xử lý sẽ thêm và thay thế token #include filename bằng nội dung của filename. ⚫ Các header file sẽ được tìm ở đâu? ⚫ #include : tìm file.h trong thư mục đã được xác định trong INCLUDE DIRECTORIES. Hoặc trong /usr/include (linux) ⚫ #include “C:\\TC\\file.h”: tìm file.h trong đường dẫn 45
- Hết chương 46