Professional Documents
Culture Documents
Slide Bài Giảng - Nguyễn Nhật Nam
Slide Bài Giảng - Nguyễn Nhật Nam
NGÖÕ C
CBGD
*****************
ThS. NGUYEÃN NHAÄT NAM
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
GIAÙO TRÌNH
*****************
1.TIN HOÏC II, TS. ÑAËNG THAØNH TÍN, ÑH
QG TP HCM
2.INTRODUCTION TO COMPUTING
SYSTEMS, YALE N. PATT AND SANJAY J.
PATEL, INTERNATIONAL EDITION
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 1
OÂN LAÏI CAÙC KIEÁN THÖÙC CÔ BAÛN VEÀ
MAÙY TÍNH
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 1
OÂN LAÏI CAÙC KIEÁN THÖÙC CÔ BAÛN VEÀ
MAÙY TÍNH
1. CAÙC HEÄ ÑEÁM
2. CAÙC KHAÙI NIEÄM CÔ BAÛN
3. LÒCH SÖÛ PHAÙT TRIEÅN CUÛA MAÙY TÍNH
4. CAÙC THAØNH PHAÀN CÔ BAÛN CUÛA MAÙY TÍNH
5. PHAÀN MEÀM
6. CAÙC CAÁP CHUYEÅN ÑOÅI
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï 1.2: Caùc soá sau ñaây ñöôïc vieát ôû daïng phaân
tích trong heä thaäp phaân
1986D = 1.103 + 9.102 + 8.10 1 + 6.100
234d = 2.102 + 3.10 1 + 4.100
0.163 = 1.10-1 + 6.10-2 + 3.10-3
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï 1.4:
10101B = 1.24 + 0.23 + 1.22 + 0.21 + 1.20 = 21D
11.01B = 1.21 + 1.20 + 0.2-1 + 1.2-2 = 3.25D
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
0 0 … 0 0
1 1 … 1 2n-1
n bit
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Tin hoïc laø ngaønh khoa hoïc xöû lyù thoâng tin töï
ñoäng baèng maùy tính ñieän töû. Ôû ñaây coù ba khaùi
nieäm chính laø xöû lyù, thoâng tin vaø maùy tính.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Address bus
CU
Input device
ROM RAM I/O
ALU
Output device
Data bus
Control bus
Register
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 2
CAÙC KIEÅU DÖÕ LIEÄU VAØ THAO TAÙC
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 2
CAÙC KIEÅU DÖÕ LIEÄU VAØ THAO TAÙC
2.2 SOÁ
00001 1 1 1
00010 2 2 2
00011 3 3 3
NGUYEÂN
00100 4 4 4
00101 5 5 5
00110 6 6 6
00111 7 7 7
BUØ 2
01000 8 8 8
01001 9 9 9
01010 10 10 10
01011 11 11 11
01100 12 12 12
01101 13 13 13
01110 14 14 14
01111 15 15 15
10000 -0 -15 -16
10001 -1 -14 -15
10010 -2 -13 -14
10011 -3 -12 -13
10100 -4 -11 -12
10101 -5 -10 -11
10110 -6 -9 -10
10111 -7 -8 -9
11000 -8 -7 -8
11001 -9 -6 -7
11010 -10 -5 -6
11011 -11 -4 -5
11100 -12 -3 -4
11101 -13 -2 -3
11110 -14 -1 -2
11111 -15 -0 -1
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 6
GIÔÙI THIEÄU VEÀ NGOÂN NGÖÕ LAÄP
TRÌNH C
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 6
GIÔÙI THIEÄU VEÀ NGOÂN NGÖÕ LAÄP
TRÌNH C
{
printf ("Hello, world\n");
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
BAØI TAÄP
1. Vieát chöông trình in ra maøn hình hình sau:
*********
* *
* *
*********
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
BAØI TAÄP
2. Vieát chöông trình in ra maøn hình caùc thoâng
tin sau:
Hoï teân:
Tuoåi:
Ngheà nghieäp:
Ñòa chæ:
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
BAØI TAÄP
3. Vieát chöông trình nhaäp moät soá töø baøn phím,
kieåm tra neáu soá ñoù lôùn hôn hoaëc baèng 0 thì tính
caên baäc hai cuûa noù, coøn neáu soá ñoù nhoû hôn 0 thì
baùo loãi vaø keát thuùc chöông trình. Vôùi sqrt laø
haøm trong C coù prototype naèm trong file math.h
nhö sau:
double sqrt (double x);
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
BAØI TAÄP
4. Nhaäp ba soá töø baøn phím, in ra maøn hình soá
lôùn nhaát vaø soá nhoû nhaát trong ba soá ñoù.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 7
CAÙC THAØNH PHAÀN CÔ BAÛN VAØ CAÙC
KIEÅU DÖÕ LIEÄU CUÛA C
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 7
CAÙC THAØNH PHAÀN CÔ BAÛN VAØ CAÙC
KIEÅU DÖÕ LIEÄU CUÛA C
7.1 Danh hieäu
7.2 Caùc kieåu döõ lieäu chuaån cuûa C
7.3 Haèng (constant)
7.4 Bieán (variable)
7.5 Bieåu thöùc
7.6 Caùc pheùp toaùn cuûa C
7.7 Caáu truùc toång quaùt cuûa moät chöông trình C
Baøi taäp cuoái chöông
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
ket_thuc_vong_lap_in_ra_ky_tu_khoang_trang
ket_thuc_vong_lap_in_ra_k
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
0 0 0 0 0 0 1 0 1 0 0 0 1 0 1 0
1000001010001010
= 29+27+23+21-215
= 512 + 128 + 8 + 2 – 32768 = 650 – 32768
= –32118
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
1000001010001010
= 29+27+23+21+215
= 512 + 128 + 8 + 2 + 32768 = 650+32768
= 33418
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
hoaëc chæ caàn vieát: long p; laø ñuû ñeå khai baùo cho
bieán p coù kieåu laø signed long int.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
2.1415e4 21415.0
0.2344e–4 0.00002344
.2344e3 234.4
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
BIEN
BiEN
Bien ñeàu laø nhöõng bieán khaùc nhau
biEN
bien
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
A B !A A && B A ||B
baèng 0 baèng 0 1 0 0
baèng 0 khaùc 0 1 0 1
khaùc 0 baèng 0 0 0 1
khaùc 0 khaùc 0 0 0 1
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
(c >= 'A') && (c <= 'Z') ¦¦ (c >= 'a') && (c <= 'z')
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
0 0 1 0 0 0
0 1 1 0 1 1
1 0 0 0 1 1
1 1 0 1 1 0
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Pheùp gaùn phöùc hôïp naøy toû ra raát hieäu quaû nhaát laø
khi caùc toaùn haïng beân traùi laø nhöõng bieán khaù daøi.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
3. Nhaäp boán soá, saép xeáp theo thöù töï töø lôùn tôùi nhoû
vaø töø nhoû tôùi lôùn theo menu sau:
1. Töø lôùn tôùi nhoû
2. Töø nhoû tôùi lôùn
3. Keát thuùc
Môøi baïn choïn thao taùc (1...3):
4. Nhaäp ba caïnh tam giaùc, kieåm tra ba caïnh ñoù coù
thoûa ñieàu kieän hình thaønh tam giaùc khoâng, in keát
quaû kieåm tra.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
6. Vieát chöông trình nhaäp moät kyù töï vaø xöû lyù theo
yeâu caàu sau:
- Neáu kyù töï laø hoa thì ñoåi sang thöôøng, in keát quaû
ñoåi
- Neáu kyù töï laø thöôøng thì khoâng laøm gì caû, in keát
quaû
- Neáu kyù töï laø kyù soá thì in ra maøn hình caâu: "Day
la mot ky so".
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
F − 32 9
=
C 5
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 8
CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG
LAËP
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 8
CAÙC LEÄNH ÑIEÀU KHIEÅN VAØ VOØNG
LAËP
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
- Leänh ñôn laø moät bieåu thöùc thuoäc loaïi baát kyø theo
sau noù laø moät daáu chaám phaåy (;), do ñoù leänh ñôn
coøn ñöôïc goïi laø leänh bieåu thöùc.
Ví duï: Caùc leänh sau ñaây laø caùc leänh ñôn
a = a + 1;
b >>= 3;
printf (...);
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
-Leänh phöùc bao haøm moät hay nhieàu leänh ñôn ñöôïc
bao beân trong caëp daáu ngoaëc nhoïn ({ }) vaø ñöôïc boä
dòch C xem nhö laø moät leänh ñôn.
Ví duï: Xeùt leänh if sau
if (a > 0)
{
i += 2;
a++; → leänh phöùc, ñöôïc xem laø moät leänh
n = a * i;
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ñeå phoái hôïp caùc leänh ñôn vaø phöùc theo moät trình
töï hôïp logic ñeå giaûi quyeát baøi toaùn, C ñaõ thieát keá
saün caùc caáu truùc ñieàu khieån chöông trình (maø ta
thöôøng goïi laø caùc leänh ñieàu khieån chöông trình),
moãi leänh ñeàu coù cuù phaùp rieâng cuûa noù. Caùc leänh
ñieàu khieån naøy coù theå ñöôïc chia ra laøm hai nhoùm:
- Nhoùm leänh lieân quan ñeán vieäc reõ nhaùnh chöông
trình: if-else, switch-case, goto,...
- Nhoùm leänh laëp: while, for, do_while
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
8.2 LEÄNH IF
8.2 LEÄNH IF
Daïng 1:
if (bieu_thuc)
leänh;
- bieåu_thöùc laø moät bieåu thöùc baát
kyø, coù theå coù haèng, bieán hoaëc goïi
haøm trong ñoù vaø sau cuøng laø bieåu
thöùc naøy seõ coù trò 0 hoaëc 1
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
8.2 LEÄNH IF
Daïng 1:
if (bieu_thuc)
leänh;
- leänh laø leänh thöïc thi cuûa if, coù
theå laø leänh ñôn, phöùc hoaëc leänh
roãng.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
8.2 LEÄNH IF
Daïng 2:
if (bieu_thuc)
leänh_1;
else
leänh_2;
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
8.2 LEÄNH IF
8.2 LEÄNH IF
8.2 LEÄNH IF
if (a > 0) if (a > 0)
if (b > 0) {
c = b + a; if (b > 0)
else c = b – a;
c = b – a; }
else
c = b – a;
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
8.2 LEÄNH IF
8.2 LEÄNH IF
8.2 LEÄNH IF
if (c == EOF)
printf ("Da den cuoi file \n");
else if (c >= 'a' && c <= 'z')
printf ("ky tu thuong\n");
else if (c >= 'A' && c <= 'Z')
printf ("ky tu hoa\n");
else if (c >= '0' && c <= '9')
printf ("ky tu so\n");
else
printf ("ky tu khac\n");
getch();
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï: Vieát chöông trình nhaäp moät trò, neáu trò ñoù
chia heát cho 5 thì coäng theâm 5 vaøo cho soá ñoù, neáu
trò ñoù chia cho 5 dö 1 thì coäng theâm 1, töông töï
cho 3, neáu laø soá khaùc thì baùo khoâng thoûa.
#include <stdio.h>
#include <conio.h>
main()
{ int so;
clrscr();
printf ("Nhap mot so: ");
scanf ("%d", &so);
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
switch (so % 5)
{
case 0:
so += 5;
printf ("Tri la: %d\n", so);
break;
case 1:
so += 1;
printf ("Tri la: %d\n", so);
break;
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
case 3:
so += 3;
printf ("Tri la: %d\n", so);
break;
default:
printf ("Khong thoa\n");
break;
}
getch();
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï: Xeùt ví duï nhaäp thaùng vaø naêm, kieåm tra soá
ngaøy trong thaùng.
switch (thang)
{
case 4:
case 6:
case 9:
case 11:
so_ngay = 30;
break;
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
case 2:
if (nam % 4 == 0)
so_ngay = 29;
else
so_ngay = 28;
break;
default:
so_ngay = 31;
break;
}
printf("Thang %d nam %d co %d ngay\n", thang, nam, so_ngay);
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Coù theå noùi while laø leänh laëp cô baûn cuûa ngoân ngöõ
laäp trình coù caáu truùc, noù cho pheùp chuùng ta laëp laïi
moät leänh hay moät nhoùm leänh trong khi ñieàu kieän
coøn ñuùng (true-töùc khaùc 0). Cuù phaùp cuûa leänh
while:
while (bieu-thuc) lenh
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Caùch khaùc:
int i = 10;
clrscr();
randomize();
printf ("So ngau nhien trong khoang 0-99 la: ");
while (i)
{
printf ("%d", random(100));
i;
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï: Nhaäp caùc kyù töï cho ñeán khi naøo nhaän ñöôïc
kyù töï ESC coù maõ ASCII laø 27 thì keát thuùc chöông
trình.
#include <stdio.h>
#include <conio.h>
#define ESC 27
main()
{
char c;
clrscr();
printf ("Cac ky tu duoc nhap la: ");
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
while (1)
{
c = getche();
if (c == ESC)
break;
}
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
#include <stdio.h>
#include <conio.h>
#define ESC 27 main()
{
char c;
clrscr();
printf ("Cac ky tu duoc nhap la: ");
while (getche() - ESC)
; leänh thöïc thi roãng
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Neáu leänh while cho pheùp kieåm tra ñieàu kieän tröôùc
roài thöïc thi leänh sau, nhö vaäy ngay töø ñaàu maø
ñieàu kieän ñaõ sai thì leänh cuûa while khoâng ñöôïc
thöïc thi, thì leänh laëp do-while laïi thöïc thi leänh
tröôùc roài môùi kieåm tra ñieàu kieän sau.
Cuù phaùp cuûa leänh do-while nhö sau:
do
lenh
while (bieåu_thöùc);
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
do
{
c = getch();
if (c == 0)
{
c = getch();
switch(c)
{
case 'H':
printf ("Ban da an mui ten len\n");
break;
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Chuù yù raèng moãi phím muõi teân khi ñöôïc aán ñeàu
sinh ra hai kyù töï: kyù töï ñaàu luoân laø kyù töï coù maõ
ASCII laø 0 (töùc kyù töï NUL), kyù töï thöù hai laø caùc
maõ ASII töông öùng vôùi phím, trong ví duï treân thì
+ Phím muõi teân leân coù maõ laø 0 vaø 'H'
+ Phím muõi teân xuoáng coù maõ laø 0 vaø 'P'
+ Phím muõi teân qua traùi coù maõ laø 0 vaø 'K'
+ Phím muõi teân coù maõ laø 0 vaø 'M'.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï: voøng laëp for ñeå tính toång töø 1 tôùi n nhö
sau
s = 0;
for (i = 1; i <= n; i++)
s += i;
Coù theå vieát ngaén goïn hôn nhö sau
for (i = 1, s = 0; i <= n; i++)
s += i;
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï: Nhaäp caùc kyù töï cho ñeán khi naøo nhaän ñöôïc
kyù töï ESC coù maõ ASCII laø 27 thì keát thuùc chöông
trình.
#include <stdio.h>
#include <conio.h>
#define ESC 27
main()
{ char c;
clrscr();
printf ("Cac ky tu duoc nhap la: ");
for ( ; (c = getch()) != ESC;) ; }
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
1. Leänh break
Trong caáu truùc switch-case, leänh break seõ keát thuùc
leänh switch-case; coøn trong caùc caáu truùc laëp thì
leänh break cho pheùp thoaùt sôùm ra khoûi voøng laëp
(while, for hoaëc do-while) chöùa noù maø khoâng caàn
xeùt ñieàu kieän cuûa leänh keá tieáp sau voøng laëp.
Cuù phaùp cuûa leänh break:
break;
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
1. Leänh break
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
1. Leänh break
Ví duï:
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
1. Leänh break
Ví duï:
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
2. Leänh continue
leänh continue coù taùc duïng chuyeån ñieàu khieån
chöông trình veà ñaàu voøng laëp chuaån bò cho chu kyø
laëp môùi, boû qua caùc leänh coøn laïi naèm ngay sau
leänh noù trong chu kyø laëp hieän haønh. Leänh naøy chæ
ñöôïc duøng trong caùc voøng laëp, ñeå boû qua caùc leänh
khoâng caàn thöïc thi trong voøng laëp khi caàn thieát.
Cuù phaùp leänh continue:
continue;
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
2. Leänh continue
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
2. Leänh continue
Ví duï:
i = 0;
while (i <= 10)
{
i ++;
if (i >= 6 && i <= 8)
continue;
printf ("Trò hieän thôøi cuûa i laø %d\n", i);
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
2. Leänh continue
Ví duï: Vieát chöông trình nhaäp moät daõy soá, tính
toång cuûa caùc soá döông trong daõy soá ñoù vaø thöông
soá cuûa toång ñoù vôùi töøng soá döông naøy.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
2. Leänh continue
#include <stdio.h>
#include <conio.h>
main()
{
double a[100];
double tong;
int i, n;
clrscr();
printf ("Co bao nhieu so can tinh: ");
scanf ("%d", &n);
printf ("Nhap cac so can tinh tong: ");
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
2. Leänh continue
for (i = 0; i < n; i++)
scanf ("%lf", &a[i]);
for (i = 0, tong = 0; i < n; i++)
{
if (a[i] <= 0)
continue;
tong += a[i];
}
printf ("Tong cua cac so duong la %/. 2f\n", tong);
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
2. Leänh continue
for (i = 0; i < n; i++)
{
if (a[i] <= 0)
continue;
printf("Thuong cua tong voi so thu %d la
%5,2f\n",i,tong/a[i]);
}
getch();
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
Thieát keá haøm traû veà keát quaû so saùnh hai soá theo
quy taéc sau ñaây:
soá ñaàu > soá sau: haøm traû veà trò 1
soá ñaàu = soá sau: haøm traû veà trò 0
soá ñaàu < soá sau: haøm traû veà trò -1
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
int so_sanh (int a, int b)
{
if (a > b)/* Leänh return keát thuùc haøm, traû veà trò i cho */
return 1; /* nôi ñaõ goïi haøm */
else if (a == b)
return 0; /* Traû veà trò 0 cho nôi goïi haøm khi a = b */
else /* a < b */
return -1; /* Traû veà trò -1 cho nôi goïi haøm khi a < b */
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
int so_sanh (int a, int b)
{
if (a > b) /* Leänh return keát thuùc haøm, traû veà trò 1 cho */
return 1; /* nôi ñaõ goïi haøm */
else if (a == b)
return 0; /* Traû veà trò 0 cho nôi goïi haøm khi a = b */
return -1; /* Traû veà trò -1 cho nôi goïi haøm khi a < b */
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
Ví duï:
Chöông trình sau duøng leänh return ñeå keát thuùc
voøng laëp laëp voâ taän khi ñieàu kieän thoûa (laø phím
ESC ñöôïc nhaán).
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
#include <stdio.h>
#include <conio.h>
#define ESC '\x1b'
void nhan_ky_tu (void); prototype cuûa haøm
main()
{
char c;
clrscr();
printf ("Moi ban nhap cac ky tu: ");
nhan_ky_tu (); goïi haøm
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
void nhan_ky_tu (void) ñònh nghóa haøm
{
while (1)
if (getche() == ESC)
return;
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Maëc duø khoâng uûng hoä cho vieäc laäp trình coù goto
nhöng C vaãn coù leänh reõ nhaùnh khoâng ñieàu kieän
goto, leänh naøy cho pheùp chuyeån ñieàu khieån chöông
trình cho moät leänh naøo ñoù.
Cuù phaùp cuûa leänh goto:
goto nhaõn;
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
Caùch söû duïng leänh goto trong moät chöông trình C
main()
{
lap_lai: clrscr(); ...
if ((c = getch()) != ESC)
goto lap_lai;
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Trong C coù khaùi nieäm leänh roãng, leänh naøy chæ coù
moät daáu chaám phaåy (;), noù raát caàn thieát trong
nhieàu tröôøng hôïp, nhö ñoái vôùi caùc voøng laëp, khi ta
ñaët caùc leänh bieåu thöùc thöïc thi vaøo trong caùc bieåu
thöùc cuûa leänh thì ta khoâng caàn coù theâm leänh thöïc
thi laøm thaân cho chuùng nöõa, khi ñoù neáu ñeå troáng,
C seõ hieåu nhaàm raèng leänh keá tieáp seõ laø thaân cuûa
voøng laëp, do ñoù chæ coøn caùch cho moät leänh roãng
laøm thaân cuûa chuùng.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
Voøng laëp for ñeå tính giai thöøa töø 1 tôùi n nhö sau
Ví duï:
9. Moät ngöôøi muoán gôûi moät soá tieàn vaøo ngaân haøng,
haõy vieát chöông trình tính toång soá tieàn maø ngöôøi ñoù
coù ñöôïc sau khi ñaõ gôûi ngaân haøng theo moät trong
hai caùch gôûi:
- Gôûi töøng thaùng ruùt tieàn laõi
- Gôûi khoâng ruùt laõi töøng thaùng, maø nhaäp laõi vaøo voán
Thoâng soá nhaäp caàn thieát:- Soá tieàn gôûi luùc ñaàu
- Thôøi gian gôûi (theo thaùng)
- Laõi suaát/thaùng
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 9
HAØM
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 9
HAØM
9.1 Khaùi nieäm haøm
9.2 Khai baùo haøm
9.3 Ñoái soá cuûa haøm - ñoái soá laø tham trò
9.4 Keát quaû traû veà cuûa haøm - leänh RETURN
9.5 PROTOTYPE cuûa moät haøm
9.6 Haøm ñeä quy
Baøi taäp cuoái chöông
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Baát kyø ngoân ngöõ laäp trình naøo cuõng ñeàu coù khaùi
nieäm chöông trình con (subroutine), moãi chöông
trình con nhö vaäy seõ ñaûm nhaän thöïc hieän moät
thao taùc nhaát ñònh. Ñoái vôùi C, chöông trình con
chæ ôû moät daïng laø haøm (function), khoâng coù khaùi
nieäm thuû tuïc (procedure).
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Taát caû caùc thao taùc chuaån cuûa C ñeàu laø caùc haøm,
tuy nhieân haøm trong C coù khaû naêng söû duïng raát
maïnh vaø ñaëc bieät, moãi haøm coù theå traû veà moät trò
nhaát ñònh, tuy nhieân nôi chöông trình goïi haøm coù
söû duïng trò traû veà töø haøm hay khoâng laø tuøy theo
nhu caàu laäp trình.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Neáu caùc ngoân ngöõ khaùc, nhö Pascal, seõ goïi haøm
trong chöông trình chính vaø söû duïng haøm thì ñoái
vôùi C, chöông trình chính cuõng laø moät haøm, ñoù laø
haøm main (). Haøm main () laø haøm ñaëc bieät cuûa C,
noù laø moät haøm maø trong ñoù caùc thao taùc leänh (bao
goàm caùc bieåu thöùc tính toaùn, goïi haøm, ...) ñöôïc C
thöïc hieän theo moät trình töï hôïp logic ñeå giaûi
quyeát baøi toaùn ñöôïc ñaët ra.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Neáu caùc ngoân ngöõ khaùc, nhö Pascal, seõ goïi haøm
trong chöông trình chính vaø söû duïng haøm thì ñoái
vôùi C, chöông trình chính cuõng laø moät haøm, ñoù laø
haøm main (). Haøm main () laø haøm ñaëc bieät cuûa C,
noù laø moät haøm maø trong ñoù caùc thao taùc leänh (bao
goàm caùc bieåu thöùc tính toaùn, goïi haøm, ...) ñöôïc C
thöïc hieän theo moät trình töï hôïp logic ñeå giaûi
quyeát baøi toaùn ñöôïc ñaët ra.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Taát caû caùc haøm trong C ñeàu ngang caáp nhau. Caùc
haøm ñeàu coù theå goïi laãn nhau, dó nhieân haøm ñöôïc
goïi phaûi ñöôïc khai baùo tröôùc haøm goïi (hoaëc sau
naøy ta seõ bieát theâm laø haøm ñöôïc goïi coù theå ñöôïc
ñaët sau haøm goïi cuõng ñöôïc, tuy nhieân khi ñoù
prototype cuûa haøm ñöôïc goïi phaûi ñöôïc ñaët tröôùc
haøm goïi).
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Caùc haøm trong moät chöông trình coù theå naèm treân
caùc taäp tin khaùc nhau vaø khaùc vôùi taäp tin chính
(chöùa haøm main ()), moãi taäp tin nhö vaäy ñöôïc goïi
laø moät module chöông trình, caùc module chöông
trình seõ ñöôïc dòch rieâng reõ vaø sau ñoù ñöôïc lieân keát
(link) laïi vôùi nhau ñeå taïo ra ñöôïc moät taäp tin thöïc
thi duy nhaát. Caùch taïo chöông trình theo kieåu
nhieàu module nhö vaäy trong C laø project
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
main()
{
double a, b, c;
clrscr();
printf ("Nhap 3 he so phuong trinh bac hai: ");
scant ("%lf %lf %lf", &a, &b, &c);
if (a == 0) /* phuong trinh suy bien ve bac nhat */
gptb1 (b, c);
else /* a != 0 */
gptb2 (a, b, c);
getch();
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Khai baùo moät haøm coù nghóa laø chæ ra roõ raèng traû
veà vò trí kieåu gì, ñoái soá ñöa vaøo cho haøm coù bao
nhieâu ñoái soá, moãi ñoái soá coù kieåu nhö theá naøo vaø
caùc leänh beân trong thaân haøm xaùc ñònh thao taùc
cuûa haøm. Nhö vaäy seõ coù hai loaïi haøm: haøm trong
thö vieän cuûa C vaø haøm do laäp trình vieân töï ñònh
nghóa.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
- Neáu haøm söû duïng laø haøm chuaån trong thö vieän
thì vieäc khai baùo haøm chæ ñôn giaûn laø khai baùo
prototype cuûa haøm, caùc prototype naøy ñaõ ñöôïc
phaân loaïi vaø ôû trong caùc file .h, laäp trình vieân caàn
ra leänh #include bao haøm caùc file naøy vaøo chöông
trình hoaëc module chöông trình söû duïng noù.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
- Neáu caùc haøm söû duïng laø do laäp trình vieân töï
ñònh nghóa thì vieäc khai baùo haøm bao goàm hai
vieäc: khai baùo prototype cuûa haøm ñaàu chöông
trình vaø ñònh nghóa caùc leänh beân trong thaân haøm
(hay thöôøng ñöôïc goïi taét laø ñònh nghóa haøm).
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
#include <stdio.h>
#include <conio.h>
int so_sanh (int a, intb); prototype cuûa haøm so_sanh
main()
{
int a, b, ket_qua;
clrscr();
printf ("Moi nhap hai so ");
scanf ("%d %d" , &a, &b);
ket_qua = so_sanh (a, b); goïi haøm
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
switch (ket_qua)
{ case -1:
printf ("So %d nho hon so %d \n" , a, b);
break;
case 0:
printf ("So %d bang so %d \n", a, b);
break;
case 1:
rintf ("So %d lon hon so %d \n" , a, b);
break; }
getch();
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
n 3 3 n
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Nhö vaäy ñeå moät haøm coù theå söû duïng trong moät
haøm khaùc thì trong haøm söû duïng phaûi coù khai baùo
haøm caàn söû duïng, khai baùo naøy bình thöôøng töông
töï nhö khai baùo bieán maø ta ñaõ xeùt ôû muïc treân, tuy
nhieân khai baùo naøy raát haïn cheá ôû choã khoâng cho
pheùp kieåm tra soá ñoái soá thaät ñöa vaøo haøm cuõng
nhö kieåu cuûa ñoái soá coù phuø hôïp khoâng
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Chuyeån kieåu cuûa ñoái soá: khi moät haøm ñöôïc goïi,
maø haøm ñoù coù prototype, caùc ñoái soá ñöôïc gôûi cho
haøm seõ ñöôïc chuyeån kieåu baét buoäc theo kieåu cuûa
caùc ñoái soá ñöôïc khai baùo trong prototype, söï
chuyeån kieåu naøy laøm cho caùc ñoái soá ñöôïc söû duïng
phuø hôïp vôùi caùc pheùp toaùn trong thaân haøm.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Chuyeån kieåu cuûa ñoái soá: khi moät haøm ñöôïc goïi,
maø haøm ñoù coù prototype, caùc ñoái soá ñöôïc gôûi cho
haøm seõ ñöôïc chuyeån kieåu baét buoäc theo kieåu cuûa
caùc ñoái soá ñöôïc khai baùo trong prototype, söï
chuyeån kieåu naøy laøm cho caùc ñoái soá ñöôïc söû duïng
phuø hôïp vôùi caùc pheùp toaùn trong thaân haøm.
Tröôøng hôïp maø söï chuyeån kieåu khoâng cho
pheùp thöïc hieän thì C seõ ñöa ra caùc thoâng baùo loãi,
hoaëc moät lôøi caûnh baùo (warning.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Trong thöïc teá ta raát hay gaëp khaùi nieäm ñeä quy
(recursion), ví duï nhö khi xem truyeàn hình ta seõ
thaáy maøn aûnh truyeàn hình ñang phaùt hình chính
noù, vaø trong aûnh cuûa maùy thu hình trong hình ta
laïi thaáy moät aûnh nöõa cuûa maùy thu hình nöõa, cöù
theá treân maøn hình coù raát nhieàu maùy thu hình, caùi
naøy loàng vaøo caùi kia.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
C ñöôïc goïi laø moät ngoân ngöõ ñeä quy vì C cho pheùp
moät haøm coù theå goïi ñeán chính noù moät caùch tröïc
tieáp, hoaëc giaùn tieáp (töùc laø goïi qua trung gian moät
haøm khaùc), khi ñoù ta noùi haøm ñoù coù tính ñeä quy
(recursive).
Nhö vaäy, moät giaûi thuaät ñeä quy seõ daãn ñeán moät söï
laëp ñi laëp laïi khoâng keát thuùc caùc thao taùc, nhöng
trong thöïc teá, chuùng caàn phaûi ñöôïc keát thuùc, söû
duïng caùc ñieàu kieän keát thuùc ñeä quy.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
8. Vieát moät haøm nhaän moät chuoãi vaø cho pheùp ñaûo
chuoãi ñoù, in ra keát quaû.
9. Vieát moät haøm cho pheùp nhaän moät soá nguyeân
döông. In ra maøn hình kyù soá thöù n tính töø beân
phaûi qua cuûa soá ñoù.
Ví duï:
Nhaäp: 12345 4
Xuaát: 2
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
10. Thieát keá moät haøm ñeä quy cho pheùp nhaän moät
soá nguyeân döông, in ra maøn hình soá ñoù ôû daïng
nhò phaân.
11. Vieát haøm ñeä quy tính xn.
12. Vieát moät haøm nhaän moät soá döông coù phaàn leû
vaø in ra maøn hình phaàn nguyeân vaø phaàn leû rieâng
bieät.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 10
LÔÙP LÖU TRÖÕ CUÛA BIEÁN
SÖÏ CHUYEÅN KIEÅU
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 10
LÔÙP LÖU TRÖÕ CUÛA BIEÁN
SÖÏ CHUYEÅN KIEÅU
10.1 Khaùi nieäm
10.2 Bieán toaøn cuïc vaø bieán cuïc boä
10.3 Bieán tónh (static)
10.4 Bieán REGISTER
10.5 Khôûi ñoäng trò cho bieán ôû caùc lôùp
10.6 Söï chuyeån kieåu
Baøi taäp cuoái chöông
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Moãi bieán khi ñöôïc söû duïng trong chöông trình ñeàu
phaûi ñöôïc khai baùo, tuy nhieân bieán coù theå ñöôïc
khai baùo ôû nhieàu choã trong chöông trình, bieán coù
theå ñöôïc khai baùo trong haøm, ngoaøi haøm..., moãi
choã nhö vaäy seõ laøm cho bieán coù khaû naêng söû duïng
khaùc nhau, töø ñoù hình thaønh neân caùc lôùp löu tröõ
bieán.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ñoái vôùi C, döïa vaøo caùch maø bieán ñöôïc löu tröõ vaø
söû duïng, bieán seõ ôû moät trong caùc lôùp löu tröõ khaùc
nhau sau ñaây:
- Lôùp bieán töï ñoäng
- Lôùp bieán toaøn cuïc vaø bieán cuïc boä
- Lôùp bieán tónh
-Lôùp bieán thanh ghi
Coù hai ñaëc tính quan troïng cuûa moät bieán: taàm söû
duïng cuûa bieán vaø thôøi gian toàn taïi cuûa bieán.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Taàm söû duïng cuûa bieán (scope) laø nôi maø bieán coù theå
ñöôïc söû duïng trong caùc leänh cuûa chöông trình. Do
ñaëc tính naøy maø ta coù hai lôùp löu tröõ khaùc nhau laø
- lôùp löu tröõ bieán toaøn cuïc (global storage class)
- lôùp löu tröõ bieán cuïc boä (local storage class).
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Thôøi gian toàn taïi cuûa bieán (time life) xaùc ñònh raèng
bieán vôùi giaù trò ñang toàn taïi trong noù seõ coù yù nghóa
ñeán luùc naøo. Sinh ra 2 lôùp:
-lôùp bieán töï ñoäng (auto)
-lôùp bieán tónh (static)
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ñeå khai baùo bieán tónh ta caàn theâm töø khoùa static
tröôùc khai baùo bieán bình thöôøng, cuù phaùp nhö sau:
static kieåu danh_saùch_teân_bieán;
Bieán toaøn cuïc tónh laø bieán khai baùo ngoaøi taát caû caùc
haøm, trong moät module chöông trình naøo ñoù vaø chæ
coù yù nghóa söû duïng bôûi caùc haøm trong cuøng module
ñoù maø thoâi. Caùc haøm trong caùc module khaùc cuûa
chöông trình khoâng theå söû duïng ñöôïc caùc bieán toaøn
cuïc daïng static nhö theá naøy.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Bieán cuïc boä tónh laø caùc bieán ñöôïc khai baùo trong
haøm vaø chæ coù yù nghóa söû duïng trong haøm coù khai
baùo ñoù maø thoâi.
Nhöng caùc bieán cuïc boä tónh khaùc vôùi bieán cuïc boä
(hay töï ñoäng) ôû thôøi gian toàn taïi, bieán tónh toàn taïi
suoát trong boä nhôù töø luùc noù ñöôïc söû duïng laàn ñaàu
tieân cho ñeán khi keát thuùc chöông trình, vaø giaù trò
cuûa chuùng khoâng heà maát ñi khi ra khoûi hoaëc trôû
vaøo haøm chöùa noù.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï :
static int a;
main()
{
clrscr();
...
}
int func(void)
{
static int b;
...
}
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
#include <stdio.h>
#include <conio.h>
int tong (int a);
main()
{ int n, i, kq;
clrscr();
printf ("Nhap tri n: ");
scanf ("%d", &n);
for (i = 1; i <= n; i++)
kq = tong (i);
printf ("Ket qua: %d", kq);
getch(); }
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Trong chöông trình treân, trong haøm tong(), ta coù khai baùo moät bieán cuïc
boä tónh, bieán tam, bieán naøy chæ ñöôïc khôûi ñoäng trò moät laàn ñaàu chöông
trình, trò 0, sau ñoù trò cuûa bieán naøy luoân ñöôïc giöõ laïi cho laàn söû duïng sau
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï 4.9: Khôûi ñoäng trò cuûa bieán static tam trong
haøm toång
void xoa (void)
{
int temp;
if ( (temp = tong(0)) != 0 )
tong(-temp);
}
Ví duï 4.10: (SGT)
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Haøm ñöôïc khai baùo laø static thì noù chæ coù theå ñöôïc
söû duïng trong module maø noù ñöôïc khai baùo vaø ñònh
nghóa maø thoâi. Cuù phaùp khai baùo vaø ñònh nghóa
haøm static nhö sau:
Boä dòch C cho pheùp taän duïng caùc taøi nguyeân coù saün
cuûa maùy ñeå toái öu hoùa chöông trình, moät trong caùc
toái öu naøy laø C cho pheùp laäp trình vieân söû duïng
moät soá thanh ghi cuûa boä vi xöû lyù ñeå khai baùo bieán,
bieán naøy goïi laø bieán thanh ghi (register). Khai baùo
bieán thanh ghi:
register kieåu danh_saùch_teân_bieán;
vôùi kieåu laø kieåu khai baùo cho bieán, kieåu naøy chæ coù
theå laø int, char, unsigned, long hoaëc pointer
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
register int i;
register char c;
register unsigned u;
resister long l;
register int *r;
register t;
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Taàm söû duïng vaø thôøi gian toàn taïi cuûa caùc bieán
thanh ghi töông töï nhö caùc bieán cuïc boä, nhöng
chuùng ñöôïc truy xuaát nhanh hôn caùc bieán cuïc boä
bình thöôøng vì chuùng chính laø caùc thanh ghi cuûa boä
vi xöû ly.
Caùc bieán thanh ghi thöôøng ñöôïc söû duïng laøm caùc
bieán ñieàu khieån trong caùc voøng laëp hoaëc caùc bieán
phaûi truy xuaát nhieàu laàn trong chöông trình.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Khi thöïc hieän caùc pheùp toaùn soá hoïc hoaëc luaân lyù, C
luoân thöïc hieän söï chuyeån kieåu töï ñoäng.
C coøn cho pheùp laäp trình vieân thöïc hieän vieäc
chuyeån kieåu baét buoäc, eùp kieåu (type casting). Cuù
phaùp ñeå eùp kieåu moät bieán, haèng hay bieåu thöùc:
(type) giaù_trò
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
Cho khai baùo bieán sau:
int a = 10, b = 3;
double d;
bieåu thöùc naøo cho keát quaû ñuùng, giaûi thích?(xem laïi
thöù töï öu tieân caùc pheùp toaùn cuûa C)
a) d = (double)(a/b);
b) d = (double)a/b;
c) d = a/(double)b;
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
1. Vieát moät haøm sao cho moãi laàn goïi haøm thì haøm
seõ traû veà moät trò soá ngay sau trò tröôùc ñoù trong
daõy soá Fibonaci.
2. Vieát chöông trình vôùi caùc haøm tính caùc bieåu thöùc
sau ñaây: duøng vaø khoâng duøng bieán thanh ghi
1 + ... + n 1 + ... + (n − 1) 1 + ... + (n − 2) 1
t= − + − ... +
n! (n − 1)! (n − 2)! 1!
(1 + ... + n) + (1 + ... + (n − 1)) + (1 + ... + (n − 2)) + ... + 1!
T=
n !+ (n − 1)! + (n − 2)! + ... + 1!
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 11
MAÛNG
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 11
MAÛNG
11.1 Khaùi nieäm
11.2 Khai baùo maûng
11.3 Khôûi ñoäng trò cuûa maûng
11.4 Maûng laø ñoái soá cuûa haøm maûng laø bieán toaøn cuïc
11.5 Caùc öùng duïng
Baøi taäp cuoái chöông
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Maûng laø moät bieán caáu truùc trong ñoù coù nhieàu phaàn
töû cuøng kieåu, moãi phaàn töû laø moät bieán thaønh phaàn
cuûa maûng. Moãi bieán thaønh phaàn naøy laø moät bieán
bình thöôøng vaø coù cöôùc soá (subscript) ñeå phaân bieät
giöõa phaàn töû naøy vaø phaàn töû kia. Nhö vaäy, ñeå truy
xuaát moät phaàn töû cuûa maûng, ta caàn bieát ñöôïc cöôùc
soá cuûa noù.
Trong boä nhôù, caùc phaàn töû cuûa maûng ñöôïc caáp phaùt
oâ nhôù coù ñòa chæ lieân tieáp nhau.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
C cuõng cho pheùp laäp trình vieân khai baùo vaø laøm
vieäc treân maûng moät chieàu (singledimensional
array) vaø maûng nhieàu chieàu (multidimensional
array). Soá phaàn töû treân moät chieàu ñöôïc goïi laø kích
thöôùc cuûa chieàu ñoù.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
thì trong thöïc teá khoâng coù phaàn töû a[10], nhöng
vieäc gaùn cuõng ñöôïc thöïc hieän, vaø oâ nhôù keá tieáp
phaàn töû a[9] ñöôïc gaùn trò.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Khi khai baùo maûng laø bieán toaøn cuïc hoaëc tónh thì
maûng coù theå ñöôïc khôûi ñoäng trò baèng caùc giaù trò
haèng.
Ví duï :
int a[5] = {1, 3, 5, 7, 9};
int b[10] = {1, 2, 3, 4, 5};
Neáu soá trò ít hôn soá phaàn töû maûng thì caùc phaàn töû
coøn laïi khoâng ñöôïc khôûi ñoäng trò, coù nghóa caùc
phaàn töû naøy coù trò laø 0.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
double a[] = {1.23, –5.67, 9.87, 1.34};
Ví duï :
Chuoãi char s[] = “Hello”;
H e l l o \0
H e l l o
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
86 3 10 23 12 67 59 47 31 24
Böôùc 1: 55 86 3 10 23 12 67 59 47 31 24
Böôùc 2: 35 24 3 10 23 12 31 47 59 67 86
Böôùc 3: 27 24 3 10 23 12 31 47 59 67 86
Böôùc 4: 18 24 3 10 23 12 31 47 59 67 86
Böôùc 5: 11 12 3 10 23 24 31 47 59 67 86
Böôùc 6: 6 10 3 12 23 24 31 47 59 67 86
Böôùc 7: 23 3 10 12 23 24 31 47 59 67 86
Böôùc 8: 72 3 10 12 23 24 31 47 59 67 86
Böôùc 9: 63 3 10 12 23 24 31 47 59 67 86
Böôùc 10: 63 3 10 12 23 24 31 47 59 67 86
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 12
POINTER
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 12
POINTER
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Trong ngoân ngöõ C, moãi bieán vaø chuoãi kyù töï ñeàu
ñöôïc löu tröõ trong boä nhôù vaø coù ñòa chæ rieâng, ñòa
chæ naøy xaùc ñònh vò trí cuûa chuùng trong boä nhôù.
Khi laäp trình trong C, nhieàu luùc chuùng ta caàn laøm
vieäc vôùi caùc ñòa chæ naøy, vaø C uûng hoä ñieàu ñoù khi
ñöa ra kieåu döõ lieäu pointer (taïm dòch laø con troû)
ñeå khai baùo cho caùc bieán löu ñòa chæ.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Moät bieán coù kieåu pointer coù theå löu ñöôïc döõ lieäu
trong noù, laø ñòa chæ cuûa moät ñoái töôïng ñang khaûo
saùt. Ñoái töôïng ñoù coù theå laø moät bieán, moät chuoãi
hoaëc moät haøm.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
int heä_soá_a;
thì
& heä_soá_a
seõ laø ñòa chæ cuûa bieán heä_soá_a.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Coù moät söï töông quan chaët cheû giöõa maûng vaø
pointer, vì trong C, teân maûng laø moät haèng
pointer, noù chính laø ñòa chæ cuûa phaàn töû ñaàu tieân
cuûa maûng.
Ví duï: Cho khai baùo sau:
int a[10];
int *pa;
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Coù theå truy suaát ñeán caùc ñoái töôïng cuûa maûng maø
pointer ñang troû ñeán nhö sau:
pa[0] chính laø phaàn töû a[0]
pa[1] chính laø phaàn töû a[1]
...
pa[i] chính laø phaàn töû a[i].
Ví duï 6.15 (SGT)
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
Sau khi khai baùo
int a[10];
thì trong boä nhôù, a laø moät haèng pointer, hay moät
ñòa chæ coá ñònh
Caùc phaàn töû trong maûng ñang coù trò raùc.
Vì teân maûng laø moät haèng pointer
a++;
laø khoâng hôïp leä.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
int *pa;
thì trong boä nhôù
Moät pointer coù theå ñöôïc traû veà töø haøm, neáu
pointer troû ñeán ñoái töôïng laø maûng, thì haøm traû veà
maûng; neáu pointer chæ troû ñeán bieán bình thöôøng,
thì haøm chæ traû veà con troû troû ñeán bieán thöôøng, cuù
phaùp khai baùo haøm nhö sau:
kieåu * teân_haøm (danh_saùch_khai_baùo_ñoái_soá);
vôùi kieåu laø kieåu cuûa ñoái töôïng maø pointer ñöôïc
haøm traû veà troû ñeán.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
int *pint;
pint = (int *) malloc (10 * siezof (int));
hoaëc
pint = (int *) calloc (10, siezof (int));
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
int * pint[4];
int a[3], b[3], c[3], d[3];
pint[0] = a;
pint[1] = b;
pint[2] = c;
pint[3] = d;
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Moät maûng caùc pointer cuõng coù theå ñöôïc khôûi ñoäng
trò neáu maûng laø maûng toaøn cuïc hay maûng tónh.
Ví duï:
static char *thu[7] = {"Thu 2", "Thu 3", "Thu 4",
"Thu 5", "Thu 6", "Thu 7", "Chua nhat"};
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï :
int *m[4];
int a = 1, b = 2, c = 3, d = 4; int **pint;
pint = m;
m[0] = &a; m[1] = &b; m[2] = &c; m[3] = &d;
Thay vì truy xuaát tröïc tieáp a, b, ..., ta coù theå duøng
pointer
*(pint[i])
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï 6.51(SGT)
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
C hoaøn toaøn cho pheùp vieäc nhaän ñoái soá vaøo haøm
main(), coù hai ñoái soá C ñaõ quy ñònh theo thöù töï:
int agrc: ñoái soá cho bieát soá tham soá ñaõ nhaäp, keå
caû teân chöông trình.
char *argv[]: maûng caùc pointer troû ñeán caùc chuoãi
laø tham soá ñi theo sau teân chöông trình khi chaïy
chöông trình töø DOS.
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
Neáu khai baùo int (* p_function) (int, int);
vaø ñaõ coù haøm
int cong (int a, int b)
{
...
}
p_function = cong;
tong = (*p_function) (m, n);
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 13
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC
VAØ KIEÅU DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
CHÖÔNG 13
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC
VAØ KIEÅU DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA
13.1 Kieåu STRUCT
13.2 Kieåu UNION
13.3 Kieåu ENUM (Enumerated)
13.4 Ñònh nghóa kieåu baèng TYPEDEF
Baøi taäp cuoái chöông
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
struct sinh_vieân
{
char ma_so[10];
char ho_ten[40];
int tuoi;
char dia_chi[80];
};
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Cuù phaùp cuûa moät khai baùo bieán caáu truùc gioáng nhö
khai baùo bieán bình thöôøng:
struct teân_struct teân_bieán;
Ví duï:
struct sinh_vien sv1, sv2;
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ví duï:
struct sinh_vien sv1 = { "4950897", "Tran van
Vinh", 21, "42 Truong Cong Dinh p.13 q.TB"};
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Ñeå truy xuaát moät thaønh phaàn cuûa bieán caáu truùc, C
coù toaùn töû chaám “.” ñeå laáy töøng thaønh phaàn.
Ví duï:
strcpy (sv1.ma_so, 4950897");
strcpy (sv1.ho_ten, Tran van Dinh");
sv1.tuoi = 21;
strcpy (sv1.dia_chi, "42 Truong Cong Dinh p.13 q.TB");
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
C cho pheùp gaùn caùc caáu truùc cuøng kieåu cho nhau
qua teân bieán caáu truùc thay vì phaûi gaùn töøng thaønh
phaàn cho nhau.
Ví duï:
sv2 = sv1;
Ví duï 7.8 (SGT)
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Caùc thaønh phaàn cuûa bieán struct cuõng laø bieán bình
thöôøng, neân ta coù theå laáy ñòa chæ cuûa chuùng, ñòa
chæ naøy laø moät haèng pointer troû ñeán thaønh phaàn
töông öùng.
Ví duï 7.9 (SGT)
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C
Kieåu struct coù theå ñöôïc laáy kích thöôùc tính theo
byte nhôø toaùn töû sizeof, ví duï:
sizeof (struct sinh_vien);
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN
NGÖÕ C