1. Trang chủ
  2. » Công Nghệ Thông Tin

Ngôn ngữ lập trình C - Chương 4 ppt

36 351 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Ngôn ngữ lập trình C - Chương 4 ppt
Trường học Học viện Kỹ thuật Quân sự
Chuyên ngành Khoa học Máy tính
Thể loại Bài giảng
Năm xuất bản 2008
Thành phố Hà Nội
Định dạng
Số trang 36
Dung lượng 424,3 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

• Con tr hàm có th dùng làm tham s hình th c cho hàm... Nói chung nó ch áp d ng cho ki u int hay char.

Trang 1

Ch −¬ ng 4

Hμm vμ ph−¬ng ph¸p

Trang 5

– B trí ch ng trình trong nhi u t p tin tách bi t.

– S d ng t p tin tiêu đ å thu n l i cho vi c th ng nh t ch ng trình,

d dàng hi u ch nh và b o trì ch ng trình.

Trang 6

4.2 Hµm

4.2.1 Khai báo và đ nh ngh a hàm

– C u trúc t ng quát c a hàm:

[ki u_giá_tr _tr _v ] tên_hàm([danh_sách_tham_s ]){

khai báo & l nh;

Tr l i quy n đi u khi n (và giá tr ) cho hàm:

– Dùng l nh return [bi u_th c];

– L nh return có th vi t b t k đâu trong thân hàm.

– Khi hàm không tr v giá tr , ch c n vi t return;

– Trong C không c n l nh return n u hàm không tr v giá tr

Trang 7

4.2 Hµm

4.2.1 Khai báo và đ nh ngh a hàm

– Ki u giá tr tr v :

Hàm không tr v giá tr å ki u_giá_tr _tr _v void.

Không vi t ki u giá tr tr v å ng m đ nh là int

Không cho tr v ki u m ng.

– Danh sách tham s :

Các tham s hình th c (cùng v i ki u t ng ng) cách nhau b ng

d u “,” không h n ch ki u (có th là ki u c s hay ph c h p).

Hàm không có tham s å danh_sách_tham_s void.

– Lúc này danh sách tham s c ng có th đ tr ng.

Không vi t ki u tham s å ng m đ nh là int.

Chú ý: trong C có th khai báo ki u tham s riêng ra sau, ví d :

double func(a,b) int a; float b;

Trang 8

4.2 Hµm

4.2.1 Khai báo và đ nh ngh a hàm

– Khai báo hàm nguyên m u:

T t c hàm dùng trong ch ng trình ph i khai báo nguyên m u.

– Trong nguyên m u có th b tên các tham s (ch c n khai báo ki u) – C++ cho phép ép ki u tham s truy n vào cho phù h p.

Trong C có th không khai báo nguyên m u, ho c ch c n khai báo tên hàm và giá tr tr v , không c n danh sách ki u tham s

– N u không khai báo, C t t o ra nguyên m u v i ki u tr v là int.

– T p tin tiêu đ (header file):

M i th vi n trong C++ đ u có m t t p tin tiêu đ d ng *.h.

– T p tin này ch a khai báo c a các hàm trong th vi n (nguyên m u),

đ nh ngh a c a các ki u d li u, h ng dùng trong hàm đó.

Ng i l p trình có th t o các t p tin tiêu đ riêng cho mình.

Trang 9

4.2 Hµm

4.2.1 Khai báo và đ nh ngh a hàm

– Con tr hàm:

Gi ng nh bi n, m i hàm đ u có đ a ch å có th khai báo m t con tr hàm tr đ n hàm đó.

Khai báo con tr hàm:

[ki u_gtr _tr _v ](*tên_bi n_tr _hàm) ([dsách_ths ]);

– VD: int(*fp) (int n, float x);

Ý ngh a các thành ph n trong khai báo con tr hàm gi ng nh khai báo hàm.

Mu n s d ng phép gán, con tr hàm ph i t ng thích v i hàm c

v ki u giá tr tr v l n danh sách tham s

Con tr hàm có th dùng làm tham s hình th c cho hàm.

– Khi đó trong l i g i hàm, có th dùng tên hàm làm tham s th c.

Trang 10

4.2 Hµm

4.2.2 Tham s và giá tr tr v trong l i g i hàm

– Tham s và truy n tham s

Tham s

– Tham s hình th c: đ i di n cho tham s th c (s truy n cho hàm)

Ki u giá tr c a tham s hình th c å quy t đ nh ki u tham s th c.

– Tham s th c: thông tin đ c truy n trong l i g i hàm M i tham s

th c t ng ng v i m t tham s hình th c.

Truy n tham s

– Truy n theo tr (tham tr ): b n sao giá tr đ c truy n cho hàm (tham

tr ) å vi c thay đ i giá tr đ c truy n vào trong thân hàm không nh

h ng đ n giá tr ban đ u c a bi n.

– Truy n theo bi n (tham bi n): b n thân bi n đ c truy n cho hàm (tham bi n) å vi c thay đ i trong hàm s làm thay đ i giá tr bi n.

– Chú ý 1: trong C++ t t c tham s đ c truy n theo tr

– Chú ý 2: n u tham s truy n vào có kích th c l n (ví d nh c u trúc) ho c c n thay đ i giá tr bi n, nên truy n theo bi n.

Trang 11

4.2 Hµm

4.2.2 Tham s và giá tr tr v trong l i g i hàm

– Tham s và truy n tham s (ti p)

Tham s hình th c c a hàm là con tr

– Trong C++ mu n truy n theo bi n có th s d ng con tr – Tham s hình th c là con tr å trong thân hàm có th thay đ i giá tr

bi n mà con tr đó tr đ n.

– M t s chú ý khi tham s hình th c là m ng (m t chi u, nhi u chi u).

Tham s hình th c c a hàm là tham chi u

– Có th truy n tham s cho hàm b ng tham chi u å hàm s thao tác

tr c ti p trên bi n đó ~ truy n theo bi n.

– Vi c kh i t o tham s hình th c s th c hi n trong m i l i g i hàm – Tham s ng v i tham s hình th c là tham chi u ph i là bi n, tr

tr ng h p có t khóa const đ ng tr c khai báo tham s hình th c.

– Có th dùng tham chi u cho bi n tr , ví d : int *&adr;

Trang 12

4.2 Hµm

4.2.2 Tham s và giá tr tr v trong l i g i hàm

– Tham s và truy n tham s (ti p)

Tham s hình th c c a hàm là con tr hàm

– Các hàm đ c g i trong hàm khác nên khai báo tr c.

– Có th g i hàm theo nhi u cách Ví d : f(x,m), (f)(x,m), (*f)(x,m) – Không có s khác bi t gi a vi c g i b ng tên hàm hay con tr hàm.

Tham s ng m đ nh trong l i g i hàm

– C++ cho phép t o giá tr m c đ nh cho các tham s

– Giá tr ng m đ nh có th là bi u th c (không nhât thi t ph i là h ng).

– Khi khai báo nguyên m u, giá tr ng m đ nh c ng ph i kh i gán.

– Các tham s ng m đ nh ph i đ t cu i cùng trong danh sách tham s hình th c.

– Khi g i hàm, các tham s thi u ph i cu i cùng (tính t trái å ph i).

– Chú ý: khai báo giá tr ng m đ nh cho m t tham s là bi n tr å

ph i vi t d u * và d u = cách nhau.

Trang 13

[ki u_giá_tr _tr v ] &tên_hàm ([danh_sách_ths ]){

khai báo & l nh;

}

Chú ý r ng lúc này, l nh return ph i tr v m t bi n toàn c c

(t c là không ph i bi n đ c khai báo trong hàm).

– Bi n toàn c c là đ ta có th s d ng tham chi u c a hàm.

V i giá tr tr v là tham chi u, ta có th s d ng phép gán cho tên hàm (gi ng nh gán giá tr cho bi n).

Trang 14

Hàm inline:

– C++ cho phép t o ra các hàm đ c thay th tr c ti p thành mã l nh máy ngay t i ch g i (inline).

khai báo và đ nh ngh a hàm inline, ch c n thêm t khóa inline

Trang 15

4.2 Hµm

4.2.3 Các v n đ khác v hàm

– Hàm vi t t i ch (ti p)

H n ch c a trình d ch đ i v i hàm inline:

– Không x lý theo cách inline v i các hàm ch a bi n static, l nh chu

trình, l nh goto, l nh switch, hàm đ quy, …

– Ngay c khi không có nh ng h n ch trên, n u b nh ch ng trình

đã quá l n, trình d ch c ng b qua yêu c u inline.

– Hàm main và tham s dòng l nh

Hàm main đ y đ có hai tham s hình th c nh sau:

void main (int agrc, char *agrv[]) { … }

– agrc : s tham s đ c đ a vào.

– agrv[] : m ng các tham s đ a vào, cách nhau b i d u cách.

Khai báo này đ c dùng khi c n s d ng các tham s dòng l nh cho vi c th c thi ch ng trình.

Trang 16

4.3 Chång hµm vµ chång phÐp to¸n

4.3.1 nh ngh a ch ng hàm

– Ch ng hàm

C++ cho phép s d ng cùng m t tên đ đ nh ngh a các hàm khác nhau (khác ki u giá tr tr v và danh sách ki u các tham s ) å

ch ng hàm (overloading).

VD: int max (int a, int b);

float max (float x, float y);

Ch ng hàm còn đ c g i là đa d ng hóa hàm, t i b i hàm.

Vi c xác đ nh g i hàm nào khi trong ch ng trình có hàm trùng tên là do trình d ch đ m nhi m.

– Trình d ch d a vào s khác nhau c a t p tham s đ đ i tên các hàm

å các hàm có tên khác nhau sau khi d ch.

– N u hai hàm có tên và t p tham s trùng nhau, trình d ch s báo l i, k

c khi ki u tr v khác nhau.

Trang 17

4.3 Chång hµm vµ chång phÐp to¸n

4.3.1 nh ngh a ch ng hàm

– Quy t c xác đ nh hàm phù h p khi g i hàm

C n c vào s l ng và ki u c a các tham s đ g i hàm.

– Khi không có hàm nào có b tham s cùng ki u, trình d ch ch n hàm

có b tham s g n ki u nh t (b ng phép chuy n ki u).

– N u đã theo quy t c mà có h n m t hàm phù h p, trình d ch s báo l i.

N u hàm có m t tham s å trình d ch tìm ki m hàm phù h p

t ng ng theo th t u tiên sau:

– Có tham s t ng ng th c s : phân bi t các ki u d li u khác nhau (c v d u).

– Có tham s t ng ng g n nh t (sau các chuy n đ i ki u d li u t

đ ng: char và short å int, float å double).

– Có tham s t ong ng sau các chuy n đ i ki u đ c C++ ch p nh n.

– Có tham s t ong ng sau các chuy n đ i ki u do ng i dùng đ nh ngh a.

Trang 18

4.3 Chång hµm vµ chång phÐp to¸n

4.3.1 nh ngh a ch ng hàm

– Quy t c xác đ nh hàm phù h p khi g i hàm (ti p)

Theo th t u tiên trên, n u có h n m t hàm phù h p t i m t

m c u tiên, trình d ch s báo l i không xác đ nh đ c hàm.

N u hàm có nhi u tham s , trình d ch xác đ nh hàm phù h p theo quy t c sau:

Trang 19

– Nên dùng các phép chuy n đ i ki u (n u c n) đ t p tham s trong l i

g i hàm hoàn toàn trùng v i t p tham s c a m t hàm c n đ n, tránh

s nh p nh ng cho trình d ch.

Ch ng hàm và g i hàm v i tham s có giá tr ng m đ nh có th

d n t i l i biên d ch.

– Khi g i hàm mà m t s tham s ng m đ nh b khuy t å có th có hai

l i g i hàm hoàn toàn gi ng h t nhau å trình d ch không xác đ nh

đ c hàm phù h p.

Trang 21

V i phép toán có hai toán h ng, hàm phép toán c n có hai tham s (ví d 1).

– Chú ý th t tham s v i các phép toán không giao hoán.

V i phép toán có m t toán h ng, hàm phép toán có m t tham s (ví d 2).

Thân c a hàm phép toán đ c vi t nh thân hàm thông th ng.

Trang 22

– Có th k t h p nhi u phép toán khác nhau đ vi t công th c Có th s

d ng d u ngo c tròn đ quy đ nh th t các phép toán.

– Quy t c u tiên và trình t th c hi n các phép toán đ nh ngh a ch ng không có gì thay đ i so v i phép toán nguyên th y.

Có m t s phép toán không th đ nh ngh a ch ng M t s phép toán khác ph i tuân theo m t vài ràng bu c nh t đ nh.

– Nên tuân theo m t s quy t c và có chi n l c s d ng đúng đ n.

– Xem các ví d chi ti t trong TLTK.

Trang 23

– M t ph n có th gi i quy t đ c ngay.

– Ph n còn l i ch a th gi i quy t ngay, tuy nhiên nó gi ng bài toán ban

đ u v i đ ph c t p th p h n (~đ n gi n h n).

– Do bài toán m i gi ng bài toán ban đ u nên hàm có th g i đ n chính

nó đ gi i å ta có l i g i đ quy (hay b c đ quy).

Nói chung đ quy là m t v n đ khá ph c t p, đ hi u đ c th u đáo ph i có ki n th c sâu v khoa h c máy tính.

Trang 24

4.4 §Ö quy

4.4.1 T ng quan v k thu t đ quy

– L u ý trong s d ng đ quy

Vi c đ quy ph i k t thúc đ c sau h u h n b c:

– Sau m i l n g i đ quy, bài toán tr nên đ n gi n h n Vi c g i đ quy

k t thúc khi bài toán tr thành tr ng h p c s (hay suy bi n).

– Sau khi hàm đ quy gi i bài toán treong tr ng h p c s , nó tr l i

Trang 25

4.4 §Ö quy

4.4.1 T ng quan v k thu t đ quy

– L u ý trong s d ng đ quy (ti p)

So sánh k thu t đ quy và ph ng pháp l p

quy và l p đ u liên quan đ n quá trình l p Chúng có m t s đ c

đi m t ng t nhau (ki m tra đi u ki n k t thúc, c ch đ k t thúc,

tr ng h p l p vô h n, …).

– Ph ng pháp l p s d ng vòng l p, còn đ quy s d ng liên t c các l i

g i hàm å t n th i gian x lý và b nh (m i l n g i hàm ph i l u các bi n, ng c nh hi n t i, đ a ch quay v , …).

Dùng đ quy hay l p ?

– Ph ng pháp l p có u đi m th c hi n nhanh, ch ng trình rõ ràng,

ti t ki m b nh , …

quy th ng đ c s d ng trong nh ng bài toán ph c t p, ch có

th đ nh ngh a b ng các công th c đ quy, ho c các bài toán c n di n

đ t tr c quan và d hi u quá trình gi i quy t bài toán.

Trang 26

} }

