



















Preview text:
1. Cú pháp
- #include < stdio.h> hiểu đơn giản là nền móng của bài code và luôn 
xuất hiện ở mọi bài code.
- main () cũng là phần không thể thiếu khi thực hành code, sau nó là {…} 
và mọi mã trong 2 dấu {} đều được thực thi.
- return 0 để kết thúc main chức năng và thêm } để thực sự kết thúc  chức năng chính. VD1: #include   Int main () {  printf(“hello world”);  Return 0;} *LƯU Ý: - không viết hoa
-không cần cách vì máy sẽ tự động bỏ qua khoảng trắng nhưng
nhiều hàng đọc sẽ dễ hơn 2. Đầu ra C -  : print in văn bản f (“…”,….)
- xuống hàng: \n ( có thể hiểu là thoát hàng và chuyển về đầu của hàng  tiếp theo)
- các cú pháp tương tự:\
 + \t : tạo 1 khoảng trống cùng hàng  + \\ : chèn thêm \  + \’’ : chèn thêm “ 3. Nhận xét C
- nhận xét 1 hàng: //đây là 1 nhận xét 1 dòng
- nhận xét nhiều hàng: /* đây là 1 nhận xét nhiều dòng*/
4. BIẾN C: DÙNG ĐỂ LƯU TRỮ DỮ LIỆU VÀ CÓ THỂ THAY ĐỔI  ĐƯỢC - có 
khác nhau: int( số nguyên), char( kí tự), float(‘số thập nhiều loại biến  phân’),….
- cú pháp khai báo biến: ; nếu gắn cho biến 1 giá trị thì  = const; VD: int a=10;
*LƯU Ý: với các ngôn ngữ khác khi gán giá trị cho biến 
thì chỉ cần đặt lệnh in ra biến thì sẽ có giá trị NHƯNG với
ngôn ngữ C thì không thể, nếu muốn in ra giá trị của 
biến thì ta cần phải “chỉ định định dạng”.   VD: int a=10;
 Printf(a); // không có gì xảy ra.
- Công cụ xác định định dạng:
+ cú pháp:” % + 1 ký tự nào đó tuỳ theo biến mà ta sẽ in ra”
+ ta có thể hiểu định dạng là  , luôn đi 
giữ chỗ cho giá trị của biến
kèm với hàm printf(bien) để biên dịch loại giá trị mà biến đang lưu trữ.  VD1: int a=10;
 Printf(%d,a); // in ra sẽ là 10.  VD2: int so=10;  Char chu=’a’;
 Float thapphan=10,9; // nhập biến và giá trị
 Printf(“số cần tìm là: %d”\n,so); // in ra: số cầm tìm là: 10
printf(“%f”\n, thapthan); // in ra: 10,9
- Thay đổi giá trị biến: 
+ gán đè: khi gán a=10 sau đó lại gán a bằng 15 thì nó sẽ ghi đè lên giá 
trị cũ và trở thành giá trị mới là 15 VD: int a=10;  a=15;
 Printf(“%d”, a); // lúc này in biến a ra là 15.
+gán giá trị biến này cho biến khác:  VD: int sodau=10;  Int socuoi=20;  Sodau=socuoi;
// lúc này printf ra sẽ số đầu=20. Biến được gán sẽ ở phía trước. -cộng các biến:   Int a=10;  Int b=5;  Int sum=a+b;
// in ra sum với định dạng “%d” sẽ là 15.
- khai báo nhiều biến 1 lúc hoặc cùng 1 giá trị cho nhiều biến:
 Int x=5,y=10,z=15; or int x=y=z=50;
 Printf(%d, x+y+z); // sẽ in ra đáp án là 30 hoặc 150.
