Hàm và tổ chức chương trình về mặt cấu trúc

20 461 1
Hàm và tổ chức chương trình về mặt cấu trúc

Đ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

Chuong HÀM VÀ TỔ CHỨC CHƯƠNG TRÌNH VE MAT CẤU TRÚC MỤC TIÊU CỦA CHƯƠNG NÀY > > > Biét cách phân chia chương trình thành mơ đun Nắm vững cách truyền thông tin hàm Biết cách kết hợp nhuần nhuyễn kiểu cấu trúc liệu để xây dựng ứng dụng thực tế: 4.1 PHƯƠNG PHÁP TỔ CHỨC CHƯƠNG TRÌNH THEO MƠ ĐUN Ngun lí chủ đạo kĩ trừu tượng hóa chức để phân tốn lại trở thành đơn vị có biến riêng ) Trong q trình thuật lập trình có cấu trúc sử dụng khái niệm _ rã toán thành nhiều toán nhỏ hơn, chương trình tương đối độc lập (có cấu trúc riêng, làm việc ta quan | tâm liệu hàm làm cơng việc cụ thể (yêu cầu đâu vào kết đâu ra) mà khơng cần quan tâm hầm phải làm để đạt kết Việc thiết kế chương trình cho phép chương trình tổ chức cách sáng sủa hơn, dễ bảo dưỡng hon va dé mang di Có nhiều cách khác để phân mảnh chương trình thành mơ đun nhỏ hơn, cách thường sử dụng viết chương trình ứng dụng phương pháp thiết kế Trên xuống (Top-Down) Tư tưởng Tiến hành phân tích tốn cách dẫn từ mô tả tả tiết thông qua nhiêu mức Sự chuyển dịch từ mức chất phân rã chức mức thành số mà kết ta thu phân cấp toán phương pháp sau: đại thể đến mô tới mức thực chức mức ban đầu Ví dụ 4-1: Hãy viết chương trình quản lí bảo trì hồ sơ học bổng sinh viên điện tài trợ, đồng thời phải thường kì lập báo cáo lên cấp có thấm quyền “Trước hết ta phải xác định toán sau: - Đầu vào: Tập hồ sơ sinh viên bao gồm ghi thông tin liên quan đến học bổng sinh viên - Đầu ra: Phải giải yêu cầu sau đây: a) Tìm lại hiển thị ghí sinh viên có yêu cầu b) Có thể cập nhật ghi sinh viên cho trước c) In bdo cdo 123 Để làm diéu chương trình cần có ba nhiệm vụ sau: a) Đọc tệp để lấy thơng tin b) Xử lí tệp c) Ghi lập Các nhiệm vụ lại chia làm nhiệm vụ nhỏ hơn, ví đụ nhiệm vụ xử lí tệp lại bao gồm ba nhiệm vụ nhỏ cần giải sau: b.1 Tùn lại ghỉ sinh viên cho trước 5.4.1, Tim kiém b.12 Hiển thị ghỉ b.2 Cập nhật thơng tín ghỉ sinh viên b.2.1 Tùn kiếm 6.2.2 Sửa dối 5.3 In tổng kết thông tin sinh viên học bổng Cứ ta cấu trúc phân cấp dạng hình cho toán ban dầu với nút (nứt khơng có nút nào) hàm Sự kết hợp hàm chương trình lời giải cho toán cho "Trong phần sau ta nghiên cứu nguyên tắc xây dựng sử dụng hàm cách trao đổi thông tin (/ruyền tham số) hàm chương trình C 4.2, CẤU TRÚC TONG QUAT CUA MỘT CHƯƠNG TRÌNH C Một chương trình viết theo ngơn ngữ lập trình C đãy hàm (mỗi hàm thực phần việc đó) để giải cơng việc trọn vẹn, phải có hàm gọi hàm main, Thứ tự hàm chương trình tùy ý (uy nhiên chúng phải khai báo trước sử dụng), chương trình thực bắt đâu từ hàm main Có nghĩa chương trình thực bát đầu từ câu lệnh sau dấu *ƒ' than ham main cho dén gap dau ‘?’ danh dau kết thúc ham main Cac hàm khác thực qua /ởi gọi hảm nằm bên than cha ham main mà Cấu trúc tổng quát chương trình C có đạng sau: + Các thị tiền xử lí; #include #define + Các định nghĩa, khai báo kiểu liệu biến + Khai báo nguyên mẫu hàm, + Ham main + Định nghĩa hàm 124 Chữ ý: - Các thị tiên xử lí nằm đâu chương trình có hiệu lực từ xuất - Các định nghĩa khai báo kiểu liêu biến ngồi nằm xen kế hàm sử dụng hàm định nghĩa trước định nghĩa biến hay kiểu liệu đó, - Vi trí hàm maiw nằm xên kế hàm khác - Các hàm khai báo lông nhau, nghĩa khai báo hàm nằm hàm khác ~ Một hàm không thiết phải khai báo nguy ên mẫu nên có cho phép chương trình biên địch phát lỗi gọi hàm (đo đối Số không đúng) tự động chuyển đổi kiểu cho phù hợp với lời gọi hàm 43, QUY TẮC XÂY DỰNG VÀ SỬ DỤNG MỘT HÀM 4.3.1 Quy tắc xây dựng hàm - Mỗi hàm phải có tên theo quy tắc đặt tên trình bay chương ] Trong chương trình khơng phép có hai hàm trùng tên - Mỗi hàm thường có giá trị Đầu vào giá trị Đầu Các giá trị đầu vào truyền thong qua danh sách tham số hàm thông qua biến tồn cục, cịn giá trị đầu gửi trả noi gọi thơng qua câu lệnh return (Biểu thức) hàm kết thúc, qua địa biến qua biến toàn cục Khi hàm khơng có đối số (hoặc khơng có giá trị trả vê) khai báo đối số (hoặc giá trị trả về) dạng không kiểu void Trong trường hợp hàm có tác dụng giống thủ tuc (procedure) Pascal - Các hàm có vai trị ngang chươ ng trình, - Mỗi hàm ngơn ngữ lập trình C, nguy ên tắc bao gồm hai phần, phân gọi Wguyên mẫu hàm (Prototype ) khai báo trước hàm sử dung phần lại gọi Phần định nghĩa hàm Phần nguyên mẫu hàm mô tả đủ thong tin cần thiết liên quan đến hàm, tên hàm, đầu vào (đanj: sách tham 56) đầu (giá trị trả về) hàm theo mẫu sau: KiểuGiáTrịTráVê TênHàm(DanhSáchT hamSố); Trong đó, danh sách tham số phân tách liệt kê kiểu tương ứng với tham số mà (không Vi du 4-2 Ham ding dé tim số lớn ba tương ứng (giá :rị đâu vào) ba biến thực giá trị trả ba số cho mô tả nguyên mẫu sau: Sloat tk đấu phẩy *` cần rên biến) số có danh sách tham số (đâu ra) số lớn TimMax (float, Sloat, float); Wy Giá trị trả Tên hàm _ pạng sách tham số 125 Phân định nghĩa hàm lại bao gồm hai phận Dong tiéu dé va Thân hàm Dòng tiêu đê thực chất nguyên mẫu hàm viết lại phải có tên tham số tương ứng với kiểu đữ liệu (phân tách đấu phẩy) Các tham số gọi tham số hình thức Phần thân hàm thực chất tà Khối lệnh nhằm thực nhiệm vụ hàm với nguyên liệu ban đầu giá trị tham số kết thúc lệnh refurn(BiểuThức); để trả kết tìm cho nơi gọi Câu lệnh vắng mặt hàm khơng có giá trị trả (rđ kiểu voi) Trong thân hàm có nhiều câu lệnh rerurn chỗ khác nhau, gặp câu lệnh máy tính giá trị Biểu? hức (nếu có) đặt sau nó, xóa biến cục bộ, xóa thoát khỏi hàm, trả theo sau lời gọi hàm Sau định nghĩa, để kam theo mau sau than ham main: tham số, gán giá trị biểu thức tính cho hàm điều khiển cho hàm gọi để thực lệnh tiếp sử dụng hàm ta phải thực ời gọi cia ham main hàm khác gọi TênHàm (Danh sách tham số thực); Với điều kiện số tham số thực phải số tham số hình thức kiểu tham số thực phải phù hợp với kiểu tham số hình thức tương ứng Ví dụ 4-3 Ta viết cụ thể ví dụ 4-2 sau: [N00 00000000000000000000000000000000000000000n0Ề7) #include “stdio.h” #include “conio.h” _ float TimMax(float,float, float); /* Nguyén mau cla ham */ fF SHEET RANI ERR E ERI A ERE R ERR ET EER LEEERRAIAEERSENIOAEL OOO LIME REREEESARUEAAAEEE / int main() float x, y, z; /"Cac.tham s6 thuc cla ham*/ clrscr(); printf(“\nHay nhap ba so can tim Max x, y, 2=”); scanf(%†%f%f”, &x, &y, &z); printf(^nGia trí lon nhat ba so x= %10.2f , y= %10.2f, z= %10.2f\ la Max= %10.2f", x, y, z, TìmMax(x, y, z) 29), getch0; return 0; }* Kết thúc hàm main */ TÐ *111911119'XYESTETKEEXESSEE-EEEKEEALEEEEEEEEE-EETSEEx Ƒ # Định nghĩa hàm TimMax */ float TimMax(float i, float j, float k} @ “Dòng tiêu đầ*/ {/* Bắt đầu phần thân hàm TimMax */ float Max; /“ Biến cục hàm */ Max= ¡ > j ? ¡:j; /“ Tìm số lớn hai số ¡ j */ return (Max > k ? Max : kỳ, /*So sánh với số lại*/ }? Kết thúc hàm TimMax?/ #4 Lời gọi hàm TimMax bên hàm main ?* Các tham số hình thức tên khác tên với cất tham số thực lời gọi hàm Chúng ta hiểu rõ mục 4.3.2 126 4.3.2 Hoạt động hàm 'Trong hàm znzin, gặp lời gọi hàm (như câu lệnh primff{) ví dự trên), máy chuyển đến thực hàm gọi với giá trị ban đầu (đầu vào hàm) giá trị truyền cho tham số theo trình tự sau đây: - Máy cấp phát nhớ cho tham số hình thức biến cục - Gan gid tri cha /ham số thực lời gọi hàm cho tham số bình thức tương ứng vừa cấp phát nhớ (làm việc Copy tham số thực) - Thực câu lệnh thân hàm (chỉ thao tác thực biến cục biến tồn cục, cịn thân tham số thực khơng bị ảnh hưởng gì) Ta hiểu rõ điều qua ví dụ sau: Ví dụ 4-4 Viết hàm thực việc hoán đổi giá trị hai biến [ROR REAR #include “stdio.h” #include "conio.h” void HoanVi(float, float); /* Nguyên mẫu hàm */ P999 RE trekrxxAeelcxxKEesrkerEkktkke.0122401008141111075259119KEkvVXEEE X/ int mainQ float x, y; /*Các tham số thực hàm"*/ clrscr(); printf(‘\nHay nhap hai so can hoan vi x, ý= "}; scanf(“%f%f', &x, &y); printf(‘\nCac gia tri truoc hoan vi la x= %10.2f va y=10.2f”, X, y}; HoanVi(x, y); /*Gọi hàm hoán vị với tham số thực la x va y */ printf(^AnCac gia trí sau hoan ví la x= %10.2f va y=10.2f", x, v); getchQ; return 0; 1⁄“ Kết thúc hàm main */ pe 41484111444 111513kV /* Định nghĩa hàm HoanVi */ a xxtrkrerkkssxsekksere 4ƒ void HoanVi(float ¡, floatj) /“Dòng tiêu đề với tham số hình thức */ { Bắt đầu phần thân hàm HoanVi */ float Tam; /*Biến cục hàm"/ Tam i=j =i; j= Tam; return; }/* Kết thúc hàm HoanVi */ J8 €9 tt rkekkklrAEr1110411104411000/0010010110101171571211 X/ Khi thực chương trình với gid tri x =/0, y =35 kết sau gọi ham HoanVi vin 1a x =10, y =35 Diéu dường nhu ham HoanVi khơng thực hién gi Trong thuc té thi ham HoanVi da làm việc, nhiên việc tráo đổi biến không đổi làm Việc tham trí diễn Copy tham số thực mà thôi, thân các" bị ảnh hưởng lời gọi hàm Ra khỏi hàm, giá trị hốn Copy theo ta có cảm giác chương trình khơng truyền tham số cho hàm theo kiểu người ta gọi /ruyên theo 127 Để xử lí tình này, thay làm việc Copy tham số thực ta yêu cầu hàm làm việc trực tiếp biến cách gửi địa tham số thực cho danh sách tham số hình thức tương ứng Cách truyền tham số cho hàm theo cách gọi truyền theo địa Trong ngôn ngữ lập trình C, để truyền tham số theo địa tham số hình thức định nghĩa hàm phải trỏ, danh sách (ham số thực lời gọi hàm phải đanh sách địa biến đó, Ta viết lại ví dụ sau: Vi du 4-5 Viết hàm thực việc hoán đổi gid trị hai biến (bản hàm thực truyền tham số theo địa chủ đ thYttRHtkrirrkrrrkrenAesBiikrEkrnArrarrrrrrrrkeesiee, #include “stdio.h” #include "conio.h” void HoanVi(float *, float *); /* Nguyên mẫu cửa hàm */ l 102 0010000720 int main(} float x, y; /“Các tham số thực hàm*/ clrscr(); printf(AnHay nhap hai so scanf(°%I%f”, &x, &y); printf nCac gia tri truoc HoanVi(&x, &y); /“Gọi hàm printf(‘\nCac gia tri sau getch(); * can hoan vi x, y= "); hoan ví la x= %10.2f va y=10.2f”, x, y); hốn vị với tham số thực địa */ hoan vi la x= %10.2f va y=10.2P , x, y); return 0; 3/* Kết thúc hàm main */ [ft x9nttntTrerrtnieieiiiiisierekxrTrerTkkrrrrkrkrsreerkj / Dinh nghĩa hàm HoanVi */ void HoanVi(float* i, float" j} /*“Dòng tiêu đề*/ ("Bắt đầu phần thân hàm HoanVi */ float Tam; “Biến cục hàm"/ Tams "i; “j= Tam; return; } Kết thúc hàm HoanVi */ [pt vesteneannenanaturestennnenseseuneatentitentnentntstthnuntussbennnenninnReMninentaZenstes fy - Khí gặp câu lệnh return hoac dau *}' cuối thân hàm xóa tham số, biến cục (do giá trị biến di) thoát khỏi hàm Nếu sau retwrn có Biểu thức giá trị biểu thức tính, chuyển kiểu cho phù hợp với giá trị trả gán cho hàm Giá tri sé sử dụng hàm khác giá trị đầu vào chúng (đáy cách truyền thông tin hàm với nhan) giá trị (biển thường biến cấu trúc) địa (của biến thường biến cấu trúc) - Như để hàm trao đổi thơng tỉn với nhau, £# chf thực theo ba cách sau: + Sử dụng giá trị trả hàm (xem ví dụ 4-0, 4-10) 128 + Sử dụng cách truyền tham số theo địa chi (xem ví dụ 4-5) Tuy nhiên việc truyền tham số theo địa nhiêu dẫn đến kết logic khác với suy luận thông thường Sự khác gọi hiệu ứng lẩ Sau ví dụ điển hình hiệu ứng lẻ sử dụng truyền tham số theo địa chỉ: V£ đu 4-6 Hiệu ứng lẻ sử dụng truyền tham số theo địa ƒP ttrtrseeteasee teefeeekttrsretrrteereirfrshriretrkrkeeeeennsnnmleeeetkrsrerrexerme sí #include “stdio.h” #include “conio.h" ; — mẫu hàm * int Tang(int *); * Nguyênân mẫu hàm */ mtreeilnnseektrrek lixfrirsrrnsirnesirserrreinnneknsTxrreresreaese A, int main int x= 10; printf(“Tong la %d", Tang(x) + Tang(x)); getchQ ; return 0; Dhuuxkyxxunnnnunaniuaindatoudinanannninnaaoiiinn int Tang (int * a) { 00707776 */ t+ta; return (a); JA nb H Oo RR INR IID TK» TY OH II EINE Ei na E On IEE OIE EME tr key * Khi thực chương trình ta nhận được: Tong la 23 Rõ ràng suy luận thông thường kết phải 22 (vì x=10 Tang(x) cho giá trị 11) Tuy nhiên, xây hiệu ứng lẻ truyền tham số cho hàm theo địa Ta giải thích sau: lần gọi thứ hàm Tang(x) thực làm giá trị x tăng lên (ức ià 11), lần gọi thứ hai giá trị x thực 72 tổng 23 + Sử dụng biến tồn cục: Vì hàm truy nhập thay đổi giá trị biến toàn cục, kết hàm truyền sang hàm khác Đặc điểm: Không cần truyền tham số cho hàm thơng qua tham số hình thức (vì hàm xử lí trực tiếp biến toàn cục) đơn giản Tuy nhiên viết chương trình ta nên hạn chế sử dụng biến tồn cục khơng cần thiết (vì để gây hiệu ứng lê khơng mong muốn, cấu trúc chương trình khơng sáng súa tính riêng tư ham) Ví du 4-7, Trao đổi thơng tin hàm thơng qua biến tồn cục Chương trình thực tính tổng bình phương hai số + nhi 111001 TT.01-0.1EnTRHREAIRARAAEREEEKTSASs/ #include “stdio.h” #include “conio.h" void_BinhPhuong(void); /* Nguyên mẫu hàm */ void Tong(void); int a, b, c, Dem=0; /* Cac biến toàn cục dùng làm tham số cho hàm*/ YYKYYXYKKH HH KH TY HE RE th J2} ĐR-GTNMETC tk xa cà Tu ke g * 129 int main() Tong(); /* Kết tổng lưu vào biến c */ printf(^n Tong binh phuong cua hai so %d va %d la %d”, a, b, C); return 0; (XI KHYYHA HA THÊ HINRAA I0000111701111210118401004040114001-101 void BinhPhuang() { printf(‘\nHay nhap gia tri cho so thu %d = ”, ++Dem); scanf("%d", &a); b=a*a; /* Hàm lưu giá trị bình phương tính vao bién b */ return; TP this EererkcnTRTS91911901144490419001 11 4/ void Tong(void) { int Tam ; BinhPhuong() ; /* Tính bình phương số thứ */ Tam=b ; /* Lay két ra, không giá trị gọi lần ghi đè lên */ BinhPhuong() ; /* Kết lần tính hai lưu biến b */ c=Tam+b ; /“ Đưa kết tổng vào biến c */ FnninnnunnnnnnannnnNinuiin00nnnnn00nnn00000000000000000000Eï 4.3.3 Các cách truyền tham số cho hàm "Trong phần trước ta làm quen với cách xây dựng hoạt động hàm cách truyền tham số cho hầm theo tham trị theo địa Tuy nhiên tham số thực xét biến đơn giản có sẩn ngôn ngữ iz#, float Trong phần ta tiếp tục nghiên cứu cách truyền tham số phức tạp cho hàm mảng, ma trận, cấu trúc Tham số thực tên mảng chiều Khi tham số thực tên mảng (một chiều) tham số hình thức tương ứng cần phải mot tré c6 kiểu phù hợp với kiểu phần tử mảng Ví dụ 4-8 Nếu tham số thực mảng kiểu s6 thuc float MangThuc[50] tham số hình thức M#angF tương ứng hàm khai báo theo cách sau đây: Tloat *MangF; Hoặc khai báo mắng hình thức: float MangF[]; Hai cách khai báo tương đương Khi hàm bắt đầu làm việc giá trị địa Ä#angThục tham số thực truyền cho tham số hình thức trỏ M#angF, nói cách khác trỏ MangF chứa địa phần tử mảng tham số thực Đo thân hàm ta dùng cách sau day để truy nhập phần tử mảng ÄfangThuc[i]: *(MangF+i) MangF[il Ví dụ 4-9: Viết chương trình thực việc nhập cộng hai đa thức P,(x) Q„(x) Kết lưu mảng Cu,„„„;(x) Đưa kết hình 130 Để giải tốn ta chọn cấu trúc liệu kiểu mảng, phần tử thứ ¿ (0=

Ngày đăng: 02/10/2013, 14:52

Hình ảnh liên quan

} Hình 4.1. Hình ảnh mình hoạ hoạt động của các lời gọi đệ quy. - Hàm và tổ chức chương trình về mặt cấu trúc

Hình 4.1..

Hình ảnh mình hoạ hoạt động của các lời gọi đệ quy Xem tại trang 17 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan