SlideShare ist ein Scribd-Unternehmen logo
1 von 117
NGÔN NG L P CỮ ẬNGÔN NG L P CỮ Ậ
Giáo viên
Vũ Văn Định
2Ngôn ngữ lập trình C
Bài 1: T ng quan v ngôn ng l pổ ề ữ ậBài 1: T ng quan v ngôn ng l pổ ề ữ ậ
trình Ctrình C
 Ngôn ng C có m t s các đ c đi m n i b tữ ộ ố ặ ể ổ ậNgôn ng C có m t s các đ c đi m n i b tữ ộ ố ặ ể ổ ậ
sau :sau :
 B l nh phù h p v i ph ng pháp l p trình c uộ ệ ợ ớ ươ ậ ấB l nh phù h p v i ph ng pháp l p trình c uộ ệ ợ ớ ươ ậ ấ
trúc.trúc.
 Ki u d li u phong phú.ể ữ ệKi u d li u phong phú.ể ữ ệ
 M t ch ng trình C bao gi cũng g m m t ho cộ ươ ờ ồ ộ ặM t ch ng trình C bao gi cũng g m m t ho cộ ươ ờ ồ ộ ặ
nhi u hàm và các hàm r i nhau.ề ờnhi u hàm và các hàm r i nhau.ề ờ
 Là ngôn ng linh đ ng v cú pháp, ch p nh nữ ộ ề ấ ậLà ngôn ng linh đ ng v cú pháp, ch p nh nữ ộ ề ấ ậ
nhi u cách th hi n ch ng trình .ề ể ệ ươnhi u cách th hi n ch ng trình .ề ể ệ ươ
3Ngôn ngữ lập trình C
I. Hướng dẫn sử dụng môi trương kết hợp Turbo CI. Hướng dẫn sử dụng môi trương kết hợp Turbo C
1.1. Khởi độngKhởi động
C1: Từ DOS [ đường dẫn ] TC.EXEC1: Từ DOS [ đường dẫn ] TC.EXE
C2: Từ Win C -> TC -> BIN -> TC.EXEC2: Từ Win C -> TC -> BIN -> TC.EXE
C3: Start -> Run -> C:TCBINTC.EXEC3: Start -> Run -> C:TCBINTC.EXE
2.2. Mở FileMở File
Mở file mới : File -> NewMở file mới : File -> New
Mở file đã có: File -> OpenMở file đã có: File -> Open
3.3. Ghi FileGhi File
Save (F2) : Ghi tệp mới đang soạn thảo vào đĩaSave (F2) : Ghi tệp mới đang soạn thảo vào đĩa
Save as : Ghi tệp đang soạn thảo vào đĩa theo tênSave as : Ghi tệp đang soạn thảo vào đĩa theo tên
mới hoặc đe lên tệp đã cómới hoặc đe lên tệp đã có
4Ngôn ngữ lập trình C
 Chạy một chương trìnhChạy một chương trình
 F9 : Biên dịchF9 : Biên dịch
 Ctrl F9 : Thực thi chương trìnhCtrl F9 : Thực thi chương trình
 Alt F5 : Xem kết quảAlt F5 : Xem kết quả
 Thoát khỏi CThoát khỏi C
 Thoát tạm thời về DOS : Dos ShellThoát tạm thời về DOS : Dos Shell
 Thoát hẳn khỏi C: File  Quit ( Alt + X)Thoát hẳn khỏi C: File  Quit ( Alt + X)
5Ngôn ngữ lập trình C
II. Giới thiệu ngôn ngữ lập trình CII. Giới thiệu ngôn ngữ lập trình C
1. Các thành phần của NNLT C1. Các thành phần của NNLT C
 Tập các ký tựTập các ký tự
 Chữ cái: A .. Z, a .. zChữ cái: A .. Z, a .. z
 Chữ số : 0..9Chữ số : 0..9
 Ký hiệu toán học :Ký hiệu toán học : + - * / = ( )+ - * / = ( )
 Ký tự gạch nối: _Ký tự gạch nối: _
 Các ký hiệu đặc biệt khác như : . , ; : [ ] { } ? !  & | % # $,…Các ký hiệu đặc biệt khác như : . , ; : [ ] { } ? !  & | % # $,…
 Từ khoáTừ khoá
 Là những từ có một ý nghĩa hoàn toàn xác địnhLà những từ có một ý nghĩa hoàn toàn xác định
 Asm, char, do, int, float, for, do, While,…Asm, char, do, int, float, for, do, While,…
 TênTên
 Dùng để xác định các đại lượng khác nhau trong một chương trìnhDùng để xác định các đại lượng khác nhau trong một chương trình
 Bắt đầu bằng chữ cái hoặc gạch nốiBắt đầu bằng chữ cái hoặc gạch nối
 Độ dài cực đại mặc định là 32Độ dài cực đại mặc định là 32
6Ngôn ngữ lập trình C
2. Các kiểu dữ liệu cơ sở trong C2. Các kiểu dữ liệu cơ sở trong C
 KiểuKiểu sốsố kýký tựtự (char)(char)
 KiểuKiểu sốsố nguyênnguyên ((intint))
 KiểuKiểu dấudấu phẩyphẩy đđộngộng ((chínhchính xácxác đơđơn (float),n (float),
chínhchính xácxác képkép (double))(double))
 KiểuKiểu voidvoid
7Ngôn ngữ lập trình C
2.1 Ki u ký t (char)ể ự2.1 Ki u ký t (char)ể ự
 M t giá tr ki u ký t (char) chi m 1 byte trong b nhộ ị ể ự ế ộ ớM t giá tr ki u ký t (char) chi m 1 byte trong b nhộ ị ể ự ế ộ ớ
và bi u di n m t ký t thông qua b ng mã ASCII.ể ễ ộ ự ảvà bi u di n m t ký t thông qua b ng mã ASCII.ể ễ ộ ự ả
 Ví dụVí dụ
Ký tựKý tự Mã ASCIIMã ASCII
00 4848
11 4949
22 5050
AA 6565
aa 9797
8Ngôn ngữ lập trình C
 Trong ngôn ng C cung c p hai ki u ký t (char) làữ ấ ể ựTrong ngôn ng C cung c p hai ki u ký t (char) làữ ấ ể ự
signed char và unsigned charsigned char và unsigned char
Ph m viạPh m viạ S ký tố ựS ký tố ự Kích th cướKích th cướ
signed charsigned char -128..127-128..127 1 byte1 byte
unsigned charunsigned char 0..2550..255 1 byte1 byte
Ví dụ : char ch, ch1;
ch= ‘a’ ; ch1= 97;
9Ngôn ngữ lập trình C
2.2 Ki u s nguyên (int)ể ố2.2 Ki u s nguyên (int)ể ố
Ki u s nguyên trong C g m các ki u sau:ể ố ồ ểKi u s nguyên trong C g m các ki u sau:ể ố ồ ể
Ki uểKi uể Ph m vi bi uạ ểPh m vi bi uạ ể
di nễdi nễ
Kích th cướKích th cướ
intint -32768 -> 32767-32768 -> 32767 2 byte2 byte
Unsigned intUnsigned int 0 -> 655350 -> 65535 2 byte2 byte
-2147483648 --2147483648 - 4 byte4 byte
4 byte4 byte
10Ngôn ngữ lập trình C
2.3 Kiểu số thực hay còn gọi là kiểu dấu phẩy động2.3 Kiểu số thực hay còn gọi là kiểu dấu phẩy động
KiểuKiểu Phạm vi biểu diễnPhạm vi biểu diễn Số chữ sốSố chữ số
có nghĩacó nghĩa
KíchKích
thướcthước
floatfloat 3.4-38E -> 3.4E+383.4-38E -> 3.4E+38 7-87-8 4 byte4 byte
doubledouble 1.7E-308 -> 1.7E+3081.7E-308 -> 1.7E+308 15-1615-16 8 byte8 byte
laonglaong
doubledouble
3.4E-4932 -> 1.1E+49323.4E-4932 -> 1.1E+4932 17-1817-18 10 byte10 byte
11Ngôn ngữ lập trình C
3 H ng và bi nằ ế3 H ng và bi nằ ế
3.1 H ng:ằ3.1 H ng:ằ
 Khái ni m: h ng là giá tr b t bi n trong ch ngệ ằ ị ấ ế ươKhái ni m: h ng là giá tr b t bi n trong ch ngệ ằ ị ấ ế ươ
trình không thaytrình không thay đ i, không bi n đ i v m t giá tr .ổ ế ổ ề ặ ịđ i, không bi n đ i v m t giá tr .ổ ế ổ ề ặ ị
Các lo i h ngạ ằCác lo i h ngạ ằ đ c s d ng trong C t ng ng v iượ ử ụ ươ ứ ớđ c s d ng trong C t ng ng v iượ ử ụ ươ ứ ớ
các ki u d li u nh t đ nhể ữ ệ ấ ịcác ki u d li u nh t đ nhể ữ ệ ấ ị
 Trong C có ba lo i h ng :ạ ằTrong C có ba lo i h ng :ạ ằ
 H ng sằ ốH ng sằ ố
 H ng chu iằ ỗH ng chu iằ ỗ
 H ng ký tằ ựH ng ký tằ ự
12Ngôn ngữ lập trình C
H ng sằ ốH ng sằ ố: là các giá tr s đã xác đ nh, có th là ki uị ố ị ể ể: là các giá tr s đã xác đ nh, có th là ki uị ố ị ể ể
nguyên hay ki u th cể ựnguyên hay ki u th cể ự
 H ng nguyên: Giá tr ch bao g m các ch s , d u +,ằ ị ỉ ồ ữ ố ấH ng nguyên: Giá tr ch bao g m các ch s , d u +,ằ ị ỉ ồ ữ ố ấ
- đ c l u tr theo ki u int. Ví d : 12,-12ượ ư ữ ể ụ- đ c l u tr theo ki u int. Ví d : 12,-12ượ ư ữ ể ụ
 N u giá tr v t quá mi n giá tr c a int ho c có kýế ị ượ ề ị ủ ặN u giá tr v t quá mi n giá tr c a int ho c có kýế ị ượ ề ị ủ ặ
t l (hay L ) theo sau giá tr thì l u theo ki u long int.ự ị ư ểt l (hay L ) theo sau giá tr thì l u theo ki u long int.ự ị ư ể
Ví d : 43L ho c 43l là h ng nguyên l u theo ki uụ ặ ằ ư ểVí d : 43L ho c 43l là h ng nguyên l u theo ki uụ ặ ằ ư ể
long int.long int.
 H ng th c: Trong giá tr có d u ch m th p phân,ằ ự ị ấ ấ ậH ng th c: Trong giá tr có d u ch m th p phân,ằ ự ị ấ ấ ậ
ho c ghi d i d ng s có mũ, và đ c l u theo ki uặ ướ ạ ố ượ ư ểho c ghi d i d ng s có mũ, và đ c l u theo ki uặ ướ ạ ố ượ ư ể
float, double, long double. Ví d : 1.2 , 2.1E -3 (2.1E-ụfloat, double, long double. Ví d : 1.2 , 2.1E -3 (2.1E-ụ
3=0.0021) ho c 3.1e-2 (3.1e-2=0.031).ặ3=0.0021) ho c 3.1e-2 (3.1e-2=0.031).ặ
13Ngôn ngữ lập trình C
H ng ký tằ ựH ng ký tằ ự
 M t h ng ki u ký tộ ằ ể ựM t h ng ki u ký tộ ằ ể ự đ c vi t trong d u ngo c đ n (' )ượ ế ấ ặ ơđ c vi t trong d u ngo c đ n (' )ượ ế ấ ặ ơ
nh 'A' ho c 'z'.ư ặnh 'A' ho c 'z'.ư ặ
 H ng ký t 'A' th c sằ ự ự ựH ng ký t 'A' th c sằ ự ự ự đ ng nghĩa v i giá tr nguyồ ớ ịđ ng nghĩa v i giá tr nguyồ ớ ị ên 65,ên 65,
là giá tr trong b ng mã ASCII c a ch hoa 'A' (Nh v yị ả ủ ữ ư ậlà giá tr trong b ng mã ASCII c a ch hoa 'A' (Nh v yị ả ủ ữ ư ậ
giá tr c a h ng chính là mã ASCII c a nó). Ð i v i m tị ủ ằ ủ ố ớ ộgiá tr c a h ng chính là mã ASCII c a nó). Ð i v i m tị ủ ằ ủ ố ớ ộ
vài h ng ký tằ ựvài h ng ký tằ ự đ c bi t, ta c n s d ngặ ệ ầ ử ụđ c bi t, ta c n s d ngặ ệ ầ ử ụ cách vi t thêmếcách vi t thêmế
d u  , nh 't' t ng ng v i phím tab:ấ ư ươ ứ ớd u  , nh 't' t ng ng v i phím tab:ấ ư ươ ứ ớ
 H ng ký t có th tham gia vào phép toán nh m i sằ ự ể ư ọ ốH ng ký t có th tham gia vào phép toán nh m i sằ ự ể ư ọ ố
nguyên khác:nguyên khác:
VD:VD: '8' - '1'= 56-49=7.'8' - '1'= 56-49=7.
14Ngôn ngữ lập trình C
Cách viếtCách viết Ký tựKý tự
‘‘n’n’ Xuống hàngXuống hàng
‘‘t’t’ TabTab
‘‘o’o’ ““nul” tương ứng với giá trịnul” tương ứng với giá trị
nguyên 0 trong bảng mãnguyên 0 trong bảng mã
ASCIIASCII
‘‘b’b’ BackspacseBackspacse
‘‘r’r’ Về đầu dòngVề đầu dòng
‘‘f’f’ Sang tráiSang trái
‘‘’’ 
‘‘ ” ’” ’ ””
‘‘ ’ ’’ ’ ’’
15Ngôn ngữ lập trình C
H ng chu iằ ỗH ng chu iằ ỗ
 Là chu i ký t n m trong c p d u nháy kép " ". Các kýỗ ự ằ ặ ấLà chu i ký t n m trong c p d u nháy kép " ". Các kýỗ ự ằ ặ ấ
t này cũng có th là các ký tự ể ựt này cũng có th là các ký tự ể ự đ c bi u di n b ngượ ể ễ ằđ c bi u di n b ngượ ể ễ ằ
chu i thoát.ỗchu i thoát.ỗ
 Ví d : "Turbo C", "Ngôn ng C++ nr"ụ ữVí d : "Turbo C", "Ngôn ng C++ nr"ụ ữ
 M t h ng chu iộ ằ ỗM t h ng chu iộ ằ ỗ đ c l u tr t n cượ ư ữ ậđ c l u tr t n cượ ư ữ ậ ùng b ng m t ký t Nulằ ộ ựùng b ng m t ký t Nulằ ộ ự
(0), ví d chu i "Turbo C"ụ ỗ(0), ví d chu i "Turbo C"ụ ỗ đ c l u tr trong b nh nhượ ư ữ ộ ớ ưđ c l u tr trong b nh nhượ ư ữ ộ ớ ư
sau:sau:
TT uu rr bb oo CC 00
16Ngôn ngữ lập trình C
CáchCách định nghĩa hằng sử dụng trong chương trđịnh nghĩa hằng sử dụng trong chương trìnhình
 Với các giá trị hằng thườngVới các giá trị hằng thường được dđược dùng trong mộtùng trong một
chương trình ta nênchương trình ta nên định nghĩa ở đầu chương trđịnh nghĩa ở đầu chương trìnhình
(sau các dòng khai báo những thư viện chuẩn) theo cú(sau các dòng khai báo những thư viện chuẩn) theo cú
pháp:pháp:
#define <tên hằng> <giá trị>#define <tên hằng> <giá trị>
Ví dụ: #define PI 3.1415Ví dụ: #define PI 3.1415
17Ngôn ngữ lập trình C
3.2 Bi nế3.2 Bi nế
- Cách khai báo:- Cách khai báo: M i bi n trong ch ng trìnhỗ ế ươM i bi n trong ch ng trìnhỗ ế ươ đ u ph iề ảđ u ph iề ả
đ c khai báo tr c khi s d ng v i cú pháp khai:ượ ướ ử ụ ớđ c khai báo tr c khi s d ng v i cú pháp khai:ượ ướ ử ụ ớ
Ki u d li u   <danh_sách_tên_bi n>;ể ữ ệ ếKi u d li u   <danh_sách_tên_bi n>;ể ữ ệ ế
 L u ý: n u có nhi u tên bi n thì gi a các tên bi nư ế ề ế ữ ếL u ý: n u có nhi u tên bi n thì gi a các tên bi nư ế ề ế ữ ế
ph i có d u , đ ngăn cáchả ấ ểph i có d u , đ ngăn cáchả ấ ể
Ví d : int a,b; float x;ụVí d : int a,b; float x;ụ
-- Kh iởKh iở đ u cho các bi nầ ếđ u cho các bi nầ ế
Ngay trên dòng khai báo ta có th gán cho bi nể ếNgay trên dòng khai báo ta có th gán cho bi nể ế
m t giá tr . Vi c làm này g i là kh iộ ị ệ ọ ởm t giá tr . Vi c làm này g i là kh iộ ị ệ ọ ở đ u choầđ u choầ
bi n.ếbi n.ế
Ví d :  int a,b=6,d=1;ụVí d :  int a,b=6,d=1;ụ
18Ngôn ngữ lập trình C
 Cách truy xu tấCách truy xu tấ đ n đ a ch c a bi nế ị ỉ ủ ếđ n đ a ch c a bi nế ị ỉ ủ ế
 M t s hàm c a C dùngộ ố ủM t s hàm c a C dùngộ ố ủ đ n đ a ch c a bi n ví dế ị ỉ ủ ế ụđ n đ a ch c a bi n ví dế ị ỉ ủ ế ụ
nh hưnh hư àmàm scanfscanf. Ð nh nể ậ. Ð nh nể ậ đ a ch c a bi n dị ỉ ủ ếđ a ch c a bi n dị ỉ ủ ế ùng toánùng toán
t : &ửt : &ử
Ví d : &tên_bi n -ụ ếVí d : &tên_bi n -ụ ế  &a : đ a ch c a bi n aị ỉ ủ ế&a : đ a ch c a bi n aị ỉ ủ ế
19Ngôn ngữ lập trình C
3.3 C u trúc t ng quát c a ch ng trình Cấ ổ ủ ươ3.3 C u trúc t ng quát c a ch ng trình Cấ ổ ủ ươ
M t ch ng trình C chu n g m có các thành ph n sau:ộ ươ ẩ ồ ầM t ch ng trình C chu n g m có các thành ph n sau:ộ ươ ẩ ồ ầ
1.1. Các ch th ti n biên d chỉ ị ề ịCác ch th ti n biên d chỉ ị ề ị
2.2. Khai báo các ki u d li u m iể ữ ệ ớKhai báo các ki u d li u m iể ữ ệ ớ
3.3. Khai báo h ng, khai báo bi nằ ếKhai báo h ng, khai báo bi nằ ế
4.4. Khai báo hàmKhai báo hàm
5.5. Ch ng trình chínhươCh ng trình chínhươ
20Ngôn ngữ lập trình C
1.1. Ch th ti n biên d ch: giúp trình biên d ch th c hi n m tỉ ị ề ị ị ự ệ ộCh th ti n biên d ch: giúp trình biên d ch th c hi n m tỉ ị ề ị ị ự ệ ộ
s công vi c tr c khi th c hi n m t s công vi c tr cố ệ ướ ự ệ ộ ố ệ ướs công vi c tr c khi th c hi n m t s công vi c tr cố ệ ướ ự ệ ộ ố ệ ướ
khi th c hi n biên d ch chính th cự ệ ị ứkhi th c hi n biên d ch chính th cự ệ ị ứ
VD:VD: #include <stdio.h>;#include <stdio.h>;
#include <conio.h>;#include <conio.h>;
2.2. Khai báo ki u d li u m i: dung t khoáể ữ ệ ớ ừKhai báo ki u d li u m i: dung t khoáể ữ ệ ớ ừ typedef.typedef.
VD:VD: typedef int songuyen;typedef int songuyen;
typedef float mang[10];typedef float mang[10];
3.3. Khai báo h ng và bi n: khai báo các h ng s và bi nằ ế ằ ố ếKhai báo h ng và bi n: khai báo các h ng s và bi nằ ế ằ ố ế
dùng trong ch ng trìnhươdùng trong ch ng trìnhươ
4.4. Khai báo hàm: khai báo các hàm t vi tự ếKhai báo hàm: khai báo các hàm t vi tự ế
5.5. Ch ng trình chính: hàm main là hàm b t bu c trongươ ắ ộCh ng trình chính: hàm main là hàm b t bu c trongươ ắ ộ
ch ng trình. Hàm main có th tr v giá tr ki u nguyênươ ể ả ề ị ểch ng trình. Hàm main có th tr v giá tr ki u nguyênươ ể ả ề ị ể
(int) ho c không tr v giá tr nào (void)ặ ả ề ị(int) ho c không tr v giá tr nào (void)ặ ả ề ị
21Ngôn ngữ lập trình C
/* Chương trình in ra dòng chữ Trung tâm đào tạo Trí
Đức trên màn hình */
# include <stdio.h>
void main () /* Ham chinh */
{
printf(" n Trung tâm đào tạo Trí Đức ");
/*xuong dong in chu Trung tâm đào tạo Trí Đức */
}
22Ngôn ngữ lập trình C
* Chương trình tính chu vi và diện tích hình tròn, biết bán kính r
là một hằng số có giá trị =3.1 */
# include <stdio.h> /* khai báo thư viện hàm nhập xuất chuẩn */
# include <math.h> /* khai báo thư viện hàm toán học */
#define r 3.1
void main ()
{
float cv,dt; /* khai bao bien chu vi va dien tich kieu so thuc */
cv=2*r*M_PI; /* tinh chu vi */
dt=M_PI*r*r; /* Tinh dien tich */
printf("nChu vi = %10.2fnDien tich = %10.2f",cv,dt);
/* In ket qua len man hinh */
getch(); /* Tam dung chuong trinh */
}
23Ngôn ngữ lập trình C
*Chương trình này minh họa cách vừa khai báo, vừa khởi
đầu một biến trong C */
#include <stdio.h>
void main()
{
char ki_tu = 'a'; /* Khai báo/khởi đầu kí tự. */
int so_nguyen = 15; /* Khai báo khởi đầu số nguyên */
float so_thuc = 27.62; /* Khai báo/khởi đầu số thực/
printf("%c la mot ki tu.n",ki_tu);
printf("%d la mot so nguyen.n",so_nguyen);
printf("%f la mot so thuc.n",so_thuc);
}
24Ngôn ngữ lập trình C
Bài 2:Bài 2:
Biểu thức và các phép toánBiểu thức và các phép toán
 I. Bi u th cể ứI. Bi u th cể ứ
 Là s k t h p các phép toán và các toán h ng đự ế ợ ạ ểLà s k t h p các phép toán và các toán h ng đự ế ợ ạ ể
di n đ t m t công th c toán h c nào đó.ễ ạ ộ ứ ọdi n đ t m t công th c toán h c nào đó.ễ ạ ộ ứ ọ
 Bi u th c trong C g m có bi u th c toán h c vàể ứ ồ ể ứ ọBi u th c trong C g m có bi u th c toán h c vàể ứ ồ ể ứ ọ
bi u th c logicể ứbi u th c logicể ứ
 Bi u th c toán h c bao g m các phép toán s h c và cácể ứ ọ ồ ố ọBi u th c toán h c bao g m các phép toán s h c và cácể ứ ọ ồ ố ọ
h ng, các bi n, các hàmằ ếh ng, các bi n, các hàmằ ế
 Bi u th c logic bao g m các bi n, h ng, hàm và phépể ứ ồ ế ằBi u th c logic bao g m các bi n, h ng, hàm và phépể ứ ồ ế ằ
toán logic (!: phép ph đ nh, &&: phép và, || : phépủ ịtoán logic (!: phép ph đ nh, &&: phép và, || : phépủ ị
ho c)ặho c)ặ
25Ngôn ngữ lập trình C
II. Các phép toánII. Các phép toán
 Phép toán s h cố ọPhép toán s h cố ọ
Phép toánPhép toán Ý nghĩaÝ nghĩa
++ C ngộC ngộ
-- TrừTrừ
** NhânNhân
// ChiaChia
%% L y ph n dấ ầ ưL y ph n dấ ầ ư
Chú ý:Chú ý:
-Phép toán chia 2 s nguyên s ch t c t ph n th pố ẽ ặ ụ ầ ậ-Phép toán chia 2 s nguyên s ch t c t ph n th pố ẽ ặ ụ ầ ậ
phân.phân.
-Phép toán l y ph n d không áp d ng cho các giáấ ầ ư ụ-Phép toán l y ph n d không áp d ng cho các giáấ ầ ư ụ
tr float và doubleịtr float và doubleị
26Ngôn ngữ lập trình C
II. Các phép toánII. Các phép toán
 Phép toán quan hệPhép toán quan hệ
Phép toánPhép toán Ý nghĩaÝ nghĩa Ví dụVí dụ
>> Có lớn hơn không?Có lớn hơn không? a>ba>b
>=>= Có lớn hơn hay bằng không?Có lớn hơn hay bằng không? a>=ba>=b
<< Có nhỏ hơn không?Có nhỏ hơn không? a<ba<b
<=<= Có nhỏ hơn hay bằng không?Có nhỏ hơn hay bằng không? a<=ba<=b
==== Có bằng hay không?Có bằng hay không? a==ba==b
!=!= Có khác nhau không?Có khác nhau không? a!=ba!=b
Các phép toán quan hệ có độ ưu tiên thấp hơn so với các phépCác phép toán quan hệ có độ ưu tiên thấp hơn so với các phép
toán số họctoán số học
27Ngôn ngữ lập trình C
II. Các phép toánII. Các phép toán
 Phép toán logicPhép toán logic
 Phép phủ định !Phép phủ định !
 Phép và (AND) &&Phép và (AND) &&
 Phép hoặc (OR) ||Phép hoặc (OR) ||
 Các phép toán quan hệ có độ ưu tiên nhỏ hơnCác phép toán quan hệ có độ ưu tiên nhỏ hơn
so với ! nhưng lớn hơn so với phép && và ||so với ! nhưng lớn hơn so với phép && và ||
28Ngôn ngữ lập trình C
 CCâu lệnhâu lệnh gán vgán và biểu thứcà biểu thức
Cú pháp của lệnh gán:Cú pháp của lệnh gán: <tên biến> = <biểu thức>;<tên biến> = <biểu thức>;
VD:VD: x = -10;x = -10;
m = y + 2 – m;m = y + 2 – m;
Trong C cho phép người sử dụng được gộp lệnh gánTrong C cho phép người sử dụng được gộp lệnh gán
theo cú pháp :theo cú pháp :
a = b = c = 7;a = b = c = 7;
29Ngôn ngữ lập trình C
Phép toán tăng gi mảPhép toán tăng gi mả
 Toán t + + : dùng đ tăng giá tr c a các bi n nguyênử ể ị ủ ếToán t + + : dùng đ tăng giá tr c a các bi n nguyênử ể ị ủ ế
hay bi n th cế ựhay bi n th cế ự
 Toán t - - dùng đ gi m giá tr c a bi n nguyên hay bi nử ể ả ị ủ ế ếToán t - - dùng đ gi m giá tr c a bi n nguyên hay bi nử ể ả ị ủ ế ế
th cựth cự
 Toán t + + và -- đ u có th đ ng tr c ho c sau toánử ề ể ứ ướ ặToán t + + và -- đ u có th đ ng tr c ho c sau toánử ề ể ứ ướ ặ
h ngạh ngạ
 VD: + + n ; n+ +; --m ; m--;VD: + + n ; n+ +; --m ; m--;
 Khi các toán t + +, -- đ ng tr c toán h ng thì giá trử ứ ướ ạ ịKhi các toán t + +, -- đ ng tr c toán h ng thì giá trử ứ ướ ạ ị
c a toán h ng đ c tăng ho c gi m tr c khi s d ng vàủ ạ ượ ặ ả ướ ử ục a toán h ng đ c tăng ho c gi m tr c khi s d ng vàủ ạ ượ ặ ả ướ ử ụ
ng c l i n u toán t ++, -- đ ng sau toán h ng thì toánượ ạ ế ử ứ ạng c l i n u toán t ++, -- đ ng sau toán h ng thì toánượ ạ ế ử ứ ạ
h ng đ c tăng hay gi m sau khi th c hi nạ ượ ả ự ệh ng đ c tăng hay gi m sau khi th c hi nạ ượ ả ự ệ
30Ngôn ngữ lập trình C
Chuy n đ i ki u giá trể ổ ể ịChuy n đ i ki u giá trể ổ ể ị
Vi c chuy n đ i ki u giá tr trong C th ng di n ra tệ ể ổ ể ị ườ ễ ựVi c chuy n đ i ki u giá tr trong C th ng di n ra tệ ể ổ ể ị ườ ễ ự
đ ng trong tr ng h p sau:ộ ườ ợđ ng trong tr ng h p sau:ộ ườ ợ
 Trong bi u th c có các toán h ng khác ki uể ứ ạ ểTrong bi u th c có các toán h ng khác ki uể ứ ạ ể
 Khi gán m t giá tr ki u này cho m t giá tr ki u khácộ ị ể ộ ị ểKhi gán m t giá tr ki u này cho m t giá tr ki u khácộ ị ể ộ ị ể
 Ngoài ra ta có th dùng phép chuy n ki u đ ép ki u dể ể ể ể ể ữNgoài ra ta có th dùng phép chuy n ki u đ ép ki u dể ể ể ể ể ữ
li u sang ki u khácệ ểli u sang ki u khácệ ể
(type) bi u_th cể ứ(type) bi u_th cể ứ
Chú ý:Chú ý:
-- Khi chuy n đ i ki u t ng bi u th c thì đ i v i toán h ngể ổ ể ỏ ể ứ ố ớ ạKhi chuy n đ i ki u t ng bi u th c thì đ i v i toán h ngể ổ ể ỏ ể ứ ố ớ ạ
có ki u th p h n s đ c nâng thành ki u cao h n tr cể ấ ơ ẽ ượ ể ơ ượcó ki u th p h n s đ c nâng thành ki u cao h n tr cể ấ ơ ẽ ượ ể ơ ượ
khi ht c hi n phép toán và k t qu thu đ c s có k tự ệ ế ả ượ ẽ ếkhi ht c hi n phép toán và k t qu thu đ c s có k tự ệ ế ả ượ ẽ ế
qu theo ki u cao h nả ể ơqu theo ki u cao h nả ể ơ
31Ngôn ngữ lập trình C
 Ki u int và ki u long thì int ----> longể ểKi u int và ki u long thì int ----> longể ể
 int và float thì int ---> floatint và float thì int ---> float
 Float và double thì float -----> doubleFloat và double thì float -----> double
 Ki u int có th chuy n thành float và ng c l iể ể ể ượ ạKi u int có th chuy n thành float và ng c l iể ể ể ượ ạ
32Ngôn ngữ lập trình C
I.I. Hàm xuất nhập chuẩn trong thư viện <stdio.h>Hàm xuất nhập chuẩn trong thư viện <stdio.h>
 Hàm đưa kết quả ra màn hìnhHàm đưa kết quả ra màn hình
Cú phápCú pháp:: printf(<dòng điểu khiển>, bt1, bt2,...btk);printf(<dòng điểu khiển>, bt1, bt2,...btk);
Ý nghĩaÝ nghĩa::
bt1,...btk : là k biểu thức cần in kết quả ra màn hìnhbt1,...btk : là k biểu thức cần in kết quả ra màn hình
<dòng điểu khiển> là một hằng xâu ký tự bao gồm 3 loại:<dòng điểu khiển> là một hằng xâu ký tự bao gồm 3 loại:
- Ký tự diều khiển việc xuống dòng tiếp theo ‘n’Ký tự diều khiển việc xuống dòng tiếp theo ‘n’
- Ký tự hiển thị: là ký tự được in ra màn hìnhKý tự hiển thị: là ký tự được in ra màn hình
- Ký tự mô tả cách đưa ra màn hình của các biến(đặc tảKý tự mô tả cách đưa ra màn hình của các biến(đặc tả
của kiểu). Mỗi biểu thức có đặc tả tương ứngcủa kiểu). Mỗi biểu thức có đặc tả tương ứng
Bài 3Bài 3
Các hàm vào ra dữ liệuCác hàm vào ra dữ liệu
33Ngôn ngữ lập trình C
 Đ c t ki u nguyên đ i v i bi u th c có giá tr ki u sặ ả ể ố ớ ể ứ ị ể ốĐ c t ki u nguyên đ i v i bi u th c có giá tr ki u sặ ả ể ố ớ ể ứ ị ể ố
nguyênnguyên %[n]d%[n]d . Trong đó. Trong đó
n là s nguyên xác đ nh đ r ng t i thi u dành cho giáố ị ộ ộ ố ển là s nguyên xác đ nh đ r ng t i thi u dành cho giáố ị ộ ộ ố ể
tr bi u th c in ra màn hìnhị ể ứtr bi u th c in ra màn hìnhị ể ứ
 Đ c t ki u s th cặ ả ể ố ựĐ c t ki u s th cặ ả ể ố ự %[n][.m]f.%[n][.m]f. Trong đóTrong đó
m là s ch s sau d u ph y, n là m t s nguyên xácố ữ ố ấ ẩ ộ ốm là s ch s sau d u ph y, n là m t s nguyên xácố ữ ố ấ ẩ ộ ố
đ nh đ r ng t i thi u trên màn hình cho giá tr c a bi uị ộ ộ ố ể ị ủ ểđ nh đ r ng t i thi u trên màn hình cho giá tr c a bi uị ộ ộ ố ể ị ủ ể
th c:ứth c:ứ
VD:VD:
34Ngôn ngữ lập trình C
 %c : in một ký tự có mã ASCII tương ứng%c : in một ký tự có mã ASCII tương ứng
 %[n]d : in một số nguyên với chiều dài tối thiểu là n%[n]d : in một số nguyên với chiều dài tối thiểu là n
 %[n]ld: in một số nguyên (long int)%[n]ld: in một số nguyên (long int)
 %[n.m]f : in một số thực vối chiều dài n và lấy m số thập%[n.m]f : in một số thực vối chiều dài n và lấy m số thập
phânphân
 %s : in ra chuỗi ký tự%s : in ra chuỗi ký tự
35Ngôn ngữ lập trình C
 Hàm hi n th m t xâu ký t ra màn hìnhể ị ộ ựHàm hi n th m t xâu ký t ra màn hìnhể ị ộ ự
Cú pháp:Cú pháp: int puts(char *s);int puts(char *s);
Ý nghĩa:Ý nghĩa: Hi n th m t xâu ký t s lên màn hình, sau khi inể ị ộ ựHi n th m t xâu ký t s lên màn hình, sau khi inể ị ộ ự
xong thì con tr s đ c chuy n xu ng dòng. Trong đó sỏ ẽ ượ ể ốxong thì con tr s đ c chuy n xu ng dòng. Trong đó sỏ ẽ ượ ể ố
là con tr ki u char tr t i vùng ch a xâu ký tỏ ể ỏ ớ ứ ựlà con tr ki u char tr t i vùng ch a xâu ký tỏ ể ỏ ớ ứ ự
 Hàm đ a m t ký t ra màn hìnhư ộ ựHàm đ a m t ký t ra màn hìnhư ộ ự
Cú phápCú pháp:: int putchar(int ch);int putchar(int ch);
Ý nghĩaÝ nghĩa: Hàm s ký t ch ra màn hình v i ch là mã c a lýẽ ự ớ ủ: Hàm s ký t ch ra màn hình v i ch là mã c a lýẽ ự ớ ủ
t c n inự ầt c n inự ầ
36Ngôn ngữ lập trình C
 Hàm nh n d li u t bàn phímậ ữ ệ ừHàm nh n d li u t bàn phímậ ữ ệ ừ
Cú pháp:Cú pháp: scanf(“dt1dt2..dtk”, &bi n1,ếscanf(“dt1dt2..dtk”, &bi n1,ế
...&bi nk);ế...&bi nk);ế
Ý nghĩa:Ý nghĩa:
 dt1,...dtk là m t h ng xâu ký t đ c t c a k bi nộ ằ ự ặ ả ủ ếdt1,...dtk là m t h ng xâu ký t đ c t c a k bi nộ ằ ự ặ ả ủ ế
 &bi n1, ..&bi nk: là đ a ch c a bi n trong b nhế ế ị ỉ ủ ế ộ ớ&bi n1, ..&bi nk: là đ a ch c a bi n trong b nhế ế ị ỉ ủ ế ộ ớ
 Hàm nh n t bàn phím m t xâu ký tậ ừ ộ ựHàm nh n t bàn phím m t xâu ký tậ ừ ộ ự
Cú pháp:Cú pháp: int *getchar(char *s);int *getchar(char *s);
Ý nghĩa:Ý nghĩa:
 Hàm nh n dãy ký t t bàn phím vào cho đ n khi g pậ ự ừ ế ặHàm nh n dãy ký t t bàn phím vào cho đ n khi g pậ ự ừ ế ặ
ký t ‘n’ thì d ng l iự ừ ạký t ‘n’ thì d ng l iự ừ ạ
 s là con tr tr t i vùng nh s ch a xâu v a nh nỏ ỏ ớ ớ ẽ ứ ừ ậs là con tr tr t i vùng nh s ch a xâu v a nh nỏ ỏ ớ ớ ẽ ứ ừ ậ
37Ngôn ngữ lập trình C
 Hàm nh n m t ký t t bàn phímậ ộ ự ừHàm nh n m t ký t t bàn phímậ ộ ự ừ
Cú phápCú pháp:: getchar(void);getchar(void);
Ý nghĩa:Ý nghĩa: nh n ký t đ c nh p t bàn phímậ ự ượ ậ ừnh n ký t đ c nh p t bàn phímậ ự ượ ậ ừ
38Ngôn ngữ lập trình C
II. Hàm xu t nh p chu n trong th vi n <conio.h>ấ ậ ẩ ư ệII. Hàm xu t nh p chu n trong th vi n <conio.h>ấ ậ ẩ ư ệ
 Hàm getch() và getcheHàm getch() và getche
Cú phápCú pháp :: int getch( void )int getch( void )
int getche( void )int getche( void )
- Hai hàm trên ch nh n m t ký t tr c ti p t bờ ậ ộ ự ự ế ừ ộ- Hai hàm trên ch nh n m t ký t tr c ti p t bờ ậ ộ ự ự ế ừ ộ đ mệđ mệ
bbàn phím. N u bế ộàn phím. N u bế ộ đ m r ng thệ ỗđ m r ng thệ ỗ ì ch . Khi m t phímờ ộì ch . Khi m t phímờ ộ
đ c n thượ ấđ c n thượ ấ ì nh n ngay ký tậ ựì nh n ngay ký tậ ự đó mđó mà không c n ph iầ ảà không c n ph iầ ả
enter nh các hàm nh p t stdio.hư ậ ừenter nh các hàm nh p t stdio.hư ậ ừ
-- Hàm getche() cho hi n ký t lên màn hình còn getch() thìệ ựHàm getche() cho hi n ký t lên màn hình còn getch() thìệ ự
khôngkhông
- K t qu tr v c a hàm là ký tế ả ả ề ủ ự- K t qu tr v c a hàm là ký tế ả ả ề ủ ự đ c n trên bàn phím.ượ ấđ c n trên bàn phím.ượ ấ
39Ngôn ngữ lập trình C
 Xu t ký t có màuấ ựXu t ký t có màuấ ự
Cú phápCú pháp :: cprintfcprintf
Ý nghĩaÝ nghĩa: in ra ký t có màuự: in ra ký t có màuự đ c n đ nh b i hượ ấ ị ởđ c n đ nh b i hượ ấ ị ở àmàm
textcolor.textcolor.
 Nh p ký t có màuậ ựNh p ký t có màuậ ự
Cú pháp:Cú pháp: cscanfcscanf
Ý nghĩa:Ý nghĩa:
+ N i dung nh p có màuộ ậ+ N i dung nh p có màuộ ậ đ c n đ nh b i hượ ấ ị ởđ c n đ nh b i hượ ấ ị ở àmàm
textcolortextcolor
+ Nh n n i dung tr c ti p t bậ ộ ự ế ừ ộ+ Nh n n i dung tr c ti p t bậ ộ ự ế ừ ộ đ m bệđ m bệ àn phím. Vìàn phím. Vì
v y v i hàm cscanf ta cũng ph i kh ký t n trongậ ớ ả ử ựv y v i hàm cscanf ta cũng ph i kh ký t n trongậ ớ ả ử ự
bộbộ đ m b ng %*c ho c b ng hệ ằ ặ ằđ m b ng %*c ho c b ng hệ ằ ặ ằ àm getch()àm getch()
40Ngôn ngữ lập trình C
III.M t s hàm thao tác trên màn hìnhộ ốIII.M t s hàm thao tác trên màn hìnhộ ố
 Hàm xóa màn hình:Hàm xóa màn hình: clrscr();clrscr();
Có tác d ng xóa toàn b m àn hình và sau khi xóa conụ ộCó tác d ng xóa toàn b m àn hình và sau khi xóa conụ ộ
tr s v trí góc phía bên trái.ỏ ẽ ở ịtr s v trí góc phía bên trái.ỏ ẽ ở ị
 HàmHàm đ t t a đ con tr :ặ ọ ộ ỏđ t t a đ con tr :ặ ọ ộ ỏ gotoxy(int x, int y);gotoxy(int x, int y);
Đ t con tr t i v trí x, yặ ỏ ạ ịĐ t con tr t i v trí x, yặ ỏ ạ ị
 HàmHàm đ t m u n n textbackgroundặ ầ ềđ t m u n n textbackgroundặ ầ ề
void textbackground(int color);void textbackground(int color);
Đ t m u n nặ ầ ềĐ t m u n nặ ầ ề Color là m t bi u th c nguyên có giáộ ể ứColor là m t bi u th c nguyên có giáộ ể ứ
tr t 0ị ừtr t 0ị ừ đ n 7 t ng ng v i m t trong 8 h ng sế ươ ứ ớ ộ ằ ốđ n 7 t ng ng v i m t trong 8 h ng sế ươ ứ ớ ộ ằ ố
mmàuàu đ u tiầđ u tiầ ên c a b ng m u vủ ả ầên c a b ng m u vủ ả ầ ăn b n.ảăn b n.ả
41Ngôn ngữ lập trình C
 HàmHàm đ t m u ch textcolorặ ầ ữđ t m u ch textcolorặ ầ ữ
void textcolor(int newColor);void textcolor(int newColor);
L a ch n mự ọL a ch n mự ọ àu ký t m i newColor.Trong đó newColor làự ớàu ký t m i newColor.Trong đó newColor làự ớ
m t bi u th c nguyên có giá tr t 0ộ ể ứ ị ừm t bi u th c nguyên có giá tr t 0ộ ể ứ ị ừ đ n 15 t ng ngế ươ ứđ n 15 t ng ngế ươ ứ
v i m t trong các h ng s mớ ộ ằ ốv i m t trong các h ng s mớ ộ ằ ố àu c a b ng m u vủ ả ầàu c a b ng m u vủ ả ầ ăn b n.ảăn b n.ả
42Ngôn ngữ lập trình C
Bài 4: Cấu trúc điều khiểnBài 4: Cấu trúc điều khiển
 CCâu l nh, kh i l nhệ ố ệâu l nh, kh i l nhệ ố ệ
 CCâu l nhệâu l nhệ : mỗi c: mỗi câuâu lệnh thực hiện một công việc vàlệnh thực hiện một công việc và
được kết thúc bởi dấu ;được kết thúc bởi dấu ;
 KhKh i l nhố ệi l nhố ệ : là tập hợp các c: là tập hợp các câuâu lệnh bắt đầu bằng dấulệnh bắt đầu bằng dấu
“{“ và kết thúc bằng dấu “}”“{“ và kết thúc bằng dấu “}”
43Ngôn ngữ lập trình C
I. C u trúc đi u khi n ifấ ề ểI. C u trúc đi u khi n ifấ ề ể
11. C u trúc if d ng 1ấ ạ. C u trúc if d ng 1ấ ạ
Cú pháp:Cú pháp: if (bt)if (bt) s ;s ;
Ý nghĩa: bt là bi u th c lôgic, s là l nh đ n ho c l nhể ứ ệ ơ ặ ệÝ nghĩa: bt là bi u th c lôgic, s là l nh đ n ho c l nhể ứ ệ ơ ặ ệ
ph c. n u bt nhân giá tr true thì th c hi n s, ng c l i sứ ế ị ự ệ ượ ạph c. n u bt nhân giá tr true thì th c hi n s, ng c l i sứ ế ị ự ệ ượ ạ
đ c b quaượ ỏđ c b quaượ ỏ
2. C u trúc if d ng 2ấ ạ2. C u trúc if d ng 2ấ ạ
Cú pháp:Cú pháp: if(bt)if(bt) s;s;
elseelse s1 ;s1 ;
Ý nghĩa: bt là bi u th c lôgic, n u bt nh n giá tr true thìể ứ ế ậ ịÝ nghĩa: bt là bi u th c lôgic, n u bt nh n giá tr true thìể ứ ế ậ ị
th c hi n s b qua s1, ng c l i n u bt nh n giá tr flaseự ệ ỏ ượ ạ ế ậ ịth c hi n s b qua s1, ng c l i n u bt nh n giá tr flaseự ệ ỏ ượ ạ ế ậ ị
thì th c hi n s1 b qua s(s và s1 có th là l nh đ n ho cự ệ ỏ ể ệ ơ ặthì th c hi n s1 b qua s(s và s1 có th là l nh đ n ho cự ệ ỏ ể ệ ơ ặ
l nh ph c)ệ ứl nh ph c)ệ ứ
44Ngôn ngữ lập trình C
 Chú ý : trong C cho phép s d ng các c u trúc if l ngử ụ ấ ồChú ý : trong C cho phép s d ng các c u trúc if l ngử ụ ấ ồ
nhau đ gi i quy t bài toánể ả ếnhau đ gi i quy t bài toánể ả ế
3. Bài t pậ3. Bài t pậ
-- Nh p 2 s th c a, b t bàn phím. Tìm và in ra màn hìnhậ ố ự ừNh p 2 s th c a, b t bàn phím. Tìm và in ra màn hìnhậ ố ự ừ
s l n nh t và s bé nh tố ớ ấ ố ấs l n nh t và s bé nh tố ớ ấ ố ấ
- Gi i h ph ng trình b c nh t hai n sả ệ ươ ậ ấ ẩ ốGi i h ph ng trình b c nh t hai n sả ệ ươ ậ ấ ẩ ố
ax + by = cax + by = c
dx + ey = fdx + ey = f
45Ngôn ngữ lập trình C
II. C u trúc r nhánh switchấ ẽII. C u trúc r nhánh switchấ ẽ
1. C u trúc t ng quátấ ổ1. C u trúc t ng quátấ ổ
Cú pháp:Cú pháp: switch (bt)switch (bt)
{{ case n1 : s1case n1 : s1
case n2 : s2case n2 : s2
........
case nk : skcase nk : sk
[default : s(k+1 )][default : s(k+1 )]
}}
46Ngôn ngữ lập trình C
Ý nghĩa:Ý nghĩa:
 Bt: là bi u th c toán h c có giá tr ki u nguyênể ứ ọ ị ểBt: là bi u th c toán h c có giá tr ki u nguyênể ứ ọ ị ể
 Ni(i=1..k): là các s ki u nguyên, ki u h ng ký t , ho cố ể ể ằ ự ặNi(i=1..k): là các s ki u nguyên, ki u h ng ký t , ho cố ể ể ằ ự ặ
bi u th cể ứbi u th cể ứ
 Si(i=1..k): là các l nh đ n ho c l nh ph cệ ơ ặ ệ ứSi(i=1..k): là các l nh đ n ho c l nh ph cệ ơ ặ ệ ứ
 [default : s(k+1 )] : là ph n tuỳ ch n có th có ho cầ ọ ể ặ[default : s(k+1 )] : là ph n tuỳ ch n có th có ho cầ ọ ể ặ
khôngkhông
47Ngôn ngữ lập trình C
Ho t đ ng: l nh switch ph thu c vào giá tr c a bi uạ ộ ệ ụ ộ ị ủ ểHo t đ ng: l nh switch ph thu c vào giá tr c a bi uạ ộ ệ ụ ộ ị ủ ể
th c bt vi t sau switch, n u:ứ ế ếth c bt vi t sau switch, n u:ứ ế ế
 Giá tr bt = ni thì th c hi n câu l nh sau case ni;ị ự ệ ệGiá tr bt = ni thì th c hi n câu l nh sau case ni;ị ự ệ ệ
 Khi giá tr bi u th c khác t t c các ni thì th c hi n câuị ể ứ ấ ả ự ệKhi giá tr bi u th c khác t t c các ni thì th c hi n câuị ể ứ ấ ả ự ệ
l nh sau default n u có, ho c thoát kh i câu l nhệ ế ặ ỏ ệl nh sau default n u có, ho c thoát kh i câu l nhệ ế ặ ỏ ệ
switch.switch.
 Khi ch ng trìnhươKhi ch ng trìnhươ đđã th c hi n xong câu l nh c a caseự ệ ệ ủã th c hi n xong câu l nh c a caseự ệ ệ ủ
ni nàoni nào đó thđó thì nó s th c hi n luôn các l nh thu c caseẽ ự ệ ệ ộì nó s th c hi n luôn các l nh thu c caseẽ ự ệ ệ ộ
bên d i nó mà không xét l iướ ạbên d i nó mà không xét l iướ ạ đi u ki n ( do các ni cònề ệđi u ki n ( do các ni cònề ệ
đ c xem nh các nhượ ưđ c xem nh các nhượ ư ãn). Vì v y,ậãn). Vì v y,ậ đ ch ng trể ươđ ch ng trể ươ ình thoátình thoát
kh i l nh switch sau khi th c hi n xong m t tr ngỏ ệ ự ệ ộ ườkh i l nh switch sau khi th c hi n xong m t tr ngỏ ệ ự ệ ộ ườ
h p, ta dùng l nh break.ợ ệh p, ta dùng l nh break.ợ ệ
48Ngôn ngữ lập trình C
3. Bài t pậ3. Bài t pậ
-- Vi t ch ng trình nh p vào t bàn phím m t mãế ươ ậ ừ ộVi t ch ng trình nh p vào t bàn phím m t mãế ươ ậ ừ ộ
s nguyên và đ a ra đánh gía trình đ theo yêu c u:ố ư ộ ầs nguyên và đ a ra đánh gía trình đ theo yêu c u:ố ư ộ ầ
 1:1: trình đ s c pộ ơ ấtrình đ s c pộ ơ ấ
 2 : trình đ trung c pộ ấ2 : trình đ trung c pộ ấ
 3: trình đ Đ i h cộ ạ ọ3: trình đ Đ i h cộ ạ ọ
 4: trình đ Cao h cộ ọ4: trình đ Cao h cộ ọ
 5: trình đ Ti n sộ ế ỹ5: trình đ Ti n sộ ế ỹ
 Các s khác: Không xác đ nhố ịCác s khác: Không xác đ nhố ị
-- Cho m t s t nhiên, in ra màn hình tên g i c a sộ ố ự ọ ủ ốCho m t s t nhiên, in ra màn hình tên g i c a sộ ố ự ọ ủ ố
lên màn hình(Bài s 12)ốlên màn hình(Bài s 12)ố
49Ngôn ngữ lập trình C
III. Câu l nh l p forệ ặIII. Câu l nh l p forệ ặ
1. Cú pháp:1. Cú pháp:
for(<bt1> ; <bt2> ; <bt3>)for(<bt1> ; <bt2> ; <bt3>) S ;S ;
Ý nghĩa:Ý nghĩa:
 S là l nh đ n ho c l nh ph cệ ơ ặ ệ ứS là l nh đ n ho c l nh ph cệ ơ ặ ệ ứ
 bt1 : th ng là m t l nh gán kh i t o cho bi n đi uườ ộ ệ ở ạ ế ềbt1 : th ng là m t l nh gán kh i t o cho bi n đi uườ ộ ệ ở ạ ế ề
khi nểkhi nể
 bt2: là bi u th c logic, giá tr c a bi u th c lôgic nàyể ứ ị ủ ể ứbt2: là bi u th c logic, giá tr c a bi u th c lôgic nàyể ứ ị ủ ể ứ
quy t đ nh vòng l p ti p t c hay k t thúcế ị ặ ế ụ ếquy t đ nh vòng l p ti p t c hay k t thúcế ị ặ ế ụ ế
 bt3: th ng là l nh gán có tác d ng làm thay đ i giá trườ ệ ụ ổ ịbt3: th ng là l nh gán có tác d ng làm thay đ i giá trườ ệ ụ ổ ị
c a bi n đi u khi nủ ế ề ểc a bi n đi u khi nủ ế ề ể
50Ngôn ngữ lập trình C
Hoạt động:Hoạt động:
 Bước 1: Thực hiện bt1Bước 1: Thực hiện bt1
 Bước 2: Tính toán, xác định giá trị của bt2Bước 2: Tính toán, xác định giá trị của bt2
 Bước 3: Nếu bt2 có giá trị false thì thoát khỏi vòng lặp.Bước 3: Nếu bt2 có giá trị false thì thoát khỏi vòng lặp.
Ngược lại bt2 có giá trị true thì s được thực hiệnNgược lại bt2 có giá trị true thì s được thực hiện
 Bước 4: sau khi thực hiện s thực hiện bt3 và quay lạiBước 4: sau khi thực hiện s thực hiện bt3 và quay lại
bước 2bước 2
Nhận xét:Nhận xét:
 <t1> chỉ được thực hiện duy nhất một lần khi bắt đầu<t1> chỉ được thực hiện duy nhất một lần khi bắt đầu
vòng lặpvòng lặp
 <bt2>, <bt3> và S có thể được tính toán và thực hiện lặp<bt2>, <bt3> và S có thể được tính toán và thực hiện lặp
nhiều lầnnhiều lần
51Ngôn ngữ lập trình C
Chú ý khi s d ng vòng l p forử ụ ặChú ý khi s d ng vòng l p forử ụ ặ
 <bt1>, <bt2>, <bt3> đ u có th v ng m t nh ng v nề ể ắ ặ ư ẫ<bt1>, <bt2>, <bt3> đ u có th v ng m t nh ng v nề ể ắ ặ ư ẫ
ph i gi l i d u ( ; )ả ữ ạ ấph i gi l i d u ( ; )ả ữ ạ ấ
 Tr ng h p đ c bi t <bt2> không có thì luôn đ c xemườ ợ ặ ệ ượTr ng h p đ c bi t <bt2> không có thì luôn đ c xemườ ợ ặ ệ ượ
là nh n giá tr true, mu n thoát kh i vòng l p ph i dùngậ ị ố ỏ ặ ảlà nh n giá tr true, mu n thoát kh i vòng l p ph i dùngậ ị ố ỏ ặ ả
l nh break, goto ho c returnệ ặl nh break, goto ho c returnệ ặ
 Có th dùng c u trúc các vòng for l ng nhauể ấ ồCó th dùng c u trúc các vòng for l ng nhauể ấ ồ
 Khi g p l nh break thì ch ng trình s thoát kh i vòngặ ệ ươ ẽ ỏKhi g p l nh break thì ch ng trình s thoát kh i vòngặ ệ ươ ẽ ỏ
for sâu nh t còn ch a l nh breakấ ứ ệfor sâu nh t còn ch a l nh breakấ ứ ệ
 Trong vòng for có th s d ng l nh continue đ chuy nể ử ụ ệ ể ểTrong vòng for có th s d ng l nh continue đ chuy nể ử ụ ệ ể ể
t i chu trình m i c a vòng l pớ ớ ủ ặt i chu trình m i c a vòng l pớ ớ ủ ặ
52Ngôn ngữ lập trình C
2.2. Bài t pậBài t pậ
 Vi t ch ng trình tính t ng c a n sế ươ ổ ủ ốVi t ch ng trình tính t ng c a n sế ươ ổ ủ ố đ u tiầđ u tiầ ên c a dãy sủ ốên c a dãy sủ ố
sau:sau:
S = 1+1/2+1/3+1/4+...+1/n.S = 1+1/2+1/3+1/4+...+1/n.
 Vi t ch ng trình tìm t t c các s nguyên có ba ch sế ươ ấ ả ố ữ ốVi t ch ng trình tìm t t c các s nguyên có ba ch sế ươ ấ ả ố ữ ố
sao cho t ng tam th a c a ba ch s hàng trổ ừ ủ ữ ốsao cho t ng tam th a c a ba ch s hàng trổ ừ ủ ữ ố ăm, hăm, hàngàng
ch c, hàngụch c, hàngụ đ n vơđ n vơ s b ng s nguyênị ẽ ằ ốs b ng s nguyênị ẽ ằ ố đó. Ví d :ụđó. Ví d :ụ
1133
+5+533
+3+333
=153=153
53Ngôn ngữ lập trình C
IV. Câu l nh whileệIV. Câu l nh whileệ
1.1. Cú pháp :Cú pháp :
While (bt)While (bt)
S;S;
Ý nghĩaÝ nghĩa: bt là bi u th c lôgic, S là m t l nh ho c m tể ứ ộ ệ ặ ộ: bt là bi u th c lôgic, S là m t l nh ho c m tể ứ ộ ệ ặ ộ
dãy l nhệdãy l nhệ
Ho t đ ngạ ộHo t đ ngạ ộ
- Xác đ nh giá tr c a bt. N u giá tr c a bt= true(<>0) thìị ị ủ ế ị ủXác đ nh giá tr c a bt. N u giá tr c a bt= true(<>0) thìị ị ủ ế ị ủ
chuy n sang b c 2, ng c l i thì thoát kh i vòng l pể ướ ượ ạ ỏ ặchuy n sang b c 2, ng c l i thì thoát kh i vòng l pể ướ ượ ạ ỏ ặ
- Th c hi n S sau đó quay v b c 1(L nh S có thự ệ ề ướ ệ ểTh c hi n S sau đó quay v b c 1(L nh S có thự ệ ề ướ ệ ể
đ c th c hi n nhi u l n ho c không đ c th c hi nượ ự ệ ề ầ ặ ượ ự ệđ c th c hi n nhi u l n ho c không đ c th c hi nượ ự ệ ề ầ ặ ượ ự ệ
l n nào n u bt =false ngay t đ u)ầ ế ừ ầl n nào n u bt =false ngay t đ u)ầ ế ừ ầ
54Ngôn ngữ lập trình C
Chú ý : trong câu l nh l p while ta có th dùng câu l nhệ ặ ể ệChú ý : trong câu l nh l p while ta có th dùng câu l nhệ ặ ể ệ
break đ thoát kh i vòng l p theo ý mu nể ỏ ặ ốbreak đ thoát kh i vòng l p theo ý mu nể ỏ ặ ố
2. Bài t p :ậ2. Bài t p :ậ
- Nh p hai s nguyên t bàn phím, tìm và in ra màn hìnhậ ố ừNh p hai s nguyên t bàn phím, tìm và in ra màn hìnhậ ố ừ
c s chung l n nh t c a hai sướ ố ơ ấ ủ ốc s chung l n nh t c a hai sướ ố ơ ấ ủ ố
- Tìm hình ch nh t có di n tích l n nh t khi bi t chu viữ ậ ệ ớ ấ ếTìm hình ch nh t có di n tích l n nh t khi bi t chu viữ ậ ệ ớ ấ ế
c a nó(bài s 25)ủ ốc a nó(bài s 25)ủ ố
55Ngôn ngữ lập trình C
V. Câu l nh do.. whileệV. Câu l nh do.. whileệ
1.1. Cú phápCú pháp
dodo SS
while (bt);while (bt);
Ý nghĩa: S là m t câu l nh đ n ho c ph c, bt là bi uộ ệ ơ ặ ứ ểÝ nghĩa: S là m t câu l nh đ n ho c ph c, bt là bi uộ ệ ơ ặ ứ ể
th c lôgicứth c lôgicứ
Ho t đ ng:ạ ộHo t đ ng:ạ ộ
- (1) Th c hi n l nh Sự ệ ệ(1) Th c hi n l nh Sự ệ ệ
- (2) Xác đ nh giá tr c a bt. N u giá tr c a bt = true thìị ị ủ ế ị ủ(2) Xác đ nh giá tr c a bt. N u giá tr c a bt = true thìị ị ủ ế ị ủ
chuy n sang b c (1), ng c l i thì thoát kh i vòngể ướ ượ ạ ỏchuy n sang b c (1), ng c l i thì thoát kh i vòngể ướ ượ ạ ỏ
l pặl pặ
- L nh S luôn đ c th c hi n ít nh t 1 l n trong câuệ ượ ự ệ ấ ầL nh S luôn đ c th c hi n ít nh t 1 l n trong câuệ ượ ự ệ ấ ầ
l nhệl nhệ
56Ngôn ngữ lập trình C
Bài 5: Dữ liệu kiểu mảngBài 5: Dữ liệu kiểu mảng
1.1. Khái niệm:Khái niệm:
 Mảng được hiểu là một tập hợp các giá trị cóMảng được hiểu là một tập hợp các giá trị có
cùng kiểu dữ liệu nằm liên tiếp nhau trong bộcùng kiểu dữ liệu nằm liên tiếp nhau trong bộ
nhớ máy tínhnhớ máy tính
 Mảng được coi như một biến mảng và tênMảng được coi như một biến mảng và tên
mảng được đặt theo quy tắc đặt tên biếnmảng được đặt theo quy tắc đặt tên biến
 Mảng có những thành phần sau:Mảng có những thành phần sau:
 Kiểu dữ liệu của các phần tử trong mảngKiểu dữ liệu của các phần tử trong mảng
 Tên mảngTên mảng
 Số chiều và kích thước của mỗi chiềuSố chiều và kích thước của mỗi chiều
57Ngôn ngữ lập trình C
2. Cách khai báo bi n m ngế ả2. Cách khai báo bi n m ngế ả
<ki u_dl> <tên_m ng><ds các chi u c a m ng>ể ả ề ủ ả<ki u_dl> <tên_m ng><ds các chi u c a m ng>ể ả ề ủ ả
VD:VD:
int A[10];int A[10];
//m ng 1 chi u A g m 10 ph n t ki u s nguyênả ề ồ ầ ử ể ố//m ng 1 chi u A g m 10 ph n t ki u s nguyênả ề ồ ầ ử ể ố
float B[2] [3];float B[2] [3];
// M ng 2 chi u B g m 2 hàng và 3 c t, các ph n t cóả ề ồ ộ ầ ử// M ng 2 chi u B g m 2 hàng và 3 c t, các ph n t cóả ề ồ ộ ầ ử
ki u s th cể ố ựki u s th cể ố ự
58Ngôn ngữ lập trình C
3. Cách t ch c và truy xu t đ n ph n t m ngổ ứ ấ ế ầ ử ả3. Cách t ch c và truy xu t đ n ph n t m ngổ ứ ấ ế ầ ử ả
 Ph n t c a m ng đ c xác đ nh thông qua ch s .ầ ử ủ ả ượ ị ỉ ốPh n t c a m ng đ c xác đ nh thông qua ch s .ầ ử ủ ả ượ ị ỉ ố
Ch s c a ph n t trong m ng luôn là m t s nguyênỉ ố ủ ầ ử ả ộ ốCh s c a ph n t trong m ng luôn là m t s nguyênỉ ố ủ ầ ử ả ộ ố
không v t qua kích th c c a m ngượ ướ ủ ảkhông v t qua kích th c c a m ngượ ướ ủ ả
 Các ph n t c a m ng đ c s p x p li n nhau trongầ ử ủ ả ượ ắ ế ềCác ph n t c a m ng đ c s p x p li n nhau trongầ ử ủ ả ượ ắ ế ề
b nh c a máy tính và ch cho phép truy c p đ n đ aộ ớ ủ ỉ ậ ế ịb nh c a máy tính và ch cho phép truy c p đ n đ aộ ớ ủ ỉ ậ ế ị
ch tr c ti p c a ph n t đ i v i m ng m t chi u.ỉ ự ế ủ ầ ử ố ớ ả ộ ềch tr c ti p c a ph n t đ i v i m ng m t chi u.ỉ ự ế ủ ầ ử ố ớ ả ộ ề
Cách truy c p theo đ a chậ ị ỉCách truy c p theo đ a chậ ị ỉ
&tên_bi n[i]ế&tên_bi n[i]ế
trong đó i là ch s c a ph n tỉ ố ủ ầ ửtrong đó i là ch s c a ph n tỉ ố ủ ầ ử
 VD:VD: a= &a[0]a= &a[0]
//Tên m ng ch t i đ a ch ph n t đ u tiên c a m ngả ỉ ớ ị ỉ ầ ử ầ ủ ả//Tên m ng ch t i đ a ch ph n t đ u tiên c a m ngả ỉ ớ ị ỉ ầ ử ầ ủ ả
59Ngôn ngữ lập trình C
4. Cách xu t nh p d li u trên m ngấ ậ ữ ệ ả4. Cách xu t nh p d li u trên m ngấ ậ ữ ệ ả
- Nh p xu t tr c ti p ng d ng cho m ng m t chi u vàậ ấ ự ế ứ ụ ả ộ ềNh p xu t tr c ti p ng d ng cho m ng m t chi u vàậ ấ ự ế ứ ụ ả ộ ề
m ng hai chi u có ph n t ki u int thông qua đ a chả ề ầ ử ể ị ỉm ng hai chi u có ph n t ki u int thông qua đ a chả ề ầ ử ể ị ỉ
- Nh p d li u cho m ngậ ữ ệ ảNh p d li u cho m ngậ ữ ệ ả
for( i=0;i<5;i++) {for( i=0;i<5;i++) {
printf(“Phan tu thu %d= ”,i);printf(“Phan tu thu %d= ”,i);
scanf(“%d”, &a[i]);scanf(“%d”, &a[i]);
}}
-- In các ph n t c a m ng ra màn hìnhầ ử ủ ảIn các ph n t c a m ng ra màn hìnhầ ử ủ ả
for(i=0;i<n;i++) printf(“%6d”,a[i])for(i=0;i<n;i++) printf(“%6d”,a[i])
60Ngôn ngữ lập trình C
- Nh p xu t d li u gián ti p thông qua m t bi n trungậ ấ ữ ệ ế ộ ếNh p xu t d li u gián ti p thông qua m t bi n trungậ ấ ữ ệ ế ộ ế
gian đ i v i m ng m t chi u và m ng đa chi uố ớ ả ộ ề ả ềgian đ i v i m ng m t chi u và m ng đa chi uố ớ ả ộ ề ả ề
for(i=0;i<2;i++)for(i=0;i<2;i++)
for(j=0;j<3;j++) {for(j=0;j<3;j++) {
printf(“a[%d,%d]”, i, j);printf(“a[%d,%d]”, i, j);
scantf(“%f”,&temp);scantf(“%f”,&temp);
a[i] [j] = temp;a[i] [j] = temp;
}}
- Bài t pậBài t pậ
- Nh p vào t bàn phím n s nguyên, tìm và in ra mànậ ừ ốNh p vào t bàn phím n s nguyên, tìm và in ra mànậ ừ ố
hình s nguyên l n nh t và s nguyên nh nh tố ớ ấ ố ỏ ấhình s nguyên l n nh t và s nguyên nh nh tố ớ ấ ố ỏ ấ
- Nh p ma tr n các s th c kích th c n hàng và m c t.ậ ậ ố ự ướ ộNh p ma tr n các s th c kích th c n hàng và m c t.ậ ậ ố ự ướ ộ
Tìm và in ra s th c l n nh t trong ma tr nố ự ớ ấ ậTìm và in ra s th c l n nh t trong ma tr nố ự ớ ấ ậ
61Ngôn ngữ lập trình C
Bài 6: Con trỏBài 6: Con trỏ
1.1. Khái ni m con tr và đ a chệ ỏ ị ỉKhái ni m con tr và đ a chệ ỏ ị ỉ
- Đ a ch : D a vào ki u d li u khi khai báo bi n máy sị ỉ ự ể ữ ệ ế ẽĐ a ch : D a vào ki u d li u khi khai báo bi n máy sị ỉ ự ể ữ ệ ế ẽ
c p phát cho bi n m t đ a ch đ l u tr bi n đó trênấ ế ộ ị ỉ ể ư ữ ếc p phát cho bi n m t đ a ch đ l u tr bi n đó trênấ ế ộ ị ỉ ể ư ữ ế
vùng nh . M i bi n có ki u khác nhau thì đ c l u vàoớ ỗ ế ể ượ ưvùng nh . M i bi n có ki u khác nhau thì đ c l u vàoớ ỗ ế ể ượ ư
các đ a ch khác nhauị ỉcác đ a ch khác nhauị ỉ
- Con tr là m t bi n dùng đ ch a đ a ch . M i lo i đ aỏ ộ ế ể ứ ị ỉ ỗ ạ ịCon tr là m t bi n dùng đ ch a đ a ch . M i lo i đ aỏ ộ ế ể ứ ị ỉ ỗ ạ ị
ch thì có lo i con tr t ng ng. Tr c khi s d ngỉ ạ ỏ ươ ứ ướ ử ụch thì có lo i con tr t ng ng. Tr c khi s d ngỉ ạ ỏ ươ ứ ướ ử ụ
bi n con tr ta ph i khai báo tr c khi s d ngế ỏ ả ướ ử ụbi n con tr ta ph i khai báo tr c khi s d ngế ỏ ả ướ ử ụ
- Khai báo:Khai báo: <ki u_DL> * <tên_bi n_con_tr >;ể ế ỏ<ki u_DL> * <tên_bi n_con_tr >;ể ế ỏ
- VD1:VD1: int x, y, *p, *c;int x, y, *p, *c;
x, y là hai bi n ki u nguyên, p, c là hai bi n con tr ki uế ể ế ỏ ểx, y là hai bi n ki u nguyên, p, c là hai bi n con tr ki uế ể ế ỏ ể
nguyênnguyên
62Ngôn ngữ lập trình C
VD2:VD2: float *t, *d ;float *t, *d ;
//Khai báo bi n con tr t và d có ki u th cế ỏ ể ự//Khai báo bi n con tr t và d có ki u th cế ỏ ể ự
Bi n con tr đ c dùng theo hai tr ng h p sau:ế ỏ ượ ườ ợBi n con tr đ c dùng theo hai tr ng h p sau:ế ỏ ượ ườ ợ
 Tên con tr ch đ nỏ ỉ ếTên con tr ch đ nỏ ỉ ế đ a ch c a bi n đ c l u trong conị ỉ ủ ế ượ ưđ a ch c a bi n đ c l u trong conị ỉ ủ ế ượ ư
tr :ỏtr :ỏ
float a,*p,*q;float a,*p,*q;
p=&a; /* l u đ a ch c a bi n a vào con tr p */ư ị ỉ ủ ế ỏp=&a; /* l u đ a ch c a bi n a vào con tr p */ư ị ỉ ủ ế ỏ
q= p; /* l u đ a ch trong p vào con tr q*/ư ị ỉ ỏq= p; /* l u đ a ch trong p vào con tr q*/ư ị ỉ ỏ
63Ngôn ngữ lập trình C
 D ng khai báo c a con tr ch đ n giá tr l u t i vùngạ ủ ỏ ỉ ế ị ư ạD ng khai báo c a con tr ch đ n giá tr l u t i vùngạ ủ ỏ ỉ ế ị ư ạ
nh mà con tr tr t i.ớ ỏ ỏ ớnh mà con tr tr t i.ớ ỏ ỏ ớ
VD:VD: float x=5, y , z=20, *px, *pz;,*py;float x=5, y , z=20, *px, *pz;,*py;
px=& x; /* khi đó *px = x =5*/px=& x; /* khi đó *px = x =5*/
pz=&z; /* *pz=z=20*/pz=&z; /* *pz=z=20*/
khi đó ba bi u th c sau là t ng đ ng:ể ứ ươ ươkhi đó ba bi u th c sau là t ng đ ng:ể ứ ươ ươ
y=3*x+z;y=3*x+z; *py=3*x+z;*py=3*x+z; *py=3*(*px)+*pz;*py=3*(*px)+*pz;
64Ngôn ngữ lập trình C
2. Con tr và m ng m t chi uỏ ả ộ ề2. Con tr và m ng m t chi uỏ ả ộ ề
Các ph n t c a m ng có th đ c xác đ nhầ ử ủ ả ể ượ ịCác ph n t c a m ng có th đ c xác đ nhầ ử ủ ả ể ượ ị
thông qua con tr . Ta có khai báo :ỏthông qua con tr . Ta có khai báo :ỏ float a[10];float a[10];
//Khai báo m ng g m 10 ph n t ki u th cả ồ ầ ử ể ự//Khai báo m ng g m 10 ph n t ki u th cả ồ ầ ử ể ự
Ta có tên m ng chính là m t h ng đ a ch tr t iả ộ ằ ị ỉ ỏ ớTa có tên m ng chính là m t h ng đ a ch tr t iả ộ ằ ị ỉ ỏ ớ
đ a ch ph n t đ u tiên c a m ng vàị ỉ ầ ử ầ ủ ảđ a ch ph n t đ u tiên c a m ng vàị ỉ ầ ử ầ ủ ả
aa t ng đ ng v i &a[0]ươ ươ ớt ng đ ng v i &a[0]ươ ươ ớ
a+ia+i t ng đ ng v i &a[i]ươ ươ ớt ng đ ng v i &a[i]ươ ươ ớ
*(a+i) t ng đ ng v iươ ươ ớ*(a+i) t ng đ ng v iươ ươ ớ a[i]a[i]
V yậV yậ
a[k] a[k+1]a[k-1]
pa pa +ipa - i
65Ngôn ngữ lập trình C
 Các cách vi t a[i], *(a+i), *(p+i), p[i] là t ng đ ngế ươ ươCác cách vi t a[i], *(a+i), *(p+i), p[i] là t ng đ ngế ươ ươ
nhaunhau
 VD: Nh p t bàn phím các ph n t c a m ng và tínhậ ừ ầ ử ủ ảVD: Nh p t bàn phím các ph n t c a m ng và tínhậ ừ ầ ử ủ ả
t ng các ph n t đóổ ầ ửt ng các ph n t đóổ ầ ử
66Ngôn ngữ lập trình C
#include<stdio.h>#include<stdio.h>
#include<stdio.h>#include<stdio.h>
void main()void main()
{{ float a[5], s ; int i;float a[5], s ; int i;
for(i=0;i<5;i++) {for(i=0;i<5;i++) {
printf(“na[%d]= ”,i); scanf(“%f”,&a[i]); }printf(“na[%d]= ”,i); scanf(“%f”,&a[i]); }
s=0;s=0;
for (i=0;i<5;i++)for (i=0;i<5;i++) s+=a[i];s+=a[i];
printf(“n Tong =%8.2f”,s);printf(“n Tong =%8.2f”,s);
getch();getch();
}}
Ví dụ: Tro1Ví dụ: Tro1
67Ngôn ngữ lập trình C
3. Con trỏ với mảng nhiều chiều3. Con trỏ với mảng nhiều chiều
Phép toán lấyPhép toán lấy địa chỉ nói chung không dđịa chỉ nói chung không dùngùng được đốiđược đối
với các thvới các thành phần của mảng nhiều chiều (trừ trườngành phần của mảng nhiều chiều (trừ trường
hợp mảng hai chiều các số nguyên).hợp mảng hai chiều các số nguyên).
Ðể tính toán địa chỉ của thành phần a[i][j] chúng ta sửÐể tính toán địa chỉ của thành phần a[i][j] chúng ta sử
dụng công thức sau :dụng công thức sau :
(float *)a+i*n+j.(float *)a+i*n+j.
a là một hằng con trỏ trỏ đến các dòng của một ma trâna là một hằng con trỏ trỏ đến các dòng của một ma trân
hai chiều, vì vậyhai chiều, vì vậy
a trỏ đến dòng thứ nhấta trỏ đến dòng thứ nhất
a+1 trỏ đến dòng thứ haia+1 trỏ đến dòng thứ hai
a+2 trỏ đến dòng thứ baa+2 trỏ đến dòng thứ ba
68Ngôn ngữ lập trình C
 Ðể tính toánÐể tính toán được địa chỉ của phần tử ở dđược địa chỉ của phần tử ở dòng i cột jòng i cột j
chúng ta phải dùng phép chuyểnchúng ta phải dùng phép chuyển đổi kiểu bắt buộc đốiđổi kiểu bắt buộc đối
với a: (float * )avới a: (float * )a
a là con trỏ trỏ đến thành phần a[0][0] của ma trận.a là con trỏ trỏ đến thành phần a[0][0] của ma trận.
a[i][j] sẽ có địa chỉ là (float *a) +i*n+ja[i][j] sẽ có địa chỉ là (float *a) +i*n+j
Xét VD nhập giá trị của ma trận hai chiều:Xét VD nhập giá trị của ma trận hai chiều: Tro2Tro2
69Ngôn ngữ lập trình C
#include <stdio.h>#include <stdio.h>
#include <stdio.h>#include <stdio.h>
void main()void main()
{{ float a[10][20];float a[10][20]; int i,j,n;int i,j,n;
printf("Nhap vao kich thuoc ma tran n=");printf("Nhap vao kich thuoc ma tran n=");
scanf("%n",&n);scanf("%n",&n);
for(i=0;i<n;i++)for(i=0;i<n;i++)
for(j=0;j<n;j++)for(j=0;j<n;j++)
{{ printf("a[%d][%d] = ",i,j);printf("a[%d][%d] = ",i,j);
scanf("%f",(float *)a+i*20+j);scanf("%f",(float *)a+i*20+j);
}}
getch();getch();
}}
70Ngôn ngữ lập trình C
4. Phép toán trên con trỏ4. Phép toán trên con trỏ
- Phép gán: chỉ nên thực hiện trên các con trỏ có cùngPhép gán: chỉ nên thực hiện trên các con trỏ có cùng
kiểu, khi thực hiện trên con trỏ phải thực hiện phép épkiểu, khi thực hiện trên con trỏ phải thực hiện phép ép
kiểu:kiểu:
Vd: int x;Vd: int x;
char *p;char *p;
p=(char*)(&x);p=(char*)(&x);
- Phép tăng giảm địa chỉPhép tăng giảm địa chỉ
VD: float x[30], *px;VD: float x[30], *px;
px=&x[10];// p là con trỏ thực trỏ tới phần tử x[10]px=&x[10];// p là con trỏ thực trỏ tới phần tử x[10]
px+i trỏ tới phần tử x[10+i]px+i trỏ tới phần tử x[10+i]
px – i trỏ tới phần tử x[10-i]px – i trỏ tới phần tử x[10-i]
71Ngôn ngữ lập trình C
- Phép so sánh: dùng so sánh các con trỏ cùng kiểu, giảPhép so sánh: dùng so sánh các con trỏ cùng kiểu, giả
sử p1 và p2 là hai con trỏ kiểu float thì tồn tại phép sosử p1 và p2 là hai con trỏ kiểu float thì tồn tại phép so
sánhsánh
p1 < p2 // địa chỉ p1 trỏ tới thấp hơn địa chỉ p2 trỏ tớip1 < p2 // địa chỉ p1 trỏ tới thấp hơn địa chỉ p2 trỏ tới
p1==p2p1==p2
5. Con trỏ kiểu void5. Con trỏ kiểu void
Là con trỏ đặc biệt không có kiểu, nó có thể nhận bất kỳLà con trỏ đặc biệt không có kiểu, nó có thể nhận bất kỳ
địa chỉ nào. Con trỏ kiểu void thường dùng làm đối đểđịa chỉ nào. Con trỏ kiểu void thường dùng làm đối để
nhận bất kỳ địa chỉ nào thông qua phép ép kiểu trongnhận bất kỳ địa chỉ nào thông qua phép ép kiểu trong
thân hàmthân hàm
Các phép toán tăng giảm địa chỉ, so sánh không dùngCác phép toán tăng giảm địa chỉ, so sánh không dùng
được con trỏ kiểu voidđược con trỏ kiểu void
72Ngôn ngữ lập trình C
6. Mảng con trỏ6. Mảng con trỏ
Mảng con trỏ là một mảng mà mỗi phẩn tử của nó có thểMảng con trỏ là một mảng mà mỗi phẩn tử của nó có thể
chứa một địa chỉ nào đó. Mảng con trỏ có nhiều kiểu,chứa một địa chỉ nào đó. Mảng con trỏ có nhiều kiểu,
mỗi phẩn tử của mảng kiểu nào thì sẽ chứa địa chỉ kiểumỗi phẩn tử của mảng kiểu nào thì sẽ chứa địa chỉ kiểu
tương ứng với nó. Mảng con trỏ được khai báo theo mẫutương ứng với nó. Mảng con trỏ được khai báo theo mẫu
sau:sau:
<kiểu Dl> *<tênmảng>[N]<kiểu Dl> *<tênmảng>[N]
Khi gặp khai báo mảng con trỏ thì máy sẽ cấp phát NKhi gặp khai báo mảng con trỏ thì máy sẽ cấp phát N
khoảng nhớ liên tiếp cho N phần tử tương ứng trongkhoảng nhớ liên tiếp cho N phần tử tương ứng trong
mảngmảng
Chú ý: Mảng con trỏ không dùng để lưu số liệu, trướcChú ý: Mảng con trỏ không dùng để lưu số liệu, trước
khi sử dụng mảng con trỏ cần gán cho mỗi phần tử mộtkhi sử dụng mảng con trỏ cần gán cho mỗi phần tử một
giá trị là địa chỉ của một biến hoặc của một phần tửgiá trị là địa chỉ của một biến hoặc của một phần tử
trong mảngtrong mảng
73Ngôn ngữ lập trình C
Bài 7: Hàm và chương trìnhBài 7: Hàm và chương trình
1.1. Khái niệmKhái niệm
Chương trìnhChương trình:: Một chương trình C bao gồm một hoặcMột chương trình C bao gồm một hoặc
nhiều hàm. Hàm main() là thành phần bắt buộc củanhiều hàm. Hàm main() là thành phần bắt buộc của
chương trình. Chương trình bắtchương trình. Chương trình bắt đầu thực hiện từ câuđầu thực hiện từ câu
lệnh đầu tilệnh đầu tiên của hàm main( ) choên của hàm main( ) cho đến khi gặp dấu }đến khi gặp dấu }
cuối ccuối cùng của hàm này.ùng của hàm này.
HàmHàm: Là một: Là một đoạn chương trđoạn chương trìnhình độc lập thực hiện trọnđộc lập thực hiện trọn
vẹn một công việc rồi trả về một giá trị cho chươngvẹn một công việc rồi trả về một giá trị cho chương
trtrình đã gọi nó.ình đã gọi nó.
Đặc điểm của hàm:Đặc điểm của hàm:
 Là mộtLà một đơn vị độc lập của chương trđơn vị độc lập của chương trình.ình.
 Không cho phép xây dựng một hàm bên trong mộtKhông cho phép xây dựng một hàm bên trong một
hàm kháchàm khác..
74Ngôn ngữ lập trình C
75Ngôn ngữ lập trình C
2. Quy tắc xây dựng hàm: Một hàm gồm có các thành phần2. Quy tắc xây dựng hàm: Một hàm gồm có các thành phần
sausau
- Nguyên mẫu của hàm:Nguyên mẫu của hàm: Bao gồmBao gồm
<kiểu dl của hàm> <<kiểu dl của hàm> <tên hàmtên hàm(ds các tham số)>;(ds các tham số)>;
Có thể có hoặc không khai báo nguyên mẫu của hàm,Có thể có hoặc không khai báo nguyên mẫu của hàm,
khi không khai báo nguyên mẫu thì bộ biên dịch sẽkhi không khai báo nguyên mẫu thì bộ biên dịch sẽ
kiểm tra việc truyền tham số, giá trị trả về có phù hợpkiểm tra việc truyền tham số, giá trị trả về có phù hợp
hay không rồi mới cho thực hiện hàm.hay không rồi mới cho thực hiện hàm.
Tất cả nguyên mẫu của các hàm có trong chương trìnhTất cả nguyên mẫu của các hàm có trong chương trình
nênnên đặt trước hđặt trước hàm main()àm main()..
76Ngôn ngữ lập trình C
 Ki u giá tr c a hàmể ị ủKi u giá tr c a hàmể ị ủ
Giá tr tr v c a hàmị ả ề ủGiá tr tr v c a hàmị ả ề ủ đ c xác đ nh d a vượ ị ựđ c xác đ nh d a vượ ị ự ào m cụào m cụ đíchđích
c a hủc a hủ àmàm. N u các hế. N u các hế àm không tr v giá tr ta ph i khaiả ề ị ảàm không tr v giá tr ta ph i khaiả ề ị ả
báo ki u void.ểbáo ki u void.ể
 Tên hàmTên hàm
Ð t theo quiặÐ t theo quiặ đ nh đ i v i danh đ nhị ố ớ ịđ nh đ i v i danh đ nhị ố ớ ị . Tên hàm trong. Tên hàm trong
nguyên m u và khi khai báo ph i gi ng nhau.ẫ ả ốnguyên m u và khi khai báo ph i gi ng nhau.ẫ ả ố
 Tham s c a hàmố ủTham s c a hàmố ủ
Khi vi t m t hàm ta ph i xácế ộ ảKhi vi t m t hàm ta ph i xácế ộ ả đ nh xem hịđ nh xem hị àm có bao nhiêuàm có bao nhiêu
tham s ?ốtham s ?ố
 N i dung c a hàmộ ủN i dung c a hàmộ ủ
77Ngôn ngữ lập trình C
C u trúc c a m t hàmấ ủ ộC u trúc c a m t hàmấ ủ ộ
<Ki u tr v ><Tên hàm>(<ds tham s hình th c hay đ iể ả ề ố ứ ố<Ki u tr v ><Tên hàm>(<ds tham s hình th c hay đ iể ả ề ố ứ ố
s >)ốs >)ố
{{ <Khai báo bi n c c b >;ế ụ ộ<Khai báo bi n c c b >;ế ụ ộ
<Các câu l nh trong thân hàm>;ệ<Các câu l nh trong thân hàm>;ệ
[return<bt tr v giá tr hàm>];ả ề ị[return<bt tr v giá tr hàm>];ả ề ị
};};
Chú ý:Chú ý:
- Đ i v i các hàm không có ki u tr v ta có hàm ki u voidố ớ ể ả ề ểĐ i v i các hàm không có ki u tr v ta có hàm ki u voidố ớ ể ả ề ể
- Hàm không có đ i thì dùng ki u void đ khai báo đ i. VDố ể ể ốHàm không có đ i thì dùng ki u void đ khai báo đ i. VDố ể ể ố
void bell(void)void bell(void)
{{ int i;int i;
for(i=0;i<10;i++) putch(7);for(i=0;i<10;i++) putch(7);
}}
78Ngôn ngữ lập trình C
 Cách sử dụng hàmCách sử dụng hàm: Hàm được sử dụng thông qua lời gọi: Hàm được sử dụng thông qua lời gọi
hàm.hàm.
<tên hàm> ([ds tham số thực])<tên hàm> ([ds tham số thực])
- Tham số thực phải bằng tham số hình thứcTham số thực phải bằng tham số hình thức
- Kiểu của tham số thực phải phù hợp với kiểu của thamKiểu của tham số thực phải phù hợp với kiểu của tham
số hình thứcsố hình thức
 Hoạt động của hàm khi có lời gọi hàmHoạt động của hàm khi có lời gọi hàm
 Cấp phát bộ nhớ cho tham số hình thức và biến cục bộCấp phát bộ nhớ cho tham số hình thức và biến cục bộ
 Gán giá trị của tham số thực cho tham số hình thứcGán giá trị của tham số thực cho tham số hình thức
 Thực hiện các lệnh trong thân hàmThực hiện các lệnh trong thân hàm
 Khi gặp câu lệnh return hoặc dấu hiệu kết thúc hàm thìKhi gặp câu lệnh return hoặc dấu hiệu kết thúc hàm thì
bộ nhớ sẽ xoá các tham số hình thức và biến cục bộ saubộ nhớ sẽ xoá các tham số hình thức và biến cục bộ sau
đó thoát khỏi hàm quay về chương trình gọi hàmđó thoát khỏi hàm quay về chương trình gọi hàm
79Ngôn ngữ lập trình C
3. Các tham s trong hàmố3. Các tham s trong hàmố
3.13.1 Phân lo i tham s theo cách s d ngạ ố ử ụPhân lo i tham s theo cách s d ngạ ố ử ụ
o Tham s hình th c: Các tham s mà ta ghi trong nguyênố ứ ốTham s hình th c: Các tham s mà ta ghi trong nguyênố ứ ố
m u hay ghi lúc khai báo hàm g i là tham s hình th c.ẫ ọ ố ứm u hay ghi lúc khai báo hàm g i là tham s hình th c.ẫ ọ ố ứ
o Tham s th c:Các giá tr , bi n mà ta ghi sau tên hàm khi g iố ự ị ế ọTham s th c:Các giá tr , bi n mà ta ghi sau tên hàm khi g iố ự ị ế ọ
hàmhàm đó đ th c hi n g i lể ự ệ ọđó đ th c hi n g i lể ự ệ ọ à tham s th c. Trong C, cácố ựà tham s th c. Trong C, cácố ự
tham s th c l i chia ra làm hai lo i:ố ự ạ ạtham s th c l i chia ra làm hai lo i:ố ự ạ ạ
 Tham chi u: Là các tham s th c mà ta truy n cho Hàmế ố ự ềTham chi u: Là các tham s th c mà ta truy n cho Hàmế ố ự ề
d i d ng con tr (d ngướ ạ ỏ ạd i d ng con tr (d ngướ ạ ỏ ạ đ a ch ). Tham chi u m i ghiị ỉ ế ớđ a ch ). Tham chi u m i ghiị ỉ ế ớ
nh n l i đ c nh ng k t qu v a tính toán trong Hậ ạ ượ ữ ế ả ừnh n l i đ c nh ng k t qu v a tính toán trong Hậ ạ ượ ữ ế ả ừ àm khiàm khi
Hàm k t thúc.ếHàm k t thúc.ế
 Tham tr : Là các tham s th c mà ta truy n cho Hàm d iị ố ự ề ướTham tr : Là các tham s th c mà ta truy n cho Hàm d iị ố ự ề ướ
d ng bi n. Tham tr không b o l u l i nh ng k t qu thayạ ế ị ả ư ạ ữ ế ảd ng bi n. Tham tr không b o l u l i nh ng k t qu thayạ ế ị ả ư ạ ữ ế ả
đ i c a nó đ c tính toán trong Hổ ủ ượđ i c a nó đ c tính toán trong Hổ ủ ượ àm khi Hàm k t thúc.ếàm khi Hàm k t thúc.ế
80Ngôn ngữ lập trình C
3.23.2 Phân lo i theo công d ngạ ụPhân lo i theo công d ngạ ụ
 Tham s c a m t hàm có hai công d ng:ố ủ ộ ụTham s c a m t hàm có hai công d ng:ố ủ ộ ụ
 Cung c p các giá tr cho hàm khi ta g i nó th c hi n .ấ ị ọ ự ệCung c p các giá tr cho hàm khi ta g i nó th c hi n .ấ ị ọ ự ệ
 L u các k t qu tính toánư ế ảL u các k t qu tính toánư ế ả đ c trong quá trượđ c trong quá trượ ình hàmình hàm
ho t đ ngạ ộho t đ ngạ ộ
 T ng ng v i công d ng ta có các lo i tham s :ươ ứ ớ ụ ạ ốT ng ng v i công d ng ta có các lo i tham s :ươ ứ ớ ụ ạ ố
 Tham s vào: Cung c p giá tr cho hàm.ố ấ ịTham s vào: Cung c p giá tr cho hàm.ố ấ ị
 Tham s ra: L u k t qu tính toánố ư ế ảTham s ra: L u k t qu tính toánố ư ế ả đ c trong hượđ c trong hượ àm.àm.
 Tham s v a vào, v a ra: v a cung c p giá tr choố ừ ừ ừ ấ ịTham s v a vào, v a ra: v a cung c p giá tr choố ừ ừ ừ ấ ị
hàm, v a l u k t qu tính toánừ ư ế ảhàm, v a l u k t qu tính toánừ ư ế ả đ c trong hượđ c trong hượ àm.àm.
81Ngôn ngữ lập trình C
4.4. Hàm có đ i con trố ỏHàm có đ i con trố ỏ
Đ i s c a hố ố ủĐ i s c a hố ố ủ àm là con tr ki uỏ ểàm là con tr ki uỏ ể int (float,double,. )int (float,double,. ) thì thamthì tham
s th c t ng ng ph i làố ự ươ ứ ảs th c t ng ng ph i làố ự ươ ứ ả đ a ch c a bi n ki uị ỉ ủ ế ểđ a ch c a bi n ki uị ỉ ủ ế ể intint
(float,double,.)(float,double,.). Khi. Khi đó đ a ch c a bi n đ c truy n choị ỉ ủ ế ượ ềđó đ a ch c a bi n đ c truy n choị ỉ ủ ế ượ ề
đ i con tr t ng ng.ố ỏ ươ ứđ i con tr t ng ng.ố ỏ ươ ứ
Khi mu n b o l u l i k t qu tính toán đ c c a cácố ả ư ạ ế ả ượ ủKhi mu n b o l u l i k t qu tính toán đ c c a cácố ả ư ạ ế ả ượ ủ
đ i s trong hàm đ s d ng cho ch ng trình g i hàmố ố ể ử ụ ươ ọđ i s trong hàm đ s d ng cho ch ng trình g i hàmố ố ể ử ụ ươ ọ
có đ i s thì chúng ta ph i khai báo đ i s c a hàm làố ố ả ố ố ủcó đ i s thì chúng ta ph i khai báo đ i s c a hàm làố ố ả ố ố ủ
tham chi u (con tr hay d ng đ a ch ).ế ỏ ạ ị ỉtham chi u (con tr hay d ng đ a ch ).ế ỏ ạ ị ỉ
VD:VD:
82Ngôn ngữ lập trình C
Bài 8: Chuỗi ký tựBài 8: Chuỗi ký tự
1.1. Khái niệmKhái niệm
 Chuỗi ký tự là một dãy các ký tựChuỗi ký tự là một dãy các ký tự đặt trong cặp dấuđặt trong cặp dấu
nháy kép. Chuỗi rỗng được ký hiệu bằng hai dấu nháynháy kép. Chuỗi rỗng được ký hiệu bằng hai dấu nháy
kép đi liền nhau. Một chuỗi ký tự được cấp phát mộtkép đi liền nhau. Một chuỗi ký tự được cấp phát một
khoảng nhớ cho một mảng kiểu char chứa các ký tự củakhoảng nhớ cho một mảng kiểu char chứa các ký tự của
chuỗi vchuỗi và chứa thêm ký tự '0' là ký tự kết thúc chuỗi.à chứa thêm ký tự '0' là ký tự kết thúc chuỗi.
 Mỗi ký tự của chuỗiMỗi ký tự của chuỗi được chứa trongđược chứa trong một phần tử củamột phần tử của
mảng. Chuỗi ký tự là một trường hợp riêng của mảngmảng. Chuỗi ký tự là một trường hợp riêng của mảng
một chiều khi mỗi thành phần của mảng là ký tựmột chiều khi mỗi thành phần của mảng là ký tự
 Chuỗi ký tự thường được khai báo theo khaiChuỗi ký tự thường được khai báo theo khai báo theobáo theo
hai mẫu:hai mẫu:
char ten_chuoi[] ;char ten_chuoi[] ; hoặc char *ten_chuoi;hoặc char *ten_chuoi;
83Ngôn ngữ lập trình C
2. Các thao tác trên chuỗi2. Các thao tác trên chuỗi
Trong C không tồn tại các phép toán so sánh, gán nộiTrong C không tồn tại các phép toán so sánh, gán nội
dung của chuỗi này cho chuỗi khác.dung của chuỗi này cho chuỗi khác.
Ðể thực hiện các thao tác này ta sử dụng một thư việnÐể thực hiện các thao tác này ta sử dụng một thư viện
các hàm chuẩn là <các hàm chuẩn là <string.h>string.h>..
 Hàm strlen:Hàm strlen: int strlen(char s[])int strlen(char s[])