*TA THẤY CÓ 2 CÁCH ĐỂ THỰC HIỆN PHÉP TÍNH:
A. GỌI HÀM VÀ CÁCH TÍNH RỒI IN HÀM ĐÓ RA(*)  Int a=10;  Int b=5;  Int sum=a+b;
B. VIẾT CÁCH TÍNH RỒI IN RA, KHÔNG CẦM GỌI HÀM.
int x=5,y=10,z=15; or int x=y=z=50;  Printf(%d, x+y+z);\
+phải xác định bằng tên duy nhất gọi là định danh, có thể ngắn 
gọn(x,y,..) hay đầy đủ thông tin ( tên, tuổi, địa chỉ,..)VD: int 
tienthuetrothang9=1000; hoặc int t=1000;
-QUY TẮC ĐẶT TÊN CHO BIẾN:
1. Tên có thể chứa chữ cái, số hoặc dấu gạch dưới
2. Phải bắt đầu bằng chữ cái hoặc dấu gạch dưới
3. Máy sẽ phân biệt chữ hoa chữ thường( mymom khác myMom)
4. Tên không được có khoảng trắng hoặc các kí tự đặc biệt
5. Các từ dành riêng hoặc mặc định kh được dùng để đặt tên. 5, Kiểu dữ liệu C
- khái niệm: mỗi biến trong C là 1 kiểu dữ liệu xác định, và phải sử dụng 
bộ xác định định dạng bên trong printf () để in ra màn hình.  VD:  #include  int main () { int a=10;
printf("so can tim la: %d",a) ; return 0; }
- các kí hiệu định dạng cơ bản: KÍ HIỆU DATA TYPE %d or %t int %f Float %c char %s String ( text)
- chuyển đổi kiểu dữ liệu C: khi ta muốn chuyển đổi kiểu dữ liệu của của 
giá trị kh theo giá trị mà ta đã khai báo thì t cần đổi kiểu dữ liệu.
VD: 2 và 5 là int và sum ra 7 cũng int nhưng khi 5 chia 2 ra 2,5 thì đã 
sang float thì t phải đôit kiểu dữ liệu còn không nó sẽ ra only 2.
+ có 2 loại chuyển đổi :
* chuyển đổi ngầm định ( auto)
* chuyển đổi rõ ràng ( thủ công)
A. Chuyển đổi ngầm định
- chuyển đổi ẩn sẽ tự động được com thực hiện khi mình gán giá trị của 
loại này cho loại khác.( lưu ý khi in ra thì khai biến loại nào thì định danh 
bằng kí hiệu loại đó.)  VD: int a=10,9 => in ra 10
 Float a=10 => in ra 10,00000. B. Chuyển đổi rõ ràng
- chuyển đổi này được làm thủ công bằng cách đặt () trước 
giá trị cần thay đổi kiểu dữ liệu.  VD:  int num1 = 5; int num2 = 2;
float sum = (float) num1 / num2; printf("%f", sum); // 2.500000 6, Hằng số C
- để ngkh hay bản thân kh thay đổi được giá trị của biến thì t khai báo
thành hằng số const luôn.  VD: 
const int a=5; // lúc này in ra sẽ là 5
 a=10; // dù ghi đè biến a nhưng in ra sẽ vẫn được 5. - lưu ý:
+ nên dùng biến chỉ hằng só là in hoa( không bắt buộc nhưng dễ sử  dụng, tránh nhầm lẫn)
+ khi khai báo biến hằng phải luôn có giá trị đi sau đó thể hình biến là hằng số nào.  VD:
-const int minutesPerHour = 60; // good -const int minutesPerHour; minutesPerHour = 60; // error. 7,Toán tử C - đơn gia
&n là tính toán, VD dùng + để&  cộng 2 
giá trị hoặc cộng 2 biể4 n hoặc 1 biể4 n 1 giá trị.  VD: int sum1=1+2;  Int sum2=sum1+5; Int sum3=sum2+sum1; - toán tử&
 đửợc chia thành 5 loại: + toán tử&  số4  học + toán tử&  gán + toán tử&  so sánh  + toán tử&  logic + toán tử&  bitwise A, TOÁN TỬ&  SỐ4  HỌC Dấ4 u Tác dụng Cú pháp + Cộng X+y - trừ X-y * nhấn X*y / chia X/y ++