Áp d ng : vi t ch ng trình và mô t quá trình đ quy tính n!

Trang 27

– Khi c p phát đ ng, vùng này m r ng lên, khi gi i phóng, å thu h p.

Vùng ng n x p (stack) (ch a các đ i t ng d li u c c b ).

– Khi s d ng hàm, kh i, …vùng này m r ng xu ng, khi ra kh i hàm,

kh i, … å thu h p.

gi a 2 vùng nh đ ng trên là vùng nh t do, đ c dùng đ cung c p b nh cho c hai vùng đó.

– Tìm hi u thêm v c ch qu n lý b nh c a máy tính trong TLTK.

Trang 28

– Thông th ng có hai ph m vi: c c b (bên trong m t kh i, m t hàm)

và toàn c c (t v trí khai báo đ n cu i ch ng trình).

C p l u tr (storage class) đ c xác đ nh theo vùng b nh c p phát cho đ i t ng đó.

– Thông th ng có hai c p l u tr : t nh (c p phát b nh vùng c p phát t nh) và đ ng (c p phát b nh vùng heap).

Trang 29

4.5 T ch c b nh và qu¶n lý d÷ liÖu

4.5.2 Phân vùng l u tr và ph m vi s d ng

– Th hi n trong C++:

Trong C++, các khái ni m trên đ c th hi n b i các t khóa

