Tải bản đầy đủ (.pdf) (19 trang)

Ôn tập các kiến thức căn bản về lập trình C

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (239.09 KB, 19 trang )

HTD (TH0003) C Programming (Se) Page: 1

ôn tập CáC KIếN THứC CB Về LậP TRìNH C
[]

A.CáC PHầN Tử Cơ BảN:

Các phép tính:
Phép toán cơ bản: + , - , * , / , %(lấy phần d).
Phép toán tăng giảm: x++ hay ++x ( x--,--x): tăng (giảm) x xuống 1 đơn
vị.
Phép toán trên Bit: & (and), | (or), ^ (XOR), << (dịch trái), >> (dịch
phải).
Biểu thức điểu kiện: cú pháp: BT1? BT2: BT3 (BT: Biểu thức). Nếu
BT1 đúng(<>0) thì BT điều kiện trên = giá trị của BT2 ngợc lại = giá trị của
BT3 nếu BT1 sai (=0).
VD: printf(Min of a & b: %d,a<b?
a:b);

Kiểu dữ liệu:
int (-32768 ... 32767) (2 hoặc 4 Byte); unsigned int (0 ... 65535).
char (-128 ... 127) (1 Byte); unsigned char (0 ... 255).
long (-2147483648 ... 2147483647) (4 Byte). unsigned long (0 ...
4294967297).
float (3.4 E-38 ... 3.4E+38) (4 Byte).
double (1.7E-308 ... 1.7E+308) (8 Byte). long double (3.4E-4932 ...
1.1E4932).
Định nghĩa kiểu với typedef: typedef khaibáo....
VD: tạo một kiểu ma
trận kích thớc [20][20] với tên l matrix : typedef float
matrix[20][20];



Biến, hằng số:
Khai báo biến: kiểudữliệu tênbiến; hay kiểudữliệu tênbiến =
giátrịkhởiđầu;
Khai báo hằng số: const type NAME=giátrị; hay #define tênhằngsố
gíatrị;

VD: const float Pi=3.14; #define Pi 3.14;
HTD (TH0003) C Programming (Se) Page: 2


Các hm cơ bản : (Các hm kiểm tra đựơc khai báo trong <ctype.h>).
fabs(x): lấy giá trị tuyệt đối.
sin(x), cos(x), tan(x): lấy sin, cos, tang
của x.
floor(x): Lấy phần nguyên của số x.
exp(x): tính e mũ x (e
x
).
flushall(): xoá bộ đệm bn phím.
log(x): tính ln(x).
log10(x): tính lg(x).
pow(x,n): tính x mũ n (x
n
).
M_PI: Hằng số Pi.
void calloc(unsigned n, unsigned size): cấp phát vùng nhớ n*size byte,
nếu thnh công hm trả về địa đầu vùng nhớ đợc cấp, ngợc lại trả về
NULL. Để giải phóng vùng nhớ đợc cấp phát bởi malloc hay calloc do pt
trỏ tới ta dùng : void free(void *pt); <alloc.h>

int getchar(void): nhận một ký tự từ bn phím (stdin), trả về ký tự nhận
đợc.
int random(int n): cho một giá trị ngẫu nhiên từ 0 ... n-1. <stdlib.h>
int tolower(int c): đổi ký tự chữ hoa sang chữ thừơng. <ctype.h>
int toupper(int c): đổi ký tự chữ thờng sang chữ hoa.<ctype.h>
int isalnum(int c): kiểm tra c có phải l ký tự alphanumeric? (chữ cái hay
số).
int isalpha(intc): kiểm tra c có phải l chữ cái không?
int isdigit(int c): kiểm tra c có phải l chữ số không?
Int ispunct(int c): kiểm tra c có phải l ký tự chấm câu không?
int isxdigit(int c): kiểm tra c có phải l chữ số hệ 16 không?
int isupper(int c): kiểm tra c có phải l chữ hoa (từ A đến Z) không.
Chi chú: Các hm kiểm tra nếu thoả thì trả về giá trị <>0, ngợc lại trả về 0.

Phép gán: Tên biến = Biểuthức / biến;

Xuất nhập dữ liệu:
Xuất: printf(ký tự điều khiển,bt1,bt2,...);
Trong đó danh sách biểu thức có thể bao gồm biểu thức, số, hay văn bản,
các đối tợng phải cách nhau bởi dấu phẩy.
Vd: printf( Nam %d la the ky %d: , 1999+2, 40/
2);
HTD (TH0003) C Programming (Se) Page: 3

ệ Nam 2001 la the ky 20
Nhập: scanf(các ký tự định dạng,biến1, biến2,...).
scanf(%d%d,&a,&b);