cộng thểm 1 cho giá trị  ++x đó --
Trừ đi 1 cho giá trị đó --x % Chia lấ4 y phấQ n dử X%y  B, TOÁN TỬ&  GÁN - đửợc dùng để&  gán giá trị cho biể4 n hoặc gán  biể& u thức cho 1 biể4 n  VD: Int x=5; // gán x=5
X +=5; // gán x cộng thểm 5 = 10. Cú pháp Tác dụng Ví dụ Cách khác tửơng tự = Gán giá trị X=5 X=5 += Cộng thểm 5 X +=5 X=x+5 -= Trừ đi 5 X -=5 X=x-5 *= Nhấn thểm 2 X *=2 X=X*2 /= Chia đi 2 X /=2 X=x/2 %= Chia 3 lấ4 y  X %=3 X=x%3 dử &= Chia lấ4 y  X &=3 X=x&3 thửơng VD: 5/2=2 |= ^= >>= <<= C, TOÁN TỬ&  SO SÁNH Kí hiệu Tác dụng Cú pháp == Tửơng đửơng với X==y VD: 3=3 // đúng in ra 1  6=3 // sai thì ra 0 != Khống bằng, sẽ in ra  X!=y 1 nể4 u kh bằng( đúng)  và o nể4 u bằng ( sai) > Lớn hơn X>y < Bé hơn X>= Lớn hơn or bằng X>=y <= Bé hơn or bằng X<=y
* dùng đúng sai cho tấ t ca phép 
toán, so sánh đúng thì in ra 1 còn sai in ra 0. D, TOÁN TỬ&  LOGIC Kí  tển Tác dụng Cú pháp hiệu && Logic và  Tra & đúng nể4 u ca & 2  (Int x=7) phéo toán đểQ u đúng x>5 %% x<10 || Logic  Tra & vểQ  đúng nể4 u 1  Int x=7 hoặc trong 2 đúng X>5 || x>10 ! Logic  khống E, TOÁN TỬ&  SIZEOF
- kích thửớc bộ nhớ cu &a 1 kiể& u dữ liệu hoặc 1  biể4 n có thể&  tìm thấ4 y bằng phép toán size of  8, Boolean  - là 1 kiể&
u dữ liệu đúng sai, kiể& u chỉ & có 2  giá trị để&
 lựa chọn ( đúng sai hay bật tắ4 t,….) - nhửng đấy khống pha &i kiể& u tích hơp nhử int  float hay char mà pha
&i nhập tển tiểu đểQ  khi sử&   dụng nó( giố4
ng io): #include< stdbool.h>( làm bài nển nhập ca & 2 tển tiểu đểQ  io và bool) - 1 biể4 n boolean chỉ
& có giá trị true or false  để&  lựa chọn:  VD:  Bool fun = true;  Bool sad = false; // khai báo biể4 n bool 
Printf(“%d”, fun);// đúng thì in ra 1.
Printf(“%d”, sad);// còn sai thì in ra 0. - LỬU Ý: giá trị tra & vểQ  cu &a biể4 n bool là giá  trị nguyển nển ta pha
&i định danh nó bằng %d nhử  int. VD: printf(“%d\n”, fun); 9, IF…ELSE VÀ IF..ELSE  IF..ELSE - Sử&  dụng nhiểQ
u hành động cùng lúc cho các quyể4 t  định khác nhau. IF
Thực hiện hành động nể4 u nó là true ELSE
Thực hiện hành động nể4 u nó là false EFSE IF Áp thểm 1 điểQ
u kiện( if là đk1 thì else
if là đk2) khác nữa để&  thực hiện nể4 u nó là true 1 trong 2 điểQ u kiện SWITCH - if là ghi thửờng, nể4 u ghi hoa sẽ gấy ra lốz i VD1: int x = 20; int y = 18;
if (x > y) { printf("x is greater than y");} VD2: int time = 20; if (time < 18) {  printf("Good day."); } else {  printf("Good evening."); } // Outputs "Good evening."  VD3: int time = 22;
if (time < 10) {printf("Good morning.");}
else if (time < 20) { printf("Good day.");}
else {printf("Good evening.");} // Outputs "Good evening." (*) RÚT GỌN CỦ A IF ELSE  VD1: int time = 20; if (time < 18) {  printf("Good day."); } else { printf("Good evening."); } VD2: rút gọn cu &a VD1   int time = 20;
(time < 18) ? printf("Good day.") : printf("Good  evening.");
10, Switch LỰA CHỌN KHỐ I ĐỂ  THỰC HIỆN - Thay vì dùng nhiểQ
u cấu lệnh If else thì ta có  thể&  dùng cấu lệnh switch. - nó có thể&  chọn 1 trong nhiểQ u khố4 i mã để&  thực  hiện. - CÚ PHÁP: Switch ( tển muố4 n đặt) { Case <điểQ u kiện 1>: Break; Cáe <điểQ u kiện n>; Break; } VD:#include  int main() {  int day = 4;    switch (day) {  case 1:  printf("Monday");  break;  case 2:  printf("Tuesday");  break;  case 3:  printf("Wednesday");  break;  case 4:  printf("Thursday");  break;
 Default: printf(“nothing”);  }  return 0;} - CÁCH THỨC HOẠT ĐỘNG:
1, Cấu lệnh SWITCH đửợc đánh giá( nểu ra) 1 lấQ n. 2, giá trị cu &a biể4
n sẽ đửợc so sánh với giá trị ơ & mốz i CASE. Nể4 u khớp thì thực thi. 3, Lệnh BREAK để&
 thoát và dừng thực thi khố4 i case