auto, extern, static, register và v trí khai báo :

– C ng là khai báo bi n c c b nh ng yêu c u trình d ch l u giá tr khai

báo trong các thanh ghi (å x lý nhanh h n) Yêu c u này s b b qua n u không còn đ thanh ghi Nói chung nó ch áp d ng cho ki u

int hay char.

– Ngày nay các trình d ch đã có kh n ng nh n bi t các bi n hay dùng

đ đ a vào thanh ghi, không c n thi t ph i có các t khóa này n a.

Trang 30

khai báo bi n c c b t nh å dùng t khóa static.

– Tuy không có tác d ng ngoài hàm khai báo nh bi n toàn c c,

nh ng bi n t nh c c b v n duy trì đ c giá tr c a chúng gi a các l n

g i hàm å có th s d ng trong l i g i hàm l n sau.

T khóa extern:

– Cho phép s d ng tên bi n trên ph m vi nhi u t p tin ( đ c vi t và

d ch đ c l p sau đó liên k t v i nhau).

– T khóa extern tr c tên bi n báo cho trình d ch bi t bi n đó đã

đ c khai báo đâu đó r i å không ph i c p phát b nh n a.

– TC++3.0 cho phép vi t ch ng trình trên nhi u t p tin và liên k t v i nhau b ng cách s d ng t p tin project (*.prj).