Trả vềTrả về độ dđộ dài của chuỗi s, chính là chỉ số của ký tựài của chuỗi s, chính là chỉ số của ký tự
NULL trong chuỗi.NULL trong chuỗi.
 Hàm strcpy:Hàm strcpy: strcpy(char dest[], char source[])strcpy(char dest[], char source[])
Sao chép nội dung chuỗi source vào chuỗi dest.Sao chép nội dung chuỗi source vào chuỗi dest.
 Hàm strchr:Hàm strchr: char *strchr(char s[], char c)char *strchr(char s[], char c)
Tìm lần xuất hiệnTìm lần xuất hiện đầu tiđầu tiên của ký tự c trong chuỗi s, trảên của ký tự c trong chuỗi s, trả
vềvề địa chỉ của ký tự nđịa chỉ của ký tự này.ày.
84Ngôn ngữ lập trình C
 Hàm strncpy:Hàm strncpy: strncpy(char dest[], char source[], int n)strncpy(char dest[], char source[], int n)
Sao chép n ký tự trong chuỗi source vào chuỗi dest.Sao chép n ký tự trong chuỗi source vào chuỗi dest.
Trong trường hợp không cóTrong trường hợp không có đủ n ký tự trong source thđủ n ký tự trong source thìì
hàm sẽhàm sẽ điền thđiền thêm các ký tự trắng vào chuỗi dest.êm các ký tự trắng vào chuỗi dest.
 Hàm strcat :Hàm strcat : strcat(char ch1[], char ch2[])strcat(char ch1[], char ch2[])
Nối chuỗi ch2 vào cuối chuỗi ch1. Sau lời gọi hàm nàyNối chuỗi ch2 vào cuối chuỗi ch1. Sau lời gọi hàm này
độ dđộ dài chuỗi ch1 bằng tổngài chuỗi ch1 bằng tổng độ dđộ dài của cả hai chuỗi ch1ài của cả hai chuỗi ch1
và ch2 trước lời gọi hàm.và ch2 trước lời gọi hàm.
 Hàm strncat :Hàm strncat : strncat(char ch1[], char ch2[],int n)strncat(char ch1[], char ch2[],int n)
Nối n ký tựNối n ký tự đầu tiđầu tiên của ch2 vào ch1ên của ch2 vào ch1
85Ngôn ngữ lập trình C
 Hàm strstr :Hàm strstr : char *strstr(char s1[], char s2[])char *strstr(char s1[], char s2[])
Tìm kiếm chuỗi s2 trong chuỗi s1, Trả vềTìm kiếm chuỗi s2 trong chuỗi s1, Trả về địa chỉđịa chỉ
của lần xuất hiện đầu ticủa lần xuất hiện đầu tiên của s2 trong s1 hoặcên của s2 trong s1 hoặc
NULL khi không tìm thấy.NULL khi không tìm thấy.
 Hàm strcmp :Hàm strcmp : int strcmp(char ch1[], char ch2[])int strcmp(char ch1[], char ch2[])
So sánh hai chuỗi ch1 và ch2. Nguyên tắc soSo sánh hai chuỗi ch1 và ch2. Nguyên tắc so
sánh theo kiểu từsánh theo kiểu từ điển. Giá trị trả về:điển. Giá trị trả về:
 = 0 nếu chuỗi ch1 bằng chuỗi ch2= 0 nếu chuỗi ch1 bằng chuỗi ch2
 > 0 nếu chuỗi ch1 lớn hơn chuỗi ch2> 0 nếu chuỗi ch1 lớn hơn chuỗi ch2
 < 0 nếu chuỗi ch1 nhỏ hơn chuỗi ch2< 0 nếu chuỗi ch1 nhỏ hơn chuỗi ch2
VD: Đếm số lần xuất hiện của ký tự a trongVD: Đếm số lần xuất hiện của ký tự a trong
một xâu ký tự cho trướcmột xâu ký tự cho trước
86Ngôn ngữ lập trình C
#include<stdio.h>#include<stdio.h>
#include<conio.h>#include<conio.h>
#define HANG 128#define HANG 128
void main()void main()
{{ char xau[HANG];char xau[HANG]; int i,na;int i,na;
clrscr();clrscr();
printf("nNhap mot xau ky tu:");gets(xau);printf("nNhap mot xau ky tu:");gets(xau);
na=i=0;na=i=0;
while(xau[i])while(xau[i])
if (xau[i++]=='a') na++;if (xau[i++]=='a') na++;
printf("nXau co %d chu a",na);printf("nXau co %d chu a",na);
getch();getch();
return;return;
}}
87Ngôn ngữ lập trình C
3. Mảng và chuỗi ký tự3. Mảng và chuỗi ký tự
 Một dạng sử dụng con trỏMột dạng sử dụng con trỏ đặc biệt lđặc biệt là việc sử dụng mộtà việc sử dụng một
mảng các biến con trỏ. Khai báo theo mẫumảng các biến con trỏ. Khai báo theo mẫu
type *pointer_array[size];type *pointer_array[size];
 VD: khai báoVD: khai báo char *temp[10];char *temp[10];
sẽ khai báo một mảng 10 con trỏsẽ khai báo một mảng 10 con trỏ charchar có thểcó thể được dđược dùngùng
để khai báo một mảng để lưu trữ địa chỉ của mười chuỗiđể khai báo một mảng để lưu trữ địa chỉ của mười chuỗi
ký tự nký tự nàoào đó.đó.
 Bài tập:viết chương trình nhập nhiều tên người vào từBài tập:viết chương trình nhập nhiều tên người vào từ
bàn phím, sắp xếp lại theo thứ tự và in kết quả đã sắpbàn phím, sắp xếp lại theo thứ tự và in kết quả đã sắp
xếp ra.xếp ra.
+ Sắp xếp lại các tên này theo thứ tự alphabet+ Sắp xếp lại các tên này theo thứ tự alphabet
+ In các tên ra theo thứ tự đó.+ In các tên ra theo thứ tự đó.
88Ngôn ngữ lập trình C
 VD: xét một mảng các con trỏ ptr_arrayVD: xét một mảng các con trỏ ptr_array đượcđược
gán các địa chỉ của các biến int có giá trị vgán các địa chỉ của các biến int có giá trị và vị tríà vị trí
bất kỳ. Dùng một hàmbất kỳ. Dùng một hàm để sắp xếp lại các địa chỉđể sắp xếp lại các địa chỉ
nnày trong mảngày trong mảng để sao cho các địa chỉ của các sốđể sao cho các địa chỉ của các số
bé được xếp trước địa chỉ của các số lớn hơn. Lúcbé được xếp trước địa chỉ của các số lớn hơn. Lúc
đó dđó dù chúng ta không làm thayù chúng ta không làm thay đổi vị trí hoặcđổi vị trí hoặc
thay đổi các giá trị của các biến nhưng mảng vẫnthay đổi các giá trị của các biến nhưng mảng vẫn
giống nhưgiống như một mảng chỉmột mảng chỉ đến các giá trị đđến các giá trị đã sắpã sắp
xếp có thứ tự.xếp có thứ tự.
89Ngôn ngữ lập trình C
Bài tập:Bài tập:
 Viết chương trìnhViết chương trình đếm số lần xuất hiện của một ký tựđếm số lần xuất hiện của một ký tự
trong một xâu ký tựtrong một xâu ký tự
 Viết chương trình nhập một chữ, xuất ra chữ đó nhiềuViết chương trình nhập một chữ, xuất ra chữ đó nhiều
lần dùng con trỏlần dùng con trỏ
90Ngôn ngữ lập trình C
Bài 9: Cấp phát và giải phóng bộ nhớ độngBài 9: Cấp phát và giải phóng bộ nhớ động
1.1. Khái niệmKhái niệm
 BiếnBiến động:động: Là các biếnLà các biến được tạo ra lúc chạy chươngđược tạo ra lúc chạy chương
trtrình,ình, tùy theo nhu cầu. Số biến này hoàn toàn khôngtùy theo nhu cầu. Số biến này hoàn toàn không
được xác định từ trước.được xác định từ trước. Các biếnCác biến động không có tđộng không có tênên
(việc(việc đặt tđặt tên thực chất là gán cho nó mộtên thực chất là gán cho nó một địa chỉ xácđịa chỉ xác
định).định).
 Cách tạo ra biến động và truy nhập đến biến độngCách tạo ra biến động và truy nhập đến biến động
được tiến hành như sauđược tiến hành như sau
Việc tạo ra biến động và xóa nó đi (để thu hồi lại bộViệc tạo ra biến động và xóa nó đi (để thu hồi lại bộ
nhớ) được thực hiện nhờ các hàm như malloc() vànhớ) được thực hiện nhờ các hàm như malloc() và
free() đã có sẵn trong thư viện stdlib.hfree() đã có sẵn trong thư viện stdlib.h
91Ngôn ngữ lập trình C
 Việc truy nhập đến biến động được tiến hành nhờ cácViệc truy nhập đến biến động được tiến hành nhờ các
biến con trỏ. Các biến con trỏ được định nghĩa như cácbiến con trỏ. Các biến con trỏ được định nghĩa như các
biến tĩnh ( được khai báo ngay từ đầu trong phần khaibiến tĩnh ( được khai báo ngay từ đầu trong phần khai
báo biến) và được dùng để chứa địa chỉ các biến độngbáo biến) và được dùng để chứa địa chỉ các biến động
 VD1:VD1: int *p; /* Khai báo biến con trỏ p*/int *p; /* Khai báo biến con trỏ p*/
p= (int *) malloc(100);/* Tạo biến động*/p= (int *) malloc(100);/* Tạo biến động*/
Ðoạn chương trình trên sẽ cấp phát 100 bytes trong bộÐoạn chương trình trên sẽ cấp phát 100 bytes trong bộ
nhớ và gán địa chỉ khối bộ nhớ này cho pnhớ và gán địa chỉ khối bộ nhớ này cho p
 VD2: cấp phát bộ nhớ chính xác cho 70 ký tự:VD2: cấp phát bộ nhớ chính xác cho 70 ký tự:
/* Khai báo biến con trỏ kiểu char *//* Khai báo biến con trỏ kiểu char */
char *cp;char *cp;
/* Tạo biến động *//* Tạo biến động */
cp=(char *) malloc(70);cp=(char *) malloc(70);
92Ngôn ngữ lập trình C
2.2.Cấp phát và giải phóng bộ nhớ động (các hàm thuộcCấp phát và giải phóng bộ nhớ động (các hàm thuộc
stdlib.h và alloc.h)stdlib.h và alloc.h)
2.1 Cấp phát bộ nhớ động bằng hàm malloc( )2.1 Cấp phát bộ nhớ động bằng hàm malloc( )
Cú phápCú pháp void *malloc(kiểu _dl size)void *malloc(kiểu _dl size)
 Chức nChức năng: Hăng: Hàm malloc cấp phát một vùng nhớ có kíchàm malloc cấp phát một vùng nhớ có kích
thước là size.thước là size.
 size là một giá trị kiểu_dl (là một kiểu dữ liệusize là một giá trị kiểu_dl (là một kiểu dữ liệu định sẵnđịnh sẵn
trong thư viện stdlib.h).trong thư viện stdlib.h).
 Hàm malloc trả về con trỏ kiểu void chứaHàm malloc trả về con trỏ kiểu void chứa địa chỉ ô nhớđịa chỉ ô nhớ
đầu của vđầu của vùng nhớùng nhớ được cấp phát. Nếu không đủ vđược cấp phát. Nếu không đủ vùng nhớùng nhớ
để cấp phát hàm trả về giá trịđể cấp phát hàm trả về giá trị NULLNULL, vì vậy phải kiểm tra, vì vậy phải kiểm tra
giá trị trả về khi sử dụng hàm malloc.giá trị trả về khi sử dụng hàm malloc.
93Ngôn ngữ lập trình C
2.2 Cấp phát bộ nhớ động bằng hàm calloc2.2 Cấp phát bộ nhớ động bằng hàm calloc
Cú phápCú pháp
(datatype *) calloc(n, sizeof(object));(datatype *) calloc(n, sizeof(object));
Hàm calloc cấp phát bộ nhớHàm calloc cấp phát bộ nhớ động cho các kiểu dữ liệuđộng cho các kiểu dữ liệu
Trong đ óTrong đ ó::
 (datatype *) là kiểu con trỏ trỏ tới kiểu dữ liệu datatype.(datatype *) là kiểu con trỏ trỏ tới kiểu dữ liệu datatype.
 n là số lượng object thuộc kiểu datatype cần cấp phát bộn là số lượng object thuộc kiểu datatype cần cấp phát bộ
nhớ.nhớ.
 datatype có thể là kiểu dữ liệu cơ sở hoặc kiểu dữ liệu mớidatatype có thể là kiểu dữ liệu cơ sở hoặc kiểu dữ liệu mới
94Ngôn ngữ lập trình C
2.3 Cấp phát bộ nhớ động bằng hàm relloc2.3 Cấp phát bộ nhớ động bằng hàm relloc
Cú phápCú pháp
(datatype *) realloc(buf _p, newsize);(datatype *) realloc(buf _p, newsize);
HHàm có chức năng cấp phát lại bộ nhớàm có chức năng cấp phát lại bộ nhớ
TrongTrong đó:đó:
 buf_p là con trỏ đang trỏ đến vùng ô nhớ đã được cấpbuf_p là con trỏ đang trỏ đến vùng ô nhớ đã được cấp
phát từ trước.phát từ trước.
 newsize là kích thước mới cần cấp phát, có thể lớn hoặcnewsize là kích thước mới cần cấp phát, có thể lớn hoặc
nhỏ hơn.nhỏ hơn.
95Ngôn ngữ lập trình C
2.4 Gi i phóng b nh b ng hàm freeả ộ ớ ằ2.4 Gi i phóng b nh b ng hàm freeả ộ ớ ằ
Cú phápCú pháp
void free( void *prt)void free( void *prt)
Hàm free gi i phóng vùng nhả ớHàm free gi i phóng vùng nhả ớ đ c tr đ n b i con trượ ỏ ế ở ỏđ c tr đ n b i con trượ ỏ ế ở ỏ
ptr.ptr.
N u con tr ptr = NULL thì hàm free không làm gì c .ế ỏ ảN u con tr ptr = NULL thì hàm free không làm gì c .ế ỏ ả
96Ngôn ngữ lập trình C
3. Bộ nhớ HEAP và cơ chế tạo biến động3. Bộ nhớ HEAP và cơ chế tạo biến động
 Các biếnCác biến động do malloc tạo ra được C xếp vđộng do malloc tạo ra được C xếp vào mộtào một
vùng ô nhớ tự do theo kiểu xếp chồng vàvùng ô nhớ tự do theo kiểu xếp chồng và được gọi lđược gọi làà
HEAP ( bộ nhớ cấp phátHEAP ( bộ nhớ cấp phát động). Ngôn ngữ C quản lýđộng). Ngôn ngữ C quản lý
HEAP thông qua một con trỏ của HEAP lHEAP thông qua một con trỏ của HEAP là HEAPPTR.à HEAPPTR.
Nó luôn trỏ vào byte tự doNó luôn trỏ vào byte tự do đầu tiđầu tiên của vùng ô nhớ cònên của vùng ô nhớ còn
tự do của HEAP. Mỗi lần gọi malloc(), con trỏ củatự do của HEAP. Mỗi lần gọi malloc(), con trỏ của
HEAPHEAP được dịch chuyển về phía đỉnh của vđược dịch chuyển về phía đỉnh của vùng ô nhớ tựùng ô nhớ tự
do một số byte tương ứng với kích thước của biếndo một số byte tương ứng với kích thước của biến độngđộng
mới tạo ra.mới tạo ra.
 Ngược lại, mỗi khi giải phóng bộ nhớ biếnNgược lại, mỗi khi giải phóng bộ nhớ biến động, bộ nhớđộng, bộ nhớ
biến động được thu hồibiến động được thu hồi
97Ngôn ngữ lập trình C
98Ngôn ngữ lập trình C
BàiBài 1010: Ki u c u trúcể ấ: Ki u c u trúcể ấ
1.1. Ki u enumểKi u enumể
 Câu l nh khai báo ki u enum có th vi t theoệ ể ể ếCâu l nh khai báo ki u enum có th vi t theoệ ể ể ế
b n cáchốb n cáchố
enumenum tk {pt1,pt2,...} tb1,tb2,...;tk {pt1,pt2,...} tb1,tb2,...;
enumenum  tk {pt1,pt2,...}; tk {pt1,pt2,...};
enumenum  {pt1,pt2,...} tb1,tb2,...; {pt1,pt2,...} tb1,tb2,...;
enumenum  {pt1,pt2,...}; {pt1,pt2,...};
 Trong đó :Trong đó :
 Tk là tên ki u enum (m t ki u d li u m i),ể ộ ể ữ ệ ớTk là tên ki u enum (m t ki u d li u m i),ể ộ ể ữ ệ ớ
 pt1,pt2,... là tên các ph n t ,ầ ửpt1,pt2,... là tên các ph n t ,ầ ử
 tb1,tb2,... là tên bi n ki u enum.ế ểtb1,tb2,... là tên bi n ki u enum.ế ể
99Ngôn ngữ lập trình C
 Ví dụ: khai báo kiểu dữ liệu làm việc với các ngàyVí dụ: khai báo kiểu dữ liệu làm việc với các ngày
trong tuần ta có thể dùng kiểu weekday và biến day nhưtrong tuần ta có thể dùng kiểu weekday và biến day như
sau:sau:
enumenum
weekday{SUNDAY,MONDAY,TUESDAY,WEDSDweekday{SUNDAY,MONDAY,TUESDAY,WEDSD
AY,THURSDAY, FRIDAY, SATURDAY} day;AY,THURSDAY, FRIDAY, SATURDAY} day;
 Chú ý biến kiểu enum thực chất là biến nguyên, nóChú ý biến kiểu enum thực chất là biến nguyên, nó
được cấp phát 2 byte bộ nhớ và nó có thể nhận một giáđược cấp phát 2 byte bộ nhớ và nó có thể nhận một giá
trị nguyên bất kỳ.trị nguyên bất kỳ.
100Ngôn ngữ lập trình C
2. Ki u c u trúcể ấ2. Ki u c u trúcể ấ
2.1 Đ nh nghĩaị2.1 Đ nh nghĩaị
C u trúc là m t ki u d li u bao g m nhi u thành ph nấ ộ ể ữ ệ ồ ề ầC u trúc là m t ki u d li u bao g m nhi u thành ph nấ ộ ể ữ ệ ồ ề ầ
có th thu c nhi u ki u d li u khác nhau. Các thànhể ộ ề ể ữ ệcó th thu c nhi u ki u d li u khác nhau. Các thànhể ộ ề ể ữ ệ
ph nầph nầ đ c truy nh p thông qua m t tượ ậ ộđ c truy nh p thông qua m t tượ ậ ộ ênên
2.2 Cú pháp t ng quátổ2.2 Cú pháp t ng quátổ
struct [tên_c u_trúc]ấstruct [tên_c u_trúc]ấ
{{
khai báo các thành ph nầkhai báo các thành ph nầ
} [danh sách các bi n c u trúc];ế ấ} [danh sách các bi n c u trúc];ế ấ
101Ngôn ngữ lập trình C
trongtrong đó:đó:
 structstruct là t khóaừlà t khóaừ đ ng tr c m t khai báo c u trúc,ứ ướ ộ ấđ ng tr c m t khai báo c u trúc,ứ ướ ộ ấ
 têntên__c uấc uấ __trúctrúc là m t tên h p lộ ợ ệlà m t tên h p lộ ợ ệ đ c dượđ c dượ ùng làm tên c u trúc;ấùng làm tên c u trúc;ấ
 [danh sách các bi n c u trúc]ế ấ[danh sách các bi n c u trúc]ế ấ li t kê các bi n có ki u c u trúcệ ế ể ấli t kê các bi n có ki u c u trúcệ ế ể ấ
v a khai báoừv a khai báoừ
 VD:VD:
structstruct hoc_sinh {hoc_sinh {
char ho_ten[20];char ho_ten[20];
float diem;float diem;
} hs,} hs, dshs[100];dshs[100];
102Ngôn ngữ lập trình C
2.32.3 Cú pháp đ nh nghĩa ki u d li u m iị ể ữ ệ ớCú pháp đ nh nghĩa ki u d li u m iị ể ữ ệ ớ
Ngôn ngũ C cho phép taNgôn ngũ C cho phép ta đ t l i tặ ạđ t l i tặ ạ ên ki u dểên ki u dể ữữ li u m iệ ớli u m iệ ớ
b ng câu l nh:ằ ệb ng câu l nh:ằ ệ
typedef ki u_ểtypedef ki u_ể đđã_có tên_ki u_m i;ể ớã_có tên_ki u_m i;ể ớ
trongtrong đó :đó :
 ki u_ểki u_ể đđã_có là ki u d li u mà ta mu nể ữ ệ ốã_có là ki u d li u mà ta mu nể ữ ệ ố đ i tổđ i tổ ên.ên.
 tên_ki u_m i là tên m i mà ta mu nể ớ ớ ốtên_ki u_m i là tên m i mà ta mu nể ớ ớ ố đ t.ặđ t.ặ
103Ngôn ngữ lập trình C
2.4 Nguyên t c truy c p đ n thành ph n c a c u trúcắ ậ ế ầ ủ ấ2.4 Nguyên t c truy c p đ n thành ph n c a c u trúcắ ậ ế ầ ủ ấ
 Các thành ph n c a c u trúcầ ủ ấCác thành ph n c a c u trúcầ ủ ấ đ c truy nh p thôngượ ậđ c truy nh p thôngượ ậ
qua tqua tên bi n c u trúc và tên thành ph n.ế ấ ầên bi n c u trúc và tên thành ph n.ế ấ ầ
tên_bi n_c u_trúc.tên_thành_ph nế ấ ầtên_bi n_c u_trúc.tên_thành_ph nế ấ ầ
ĐểĐể truy nh p đ n các thậ ếtruy nh p đ n các thậ ế ành ph n c a bi n hs chúngầ ủ ếành ph n c a bi n hs chúngầ ủ ế
ta vi t nh sau:ế ưta vi t nh sau:ế ư
hs.ho_tenhs.ho_ten
hs.diemhs.diem
Chú ý:Không nên s d ng toán t &ử ụ ửChú ý:Không nên s d ng toán t &ử ụ ử đ i v i các thố ớđ i v i các thố ớ ành ph nầành ph nầ
c u trúc (ấc u trúc (ấ đ c bi t đ i v i các thặ ệ ố ớđ c bi t đ i v i các thặ ệ ố ớ ành ph n không nguyên) trongầành ph n không nguyên) trongầ
khi nh p d li uậ ữ ệkhi nh p d li uậ ữ ệ
104Ngôn ngữ lập trình C
2.5 Con trỏ cấu trúc2.5 Con trỏ cấu trúc
Cách khai báoCách khai báo
 Một biến cấu trúc cũng là một biến trong bộ nhớMột biến cấu trúc cũng là một biến trong bộ nhớ, có thể, có thể
lấy địa chỉ của một biến cấu trúc bằng toán tử lấy địa chỉlấy địa chỉ của một biến cấu trúc bằng toán tử lấy địa chỉ
&. Giá trị trả lại l&. Giá trị trả lại làà địa chỉ đến trường đầu của cấu trúc.địa chỉ đến trường đầu của cấu trúc.
 Có thể khai báo một biến con trỏ chỉCó thể khai báo một biến con trỏ chỉ đến một cấu trúc đểđến một cấu trúc để
có thể lưu địa chỉ của một biến cấu trúc ncó thể lưu địa chỉ của một biến cấu trúc nàoào đó. Cú phápđó. Cú pháp
khai báo một biến con trỏ cấu trúc như sau:khai báo một biến con trỏ cấu trúc như sau:
struct tên_cấu_trúc *tên_con_trỏ;struct tên_cấu_trúc *tên_con_trỏ;
VD: struct hoc_sinh *ptrhs;VD: struct hoc_sinh *ptrhs;
 Việc truy xuấtViệc truy xuất đến một thđến một thành phần của cấu trúc thôngành phần của cấu trúc thông
qua một con trỏqua một con trỏ được thực hiện bằng phép toán kép ->được thực hiện bằng phép toán kép ->
105Ngôn ngữ lập trình C
VD:VD:
printf("nHo va ten hoc sinh %s",ptrhs->ho_ten);printf("nHo va ten hoc sinh %s",ptrhs->ho_ten);
printf("nDiem %6.3f",ptrhs->diem);printf("nDiem %6.3f",ptrhs->diem);
kết quả thực hiện hai câu lệnh này tươngkết quả thực hiện hai câu lệnh này tương đương với haiđương với hai
câu lệnh sau:câu lệnh sau:
printf("nHo va ten hoc sinh %s",hs.ho_ten);printf("nHo va ten hoc sinh %s",hs.ho_ten);
printf("nDiem %6.3f",hs.diem);printf("nDiem %6.3f",hs.diem);
 Việc sử dụng con trỏ chỉViệc sử dụng con trỏ chỉ đến cấu trúc thường được sửđến cấu trúc thường được sử
dụng để truyền cấu trúc đến cho một hdụng để truyền cấu trúc đến cho một hàmàm
 Một ứng dụng khác của con trỏ cấu trúc là dùng để xâyMột ứng dụng khác của con trỏ cấu trúc là dùng để xây
dựng các cấu trúc tự trỏ như: danh sách liên kết (còn gọidựng các cấu trúc tự trỏ như: danh sách liên kết (còn gọi
là danh sách móc nối).là danh sách móc nối).
Giáo trình lập trình C
Giáo trình lập trình C
Giáo trình lập trình C
Giáo trình lập trình C
Giáo trình lập trình C
Giáo trình lập trình C
Giáo trình lập trình C
Giáo trình lập trình C
Giáo trình lập trình C
Giáo trình lập trình C
Giáo trình lập trình C
Giáo trình lập trình C

Weitere ähnliche Inhalte

Andere mochten auch

Giao Trinh Ngon Ngu Lap Trinh C
Giao Trinh Ngon Ngu Lap Trinh CGiao Trinh Ngon Ngu Lap Trinh C
Giao Trinh Ngon Ngu Lap Trinh Cnam nx
 
E-book kế toán căn bản cho người không chuyên
E-book kế toán căn bản cho người không chuyênE-book kế toán căn bản cho người không chuyên
E-book kế toán căn bản cho người không chuyênfastcorp
 
[Share] tổng hợp các bài tập c căn bản
[Share] tổng hợp các bài tập c căn bản[Share] tổng hợp các bài tập c căn bản
[Share] tổng hợp các bài tập c căn bảnKhong Biet Khong Quen
 
Bài tập nguyên lý kế toán có lời giải
Bài tập nguyên lý kế toán có lời giảiBài tập nguyên lý kế toán có lời giải
Bài tập nguyên lý kế toán có lời giảiHọc Huỳnh Bá
 
Bai giang cong thuc excel
Bai giang cong thuc excelBai giang cong thuc excel
Bai giang cong thuc exceltrunglm81090
 
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615clbinternet.info
 
Kế toán đại cương
Kế toán đại cươngKế toán đại cương
Kế toán đại cươngThuNga Tnv
 
May hoc 012012
May hoc   012012May hoc   012012
May hoc 012012Freelancer
 
Luận án tiến sĩ toán học nghiên cứu, phát triển các kỹ thuật tự động tóm tắt ...
Luận án tiến sĩ toán học nghiên cứu, phát triển các kỹ thuật tự động tóm tắt ...Luận án tiến sĩ toán học nghiên cứu, phát triển các kỹ thuật tự động tóm tắt ...
Luận án tiến sĩ toán học nghiên cứu, phát triển các kỹ thuật tự động tóm tắt ...https://www.facebook.com/garmentspace
 
Phan loai tin_tuc_bao_dien_tu
Phan loai tin_tuc_bao_dien_tuPhan loai tin_tuc_bao_dien_tu
Phan loai tin_tuc_bao_dien_tuViet Nam
 
Lap Trinh C Tren Windows
Lap Trinh C Tren WindowsLap Trinh C Tren Windows
Lap Trinh C Tren Windowsnam nx
 
Model based collaborative filtering
Model based collaborative filteringModel based collaborative filtering
Model based collaborative filteringBui Loc
 
Mã hóa đường cong Elliptic
Mã hóa đường cong EllipticMã hóa đường cong Elliptic
Mã hóa đường cong EllipticLE Ngoc Luyen
 
Ung dung xu ly anh trong thuc te voi thu vien open cv
Ung dung xu ly anh trong thuc te voi thu vien open cvUng dung xu ly anh trong thuc te voi thu vien open cv
Ung dung xu ly anh trong thuc te voi thu vien open cvNguyen An
 
Mã hóa đường cong Elliptic
Mã hóa đường cong EllipticMã hóa đường cong Elliptic
Mã hóa đường cong EllipticLE Ngoc Luyen
 
Cac chuan nen va ung dung truyen video tren mang internet
Cac chuan nen va ung dung truyen video tren mang internetCac chuan nen va ung dung truyen video tren mang internet
Cac chuan nen va ung dung truyen video tren mang internetNo Name
 
Bai giang atbmtt
Bai giang atbmtt Bai giang atbmtt
Bai giang atbmtt Hà Vũ
 

Andere mochten auch (20)

Giao Trinh Ngon Ngu Lap Trinh C
Giao Trinh Ngon Ngu Lap Trinh CGiao Trinh Ngon Ngu Lap Trinh C
Giao Trinh Ngon Ngu Lap Trinh C
 
E-book kế toán căn bản cho người không chuyên
E-book kế toán căn bản cho người không chuyênE-book kế toán căn bản cho người không chuyên
E-book kế toán căn bản cho người không chuyên
 
[Share] tổng hợp các bài tập c căn bản
[Share] tổng hợp các bài tập c căn bản[Share] tổng hợp các bài tập c căn bản
[Share] tổng hợp các bài tập c căn bản
 
Bài tập nguyên lý kế toán có lời giải
Bài tập nguyên lý kế toán có lời giảiBài tập nguyên lý kế toán có lời giải
Bài tập nguyên lý kế toán có lời giải
 
Bai giang cong thuc excel
Bai giang cong thuc excelBai giang cong thuc excel
Bai giang cong thuc excel
 
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
 
Kế toán đại cương
Kế toán đại cươngKế toán đại cương
Kế toán đại cương
 
May hoc 012012
May hoc   012012May hoc   012012
May hoc 012012
 
Luận án tiến sĩ toán học nghiên cứu, phát triển các kỹ thuật tự động tóm tắt ...
Luận án tiến sĩ toán học nghiên cứu, phát triển các kỹ thuật tự động tóm tắt ...Luận án tiến sĩ toán học nghiên cứu, phát triển các kỹ thuật tự động tóm tắt ...
Luận án tiến sĩ toán học nghiên cứu, phát triển các kỹ thuật tự động tóm tắt ...
 
Phan loai tin_tuc_bao_dien_tu
Phan loai tin_tuc_bao_dien_tuPhan loai tin_tuc_bao_dien_tu
Phan loai tin_tuc_bao_dien_tu
 
Lap Trinh C Tren Windows
Lap Trinh C Tren WindowsLap Trinh C Tren Windows
Lap Trinh C Tren Windows
 
Model based collaborative filtering
Model based collaborative filteringModel based collaborative filtering
Model based collaborative filtering
 
Mã hóa đường cong Elliptic
Mã hóa đường cong EllipticMã hóa đường cong Elliptic
Mã hóa đường cong Elliptic
 
Ung dung xu ly anh trong thuc te voi thu vien open cv
Ung dung xu ly anh trong thuc te voi thu vien open cvUng dung xu ly anh trong thuc te voi thu vien open cv
Ung dung xu ly anh trong thuc te voi thu vien open cv
 
Xu ly-anh
Xu ly-anhXu ly-anh
Xu ly-anh
 
Hệ mật mã elgamal
Hệ mật mã elgamalHệ mật mã elgamal
Hệ mật mã elgamal
 