b.Cấu trúc điều kiện, rẽ nhánh v vòng lặp:



if (bieuthuc) lệnh1;
hay if (bieuthuc) lệnh1;
else lệnh2;
Trong cấu trúc thứ 1, nếu bieuthuc cho giá trị khác 0 thì thực hiện lệnh1 v =0 thì
thôi, còn trong cấu trúc thứ 2 nếu bieuthuc cho giá trị khác 0 thì thực hiện lệnh1 v =0
thì thực hiện lệnh2. Chú ý l trong thân if v else chỉ l 1 câu lệnh đơn, nếu có nhiều
lệnh thì phải lồng vo {...};

switch (biểu thức)
{
case x: lệnh; break;
..........
case n: lệnh; break;
default :lệnh; break;
}
ý nghĩa
: câu lệnh rẽ nhánh switch sẽ tính giá trị của biểu thức v thực hiện lệnh
tơng ứng trong case no có giá trị ny. Nếu không có giá trị trong case no = giá
trị của biểu thức thì thực hiện lệnh sau default.

for (biếnđkh[= giá trị đầu]; điều kiện ; phép toán thay đổi giá trị biến đkh ) lệnh
;
Nếu có nhiều lệnh thì phải lồng vo {... };

while (biểu thức) lệnh; Nếu có nhiều lệnh thì lồng vo{... };
ý nghĩa
: Trong khi biểu thức <>0 thì thực hiện lệnh.

do lệnh while(biểu thức) ; Nếu có nhiều lệnh thì lồng vo {}.

ý nghĩa
: Thực hiện lệnh nhiều lần trong biểu thức <>0 .

goto v nhãn: (Nhãn (handle) có dạng nh tên biến, đứng trớc dấu 2 chấm :)
HTD (TH0003) C Programming (Se) Page: 4

Cú pháp: goto nhãn; Khi gặp dòng ny máy sẽ nhãy đến câu lệnh có nhãn viết
sau từ khoá goto.

CONTINUE, BREAK V SIZEOF:
o Câu lệnh continue dùng để bắt đầu một vòng lặp mới của chu trình bên trong
nhất chứa nó. Trong thân for máy sẽ chuyển đến bớc khởi đầu kế tiếp. Còn
trong while v do while máy sẽ chuyển đến xác định giá trị biểu thức sau while
v tiến hnh kiểm tra điều kiện kết thúc vòng lặp, (continue không dùng cho
switch).
o Câu lệnh break cho phép ta thoát khỏi for, while, do while v switch. Khi có
nhiều vòng lặp lồng nhau, break sẽ đa ra khỏi vòng lặp hay switch bên trong
nhất.
o Toán tử sizeof cho kích thớc (byte) của một kiểu hay một đối tợng dữ liệu,
cú pháp:
sizeof(kiểudữliệu) hay sizeof(đốitợngdữliệu). Các kiểu dữ liệu nh int, char,
float, kiểu tự định nghĩa,... Các đối tợng dữ liệu nh mảng, cấu trúc, biến,...
Thờng dùng để xác định số phần tử của mảng khi đợc khởi đầu:

int a[]={1,2,3,4,5,6};
int spt=sizeof(a)/sizeof(int);
C. Hm (FUNCTION)
:

Định nghĩa Hm:

<Kiềudữliệu / void> TênHm (Danhsáchthamsố)
<Khai báo kiểu cho các tham số>;
{Khai báo biến cục bộ v thân hm};

Sử dụng Hm:
Tên hm (Danhsáchcácthamsốthựcnếucó);

Truyền tham số:
+ Truyền bằng trị: đây l chế độ truyền tham số mặc định của C. Với cách truyền
ny giá trị của tham số thực sẽ không bị thay đổi sau khi hm thực hiện.
+Truyền bằng biến: tức muốn truyền cả nội dung lẫn địa chỉ của biến. Khi đó ta
phải sử dụng biến con trỏ.
HTD (TH0003) C Programming (Se) Page: 5

D. Mảng (Array):

Mảng 1 chiều:
Khai báo tờng minh: Kiểu tenmang[số phần tử] ;
Khai báo không tờng minh: Kiểu tenmang []; Cách khai báo ny đợc sử
dụng trong các trờng hợp: vừa khai báo vừa gán trị (vd
: int a[]={1,2,3,7};
), mảng l tham số hm (vd
: int nhapmang(int a[],int n, int m) ;).
Xuất/ nhập mảng
: ta dùng vòng lặp for(vd for (i=1; i<n; i++) ....;), hay ta
có thể tạo một hm để nhập mảng với số phần tử không biết trớc, kết thúc
khi nhập số 0.
void nhap(int a[], int*n)
{
for (*n=0;*n<20,(*n)++)

{
printf(A[%d]:,*n);
scanf(%d,&a[*n]);
if (a[*n]==0) break;
}
}
Sắp xếp mảng giảm dần (Buble sort)
.
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (A[i]<A[j])
{
tam=A[i];
A[i]=A[j];
A[j]=tam;
}