Trang 31

– Nhãn (tên : ) có ph m vi trong hàm (switch, goto).

i t ng khai báo ngoài hàm å ph m vi t p.

– Bi n toàn c c, đ nh ngh a hàm, hàm nguyên m u å ph m vi t p.

i t ng khai báo trong kh i { } å ph m vi kh i.

– Bi n c c b khai báo đ u hàm, tham s c a hàm å ph m vi kh i.

– Danh sách tham s hàm nguyên m u å ph m vi hàm nguyên m u (hàm nguyên m u không yêu c u tên, n u có å trình d ch b qua å

có th dùng l i các tên đó n i khác).

Trang 32

4.5 T ch c b nh và qu¶n lý d÷ liÖu

4.5.2 Phân vùng l u tr và ph m vi s d ng

– T p tin Project:

Ch ng trình l n å n u đ trong 1 t p å l n, khó đ c, khó theo dõi, kích th c l n.

kh c ph c tr ng i trên å vi t trên nhi u t p khác nhau, liên

d ng trong ch ng trình Th t c a chúng không quan tr ng.

Thao tác trên m t t p tin Project : xem TLTK.

Trang 33

Có th tham kh o sách ti ng Vi t, chú ý hai cu n sách (v ngôn

Trang 34

#ifdef (~#if define (tên_macro)

#ifndef (~#if !define (tên_macro))

v i c u trúc t ng t nh #if.

– M t s ch th ti n x lý khác

Ch th #error

Ch th #line

Trang 35

4.6 c thêm

4.6.3 Thu t toán và đ ph c t p tính toán

– Tham kh o các tài li u v thu t toán

Trong giáo trình SV ch m i có khái ni m chung v thu t toán.

hi u sâu v thu t toán và thao tác thành th o å ph i đ c thêm các tài li u chuyên sâu.

Nên thao tác thành th o trên các thu t toán c b n và các c u trúc

d li u c b n.

Nên tìm hi u thêm các thu t toán nâng cao và các c u trúc d li u

ph c t p h n.

– Thu t toán và đ ph c t p tính toán

Tìm hi u thêm các thu t toán s p x p và tìm ki m ( đ ph c t p tính toán, u nh c đi m, tr ng h p áp d ng, ).

Tìm hi u thêm v đ ph c t p tính toán (phân tích thu t toán).

Trang 36

4.6 c thêm

4.6.4 Các v n đ khác

– S đ c cung c p trong bài gi ng trên l p

Ngày đăng: 06/08/2014, 01:20

TỪ KHÓA LIÊN QUAN