Mã hóa đường cong Elliptic
Mã hóa đường cong EllipticMã hóa đường cong Elliptic
Mã hóa đường cong Elliptic
 
Cac chuan nen va ung dung truyen video tren mang internet
Cac chuan nen va ung dung truyen video tren mang internetCac chuan nen va ung dung truyen video tren mang internet
Cac chuan nen va ung dung truyen video tren mang internet
 
Bai giang atbmtt
Bai giang atbmtt Bai giang atbmtt
Bai giang atbmtt
 
Đề cương xử lý ảnh
Đề cương xử lý ảnhĐề cương xử lý ảnh
Đề cương xử lý ảnh
 

Ähnlich wie Giáo trình lập trình C

C++ can ban(dung thu vien iostream)
C++ can ban(dung thu vien iostream)C++ can ban(dung thu vien iostream)
C++ can ban(dung thu vien iostream)Nguyễn Phụng
 
Lap trinh huong_doi_tuong
Lap trinh huong_doi_tuongLap trinh huong_doi_tuong
Lap trinh huong_doi_tuongvovantrjnh
 
Lap trinh huong doi tuong voi c++ smith.n studio
Lap trinh huong doi tuong voi c++   smith.n studioLap trinh huong doi tuong voi c++   smith.n studio
Lap trinh huong doi tuong voi c++ smith.n studiona
 
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...Thanh Giảng Lê
 
Giao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_danGiao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_danVăn Võ Ntn
 
Bai giangtrenlop
Bai giangtrenlopBai giangtrenlop
Bai giangtrenlopHồ Lợi
 
Ngon ngu c theo chuan ansi
Ngon ngu c theo chuan ansiNgon ngu c theo chuan ansi
Ngon ngu c theo chuan ansiHuynh MVT
 
LAP TRINH C - SESSION 2
LAP TRINH C - SESSION 2LAP TRINH C - SESSION 2
LAP TRINH C - SESSION 2pnanhvn
 
Lap trinh pascal
Lap trinh pascalLap trinh pascal
Lap trinh pascalLoan Nguyen
 
Bg hop ngu-chuong7
Bg hop ngu-chuong7Bg hop ngu-chuong7
Bg hop ngu-chuong7trungnb22
 
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.comBài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.commai_non
 
Ctdl 2005 chuong 5
Ctdl 2005 chuong 5Ctdl 2005 chuong 5
Ctdl 2005 chuong 5Hồ Lợi
 
Pdf bai tap_nen_tang_lap_trinh_-_c#-mastercode.vn
Pdf bai tap_nen_tang_lap_trinh_-_c#-mastercode.vnPdf bai tap_nen_tang_lap_trinh_-_c#-mastercode.vn
Pdf bai tap_nen_tang_lap_trinh_-_c#-mastercode.vnMasterCode.vn
 

Ähnlich wie Giáo trình lập trình C (20)

C++ can ban(dung thu vien iostream)
C++ can ban(dung thu vien iostream)C++ can ban(dung thu vien iostream)
C++ can ban(dung thu vien iostream)
 
Lap trinh huong_doi_tuong
Lap trinh huong_doi_tuongLap trinh huong_doi_tuong
Lap trinh huong_doi_tuong
 
Pascal 2
Pascal 2Pascal 2
Pascal 2
 
Chuong 03 table
Chuong 03   tableChuong 03   table
Chuong 03 table
 
Lap trinh huong doi tuong voi c++ smith.n studio
Lap trinh huong doi tuong voi c++   smith.n studioLap trinh huong doi tuong voi c++   smith.n studio
Lap trinh huong doi tuong voi c++ smith.n studio
 
Tdvts ch3
Tdvts ch3Tdvts ch3
Tdvts ch3
 
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
 
Giao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_danGiao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_dan
 
Bai giang c
Bai giang cBai giang c
Bai giang c
 
Bai 12 kx
Bai 12 kxBai 12 kx
Bai 12 kx
 
Bai giangtrenlop
Bai giangtrenlopBai giangtrenlop
Bai giangtrenlop
 
Ngon ngu c theo chuan ansi
Ngon ngu c theo chuan ansiNgon ngu c theo chuan ansi
Ngon ngu c theo chuan ansi
 
LAP TRINH C - SESSION 2
LAP TRINH C - SESSION 2LAP TRINH C - SESSION 2
LAP TRINH C - SESSION 2
 
Lap trinh pascal
Lap trinh pascalLap trinh pascal
Lap trinh pascal
 
Bg hop ngu-chuong7
Bg hop ngu-chuong7Bg hop ngu-chuong7
Bg hop ngu-chuong7
 
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.comBài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
 
Ngon ngu c
Ngon ngu cNgon ngu c
Ngon ngu c
 
Ctdl 2005 chuong 5
Ctdl 2005 chuong 5Ctdl 2005 chuong 5
Ctdl 2005 chuong 5
 
Học python
Học pythonHọc python
Học python
 
Pdf bai tap_nen_tang_lap_trinh_-_c#-mastercode.vn
Pdf bai tap_nen_tang_lap_trinh_-_c#-mastercode.vnPdf bai tap_nen_tang_lap_trinh_-_c#-mastercode.vn
Pdf bai tap_nen_tang_lap_trinh_-_c#-mastercode.vn
 

Kürzlich hochgeladen

30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdfTrnHoa46
 
GNHH và KBHQ - giao nhận hàng hoá và khai báo hải quan
GNHH và KBHQ - giao nhận hàng hoá và khai báo hải quanGNHH và KBHQ - giao nhận hàng hoá và khai báo hải quan
GNHH và KBHQ - giao nhận hàng hoá và khai báo hải quanmyvh40253
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...Nguyen Thanh Tu Collection
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................TrnHoa46
 
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfBỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfNguyen Thanh Tu Collection
 
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptxNhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptxhoangvubaongoc112011
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoámyvh40253
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...Nguyen Thanh Tu Collection
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...Nguyen Thanh Tu Collection
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfhoangtuansinh1
 
CD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh choCD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh chonamc250
 
Giới thiệu Dự án Sản Phụ Khoa - Y Học Cộng Đồng
Giới thiệu Dự án Sản Phụ Khoa - Y Học Cộng ĐồngGiới thiệu Dự án Sản Phụ Khoa - Y Học Cộng Đồng
Giới thiệu Dự án Sản Phụ Khoa - Y Học Cộng ĐồngYhoccongdong.com
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảoKiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảohoanhv296
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfTrnHoa46
 
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docxTHAO316680
 
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...Nguyen Thanh Tu Collection
 

Kürzlich hochgeladen (20)

30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdf
 
GNHH và KBHQ - giao nhận hàng hoá và khai báo hải quan
GNHH và KBHQ - giao nhận hàng hoá và khai báo hải quanGNHH và KBHQ - giao nhận hàng hoá và khai báo hải quan
GNHH và KBHQ - giao nhận hàng hoá và khai báo hải quan
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................
 
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfBỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
 
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
 
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptxNhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
 
CD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh choCD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh cho
 
Giới thiệu Dự án Sản Phụ Khoa - Y Học Cộng Đồng
Giới thiệu Dự án Sản Phụ Khoa - Y Học Cộng ĐồngGiới thiệu Dự án Sản Phụ Khoa - Y Học Cộng Đồng
Giới thiệu Dự án Sản Phụ Khoa - Y Học Cộng Đồng
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảoKiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảo
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
 
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
 
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
 

