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