SlideShare a Scribd company logo
1 of 19
Hanoi Aptech
Hướng dẫn Ôn tập môn C
1. Cấu trúc 1 chương trình C
2. Biến và các kiểu dữ liệu
3. Phép toán và biểu thức
4. Vào ra
5. Các lệnh điều khiển
6. Mảng
7. Hàm
8. Con trỏ
9. Chuỗi
Tài liệu hướng dẫn ôn tập môn C Page 1 of 19
Hanoi Aptech
1 Cấu trúc một chương trình C
#include<stdio.h>
#include<conio.h>
...
int sum(int a, int b);
void show(int x);
...
void main()
{
int a = 2;
int b = 3;
int c = sum(a,b);
show(c);
}
int sum(int a, int b)
{
return a + b;
}
void show(int x)
{
printf(“n%d”, x);
}
Tài liệu hướng dẫn ôn tập môn C Page 2 of 19
Khai báo thư viện sẽ sử
dụng
Khai báo các nguyên
mẫu hàm
Khai báo và viết code
cho hàm main – hàm để
chạy chương trình
Viết code xử lý cho
các hàm đã khai báo
trong phần nguyên
mẫu ở trên
Hanoi Aptech
2 Biến và kiểu dữ liệu
2.1 Khái niệm
Biến là đơn vị lưu trữ cơ bản trong bộ nhớ. Khi nhập dữ liệu từ bàn phím, hoặc khi tính toán ra kết
quả trung gian, người ta lưu vào biến.
2.2 Khai báo
[Kiểu dữ liệu] [Tên biến];
VD:
int x;
Chú ý: C phân biệt chữ hoa chữ thường nên int x và int X sẽ khai báo 2 biến khác nhau.
2.3 Kiểu dữ liệu
C cung cấp đầy đủ các kiểu dữ liệu cơ bản, bao gồm kiểu số và kiểu ký tự.
2.3.1 Kiểu int
Kiểu số nguyên, lưu trữ 1 số nguyên trong khoảng -32768 → 32767
2.3.2 Kiểu float
Kiểu số thực, lưu trữ số thực trong khoảng -3.37.1038
→ 3.37.1038
2.3.3 Kiểu Double
Cũng giống như float nhưng có kích thước lớn hơn rất nhiều: -1.79.10308
→ 1.79.10308
Ngoài ra còn có 1 số kiểu số nguyên khác: long, short, unsigned(xem thêm trong sách).
3 Phép toán và biểu thức
Phép toán số học
Bao gồm: +, -, *, /, và %(lấy phần dư)
Phép gán:
Tên_biến = biểu_thức;
VD: x = 3*4+2;
Phép tăng giảm giá trị:
++ và --
VD: ++i; --i;
Chú ý: ++i và i++ khác nhau ở chỗ:
Tài liệu hướng dẫn ôn tập môn C Page 3 of 19
Hanoi Aptech
Lấy ví dụ:
i = 7;
x = ++i - 5; và x = i++ - 5;
Phép gán thứ nhất sẽ cho kết quả x = 3, còn phép gán thứ 2 thì x = 2
Lý do là trong biểu thức thứ nhất i được tăng trước rồi mới thực hiện phép trừ, còn trong biểu thức
thứ 2 thực hiện trừ trước rồi mới tăng i.
Có thể gán nhiều biến nhận 1 giá trị: a = b = c = 10;
Phép toán quan hệ:
Trả về kết quả 1(true) nếu biểu thức quan hệ là đúng và 0(false) nếu biểu thức quan hệ sai. Các
toán tử quan hệ bao gồm: >, <, >=, <=, ==, !=
VD: a = 3; b = 5;
a > b 0
a < b 1
a >= b 0
a <= b 1
a == b 0
a != b 1
Phép toán logic
Bao gồm các phép toán &&(AND), ||(OR), !(NOT). Phép toán logic áp dụng trên các giá trị
0(false) và 1(true)
Bảng kết quả phép &&:
Bảng kết quả phép ||:
Tài liệu hướng dẫn ôn tập môn C
a b a &&b
0 0 0
0 1 0
1 0 0
1 1 1
a b a ||b
0 0 0
0 1 1
1 0 1
1 1 1
Page 4 of 19
Hanoi Aptech
Bảng kết quả phép !:
Tài liệu hướng dẫn ôn tập môn C
a !a
0 1
1 0
Page 5 of 19
Hanoi Aptech
4 Vào ra
4.1 Vào – Đọc từ bàn phím
1. Lệnh scanf
Cú pháp: scanf(“chuỗi điều khiển”, danh sách tham số);
Chuỗi điều khiển là:
%d: đọc số nguyên
%f: đọc số thực
%c: đọc kí tự
%s: đọc chuỗi
Danh sách tham số là danh sách các địa chỉ của biến phân cách nhau bởi dấu phẩy.
Ví dụ: scanf(“%d”, &x); --> đọc 1 số nguyên và lưu vào biến x
scanf(“%c %f”, &ch, &y) --> đọc 1 kí tự vào biến ch và 1 số thực lưu vào biến y
Khi chạy chương trình phải nhập 1 kí tự rồi dấu phân cách(dấu cách hoặc tab) tiếp đó là số thực.
Lưu ý:
• Giữa các chuỗi điều khiển nên có dấu cách để phân tách:
VD: nếu lệnh scanf(“%d%c”, &y, &ch) và nhập: 1 a thì ch sẽ nhận giá trị là dấu
cách(space) chứ không phải là chữ a. Để khắc phục, thêm 1 dấu cách giữa %d và %c:
scanf(“%d %c”, &y, &ch);
• Các tham số trong hàm scanf phải là địa chỉ của biến chứ không phải biến.
VD: int x;
scanf(“%d”, x) là sai mà phải là scanf(“%d”, &x)
Tuy nhiên, nếu khai báo x là 1 biến con trỏ: int *x;
thì lại phải dùng scanf(“%d”, x) vì lúc này x là địa chỉ.
2. Lệnh đọc 1 ký tự từ bàn phím:
getchar() và getche(). Cách dùng: ch = getchar() hoặc ch = getche()
Điểm khác nhau là getchar thì phải gõ enter mới kết thúc nhập còn getche thì ngay khi gõ xong kí
tự đã kết thúc nhập.
3. Lệnh đọc 1 xâu từ bàn phím:
gets(biến_xâu)
Cách sử dụng:
char s[100];
gets(s);
Lưu ý: khi sử dụng hàm gets thì phải dùng fflush(stdin) để xóa sạch bộ đệm bàn phím trước.
Tài liệu hướng dẫn ôn tập môn C Page 6 of 19
Hanoi Aptech
4.2 Ra – In ra màn hình
1. Lệnh printf
Cú pháp:
printf(“chuỗi điều khiển”, danh sách tham số);
Chuỗi điều khiển cũng giống như hàm scanf:
%d: in số nguyên
%f: in số thực
%c: in ký tự
%s: in chuỗi
Danh sách tham số là danh sách các biến(chứ không phải địa chỉ của biến – không có dấu &)
phân cách nhau bởi dấu phẩy.
VD: printf(“%d %f”, x, y) --> in giá trị biến x và y ra màn hình.
Nếu x là biến con trỏ: int *x thì để in giá trị dùng câu lệnh: printf(“%d”, *x);
In các ký tự đặc biệt:
printf(“n”): xuống dòng
printf(“t”): thêm 1 dấu tab
printf(“”): in ký tự 
printf(“””): in ký tự “
2. Lệnh putchar
In 1 ký tự ra màn hình.
Tham số của hàm putchar() có thể là 1 hằng ký tự (VD ‘A’) hoặc 1 biến kí tự (ch).
3. Lệnh puts
In 1 chuỗi ký tự ra màn hình.
Tham số của puts là 1 chuỗi.
Tài liệu hướng dẫn ôn tập môn C Page 7 of 19
Hanoi Aptech
5 Các cấu trúc điều khiển
5.1 If else
Cú pháp:
if(biểu_thức_điều_kiện)
{
lệnh1;
lệnh 2;
...
}
else
{
lệnh 3;
lệnh 4;
...
}
Có nghĩa là nếu biểu thức điều kiện đúng(có giá trị khác 0) thì thực hiện các lệnh ngay dưới if(lệnh
1, lệnh2) còn nếu sai(giá trị bằng 0) thì thực hiện các lệnh trong else(lệnh 3, 4).
Lưu ý: có thể có lệnh if ở bên trong 1 if khác. Người ta gọi là if lồng:
VD:
if (a > 1)
{
if (b > 1)
{
c = 1;
}
}
Đoạn code này thực hiện kiểm tra điều kiện a > 1 trước, nếu đúng thực hiện lệnh if bên trong kiểm
tra b > 1, nếu đúng nữa thì thực hiện lệnh gán c = 1;
5.2 switch case
switch(biểu_thưc)
{
case: gia_tri1
danh_sach_cac_lenh;
break;
case: gia_tri_2;
danh_sach_cac_lenh;
break;
..
default:
danh_sach_cac_lenh;
Tài liệu hướng dẫn ôn tập môn C Page 8 of 19
Hanoi Aptech
}
Câu lệnh switch kiểm tra giá trị biểu thức điều kiện, nếu nhận 1 trong các giá trị case nào thì thực
hiện danh sách các câu lệnh trong case đó rồi kết thúc luôn. Trong trường hợp không có case nào
đúng thì thực hiện các câu lệnh trong default.
Lưu ý:
• kết thúc các case phải có break
• default có thể có hoặc không (optional)
5.3 Lệnh lặp for
Cú pháp:
for(khởi_tạo_biến_chạy; điều_kiện_dừng; thay_đổi_biến_chạy);
{
lệnh 1;
lệnh 2;
...
}
vd:
int i;
for (i = 1; i < 10; i++)
{
printf(“%d”, i);
}
Đoạn code này sẽ print ra màn hình: 123456789
Trong ví dụ này đầu tiên máy sẽ khởi tạo biến chạy i = 1; kiểm tra điều kiện dừng i<4, vì lúc này i
= 0 nhỏ hơn 4 nên chưa dừng, máy thực hiện lệnh printf trong for và in ra màn hình 1. Tiếp đó,
thực hiện thay đổi biến chạy i++ -> i được tăng thêm 1 và bằng 2. Lại kiểm tra điều kiện, i vẫn nhỏ
hơn 10 nên in ra 2. Cứ thế cho đến khi i = 10 thì biểu thức điều kiện là sai và vòng lặp for dừng lại.
Lưu ý:
• 3 phần trong for phân tách bởi dấu chấm phẩy ;
• Có phần có thể không có: VD: for(; i < 10; i++)
• Điều kiện dừng không đúng sẽ làm cho vòng for kéo dài vô tận không dừng lại.
VD: for(i = 1; i > 0; i++)
{
printf(“%d”,i);
}
Tài liệu hướng dẫn ôn tập môn C Page 9 of 19
Hanoi Aptech
5.4 Lệnh lặp while
Cú pháp:
while (biểu_thức_điều_kiện)
{
Danh sách các câu lệnh;
}
Lệnh while sẽ kiểm tra biểu thức điều kiện trước, nếu đúng thì thực hiện các lệnh bên trong khối
while cho đến khi nào biểu thức điều kiện sai thì dừng.
VD:
int i = 1;
while (i < 10)
{
printf(“%d”, i);
i++;
}
5.5 Lệnh lặp do while:
Cú pháp:
do
{
danh_sách_các_lênh;
}
while (biểu_thức_điều_kiện);
Lệnh do while cũng giống như lệnh while nhưng thực hiện lệnh trước rồi mới kiểm tra biểu thức
điều kiện.
VD:
int i = 1;
do
{
printf(“%d”, i);
i ++;
}while (i < 10);
Tài liệu hướng dẫn ôn tập môn C Page 10 of 19
Hanoi Aptech
Lệnh break
Nếu sử dụng trong vòng lặp thì khi gặp lệnh break; sẽ kết thúc vòng lặp đó ngay còn trong switch
để chấm dứt việc kiểm tra biểu thức điều kiện nếu đã nhận 1 giá trị của 1 case nào đó.
VD:
for (int i = 1; i < 10; i++)
{
printf(“%d”, i);
if (i >= 5) break;
}
Đoạn code này sẽ chỉ in ra 12345 chứ không phải là 123456789 vì khi tăng i đến 5 thì gặp lệnh
break kết thúc vòng for.
Lệnh continue:
Sử dụng trong vòng lặp. Khi gặp câu lệnh continue, máy sẽ không thực hiện tiếp các câu lệnh phía
bên dưới của continue mà sẽ thực hiện 1 lần lặp mới.
VD:
for (int i = 1; i < 10; i++)
{
if (i == 5) continue;
printf(“%d”, i);
}
Đoạn code này sẽ in ra 12346789 mà không có số 5. Nguyên nhân là khi i == 5 thì gặp lệnh
continue và máy không thực hiện lệnh printf phía sau nữa.
Tài liệu hướng dẫn ôn tập môn C Page 11 of 19
Hanoi Aptech
6 Mảng
Mảng là một tập hợp các phần tử có cùng kiểu dữ liệu được lưu trữ liên tiếp trong bộ nhớ mà
người ta có thể truy nhập trực tiếp thông qua thứ tự(chỉ số) của phần tử.
VD: Mảng các số nguyên, mảng các số thực, mảng các ký tự
6.1 Khai báo mảng
Kiểu_dữ_liệu Tên_mảng[Kích_thước_mảng];
VD: int A[10] sẽ khai báo một mảng A gồm 10 phần tử trong bộ nhớ.
1 2 3 4 5 6 7 8 9 10
6.2 Thao tác với mảng
6.2.1 Truy nhập phần tử trong mảng:
Tên_mảng[chỉ_số_phần_tử_truy_nhập]
VD:
3 4 2 1
0
5 1 1 8 2 3
1 2 3 4 5 6 7 8 9 10
Nếu muốn lấy phần tử thứ 4 trong mảng thì dùng A[3], nguyên nhân là mảng trong C đánh số từ 0.
Giá trị nhận được sẽ là 10
Các phép toán áp dụng cho 1 phần tử của mảng cũng giống hệt khi áp dụng cho 1 biến đơn.
VD: lấy địa chỉ cho 1 phần tử mảng: &A[i]
Đọc từ bàn phím cho 1 phần tử mảng: scanf(“%d”, &A[i]);
6.2.2 Duyệt mảng:
Sử dụng vòng lặp:
VD: for (int i = 0; i < n; i++)
{
Xử lý với A[i];
}
Tài liệu hướng dẫn ôn tập môn C Page 12 of 19
Hanoi Aptech
6.2.3 Sắp xếp mảng
VD: cho mảng 1 chiều A có 5 phần tử: 5,3,9,1,6
Sắp xếp các phần tử của mảng theo thứ tự tăng dần.
Nghĩa là A[0] = 1; A[1] = 3; A[2] = 5; A[4] = 6; A[5] = 9;
Dùng 2 vòng for:
int temp;
int n = 5;
for(int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (A[j] < A[i])
//Swap
{
temp = A[i];
A[i] = A[j];
A[j] = temp;
}
6.3 Mảng ký tự
Khai báo:
char Tên_mảng[Kích_thước];
VD: char s[10];
khai báo 1 mảng có 10 ký tự
Xâu là 1 mảng ký tự với ký tự cuối là NULL(0)
6.4 Mảng 2 chiều
Là mảng của các mảng 1 chiều. Mỗi phần tử của mảng 2 chiều là một mảng một chiều.
VD:
char A[10][30];
Mỗi phần tử của mảng A là một chuỗi có kích thước là 30.
6.4.1 Truy nhập phần tử mảng 2 chiều
Tên_mảng[chỉ_số_hàng][chỉ_số_cột].
VD: có 1 mảng 2 chiều: kích thước 3x4(3 hàng 4 cột): 3 mảng 1 chiều, mỗi mảng có 4 phần tử.
0 5 8 4
1 3 7 2
9 6 10 5
Muốn lấy giá trị phần tử ở hàng 2 cột thứ 3:
Tài liệu hướng dẫn ôn tập môn C Page 13 of 19
Hanoi Aptech
printf(“d”, A[1][2] ) --> 7.(Chỉ số mảng bắt đầu từ 0)
6.4.2 Thao tác mảng 2 chiều
VD: Đọc từ bàn phím và lưu vào 1 mảng 2 chiều kích thước 2x3.
#include <stdio.h>
void main()
{
int A[2][3];
int i, j;
for (i = 0; i < 2; i++)
for (j = 0; j < 3; j++)
{
printf(“nEnter A[%d][%d] = ”);
scanf(“%d”, &A[i,j]);
}
Tài liệu hướng dẫn ôn tập môn C Page 14 of 19
Hanoi Aptech
7 Hàm
Hàm được dùng để chia một bài toán lớn thành những công việc nhỏ hơn, có đầu vào và đầu ra xác
định.
7.1 Cấu trúc hàm
Kiểu_kết_quả_trả_về Tên_hàm (danh_sách_tham_số)
{
các_lệnh_trong_thân_hàm;
return kết_quả;
}
VD:
int Sum(int a, int b)
{
int c = a + b;
return c;
}
Ở đây, a và b được gọi là các tham số hình thức vì sau đó nó sẽ được thay bằng giá trị cụ thể khi
gọi hàm.
7.2 Mẫu hàm
Một hàm muốn sử dụng được (gọi được) thì trước đó phải được khai báo nguyên mẫu.
Cú pháp khai báo nguyên mẫu:
Kiểu_kết_quả_trả_về Tên_hàm (danh_sách_tham_số);
7.3 Gọi hàm
7.3.1 Gọi hàm kiểu tham trị (chỉ truyền giá trị)
Có nghĩa là khi truyền tham số cho hàm thì chỉ sử dụng giá trị của các tham số mà không thay đổi
chúng.
VD:
int a = 3, b = 5;
printf(“%d”, Sum(a,b)); Kết quả in ra màn hình là 8.
Các giá trị a, b không hề bị thay đổi cho dù trong hàm Sum chúng ta có sử dụng lệnh gán để thay
đổi a, b đi chăng nữa.
7.3.2 Gọi hàm kiểu tham biến(truyền địa chỉ của biến)
Kiểu gọi hàm này sẽ làm thay đổi giá trị của tham số khi truyền vào cho lời gọi hàm.
VD:
Tài liệu hướng dẫn ôn tập môn C Page 15 of 19
Hanoi Aptech
void input(int *x)
{
printf(“nInput:”);
scanf(“%d”, x);
}
void main()
{
int x = 0;
input(&x);
}
Sau lời gọi hàm input(&x) thì giá trị của x sẽ được thay thế bằng 1 giá trị nhập vào từ bàn phím, x
không giữ nguyên giá trị 0 như kiểu gọi hàm bằng tham trị.
7.3.3 Truyền biến mảng cho lới gọi hàm
Trong C, khi truyền 1 mảng vào tham số của hàm, chỉ có địa chỉ của mảng được truyền.
VD:
void main()
{
int ary[10];
fn_ary(ary);
}
void fn_ary(int ary[])
{
..
}
với mảng 2 chiều:
void main()
{
int ary[10][20];
fn_ary(ary);
}
void fn_ary(int ary[][20])
{
..
}
Tài liệu hướng dẫn ôn tập môn C Page 16 of 19
Hanoi Aptech
8 Con trỏ
Con trỏ là 1 biến đặc biệt, giá trị của biến con trỏ là địa chỉ của 1 ô nhớ.
VD:
8.1 Khai báo
Kiểu_con_trỏ *Tên_con_trỏ;
VD:
int *p;
int x;
p = &x;
Đoạn code trên khai báo 1 con trỏ nguyên p, và p trỏ vào ô nhớ x.
8.2 Thao tác với con trỏ
8.2.1 Lấy giá trị mà con trỏ trỏ tới
Cú pháp: *Tên_con_trỏ
VD: *p trong ví dụ trên sẽ trả về giá trị x;
8.2.2 Tăng giảm đối với biến con trỏ nguyên
int *p;
p++ hoặc ++p: tăng p thêm 2 đơn vị (vì kích thước 1 số nguyên là 2 byte)
p-- hoặc -- p : giảm p 2 đơn vị
p+i , p - i: tăng, giảm p 2*i đơn vị.
8.2.3 Con trỏ và mảng 1 chiều
Tên mảng chính là 1 con trỏ trỏ tới phần tử đầu tiên của mảng đó.
VD:
int A[5];
Tài liệu hướng dẫn ôn tập môn C Page 17 of 19
1001
50
con trỏ
giá trị trỏ tới
Hanoi Aptech
Để lấy giá trị phần tử đầu tiên của mảng có 2 cách: A[0] hoặc *A
Để lấy giá trị phần tử thứ 1 của mảng: A[1] hoặc *(A + 1)
Để lấy giá trị phần tử thứ i của mảng : A[i] hoặc *(A + i)
8.2.4 Cấp phát động bộ nhớ
(Xem thêm trong giáo trình , trang 217 mục Allocating Memory)
Tài liệu hướng dẫn ôn tập môn C Page 18 of 19
Hanoi Aptech
9 Xâu
Xâu là mảng kí tự với kí tự kết thúc là NULL(‘0’).
Nhập xâu từ bàn phím:
gets(str)
In xâu ra màn hình:
puts(str)
Các hàm xử lý xâu:
strcat(str1, str2): nối chuỗi str2 vào chuỗi str1, trả về chuỗi đã nối.
strcmp(str1,str2): so sánh 2 xâu theo thứ tự alphabe.
 > 0: nếu str1 < str2
 =0 : nếu str 1 == str2
 <0 : nếu str1 > str2
strchar(str, chr): tìm ký tự chr trong chuỗi str.
strstr(str1,str2): tìm chuỗi str2 trong chuỗi str1
strcpy(str1,str2): copy chuỗi str2 vào chuỗi str1
strlen(str): lấy chiều dài của str
Tài liệu hướng dẫn ôn tập môn C Page 19 of 19

More Related Content

What's hot

Giáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việtGiáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việtMôi Trường Việt
 
Bai tap lap trinh c
Bai tap lap trinh  cBai tap lap trinh  c
Bai tap lap trinh ctiểu minh
 
Lập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiểnLập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiểnMr Giap
 
Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++tuandong_ptit
 
Bài tập nhập môn lập trình
Bài tập nhập môn lập trìnhBài tập nhập môn lập trình
Bài tập nhập môn lập trìnhHuy Rùa
 
Phan2 chuong4 caclenhcautruc
Phan2 chuong4 caclenhcautrucPhan2 chuong4 caclenhcautruc
Phan2 chuong4 caclenhcautrucLy hai
 
Phong cach lap trinh c++
Phong cach lap trinh c++Phong cach lap trinh c++
Phong cach lap trinh c++ptquang160492
 
Kiểu Mảng 1 chiều
Kiểu Mảng 1 chiềuKiểu Mảng 1 chiều
Kiểu Mảng 1 chiềuHoaCat1
 
Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Congdat Le
 
Hàm và Chuỗi
Hàm và ChuỗiHàm và Chuỗi
Hàm và Chuỗipnanhvn
 
Giao trinh c++ aptech
Giao trinh c++ aptechGiao trinh c++ aptech
Giao trinh c++ aptechTấn Nhật
 
Fortran cơ sở
Fortran cơ sởFortran cơ sở
Fortran cơ sởHajunior9x
 

What's hot (16)

Giáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việtGiáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việt
 
Bai tap lap trinh c
Bai tap lap trinh  cBai tap lap trinh  c
Bai tap lap trinh c
 
Lập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiểnLập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiển
 
Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++
 
Debug trong c
Debug trong cDebug trong c
Debug trong c
 
Bài tập nhập môn lập trình
Bài tập nhập môn lập trìnhBài tập nhập môn lập trình
Bài tập nhập môn lập trình
 
Phan2 chuong4 caclenhcautruc
Phan2 chuong4 caclenhcautrucPhan2 chuong4 caclenhcautruc
Phan2 chuong4 caclenhcautruc
 
Pointer
PointerPointer
Pointer
 
0 mo dau
0 mo dau0 mo dau
0 mo dau
 
Phong cach lap trinh c++
Phong cach lap trinh c++Phong cach lap trinh c++
Phong cach lap trinh c++
 
Kiểu Mảng 1 chiều
Kiểu Mảng 1 chiềuKiểu Mảng 1 chiều
Kiểu Mảng 1 chiều
 
Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++
 
Hàm và Chuỗi
Hàm và ChuỗiHàm và Chuỗi
Hàm và Chuỗi
 
Giao trinh c++ aptech
Giao trinh c++ aptechGiao trinh c++ aptech
Giao trinh c++ aptech
 
Fortran cơ sở
Fortran cơ sởFortran cơ sở
Fortran cơ sở
 
CHUONG_5
CHUONG_5CHUONG_5
CHUONG_5
 

Viewers also liked

Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien
Chuong 2   co so phan tich do phuc tap cua giai thuat - sinh vienChuong 2   co so phan tich do phuc tap cua giai thuat - sinh vien
Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vienHồ Lợi
 
Cac giai phap_lap_trinh_c___final_
Cac giai phap_lap_trinh_c___final_Cac giai phap_lap_trinh_c___final_
Cac giai phap_lap_trinh_c___final_Hồ Lợi
 
Ch tin dhhue2005
Ch tin dhhue2005Ch tin dhhue2005
Ch tin dhhue2005Hồ Lợi
 
Stress management intro
Stress management introStress management intro
Stress management introsmukhimmel
 
Why meditation
Why meditationWhy meditation
Why meditationsmukhimmel
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作Shengyou Fan
 
COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南Shengyou Fan
 

Viewers also liked (13)

Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien
Chuong 2   co so phan tich do phuc tap cua giai thuat - sinh vienChuong 2   co so phan tich do phuc tap cua giai thuat - sinh vien
Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien
 
D05 stl
D05 stlD05 stl
D05 stl
 
Cac giai phap_lap_trinh_c___final_
Cac giai phap_lap_trinh_c___final_Cac giai phap_lap_trinh_c___final_
Cac giai phap_lap_trinh_c___final_
 
Ctdl 2005
Ctdl   2005Ctdl   2005
Ctdl 2005
 
Ch tin dhhue2005
Ch tin dhhue2005Ch tin dhhue2005
Ch tin dhhue2005
 
Chuong14
Chuong14Chuong14
Chuong14
 
Baigiang ctdl
Baigiang ctdlBaigiang ctdl
Baigiang ctdl
 
Stress management intro
Stress management introStress management intro
Stress management intro
 
Chuong1
Chuong1Chuong1
Chuong1
 
Why meditation
Why meditationWhy meditation
Why meditation
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作
 
COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南
 
使用者認證
使用者認證使用者認證
使用者認證
 

Similar to Huong danontapc

chapter2.4.Basic.statements.2.pdf
chapter2.4.Basic.statements.2.pdfchapter2.4.Basic.statements.2.pdf
chapter2.4.Basic.statements.2.pdfNguyenDiem50
 
Bài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giảiBài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giảiTrung Thanh Nguyen
 
Bài tập nhập môn lập trình
Bài tập nhập môn lập trìnhBài tập nhập môn lập trình
Bài tập nhập môn lập trìnhLong Kingnam
 
Thdc3 Lap Trinh C
Thdc3 Lap Trinh CThdc3 Lap Trinh C
Thdc3 Lap Trinh Cquyloc
 
1 Gioi Thieu Chung
1 Gioi Thieu Chung1 Gioi Thieu Chung
1 Gioi Thieu ChungCuong
 
Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731Vu Tuan
 
Giaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhGiaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhHồ Lợi
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfHngTrn365275
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfnguyenkaka2
 
lap trinh c Phan2 chuong5
 lap trinh c Phan2 chuong5 lap trinh c Phan2 chuong5
lap trinh c Phan2 chuong5thanhyu
 

Similar to Huong danontapc (20)

chapter2.4.Basic.statements.2.pdf
chapter2.4.Basic.statements.2.pdfchapter2.4.Basic.statements.2.pdf
chapter2.4.Basic.statements.2.pdf
 
Control structure in C
Control structure in CControl structure in C
Control structure in C
 
Ctdl lab01
Ctdl lab01Ctdl lab01
Ctdl lab01
 
ưU tiên trong c
ưU tiên trong cưU tiên trong c
ưU tiên trong c
 
Bài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giảiBài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giải
 
Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++
 
Bài tập nhập môn lập trình
Bài tập nhập môn lập trìnhBài tập nhập môn lập trình
Bài tập nhập môn lập trình
 
Co ban ve_matlab
Co ban ve_matlabCo ban ve_matlab
Co ban ve_matlab
 
Thdc3 Lap Trinh C
Thdc3 Lap Trinh CThdc3 Lap Trinh C
Thdc3 Lap Trinh C
 
Session 09
Session 09Session 09
Session 09
 
Session 09
Session 09Session 09
Session 09
 
1 Gioi Thieu Chung
1 Gioi Thieu Chung1 Gioi Thieu Chung
1 Gioi Thieu Chung
 
matlab co ban
matlab co banmatlab co ban
matlab co ban
 
Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731
 
Giaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhGiaotrinhbaitapkythuatlaptrinh
Giaotrinhbaitapkythuatlaptrinh
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdf
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdf
 
C9 templates
C9 templatesC9 templates
C9 templates
 
C9 templates
C9 templatesC9 templates
C9 templates
 
lap trinh c Phan2 chuong5
 lap trinh c Phan2 chuong5 lap trinh c Phan2 chuong5
lap trinh c Phan2 chuong5
 

More from Hồ Lợi

Tóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cTóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cHồ Lợi
 
Lect04 functions
Lect04 functionsLect04 functions
Lect04 functionsHồ Lợi
 
Ky thuatkhudequy
Ky thuatkhudequyKy thuatkhudequy
Ky thuatkhudequyHồ Lợi
 
Itt epc assignment
Itt epc assignmentItt epc assignment
Itt epc assignmentHồ Lợi
 
H hai epc_baitap
H hai epc_baitapH hai epc_baitap
H hai epc_baitapHồ Lợi
 
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Hồ Lợi
 
Giao trinh c c++
Giao trinh c c++Giao trinh c c++
Giao trinh c c++Hồ Lợi
 
Epc assignment
Epc assignmentEpc assignment
Epc assignmentHồ Lợi
 
Epc test practical
Epc test practicalEpc test practical
Epc test practicalHồ Lợi
 
De thic++ --th
De thic++ --thDe thic++ --th
De thic++ --thHồ Lợi
 
Cpl test1%20key
Cpl test1%20keyCpl test1%20key
Cpl test1%20keyHồ Lợi
 

More from Hồ Lợi (20)

Xu ly chuoi
Xu ly chuoiXu ly chuoi
Xu ly chuoi
 
Tóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cTóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của c
 
T4
T4T4
T4
 
Nguyen lyoop
Nguyen lyoopNguyen lyoop
Nguyen lyoop
 
Lect04 functions
Lect04 functionsLect04 functions
Lect04 functions
 
Ky thuatkhudequy
Ky thuatkhudequyKy thuatkhudequy
Ky thuatkhudequy
 
Itt epc assignment
Itt epc assignmentItt epc assignment
Itt epc assignment
 
H hai epc_baitap
H hai epc_baitapH hai epc_baitap
H hai epc_baitap
 
Gtrinh oop
Gtrinh oopGtrinh oop
Gtrinh oop
 
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2
 
Giao trinh c c++
Giao trinh c c++Giao trinh c c++
Giao trinh c c++
 
File trong c_
File trong c_File trong c_
File trong c_
 
Epc assignment
Epc assignmentEpc assignment
Epc assignment
 
Epc test practical
Epc test practicalEpc test practical
Epc test practical
 
De thic++ --th
De thic++ --thDe thic++ --th
De thic++ --th
 
Dethi c++ -lt
Dethi c++ -ltDethi c++ -lt
Dethi c++ -lt
 
Cpl test3
Cpl test3Cpl test3
Cpl test3
 
Cpl test2
Cpl test2Cpl test2
Cpl test2
 
Cpl test1
Cpl test1Cpl test1
Cpl test1
 
Cpl test1%20key
Cpl test1%20keyCpl test1%20key
Cpl test1%20key
 

Huong danontapc

  • 1. Hanoi Aptech Hướng dẫn Ôn tập môn C 1. Cấu trúc 1 chương trình C 2. Biến và các kiểu dữ liệu 3. Phép toán và biểu thức 4. Vào ra 5. Các lệnh điều khiển 6. Mảng 7. Hàm 8. Con trỏ 9. Chuỗi Tài liệu hướng dẫn ôn tập môn C Page 1 of 19
  • 2. Hanoi Aptech 1 Cấu trúc một chương trình C #include<stdio.h> #include<conio.h> ... int sum(int a, int b); void show(int x); ... void main() { int a = 2; int b = 3; int c = sum(a,b); show(c); } int sum(int a, int b) { return a + b; } void show(int x) { printf(“n%d”, x); } Tài liệu hướng dẫn ôn tập môn C Page 2 of 19 Khai báo thư viện sẽ sử dụng Khai báo các nguyên mẫu hàm Khai báo và viết code cho hàm main – hàm để chạy chương trình Viết code xử lý cho các hàm đã khai báo trong phần nguyên mẫu ở trên
  • 3. Hanoi Aptech 2 Biến và kiểu dữ liệu 2.1 Khái niệm Biến là đơn vị lưu trữ cơ bản trong bộ nhớ. Khi nhập dữ liệu từ bàn phím, hoặc khi tính toán ra kết quả trung gian, người ta lưu vào biến. 2.2 Khai báo [Kiểu dữ liệu] [Tên biến]; VD: int x; Chú ý: C phân biệt chữ hoa chữ thường nên int x và int X sẽ khai báo 2 biến khác nhau. 2.3 Kiểu dữ liệu C cung cấp đầy đủ các kiểu dữ liệu cơ bản, bao gồm kiểu số và kiểu ký tự. 2.3.1 Kiểu int Kiểu số nguyên, lưu trữ 1 số nguyên trong khoảng -32768 → 32767 2.3.2 Kiểu float Kiểu số thực, lưu trữ số thực trong khoảng -3.37.1038 → 3.37.1038 2.3.3 Kiểu Double Cũng giống như float nhưng có kích thước lớn hơn rất nhiều: -1.79.10308 → 1.79.10308 Ngoài ra còn có 1 số kiểu số nguyên khác: long, short, unsigned(xem thêm trong sách). 3 Phép toán và biểu thức Phép toán số học Bao gồm: +, -, *, /, và %(lấy phần dư) Phép gán: Tên_biến = biểu_thức; VD: x = 3*4+2; Phép tăng giảm giá trị: ++ và -- VD: ++i; --i; Chú ý: ++i và i++ khác nhau ở chỗ: Tài liệu hướng dẫn ôn tập môn C Page 3 of 19
  • 4. Hanoi Aptech Lấy ví dụ: i = 7; x = ++i - 5; và x = i++ - 5; Phép gán thứ nhất sẽ cho kết quả x = 3, còn phép gán thứ 2 thì x = 2 Lý do là trong biểu thức thứ nhất i được tăng trước rồi mới thực hiện phép trừ, còn trong biểu thức thứ 2 thực hiện trừ trước rồi mới tăng i. Có thể gán nhiều biến nhận 1 giá trị: a = b = c = 10; Phép toán quan hệ: Trả về kết quả 1(true) nếu biểu thức quan hệ là đúng và 0(false) nếu biểu thức quan hệ sai. Các toán tử quan hệ bao gồm: >, <, >=, <=, ==, != VD: a = 3; b = 5; a > b 0 a < b 1 a >= b 0 a <= b 1 a == b 0 a != b 1 Phép toán logic Bao gồm các phép toán &&(AND), ||(OR), !(NOT). Phép toán logic áp dụng trên các giá trị 0(false) và 1(true) Bảng kết quả phép &&: Bảng kết quả phép ||: Tài liệu hướng dẫn ôn tập môn C a b a &&b 0 0 0 0 1 0 1 0 0 1 1 1 a b a ||b 0 0 0 0 1 1 1 0 1 1 1 1 Page 4 of 19
  • 5. Hanoi Aptech Bảng kết quả phép !: Tài liệu hướng dẫn ôn tập môn C a !a 0 1 1 0 Page 5 of 19
  • 6. Hanoi Aptech 4 Vào ra 4.1 Vào – Đọc từ bàn phím 1. Lệnh scanf Cú pháp: scanf(“chuỗi điều khiển”, danh sách tham số); Chuỗi điều khiển là: %d: đọc số nguyên %f: đọc số thực %c: đọc kí tự %s: đọc chuỗi Danh sách tham số là danh sách các địa chỉ của biến phân cách nhau bởi dấu phẩy. Ví dụ: scanf(“%d”, &x); --> đọc 1 số nguyên và lưu vào biến x scanf(“%c %f”, &ch, &y) --> đọc 1 kí tự vào biến ch và 1 số thực lưu vào biến y Khi chạy chương trình phải nhập 1 kí tự rồi dấu phân cách(dấu cách hoặc tab) tiếp đó là số thực. Lưu ý: • Giữa các chuỗi điều khiển nên có dấu cách để phân tách: VD: nếu lệnh scanf(“%d%c”, &y, &ch) và nhập: 1 a thì ch sẽ nhận giá trị là dấu cách(space) chứ không phải là chữ a. Để khắc phục, thêm 1 dấu cách giữa %d và %c: scanf(“%d %c”, &y, &ch); • Các tham số trong hàm scanf phải là địa chỉ của biến chứ không phải biến. VD: int x; scanf(“%d”, x) là sai mà phải là scanf(“%d”, &x) Tuy nhiên, nếu khai báo x là 1 biến con trỏ: int *x; thì lại phải dùng scanf(“%d”, x) vì lúc này x là địa chỉ. 2. Lệnh đọc 1 ký tự từ bàn phím: getchar() và getche(). Cách dùng: ch = getchar() hoặc ch = getche() Điểm khác nhau là getchar thì phải gõ enter mới kết thúc nhập còn getche thì ngay khi gõ xong kí tự đã kết thúc nhập. 3. Lệnh đọc 1 xâu từ bàn phím: gets(biến_xâu) Cách sử dụng: char s[100]; gets(s); Lưu ý: khi sử dụng hàm gets thì phải dùng fflush(stdin) để xóa sạch bộ đệm bàn phím trước. Tài liệu hướng dẫn ôn tập môn C Page 6 of 19
  • 7. Hanoi Aptech 4.2 Ra – In ra màn hình 1. Lệnh printf Cú pháp: printf(“chuỗi điều khiển”, danh sách tham số); Chuỗi điều khiển cũng giống như hàm scanf: %d: in số nguyên %f: in số thực %c: in ký tự %s: in chuỗi Danh sách tham số là danh sách các biến(chứ không phải địa chỉ của biến – không có dấu &) phân cách nhau bởi dấu phẩy. VD: printf(“%d %f”, x, y) --> in giá trị biến x và y ra màn hình. Nếu x là biến con trỏ: int *x thì để in giá trị dùng câu lệnh: printf(“%d”, *x); In các ký tự đặc biệt: printf(“n”): xuống dòng printf(“t”): thêm 1 dấu tab printf(“”): in ký tự printf(“””): in ký tự “ 2. Lệnh putchar In 1 ký tự ra màn hình. Tham số của hàm putchar() có thể là 1 hằng ký tự (VD ‘A’) hoặc 1 biến kí tự (ch). 3. Lệnh puts In 1 chuỗi ký tự ra màn hình. Tham số của puts là 1 chuỗi. Tài liệu hướng dẫn ôn tập môn C Page 7 of 19
  • 8. Hanoi Aptech 5 Các cấu trúc điều khiển 5.1 If else Cú pháp: if(biểu_thức_điều_kiện) { lệnh1; lệnh 2; ... } else { lệnh 3; lệnh 4; ... } Có nghĩa là nếu biểu thức điều kiện đúng(có giá trị khác 0) thì thực hiện các lệnh ngay dưới if(lệnh 1, lệnh2) còn nếu sai(giá trị bằng 0) thì thực hiện các lệnh trong else(lệnh 3, 4). Lưu ý: có thể có lệnh if ở bên trong 1 if khác. Người ta gọi là if lồng: VD: if (a > 1) { if (b > 1) { c = 1; } } Đoạn code này thực hiện kiểm tra điều kiện a > 1 trước, nếu đúng thực hiện lệnh if bên trong kiểm tra b > 1, nếu đúng nữa thì thực hiện lệnh gán c = 1; 5.2 switch case switch(biểu_thưc) { case: gia_tri1 danh_sach_cac_lenh; break; case: gia_tri_2; danh_sach_cac_lenh; break; .. default: danh_sach_cac_lenh; Tài liệu hướng dẫn ôn tập môn C Page 8 of 19
  • 9. Hanoi Aptech } Câu lệnh switch kiểm tra giá trị biểu thức điều kiện, nếu nhận 1 trong các giá trị case nào thì thực hiện danh sách các câu lệnh trong case đó rồi kết thúc luôn. Trong trường hợp không có case nào đúng thì thực hiện các câu lệnh trong default. Lưu ý: • kết thúc các case phải có break • default có thể có hoặc không (optional) 5.3 Lệnh lặp for Cú pháp: for(khởi_tạo_biến_chạy; điều_kiện_dừng; thay_đổi_biến_chạy); { lệnh 1; lệnh 2; ... } vd: int i; for (i = 1; i < 10; i++) { printf(“%d”, i); } Đoạn code này sẽ print ra màn hình: 123456789 Trong ví dụ này đầu tiên máy sẽ khởi tạo biến chạy i = 1; kiểm tra điều kiện dừng i<4, vì lúc này i = 0 nhỏ hơn 4 nên chưa dừng, máy thực hiện lệnh printf trong for và in ra màn hình 1. Tiếp đó, thực hiện thay đổi biến chạy i++ -> i được tăng thêm 1 và bằng 2. Lại kiểm tra điều kiện, i vẫn nhỏ hơn 10 nên in ra 2. Cứ thế cho đến khi i = 10 thì biểu thức điều kiện là sai và vòng lặp for dừng lại. Lưu ý: • 3 phần trong for phân tách bởi dấu chấm phẩy ; • Có phần có thể không có: VD: for(; i < 10; i++) • Điều kiện dừng không đúng sẽ làm cho vòng for kéo dài vô tận không dừng lại. VD: for(i = 1; i > 0; i++) { printf(“%d”,i); } Tài liệu hướng dẫn ôn tập môn C Page 9 of 19
  • 10. Hanoi Aptech 5.4 Lệnh lặp while Cú pháp: while (biểu_thức_điều_kiện) { Danh sách các câu lệnh; } Lệnh while sẽ kiểm tra biểu thức điều kiện trước, nếu đúng thì thực hiện các lệnh bên trong khối while cho đến khi nào biểu thức điều kiện sai thì dừng. VD: int i = 1; while (i < 10) { printf(“%d”, i); i++; } 5.5 Lệnh lặp do while: Cú pháp: do { danh_sách_các_lênh; } while (biểu_thức_điều_kiện); Lệnh do while cũng giống như lệnh while nhưng thực hiện lệnh trước rồi mới kiểm tra biểu thức điều kiện. VD: int i = 1; do { printf(“%d”, i); i ++; }while (i < 10); Tài liệu hướng dẫn ôn tập môn C Page 10 of 19
  • 11. Hanoi Aptech Lệnh break Nếu sử dụng trong vòng lặp thì khi gặp lệnh break; sẽ kết thúc vòng lặp đó ngay còn trong switch để chấm dứt việc kiểm tra biểu thức điều kiện nếu đã nhận 1 giá trị của 1 case nào đó. VD: for (int i = 1; i < 10; i++) { printf(“%d”, i); if (i >= 5) break; } Đoạn code này sẽ chỉ in ra 12345 chứ không phải là 123456789 vì khi tăng i đến 5 thì gặp lệnh break kết thúc vòng for. Lệnh continue: Sử dụng trong vòng lặp. Khi gặp câu lệnh continue, máy sẽ không thực hiện tiếp các câu lệnh phía bên dưới của continue mà sẽ thực hiện 1 lần lặp mới. VD: for (int i = 1; i < 10; i++) { if (i == 5) continue; printf(“%d”, i); } Đoạn code này sẽ in ra 12346789 mà không có số 5. Nguyên nhân là khi i == 5 thì gặp lệnh continue và máy không thực hiện lệnh printf phía sau nữa. Tài liệu hướng dẫn ôn tập môn C Page 11 of 19
  • 12. Hanoi Aptech 6 Mảng Mảng là một tập hợp các phần tử có cùng kiểu dữ liệu được lưu trữ liên tiếp trong bộ nhớ mà người ta có thể truy nhập trực tiếp thông qua thứ tự(chỉ số) của phần tử. VD: Mảng các số nguyên, mảng các số thực, mảng các ký tự 6.1 Khai báo mảng Kiểu_dữ_liệu Tên_mảng[Kích_thước_mảng]; VD: int A[10] sẽ khai báo một mảng A gồm 10 phần tử trong bộ nhớ. 1 2 3 4 5 6 7 8 9 10 6.2 Thao tác với mảng 6.2.1 Truy nhập phần tử trong mảng: Tên_mảng[chỉ_số_phần_tử_truy_nhập] VD: 3 4 2 1 0 5 1 1 8 2 3 1 2 3 4 5 6 7 8 9 10 Nếu muốn lấy phần tử thứ 4 trong mảng thì dùng A[3], nguyên nhân là mảng trong C đánh số từ 0. Giá trị nhận được sẽ là 10 Các phép toán áp dụng cho 1 phần tử của mảng cũng giống hệt khi áp dụng cho 1 biến đơn. VD: lấy địa chỉ cho 1 phần tử mảng: &A[i] Đọc từ bàn phím cho 1 phần tử mảng: scanf(“%d”, &A[i]); 6.2.2 Duyệt mảng: Sử dụng vòng lặp: VD: for (int i = 0; i < n; i++) { Xử lý với A[i]; } Tài liệu hướng dẫn ôn tập môn C Page 12 of 19
  • 13. Hanoi Aptech 6.2.3 Sắp xếp mảng VD: cho mảng 1 chiều A có 5 phần tử: 5,3,9,1,6 Sắp xếp các phần tử của mảng theo thứ tự tăng dần. Nghĩa là A[0] = 1; A[1] = 3; A[2] = 5; A[4] = 6; A[5] = 9; Dùng 2 vòng for: int temp; int n = 5; for(int i = 0; i < n - 1; i++) for (int j = i + 1; j < n; j++) if (A[j] < A[i]) //Swap { temp = A[i]; A[i] = A[j]; A[j] = temp; } 6.3 Mảng ký tự Khai báo: char Tên_mảng[Kích_thước]; VD: char s[10]; khai báo 1 mảng có 10 ký tự Xâu là 1 mảng ký tự với ký tự cuối là NULL(0) 6.4 Mảng 2 chiều Là mảng của các mảng 1 chiều. Mỗi phần tử của mảng 2 chiều là một mảng một chiều. VD: char A[10][30]; Mỗi phần tử của mảng A là một chuỗi có kích thước là 30. 6.4.1 Truy nhập phần tử mảng 2 chiều Tên_mảng[chỉ_số_hàng][chỉ_số_cột]. VD: có 1 mảng 2 chiều: kích thước 3x4(3 hàng 4 cột): 3 mảng 1 chiều, mỗi mảng có 4 phần tử. 0 5 8 4 1 3 7 2 9 6 10 5 Muốn lấy giá trị phần tử ở hàng 2 cột thứ 3: Tài liệu hướng dẫn ôn tập môn C Page 13 of 19
  • 14. Hanoi Aptech printf(“d”, A[1][2] ) --> 7.(Chỉ số mảng bắt đầu từ 0) 6.4.2 Thao tác mảng 2 chiều VD: Đọc từ bàn phím và lưu vào 1 mảng 2 chiều kích thước 2x3. #include <stdio.h> void main() { int A[2][3]; int i, j; for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) { printf(“nEnter A[%d][%d] = ”); scanf(“%d”, &A[i,j]); } Tài liệu hướng dẫn ôn tập môn C Page 14 of 19
  • 15. Hanoi Aptech 7 Hàm Hàm được dùng để chia một bài toán lớn thành những công việc nhỏ hơn, có đầu vào và đầu ra xác định. 7.1 Cấu trúc hàm Kiểu_kết_quả_trả_về Tên_hàm (danh_sách_tham_số) { các_lệnh_trong_thân_hàm; return kết_quả; } VD: int Sum(int a, int b) { int c = a + b; return c; } Ở đây, a và b được gọi là các tham số hình thức vì sau đó nó sẽ được thay bằng giá trị cụ thể khi gọi hàm. 7.2 Mẫu hàm Một hàm muốn sử dụng được (gọi được) thì trước đó phải được khai báo nguyên mẫu. Cú pháp khai báo nguyên mẫu: Kiểu_kết_quả_trả_về Tên_hàm (danh_sách_tham_số); 7.3 Gọi hàm 7.3.1 Gọi hàm kiểu tham trị (chỉ truyền giá trị) Có nghĩa là khi truyền tham số cho hàm thì chỉ sử dụng giá trị của các tham số mà không thay đổi chúng. VD: int a = 3, b = 5; printf(“%d”, Sum(a,b)); Kết quả in ra màn hình là 8. Các giá trị a, b không hề bị thay đổi cho dù trong hàm Sum chúng ta có sử dụng lệnh gán để thay đổi a, b đi chăng nữa. 7.3.2 Gọi hàm kiểu tham biến(truyền địa chỉ của biến) Kiểu gọi hàm này sẽ làm thay đổi giá trị của tham số khi truyền vào cho lời gọi hàm. VD: Tài liệu hướng dẫn ôn tập môn C Page 15 of 19
  • 16. Hanoi Aptech void input(int *x) { printf(“nInput:”); scanf(“%d”, x); } void main() { int x = 0; input(&x); } Sau lời gọi hàm input(&x) thì giá trị của x sẽ được thay thế bằng 1 giá trị nhập vào từ bàn phím, x không giữ nguyên giá trị 0 như kiểu gọi hàm bằng tham trị. 7.3.3 Truyền biến mảng cho lới gọi hàm Trong C, khi truyền 1 mảng vào tham số của hàm, chỉ có địa chỉ của mảng được truyền. VD: void main() { int ary[10]; fn_ary(ary); } void fn_ary(int ary[]) { .. } với mảng 2 chiều: void main() { int ary[10][20]; fn_ary(ary); } void fn_ary(int ary[][20]) { .. } Tài liệu hướng dẫn ôn tập môn C Page 16 of 19
  • 17. Hanoi Aptech 8 Con trỏ Con trỏ là 1 biến đặc biệt, giá trị của biến con trỏ là địa chỉ của 1 ô nhớ. VD: 8.1 Khai báo Kiểu_con_trỏ *Tên_con_trỏ; VD: int *p; int x; p = &x; Đoạn code trên khai báo 1 con trỏ nguyên p, và p trỏ vào ô nhớ x. 8.2 Thao tác với con trỏ 8.2.1 Lấy giá trị mà con trỏ trỏ tới Cú pháp: *Tên_con_trỏ VD: *p trong ví dụ trên sẽ trả về giá trị x; 8.2.2 Tăng giảm đối với biến con trỏ nguyên int *p; p++ hoặc ++p: tăng p thêm 2 đơn vị (vì kích thước 1 số nguyên là 2 byte) p-- hoặc -- p : giảm p 2 đơn vị p+i , p - i: tăng, giảm p 2*i đơn vị. 8.2.3 Con trỏ và mảng 1 chiều Tên mảng chính là 1 con trỏ trỏ tới phần tử đầu tiên của mảng đó. VD: int A[5]; Tài liệu hướng dẫn ôn tập môn C Page 17 of 19 1001 50 con trỏ giá trị trỏ tới
  • 18. Hanoi Aptech Để lấy giá trị phần tử đầu tiên của mảng có 2 cách: A[0] hoặc *A Để lấy giá trị phần tử thứ 1 của mảng: A[1] hoặc *(A + 1) Để lấy giá trị phần tử thứ i của mảng : A[i] hoặc *(A + i) 8.2.4 Cấp phát động bộ nhớ (Xem thêm trong giáo trình , trang 217 mục Allocating Memory) Tài liệu hướng dẫn ôn tập môn C Page 18 of 19
  • 19. Hanoi Aptech 9 Xâu Xâu là mảng kí tự với kí tự kết thúc là NULL(‘0’). Nhập xâu từ bàn phím: gets(str) In xâu ra màn hình: puts(str) Các hàm xử lý xâu: strcat(str1, str2): nối chuỗi str2 vào chuỗi str1, trả về chuỗi đã nối. strcmp(str1,str2): so sánh 2 xâu theo thứ tự alphabe.  > 0: nếu str1 < str2  =0 : nếu str 1 == str2  <0 : nếu str1 > str2 strchar(str, chr): tìm ký tự chr trong chuỗi str. strstr(str1,str2): tìm chuỗi str2 trong chuỗi str1 strcpy(str1,str2): copy chuỗi str2 vào chuỗi str1 strlen(str): lấy chiều dài của str Tài liệu hướng dẫn ôn tập môn C Page 19 of 19