Mảng 2 chiều:
Khai báo tờng minh
: Kiểu tenmang[sốcột][sốdòng] ; Vd: a[20][10];
Khai báo không tờng minh
: Kiểu tenmang [ ][sốcột] ; sử dụng cách ny
trong các trờng hợp: vừa khai báo vừa gán trị(Vd:
int a[][3]={{1,2,3},{-1,-
2,-3}};), mảng l tham số hm( Vd:
void nhap(a[][max], int n);).
Xuất/ nhập mảng: ta dùng 2 vòng lặp for I:=1 to n do for j:=1 to m do...
Chú ý l ta không thể dùng phép toán địa chỉ để nhập các phần tử của mảng
hai chiều (ngoại trừ mảng kiểu int), m phải thông qua một biến tạm trung
gian.

Thao tác
: (i: đkh dòng, j: đkh cột, n: số dòng)
+Đờng chéo:




+Các phần tử đối xứng:
-Qua đờng chéo chính: a[i][j] v a[j][i].
-Qua đờng chéo phụ: a[i][j] v a[n-j-1][n-i-1].
-Qua tâm: a[i][j] v a[n-i-1][n-j-1].
Duyệt ma trận
:
+ Nữa trên đ/c chính:
for (i=0; i<n-1; i++)
for (j=i+1; j<n; j++) ....
+ Nữa dới đ/c chính:
for (i=1; i<n; i++)
for (j=0; j<i; j++) ....
+ Nữa trái ma trận:
for (i=0; i<n; i++)
for (j=0; j<n/2; j++) ....
+ Nằm trên đờng chéo chính:
for (i=0; i<n; i++)
với a[i][i] l các pt trên đ/c chính.
+ Đ/C song song với đ/c chính:
for (i=0; i<n-k; i++)
với a[i][i+k] l các pt // với đ/c chính.



HTD (TH0003) C Programming (Se) Page: 6

E. Con Trỏ (Pointer):

HTD (TH0003) C Programming (Se) Page: 7


Khai báo:
+ <Kiểu dữ liệu> *Tên_con_trỏ; Vd
: int *pt,*x;
+ Mảng con trỏ: <Kiểu dữ liệu> *Tên_con_trỏ[sốphầntửmảng]; Vd
: int
*pt[10];
+ Hm con trỏ: *Tên_hm (Danh sách các tham số)...;

Các phép toán trên con trỏ:
+ Phép gán: khi thực hiện phép gán cho biến con trỏ thì biểu thức bên phải phép
gán phải có giá trị l địa chỉ của một biến hay mảng v phải cùng kiểu với kiểu con
trỏ.
Vd:
int x,*pt; ... p=&a;
+ Phép toán lấy nội dung của biến do con trỏ chỉ đến(*): *tên_biến_con_trỏ. VD
:
y=*x;
+ Phép toán tăng giảm: pt++,pt--; Chú ý trong phép toán ny l mỗi lần tăng
(giảm) l tăng (giảm) kích thớc của kiểu dữ liệu m nó trỏ đến (chứ không phải l
một đơn vị).

Con trỏ l tham số Hm: Nếu một hm có tham số l kiểu con trỏ thì khi truyền
tham số ny cho hm phải truyền địa chỉ của biến có kiểu tơng ứng.

Vd:
void input (int a[], int*x); Gọi hm: input (a,&x);


Con trỏ v mảng:
+Mảng một chiều:
Đối với mảng một chiều khi sử dụng mảng nếu chỉ ghi tên mảng m không
ghi chỉ số thì có nghĩa l địa chỉ của phần tử thứ zero của mảng.( array <=>
&array[0]).
Khi một hm có tham số l mảng thì khi gọi hm ta chỉ truyền tên của mảng,
không phải ghi chỉ số mảng. Vd: input (a , n); nhập mảng A gồm n phần tử.
+Mảng nhiều chiều:
Đối với mảng hai chiều khi sử dụng mảng nếu chỉ ghi tên mảng m không
ghi chỉ số thì có nghĩa l địa chỉ của hng đầu tiên trong ma trận. (a &a[0]
(&a[0][0]).
Không thể dùng phép toán địa chỉ để nhập cho mảng hai chiều (ngoại trừ
kiểu int).

×