-
Các thành phần của ngôn ngữ C
-
Từ khóa
- Các từ dành riêng
- Phải được sử dụng đúng cú pháp
- Các từ khóa thông dụng
-
Tên & cách đặt tên
- Dùng để định danh các thành phần của chương trình
- Tên biến, tên hàm, tên hằng, …
- Tên là một dãy các kí tự gồm các chữ cái [a-z, A-Z, 0-9] và gạch nối “_”
-
Cách đặt tên
- Không đuợc chứa kí tự trống
- Không được bắt đầu bằng một chữ số
- Không được trùng với từ khóa
- Nên đặt các tên gợi nhớ, có ý nghĩa
-
Hằng
- Là đại lượng có giá trị không thay đổi được trong chương trình
-
ví dụ
-
111
- hằng là một số
-
‘b’
- hằng là một kí tự
-
“lap trinh”
- hằng là một chuỗi kí tự
-
Biến
- Là đại lượng có thể thay đổi được giá trị trong chương trình
-
Biểu thức
- Là một công thức tính toán để có một giá trị theo một qui tắc toán học
-
ví dụ
- x*x + y*y
- a*b + 2
-
Câu lệnh & Chú thích
- Mỗi một câu lệnh phải kết thúc bởi một dấu “;”
-
Lời chú thích được đặt giữa hai dấu “/*” và “*/”
-
Ví dụ
- /* Đây là một chú thích */
- Khi viết chương trình nên sử dụng các lời chú thích
- Trình biên dịch C phân biệt chữ in hoa và chữ in thường
-
Kiểu dữ liệu sơ cấp chuẩn
-
Kiểu ký tự
- Kiểu char
- Chiếm một byte
- Biểu diễn các kí tự trong bảng mã ASCII
-
Ví dụ
- ‘A’ có giá trị mã ASCII là 65
- ‘0’ có giá trị mã ASCII là 48
- Kiểu kí tự đồng thời cũng là kiểu số nguyên
- Có hai kiểu char: : signed char và unsinged char
-
Kiểu số nguyên
- Có nhiều kiểu số nguyên
-
Kiểu số thực
- Có nhiều kiểu số thực
-
Hai cách biểu diễn
-
Dạng thập phân
- Dùng dấu chấm để ngăn cách phần nguyên và phần thập phân
- Ví dụ: -12.345672, 1203.8375
-
Dạng khoa học
- Gồm phần định trị và phần mũ của cơ số 10, hai phần cách nhau bởi chữ E hoặc e
- Ví dụ: 6.123E+02
-
Chuyển kiểu (casting)
- Chuyển từ kiểu này sang kiểu khác
- Cú pháp: (kiểu_mới)biểu_thức
-
Ví dụ
- int i;
i = (int)10.45 /* i = 10 */
- float x;
x = (float)1/3; /* x = 1.0/3 = 0.3333 */
-
Các phép toán
-
Các phép toán trên số nguyên
- Cộng: +
- Trừ: -
- Nhân: *
- Chia lấy phần nguyên: /
- Chia lấy phần dư: %
-
Các phép toán trên số thực
- Cộng: +
- Trừ: -
- Nhân: *
- Chia: /
-
Các phép toán quan hệ
-
So sánh
- Bằng nhau: ==
- Khác nhau: !=
- Lớn hơn: >
- Nhỏ hơn: <
- Lớn hơn hoặc bằng: >=
- Nhỏ hơn hoặc bằng : <=
- Biểu thức chứa các phép toán quan hệ được gọi là biểu thức quan hệ
- Biểu thức quan hệ có giá trị đúng hoặc sai
-
Các phép toán logic
- Kiểu logic không được định nghĩa một cách tường minh
- Khác 0 là đúng, bằng 0 là sai
- Phép toán
-
Các phép toán trên bit
- Phép OR từng bit: |
- Phép AND từng bit: &
- Phép XOR từng bit: ^
- Phép đảo bit: ~
- Phép dịch trái (nhân 2): <<
- Phép dịch phải (chia 2): >>
-
Ví dụ
- 3 & 5 = 1
- a << n /* a*(2n) */
- a >> n /* a/(2n) */
-
Lệnh đơn
-
Khái niệm hàm
- Là đoạn chương trình viết ra một lần, được sử dụng nhiều lần
- Mỗi lần sử dụng chỉ cần gọi tên hàm và cung cấp các tham số
-
Cấu trúc chương trình
- Topic
-
Các khai báo
- #include: dùng để gọi file tiêu đề (.h)
-
Khai báo biến
- muốn sử dụng biến thì phải khai báo trước
- Cú pháp: kiểu_dữ liệu danh_sách_các_biến;
-
Ví dụ
- int x, y;
- float a = 10.5, b; /* khai báo và khởi gán */
- int a, b, c = 1;
-
Khai báo hằng
- Có hai cách để khai báo hằng, hoặc sử dụng #define hoặc sử dụng từ khóa const
- #define tên_hằng giá_trị_hằng
- const kiểu_dữ_liệu tên_hằng = giá_trị_hằng;
-
Ví dụ
- #define PI 3.14
- const float PI = 3.14;
-
Lệnh
- Một câu lệnh nhằm thực hiện một công việc nào đó
- Câu lệnh kết thúc bởi dấu “;”
-
Ví dụ
- printf(“một câu lệnh\n”);
- i++;
-
Khối lệnh
- Là dãy các lệnh được đặt giữa cặp ngoặc nhọn “{“ và “}”
- Khối lệnh thường được sử dụng khi muốn chúng thực hiện dưới một điều kiện nào đó
- {
/* các lệnh */
}
-
Phép gán
-
Gán giá trị cho một biến
- Cú pháp: tên_biến = biểu_thức;
-
Ví dụ
- x = 0;
- y = z + 1;
-
Phép gán kép
-
Ví dụ
- x = y = z = 1;
- x = y + (z = 2);
-
Phép tăng 1 (++), giảm 1 (--)
- Ngôn ngữ C cung cấp hai phép toán tăng 1 và giảm 1
-
Ví dụ
- x = x + 1; sẽ được viết thành: ++x; hoặc x++;
- y = y – 1; sẽ được viết thành: --y; hoặc y--;
-
Toán tử ++ hoặc -- đứng trước hoặc sau biến là khác nhau
- ++x (--x) : x sẽ được tăng (giảm) 1 trước khi thực hiện phép gán
- x++ (x--) : thực hiện phép gán trước khi x được tăng (giảm) 1
-
Ví dụ
- a = 5; b = ++a; /* a = 6, b = 6*/
- a = 5; b = a++; /* a = 6, b = 5*/
-
Lệnh có cấu trúc
-
Lệnh nhập xuất
-
Lệnh xuất / hiển thị printf
-
Ví dụ
- #include <stdio.h>
main()
{
printf(“Chào các bạn.\n”);
}
-
Cú pháp
- printf(chuỗi_điều_khiển [, danh_sách_các_tham_số]);
- Chuỗi điều khiển dùng để định dạng dữ liệu cần hiển thị
- Ví dụ: printf(“a = %f\n”, a);
-
Chuỗi điều khiển bao gồm 3 loại kí tự
- Các kí tự điều khiển
- \n sang dòng mới
- \f sang trang mới
- \b xóa kí tự bên trái
- \t dấu tab
- Các kí tự để đưa ra màn hình
- Các kí tự định dạng và khuôn in
- Theo sau kí tự %
- Các ký tự thường dùng
- Topic
- Ví dụ
- printf(“ma ASCII cua %c va %c la %d va %d\n”, ‘a’, ‘A’, ‘a’, ‘A’);
- Kết quả: ma ASCII tuong ung cua a va A la 97 va 65
- printf(“%f”, x); /* phần thập phân được hiển thị ngầm định là 6 chữ số */
- x = 4.2 kết quả: 4.200000
- X = 4.2345678 kết quả: 4.234568 /*làm tròn*/
- printf(“Ví dụ \nxoa\b kí\b tự\b trái\b\n”);
- Kết quả: Vi du xo k t tra
- Khuôn in
- Qui định cách thức in ra dữ liệu và chỉ rỏ số chổ dữ liệu sẽ chiếm, canh lề trái hay phải
- Khuôn in có dạng: %m hay %m.n
- Đối với số nguyên, mẫu ghi là %md
- m là số nguyên chỉ ra số vị trí mà số nguyên chiếm
- Ví dụ: printf(“x = %4d”, x);
- Kết quả
- nếu x = 12 in ra ^^12
- nếu x = 12345 in ra 12345
-
In kí tự đặc biệt
- \’ In ra dấu ’
- \” In ra dấu ”
- \\ In ra dấu \
-
Các lệnh xuất dữ liệu khác
-
puts(chuỗi_kí_tự): hiển thị chuỗi kí tự
- Ví dụ: puts(“Hello");
-
putchar(kí_tự): hiển thị một kí tự
- Ví dụ: putchar(‘a’);
-
Lệnh nhập dữ liệu scanf
- Cách sử dụng gần giống với lệnh printf
-
Ví dụ:
- #include <stdio.h>
main()
{
float r, dien_tich;
printf(“Nhập vào bán kính: ”);
scanf(“%f”, &r);
dien_tich = 3.14 * r * r;
printf(“Diện tích là: %f\n”, dien_tich);
return;
}
-
Cú pháp
- scanf(chuỗi_điều_khiển [, danh_sách_tham_số]);
- chuỗi_điều_khiển: định dạng dữ liệu nhập vào
- Các chuỗi điều khiển thường dùng
- danh_sách_tham_số: địa chỉ các biến cần nhập dữ liệu
- Để lấy địa chỉ một biến, sử dụng toán tử &
-
Các lệnh nhập dữ liệu khác
- gets(char *str): nhận chuỗi kí tự vào từ bàn phím cho dến khi gặp “\n”
-
getchar(): nhận kí tự nhập vào
- Ví dụ: ch = getchar();
- getch(): nhận kí tự nhập vào và không cho hiển thị kí tự đó trên màn hình
- getche(): nhận kí tự nhập vào và cho hiển thị kí tự đó trên màn hình
-
Các lệnh khác
- fflush(): xóa vùng đệm bàn phím
- kbhit(): kiểm tra bộ đệm bàn phím, bộ đệm rỗng trả về giá trị 0, ngược lại trả về giá trị khác 0
- clrscr(): xóa màn hình
- gotoxy(int x, int y): di chuyển con trỏ màn hình đến vị trí cột x (1->80), và dòng y (1->25)
-
Lệnh điều kiện
-
Lệnh if
- Thực hiện một trong hai khối lệnh tùy thuộc vào giá trị của biểu thức điều kiện
- Lệnh if có hai dạng: dạng đầy đủ if … else và dạng chỉ có if
-
Cú pháp
- Dạng 1
- if (biểu thức điều kiện) (dạng 1)
khốI lệnh 1;
else
khối lệnh 2;
- Dạng 2
- if (biểu thức điều kiện) khối lệnh 1;
- Biểu thức điều kiện
- Sử dụng các toán tử “&&” và “||”
- if ((đk1 && đk2) || đk3)
-
Lưu ý
- Biểu thức điều kiện phải luôn đặt trong trong hai dấu “(“ và “)”
- Biểu thức điều kiện là đúng, nếu nó có giá trị khác 0 và là sai nếu nó có giá trị bằng 0
- Biểu thức điều kiện có thể là số nguyên hoặc thực
- Nếu sau if hoặc else là một dãy các câu lệnh, thì các câu lệnh này phải được đặt trong cặp dấu ngoặc “{“ và “}”
-
Lệnh if lồng nhau
- Sử dụng các dấu đóng mớ ngoặc “{ }”
- Tránh gây ra sự hiểu nhầm if nào tương ứng với else nào
- Ví dụ:
- Không dùng { }
- Sử dụng { }
-
Sử dụng else if
- Sử dụng một trong n quyết định
- if (điều kiện 1)
khối lệnh 1;
else if (điều kiện 2)
khối lệnh 2;
…
else if (biểu thức n-1)
khối lệnh n-1;
else
khối lệnh n;
-
Toán tử “?:”
- Thay cho lệnh if
-
Cú pháp
- (điều kiện) ? lệnh 1 : lệnh 2;
- nếu điều kiện là đúng lệnh 1 sẽ được thực hiện, nếu không lệnh 2 sẽ được thực hiện
-
Ví dụ
- Tìm số lớn nhất trong 2 số a, b
- (a > b) ? max = a : max = b;
- hoặc: max = (a > b) ? a : b;
-
Lệnh switch … case
- Cho phép chọn một trong nhiều phương án khác nhau
-
Cú pháp
- switch (biểu thức nguyên)
{
case n1:
Các câu lệnh;
case n2:
Các câu lệnh;
...
case nk:
Các câu lệnh;
[default: Các câu lệnh;]
}
-
Lệnh vòng lặp
-
Lệnh for
-
Cú pháp
- for ([biểu thức 1]; [biểu thức 2]; [biểu thức 3])
khối lệnh;
- Các thành phần trong ngoặc “[” và “]” là tùy chọn, không bắt buộc
- Các dấu “;” và cặp ngoặc “(” và “)” là bắt buộc
-
Ví dụ
- Topic
-
Nhận xét
- Biểu thức 1 chỉ được tính một lần
- Biểu thức 2, biểu thức 3 và khối lệnh trong thân lệnh for được lặp đi lặp lại nhiều lần
- Khi biểu thức 2 vắng mặt thì nó được xem là đúng
- Phải dùng lệnh break hoặc return để thoát khỏi lệnh
- Có thể sử dụng các lệnh for lồng nhau
-
Lệnh while
-
Cú pháp
- while (biểu thức)
khối lệnh;
-
Ví dụ
- Topic
-
Nhận xét
- Biểu thức điều kiện luôn dược đặt trong cặp dấu “(” và “)”
- Biểu thức điều kiện sẽ được tính toán đầu tiên nên phải có giá trị xác định
-
Lệnh do ... while
-
Cú pháp
- do
khối lệnh;
while (biểu thức);
-
Ví dụ
- Topic
-
Lệnh break
-
Ý nghĩa
- Thường được sử dụng kết hợp lệnh lặp
- Dùng để thoát khỏi vòng lặp
- Nếu có nhiều lệnh lặp lồng nhau thì lệnh break chỉ thoát ra khỏi vòng lặp trực tiếp chứa nó
- Còn dùng để thoát khỏi lệnh switch … case
-
Ví dụ
- Topic
-
Lệnh continue
-
Ý nghĩa
- Dùng để quay trở lại từ đầu để thực hiện lần lặp mới
mà không cần thực hiện phần còn lại
-
Ví dụ
- Topic
- Hàm
-
Các kiểu dữ liệu nâng cao
- Kiểu mảng
- Kiểu con trỏ
- Kiểu chuỗi ký tự
- Kiểu cấu trúc
- Kiểu tập tin