Giáo trình lập trình C

  • 1. NGÔN NG L P CỮ ẬNGÔN NG L P CỮ Ậ Giáo viên Vũ Văn Định
  • 2. 2Ngôn ngữ lập trình C Bài 1: T ng quan v ngôn ng l pổ ề ữ ậBài 1: T ng quan v ngôn ng l pổ ề ữ ậ trình Ctrình C  Ngôn ng C có m t s các đ c đi m n i b tữ ộ ố ặ ể ổ ậNgôn ng C có m t s các đ c đi m n i b tữ ộ ố ặ ể ổ ậ sau :sau :  B l nh phù h p v i ph ng pháp l p trình c uộ ệ ợ ớ ươ ậ ấB l nh phù h p v i ph ng pháp l p trình c uộ ệ ợ ớ ươ ậ ấ trúc.trúc.  Ki u d li u phong phú.ể ữ ệKi u d li u phong phú.ể ữ ệ  M t ch ng trình C bao gi cũng g m m t ho cộ ươ ờ ồ ộ ặM t ch ng trình C bao gi cũng g m m t ho cộ ươ ờ ồ ộ ặ nhi u hàm và các hàm r i nhau.ề ờnhi u hàm và các hàm r i nhau.ề ờ  Là ngôn ng linh đ ng v cú pháp, ch p nh nữ ộ ề ấ ậLà ngôn ng linh đ ng v cú pháp, ch p nh nữ ộ ề ấ ậ nhi u cách th hi n ch ng trình .ề ể ệ ươnhi u cách th hi n ch ng trình .ề ể ệ ươ
  • 3. 3Ngôn ngữ lập trình C I. Hướng dẫn sử dụng môi trương kết hợp Turbo CI. Hướng dẫn sử dụng môi trương kết hợp Turbo C 1.1. Khởi độngKhởi động C1: Từ DOS [ đường dẫn ] TC.EXEC1: Từ DOS [ đường dẫn ] TC.EXE C2: Từ Win C -> TC -> BIN -> TC.EXEC2: Từ Win C -> TC -> BIN -> TC.EXE C3: Start -> Run -> C:TCBINTC.EXEC3: Start -> Run -> C:TCBINTC.EXE 2.2. Mở FileMở File Mở file mới : File -> NewMở file mới : File -> New Mở file đã có: File -> OpenMở file đã có: File -> Open 3.3. Ghi FileGhi File Save (F2) : Ghi tệp mới đang soạn thảo vào đĩaSave (F2) : Ghi tệp mới đang soạn thảo vào đĩa Save as : Ghi tệp đang soạn thảo vào đĩa theo tênSave as : Ghi tệp đang soạn thảo vào đĩa theo tên mới hoặc đe lên tệp đã cómới hoặc đe lên tệp đã có
  • 4. 4Ngôn ngữ lập trình C  Chạy một chương trìnhChạy một chương trình  F9 : Biên dịchF9 : Biên dịch  Ctrl F9 : Thực thi chương trìnhCtrl F9 : Thực thi chương trình  Alt F5 : Xem kết quảAlt F5 : Xem kết quả  Thoát khỏi CThoát khỏi C  Thoát tạm thời về DOS : Dos ShellThoát tạm thời về DOS : Dos Shell  Thoát hẳn khỏi C: File Quit ( Alt + X)Thoát hẳn khỏi C: File Quit ( Alt + X)
  • 5. 5Ngôn ngữ lập trình C II. Giới thiệu ngôn ngữ lập trình CII. Giới thiệu ngôn ngữ lập trình C 1. Các thành phần của NNLT C1. Các thành phần của NNLT C  Tập các ký tựTập các ký tự  Chữ cái: A .. Z, a .. zChữ cái: A .. Z, a .. z  Chữ số : 0..9Chữ số : 0..9  Ký hiệu toán học :Ký hiệu toán học : + - * / = ( )+ - * / = ( )  Ký tự gạch nối: _Ký tự gạch nối: _  Các ký hiệu đặc biệt khác như : . , ; : [ ] { } ? ! & | % # $,…Các ký hiệu đặc biệt khác như : . , ; : [ ] { } ? ! & | % # $,…  Từ khoáTừ khoá  Là những từ có một ý nghĩa hoàn toàn xác địnhLà những từ có một ý nghĩa hoàn toàn xác định  Asm, char, do, int, float, for, do, While,…Asm, char, do, int, float, for, do, While,…  TênTên  Dùng để xác định các đại lượng khác nhau trong một chương trìnhDùng để xác định các đại lượng khác nhau trong một chương trình  Bắt đầu bằng chữ cái hoặc gạch nốiBắt đầu bằng chữ cái hoặc gạch nối  Độ dài cực đại mặc định là 32Độ dài cực đại mặc định là 32
  • 6. 6Ngôn ngữ lập trình C 2. Các kiểu dữ liệu cơ sở trong C2. Các kiểu dữ liệu cơ sở trong C  KiểuKiểu sốsố kýký tựtự (char)(char)  KiểuKiểu sốsố nguyênnguyên ((intint))  KiểuKiểu dấudấu phẩyphẩy đđộngộng ((chínhchính xácxác đơđơn (float),n (float), chínhchính xácxác képkép (double))(double))  KiểuKiểu voidvoid
  • 7. 7Ngôn ngữ lập trình C 2.1 Ki u ký t (char)ể ự2.1 Ki u ký t (char)ể ự  M t giá tr ki u ký t (char) chi m 1 byte trong b nhộ ị ể ự ế ộ ớM t giá tr ki u ký t (char) chi m 1 byte trong b nhộ ị ể ự ế ộ ớ và bi u di n m t ký t thông qua b ng mã ASCII.ể ễ ộ ự ảvà bi u di n m t ký t thông qua b ng mã ASCII.ể ễ ộ ự ả  Ví dụVí dụ Ký tựKý tự Mã ASCIIMã ASCII 00 4848 11 4949 22 5050 AA 6565 aa 9797
  • 8. 8Ngôn ngữ lập trình C  Trong ngôn ng C cung c p hai ki u ký t (char) làữ ấ ể ựTrong ngôn ng C cung c p hai ki u ký t (char) làữ ấ ể ự signed char và unsigned charsigned char và unsigned char Ph m viạPh m viạ S ký tố ựS ký tố ự Kích th cướKích th cướ signed charsigned char -128..127-128..127 1 byte1 byte unsigned charunsigned char 0..2550..255 1 byte1 byte Ví dụ : char ch, ch1; ch= ‘a’ ; ch1= 97;
  • 9. 9Ngôn ngữ lập trình C 2.2 Ki u s nguyên (int)ể ố2.2 Ki u s nguyên (int)ể ố Ki u s nguyên trong C g m các ki u sau:ể ố ồ ểKi u s nguyên trong C g m các ki u sau:ể ố ồ ể Ki uểKi uể Ph m vi bi uạ ểPh m vi bi uạ ể di nễdi nễ Kích th cướKích th cướ intint -32768 -> 32767-32768 -> 32767 2 byte2 byte Unsigned intUnsigned int 0 -> 655350 -> 65535 2 byte2 byte -2147483648 --2147483648 - 4 byte4 byte 4 byte4 byte
  • 10. 10Ngôn ngữ lập trình C 2.3 Kiểu số thực hay còn gọi là kiểu dấu phẩy động2.3 Kiểu số thực hay còn gọi là kiểu dấu phẩy động KiểuKiểu Phạm vi biểu diễnPhạm vi biểu diễn Số chữ sốSố chữ số có nghĩacó nghĩa KíchKích thướcthước floatfloat 3.4-38E -> 3.4E+383.4-38E -> 3.4E+38 7-87-8 4 byte4 byte doubledouble 1.7E-308 -> 1.7E+3081.7E-308 -> 1.7E+308 15-1615-16 8 byte8 byte laonglaong doubledouble 3.4E-4932 -> 1.1E+49323.4E-4932 -> 1.1E+4932 17-1817-18 10 byte10 byte
  • 11. 11Ngôn ngữ lập trình C 3 H ng và bi nằ ế3 H ng và bi nằ ế 3.1 H ng:ằ3.1 H ng:ằ  Khái ni m: h ng là giá tr b t bi n trong ch ngệ ằ ị ấ ế ươKhái ni m: h ng là giá tr b t bi n trong ch ngệ ằ ị ấ ế ươ trình không thaytrình không thay đ i, không bi n đ i v m t giá tr .ổ ế ổ ề ặ ịđ i, không bi n đ i v m t giá tr .ổ ế ổ ề ặ ị Các lo i h ngạ ằCác lo i h ngạ ằ đ c s d ng trong C t ng ng v iượ ử ụ ươ ứ ớđ c s d ng trong C t ng ng v iượ ử ụ ươ ứ ớ các ki u d li u nh t đ nhể ữ ệ ấ ịcác ki u d li u nh t đ nhể ữ ệ ấ ị  Trong C có ba lo i h ng :ạ ằTrong C có ba lo i h ng :ạ ằ  H ng sằ ốH ng sằ ố  H ng chu iằ ỗH ng chu iằ ỗ  H ng ký tằ ựH ng ký tằ ự
  • 12. 12Ngôn ngữ lập trình C H ng sằ ốH ng sằ ố: là các giá tr s đã xác đ nh, có th là ki uị ố ị ể ể: là các giá tr s đã xác đ nh, có th là ki uị ố ị ể ể nguyên hay ki u th cể ựnguyên hay ki u th cể ự  H ng nguyên: Giá tr ch bao g m các ch s , d u +,ằ ị ỉ ồ ữ ố ấH ng nguyên: Giá tr ch bao g m các ch s , d u +,ằ ị ỉ ồ ữ ố ấ - đ c l u tr theo ki u int. Ví d : 12,-12ượ ư ữ ể ụ- đ c l u tr theo ki u int. Ví d : 12,-12ượ ư ữ ể ụ  N u giá tr v t quá mi n giá tr c a int ho c có kýế ị ượ ề ị ủ ặN u giá tr v t quá mi n giá tr c a int ho c có kýế ị ượ ề ị ủ ặ t l (hay L ) theo sau giá tr thì l u theo ki u long int.ự ị ư ểt l (hay L ) theo sau giá tr thì l u theo ki u long int.ự ị ư ể Ví d : 43L ho c 43l là h ng nguyên l u theo ki uụ ặ ằ ư ểVí d : 43L ho c 43l là h ng nguyên l u theo ki uụ ặ ằ ư ể long int.long int.  H ng th c: Trong giá tr có d u ch m th p phân,ằ ự ị ấ ấ ậH ng th c: Trong giá tr có d u ch m th p phân,ằ ự ị ấ ấ ậ ho c ghi d i d ng s có mũ, và đ c l u theo ki uặ ướ ạ ố ượ ư ểho c ghi d i d ng s có mũ, và đ c l u theo ki uặ ướ ạ ố ượ ư ể float, double, long double. Ví d : 1.2 , 2.1E -3 (2.1E-ụfloat, double, long double. Ví d : 1.2 , 2.1E -3 (2.1E-ụ 3=0.0021) ho c 3.1e-2 (3.1e-2=0.031).ặ3=0.0021) ho c 3.1e-2 (3.1e-2=0.031).ặ
  • 13. 13Ngôn ngữ lập trình C H ng ký tằ ựH ng ký tằ ự  M t h ng ki u ký tộ ằ ể ựM t h ng ki u ký tộ ằ ể ự đ c vi t trong d u ngo c đ n (' )ượ ế ấ ặ ơđ c vi t trong d u ngo c đ n (' )ượ ế ấ ặ ơ nh 'A' ho c 'z'.ư ặnh 'A' ho c 'z'.ư ặ  H ng ký t 'A' th c sằ ự ự ựH ng ký t 'A' th c sằ ự ự ự đ ng nghĩa v i giá tr nguyồ ớ ịđ ng nghĩa v i giá tr nguyồ ớ ị ên 65,ên 65, là giá tr trong b ng mã ASCII c a ch hoa 'A' (Nh v yị ả ủ ữ ư ậlà giá tr trong b ng mã ASCII c a ch hoa 'A' (Nh v yị ả ủ ữ ư ậ giá tr c a h ng chính là mã ASCII c a nó). Ð i v i m tị ủ ằ ủ ố ớ ộgiá tr c a h ng chính là mã ASCII c a nó). Ð i v i m tị ủ ằ ủ ố ớ ộ vài h ng ký tằ ựvài h ng ký tằ ự đ c bi t, ta c n s d ngặ ệ ầ ử ụđ c bi t, ta c n s d ngặ ệ ầ ử ụ cách vi t thêmếcách vi t thêmế d u , nh 't' t ng ng v i phím tab:ấ ư ươ ứ ớd u , nh 't' t ng ng v i phím tab:ấ ư ươ ứ ớ  H ng ký t có th tham gia vào phép toán nh m i sằ ự ể ư ọ ốH ng ký t có th tham gia vào phép toán nh m i sằ ự ể ư ọ ố nguyên khác:nguyên khác: VD:VD: '8' - '1'= 56-49=7.'8' - '1'= 56-49=7.
  • 14. 14Ngôn ngữ lập trình C Cách viếtCách viết Ký tựKý tự ‘‘n’n’ Xuống hàngXuống hàng ‘‘t’t’ TabTab ‘‘o’o’ ““nul” tương ứng với giá trịnul” tương ứng với giá trị nguyên 0 trong bảng mãnguyên 0 trong bảng mã ASCIIASCII ‘‘b’b’ BackspacseBackspacse ‘‘r’r’ Về đầu dòngVề đầu dòng ‘‘f’f’ Sang tráiSang trái ‘‘’’ ‘‘ ” ’” ’ ”” ‘‘ ’ ’’ ’ ’’
  • 15. 15Ngôn ngữ lập trình C H ng chu iằ ỗH ng chu iằ ỗ  Là chu i ký t n m trong c p d u nháy kép " ". Các kýỗ ự ằ ặ ấLà chu i ký t n m trong c p d u nháy kép " ". Các kýỗ ự ằ ặ ấ t này cũng có th là các ký tự ể ựt này cũng có th là các ký tự ể ự đ c bi u di n b ngượ ể ễ ằđ c bi u di n b ngượ ể ễ ằ chu i thoát.ỗchu i thoát.ỗ  Ví d : "Turbo C", "Ngôn ng C++ nr"ụ ữVí d : "Turbo C", "Ngôn ng C++ nr"ụ ữ  M t h ng chu iộ ằ ỗM t h ng chu iộ ằ ỗ đ c l u tr t n cượ ư ữ ậđ c l u tr t n cượ ư ữ ậ ùng b ng m t ký t Nulằ ộ ựùng b ng m t ký t Nulằ ộ ự (0), ví d chu i "Turbo C"ụ ỗ(0), ví d chu i "Turbo C"ụ ỗ đ c l u tr trong b nh nhượ ư ữ ộ ớ ưđ c l u tr trong b nh nhượ ư ữ ộ ớ ư sau:sau: TT uu rr bb oo CC 00
  • 16. 16Ngôn ngữ lập trình C CáchCách định nghĩa hằng sử dụng trong chương trđịnh nghĩa hằng sử dụng trong chương trìnhình  Với các giá trị hằng thườngVới các giá trị hằng thường được dđược dùng trong mộtùng trong một chương trình ta nênchương trình ta nên định nghĩa ở đầu chương trđịnh nghĩa ở đầu chương trìnhình (sau các dòng khai báo những thư viện chuẩn) theo cú(sau các dòng khai báo những thư viện chuẩn) theo cú pháp:pháp: #define <tên hằng> <giá trị>#define <tên hằng> <giá trị> Ví dụ: #define PI 3.1415Ví dụ: #define PI 3.1415
  • 17. 17Ngôn ngữ lập trình C 3.2 Bi nế3.2 Bi nế - Cách khai báo:- Cách khai báo: M i bi n trong ch ng trìnhỗ ế ươM i bi n trong ch ng trìnhỗ ế ươ đ u ph iề ảđ u ph iề ả đ c khai báo tr c khi s d ng v i cú pháp khai:ượ ướ ử ụ ớđ c khai báo tr c khi s d ng v i cú pháp khai:ượ ướ ử ụ ớ Ki u d li u   <danh_sách_tên_bi n>;ể ữ ệ ếKi u d li u   <danh_sách_tên_bi n>;ể ữ ệ ế  L u ý: n u có nhi u tên bi n thì gi a các tên bi nư ế ề ế ữ ếL u ý: n u có nhi u tên bi n thì gi a các tên bi nư ế ề ế ữ ế ph i có d u , đ ngăn cáchả ấ ểph i có d u , đ ngăn cáchả ấ ể Ví d : int a,b; float x;ụVí d : int a,b; float x;ụ -- Kh iởKh iở đ u cho các bi nầ ếđ u cho các bi nầ ế Ngay trên dòng khai báo ta có th gán cho bi nể ếNgay trên dòng khai báo ta có th gán cho bi nể ế m t giá tr . Vi c làm này g i là kh iộ ị ệ ọ ởm t giá tr . Vi c làm này g i là kh iộ ị ệ ọ ở đ u choầđ u choầ bi n.ếbi n.ế Ví d :  int a,b=6,d=1;ụVí d :  int a,b=6,d=1;ụ
  • 18. 18Ngôn ngữ lập trình C  Cách truy xu tấCách truy xu tấ đ n đ a ch c a bi nế ị ỉ ủ ếđ n đ a ch c a bi nế ị ỉ ủ ế  M t s hàm c a C dùngộ ố ủM t s hàm c a C dùngộ ố ủ đ n đ a ch c a bi n ví dế ị ỉ ủ ế ụđ n đ a ch c a bi n ví dế ị ỉ ủ ế ụ nh hưnh hư àmàm scanfscanf. Ð nh nể ậ. Ð nh nể ậ đ a ch c a bi n dị ỉ ủ ếđ a ch c a bi n dị ỉ ủ ế ùng toánùng toán t : &ửt : &ử Ví d : &tên_bi n -ụ ếVí d : &tên_bi n -ụ ế  &a : đ a ch c a bi n aị ỉ ủ ế&a : đ a ch c a bi n aị ỉ ủ ế
  • 19. 19Ngôn ngữ lập trình C 3.3 C u trúc t ng quát c a ch ng trình Cấ ổ ủ ươ3.3 C u trúc t ng quát c a ch ng trình Cấ ổ ủ ươ M t ch ng trình C chu n g m có các thành ph n sau:ộ ươ ẩ ồ ầM t ch ng trình C chu n g m có các thành ph n sau:ộ ươ ẩ ồ ầ 1.1. Các ch th ti n biên d chỉ ị ề ịCác ch th ti n biên d chỉ ị ề ị 2.2. Khai báo các ki u d li u m iể ữ ệ ớKhai báo các ki u d li u m iể ữ ệ ớ 3.3. Khai báo h ng, khai báo bi nằ ếKhai báo h ng, khai báo bi nằ ế 4.4. Khai báo hàmKhai báo hàm 5.5. Ch ng trình chínhươCh ng trình chínhươ
  • 20. 20Ngôn ngữ lập trình C 1.1. Ch th ti n biên d ch: giúp trình biên d ch th c hi n m tỉ ị ề ị ị ự ệ ộCh th ti n biên d ch: giúp trình biên d ch th c hi n m tỉ ị ề ị ị ự ệ ộ s công vi c tr c khi th c hi n m t s công vi c tr cố ệ ướ ự ệ ộ ố ệ ướs công vi c tr c khi th c hi n m t s công vi c tr cố ệ ướ ự ệ ộ ố ệ ướ khi th c hi n biên d ch chính th cự ệ ị ứkhi th c hi n biên d ch chính th cự ệ ị ứ VD:VD: #include <stdio.h>;#include <stdio.h>; #include <conio.h>;#include <conio.h>; 2.2. Khai báo ki u d li u m i: dung t khoáể ữ ệ ớ ừKhai báo ki u d li u m i: dung t khoáể ữ ệ ớ ừ typedef.typedef. VD:VD: typedef int songuyen;typedef int songuyen; typedef float mang[10];typedef float mang[10]; 3.3. Khai báo h ng và bi n: khai báo các h ng s và bi nằ ế ằ ố ếKhai báo h ng và bi n: khai báo các h ng s và bi nằ ế ằ ố ế dùng trong ch ng trìnhươdùng trong ch ng trìnhươ 4.4. Khai báo hàm: khai báo các hàm t vi tự ếKhai báo hàm: khai báo các hàm t vi tự ế 5.5. Ch ng trình chính: hàm main là hàm b t bu c trongươ ắ ộCh ng trình chính: hàm main là hàm b t bu c trongươ ắ ộ ch ng trình. Hàm main có th tr v giá tr ki u nguyênươ ể ả ề ị ểch ng trình. Hàm main có th tr v giá tr ki u nguyênươ ể ả ề ị ể (int) ho c không tr v giá tr nào (void)ặ ả ề ị(int) ho c không tr v giá tr nào (void)ặ ả ề ị
  • 21. 21Ngôn ngữ lập trình C /* Chương trình in ra dòng chữ Trung tâm đào tạo Trí Đức trên màn hình */ # include <stdio.h> void main () /* Ham chinh */ { printf(" n Trung tâm đào tạo Trí Đức "); /*xuong dong in chu Trung tâm đào tạo Trí Đức */ }
  • 22. 22Ngôn ngữ lập trình C * Chương trình tính chu vi và diện tích hình tròn, biết bán kính r là một hằng số có giá trị =3.1 */ # include <stdio.h> /* khai báo thư viện hàm nhập xuất chuẩn */ # include <math.h> /* khai báo thư viện hàm toán học */ #define r 3.1 void main () { float cv,dt; /* khai bao bien chu vi va dien tich kieu so thuc */ cv=2*r*M_PI; /* tinh chu vi */ dt=M_PI*r*r; /* Tinh dien tich */ printf("nChu vi = %10.2fnDien tich = %10.2f",cv,dt); /* In ket qua len man hinh */ getch(); /* Tam dung chuong trinh */ }
  • 23. 23Ngôn ngữ lập trình C *Chương trình này minh họa cách vừa khai báo, vừa khởi đầu một biến trong C */ #include <stdio.h> void main() { char ki_tu = 'a'; /* Khai báo/khởi đầu kí tự. */ int so_nguyen = 15; /* Khai báo khởi đầu số nguyên */ float so_thuc = 27.62; /* Khai báo/khởi đầu số thực/ printf("%c la mot ki tu.n",ki_tu); printf("%d la mot so nguyen.n",so_nguyen); printf("%f la mot so thuc.n",so_thuc); }
  • 24. 24Ngôn ngữ lập trình C Bài 2:Bài 2: Biểu thức và các phép toánBiểu thức và các phép toán  I. Bi u th cể ứI. Bi u th cể ứ  Là s k t h p các phép toán và các toán h ng đự ế ợ ạ ểLà s k t h p các phép toán và các toán h ng đự ế ợ ạ ể di n đ t m t công th c toán h c nào đó.ễ ạ ộ ứ ọdi n đ t m t công th c toán h c nào đó.ễ ạ ộ ứ ọ  Bi u th c trong C g m có bi u th c toán h c vàể ứ ồ ể ứ ọBi u th c trong C g m có bi u th c toán h c vàể ứ ồ ể ứ ọ bi u th c logicể ứbi u th c logicể ứ  Bi u th c toán h c bao g m các phép toán s h c và cácể ứ ọ ồ ố ọBi u th c toán h c bao g m các phép toán s h c và cácể ứ ọ ồ ố ọ h ng, các bi n, các hàmằ ếh ng, các bi n, các hàmằ ế  Bi u th c logic bao g m các bi n, h ng, hàm và phépể ứ ồ ế ằBi u th c logic bao g m các bi n, h ng, hàm và phépể ứ ồ ế ằ toán logic (!: phép ph đ nh, &&: phép và, || : phépủ ịtoán logic (!: phép ph đ nh, &&: phép và, || : phépủ ị ho c)ặho c)ặ
  • 25. 25Ngôn ngữ lập trình C II. Các phép toánII. Các phép toán  Phép toán s h cố ọPhép toán s h cố ọ Phép toánPhép toán Ý nghĩaÝ nghĩa ++ C ngộC ngộ -- TrừTrừ ** NhânNhân // ChiaChia %% L y ph n dấ ầ ưL y ph n dấ ầ ư Chú ý:Chú ý: -Phép toán chia 2 s nguyên s ch t c t ph n th pố ẽ ặ ụ ầ ậ-Phép toán chia 2 s nguyên s ch t c t ph n th pố ẽ ặ ụ ầ ậ phân.phân. -Phép toán l y ph n d không áp d ng cho các giáấ ầ ư ụ-Phép toán l y ph n d không áp d ng cho các giáấ ầ ư ụ tr float và doubleịtr float và doubleị
  • 26. 26Ngôn ngữ lập trình C II. Các phép toánII. Các phép toán  Phép toán quan hệPhép toán quan hệ Phép toánPhép toán Ý nghĩaÝ nghĩa Ví dụVí dụ >> Có lớn hơn không?Có lớn hơn không? a>ba>b >=>= Có lớn hơn hay bằng không?Có lớn hơn hay bằng không? a>=ba>=b << Có nhỏ hơn không?Có nhỏ hơn không? a<ba<b <=<= Có nhỏ hơn hay bằng không?Có nhỏ hơn hay bằng không? a<=ba<=b ==== Có bằng hay không?Có bằng hay không? a==ba==b !=!= Có khác nhau không?Có khác nhau không? a!=ba!=b Các phép toán quan hệ có độ ưu tiên thấp hơn so với các phépCác phép toán quan hệ có độ ưu tiên thấp hơn so với các phép toán số họctoán số học
  • 27. 27Ngôn ngữ lập trình C II. Các phép toánII. Các phép toán  Phép toán logicPhép toán logic  Phép phủ định !Phép phủ định !  Phép và (AND) &&Phép và (AND) &&  Phép hoặc (OR) ||Phép hoặc (OR) ||  Các phép toán quan hệ có độ ưu tiên nhỏ hơnCác phép toán quan hệ có độ ưu tiên nhỏ hơn so với ! nhưng lớn hơn so với phép && và ||so với ! nhưng lớn hơn so với phép && và ||
  • 28. 28Ngôn ngữ lập trình C  CCâu lệnhâu lệnh gán vgán và biểu thứcà biểu thức Cú pháp của lệnh gán:Cú pháp của lệnh gán: <tên biến> = <biểu thức>;<tên biến> = <biểu thức>; VD:VD: x = -10;x = -10; m = y + 2 – m;m = y + 2 – m; Trong C cho phép người sử dụng được gộp lệnh gánTrong C cho phép người sử dụng được gộp lệnh gán theo cú pháp :theo cú pháp : a = b = c = 7;a = b = c = 7;
  • 29. 29Ngôn ngữ lập trình C Phép toán tăng gi mảPhép toán tăng gi mả  Toán t + + : dùng đ tăng giá tr c a các bi n nguyênử ể ị ủ ếToán t + + : dùng đ tăng giá tr c a các bi n nguyênử ể ị ủ ế hay bi n th cế ựhay bi n th cế ự  Toán t - - dùng đ gi m giá tr c a bi n nguyên hay bi nử ể ả ị ủ ế ếToán t - - dùng đ gi m giá tr c a bi n nguyên hay bi nử ể ả ị ủ ế ế th cựth cự  Toán t + + và -- đ u có th đ ng tr c ho c sau toánử ề ể ứ ướ ặToán t + + và -- đ u có th đ ng tr c ho c sau toánử ề ể ứ ướ ặ h ngạh ngạ  VD: + + n ; n+ +; --m ; m--;VD: + + n ; n+ +; --m ; m--;  Khi các toán t + +, -- đ ng tr c toán h ng thì giá trử ứ ướ ạ ịKhi các toán t + +, -- đ ng tr c toán h ng thì giá trử ứ ướ ạ ị c a toán h ng đ c tăng ho c gi m tr c khi s d ng vàủ ạ ượ ặ ả ướ ử ục a toán h ng đ c tăng ho c gi m tr c khi s d ng vàủ ạ ượ ặ ả ướ ử ụ ng c l i n u toán t ++, -- đ ng sau toán h ng thì toánượ ạ ế ử ứ ạng c l i n u toán t ++, -- đ ng sau toán h ng thì toánượ ạ ế ử ứ ạ h ng đ c tăng hay gi m sau khi th c hi nạ ượ ả ự ệh ng đ c tăng hay gi m sau khi th c hi nạ ượ ả ự ệ
  • 30. 30Ngôn ngữ lập trình C Chuy n đ i ki u giá trể ổ ể ịChuy n đ i ki u giá trể ổ ể ị Vi c chuy n đ i ki u giá tr trong C th ng di n ra tệ ể ổ ể ị ườ ễ ựVi c chuy n đ i ki u giá tr trong C th ng di n ra tệ ể ổ ể ị ườ ễ ự đ ng trong tr ng h p sau:ộ ườ ợđ ng trong tr ng h p sau:ộ ườ ợ  Trong bi u th c có các toán h ng khác ki uể ứ ạ ểTrong bi u th c có các toán h ng khác ki uể ứ ạ ể  Khi gán m t giá tr ki u này cho m t giá tr ki u khácộ ị ể ộ ị ểKhi gán m t giá tr ki u này cho m t giá tr ki u khácộ ị ể ộ ị ể  Ngoài ra ta có th dùng phép chuy n ki u đ ép ki u dể ể ể ể ể ữNgoài ra ta có th dùng phép chuy n ki u đ ép ki u dể ể ể ể ể ữ li u sang ki u khácệ ểli u sang ki u khácệ ể (type) bi u_th cể ứ(type) bi u_th cể ứ Chú ý:Chú ý: -- Khi chuy n đ i ki u t ng bi u th c thì đ i v i toán h ngể ổ ể ỏ ể ứ ố ớ ạKhi chuy n đ i ki u t ng bi u th c thì đ i v i toán h ngể ổ ể ỏ ể ứ ố ớ ạ có ki u th p h n s đ c nâng thành ki u cao h n tr cể ấ ơ ẽ ượ ể ơ ượcó ki u th p h n s đ c nâng thành ki u cao h n tr cể ấ ơ ẽ ượ ể ơ ượ khi ht c hi n phép toán và k t qu thu đ c s có k tự ệ ế ả ượ ẽ ếkhi ht c hi n phép toán và k t qu thu đ c s có k tự ệ ế ả ượ ẽ ế qu theo ki u cao h nả ể ơqu theo ki u cao h nả ể ơ
  • 31. 31Ngôn ngữ lập trình C  Ki u int và ki u long thì int ----> longể ểKi u int và ki u long thì int ----> longể ể  int và float thì int ---> floatint và float thì int ---> float  Float và double thì float -----> doubleFloat và double thì float -----> double  Ki u int có th chuy n thành float và ng c l iể ể ể ượ ạKi u int có th chuy n thành float và ng c l iể ể ể ượ ạ
  • 32. 32Ngôn ngữ lập trình C I.I. Hàm xuất nhập chuẩn trong thư viện <stdio.h>Hàm xuất nhập chuẩn trong thư viện <stdio.h>  Hàm đưa kết quả ra màn hìnhHàm đưa kết quả ra màn hình Cú phápCú pháp:: printf(<dòng điểu khiển>, bt1, bt2,...btk);printf(<dòng điểu khiển>, bt1, bt2,...btk); Ý nghĩaÝ nghĩa:: bt1,...btk : là k biểu thức cần in kết quả ra màn hìnhbt1,...btk : là k biểu thức cần in kết quả ra màn hình <dòng điểu khiển> là một hằng xâu ký tự bao gồm 3 loại:<dòng điểu khiển> là một hằng xâu ký tự bao gồm 3 loại: - Ký tự diều khiển việc xuống dòng tiếp theo ‘n’Ký tự diều khiển việc xuống dòng tiếp theo ‘n’ - Ký tự hiển thị: là ký tự được in ra màn hìnhKý tự hiển thị: là ký tự được in ra màn hình - Ký tự mô tả cách đưa ra màn hình của các biến(đặc tảKý tự mô tả cách đưa ra màn hình của các biến(đặc tả của kiểu). Mỗi biểu thức có đặc tả tương ứngcủa kiểu). Mỗi biểu thức có đặc tả tương ứng Bài 3Bài 3 Các hàm vào ra dữ liệuCác hàm vào ra dữ liệu
  • 33. 33Ngôn ngữ lập trình C  Đ c t ki u nguyên đ i v i bi u th c có giá tr ki u sặ ả ể ố ớ ể ứ ị ể ốĐ c t ki u nguyên đ i v i bi u th c có giá tr ki u sặ ả ể ố ớ ể ứ ị ể ố nguyênnguyên %[n]d%[n]d . Trong đó. Trong đó n là s nguyên xác đ nh đ r ng t i thi u dành cho giáố ị ộ ộ ố ển là s nguyên xác đ nh đ r ng t i thi u dành cho giáố ị ộ ộ ố ể tr bi u th c in ra màn hìnhị ể ứtr bi u th c in ra màn hìnhị ể ứ  Đ c t ki u s th cặ ả ể ố ựĐ c t ki u s th cặ ả ể ố ự %[n][.m]f.%[n][.m]f. Trong đóTrong đó m là s ch s sau d u ph y, n là m t s nguyên xácố ữ ố ấ ẩ ộ ốm là s ch s sau d u ph y, n là m t s nguyên xácố ữ ố ấ ẩ ộ ố đ nh đ r ng t i thi u trên màn hình cho giá tr c a bi uị ộ ộ ố ể ị ủ ểđ nh đ r ng t i thi u trên màn hình cho giá tr c a bi uị ộ ộ ố ể ị ủ ể th c:ứth c:ứ VD:VD:
  • 34. 34Ngôn ngữ lập trình C  %c : in một ký tự có mã ASCII tương ứng%c : in một ký tự có mã ASCII tương ứng  %[n]d : in một số nguyên với chiều dài tối thiểu là n%[n]d : in một số nguyên với chiều dài tối thiểu là n  %[n]ld: in một số nguyên (long int)%[n]ld: in một số nguyên (long int)  %[n.m]f : in một số thực vối chiều dài n và lấy m số thập%[n.m]f : in một số thực vối chiều dài n và lấy m số thập phânphân  %s : in ra chuỗi ký tự%s : in ra chuỗi ký tự
  • 35. 35Ngôn ngữ lập trình C  Hàm hi n th m t xâu ký t ra màn hìnhể ị ộ ựHàm hi n th m t xâu ký t ra màn hìnhể ị ộ ự Cú pháp:Cú pháp: int puts(char *s);int puts(char *s); Ý nghĩa:Ý nghĩa: Hi n th m t xâu ký t s lên màn hình, sau khi inể ị ộ ựHi n th m t xâu ký t s lên màn hình, sau khi inể ị ộ ự xong thì con tr s đ c chuy n xu ng dòng. Trong đó sỏ ẽ ượ ể ốxong thì con tr s đ c chuy n xu ng dòng. Trong đó sỏ ẽ ượ ể ố là con tr ki u char tr t i vùng ch a xâu ký tỏ ể ỏ ớ ứ ựlà con tr ki u char tr t i vùng ch a xâu ký tỏ ể ỏ ớ ứ ự  Hàm đ a m t ký t ra màn hìnhư ộ ựHàm đ a m t ký t ra màn hìnhư ộ ự Cú phápCú pháp:: int putchar(int ch);int putchar(int ch); Ý nghĩaÝ nghĩa: Hàm s ký t ch ra màn hình v i ch là mã c a lýẽ ự ớ ủ: Hàm s ký t ch ra màn hình v i ch là mã c a lýẽ ự ớ ủ t c n inự ầt c n inự ầ
  • 36. 36Ngôn ngữ lập trình C  Hàm nh n d li u t bàn phímậ ữ ệ ừHàm nh n d li u t bàn phímậ ữ ệ ừ Cú pháp:Cú pháp: scanf(“dt1dt2..dtk”, &bi n1,ếscanf(“dt1dt2..dtk”, &bi n1,ế ...&bi nk);ế...&bi nk);ế Ý nghĩa:Ý nghĩa:  dt1,...dtk là m t h ng xâu ký t đ c t c a k bi nộ ằ ự ặ ả ủ ếdt1,...dtk là m t h ng xâu ký t đ c t c a k bi nộ ằ ự ặ ả ủ ế  &bi n1, ..&bi nk: là đ a ch c a bi n trong b nhế ế ị ỉ ủ ế ộ ớ&bi n1, ..&bi nk: là đ a ch c a bi n trong b nhế ế ị ỉ ủ ế ộ ớ  Hàm nh n t bàn phím m t xâu ký tậ ừ ộ ựHàm nh n t bàn phím m t xâu ký tậ ừ ộ ự Cú pháp:Cú pháp: int *getchar(char *s);int *getchar(char *s); Ý nghĩa:Ý nghĩa:  Hàm nh n dãy ký t t bàn phím vào cho đ n khi g pậ ự ừ ế ặHàm nh n dãy ký t t bàn phím vào cho đ n khi g pậ ự ừ ế ặ ký t ‘n’ thì d ng l iự ừ ạký t ‘n’ thì d ng l iự ừ ạ  s là con tr tr t i vùng nh s ch a xâu v a nh nỏ ỏ ớ ớ ẽ ứ ừ ậs là con tr tr t i vùng nh s ch a xâu v a nh nỏ ỏ ớ ớ ẽ ứ ừ ậ
  • 37. 37Ngôn ngữ lập trình C  Hàm nh n m t ký t t bàn phímậ ộ ự ừHàm nh n m t ký t t bàn phímậ ộ ự ừ Cú phápCú pháp:: getchar(void);getchar(void); Ý nghĩa:Ý nghĩa: nh n ký t đ c nh p t bàn phímậ ự ượ ậ ừnh n ký t đ c nh p t bàn phímậ ự ượ ậ ừ
  • 38. 38Ngôn ngữ lập trình C II. Hàm xu t nh p chu n trong th vi n <conio.h>ấ ậ ẩ ư ệII. Hàm xu t nh p chu n trong th vi n <conio.h>ấ ậ ẩ ư ệ  Hàm getch() và getcheHàm getch() và getche Cú phápCú pháp :: int getch( void )int getch( void ) int getche( void )int getche( void ) - Hai hàm trên ch nh n m t ký t tr c ti p t bờ ậ ộ ự ự ế ừ ộ- Hai hàm trên ch nh n m t ký t tr c ti p t bờ ậ ộ ự ự ế ừ ộ đ mệđ mệ bbàn phím. N u bế ộàn phím. N u bế ộ đ m r ng thệ ỗđ m r ng thệ ỗ ì ch . Khi m t phímờ ộì ch . Khi m t phímờ ộ đ c n thượ ấđ c n thượ ấ ì nh n ngay ký tậ ựì nh n ngay ký tậ ự đó mđó mà không c n ph iầ ảà không c n ph iầ ả enter nh các hàm nh p t stdio.hư ậ ừenter nh các hàm nh p t stdio.hư ậ ừ -- Hàm getche() cho hi n ký t lên màn hình còn getch() thìệ ựHàm getche() cho hi n ký t lên màn hình còn getch() thìệ ự khôngkhông - K t qu tr v c a hàm là ký tế ả ả ề ủ ự- K t qu tr v c a hàm là ký tế ả ả ề ủ ự đ c n trên bàn phím.ượ ấđ c n trên bàn phím.ượ ấ
  • 39. 39Ngôn ngữ lập trình C  Xu t ký t có màuấ ựXu t ký t có màuấ ự Cú phápCú pháp :: cprintfcprintf Ý nghĩaÝ nghĩa: in ra ký t có màuự: in ra ký t có màuự đ c n đ nh b i hượ ấ ị ởđ c n đ nh b i hượ ấ ị ở àmàm textcolor.textcolor.  Nh p ký t có màuậ ựNh p ký t có màuậ ự Cú pháp:Cú pháp: cscanfcscanf Ý nghĩa:Ý nghĩa: + N i dung nh p có màuộ ậ+ N i dung nh p có màuộ ậ đ c n đ nh b i hượ ấ ị ởđ c n đ nh b i hượ ấ ị ở àmàm textcolortextcolor + Nh n n i dung tr c ti p t bậ ộ ự ế ừ ộ+ Nh n n i dung tr c ti p t bậ ộ ự ế ừ ộ đ m bệđ m bệ àn phím. Vìàn phím. Vì v y v i hàm cscanf ta cũng ph i kh ký t n trongậ ớ ả ử ựv y v i hàm cscanf ta cũng ph i kh ký t n trongậ ớ ả ử ự bộbộ đ m b ng %*c ho c b ng hệ ằ ặ ằđ m b ng %*c ho c b ng hệ ằ ặ ằ àm getch()àm getch()
  • 40. 40Ngôn ngữ lập trình C III.M t s hàm thao tác trên màn hìnhộ ốIII.M t s hàm thao tác trên màn hìnhộ ố  Hàm xóa màn hình:Hàm xóa màn hình: clrscr();clrscr(); Có tác d ng xóa toàn b m àn hình và sau khi xóa conụ ộCó tác d ng xóa toàn b m àn hình và sau khi xóa conụ ộ tr s v trí góc phía bên trái.ỏ ẽ ở ịtr s v trí góc phía bên trái.ỏ ẽ ở ị  HàmHàm đ t t a đ con tr :ặ ọ ộ ỏđ t t a đ con tr :ặ ọ ộ ỏ gotoxy(int x, int y);gotoxy(int x, int y); Đ t con tr t i v trí x, yặ ỏ ạ ịĐ t con tr t i v trí x, yặ ỏ ạ ị  HàmHàm đ t m u n n textbackgroundặ ầ ềđ t m u n n textbackgroundặ ầ ề void textbackground(int color);void textbackground(int color); Đ t m u n nặ ầ ềĐ t m u n nặ ầ ề Color là m t bi u th c nguyên có giáộ ể ứColor là m t bi u th c nguyên có giáộ ể ứ tr t 0ị ừtr t 0ị ừ đ n 7 t ng ng v i m t trong 8 h ng sế ươ ứ ớ ộ ằ ốđ n 7 t ng ng v i m t trong 8 h ng sế ươ ứ ớ ộ ằ ố mmàuàu đ u tiầđ u tiầ ên c a b ng m u vủ ả ầên c a b ng m u vủ ả ầ ăn b n.ảăn b n.ả
  • 41. 41Ngôn ngữ lập trình C  HàmHàm đ t m u ch textcolorặ ầ ữđ t m u ch textcolorặ ầ ữ void textcolor(int newColor);void textcolor(int newColor); L a ch n mự ọL a ch n mự ọ àu ký t m i newColor.Trong đó newColor làự ớàu ký t m i newColor.Trong đó newColor làự ớ m t bi u th c nguyên có giá tr t 0ộ ể ứ ị ừm t bi u th c nguyên có giá tr t 0ộ ể ứ ị ừ đ n 15 t ng ngế ươ ứđ n 15 t ng ngế ươ ứ v i m t trong các h ng s mớ ộ ằ ốv i m t trong các h ng s mớ ộ ằ ố àu c a b ng m u vủ ả ầàu c a b ng m u vủ ả ầ ăn b n.ảăn b n.ả
  • 42. 42Ngôn ngữ lập trình C Bài 4: Cấu trúc điều khiểnBài 4: Cấu trúc điều khiển  CCâu l nh, kh i l nhệ ố ệâu l nh, kh i l nhệ ố ệ  CCâu l nhệâu l nhệ : mỗi c: mỗi câuâu lệnh thực hiện một công việc vàlệnh thực hiện một công việc và được kết thúc bởi dấu ;được kết thúc bởi dấu ;  KhKh i l nhố ệi l nhố ệ : là tập hợp các c: là tập hợp các câuâu lệnh bắt đầu bằng dấulệnh bắt đầu bằng dấu “{“ và kết thúc bằng dấu “}”“{“ và kết thúc bằng dấu “}”
  • 43. 43Ngôn ngữ lập trình C I. C u trúc đi u khi n ifấ ề ểI. C u trúc đi u khi n ifấ ề ể 11. C u trúc if d ng 1ấ ạ. C u trúc if d ng 1ấ ạ Cú pháp:Cú pháp: if (bt)if (bt) s ;s ; Ý nghĩa: bt là bi u th c lôgic, s là l nh đ n ho c l nhể ứ ệ ơ ặ ệÝ nghĩa: bt là bi u th c lôgic, s là l nh đ n ho c l nhể ứ ệ ơ ặ ệ ph c. n u bt nhân giá tr true thì th c hi n s, ng c l i sứ ế ị ự ệ ượ ạph c. n u bt nhân giá tr true thì th c hi n s, ng c l i sứ ế ị ự ệ ượ ạ đ c b quaượ ỏđ c b quaượ ỏ 2. C u trúc if d ng 2ấ ạ2. C u trúc if d ng 2ấ ạ Cú pháp:Cú pháp: if(bt)if(bt) s;s; elseelse s1 ;s1 ; Ý nghĩa: bt là bi u th c lôgic, n u bt nh n giá tr true thìể ứ ế ậ ịÝ nghĩa: bt là bi u th c lôgic, n u bt nh n giá tr true thìể ứ ế ậ ị th c hi n s b qua s1, ng c l i n u bt nh n giá tr flaseự ệ ỏ ượ ạ ế ậ ịth c hi n s b qua s1, ng c l i n u bt nh n giá tr flaseự ệ ỏ ượ ạ ế ậ ị thì th c hi n s1 b qua s(s và s1 có th là l nh đ n ho cự ệ ỏ ể ệ ơ ặthì th c hi n s1 b qua s(s và s1 có th là l nh đ n ho cự ệ ỏ ể ệ ơ ặ l nh ph c)ệ ứl nh ph c)ệ ứ
  • 44. 44Ngôn ngữ lập trình C  Chú ý : trong C cho phép s d ng các c u trúc if l ngử ụ ấ ồChú ý : trong C cho phép s d ng các c u trúc if l ngử ụ ấ ồ nhau đ gi i quy t bài toánể ả ếnhau đ gi i quy t bài toánể ả ế 3. Bài t pậ3. Bài t pậ -- Nh p 2 s th c a, b t bàn phím. Tìm và in ra màn hìnhậ ố ự ừNh p 2 s th c a, b t bàn phím. Tìm và in ra màn hìnhậ ố ự ừ s l n nh t và s bé nh tố ớ ấ ố ấs l n nh t và s bé nh tố ớ ấ ố ấ - Gi i h ph ng trình b c nh t hai n sả ệ ươ ậ ấ ẩ ốGi i h ph ng trình b c nh t hai n sả ệ ươ ậ ấ ẩ ố ax + by = cax + by = c dx + ey = fdx + ey = f
  • 45. 45Ngôn ngữ lập trình C II. C u trúc r nhánh switchấ ẽII. C u trúc r nhánh switchấ ẽ 1. C u trúc t ng quátấ ổ1. C u trúc t ng quátấ ổ Cú pháp:Cú pháp: switch (bt)switch (bt) {{ case n1 : s1case n1 : s1 case n2 : s2case n2 : s2 ........ case nk : skcase nk : sk [default : s(k+1 )][default : s(k+1 )] }}
  • 46. 46Ngôn ngữ lập trình C Ý nghĩa:Ý nghĩa:  Bt: là bi u th c toán h c có giá tr ki u nguyênể ứ ọ ị ểBt: là bi u th c toán h c có giá tr ki u nguyênể ứ ọ ị ể  Ni(i=1..k): là các s ki u nguyên, ki u h ng ký t , ho cố ể ể ằ ự ặNi(i=1..k): là các s ki u nguyên, ki u h ng ký t , ho cố ể ể ằ ự ặ bi u th cể ứbi u th cể ứ  Si(i=1..k): là các l nh đ n ho c l nh ph cệ ơ ặ ệ ứSi(i=1..k): là các l nh đ n ho c l nh ph cệ ơ ặ ệ ứ  [default : s(k+1 )] : là ph n tuỳ ch n có th có ho cầ ọ ể ặ[default : s(k+1 )] : là ph n tuỳ ch n có th có ho cầ ọ ể ặ khôngkhông
  • 47. 47Ngôn ngữ lập trình C Ho t đ ng: l nh switch ph thu c vào giá tr c a bi uạ ộ ệ ụ ộ ị ủ ểHo t đ ng: l nh switch ph thu c vào giá tr c a bi uạ ộ ệ ụ ộ ị ủ ể th c bt vi t sau switch, n u:ứ ế ếth c bt vi t sau switch, n u:ứ ế ế  Giá tr bt = ni thì th c hi n câu l nh sau case ni;ị ự ệ ệGiá tr bt = ni thì th c hi n câu l nh sau case ni;ị ự ệ ệ  Khi giá tr bi u th c khác t t c các ni thì th c hi n câuị ể ứ ấ ả ự ệKhi giá tr bi u th c khác t t c các ni thì th c hi n câuị ể ứ ấ ả ự ệ l nh sau default n u có, ho c thoát kh i câu l nhệ ế ặ ỏ ệl nh sau default n u có, ho c thoát kh i câu l nhệ ế ặ ỏ ệ switch.switch.  Khi ch ng trìnhươKhi ch ng trìnhươ đđã th c hi n xong câu l nh c a caseự ệ ệ ủã th c hi n xong câu l nh c a caseự ệ ệ ủ ni nàoni nào đó thđó thì nó s th c hi n luôn các l nh thu c caseẽ ự ệ ệ ộì nó s th c hi n luôn các l nh thu c caseẽ ự ệ ệ ộ bên d i nó mà không xét l iướ ạbên d i nó mà không xét l iướ ạ đi u ki n ( do các ni cònề ệđi u ki n ( do các ni cònề ệ đ c xem nh các nhượ ưđ c xem nh các nhượ ư ãn). Vì v y,ậãn). Vì v y,ậ đ ch ng trể ươđ ch ng trể ươ ình thoátình thoát kh i l nh switch sau khi th c hi n xong m t tr ngỏ ệ ự ệ ộ ườkh i l nh switch sau khi th c hi n xong m t tr ngỏ ệ ự ệ ộ ườ h p, ta dùng l nh break.ợ ệh p, ta dùng l nh break.ợ ệ
  • 48. 48Ngôn ngữ lập trình C 3. Bài t pậ3. Bài t pậ -- Vi t ch ng trình nh p vào t bàn phím m t mãế ươ ậ ừ ộVi t ch ng trình nh p vào t bàn phím m t mãế ươ ậ ừ ộ s nguyên và đ a ra đánh gía trình đ theo yêu c u:ố ư ộ ầs nguyên và đ a ra đánh gía trình đ theo yêu c u:ố ư ộ ầ  1:1: trình đ s c pộ ơ ấtrình đ s c pộ ơ ấ  2 : trình đ trung c pộ ấ2 : trình đ trung c pộ ấ  3: trình đ Đ i h cộ ạ ọ3: trình đ Đ i h cộ ạ ọ  4: trình đ Cao h cộ ọ4: trình đ Cao h cộ ọ  5: trình đ Ti n sộ ế ỹ5: trình đ Ti n sộ ế ỹ  Các s khác: Không xác đ nhố ịCác s khác: Không xác đ nhố ị -- Cho m t s t nhiên, in ra màn hình tên g i c a sộ ố ự ọ ủ ốCho m t s t nhiên, in ra màn hình tên g i c a sộ ố ự ọ ủ ố lên màn hình(Bài s 12)ốlên màn hình(Bài s 12)ố
  • 49. 49Ngôn ngữ lập trình C III. Câu l nh l p forệ ặIII. Câu l nh l p forệ ặ 1. Cú pháp:1. Cú pháp: for(<bt1> ; <bt2> ; <bt3>)for(<bt1> ; <bt2> ; <bt3>) S ;S ; Ý nghĩa:Ý nghĩa:  S là l nh đ n ho c l nh ph cệ ơ ặ ệ ứS là l nh đ n ho c l nh ph cệ ơ ặ ệ ứ  bt1 : th ng là m t l nh gán kh i t o cho bi n đi uườ ộ ệ ở ạ ế ềbt1 : th ng là m t l nh gán kh i t o cho bi n đi uườ ộ ệ ở ạ ế ề khi nểkhi nể  bt2: là bi u th c logic, giá tr c a bi u th c lôgic nàyể ứ ị ủ ể ứbt2: là bi u th c logic, giá tr c a bi u th c lôgic nàyể ứ ị ủ ể ứ quy t đ nh vòng l p ti p t c hay k t thúcế ị ặ ế ụ ếquy t đ nh vòng l p ti p t c hay k t thúcế ị ặ ế ụ ế  bt3: th ng là l nh gán có tác d ng làm thay đ i giá trườ ệ ụ ổ ịbt3: th ng là l nh gán có tác d ng làm thay đ i giá trườ ệ ụ ổ ị c a bi n đi u khi nủ ế ề ểc a bi n đi u khi nủ ế ề ể
  • 50. 50Ngôn ngữ lập trình C Hoạt động:Hoạt động:  Bước 1: Thực hiện bt1Bước 1: Thực hiện bt1  Bước 2: Tính toán, xác định giá trị của bt2Bước 2: Tính toán, xác định giá trị của bt2  Bước 3: Nếu bt2 có giá trị false thì thoát khỏi vòng lặp.Bước 3: Nếu bt2 có giá trị false thì thoát khỏi vòng lặp. Ngược lại bt2 có giá trị true thì s được thực hiệnNgược lại bt2 có giá trị true thì s được thực hiện  Bước 4: sau khi thực hiện s thực hiện bt3 và quay lạiBước 4: sau khi thực hiện s thực hiện bt3 và quay lại bước 2bước 2 Nhận xét:Nhận xét:  <t1> chỉ được thực hiện duy nhất một lần khi bắt đầu<t1> chỉ được thực hiện duy nhất một lần khi bắt đầu vòng lặpvòng lặp  <bt2>, <bt3> và S có thể được tính toán và thực hiện lặp<bt2>, <bt3> và S có thể được tính toán và thực hiện lặp nhiều lầnnhiều lần
  • 51. 51Ngôn ngữ lập trình C Chú ý khi s d ng vòng l p forử ụ ặChú ý khi s d ng vòng l p forử ụ ặ  <bt1>, <bt2>, <bt3> đ u có th v ng m t nh ng v nề ể ắ ặ ư ẫ<bt1>, <bt2>, <bt3> đ u có th v ng m t nh ng v nề ể ắ ặ ư ẫ ph i gi l i d u ( ; )ả ữ ạ ấph i gi l i d u ( ; )ả ữ ạ ấ  Tr ng h p đ c bi t <bt2> không có thì luôn đ c xemườ ợ ặ ệ ượTr ng h p đ c bi t <bt2> không có thì luôn đ c xemườ ợ ặ ệ ượ là nh n giá tr true, mu n thoát kh i vòng l p ph i dùngậ ị ố ỏ ặ ảlà nh n giá tr true, mu n thoát kh i vòng l p ph i dùngậ ị ố ỏ ặ ả l nh break, goto ho c returnệ ặl nh break, goto ho c returnệ ặ  Có th dùng c u trúc các vòng for l ng nhauể ấ ồCó th dùng c u trúc các vòng for l ng nhauể ấ ồ  Khi g p l nh break thì ch ng trình s thoát kh i vòngặ ệ ươ ẽ ỏKhi g p l nh break thì ch ng trình s thoát kh i vòngặ ệ ươ ẽ ỏ for sâu nh t còn ch a l nh breakấ ứ ệfor sâu nh t còn ch a l nh breakấ ứ ệ  Trong vòng for có th s d ng l nh continue đ chuy nể ử ụ ệ ể ểTrong vòng for có th s d ng l nh continue đ chuy nể ử ụ ệ ể ể t i chu trình m i c a vòng l pớ ớ ủ ặt i chu trình m i c a vòng l pớ ớ ủ ặ
  • 52. 52Ngôn ngữ lập trình C 2.2. Bài t pậBài t pậ  Vi t ch ng trình tính t ng c a n sế ươ ổ ủ ốVi t ch ng trình tính t ng c a n sế ươ ổ ủ ố đ u tiầđ u tiầ ên c a dãy sủ ốên c a dãy sủ ố sau:sau: S = 1+1/2+1/3+1/4+...+1/n.S = 1+1/2+1/3+1/4+...+1/n.  Vi t ch ng trình tìm t t c các s nguyên có ba ch sế ươ ấ ả ố ữ ốVi t ch ng trình tìm t t c các s nguyên có ba ch sế ươ ấ ả ố ữ ố sao cho t ng tam th a c a ba ch s hàng trổ ừ ủ ữ ốsao cho t ng tam th a c a ba ch s hàng trổ ừ ủ ữ ố ăm, hăm, hàngàng ch c, hàngụch c, hàngụ đ n vơđ n vơ s b ng s nguyênị ẽ ằ ốs b ng s nguyênị ẽ ằ ố đó. Ví d :ụđó. Ví d :ụ 1133 +5+533 +3+333 =153=153
  • 53. 53Ngôn ngữ lập trình C IV. Câu l nh whileệIV. Câu l nh whileệ 1.1. Cú pháp :Cú pháp : While (bt)While (bt) S;S; Ý nghĩaÝ nghĩa: bt là bi u th c lôgic, S là m t l nh ho c m tể ứ ộ ệ ặ ộ: bt là bi u th c lôgic, S là m t l nh ho c m tể ứ ộ ệ ặ ộ dãy l nhệdãy l nhệ Ho t đ ngạ ộHo t đ ngạ ộ - Xác đ nh giá tr c a bt. N u giá tr c a bt= true(<>0) thìị ị ủ ế ị ủXác đ nh giá tr c a bt. N u giá tr c a bt= true(<>0) thìị ị ủ ế ị ủ chuy n sang b c 2, ng c l i thì thoát kh i vòng l pể ướ ượ ạ ỏ ặchuy n sang b c 2, ng c l i thì thoát kh i vòng l pể ướ ượ ạ ỏ ặ - Th c hi n S sau đó quay v b c 1(L nh S có thự ệ ề ướ ệ ểTh c hi n S sau đó quay v b c 1(L nh S có thự ệ ề ướ ệ ể đ c th c hi n nhi u l n ho c không đ c th c hi nượ ự ệ ề ầ ặ ượ ự ệđ c th c hi n nhi u l n ho c không đ c th c hi nượ ự ệ ề ầ ặ ượ ự ệ l n nào n u bt =false ngay t đ u)ầ ế ừ ầl n nào n u bt =false ngay t đ u)ầ ế ừ ầ
  • 54. 54Ngôn ngữ lập trình C Chú ý : trong câu l nh l p while ta có th dùng câu l nhệ ặ ể ệChú ý : trong câu l nh l p while ta có th dùng câu l nhệ ặ ể ệ break đ thoát kh i vòng l p theo ý mu nể ỏ ặ ốbreak đ thoát kh i vòng l p theo ý mu nể ỏ ặ ố 2. Bài t p :ậ2. Bài t p :ậ - Nh p hai s nguyên t bàn phím, tìm và in ra màn hìnhậ ố ừNh p hai s nguyên t bàn phím, tìm và in ra màn hìnhậ ố ừ c s chung l n nh t c a hai sướ ố ơ ấ ủ ốc s chung l n nh t c a hai sướ ố ơ ấ ủ ố - Tìm hình ch nh t có di n tích l n nh t khi bi t chu viữ ậ ệ ớ ấ ếTìm hình ch nh t có di n tích l n nh t khi bi t chu viữ ậ ệ ớ ấ ế c a nó(bài s 25)ủ ốc a nó(bài s 25)ủ ố
  • 55. 55Ngôn ngữ lập trình C V. Câu l nh do.. whileệV. Câu l nh do.. whileệ 1.1. Cú phápCú pháp dodo SS while (bt);while (bt); Ý nghĩa: S là m t câu l nh đ n ho c ph c, bt là bi uộ ệ ơ ặ ứ ểÝ nghĩa: S là m t câu l nh đ n ho c ph c, bt là bi uộ ệ ơ ặ ứ ể th c lôgicứth c lôgicứ Ho t đ ng:ạ ộHo t đ ng:ạ ộ - (1) Th c hi n l nh Sự ệ ệ(1) Th c hi n l nh Sự ệ ệ - (2) Xác đ nh giá tr c a bt. N u giá tr c a bt = true thìị ị ủ ế ị ủ(2) Xác đ nh giá tr c a bt. N u giá tr c a bt = true thìị ị ủ ế ị ủ chuy n sang b c (1), ng c l i thì thoát kh i vòngể ướ ượ ạ ỏchuy n sang b c (1), ng c l i thì thoát kh i vòngể ướ ượ ạ ỏ l pặl pặ - L nh S luôn đ c th c hi n ít nh t 1 l n trong câuệ ượ ự ệ ấ ầL nh S luôn đ c th c hi n ít nh t 1 l n trong câuệ ượ ự ệ ấ ầ l nhệl nhệ
  • 56. 56Ngôn ngữ lập trình C Bài 5: Dữ liệu kiểu mảngBài 5: Dữ liệu kiểu mảng 1.1. Khái niệm:Khái niệm:  Mảng được hiểu là một tập hợp các giá trị cóMảng được hiểu là một tập hợp các giá trị có cùng kiểu dữ liệu nằm liên tiếp nhau trong bộcùng kiểu dữ liệu nằm liên tiếp nhau trong bộ nhớ máy tínhnhớ máy tính  Mảng được coi như một biến mảng và tênMảng được coi như một biến mảng và tên mảng được đặt theo quy tắc đặt tên biếnmảng được đặt theo quy tắc đặt tên biến  Mảng có những thành phần sau:Mảng có những thành phần sau:  Kiểu dữ liệu của các phần tử trong mảngKiểu dữ liệu của các phần tử trong mảng  Tên mảngTên mảng  Số chiều và kích thước của mỗi chiềuSố chiều và kích thước của mỗi chiều
  • 57. 57Ngôn ngữ lập trình C 2. Cách khai báo bi n m ngế ả2. Cách khai báo bi n m ngế ả <ki u_dl> <tên_m ng><ds các chi u c a m ng>ể ả ề ủ ả<ki u_dl> <tên_m ng><ds các chi u c a m ng>ể ả ề ủ ả VD:VD: int A[10];int A[10]; //m ng 1 chi u A g m 10 ph n t ki u s nguyênả ề ồ ầ ử ể ố//m ng 1 chi u A g m 10 ph n t ki u s nguyênả ề ồ ầ ử ể ố float B[2] [3];float B[2] [3]; // M ng 2 chi u B g m 2 hàng và 3 c t, các ph n t cóả ề ồ ộ ầ ử// M ng 2 chi u B g m 2 hàng và 3 c t, các ph n t cóả ề ồ ộ ầ ử ki u s th cể ố ựki u s th cể ố ự
  • 58. 58Ngôn ngữ lập trình C 3. Cách t ch c và truy xu t đ n ph n t m ngổ ứ ấ ế ầ ử ả3. Cách t ch c và truy xu t đ n ph n t m ngổ ứ ấ ế ầ ử ả  Ph n t c a m ng đ c xác đ nh thông qua ch s .ầ ử ủ ả ượ ị ỉ ốPh n t c a m ng đ c xác đ nh thông qua ch s .ầ ử ủ ả ượ ị ỉ ố Ch s c a ph n t trong m ng luôn là m t s nguyênỉ ố ủ ầ ử ả ộ ốCh s c a ph n t trong m ng luôn là m t s nguyênỉ ố ủ ầ ử ả ộ ố không v t qua kích th c c a m ngượ ướ ủ ảkhông v t qua kích th c c a m ngượ ướ ủ ả  Các ph n t c a m ng đ c s p x p li n nhau trongầ ử ủ ả ượ ắ ế ềCác ph n t c a m ng đ c s p x p li n nhau trongầ ử ủ ả ượ ắ ế ề b nh c a máy tính và ch cho phép truy c p đ n đ aộ ớ ủ ỉ ậ ế ịb nh c a máy tính và ch cho phép truy c p đ n đ aộ ớ ủ ỉ ậ ế ị ch tr c ti p c a ph n t đ i v i m ng m t chi u.ỉ ự ế ủ ầ ử ố ớ ả ộ ềch tr c ti p c a ph n t đ i v i m ng m t chi u.ỉ ự ế ủ ầ ử ố ớ ả ộ ề Cách truy c p theo đ a chậ ị ỉCách truy c p theo đ a chậ ị ỉ &tên_bi n[i]ế&tên_bi n[i]ế trong đó i là ch s c a ph n tỉ ố ủ ầ ửtrong đó i là ch s c a ph n tỉ ố ủ ầ ử  VD:VD: a= &a[0]a= &a[0] //Tên m ng ch t i đ a ch ph n t đ u tiên c a m ngả ỉ ớ ị ỉ ầ ử ầ ủ ả//Tên m ng ch t i đ a ch ph n t đ u tiên c a m ngả ỉ ớ ị ỉ ầ ử ầ ủ ả
  • 59. 59Ngôn ngữ lập trình C 4. Cách xu t nh p d li u trên m ngấ ậ ữ ệ ả4. Cách xu t nh p d li u trên m ngấ ậ ữ ệ ả - Nh p xu t tr c ti p ng d ng cho m ng m t chi u vàậ ấ ự ế ứ ụ ả ộ ềNh p xu t tr c ti p ng d ng cho m ng m t chi u vàậ ấ ự ế ứ ụ ả ộ ề m ng hai chi u có ph n t ki u int thông qua đ a chả ề ầ ử ể ị ỉm ng hai chi u có ph n t ki u int thông qua đ a chả ề ầ ử ể ị ỉ - Nh p d li u cho m ngậ ữ ệ ảNh p d li u cho m ngậ ữ ệ ả for( i=0;i<5;i++) {for( i=0;i<5;i++) { printf(“Phan tu thu %d= ”,i);printf(“Phan tu thu %d= ”,i); scanf(“%d”, &a[i]);scanf(“%d”, &a[i]); }} -- In các ph n t c a m ng ra màn hìnhầ ử ủ ảIn các ph n t c a m ng ra màn hìnhầ ử ủ ả for(i=0;i<n;i++) printf(“%6d”,a[i])for(i=0;i<n;i++) printf(“%6d”,a[i])
  • 60. 60Ngôn ngữ lập trình C - Nh p xu t d li u gián ti p thông qua m t bi n trungậ ấ ữ ệ ế ộ ếNh p xu t d li u gián ti p thông qua m t bi n trungậ ấ ữ ệ ế ộ ế gian đ i v i m ng m t chi u và m ng đa chi uố ớ ả ộ ề ả ềgian đ i v i m ng m t chi u và m ng đa chi uố ớ ả ộ ề ả ề for(i=0;i<2;i++)for(i=0;i<2;i++) for(j=0;j<3;j++) {for(j=0;j<3;j++) { printf(“a[%d,%d]”, i, j);printf(“a[%d,%d]”, i, j); scantf(“%f”,&temp);scantf(“%f”,&temp); a[i] [j] = temp;a[i] [j] = temp; }} - Bài t pậBài t pậ - Nh p vào t bàn phím n s nguyên, tìm và in ra mànậ ừ ốNh p vào t bàn phím n s nguyên, tìm và in ra mànậ ừ ố hình s nguyên l n nh t và s nguyên nh nh tố ớ ấ ố ỏ ấhình s nguyên l n nh t và s nguyên nh nh tố ớ ấ ố ỏ ấ - Nh p ma tr n các s th c kích th c n hàng và m c t.ậ ậ ố ự ướ ộNh p ma tr n các s th c kích th c n hàng và m c t.ậ ậ ố ự ướ ộ Tìm và in ra s th c l n nh t trong ma tr nố ự ớ ấ ậTìm và in ra s th c l n nh t trong ma tr nố ự ớ ấ ậ
  • 61. 61Ngôn ngữ lập trình C Bài 6: Con trỏBài 6: Con trỏ 1.1. Khái ni m con tr và đ a chệ ỏ ị ỉKhái ni m con tr và đ a chệ ỏ ị ỉ - Đ a ch : D a vào ki u d li u khi khai báo bi n máy sị ỉ ự ể ữ ệ ế ẽĐ a ch : D a vào ki u d li u khi khai báo bi n máy sị ỉ ự ể ữ ệ ế ẽ c p phát cho bi n m t đ a ch đ l u tr bi n đó trênấ ế ộ ị ỉ ể ư ữ ếc p phát cho bi n m t đ a ch đ l u tr bi n đó trênấ ế ộ ị ỉ ể ư ữ ế vùng nh . M i bi n có ki u khác nhau thì đ c l u vàoớ ỗ ế ể ượ ưvùng nh . M i bi n có ki u khác nhau thì đ c l u vàoớ ỗ ế ể ượ ư các đ a ch khác nhauị ỉcác đ a ch khác nhauị ỉ - Con tr là m t bi n dùng đ ch a đ a ch . M i lo i đ aỏ ộ ế ể ứ ị ỉ ỗ ạ ịCon tr là m t bi n dùng đ ch a đ a ch . M i lo i đ aỏ ộ ế ể ứ ị ỉ ỗ ạ ị ch thì có lo i con tr t ng ng. Tr c khi s d ngỉ ạ ỏ ươ ứ ướ ử ụch thì có lo i con tr t ng ng. Tr c khi s d ngỉ ạ ỏ ươ ứ ướ ử ụ bi n con tr ta ph i khai báo tr c khi s d ngế ỏ ả ướ ử ụbi n con tr ta ph i khai báo tr c khi s d ngế ỏ ả ướ ử ụ - Khai báo:Khai báo: <ki u_DL> * <tên_bi n_con_tr >;ể ế ỏ<ki u_DL> * <tên_bi n_con_tr >;ể ế ỏ - VD1:VD1: int x, y, *p, *c;int x, y, *p, *c; x, y là hai bi n ki u nguyên, p, c là hai bi n con tr ki uế ể ế ỏ ểx, y là hai bi n ki u nguyên, p, c là hai bi n con tr ki uế ể ế ỏ ể nguyênnguyên
  • 62. 62Ngôn ngữ lập trình C VD2:VD2: float *t, *d ;float *t, *d ; //Khai báo bi n con tr t và d có ki u th cế ỏ ể ự//Khai báo bi n con tr t và d có ki u th cế ỏ ể ự Bi n con tr đ c dùng theo hai tr ng h p sau:ế ỏ ượ ườ ợBi n con tr đ c dùng theo hai tr ng h p sau:ế ỏ ượ ườ ợ  Tên con tr ch đ nỏ ỉ ếTên con tr ch đ nỏ ỉ ế đ a ch c a bi n đ c l u trong conị ỉ ủ ế ượ ưđ a ch c a bi n đ c l u trong conị ỉ ủ ế ượ ư tr :ỏtr :ỏ float a,*p,*q;float a,*p,*q; p=&a; /* l u đ a ch c a bi n a vào con tr p */ư ị ỉ ủ ế ỏp=&a; /* l u đ a ch c a bi n a vào con tr p */ư ị ỉ ủ ế ỏ q= p; /* l u đ a ch trong p vào con tr q*/ư ị ỉ ỏq= p; /* l u đ a ch trong p vào con tr q*/ư ị ỉ ỏ
  • 63. 63Ngôn ngữ lập trình C  D ng khai báo c a con tr ch đ n giá tr l u t i vùngạ ủ ỏ ỉ ế ị ư ạD ng khai báo c a con tr ch đ n giá tr l u t i vùngạ ủ ỏ ỉ ế ị ư ạ nh mà con tr tr t i.ớ ỏ ỏ ớnh mà con tr tr t i.ớ ỏ ỏ ớ VD:VD: float x=5, y , z=20, *px, *pz;,*py;float x=5, y , z=20, *px, *pz;,*py; px=& x; /* khi đó *px = x =5*/px=& x; /* khi đó *px = x =5*/ pz=&z; /* *pz=z=20*/pz=&z; /* *pz=z=20*/ khi đó ba bi u th c sau là t ng đ ng:ể ứ ươ ươkhi đó ba bi u th c sau là t ng đ ng:ể ứ ươ ươ y=3*x+z;y=3*x+z; *py=3*x+z;*py=3*x+z; *py=3*(*px)+*pz;*py=3*(*px)+*pz;
  • 64. 64Ngôn ngữ lập trình C 2. Con tr và m ng m t chi uỏ ả ộ ề2. Con tr và m ng m t chi uỏ ả ộ ề Các ph n t c a m ng có th đ c xác đ nhầ ử ủ ả ể ượ ịCác ph n t c a m ng có th đ c xác đ nhầ ử ủ ả ể ượ ị thông qua con tr . Ta có khai báo :ỏthông qua con tr . Ta có khai báo :ỏ float a[10];float a[10]; //Khai báo m ng g m 10 ph n t ki u th cả ồ ầ ử ể ự//Khai báo m ng g m 10 ph n t ki u th cả ồ ầ ử ể ự Ta có tên m ng chính là m t h ng đ a ch tr t iả ộ ằ ị ỉ ỏ ớTa có tên m ng chính là m t h ng đ a ch tr t iả ộ ằ ị ỉ ỏ ớ đ a ch ph n t đ u tiên c a m ng vàị ỉ ầ ử ầ ủ ảđ a ch ph n t đ u tiên c a m ng vàị ỉ ầ ử ầ ủ ả aa t ng đ ng v i &a[0]ươ ươ ớt ng đ ng v i &a[0]ươ ươ ớ a+ia+i t ng đ ng v i &a[i]ươ ươ ớt ng đ ng v i &a[i]ươ ươ ớ *(a+i) t ng đ ng v iươ ươ ớ*(a+i) t ng đ ng v iươ ươ ớ a[i]a[i] V yậV yậ a[k] a[k+1]a[k-1] pa pa +ipa - i
  • 65. 65Ngôn ngữ lập trình C  Các cách vi t a[i], *(a+i), *(p+i), p[i] là t ng đ ngế ươ ươCác cách vi t a[i], *(a+i), *(p+i), p[i] là t ng đ ngế ươ ươ nhaunhau  VD: Nh p t bàn phím các ph n t c a m ng và tínhậ ừ ầ ử ủ ảVD: Nh p t bàn phím các ph n t c a m ng và tínhậ ừ ầ ử ủ ả t ng các ph n t đóổ ầ ửt ng các ph n t đóổ ầ ử
  • 66. 66Ngôn ngữ lập trình C #include<stdio.h>#include<stdio.h> #include<stdio.h>#include<stdio.h> void main()void main() {{ float a[5], s ; int i;float a[5], s ; int i; for(i=0;i<5;i++) {for(i=0;i<5;i++) { printf(“na[%d]= ”,i); scanf(“%f”,&a[i]); }printf(“na[%d]= ”,i); scanf(“%f”,&a[i]); } s=0;s=0; for (i=0;i<5;i++)for (i=0;i<5;i++) s+=a[i];s+=a[i]; printf(“n Tong =%8.2f”,s);printf(“n Tong =%8.2f”,s); getch();getch(); }} Ví dụ: Tro1Ví dụ: Tro1
  • 67. 67Ngôn ngữ lập trình C 3. Con trỏ với mảng nhiều chiều3. Con trỏ với mảng nhiều chiều Phép toán lấyPhép toán lấy địa chỉ nói chung không dđịa chỉ nói chung không dùngùng được đốiđược đối với các thvới các thành phần của mảng nhiều chiều (trừ trườngành phần của mảng nhiều chiều (trừ trường hợp mảng hai chiều các số nguyên).hợp mảng hai chiều các số nguyên). Ðể tính toán địa chỉ của thành phần a[i][j] chúng ta sửÐể tính toán địa chỉ của thành phần a[i][j] chúng ta sử dụng công thức sau :dụng công thức sau : (float *)a+i*n+j.(float *)a+i*n+j. a là một hằng con trỏ trỏ đến các dòng của một ma trâna là một hằng con trỏ trỏ đến các dòng của một ma trân hai chiều, vì vậyhai chiều, vì vậy a trỏ đến dòng thứ nhấta trỏ đến dòng thứ nhất a+1 trỏ đến dòng thứ haia+1 trỏ đến dòng thứ hai a+2 trỏ đến dòng thứ baa+2 trỏ đến dòng thứ ba
  • 68. 68Ngôn ngữ lập trình C  Ðể tính toánÐể tính toán được địa chỉ của phần tử ở dđược địa chỉ của phần tử ở dòng i cột jòng i cột j chúng ta phải dùng phép chuyểnchúng ta phải dùng phép chuyển đổi kiểu bắt buộc đốiđổi kiểu bắt buộc đối với a: (float * )avới a: (float * )a a là con trỏ trỏ đến thành phần a[0][0] của ma trận.a là con trỏ trỏ đến thành phần a[0][0] của ma trận. a[i][j] sẽ có địa chỉ là (float *a) +i*n+ja[i][j] sẽ có địa chỉ là (float *a) +i*n+j Xét VD nhập giá trị của ma trận hai chiều:Xét VD nhập giá trị của ma trận hai chiều: Tro2Tro2
  • 69. 69Ngôn ngữ lập trình C #include <stdio.h>#include <stdio.h> #include <stdio.h>#include <stdio.h> void main()void main() {{ float a[10][20];float a[10][20]; int i,j,n;int i,j,n; printf("Nhap vao kich thuoc ma tran n=");printf("Nhap vao kich thuoc ma tran n="); scanf("%n",&n);scanf("%n",&n); for(i=0;i<n;i++)for(i=0;i<n;i++) for(j=0;j<n;j++)for(j=0;j<n;j++) {{ printf("a[%d][%d] = ",i,j);printf("a[%d][%d] = ",i,j); scanf("%f",(float *)a+i*20+j);scanf("%f",(float *)a+i*20+j); }} getch();getch(); }}
  • 70. 70Ngôn ngữ lập trình C 4. Phép toán trên con trỏ4. Phép toán trên con trỏ - Phép gán: chỉ nên thực hiện trên các con trỏ có cùngPhép gán: chỉ nên thực hiện trên các con trỏ có cùng kiểu, khi thực hiện trên con trỏ phải thực hiện phép épkiểu, khi thực hiện trên con trỏ phải thực hiện phép ép kiểu:kiểu: Vd: int x;Vd: int x; char *p;char *p; p=(char*)(&x);p=(char*)(&x); - Phép tăng giảm địa chỉPhép tăng giảm địa chỉ VD: float x[30], *px;VD: float x[30], *px; px=&x[10];// p là con trỏ thực trỏ tới phần tử x[10]px=&x[10];// p là con trỏ thực trỏ tới phần tử x[10] px+i trỏ tới phần tử x[10+i]px+i trỏ tới phần tử x[10+i] px – i trỏ tới phần tử x[10-i]px – i trỏ tới phần tử x[10-i]
  • 71. 71Ngôn ngữ lập trình C - Phép so sánh: dùng so sánh các con trỏ cùng kiểu, giảPhép so sánh: dùng so sánh các con trỏ cùng kiểu, giả sử p1 và p2 là hai con trỏ kiểu float thì tồn tại phép sosử p1 và p2 là hai con trỏ kiểu float thì tồn tại phép so sánhsánh p1 < p2 // địa chỉ p1 trỏ tới thấp hơn địa chỉ p2 trỏ tớip1 < p2 // địa chỉ p1 trỏ tới thấp hơn địa chỉ p2 trỏ tới p1==p2p1==p2 5. Con trỏ kiểu void5. Con trỏ kiểu void Là con trỏ đặc biệt không có kiểu, nó có thể nhận bất kỳLà con trỏ đặc biệt không có kiểu, nó có thể nhận bất kỳ địa chỉ nào. Con trỏ kiểu void thường dùng làm đối đểđịa chỉ nào. Con trỏ kiểu void thường dùng làm đối để nhận bất kỳ địa chỉ nào thông qua phép ép kiểu trongnhận bất kỳ địa chỉ nào thông qua phép ép kiểu trong thân hàmthân hàm Các phép toán tăng giảm địa chỉ, so sánh không dùngCác phép toán tăng giảm địa chỉ, so sánh không dùng được con trỏ kiểu voidđược con trỏ kiểu void
  • 72. 72Ngôn ngữ lập trình C 6. Mảng con trỏ6. Mảng con trỏ Mảng con trỏ là một mảng mà mỗi phẩn tử của nó có thểMảng con trỏ là một mảng mà mỗi phẩn tử của nó có thể chứa một địa chỉ nào đó. Mảng con trỏ có nhiều kiểu,chứa một địa chỉ nào đó. Mảng con trỏ có nhiều kiểu, mỗi phẩn tử của mảng kiểu nào thì sẽ chứa địa chỉ kiểumỗi phẩn tử của mảng kiểu nào thì sẽ chứa địa chỉ kiểu tương ứng với nó. Mảng con trỏ được khai báo theo mẫutương ứng với nó. Mảng con trỏ được khai báo theo mẫu sau:sau: <kiểu Dl> *<tênmảng>[N]<kiểu Dl> *<tênmảng>[N] Khi gặp khai báo mảng con trỏ thì máy sẽ cấp phát NKhi gặp khai báo mảng con trỏ thì máy sẽ cấp phát N khoảng nhớ liên tiếp cho N phần tử tương ứng trongkhoảng nhớ liên tiếp cho N phần tử tương ứng trong mảngmảng Chú ý: Mảng con trỏ không dùng để lưu số liệu, trướcChú ý: Mảng con trỏ không dùng để lưu số liệu, trước khi sử dụng mảng con trỏ cần gán cho mỗi phần tử mộtkhi sử dụng mảng con trỏ cần gán cho mỗi phần tử một giá trị là địa chỉ của một biến hoặc của một phần tửgiá trị là địa chỉ của một biến hoặc của một phần tử trong mảngtrong mảng
  • 73. 73Ngôn ngữ lập trình C Bài 7: Hàm và chương trìnhBài 7: Hàm và chương trình 1.1. Khái niệmKhái niệm Chương trìnhChương trình:: Một chương trình C bao gồm một hoặcMột chương trình C bao gồm một hoặc nhiều hàm. Hàm main() là thành phần bắt buộc củanhiều hàm. Hàm main() là thành phần bắt buộc của chương trình. Chương trình bắtchương trình. Chương trình bắt đầu thực hiện từ câuđầu thực hiện từ câu lệnh đầu tilệnh đầu tiên của hàm main( ) choên của hàm main( ) cho đến khi gặp dấu }đến khi gặp dấu } cuối ccuối cùng của hàm này.ùng của hàm này. HàmHàm: Là một: Là một đoạn chương trđoạn chương trìnhình độc lập thực hiện trọnđộc lập thực hiện trọn vẹn một công việc rồi trả về một giá trị cho chươngvẹn một công việc rồi trả về một giá trị cho chương trtrình đã gọi nó.ình đã gọi nó. Đặc điểm của hàm:Đặc điểm của hàm:  Là mộtLà một đơn vị độc lập của chương trđơn vị độc lập của chương trình.ình.  Không cho phép xây dựng một hàm bên trong mộtKhông cho phép xây dựng một hàm bên trong một hàm kháchàm khác..
  • 75. 75Ngôn ngữ lập trình C 2. Quy tắc xây dựng hàm: Một hàm gồm có các thành phần2. Quy tắc xây dựng hàm: Một hàm gồm có các thành phần sausau - Nguyên mẫu của hàm:Nguyên mẫu của hàm: Bao gồmBao gồm <kiểu dl của hàm> <<kiểu dl của hàm> <tên hàmtên hàm(ds các tham số)>;(ds các tham số)>; Có thể có hoặc không khai báo nguyên mẫu của hàm,Có thể có hoặc không khai báo nguyên mẫu của hàm, khi không khai báo nguyên mẫu thì bộ biên dịch sẽkhi không khai báo nguyên mẫu thì bộ biên dịch sẽ kiểm tra việc truyền tham số, giá trị trả về có phù hợpkiểm tra việc truyền tham số, giá trị trả về có phù hợp hay không rồi mới cho thực hiện hàm.hay không rồi mới cho thực hiện hàm. Tất cả nguyên mẫu của các hàm có trong chương trìnhTất cả nguyên mẫu của các hàm có trong chương trình nênnên đặt trước hđặt trước hàm main()àm main()..
  • 76. 76Ngôn ngữ lập trình C  Ki u giá tr c a hàmể ị ủKi u giá tr c a hàmể ị ủ Giá tr tr v c a hàmị ả ề ủGiá tr tr v c a hàmị ả ề ủ đ c xác đ nh d a vượ ị ựđ c xác đ nh d a vượ ị ự ào m cụào m cụ đíchđích c a hủc a hủ àmàm. N u các hế. N u các hế àm không tr v giá tr ta ph i khaiả ề ị ảàm không tr v giá tr ta ph i khaiả ề ị ả báo ki u void.ểbáo ki u void.ể  Tên hàmTên hàm Ð t theo quiặÐ t theo quiặ đ nh đ i v i danh đ nhị ố ớ ịđ nh đ i v i danh đ nhị ố ớ ị . Tên hàm trong. Tên hàm trong nguyên m u và khi khai báo ph i gi ng nhau.ẫ ả ốnguyên m u và khi khai báo ph i gi ng nhau.ẫ ả ố  Tham s c a hàmố ủTham s c a hàmố ủ Khi vi t m t hàm ta ph i xácế ộ ảKhi vi t m t hàm ta ph i xácế ộ ả đ nh xem hịđ nh xem hị àm có bao nhiêuàm có bao nhiêu tham s ?ốtham s ?ố  N i dung c a hàmộ ủN i dung c a hàmộ ủ
  • 77. 77Ngôn ngữ lập trình C C u trúc c a m t hàmấ ủ ộC u trúc c a m t hàmấ ủ ộ <Ki u tr v ><Tên hàm>(<ds tham s hình th c hay đ iể ả ề ố ứ ố<Ki u tr v ><Tên hàm>(<ds tham s hình th c hay đ iể ả ề ố ứ ố s >)ốs >)ố {{ <Khai báo bi n c c b >;ế ụ ộ<Khai báo bi n c c b >;ế ụ ộ <Các câu l nh trong thân hàm>;ệ<Các câu l nh trong thân hàm>;ệ [return<bt tr v giá tr hàm>];ả ề ị[return<bt tr v giá tr hàm>];ả ề ị };}; Chú ý:Chú ý: - Đ i v i các hàm không có ki u tr v ta có hàm ki u voidố ớ ể ả ề ểĐ i v i các hàm không có ki u tr v ta có hàm ki u voidố ớ ể ả ề ể - Hàm không có đ i thì dùng ki u void đ khai báo đ i. VDố ể ể ốHàm không có đ i thì dùng ki u void đ khai báo đ i. VDố ể ể ố void bell(void)void bell(void) {{ int i;int i; for(i=0;i<10;i++) putch(7);for(i=0;i<10;i++) putch(7); }}
  • 78. 78Ngôn ngữ lập trình C  Cách sử dụng hàmCách sử dụng hàm: Hàm được sử dụng thông qua lời gọi: Hàm được sử dụng thông qua lời gọi hàm.hàm. <tên hàm> ([ds tham số thực])<tên hàm> ([ds tham số thực]) - Tham số thực phải bằng tham số hình thứcTham số thực phải bằng tham số hình thức - Kiểu của tham số thực phải phù hợp với kiểu của thamKiểu của tham số thực phải phù hợp với kiểu của tham số hình thứcsố hình thức  Hoạt động của hàm khi có lời gọi hàmHoạt động của hàm khi có lời gọi hàm  Cấp phát bộ nhớ cho tham số hình thức và biến cục bộCấp phát bộ nhớ cho tham số hình thức và biến cục bộ  Gán giá trị của tham số thực cho tham số hình thứcGán giá trị của tham số thực cho tham số hình thức  Thực hiện các lệnh trong thân hàmThực hiện các lệnh trong thân hàm  Khi gặp câu lệnh return hoặc dấu hiệu kết thúc hàm thìKhi gặp câu lệnh return hoặc dấu hiệu kết thúc hàm thì bộ nhớ sẽ xoá các tham số hình thức và biến cục bộ saubộ nhớ sẽ xoá các tham số hình thức và biến cục bộ sau đó thoát khỏi hàm quay về chương trình gọi hàmđó thoát khỏi hàm quay về chương trình gọi hàm
  • 79. 79Ngôn ngữ lập trình C 3. Các tham s trong hàmố3. Các tham s trong hàmố 3.13.1 Phân lo i tham s theo cách s d ngạ ố ử ụPhân lo i tham s theo cách s d ngạ ố ử ụ o Tham s hình th c: Các tham s mà ta ghi trong nguyênố ứ ốTham s hình th c: Các tham s mà ta ghi trong nguyênố ứ ố m u hay ghi lúc khai báo hàm g i là tham s hình th c.ẫ ọ ố ứm u hay ghi lúc khai báo hàm g i là tham s hình th c.ẫ ọ ố ứ o Tham s th c:Các giá tr , bi n mà ta ghi sau tên hàm khi g iố ự ị ế ọTham s th c:Các giá tr , bi n mà ta ghi sau tên hàm khi g iố ự ị ế ọ hàmhàm đó đ th c hi n g i lể ự ệ ọđó đ th c hi n g i lể ự ệ ọ à tham s th c. Trong C, cácố ựà tham s th c. Trong C, cácố ự tham s th c l i chia ra làm hai lo i:ố ự ạ ạtham s th c l i chia ra làm hai lo i:ố ự ạ ạ  Tham chi u: Là các tham s th c mà ta truy n cho Hàmế ố ự ềTham chi u: Là các tham s th c mà ta truy n cho Hàmế ố ự ề d i d ng con tr (d ngướ ạ ỏ ạd i d ng con tr (d ngướ ạ ỏ ạ đ a ch ). Tham chi u m i ghiị ỉ ế ớđ a ch ). Tham chi u m i ghiị ỉ ế ớ nh n l i đ c nh ng k t qu v a tính toán trong Hậ ạ ượ ữ ế ả ừnh n l i đ c nh ng k t qu v a tính toán trong Hậ ạ ượ ữ ế ả ừ àm khiàm khi Hàm k t thúc.ếHàm k t thúc.ế  Tham tr : Là các tham s th c mà ta truy n cho Hàm d iị ố ự ề ướTham tr : Là các tham s th c mà ta truy n cho Hàm d iị ố ự ề ướ d ng bi n. Tham tr không b o l u l i nh ng k t qu thayạ ế ị ả ư ạ ữ ế ảd ng bi n. Tham tr không b o l u l i nh ng k t qu thayạ ế ị ả ư ạ ữ ế ả đ i c a nó đ c tính toán trong Hổ ủ ượđ i c a nó đ c tính toán trong Hổ ủ ượ àm khi Hàm k t thúc.ếàm khi Hàm k t thúc.ế
  • 80. 80Ngôn ngữ lập trình C 3.23.2 Phân lo i theo công d ngạ ụPhân lo i theo công d ngạ ụ  Tham s c a m t hàm có hai công d ng:ố ủ ộ ụTham s c a m t hàm có hai công d ng:ố ủ ộ ụ  Cung c p các giá tr cho hàm khi ta g i nó th c hi n .ấ ị ọ ự ệCung c p các giá tr cho hàm khi ta g i nó th c hi n .ấ ị ọ ự ệ  L u các k t qu tính toánư ế ảL u các k t qu tính toánư ế ả đ c trong quá trượđ c trong quá trượ ình hàmình hàm ho t đ ngạ ộho t đ ngạ ộ  T ng ng v i công d ng ta có các lo i tham s :ươ ứ ớ ụ ạ ốT ng ng v i công d ng ta có các lo i tham s :ươ ứ ớ ụ ạ ố  Tham s vào: Cung c p giá tr cho hàm.ố ấ ịTham s vào: Cung c p giá tr cho hàm.ố ấ ị  Tham s ra: L u k t qu tính toánố ư ế ảTham s ra: L u k t qu tính toánố ư ế ả đ c trong hượđ c trong hượ àm.àm.  Tham s v a vào, v a ra: v a cung c p giá tr choố ừ ừ ừ ấ ịTham s v a vào, v a ra: v a cung c p giá tr choố ừ ừ ừ ấ ị hàm, v a l u k t qu tính toánừ ư ế ảhàm, v a l u k t qu tính toánừ ư ế ả đ c trong hượđ c trong hượ àm.àm.
  • 81. 81Ngôn ngữ lập trình C 4.4. Hàm có đ i con trố ỏHàm có đ i con trố ỏ Đ i s c a hố ố ủĐ i s c a hố ố ủ àm là con tr ki uỏ ểàm là con tr ki uỏ ể int (float,double,. )int (float,double,. ) thì thamthì tham s th c t ng ng ph i làố ự ươ ứ ảs th c t ng ng ph i làố ự ươ ứ ả đ a ch c a bi n ki uị ỉ ủ ế ểđ a ch c a bi n ki uị ỉ ủ ế ể intint (float,double,.)(float,double,.). Khi. Khi đó đ a ch c a bi n đ c truy n choị ỉ ủ ế ượ ềđó đ a ch c a bi n đ c truy n choị ỉ ủ ế ượ ề đ i con tr t ng ng.ố ỏ ươ ứđ i con tr t ng ng.ố ỏ ươ ứ Khi mu n b o l u l i k t qu tính toán đ c c a cácố ả ư ạ ế ả ượ ủKhi mu n b o l u l i k t qu tính toán đ c c a cácố ả ư ạ ế ả ượ ủ đ i s trong hàm đ s d ng cho ch ng trình g i hàmố ố ể ử ụ ươ ọđ i s trong hàm đ s d ng cho ch ng trình g i hàmố ố ể ử ụ ươ ọ có đ i s thì chúng ta ph i khai báo đ i s c a hàm làố ố ả ố ố ủcó đ i s thì chúng ta ph i khai báo đ i s c a hàm làố ố ả ố ố ủ tham chi u (con tr hay d ng đ a ch ).ế ỏ ạ ị ỉtham chi u (con tr hay d ng đ a ch ).ế ỏ ạ ị ỉ VD:VD:
  • 82. 82Ngôn ngữ lập trình C Bài 8: Chuỗi ký tựBài 8: Chuỗi ký tự 1.1. Khái niệmKhái niệm  Chuỗi ký tự là một dãy các ký tựChuỗi ký tự là một dãy các ký tự đặt trong cặp dấuđặt trong cặp dấu nháy kép. Chuỗi rỗng được ký hiệu bằng hai dấu nháynháy kép. Chuỗi rỗng được ký hiệu bằng hai dấu nháy kép đi liền nhau. Một chuỗi ký tự được cấp phát mộtkép đi liền nhau. Một chuỗi ký tự được cấp phát một khoảng nhớ cho một mảng kiểu char chứa các ký tự củakhoảng nhớ cho một mảng kiểu char chứa các ký tự của chuỗi vchuỗi và chứa thêm ký tự '0' là ký tự kết thúc chuỗi.à chứa thêm ký tự '0' là ký tự kết thúc chuỗi.  Mỗi ký tự của chuỗiMỗi ký tự của chuỗi được chứa trongđược chứa trong một phần tử củamột phần tử của mảng. Chuỗi ký tự là một trường hợp riêng của mảngmảng. Chuỗi ký tự là một trường hợp riêng của mảng một chiều khi mỗi thành phần của mảng là ký tựmột chiều khi mỗi thành phần của mảng là ký tự  Chuỗi ký tự thường được khai báo theo khaiChuỗi ký tự thường được khai báo theo khai báo theobáo theo hai mẫu:hai mẫu: char ten_chuoi[] ;char ten_chuoi[] ; hoặc char *ten_chuoi;hoặc char *ten_chuoi;
  • 83. 83Ngôn ngữ lập trình C 2. Các thao tác trên chuỗi2. Các thao tác trên chuỗi Trong C không tồn tại các phép toán so sánh, gán nộiTrong C không tồn tại các phép toán so sánh, gán nội dung của chuỗi này cho chuỗi khác.dung của chuỗi này cho chuỗi khác. Ðể thực hiện các thao tác này ta sử dụng một thư việnÐể thực hiện các thao tác này ta sử dụng một thư viện các hàm chuẩn là <các hàm chuẩn là <string.h>string.h>..  Hàm strlen:Hàm strlen: int strlen(char s[])int strlen(char s[]) Trả vềTrả về độ dđộ dài của chuỗi s, chính là chỉ số của ký tựài của chuỗi s, chính là chỉ số của ký tự NULL trong chuỗi.NULL trong chuỗi.  Hàm strcpy:Hàm strcpy: strcpy(char dest[], char source[])strcpy(char dest[], char source[]) Sao chép nội dung chuỗi source vào chuỗi dest.Sao chép nội dung chuỗi source vào chuỗi dest.  Hàm strchr:Hàm strchr: char *strchr(char s[], char c)char *strchr(char s[], char c) Tìm lần xuất hiệnTìm lần xuất hiện đầu tiđầu tiên của ký tự c trong chuỗi s, trảên của ký tự c trong chuỗi s, trả vềvề địa chỉ của ký tự nđịa chỉ của ký tự này.ày.
  • 84. 84Ngôn ngữ lập trình C  Hàm strncpy:Hàm strncpy: strncpy(char dest[], char source[], int n)strncpy(char dest[], char source[], int n) Sao chép n ký tự trong chuỗi source vào chuỗi dest.Sao chép n ký tự trong chuỗi source vào chuỗi dest. Trong trường hợp không cóTrong trường hợp không có đủ n ký tự trong source thđủ n ký tự trong source thìì hàm sẽhàm sẽ điền thđiền thêm các ký tự trắng vào chuỗi dest.êm các ký tự trắng vào chuỗi dest.  Hàm strcat :Hàm strcat : strcat(char ch1[], char ch2[])strcat(char ch1[], char ch2[]) Nối chuỗi ch2 vào cuối chuỗi ch1. Sau lời gọi hàm nàyNối chuỗi ch2 vào cuối chuỗi ch1. Sau lời gọi hàm này độ dđộ dài chuỗi ch1 bằng tổngài chuỗi ch1 bằng tổng độ dđộ dài của cả hai chuỗi ch1ài của cả hai chuỗi ch1 và ch2 trước lời gọi hàm.và ch2 trước lời gọi hàm.  Hàm strncat :Hàm strncat : strncat(char ch1[], char ch2[],int n)strncat(char ch1[], char ch2[],int n) Nối n ký tựNối n ký tự đầu tiđầu tiên của ch2 vào ch1ên của ch2 vào ch1
  • 85. 85Ngôn ngữ lập trình C  Hàm strstr :Hàm strstr : char *strstr(char s1[], char s2[])char *strstr(char s1[], char s2[]) Tìm kiếm chuỗi s2 trong chuỗi s1, Trả vềTìm kiếm chuỗi s2 trong chuỗi s1, Trả về địa chỉđịa chỉ của lần xuất hiện đầu ticủa lần xuất hiện đầu tiên của s2 trong s1 hoặcên của s2 trong s1 hoặc NULL khi không tìm thấy.NULL khi không tìm thấy.  Hàm strcmp :Hàm strcmp : int strcmp(char ch1[], char ch2[])int strcmp(char ch1[], char ch2[]) So sánh hai chuỗi ch1 và ch2. Nguyên tắc soSo sánh hai chuỗi ch1 và ch2. Nguyên tắc so sánh theo kiểu từsánh theo kiểu từ điển. Giá trị trả về:điển. Giá trị trả về:  = 0 nếu chuỗi ch1 bằng chuỗi ch2= 0 nếu chuỗi ch1 bằng chuỗi ch2  > 0 nếu chuỗi ch1 lớn hơn chuỗi ch2> 0 nếu chuỗi ch1 lớn hơn chuỗi ch2  < 0 nếu chuỗi ch1 nhỏ hơn chuỗi ch2< 0 nếu chuỗi ch1 nhỏ hơn chuỗi ch2 VD: Đếm số lần xuất hiện của ký tự a trongVD: Đếm số lần xuất hiện của ký tự a trong một xâu ký tự cho trướcmột xâu ký tự cho trước
  • 86. 86Ngôn ngữ lập trình C #include<stdio.h>#include<stdio.h> #include<conio.h>#include<conio.h> #define HANG 128#define HANG 128 void main()void main() {{ char xau[HANG];char xau[HANG]; int i,na;int i,na; clrscr();clrscr(); printf("nNhap mot xau ky tu:");gets(xau);printf("nNhap mot xau ky tu:");gets(xau); na=i=0;na=i=0; while(xau[i])while(xau[i]) if (xau[i++]=='a') na++;if (xau[i++]=='a') na++; printf("nXau co %d chu a",na);printf("nXau co %d chu a",na); getch();getch(); return;return; }}
  • 87. 87Ngôn ngữ lập trình C 3. Mảng và chuỗi ký tự3. Mảng và chuỗi ký tự  Một dạng sử dụng con trỏMột dạng sử dụng con trỏ đặc biệt lđặc biệt là việc sử dụng mộtà việc sử dụng một mảng các biến con trỏ. Khai báo theo mẫumảng các biến con trỏ. Khai báo theo mẫu type *pointer_array[size];type *pointer_array[size];  VD: khai báoVD: khai báo char *temp[10];char *temp[10]; sẽ khai báo một mảng 10 con trỏsẽ khai báo một mảng 10 con trỏ charchar có thểcó thể được dđược dùngùng để khai báo một mảng để lưu trữ địa chỉ của mười chuỗiđể khai báo một mảng để lưu trữ địa chỉ của mười chuỗi ký tự nký tự nàoào đó.đó.  Bài tập:viết chương trình nhập nhiều tên người vào từBài tập:viết chương trình nhập nhiều tên người vào từ bàn phím, sắp xếp lại theo thứ tự và in kết quả đã sắpbàn phím, sắp xếp lại theo thứ tự và in kết quả đã sắp xếp ra.xếp ra. + Sắp xếp lại các tên này theo thứ tự alphabet+ Sắp xếp lại các tên này theo thứ tự alphabet + In các tên ra theo thứ tự đó.+ In các tên ra theo thứ tự đó.
  • 88. 88Ngôn ngữ lập trình C  VD: xét một mảng các con trỏ ptr_arrayVD: xét một mảng các con trỏ ptr_array đượcđược gán các địa chỉ của các biến int có giá trị vgán các địa chỉ của các biến int có giá trị và vị tríà vị trí bất kỳ. Dùng một hàmbất kỳ. Dùng một hàm để sắp xếp lại các địa chỉđể sắp xếp lại các địa chỉ nnày trong mảngày trong mảng để sao cho các địa chỉ của các sốđể sao cho các địa chỉ của các số bé được xếp trước địa chỉ của các số lớn hơn. Lúcbé được xếp trước địa chỉ của các số lớn hơn. Lúc đó dđó dù chúng ta không làm thayù chúng ta không làm thay đổi vị trí hoặcđổi vị trí hoặc thay đổi các giá trị của các biến nhưng mảng vẫnthay đổi các giá trị của các biến nhưng mảng vẫn giống nhưgiống như một mảng chỉmột mảng chỉ đến các giá trị đđến các giá trị đã sắpã sắp xếp có thứ tự.xếp có thứ tự.
  • 89. 89Ngôn ngữ lập trình C Bài tập:Bài tập:  Viết chương trìnhViết chương trình đếm số lần xuất hiện của một ký tựđếm số lần xuất hiện của một ký tự trong một xâu ký tựtrong một xâu ký tự  Viết chương trình nhập một chữ, xuất ra chữ đó nhiềuViết chương trình nhập một chữ, xuất ra chữ đó nhiều lần dùng con trỏlần dùng con trỏ
  • 90. 90Ngôn ngữ lập trình C Bài 9: Cấp phát và giải phóng bộ nhớ độngBài 9: Cấp phát và giải phóng bộ nhớ động 1.1. Khái niệmKhái niệm  BiếnBiến động:động: Là các biếnLà các biến được tạo ra lúc chạy chươngđược tạo ra lúc chạy chương trtrình,ình, tùy theo nhu cầu. Số biến này hoàn toàn khôngtùy theo nhu cầu. Số biến này hoàn toàn không được xác định từ trước.được xác định từ trước. Các biếnCác biến động không có tđộng không có tênên (việc(việc đặt tđặt tên thực chất là gán cho nó mộtên thực chất là gán cho nó một địa chỉ xácđịa chỉ xác định).định).  Cách tạo ra biến động và truy nhập đến biến độngCách tạo ra biến động và truy nhập đến biến động được tiến hành như sauđược tiến hành như sau Việc tạo ra biến động và xóa nó đi (để thu hồi lại bộViệc tạo ra biến động và xóa nó đi (để thu hồi lại bộ nhớ) được thực hiện nhờ các hàm như malloc() vànhớ) được thực hiện nhờ các hàm như malloc() và free() đã có sẵn trong thư viện stdlib.hfree() đã có sẵn trong thư viện stdlib.h
  • 91. 91Ngôn ngữ lập trình C  Việc truy nhập đến biến động được tiến hành nhờ cácViệc truy nhập đến biến động được tiến hành nhờ các biến con trỏ. Các biến con trỏ được định nghĩa như cácbiến con trỏ. Các biến con trỏ được định nghĩa như các biến tĩnh ( được khai báo ngay từ đầu trong phần khaibiến tĩnh ( được khai báo ngay từ đầu trong phần khai báo biến) và được dùng để chứa địa chỉ các biến độngbáo biến) và được dùng để chứa địa chỉ các biến động  VD1:VD1: int *p; /* Khai báo biến con trỏ p*/int *p; /* Khai báo biến con trỏ p*/ p= (int *) malloc(100);/* Tạo biến động*/p= (int *) malloc(100);/* Tạo biến động*/ Ðoạn chương trình trên sẽ cấp phát 100 bytes trong bộÐoạn chương trình trên sẽ cấp phát 100 bytes trong bộ nhớ và gán địa chỉ khối bộ nhớ này cho pnhớ và gán địa chỉ khối bộ nhớ này cho p  VD2: cấp phát bộ nhớ chính xác cho 70 ký tự:VD2: cấp phát bộ nhớ chính xác cho 70 ký tự: /* Khai báo biến con trỏ kiểu char *//* Khai báo biến con trỏ kiểu char */ char *cp;char *cp; /* Tạo biến động *//* Tạo biến động */ cp=(char *) malloc(70);cp=(char *) malloc(70);
  • 92. 92Ngôn ngữ lập trình C 2.2.Cấp phát và giải phóng bộ nhớ động (các hàm thuộcCấp phát và giải phóng bộ nhớ động (các hàm thuộc stdlib.h và alloc.h)stdlib.h và alloc.h) 2.1 Cấp phát bộ nhớ động bằng hàm malloc( )2.1 Cấp phát bộ nhớ động bằng hàm malloc( ) Cú phápCú pháp void *malloc(kiểu _dl size)void *malloc(kiểu _dl size)  Chức nChức năng: Hăng: Hàm malloc cấp phát một vùng nhớ có kíchàm malloc cấp phát một vùng nhớ có kích thước là size.thước là size.  size là một giá trị kiểu_dl (là một kiểu dữ liệusize là một giá trị kiểu_dl (là một kiểu dữ liệu định sẵnđịnh sẵn trong thư viện stdlib.h).trong thư viện stdlib.h).  Hàm malloc trả về con trỏ kiểu void chứaHàm malloc trả về con trỏ kiểu void chứa địa chỉ ô nhớđịa chỉ ô nhớ đầu của vđầu của vùng nhớùng nhớ được cấp phát. Nếu không đủ vđược cấp phát. Nếu không đủ vùng nhớùng nhớ để cấp phát hàm trả về giá trịđể cấp phát hàm trả về giá trị NULLNULL, vì vậy phải kiểm tra, vì vậy phải kiểm tra giá trị trả về khi sử dụng hàm malloc.giá trị trả về khi sử dụng hàm malloc.
  • 93. 93Ngôn ngữ lập trình C 2.2 Cấp phát bộ nhớ động bằng hàm calloc2.2 Cấp phát bộ nhớ động bằng hàm calloc Cú phápCú pháp (datatype *) calloc(n, sizeof(object));(datatype *) calloc(n, sizeof(object)); Hàm calloc cấp phát bộ nhớHàm calloc cấp phát bộ nhớ động cho các kiểu dữ liệuđộng cho các kiểu dữ liệu Trong đ óTrong đ ó::  (datatype *) là kiểu con trỏ trỏ tới kiểu dữ liệu datatype.(datatype *) là kiểu con trỏ trỏ tới kiểu dữ liệu datatype.  n là số lượng object thuộc kiểu datatype cần cấp phát bộn là số lượng object thuộc kiểu datatype cần cấp phát bộ nhớ.nhớ.  datatype có thể là kiểu dữ liệu cơ sở hoặc kiểu dữ liệu mớidatatype có thể là kiểu dữ liệu cơ sở hoặc kiểu dữ liệu mới
  • 94. 94Ngôn ngữ lập trình C 2.3 Cấp phát bộ nhớ động bằng hàm relloc2.3 Cấp phát bộ nhớ động bằng hàm relloc Cú phápCú pháp (datatype *) realloc(buf _p, newsize);(datatype *) realloc(buf _p, newsize); HHàm có chức năng cấp phát lại bộ nhớàm có chức năng cấp phát lại bộ nhớ TrongTrong đó:đó:  buf_p là con trỏ đang trỏ đến vùng ô nhớ đã được cấpbuf_p là con trỏ đang trỏ đến vùng ô nhớ đã được cấp phát từ trước.phát từ trước.  newsize là kích thước mới cần cấp phát, có thể lớn hoặcnewsize là kích thước mới cần cấp phát, có thể lớn hoặc nhỏ hơn.nhỏ hơn.
  • 95. 95Ngôn ngữ lập trình C 2.4 Gi i phóng b nh b ng hàm freeả ộ ớ ằ2.4 Gi i phóng b nh b ng hàm freeả ộ ớ ằ Cú phápCú pháp void free( void *prt)void free( void *prt) Hàm free gi i phóng vùng nhả ớHàm free gi i phóng vùng nhả ớ đ c tr đ n b i con trượ ỏ ế ở ỏđ c tr đ n b i con trượ ỏ ế ở ỏ ptr.ptr. N u con tr ptr = NULL thì hàm free không làm gì c .ế ỏ ảN u con tr ptr = NULL thì hàm free không làm gì c .ế ỏ ả
  • 96. 96Ngôn ngữ lập trình C 3. Bộ nhớ HEAP và cơ chế tạo biến động3. Bộ nhớ HEAP và cơ chế tạo biến động  Các biếnCác biến động do malloc tạo ra được C xếp vđộng do malloc tạo ra được C xếp vào mộtào một vùng ô nhớ tự do theo kiểu xếp chồng vàvùng ô nhớ tự do theo kiểu xếp chồng và được gọi lđược gọi làà HEAP ( bộ nhớ cấp phátHEAP ( bộ nhớ cấp phát động). Ngôn ngữ C quản lýđộng). Ngôn ngữ C quản lý HEAP thông qua một con trỏ của HEAP lHEAP thông qua một con trỏ của HEAP là HEAPPTR.à HEAPPTR. Nó luôn trỏ vào byte tự doNó luôn trỏ vào byte tự do đầu tiđầu tiên của vùng ô nhớ cònên của vùng ô nhớ còn tự do của HEAP. Mỗi lần gọi malloc(), con trỏ củatự do của HEAP. Mỗi lần gọi malloc(), con trỏ của HEAPHEAP được dịch chuyển về phía đỉnh của vđược dịch chuyển về phía đỉnh của vùng ô nhớ tựùng ô nhớ tự do một số byte tương ứng với kích thước của biếndo một số byte tương ứng với kích thước của biến độngđộng mới tạo ra.mới tạo ra.  Ngược lại, mỗi khi giải phóng bộ nhớ biếnNgược lại, mỗi khi giải phóng bộ nhớ biến động, bộ nhớđộng, bộ nhớ biến động được thu hồibiến động được thu hồi
  • 98. 98Ngôn ngữ lập trình C BàiBài 1010: Ki u c u trúcể ấ: Ki u c u trúcể ấ 1.1. Ki u enumểKi u enumể  Câu l nh khai báo ki u enum có th vi t theoệ ể ể ếCâu l nh khai báo ki u enum có th vi t theoệ ể ể ế b n cáchốb n cáchố enumenum tk {pt1,pt2,...} tb1,tb2,...;tk {pt1,pt2,...} tb1,tb2,...; enumenum  tk {pt1,pt2,...}; tk {pt1,pt2,...}; enumenum  {pt1,pt2,...} tb1,tb2,...; {pt1,pt2,...} tb1,tb2,...; enumenum  {pt1,pt2,...}; {pt1,pt2,...};  Trong đó :Trong đó :  Tk là tên ki u enum (m t ki u d li u m i),ể ộ ể ữ ệ ớTk là tên ki u enum (m t ki u d li u m i),ể ộ ể ữ ệ ớ  pt1,pt2,... là tên các ph n t ,ầ ửpt1,pt2,... là tên các ph n t ,ầ ử  tb1,tb2,... là tên bi n ki u enum.ế ểtb1,tb2,... là tên bi n ki u enum.ế ể
  • 99. 99Ngôn ngữ lập trình C  Ví dụ: khai báo kiểu dữ liệu làm việc với các ngàyVí dụ: khai báo kiểu dữ liệu làm việc với các ngày trong tuần ta có thể dùng kiểu weekday và biến day nhưtrong tuần ta có thể dùng kiểu weekday và biến day như sau:sau: enumenum weekday{SUNDAY,MONDAY,TUESDAY,WEDSDweekday{SUNDAY,MONDAY,TUESDAY,WEDSD AY,THURSDAY, FRIDAY, SATURDAY} day;AY,THURSDAY, FRIDAY, SATURDAY} day;  Chú ý biến kiểu enum thực chất là biến nguyên, nóChú ý biến kiểu enum thực chất là biến nguyên, nó được cấp phát 2 byte bộ nhớ và nó có thể nhận một giáđược cấp phát 2 byte bộ nhớ và nó có thể nhận một giá trị nguyên bất kỳ.trị nguyên bất kỳ.
  • 100. 100Ngôn ngữ lập trình C 2. Ki u c u trúcể ấ2. Ki u c u trúcể ấ 2.1 Đ nh nghĩaị2.1 Đ nh nghĩaị C u trúc là m t ki u d li u bao g m nhi u thành ph nấ ộ ể ữ ệ ồ ề ầC u trúc là m t ki u d li u bao g m nhi u thành ph nấ ộ ể ữ ệ ồ ề ầ có th thu c nhi u ki u d li u khác nhau. Các thànhể ộ ề ể ữ ệcó th thu c nhi u ki u d li u khác nhau. Các thànhể ộ ề ể ữ ệ ph nầph nầ đ c truy nh p thông qua m t tượ ậ ộđ c truy nh p thông qua m t tượ ậ ộ ênên 2.2 Cú pháp t ng quátổ2.2 Cú pháp t ng quátổ struct [tên_c u_trúc]ấstruct [tên_c u_trúc]ấ {{ khai báo các thành ph nầkhai báo các thành ph nầ } [danh sách các bi n c u trúc];ế ấ} [danh sách các bi n c u trúc];ế ấ
  • 101. 101Ngôn ngữ lập trình C trongtrong đó:đó:  structstruct là t khóaừlà t khóaừ đ ng tr c m t khai báo c u trúc,ứ ướ ộ ấđ ng tr c m t khai báo c u trúc,ứ ướ ộ ấ  têntên__c uấc uấ __trúctrúc là m t tên h p lộ ợ ệlà m t tên h p lộ ợ ệ đ c dượđ c dượ ùng làm tên c u trúc;ấùng làm tên c u trúc;ấ  [danh sách các bi n c u trúc]ế ấ[danh sách các bi n c u trúc]ế ấ li t kê các bi n có ki u c u trúcệ ế ể ấli t kê các bi n có ki u c u trúcệ ế ể ấ v a khai báoừv a khai báoừ  VD:VD: structstruct hoc_sinh {hoc_sinh { char ho_ten[20];char ho_ten[20]; float diem;float diem; } hs,} hs, dshs[100];dshs[100];
  • 102. 102Ngôn ngữ lập trình C 2.32.3 Cú pháp đ nh nghĩa ki u d li u m iị ể ữ ệ ớCú pháp đ nh nghĩa ki u d li u m iị ể ữ ệ ớ Ngôn ngũ C cho phép taNgôn ngũ C cho phép ta đ t l i tặ ạđ t l i tặ ạ ên ki u dểên ki u dể ữữ li u m iệ ớli u m iệ ớ b ng câu l nh:ằ ệb ng câu l nh:ằ ệ typedef ki u_ểtypedef ki u_ể đđã_có tên_ki u_m i;ể ớã_có tên_ki u_m i;ể ớ trongtrong đó :đó :  ki u_ểki u_ể đđã_có là ki u d li u mà ta mu nể ữ ệ ốã_có là ki u d li u mà ta mu nể ữ ệ ố đ i tổđ i tổ ên.ên.  tên_ki u_m i là tên m i mà ta mu nể ớ ớ ốtên_ki u_m i là tên m i mà ta mu nể ớ ớ ố đ t.ặđ t.ặ
  • 103. 103Ngôn ngữ lập trình C 2.4 Nguyên t c truy c p đ n thành ph n c a c u trúcắ ậ ế ầ ủ ấ2.4 Nguyên t c truy c p đ n thành ph n c a c u trúcắ ậ ế ầ ủ ấ  Các thành ph n c a c u trúcầ ủ ấCác thành ph n c a c u trúcầ ủ ấ đ c truy nh p thôngượ ậđ c truy nh p thôngượ ậ qua tqua tên bi n c u trúc và tên thành ph n.ế ấ ầên bi n c u trúc và tên thành ph n.ế ấ ầ tên_bi n_c u_trúc.tên_thành_ph nế ấ ầtên_bi n_c u_trúc.tên_thành_ph nế ấ ầ ĐểĐể truy nh p đ n các thậ ếtruy nh p đ n các thậ ế ành ph n c a bi n hs chúngầ ủ ếành ph n c a bi n hs chúngầ ủ ế ta vi t nh sau:ế ưta vi t nh sau:ế ư hs.ho_tenhs.ho_ten hs.diemhs.diem Chú ý:Không nên s d ng toán t &ử ụ ửChú ý:Không nên s d ng toán t &ử ụ ử đ i v i các thố ớđ i v i các thố ớ ành ph nầành ph nầ c u trúc (ấc u trúc (ấ đ c bi t đ i v i các thặ ệ ố ớđ c bi t đ i v i các thặ ệ ố ớ ành ph n không nguyên) trongầành ph n không nguyên) trongầ khi nh p d li uậ ữ ệkhi nh p d li uậ ữ ệ
  • 104. 104Ngôn ngữ lập trình C 2.5 Con trỏ cấu trúc2.5 Con trỏ cấu trúc Cách khai báoCách khai báo  Một biến cấu trúc cũng là một biến trong bộ nhớMột biến cấu trúc cũng là một biến trong bộ nhớ, có thể, có thể lấy địa chỉ của một biến cấu trúc bằng toán tử lấy địa chỉlấy địa chỉ của một biến cấu trúc bằng toán tử lấy địa chỉ &. Giá trị trả lại l&. Giá trị trả lại làà địa chỉ đến trường đầu của cấu trúc.địa chỉ đến trường đầu của cấu trúc.  Có thể khai báo một biến con trỏ chỉCó thể khai báo một biến con trỏ chỉ đến một cấu trúc đểđến một cấu trúc để có thể lưu địa chỉ của một biến cấu trúc ncó thể lưu địa chỉ của một biến cấu trúc nàoào đó. Cú phápđó. Cú pháp khai báo một biến con trỏ cấu trúc như sau:khai báo một biến con trỏ cấu trúc như sau: struct tên_cấu_trúc *tên_con_trỏ;struct tên_cấu_trúc *tên_con_trỏ; VD: struct hoc_sinh *ptrhs;VD: struct hoc_sinh *ptrhs;  Việc truy xuấtViệc truy xuất đến một thđến một thành phần của cấu trúc thôngành phần của cấu trúc thông qua một con trỏqua một con trỏ được thực hiện bằng phép toán kép ->được thực hiện bằng phép toán kép ->
  • 105. 105Ngôn ngữ lập trình C VD:VD: printf("nHo va ten hoc sinh %s",ptrhs->ho_ten);printf("nHo va ten hoc sinh %s",ptrhs->ho_ten); printf("nDiem %6.3f",ptrhs->diem);printf("nDiem %6.3f",ptrhs->diem); kết quả thực hiện hai câu lệnh này tươngkết quả thực hiện hai câu lệnh này tương đương với haiđương với hai câu lệnh sau:câu lệnh sau: printf("nHo va ten hoc sinh %s",hs.ho_ten);printf("nHo va ten hoc sinh %s",hs.ho_ten); printf("nDiem %6.3f",hs.diem);printf("nDiem %6.3f",hs.diem);  Việc sử dụng con trỏ chỉViệc sử dụng con trỏ chỉ đến cấu trúc thường được sửđến cấu trúc thường được sử dụng để truyền cấu trúc đến cho một hdụng để truyền cấu trúc đến cho một hàmàm  Một ứng dụng khác của con trỏ cấu trúc là dùng để xâyMột ứng dụng khác của con trỏ cấu trúc là dùng để xây dựng các cấu trúc tự trỏ như: danh sách liên kết (còn gọidựng các cấu trúc tự trỏ như: danh sách liên kết (còn gọi là danh sách móc nối).là danh sách móc nối).