Uploaded by Hi Hi

thực-hành-C

advertisement
T
Biên
www.hutech.edu.vn
*1.2020.cmp3017*
này, xin
tailieuhoctap@hutech.edu.vn
-
:
I
...................................................................................................................I
.......................................................................................................... III
BÀI 1: LÀM QUEN V
1.1 TÓM
LÝ
.................................................................... 1
........................................................................................... 1
.................................................................................................... 1
1.1.2
......................................................................... 2
1.1.3
à phép toán ............................................................................... 2
1.1.4
......................................................................... 3
1.1.5
......................................................................................... 3
1.2
HÀNH
1.3
HÀNH NÂNG CAO....................................................................................... 7
BÀI 2: C
2.1 TÓM
........................................................................................... 3
U KHI N
LÝ
C U TRÚC IF VÀ SWITCH .......................................... 8
........................................................................................... 8
...................................................................................................... 8
............................................................................................. 8
............................................................................................... 9
2.2
HÀNH
2.3
HÀNH NÂNG CAO..................................................................................... 13
BÀI 3: C
3.1 TÓM
......................................................................................... 10
U KHI N - C U TRÚC L P ......................................................... 14
LÝ
......................................................................................... 14
.................................................................................................. 14
............................................................................................... 15
....................................................................................... 15
3.2
HÀNH
......................................................................................... 16
3.3
HÀNH NÂNG CAO..................................................................................... 21
...................................................................................... 22
4.1 TÓM
LÝ
......................................................................................... 22
............................................................ 22
.......................................................................... 23
.......................................................................................... 24
........................................................................ 24
4.2
HÀNH
......................................................................................... 25
4.3
HÀNH NÂNG CAO..................................................................................... 28
BÀI 5: M NG ............................................................................................................. 29
5.1 TÓM
LÝ
......................................................................................... 29
5.2
HÀNH
......................................................................................... 30
5.3
HÀNH NÂNG CAO..................................................................................... 34
II
BÀI 6: KI U D
6.1 TÓM
LI U CÓ C U TRÚC........................................................................... 35
LÝ
......................................................................................... 35
6.2
HÀNH
......................................................................................... 36
6.3
HÀNH NÂNG CAO ..................................................................................... 39
6.4
TRA
TÀI
THAM
HÀNH ...................................................................................... 45
............................................................................................. 46
III
Môn Th c hành K
thu t L p trình cung c p cho sinh viên nh ng k
n v ngôn ng
l p trình C. Môn h c này là n n t
môn h
phát tri
c
ti p thu h u h t các
o. M t khác, n m v
y và k
gi i các bài toán và các
ng d
t .
H c xong môn này, sinh viên ph i n
-
T ng quan v Ngôn ng l p trình C.
-
Các ki u d
-
Các l nh có c u trúc.
-
Cách thi t k và s d ng các hàm trong C.
-
X
-
Bi t xây d ng và x
c các v
sau:
li u trong C.
lý các bài toán trên m ng m t chi u.
-
và x
lý các bài toán trên d
li u có c u trúc do ng
lý các file trong C.
N I DUNG MÔN H C
-
Bài 1: Làm quen v
C.
-
Bài 2: C
u khi n
c u trúc IF và SWITCH
-
Bài 3: C
u khi n
c u trúc l p
-
Bài 4: C
-
Bài 5: M ng
-
Bài 6: Ki u d li u có c u trúc
YÊU C U MÔN H C
t v logic và ki n th c toán h
n.
i dùn
nh
IV
CÁCH TI P NH N N I DUNG MÔN H C
Th c hành K
thu t l p trình là môn h
u tiên giúp sinh viên làm quen v i
l p trình trên máy tính, giúp sinh viên có khái ni m c
n v cách ti p
c n và gi i quy t các bài toán tin h c, giúp sinh viên có kh
duy c
i l p trình, và là ti
c a ngành Công ngh
ti p c n v i các h c ph n quan tr ng còn l i
Thông tin. Vì v y, yêu c
bu i th c hành t i l p, th c hành l i các bài t p
n l p và g ch chân nh ng v
pc nv
i h c ph i d
h c
các
nhà, nghiên c u tài li
c khi
không hi
c tài li
nl
i.
ÁNH GIÁ MÔN H C
h c t
i h c c n ôn t p các b
bài t
c, tr
l i các câu h i và
c bài m
n bài
h c.
i v i m i bài h
i h
th c hành các bài t
c ph n tóm t t ki n th c lý thuy
n nâng ca
ý xem k
ng d n trong m i bài
th c hành và làm theo. K t thúc m i bài h c, h c viên c n làm l i các bài th c hành
nhà và luy n t p thêm.
m 2 ph n
1.
m quá trình (chuyên c
m bài th c hành hàng tu n).
2.
m cu i k (bài thi th c hành trên máy).
1
BÀI 1:
BÀI 1: LÀM QUEN V
TRÌNH C
Sau khi th c hành xong bài này, sinh viên có th n
-
Làm quen v i c u trúc chung c a m t
-
Các l nh nh p, xu t d
-
Các ki u d
-
Các phép toán và các hàm chu n c a ngôn ng
-
Th c hi n vi
c:
n.
li u (printf, scanf).
li u chu
nh s
l p trình C.
d ng các l
n.
1.1
1.1.1
Ký hi u
{}
Di n gi i
B
u và k t thúc hàm hay kh i l nh.
Ví d
int main()
{
}
;
K t thúc khai báo bi n, m t l nh, m t int x;
l i g i hàm, hay khai báo nguyên m u void NhapMang(int a[], int &n);
hàm.
//
Chú thích (ghi chú) cho m t dòng. Ch
có tác d
i v
trình.
/*
*/
ng h p nhi u dòng.
//Ham nay dung de nhap mang
void NhapMang(int a[], int &n);
/* Dau tien nhap vao n. Sau do
nhap cho tung phan tu */
void NhapMang(int a[], int &n);
2
BÀI 1:
1.1.2
Ki u
Ghi chú
Ki u liên t c (s
c
nh d ng
th c)
Float
4 bytes
%f
double
8 bytes
%f
long double
10 bytes
%lf
Ký t
1 byte
%c
S nguyên
1 byte
%d
unsigned char
S
1 byte
%d
Int
S nguyên
2 bytes
%d
unsigned int
S
2 bytes
%u
Long
S nguyên
4 bytes
%ld
unsigned long
S
4 bytes
%lu
Ki u r i r c (s
nguyên)
Char
1.1.3
Phép toán
Ghi chú
+,-,*,/
C ng, tr , nhân, chia
%
Chia l y ph
>, >=, <, <=,
L
nh
==
B ng nhau
!=
Khác nhau
!
NOT
&&
AND
||
OR
++
--
Ví d : 5%2=1
c b ng,
c b ng
N u toán t
Gi m 1
ho
gi m
c thì
c r i tính bi u th c
c l i.
3
BÀI 1:
1.1.4
Cú pháp
Di n gi i
Nh p d
nh p t
bi n
nh d
a ch c a các bi n);
li u: l y d
Ví d
li u
Xu t 1 thông báo ra màn
hình.
nh d
Các bi u th c);
int x; float y;
minh hoa\
Xu t giá tr c a các bi u
th c lên màn hình.
1.1.5
if (bi u th
u ki n)
công vi c 1;
else
công vi c 2;
-
Bi u th
u ki n ph
-
Công vi c c n th c hi n có th
các l nh con ph
t trong c p d u ngo c ( ).
g m 1 hay nhi u l nh. N u g m nhi u l nh con thì
c gom vào trong c p d u {}
g i là kh i l nh.
1.2
Câu 1: Làm quen v i c u trúc chung c a m
n:
M C-free/Dev-C, vào File/New/Source file.
i ph n m r ng là .cpp (Ví d : Cau1.cpp)
n stdio.h vì nó ch a hàm printf.
#include<stdio.h>
int main()
{
printf("Hello, World!");
4
BÀI 1:
printf("Hello, World!\n");
printf("Hello, \nWorld!\n");
printf("Hello, \tWorld!\n");
return 0;
}
Hãy biên d ch và ch
t qu
hi n ra màn hình và rút ra nh n
xét.
Phím t
-
C-free: F5
-
Dev-C: F11
biên d ch và ch
Câu 2: Vi
Run):
t thi p m i d
sinh nh t có d ng:
*******************************************
THIEP MOI
Toi du le sinh nhat cua minh
Vao luc 19h ngay 20/10/2016
Tai: 05/42 Vinh Vien
TP. HCM
Rat mong duoc don tiep!
Ho Le Thu
*******************************************
-
ng d n: Áp d ng \t (tab), \n (xu ng dòng), \
Câu 3: Vi
c hi n:
a. Nh p m t s nguyên. Xu t ra màn hình s nguyên v a nh p.
b. Nh p m t s th c. Xu t ra màn hình s th c v a nh p.
c. Nh p m t kí t . Xu t ra màn hình kí t
v a nh p.
5
BÀI 1:
d. Nh p hai s
nguyên. Hãy tính t ng, hi
a hai s
t k t
qu ra màn hình.
#include<stdio.h>
int main()
{
//câu a
int a;
/
float b ;
thuc
thuc da nhap la %f
f
b);
b);
//câu c
char z;
fflush(stdin); //xoá b nh
m
//câu d
int x, y, z;
printf("Moi nhap hai so nguyen de cong: ");
scanf("%d%d", &x, &y);
z = x + y;
printf("Tong hai so la %d\n", z);
//ho c printf("Tong hai so la %d\n", x+y);
v i phép hi u,
phép chia */
u d
li u k t qu
c a
return 0;
}
Câu 4: Vi
p vào bán kính r c a m t hình tròn. Tính chu vi và di n
tích c a hình tròn. In các k t qu lên màn hình.
6
BÀI 1:
hình tròn
Ki u_ d _ li u Tên_bi n; VD: float r;
Cách 1: #define Tên_h ng Giá_tr
VD: #define MAX 100
Cách 2: const Ki u_d _li u Tên_h ng=Giá tr ;
VD: const int MAX=100;
Di n tích hình tròn: PI*r*r
Chu vi hình tròn: 2*PI*r.
Câu 5: Vi
c hi n:
a. Nh p vào hai s nguyên. Xu t ra màn hình giá tr l n nh t.
b. Nh p vào ba s nguyên. Xu t ra màn hình giá tr l n nh t.
ng d n:
Nh p vào hai s nguyên. Xu t ra màn hình giá tr l n nh t.
-
Khai báo hai bi n a, b
-
nguyên.
i dùng nh p 2 s nguyên a và b (dùng printf, scanf).
-
S
d ng m t bi n max
l n nh t trong hai s , khai báo max.
-
So sánh hai s a và b, n u s nào l
-
Xu t ra màn hình giá tr l n nh
c: xu t giá tr bi n max
Nh p vào ba s nguyên. Xu t ra màn hình giá tr l n nh t.
-
, khai báo 3 bi n a, b, c và max
-
Gi s a là s l n nh t, t c max = a.
-
L
t so sánh hai s
max = s
-
l n nh t.
còn l i b, c v i max, n u s nào l
max thì c p nh t
u b>max thì max=b. N u c>max thì max=c.
Xu t ra màn hình giá tr l n nh
c: xu t giá tr bi n max.
7
BÀI 1:
1.3
Câu 6: Nh p vào 3 s
a, b, c. Ki m tra xem 3 s
p thành tam
giác không? N u có hãy tính chu vi và di n tích c a tam giác theo công th c:
-
Chu vi CV = a+b+c.
-
Di n tích S = sqrt(p*(p-a)*(p-b)*(p-
-
Xu t các k t qu ra màn hình.
ng d n:
a, b, c là s
u ki
a, b, c ki u unsigned int.
3 s
l p thành tam giác: t ng 2 c nh ph i l
nh còn l i.
V y: a, b, c l p thành 3 c nh c a tam giác khi và ch khi a+b>c và a+c>b và
b+c>a.
Tính di n tích và chu vi theo công th
c hai sqrt(x)
Câu 7: Vi
n <math.h>.
cm ts
VD: Nh p vào n=234
s .
In ra: 432
ng d n:
-
L
t l y các ch
màn hình theo th
s (s
t :
Ch
s
Ch
s hàng ch c
Ch
s
Ví d : 234 %10 =4
234 /10 =23
23 %10 =3
23/10=2
2%10=2
2/10=0 -> d ng
d ng phép chia / và phép chia l y ph
và in ra
8
BÀI 2:
BÀI 2: C
U KHI N
C U TRÚC IF VÀ SWITCH
Sau khi th c hành xong bài này, sinh viên có th n
c:
-
N m v ng cú pháp, cách th c ho
ng c a c u trúc r
-
N m v ng cú pháp, cách th c ho
ng c a c u trúc switch
2.1
2.1.1
Cú pháp:
if (bi u th
u ki n)
công vi c;
Ý
N u bi u th c
u ki n cho k t qu
c hi n
u ki n cho k t qu
c hi n
công vi c.
2.1.2
Cú pháp:
if (bi u th
u ki n)
công vi c 1;
else
công vi c 2;
Ý
công vi
N u bi u th
c l i thì th c hi n công vi c th 2.
BÀI 2:
-
Bi u th
u ki n ph
-
Công vi c c n th c hi n có th
các l nh con ph
H
9
t trong c p d u ngo c ( ).
g m 1 hay nhi u l nh. N u g m nhi u l nh con thì
c gom vào trong c p d u {}
g i là kh i l nh.
2.1.3
Cú pháp:
switch (bieu_thuc)
{
case gia_tri_1:
các câu l nh;
break;
/*l
hi n xong m
i l nh switch sau khi th c
ng h p*/
...
case gia_tri_n:
các câu l nh;
break;
[default: cv th c hi n m
nh n u bi u th c không có giá tr nào trong các
case] //có th có ho c không tu bài toán
}
Gia_tri_i: là các h ng s nguyên ho c ký t .
Ph thu c vào giá tr c a bi u th c vi t sau switch, n u:
-
Giá tr này = gia_tri_i thì th c hi n câu l nh sau case gia_tri_i.
-
Khi giá tr bi u th c không th a t t c
các gia_tri_i thì th c hi n câu l nh sau
default n u có, ho c thoát kh i câu l nh switch.
-
c hi n xong câu l nh c a case gia_tri_i
th c hi n luôn các l nh thu
i nó mà không xét l
gia_tri_i
sau khi th c hi n xong m
u ki n (do các
i l nh switch
ng h p, ta dùng l nh break.
10
BÀI 2:
2.2
Câu 1: Vi
i
c nh t ax + b = 0 v i a, b nh p t
bàn
phím.
ng d n:
-
Khai báo hai bi n a, b ki u s th
nh p tùy ý t
Gi i thu
-
Hãy v n d ng l
ràng nh t.
#include <stdio.h>
#include< conio.h>
{
float a,b;
c
bàn phím. Nh p a, b.
-
int main()
s
ng h p a = 0 và a
0.
t gi i thu
i dùng
11
BÀI 2:
nhap a;
nhap b;
if ( a ==0 )
if ( b==0 )
else
else
-b/a );
return 0;
}
c hai ax2 + bx + c = 0. V i a, b, c nh p
Câu 2: Vi
t bàn phím.
ng d n:
-
Khai báo 3 bi n a, b, c ki u s th c. Nh p các h s a, b, c.
-
Xét a = 0
thành b c nh t, gi i và bi n lu n theo b, c
bài 1).
-
Xét a
0. Tính delta, d = b*b-4*a*c
ng h p d = 0, d < 0 và d > 0.
-
N
m.
-
N u d=0 thì
m kép x1 = x2 = -b/(2*a)
-
N
m phân bi t
-
c hai sqrt(s ) n
Câu 3: Nh p vào 3 s
giác không? N u có hãy cho bi
n <math.h>.
a, b, c. Ki m tra xem 3 s
p thành tam
c lo
ng d n:
-
a, b, c là s
c a ki u này là %u.
a, b, c ki u unsigned int . Chu
nh d ng
12
-
BÀI 2:
u ki
3 s
l p thành tam giác: t ng 2 c nh ph i l
a, b, c l p thành 3 c nh c a tam giác
-
a+b> c và a+c>b và b+c>a.
Xét lo i tam giác:
Tam giác cân
u
-
nh còn l i. V y:
Tam giác vuông
a = b ho c b = c ho c c = a.
a=b=c.
a2=b 2+c2 ho c b2=a2+c2 ho c c2=a2+b 2.
Câu 4: Vi
p s nguyên có hai ch
s , hi n th
cs
ng d n:
-
Khai báo và nh p s nguyên n.
-
N u 9 < n < 100 thì
Th c hi
c s n.
c l i thì xu t ra thông báo "s nh p vào không ph i là s có hai ch
s ".
c s n:
L y ch
s hàng ch c n/10. S
L y ch
s
d ng câu l nh switch
n%10. S
c ch
d ng câu l nh switch
s hàng ch c
c ch
s
hàng
.
Câu 5: Vi
p vào tháng c a m
u tháng nh p vào <1 ho
t s
ngày c a tháng
nt
ng d n:
-
Khai báo bi n và nh p vào tháng.
-
Các tháng 1, 3, 5, 7, 8, 10, 12 có 31 ngày
-
Các tháng 4, 6, 9, 11 có 30 ngày
-
N u là tháng 2 thì yêu c u nh
n thì tháng 2 có 29
ngày, còn l i là 28 ngày.
-
t cho 4 ( ho c nh
b nl ys
u chia h
cu i là s
n)
0 thì các
BÀI 2:
-
N u tháng nh p vào không thu
13
n t i
2.3
Câu 6: Nh
m
không? In k t qu ra màn hình.
Câu 7: Vi
c TAXI. Bi t r ng:
-
200m ti
-
N ul
-
Hãy nh p s
i km thêm s
ti n ph i tr .
p l hay
14
BÀI 3:
-
BÀI 3: C
U KHI N -
C U TRÚC L P
Sau khi th c hành xong bài này, sinh viên có th n
c:
-
N m v ng cú pháp, cách th c ho
ng c a c u trúc l p for.
-
N m v ng cú pháp, cách th c ho
ng c a c u trúc l p while.
-
N m v ng cú pháp, cách th c ho
ng c a c u trúc l p do ... while.
3.1
3.1.1
Cú pháp:
for (bi u th c kh i gán; bi u th
u ki n; bi u th
m)
{
kh i l nh th c hi n công vi c;
}
c 1: Kh i gán cho bi u th c 1
c 2: Ki
-
N u bi u th
Quay tr l
-
u ki n c a bi u th c 2.
c hi n các l nh c a vòng l p, th c hi n bi u th c 3.
c 2.
c l i thoát kh i l p.
BÀI 3:
-
15
3.1.2
Cú pháp:
<Kh i gán>
while (bi u th
u ki n)
{
L nh/ kh i l nh;
m ch s l p;
}
Cách ho
ng c a while gi ng for.
3.1.3
Cú pháp:
do
{
Kh i l nh th c hi n công vi c;
} while (bi u th
u ki n) ;
Th c hi n kh i l
n khi bi u th
u ki n có giá tr sai (có giá
tr b ng 0) thì d ng.
L p while ki
hi n l nh l p r i m i ki
nh t m t l n.
u ki
c khi th c hi n l p, còn vòng l
u ki
c
p do...while th c hi n l nh ít
16
BÀI 3:
-
3.2
Câu 1: Vi
c hi n:
a. Xu t ra màn hình 10 dòng: "XIN CHAO CAC BAN".
b. Xu t ra màn hình n dòng: ""XIN CHAO CAC BAN", v i n nh p t
bàn phím.
ng d n:
a.
nh s l n l p: 10 l
nh công vi c l p: xu
n code sau minh ho
//Cách 1: S
cách dùng các vòng l p for,
d ng vòng l p for
int i;
for(i=1; i<=10; i++)
\
//Cách 2: S
d ng vòng l p while---------------------------------------
i=1;
while (i<=10)
{
\
i=i+1; //ho c i++; ho c i+=1;
}
//Cách 3: S
d ng vòng l
----------------------------------
i=1;
do{
\
i=i+1;
}while (i<=10);
Câu 2: Vi
p vào m t s nguyên n > 0, hãy:
a. Xu t ra màn hình các s trong ph m vi t
b. Xu t ra màn hình các s ch n trong ph m vi t
n n.
n n.
c. Xu t ra màn hình các s l không chia h t cho 3 trong ph m vi t
n n.
BÀI 3:
-
d. Tính các bi u th c sau:
-
S1 = 1 + 2 + ... + n
-
S2 = - 1 +2 - 3 + 4 - ... + (-1)n n.
-
S3 = 1/2 + 2/3 + 3/4 ... + n/(n+1)
-
S4 = xn (x là s th c nh p t
e. Tính t ng các ch
bàn phím).
s c a n. Ví d : n = 125, t ng các ch
s là 8.
ng d n:
Nh p s
nguyên n > 0, n u nh p sai thì b t nh p l i.
do {
p vào s ph n t
if(n<=0)
, nhap lai
}while ( n<=0 );
a. Xu t ra màn hình các s
trong ph m vi t
n n.
17
18
-
BÀI 3:
-
Câu a, b, c, d có th áp d ng c u trúc l p for/while.
ng d n câu b
b. Xu t ra màn hình các s
e. Tính t ng các ch
L
-
Gi
cs.
-
Thu
t l y t ng ch
s , khai báo bi
s
ch n trong ph m vi t
n n.
c an
s c a s n và c ng d n vào bi n t ng.
ng các ch
s
là tong, bi
ng ch
s
c a n là
BÀI 3:
Câu 3: Vi
m s
c c a n. N
c l i xu t ra
c. Tính t
. N u nh p sai thì yêu c u nh p l i.
m b ng 2 thì xu t ra màn hình
i là s nguyên t
hoàn thi
c l i xu t ra
.
ng d n:
-
u ki n nh p l
c n > 100.
do {
p vào s ph n t
if
}while ( n<=0 || n > = 100 );
a.
S
d ng phép chia l
ms
Khai báo bi
nh s
cc an
u tiên gán d=0;
nguyên t
,
.
c c a n (không tính chính nó). N u t n
xu t ra màn hình
thi
19
c hi n:
a. Nh p m t s nguyên n sao cho
b.
-
c c a n.
ng n thì
hoàn
20
BÀI 3:
L
-
t l y n chia l y ph
t
n n, n u s
-> dùng vòng l p
Câu 4: Vi
n th ra màn hình n dòng (0 < n
a.
b.
**********
*
**********
**
**********
***
**********
****
**********
*****
**********
******
10):
nào có s
BÀI 3: C
21
-
C th :
a. Hi n th trên n dòng, m i dòng có k d u *, k
b. Hi n th trên n dòng, dòng th
i dùng nh p.
i có i d u *.
ng d n:
-
Câu a: S
d ng 2 vòng for l ng nhau, vòng for th
n l n), vòng for th
-
Câu b: S
nh
l p xu t ra d u * theo s
d ng 2 vòng for l ng nhau, vòng for th
n l n), vòng for th
l p xét t ng dòng (l p
ng yêu c u (l p k l n).
nh
l p xu t ra d u * theo s
l p xét t ng dòng (l p
ng yêu c u (l p i l n).
3.3
Câu 5: Vi
n th b ng c
Câu 6: Vi
c hi n:
a. Nh p n > 0.
b. Li t kê các s nguyên t
c.
ms
trong ph m vi t
n n.
ng s nguyên t trong ph m vi t
n n.
d. Tính t ng các s nguyên t trong ph m vi t
n n.
ng d n
b. Li t kê các s
nguyên t
trong ph m vi t
n n.
for ( int i=2 ; i<=n ; i++ )
ki m tra nto ( i ) n
c.
ng các s
i;
nguyên t
trong ph m vi t
n n.
int d=0;
for ( int i=2 ; i<=n ; i++ )
ki m tra nto ( i ) n
Câu 7: Vi
;
c hi n:
a. Nh p n > 0.
b. Tính t ng các ch
s c a n. Ví d : v i n = 12537 thì t ng = 1+2+5+3+7=18.
22
BÀI 4:
BÀI 4:
TRÌNH CON
Sau khi th c hành xong bài này, sinh viên có th n
-
Khái ni m v hàm (function) trong C.
-
Cách xây d ng và cách s d ng hàm trong C.
c:
4.1
Hàm là m
tr
c
4.1.1
v
c l p th c hi n tr n v n m t công vi c nh
giá tr
i nó, hay nói cách khác hàm là s
nh
chia nh
23
BÀI 4:
-
s
d
n, khai báo h ng s , khai báo
các bi n toàn c c và khai báo các ki u d
li u t
(các nguyên m u hàm).
-
Nguyên m u hàm:
<Ki u d li u c a hàm> Tên hàm ([danh sách các tham s ]);
-
Nguyên m u hàm th c ch
u c a hàm thêm d u ch m ph y (;) vào
cu i, tuy nhiên tham s trong nguyên m u hàm có th b ph n tên.
-
Hàm chính (main()): Ch a các bi n, các l nh và các l i g i hàm c n thi t trong
-
c s d ng nh m m
Khi có m t công vi c gi ng nhau c n th c hi n
Khi c n chia m
nhi u v trí.
n ph c t
c trong sáng, d
toán và gi i quy t v
nh
hi u trong vi c x
(hàm con)
lý, qu n lý vi c tính
.
4.1.2
-
t hàm bao g m:
Khai báo ki u hàm
t tên hàm
Khai báo các tham s
Các câu l nh c n thi
-
th c hi n ch
a hàm.
Có 2 lo i hàm:
void: Hàm không tr
ch
tr . Nh ng hàm lo
Nh p / xu t d
Ki u d
tr
v
v
li
ng nhóm
li u , th ng kê, s p x p, li t kê.
n (r i r c/ liên t c) hay ki u d
tr . Sau khi th c hi n xong, k t qu
c s
trung bình, t
d
ng h p:
li u có c u trúc: Hàm
i. Nh ng hàm lo i này
m, ki m tra, tìm ki m, tính
24
BÀI 4:
Hàm không tr v tr :
Hàm tr v tr :
void Ten_Ham(ds tham so neu co)
Kieu_dl Ten_Ham(ds tham so neu co)
{
{
Khai báo các bi n c c b ;
Ki u_dl kq;
Các câu l nh / kh i l nh hay l i g i
Khai báo các bi n c c b ;
n hàm khác;
Các câu l nh / kh i l nh hay l i g i
n hàm khác;
}
return kq;
}
//ki u d
li u c a hàm là ki u c a k t qu
tr v .
4.1.3
nh d a vào d li
-
u vào c a bài toán (Input). G m 2 lo i :
Tham tr : Giá tr c a bi n tham s
i sau khi hàm th c hi n
xong. Tham s d ng này ch
li
u vào.
Ví d : int KiemTraNguyenTo(int n);
-
Tham bi n: Có s
i giá tr c a tham s trong quá trình th c hi n và c n l y
l i giá tr
i hàm.
u ra (k t qu ) ho
ng d ng c a tham s lo i này có th là d
v a là d
li
u vào v a là d
Ví d :
Hàm nh p s nguyên: void NhapSoNguyen(int &n);
Hàm hoán v giá tr hai s : void HoanVi(int &a, int &b);
4.1.4
M t hàm ch
c th c thi khi ta có m t l i g
Cú pháp g i hàm:
li
u ra.
li u
25
BÀI 4:
<Tên hàm>([Danh sách các tham s ])
4.2
Câu 1: Vi
c hi n các ch
a. Nh p vào m t s nguyên n (0 < n < 100).
b. Ki m tra n có ph i là s nguyên t không?
c. Li t kê các s nguyên t
d.
ms
trong ph m vi t
n n.
ng s nguyên t trong ph m vi t
n n.
e. Tính t ng các s nguyên t trong ph m vi t
n n.
f. Tính trung bình c ng các s nguyên t trong ph m vi t
n n.
ng d n:
a. Nh p vào m t s nguyên n (0 < n < 100).
void NhapSoNguyen(int &n)
{
L p công vi c{
Nh p n
N u n<=0 ho c n>=100 thì thông báo nh p sai, hãy nh p l i.
} Ch ng nào (n<=0 ho c n>=100);
}
b. Ki m tra n có ph i là s nguyên t không? Hàm tr
v 1: n u n là s nguyên t
Hàm tr v 0: n u n không ph i là s nguyên t
c. Li t kê các s nguyên t
d.
ms
trong ph m vi t
ng s nguyên t trong ph m vi t
Hàm tr v s
ng s nguyên t
n n.
n n.
c trong ph m vi t
n n.
26
BÀI 4:
ÌNH CON
e. Tính t ng các s nguyên t trong ph m vi t
n n.
f. Tính trung bình c ng các s nguyên t trong ph m vi t
-
V i m i hàm, ta test th
n n.
trong hàm main(), sau khi ch y ra k t qu
i
làm ti p nh ng hàm khác.
-
Cách g i th c hi n hàm con trong main(): ch g i tên_hàm (các tham s
th c
ng)
Câu 2: Vi
c hi n ch n l a công vi c:
a. Gi
c 1 ax+b=0.
b. Ki m tra m t s nguyên có là s hoàn thi n không?
c. Li t kê các s
d.
hoàn thi n trong ph m vi t
i dùng nh p)
c chung l n nh t c a hai s nguyên a, b nh p t
bàn phím.
e. Thoát kh
ng d n:
-
nh b n c n vi
ng hàm nào?
Trong hàm main, g
c và
không còn l i, hãy s a
kh
c hi n theo ch
n code sau:
//Xu t ra menu công vi c
void XuatMenu()
{
\
\
n\
BÀI 4:
\
\
}
//-------------------------------------------------n code này vi t trong hàm main()
//dùng m t bi
i dùng ch n int chon;
do{
XuatMenu(); //hi n th menu công vi
i dùng
ch n
case 1:
float a, b;
//nh p h s a, b
//G i hàm gi i pt b c 1
break;
case 2:
//khai báo và nh p s nguyên
//g i hàm Ki m tra x có ph i s
hoàn thi n
không
break;
case 3:
//khai báo và nh p s nguyên n
//g i hàm xu t các s
hoàn thi n trong ph m vi
break;
case 4:
//khai báo và nh p s 2 s nguyên a, b
//g
break;
default: chon=0;
}
}while (chon!=0);
c chung l n nh t
27
28
BÀI 4:
4.3
Câu 3: Vi
pt
N u: ch là
bàn phím 2 s a, b và m t ký t
ch.
thì th c hi n phép tính a + b và in k t qu lên màn hình.
ch là
thì th c hi n phép tính a - b và in k t qu lên màn hình.
ch là
thì th c hi n phép tính a * b và in k t qu lên màn hình.
ch là
thì th c hi n phép tính a / b và in k t qu lên màn hình.
Câu 4: Vi
c gi
ca, gi ra ca c a m
Gi
s
vào
i.
r ng:
-
Ti n tr cho m i gi
-
Gi vào ca s m nh t là 6 gi
vào nguyên).
c 12 gi
sáng và gi ra ca tr
nh t là 18 gi (Gi
s
gi nh p
BÀI 5:
29
BÀI 5: M NG
Sau khi th c hành xong bài này, sinh viên có th n
c:
-
Cách khai báo d
li u ki u m ng
-
Các thao tác nh p xu t, các k thu t thao tác trên m ng.
-
Luy n t
5.1
M ng m t chi u th c ch t là m t bi
c c p phát b
nh
liên t c và bao g m
Các thành ph n c a m ng là t p h p các bi n có cùng ki u d
li u và cùng tên. Do
nhi u bi n thành ph n.
truy xu t các bi n thành ph
ch m c.
Khai báo:
Ki u_d _ li u Tên_m ng
c];
Ví d :
int a[100]; // Khai báo m ng s nguyên a g m 100 ph n t
float b[50]; // Khai báo m ng s th c b g m 50 ph n t
S
d ng:
Tên_bi n_m ng[ch s ];
Ví d
: int A[5] // Khai báo m ng A g m t
Ch s (s th
t )
nt
nguyên.
0
1
2
3
4
A[0]
A[1]
A[2]
A[3]
A[4]
30
BÀI 5:
5.2
Câu 1: Vi
c hi n:
a. Nh p m ng s nguyên g m n ph n t
(0 < n
b. Xu t m ng v a nh p
ng d n:
#include <conio.h>
#include <stdio.h>
#define MAX 100
/*---------------------------------*Hàm nh
ng ph n t cho m ng
*/
void NhapSL(int &n)
{
do{
}while (n<=0 || n>100);
}
/*-----------------------------------*Hàm nh p giá tr cho t ng ph n t
trong m ng
*/
void NhapMang (int a[], int n)
{
for (int i = 0; i < n; i ++)
{
}
}
/*-----------------------------------*Hàm xu t các ph n t c a m ng ra màn hình
*/
void XuatMang (int a[], int n)
{
\nMang gom cac phan tu:\
for (int i = 0; i < n; i ++)
}
10).
BÀI 5:
//==============================
int main()
{
int a[MAX], n;
NhapMang (a,n);
XuatMang (a,n);
return 0;
}
Câu 2: Làm ti
a câu 1 v i các yêu c u sau:
a. Xu t các ph n t
b.
ms
chia h t cho 3 có trong m ng.
ng s
ng.
c. Tính t ng các s trong m ng.
d. Tính trung bình c ng c a m ng.
e. Tính trung bình c ng các ph n t
ng.
f. Xu t các s nguyên t có trong m ng
g.
ms
ng s nguyên t có trong m ng.
h. Tính t ng các s nguyên t có trong m ng.
i. Tính trung bình c ng các s nguyên t có trong m ng.
j. Tìm ph n t
u tiên.
k. Tìm ph n t
l. Tìm giá tr ph n t
i cùng.
l n nh t (nh nh t).
ng d n
a. Xu t các ph n t
chia h t cho 3 có trong m ng.
Gi i thu t:
-
um
n cu i m ng
for ( int i=0; i<n ; i++)
-
Ki m tra t ng ph n t
c a m ng xem có chia h t cho 3 không
31
32
BÀI 5:
if (a[i] %3==0 )
N u có thì in ph n t
c. Tính t ng các s
trong m ng.
Gi i thu t:
-
Khai báo m t bi
-
um
t ng s = 0;
n cu i m ng
for ( int i=0; i<n ; i++)
-
c ng d n các ph n t
ns
s= s+ a[i] ;
j. Tìm ph n t
u tiên
Gi i thu t :
-
um
n cu i m ng
for ( int i=0; i<n ; i++)
-
Ki m tra t ng ph n t
c am
không
if (a[i] > 0 )
N u có thì xu t ph n t
return a[i] ;
Câu 3: Vi
c hi n:
a. Nh p m ng s th c g m n ph n t (0 < n
b. Xu t m ng v a nh p
ng d n:
#include <conio.h>
#include <stdio.h>
100).
BÀI 5:
#define MAX 100
---------------------------------// Hàm nh
ng ph n t
cho m ng
void NhapSL(int &n)
{
do{
}while (n<=0 || n>100);
}
//
Hàm nh p giá tr cho t ng ph n t
trong m ng
void NhapMang (float a[], int n)
{
for (int i = 0; i < n; i ++)
{
f
}
}
// Hàm xu t các ph n t
c a m ng ra màn hình
void XuatMang (float a[], int n)
{
\nMang gom cac phan tu:\
for (int i = 0; i < n; i ++)
8.2 f
33
34
BÀI 5:
}
int main()
{
float a[MAX];
int n;
NhapMang (a,n);
XuatMang (a,n);
return 0;
}
5.3
Câu 4: Vi
c hi n:
a. Nh p vào m ng a g m n ph n t , trong quá trình nh p ki m tra các ph n t nh p
c trùng, n u trùng thông báo và yêu c u nh p l i.
b. Xu t m ng.
c. Xu t ra màn hình các ph n t
là s
m t i nh ng v trí l
m ng.
d. Xu t ra v trí c a các ph n t
có giá tr l n nh t.
e. Vi t hàm tính t ng các ph n t
f. Vi t hàm s p x p m ng theo th
Yêu c
n m
t
v trí ch n trong m ng.
n.
c hi n theo menu ch
trong
35
BÀI 6:
BÀI 6: KI U D
LI U CÓ C U TRÚC
Sau khi h c xong bài này, h c viên có th :
-
N
c các khái ni
n v ki u d li u có c u trúc;
-
Bi t nh p, xu t d li u có c u trúc cho m t ph n t ..
6.1
C u trúc (struct) th c ch t là m t ki u d
gom nhóm các ki u d
li
li
ng cách
n có s n trong C thành m t ki u d
nhi u thành ph n.
u c u trúc:
struct <tên c u trúc>
{
Các ki u d
li u thành ph n ;
};
//dùng t
t tên m i cho ki u d
typedef struct <tên c u trúc> <tên m i>;
Khai báo bi n ki u c u trúc:
<tên m i> <tên bi n>;
Truy xu t:
<Tên bi n c u trúc> <tên thành ph n>;
li
li u ph c h p
36
BÀI 6:
6.2
Câu 1:
u d
li u phân s g m t
s và m u s . Vi
hi n:
a. Nh p 1 phân s
b. Xu t 1 phân s
c. Rút g n phân s
d. Tính t ng 2 phân s
e. So sánh 2 phân s
ng d n:
Sinh viên tham kh
//Kh
.
ud
li u phân s
#include<stdio.h>
#define MAX 100
typedef struct PHANSO
{
int tu, mau;
}PS;
//Khai báo các nguyên m u hàm----------------------------------------void Nhap1ps(PS &x); void Xuat1ps(PS x);
int UCLN(int a, int b); //tr v giá tr ucln c a hai s a, b
void RutGon(PS &x); PS Cong(PS x, PS y);
//hàm tr v phân s k t qu sau khi c ng
int SoSanh(PS x, PS y);
/* tr v 0 n u phân s x = phân s y tr
v <0 n u phân s x < phân s y */
v s >0 n u phân s x > phân s y tr
c
37
BÀI 6:
//Hàm chính-----------------------------------------------------------------int main()
{
PS x, y;
//nh p và xu t hai phân s
\
\
//tính t ng hai ps
và xu t k t qu ra màn hình
//so sánh hai ps
int kq= SoSanh(x,y);
else
{
} return 0;
}
//Các hàm con=======================================
//Hàm nh p 1 phân s
void Nhap1ps (PS &x)
{
//nh p m u s ph i khác 0, nh p sai b t nh p l i
do
{
38
BÀI 6:
//thông báo và nh p cho t
c a phân s x
} while (x.tu==0);
//n u m u s âm thì chu n hoá, ví d
1/-2 chuy n thành -1/2
if (x.mau<0)
{
x.tu=-x.tu; x.mau=-x.mau;
}
}
//Hàm xu t 1 phân s --------------------------------------------------------------void Xuat1ps(PS x)
{
//xu t ra theo d ng tu/mau, ví d : 3/5
}
c chung l n nh t------------------------------------------------------int UCLN(int a, int b)
{
a=abs(a); b=abs(b); //l y tr tuy
L p ch ng nào a
i
b
N u a>b thì a=a-b;
N u b>a thì b=b-a;
return a;
}
//Hàm rút g n phân s ----------------------------------------------------------------void RutGon(PS &x)
{
BÀI 6:
if (x.tu==0) return; //n u phân s có t
39
= 0 thì không c n rút g n
//l y giá tr ucln c a t và m u c a phân s
x b ng cách g i hàm UCN(?, ?)
//tính l i x.tu và x.mau
}
//Hàm tính t ng hai phân s ----------------------------------------------------------PS Cong(PS x, PS y)
{
PS tong;
//phân s
t qu sau khi c ng
return tong;
}
//Hàm so sánh hai phân s ------------------------------------------------------------int SoSanh(PS x, PS y)
{
return x.tu*y.mau
y.tu*x.mau;
}
6.3
Câu 2: Làm ti
t các hàm sau:
a. Nh p vào dãy phân s
b. Xu t dãy phân s
c. Tính t ng dãy
d. Tìm phân s l n nh t
e. S p x p dãy phân s
n.
40
BÀI 6:
Câu 3:
3.1 Vi t hàm nh p d
li u cho m t sinh viên, thông tin v m t sinh viên g m có:
a. Mã s sinh viên (chu i 10 ký t ).
b. Tên (là chu i t
).
c.
u int. M r ng dd/mm/yy).
d. Gi i tính (Nam ho c N ).
e. L p (chu i 7 ký t
i h
ng), 2 ký t
nt
f.
vào h c, 1 ký t ti p là b c h c (D:
ti p là ngành h c (TH: Tin H c, KT: K
n t ...).
m toán, lý, tin (Ki u s th c).
ng d n
3.1 Khai báo c u trúc sinh viên
struct sinhvien
{
char ten[11];
char mssv [11];
char lop [8];
char gioitinh;
int ntns;
float toan,ly,tin, DTB ;
};
typedef struct sinhvien
sv;
// vi t hàm nh p 1 sinh viên
Cách 1
void nhap1sv( sv &a)
{
flushall();
Toán, QT:
41
BÀI 6:
printf("nhap ten sinh vien :");
gets (a. ten);
printf("nhap ma so sinh vien :");
gets(a. mssv);
flushall();
gioitinh );
printf("nhap diem toan:");
scanf("%f ", &a.toan) ;
printf("nhap diem ly:");
scanf("%f ", &a.ly ) ;
printf("nhap diem tin:");
scanf("%f ", &a.tin );
a.DTB= ( a.toan +a.ly +a.tin ) /3 ;
}
Cách 2
void nhap1sv( sv &a)
{
flushall();
printf("nhap ten sinh vien :");
gets (a. ten);
printf("nhap ma so sinh vien :");
( Nam y/nu x ) :");
gets(a. mssv);
a. gioitinh= getche();
float t;
printf("nhap diem toan:");
scanf("%f ", &t) ; a.toan= t ;
printf("nhap diem ly:");
scanf("%f ", &t);
a.ly = t ;
printf("nhap diem tin:");
scanf("%f ", &t);
a.tin = t;
a.DTB= ( a.toan +a.ly +a.tin ) /3 ;
}
42
BÀI 6:
3.2 Vi t hàm xu t d
li u m t sinh viên v i thông tin v a nh p
trên.
ng d n
void xuat1sv( sv a)
{
Lop :"); puts(a. lop);
else
prin
}
3.3 Vi t hàm nh
void nhapdssv(sv a[ ], int n)
{
for(int i=0 ; i<n ; i++)
{
printf("nhap hoc sinh thu: %d",i+1);
nhap1sv(a[i]);
}
}
ng m t chi u.
BÀI 6:
3.4 Vi t hàm xu t danh sách sinh viên.
void xuatdssv(sv a[ ], int n)
{
for(int i=0;i<n;i++)
{
printf(" sinh vien thu: %d",i+1);
xuat1sv(a[i]);
}
}
3.5 Tìm sinh viên có tên
ng d n
void timtensv (sv a[ ] , int n, char x[])
{ int flag = 0 ;
for(int i=0;i<n;i++)
if ( strcmp ( a[i].ten, x )==0 )
{
xuat1sv (a[i] ) ;
flag = 1 ;
}
if ( flag == 0 )
}
i dùng nh p vào )
43
44
3.6
BÀI 6:
ms
m trung bình >5.
ng d n
int DemsvDTB>5 (sv a[ ], int n)
{
int dem =0;
for(int i=0;i<n;i++)
{
if ( a[i].DTB > 5)
dem++;
}
return dem;
}
3.7 Xu t danh sách sinh viên thu c ngành công ngh thông tin.
ng d n
3.8 Xu t danh sách sinh viên N
ng d n
u danh sách d n cu i danh sách
Ki m tra t ng ph n t
void xuatdssvnu(sv a[ ], int n)
{ int flag =0;
for(int i=0;i<n;i++)
{
{
xuat1sv(a[i]);
flag=1;
}
}
if(flag ==0)
p
}
BÀI 6:
3.9 S p x p danh sách sinh viên t
ng d n
void InterchangeSort( sv a[ ], int n )
{
sv tam ;
for ( int i = 0 ; i<n-1 ; i++ )
for ( int j =i+1; j < n ; j++ )
if( a[ i ].DTB> a[ j ].DTB )
{
tam = a[i] ;
a[i] = a[j] ;
a[j] = tam;
}
}
6.4
n theo c t DTB.
45
46
1. Ph
t, K thu t L p trình C-
n và nâng cao, NXB KH & KT - 2003.
2. Nguy n T n Tr n Minh Khang, Bài gi ngK
Thu t L p trình, Khoa Công Ngh
i h c Khoa h c T nhiên
3. Nguy n Thanh Th y (ch
Khoa h c k thu t
biên), Nh p môn l p trình ngôn ng
C, Nhà xu t b n
2000.
4. Tr n Minh Thái, Bài gi ng và bài t p L
n; Khoa Công Ngh
Thông
i h c Khoa h c T nhiên
5. Tr n Minh Thái, Giáo Trình Bài T p K
Thu t L
ng Công Ngh
Thông Tin Tp. H Chí Minh
6. Brain W. Kernighan & Dennis Ritchie, The C Programming Language, Prentice Hall
Publisher, 1988.
Download