khống hợp đó.( lệnh này tiể4 t kiệm thời gian do  pass khống cấQ n kiể& m tra tiể4 p trong khố4 i đó khi  khống có thoa & mãn)
4, lệnh DEFAULT dùng để&  chạy cấu lệnh nể4 u khống  có case nào thoa
& mãn.( lệnh này là từ khoá mặc  định pha &i đửợc sử&  dụng  làm cấu lệnh cuố4 i trong chuyể& n đố& i các case và khống cấQ n ngắ4 t.)
11, Vòng lặp C WHILE CHƯA BIỂ T VÒNG LẶP CỤ THỂ 
- vòng lặp sẽ thực hiện đửợc 1 khố4 i mã nể4 u chúng  đặt 1 điểQ u kiện nhấ4 t định
- vòng lặp tiện dụng vì tiể4 t kiệm thời gian, gia &m lốz i và code dểz  đọc hơn. - cơ chể4
: lặp đi lặp lại 1 khố4 i mã miểz n là chúng  thoa & mãn điểQ u kiện ta đửa ra. - cú pháp: while ( điểQ u kiện){  hành động yểu cấQ u; } VD: #include  int main() {  int i = 0;  while (i < 5) {  printf("%d\n", i);  i++; }  return 0;}
 // cho i=0 ,miễYn i bé hơn 5 thì in ra, sau đó 
cộng thễm 1, sau đó quay lại ban đấau. Lửu ý rằng
nễ u không cho I tăng tiễ n thì vòng lặp không 
kễ t thúc vì luôn thoa mãn điễau kiện.
12, C cho vòng lặp cụ thễ FOR A. Vòng lặp - khi biể4 t chính xác số4  lấQ n cấQ n lặp lại một khố4 i 
mã thì dùng FOR thay vì WHILE. + FOR thực hiện số4  lấQ n lặp cụ thể&  ta muố4 n
+ WHILE thực hiện n vòng lặp miểz n còn thoa & mãn  điểQ u kiện nào đó.  VD: 
- CÚ PHÁP: for ( cấu lệnh 1; cấu lệnh 2; cấu lệnh 3;) { hành động} - cách thực hiện:
+ cấu lệnh 1 đửợc thực thi 1 lấQ n trửớc khi thực  thi khố4 i mã + cấu lệnh 2 để&
 xác định thực thi khố4 i mã. Nếu
điều kiện đúng thì vòng lặp sẽ bắt đầu lại,
nếu sai thì vòng lặp sẽ kết thúc.
+ cấu lệnh 3 đửợc thực thi sau khi khối mã đửợc  thực thi. VD:  Int I; // khai báo I là gì
For ( i=0;I<5; I++;) // khố4 i mã thực hiện
{Printf(“%d”,I);} // hành động sau khi work khố4 i  mã. B. VÒNG LẶP LỐaNG NHAỦ
- vòng lặp bển trong sẽ đửợc thực hiện khi lặp 
lại vòng lặp bển ngoài. - vòng ngoài mơ & ra, xoay hể4 t vòng trong rốQ i mới 
đóng vòng ngoài lại. Vòng ngoài lại mơ & ra, xong  tiể4 p vòng trong rốQ i đóng lại. Miểz n khi vòng ngoài
khống đửợc thực hiện nữa thì vòng trong mới khống đửợc thực hiện.  VD: #include  Main() { Int I,j;
for ( I=1; I<=2; ++I) {printf(“out1:%d\n”,I);}
For ( j=1; j<=3; ++j) {printf(“out2:%d\n”,j);}0 // in ra sẽ nhử này: Out1: 1 Out2:1 Out2:2 Out3:3 Out1: 2 Out2:1 Out2:2 Out3:3 13, C NGHI VÀ TIỂ P A, PHÁ VỠ( BREAK) - ta thấ4 y BREAK để&  nha &y ra kho &i hộp trửờng 
hợp(switch) và nó cũng đửợc dùng để&  kể4 t thúc vòng lặp for.  VD: Int I;
For ( I=0; I<=10; ++I); { If (I==4) {break;}  printf(“%d”,I); } // in ra: 0123 
// khống in ra 4 vì bằng4 là break rốQ i. 14.1, Ma ng 1 chiễau C - ma &ng đửợc sử&  dụng để&  lửu trữ nhiểQ u giá trị  trong 1 biể4
n thay vì khai báo từng biể4 n. - để&  tạo 1 ma
&ng, xác định kiể& u dữ liệu- tển ma &ng- cùng với dấ4 u [] theo sau. Để&
 chèn giá trị thì để&   bển trong dấ4
u ngoặc nhọn và ngắn cách bằng dấ4 u  phấ& y.
 VD: int mynum [] = { 1,2,3,4}; //đấy là 1 ma &ng  gốQ m 4 số4  nguyển.
A. TRUY CẬP CÁC PHẦ N TỬ 1 MA NG - để&  truy cập 1 ma &ng, hãy xem số4  chỉ & mục cu &a nó. - số4  chỉ & mục cu &a ma &ng bắ4 t đấQ u từ [0],[1],[2],…  VD: Int mynum[] ={1,2,3,4}; Printf(“%d,\n”, mynum[0]); // output 1.
B. THAY ĐỔ I 1 PHẦ N TỬ CU A MANG - để&  thay đố& i giá trị cu &a một phấQ n tử&  cụ thể& , cấQ n tham kha &o số4  chỉ & mục cu &a nó.  VD: int number[]={1,2,3,4};  Number[3]=10;  Printf(‘%d\n”,number[3]);
// thay vì in [3]=4 thì in bằng 10. Do ta đã gán 
vị trí thứ[3]=10 và đè lển số4  trửớc. C. LẶP LẠI 1 MA NG  VD: Int number[]={1,2,3}; Int I;
For (I=0, I<3, I++) { printf(“%d\ n”,number[I]);} // lúc này in ra:  1  2  3. D. ĐẶT KÍCH THỬỚC 1 MA NG -Một cách phố&  biể4 n khi tạo ma &ng là quy định kích  thửớc cu &a ma
&ng sau đó gán từng giá trị vào. Cách  này đửợc sử&  dụng để&  thay thể4  cho việc khai báo  ma &ng[] rốQ
i gán từng giá trị vào luốn bơ &i dấ4 u {}.  VD:  Int abc[5];  Abc[0]=10;  Abc[1]=20;  Abc[2]=20; Abc[3]=20;  Abc[4]=20; * LỬU Ý: khi sử&  dung cách này, pha &i biể4 t khố4 i  lửợng cấQ n lửu trữ cho đu & bộ nhớ cho đu &. KHI TẠO 
MANG RỔ I KHỔNG THỂ THAY ĐỔ I SAU KHI TẠO. 14.2, Mả ng đả chiề u C - thứ ta vừa học ơ & trển là ma &ng 1 chiểQ u, chỉ & lửu  đơn thuấQ n giá trị cu &a biể4 n. Để&  linh hoạt khi sử&   dụng ma &ng thì ta sử&  dụng ba &ng đa chiểQ u, VD nhử 
khi lửu dạng hàng và cột sẽ giúp ta tìm ra 2 giá  trị ơ & vị trí đó. A, KHÁI NIỆM -MA
&NG 2D CÒN ĐỬỢ GỌI LÀ MA TRẬN (MATRIX):
 VD: int matrix [2][3]={ {1,4,2}, {3,6,8} }; // [2] viể4 t trửớc là hàng. // [3] viể4 t sau là cột.
// các giá trị đửợc đặt theo thứ tự hàng. 1 4 2 3 6 8 B, TRUY CẬP PHẦ N TỬ 2D - để&  truy cập cấQ n biể4 t số4  chỉ & mục cu &a phấQ n tử&  đó.  VD: muố4 n truy cập hàng đấQ u tiển[0]-cột thứ 3[2]:
Int matrix[2][3]={ {1,4,2}, {3,6,8} }; Printf(“%d”,matrix[0][2]); // in ra mh: 2.
C, THAY ĐỔ I 1 GIÁ TRỊ TRONG MA NG 2D  VD: 
int matrix[2][3]={ {1,4,2}, {3,6,8} }; Matrix[0][1]=10; // lúc này ơ
& hàng 1-ố 2, giá trị đã thay từ 4  sang 10. D, LẶP QUA 1 MA NG 2D   VD: #include Main() {
Int matrix[2][3]={ {1,3,5}, {2,4,6} }; Int I,j; For (I=0, I<3, I++)  { 
For (j=0, j<4, j++) {printf(“%d\n”,matrix[I] [j]);} } 15. ChuôYi C I, DẦY A, khái niệm - Chuốz i đửợc sử&  dụng để&  lửu trữ vắn ba &n/kí tự.  VD: “xin chào thể4  giới” là 1 chuốz i kí tự. - khống nhử nhiểQ
u ngốn ngữ khác có thể&  dùng  string để&  tạo chuốz i. Thay vào đó, bạn pha &i dùng  CHAR(hàm vắn ba &n) để&  tạo 1 ma &ng kí tự trong chuốz i C.  VD:
Char abcxyz[]= “hello world”;  // pha &i có dấ4 u “…”  // để&  xuấ4 t chuốz i này cấQ n giữ chốz (định danh): %s