Trong giai đoạn hiện nay, giai đoạn mà nền công nghệ thông tin chiếm một vị trí hết sức quan trọng. Mọi quốc gia trên thế giới đều cố gắng nỗ lực vào, và phấn đấu phát triển mạnh lĩnh vực công nghệ thông tin. Một trong những công cụ tiếp cận nhanh nhất đó là tin học.
Đã qua rồi, thời mà cha ông ta phải làm và ghi nhớ mọi việc bằng những phương tiện thô sơ. Để tính toán họ đều phải bắt đầu bằng tay và tính toán một cách chi tiết. Còn ngày nay - Thời đại của công nghệ thông tin - Bạn không cần phải làm như vậy nữa. Bạn chỉ cần lập ra một chương trình rồi sử dụng nó. Nó tiện ích và thuận lợi hơn rất nhiều. Nó không hạn chế về khối lượng, con số. Thậm chí trong một giây nó có thể giải quyết hàng vạn bài toán phức tạp vv Do đó tốc độ làm việc và năng suất tăng lên rất nhiều. Lợi ích rất lớn.
Để nó có thể làm việc và hoạt động được thì chúng ta cần phải lập trình, mà muốn lập trình thì cần phải có ngôn ngữ lập trình. Có rất nhiều ngôn ngữ lập trình như Pascal, Cobol, C++ vv Mỗi ngôn ngữ lập trình có một chức năng riêng, một thế mạnh riêng, trong đó ngôn ngữ lập trình C++ rất hay dùng và nó có thế mạnh về quá trình can thiệp sâu vào máy tính. Nó là điều mà mọi kỹ sư lập trình đều cần phải biết đến, là vấn đề rất quan trọng trong quá trình tiếp cận với máy tính.
Những vấn đề trong ngôn ngữ lập trình C++ rất đáng phải quan tâm và có rất nhiều vấn đề, nhưng ở đề án này chúng ta chỉ nghiên cứu 3 vấn đề cơ bản nhất đó là:
Chương I: Hàm.
Chương II: Biến toàn cục, biến cục bộ.
Chương III: Chương trình có sử dụng hàm, biến toàn cục, biến cục bộ.
Trong mỗi chương sẽ có những vấn đề nhỏ, cụ thể cần nghiên cứu sẽ được thể hiện trong phần nội dung.
Đề án của em được hoàn thành dưới sự hướng dẫn giúp đỡ của thầy TS. Đặng Quế Vinh và những tài liệu về bài giảng của thầy cũng như một số tài liệu khác. Một lần nữa em xin cảm ơn thầy.
24 trang |
Chia sẻ: luyenbuizn | Lượt xem: 1154 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Giáo trình Ngôn ngữ lập trình C, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
PhÇn I. më ®Çu
Trong giai ®o¹n hiÖn nay, giai ®o¹n mµ nÒn c«ng nghÖ th«ng tin chiÕm mét vÞ trÝ hÕt søc quan träng. Mäi quèc gia trªn thÕ giíi ®Òu cè g¾ng nç lùc vµo, vµ phÊn ®Êu ph¸t triÓn m¹nh lÜnh vùc c«ng nghÖ th«ng tin. Mét trong nh÷ng c«ng cô tiÕp cËn nhanh nhÊt ®ã lµ tin häc.
§· qua råi, thêi mµ cha «ng ta ph¶i lµm vµ ghi nhí mäi viÖc b»ng nh÷ng ph¬ng tiÖn th« s¬. §Ó tÝnh to¸n hä ®Òu ph¶i b¾t ®Çu b»ng tay vµ tÝnh to¸n mét c¸ch chi tiÕt. Cßn ngµy nay - Thêi ®¹i cña c«ng nghÖ th«ng tin - B¹n kh«ng cÇn ph¶i lµm nh vËy n÷a. B¹n chØ cÇn lËp ra mét ch¬ng tr×nh råi sö dông nã. Nã tiÖn Ých vµ thuËn lîi h¬n rÊt nhiÒu. Nã kh«ng h¹n chÕ vÒ khèi lîng, con sè. ThËm chÝ trong mét gi©y nã cã thÓ gi¶i quyÕt hµng v¹n bµi to¸n phøc t¹p vv…Do ®ã tèc ®é lµm viÖc vµ n¨ng suÊt t¨ng lªn rÊt nhiÒu. Lîi Ých rÊt lín.
§Ó nã cã thÓ lµm viÖc vµ ho¹t ®éng ®îc th× chóng ta cÇn ph¶i lËp tr×nh, mµ muèn lËp tr×nh th× cÇn ph¶i cã ng«n ng÷ lËp tr×nh. Cã rÊt nhiÒu ng«n ng÷ lËp tr×nh nh Pascal, Cobol, C++ vv… Mçi ng«n ng÷ lËp tr×nh cã mét chøc n¨ng riªng, mét thÕ m¹nh riªng, trong ®ã ng«n ng÷ lËp tr×nh C++ rÊt hay dïng vµ nã cã thÕ m¹nh vÒ qu¸ tr×nh can thiÖp s©u vµo m¸y tÝnh. Nã lµ ®iÒu mµ mäi kü s lËp tr×nh ®Òu cÇn ph¶i biÕt ®Õn, lµ vÊn ®Ò rÊt quan träng trong qu¸ tr×nh tiÕp cËn víi m¸y tÝnh.
Nh÷ng vÊn ®Ò trong ng«n ng÷ lËp tr×nh C++ rÊt ®¸ng ph¶i quan t©m vµ cã rÊt nhiÒu vÊn ®Ò, nhng ë ®Ò ¸n nµy chóng ta chØ nghiªn cøu 3 vÊn ®Ò c¬ b¶n nhÊt ®ã lµ:
Ch¬ng I: Hµm.
Ch¬ng II: BiÕn toµn côc, biÕn côc bé.
Ch¬ng III: Ch¬ng tr×nh cã sö dông hµm, biÕn toµn côc, biÕn côc bé.
Trong mçi ch¬ng sÏ cã nh÷ng vÊn ®Ò nhá, cô thÓ cÇn nghiªn cøu sÏ ®îc thÓ hiÖn trong phÇn néi dung.
§Ò ¸n cña em ®îc hoµn thµnh díi sù híng dÉn gióp ®ì cña thÇy TS. §Æng QuÕ Vinh vµ nh÷ng tµi liÖu vÒ bµi gi¶ng cña thÇy còng nh mét sè tµi liÖu kh¸c. Mét lÇn n÷a em xin c¶m ¬n thÇy.
PhÇn II. Néi dung.
Néi dung chÝnh bao gåm: Hµm, biÕn toµn côc, biÕn côc bé.
Ch¬ng I: Hµm.
Ch¬ng tr×nh con: Ch¬ng tr×nh ®îc viÕt theo nh÷ng quy t¾c ®Æc biÖt ®Ó cã thÓ ®îc gäi thùc hiÖn b»ng mét ch¬ng tr×nh kh¸c. Ch¬ng tr×nh chøa lêi gäi thùc hiÖn ch¬ng tr×nh con ®îc gäi lµ ch¬ng tr×nh chÝnh.
ViÖc viÕt vµ sö dông nh÷ng ch¬ng tr×nh con cho phÐp tiÕt kiÖm c«ng søc cña ngêi viÕt ch¬ng tr×nh rÊt nhiÒu. Trong hÇu hÕt c¸c ng«n ng÷ lËp tr×nh bËc cao ch¬ng tr×nh con ®îc chia lµm 2 lo¹i lµ thñ tôc( x, thñ tôc) vµ hµm(x, hµm).
I. §Þnh nghÜa hµm.
Hµm lµ mét ch¬ng tr×nh con tÝnh mét gi¸ trÞ vµ tr¶ l¹i gi¸ trÞ Êy th«ng qua tªn hµm.
Hµm chia thµnh 2 lo¹i lµ hµm chuÈn vµ hµm tù ®Þnh nghÜa cßn gäi lµ hµm do ngêi sö dông ®Þnh nghÜa.
- Hµm chuÈn lµ nh÷ng hµm cã s½n trong ng«n ng÷ lËp tr×nh. LËp tr×nh viªn cã thÓ sö dông c¸c hµm chuÈn mµ kh«ng ph¶i ®Þnh nghÜa l¹i c¸c hµm ®ã. HÇu hÕt c¸c hµm to¸n häc th«ng dông ®Òu lµ c¸c hµm chuÈn trong c¸c ng«n ng÷ lËp tr×nh. TËp hîp c¸c hµm chuÈn t¹o thµnh th viÖn hµm chuÈn cña ng«n ng÷ lËp tr×nh th viÖn hµm chuÈn lµ thµnh phÇn rÊt quan träng cña mçi ng«n ng÷ lËp tr×nh. Nã lµm cho viÖc lËp tr×nh ®îc dÔ dµng h¬n vµ lµm cho kh¶ n¨ng cña ng«n ng÷ lËp tr×nh t¨ng lªn rÊt nhiÒu.
- Hµm tù ®Þnh nghÜa: Lµ nh÷ng hµm kh«ng cã s½n trong th viÖn hµm chuÈn cña ng«n ng÷ lËp tr×nh. Muèn sö dông nh÷ng hµm nµy ngêi sö dông ph¶i t¹o ra nã. V× vËy nh÷ng hµm nµy míi cã tªn lµ hµm do ngêi dïng ®Þnh nghÜa. ViÖc t¹o ra vµ sö dông nh÷ng hµm tù ®Þnh nghÜa lµm cho ch¬ng tr×nh ng¾n gän h¬n, s¸ng sña h¬n vµ cho phÐp tiÕt kiÖm c«ng søc cña lËp tr×nh viªn.
Cã thÓ coi hµm lµ mét phÐp to¸n do ngêi dïng x¸c ®Þnh. Nãi chung hµm ®îc biÓu thÞ bëi mét tªn gäi chø kh«ng ph¶i lµ mét to¸n tö. C¸c to¸n h¹ng cña hµm, ®îc gäi lµ c¸c ®èi cña nã, ®îc x¸c ®Þnh trong danh s¸ch ®èi ph©n c¸ch nhau bëi dÊu phÈy vµ ®îc bao trong dÊu ngoÆc trßn. KÕt qu¶ cña hµm thêng ®îc coi lµ kiÓu cho l¹i cña nã. Hµm kh«ng cho l¹i gi¸ trÞ nµo cã kiÓu cho l¹i lµ Void. C¸c hµnh ®éng thùc t¹i mµ mét hµm thùc hiÖn ®îc x¸c ®Þnh trong th©n hµm. Th©n hµm ®îc bao trong ngoÆc nhän( "{ }" ) vµ ®«i khi cßn ®îc coi lµ mét khèi.
Trong C++ cã 2 c¸ch ®Þnh nghÜa hµm:
§Þnh nghÜa hµm sau hµm main( ) vµ ®Þnh nghÜa hµm tríc hµm main(). Tuy nhiªn c¸ch ®Þnh nghÜa hµm tríc hµm main( ) ng¨n gän h¬n vµ hay dïng h¬n cho nªn ë ®©y ta nghiªn cøu kü vÒ chóng.
ViÖc ®Þnh nghÜa mét hµm theo mÉu sau:
§Çu_®Ò_hµm
{
PhÇn khai b¸o
Th©n hµm
}
*§Çu ®Ò hµm cã d¹ng sau ®©y:
T§K(tõ ®Þnh kiÓu) : int, char;
T§K tªn hµm( T§K1 tham sè 1 [, T§K2 tham_sè 2 ]…)
T§K(*) x¸c ®Þnh kiÓu cña hµm, tøc lµ x¸c ®Þnh kiÓu cña gi¸ trÞ ®îc tr¶ l¹i th«ng qua tªn hµm.
C¸c tham sè cã trong ngoÆc trßn ( ) ®i sau tªn hµm ®îc gäi lµ c¸c tham sè h×nh thøc. Toµn bé c¸c tham sè trong ngoÆc ( ) gäi lµ danh s¸ch tham sè h×nh thøc. Danh s¸ch nµy gåm 1 hay nhiÒu tham sè, tham sè nä c¸ch tham sè kia dÊu phÈy. Danh s¸ch tham sè h×nh thøc kÕt thóc bëi dÊu ngoÆc, sau ®ã kh«ng cã dÊu chÊm phÈy.
*PhÇn khai b¸o cña hµm:
Dïng ®Ó khai b¸o c¸c biÕn ®îc dïng trong hµm nµy. C¸c biÕn ®îc khai b¸o trong hµm chØ cã ý nghÜa trong hµm nµy nªn ®îc gäi lµ c¸c biÕn côc bé( ®Þa ph¬ng). ViÖc sö dông c¸c biÕn côc bé trong ch¬ng tr×nh kh¸c hoÆc ch¬ng tr×nh chÝnh lµ kh«ng hîp lÖ.
Mét hµm ®îc tÝnh bÊt kú khi nµo to¸n tö gäi( "( )") ®îc ¸p dông vµo tªn cña hµm. NÕu hµm cÇn cã c¸c ®èi th× c¸c ®èi nµy, cßn ®îc gäi lµ c¸c ®èi thùc t¹i, sÏ ®îc ®Æt vµo bªn trong to¸n tö gäi. Mçi ®èi ®îc ph©n c¸ch bëi mét dÊu phÈy. Nã cßn ®îc gäi lµ truyÒn ®èi cho hµm.
*Th©n hµm:
Gièng nh phÇn th©n ch¬ng tr×nh cña mét ch¬ng tr×nh th«ng thêng. Tuy nhiªn sau khi tÝnh xong gi¸ trÞ hµm th× trong th©n hµm thêng cã c©u lÖnh return ®Ó tr¶ l¹i gi¸ trÞ võa tÝnh ®îc trong th©n hµm cho tªn hµm.
Nã cã d¹ng:
Return BiÓu thøc;
hoÆc Return( biÓu thøc).
C©u lÖnh nµy cã t¸c dông tr¶ cho tªn hµm gi¸ trÞ cña biÓu thøc cã trong c©u lÖnh nµy. C©u lÖnh return kÕt thóc viÖc thùc hiÖn c¸c c©u lÖnh trong th©n hµm vµ tr¶ ®iÒu kiÖn vÒ chç ®· gäi hµm trong ch¬ng tr×nh chÝnh. Tuy nhiªn c©u lÖnh return lµ kh«ng b¾t buéc ph¶i cã.
Hµm tr¶ l¹i gi¸ trÞ qua tªn hµm nªn hµm cã thÓ ®îc dïng lµ mét to¸n h¹ng trong biÓu thøc.
Trong C++ chØ cã mét lo¹i ch¬ng tr×nh con ®ã lµ hµm. Mçi ch¬ng tr×nh
Trong C++ ph¶i cã Ýt nhÊt mét hµm main( ). Hµm trong C++ kh«ng nhÊt thiÕt ph¶i cã tham sè, tr¶ l¹i gi¸ trÞ( ®ã lµ kiÓu void). Trong ch¬ng tr×nh nguån hµm cã thÓ lµ mét to¸n h¹ng trong biÓu thøc hoÆc cã thÓ ®øng mét m×nh nh mét c©u lÖnh ®¬n ®éc.
VÝ dô:
#include
#include
// Dinh nghia ham BINH_PHUONG
int BINH_PHUONG(int n)
{
int ketqua;
ketqua=n*n;
return ketqua;
}
// Chuong trinh chinh
main()
{
int m;
cout<<"m=";
cin>>m;
cout<<'\n'<<m<<"binhphuong=";
cout<<BINH_PHUONG(m); (1);
getch();
}
Trong ch¬ng tr×nh nµy dßng(1) cã chøa lêi gäi hµm lµ BINH_PHUONG(m). ë ®©y m ®îc gäi lµ tham sè thùc sù gÆp lêi gäi nµy m¸y sÏ thùc hiÖn hµm BINH_PHUONG mµ ta ®· khai b¸o ë trªn.
II.Sö dông hµm.
Muèn sö dông hµm ta ph¶i viÕt lêi gäi hµm. Lêi gäi hµm cã d¹ng sau:
Tªn hµm( [ Danh s¸ch tham sè thùc sù] )
Danh s¸ch tham sè thùc sù bao gåm mét hay mét sè tham sè thùc sù c¸ch nhau bëi dÊu phÈy. Danh s¸ch tham sè thùc sù cã thÓ lµ mét hµm, mét biÕn hoÆc mét biÓu thøc. Danh s¸ch tham sè thùc sù lµ tuú chän. Sè tham sè thùc sù trong danh s¸ch tham sè thùc sù ph¶i b»ng sè tham sè h×nh thøc trong danh s¸ch tham sè h×nh thøc. KiÓu cña tham sè thùc sù ph¶i phï hîp víi kiÓu cña tham sè h×nh thøc t¬ng øng.
Mét lêi gäi hµm cã thÓ lµm cho 1 hay 2 ®iÒu xuÊt hiÖn. NÕu hµm ®· ®îc khai b¸o lµ inline th× th©n cña hµm ®îc më réng t¹i ®iÓm gäi nã trong lóc dÞch, ngoµi ra hµm sÏ ®îc gäi trong lóc ch¹y. Mét lêi gäi hµm lµm cho ®iÒu khiÓn cña ch¬ng tr×nh ®îc chuyÓn cho hµm ®îc gäi, viÖc thùc hiÖn cña hµm ®ang ch¹y lóc ®ã bÞ t¹m ngõng. Khi tÝnh to¸n cña hµm ®îc gäi ®· hoµn tÊt th× hµm bÞ ngõng sÏ lÊy l¹i ho¹t ®éng t¹i ®iÓm sau lêi gäi. ViÖc gäi hµm ®îc qu¶n lý trong chång khi ch¹y cña ch¬ng tr×nh. NÕu mét hµm kh«ng ®îc khai b¸o trong ch¬ng tr×nh tríc khi dïng nã th× sÏ cã lçi khi dÞch.
Hµm chØ ®îc ®Þnh nghÜa mét lÇn trong ch¬ng tr×nh. VÒ c¬ b¶n ®Þnh nghÜa hµm trong tÖp v¨n b¶n riªng cña nã hay trong tÖp v¨n b¶n cã chøa nã vµ c¸c hµm cã liªn quan kh¸c. Mét hµm thêng ®îc dïng trong c¸c tÖp kh¸c tÖp chøa ®Þnh nghÜa cña nã. Do ®ã cÇn cã ph¬ng ph¸p phô ®Ó khai b¸o hµm.
Khai b¸o hµm bao gåm kiÓu cho l¹i cña hµm, tªn hµm vµ danh s¸ch ®èi.
III.TruyÒn tham sè cho hµm.
Khi gÆp lêi gäi hµm trong ch¬ng tr×nh chÝnh th× qu¸ tr×nh thùc hiÖn hµm b¾t ®Çu. Qu¸ tr×nh nµy gåm c¸c c«ng viÖc sau:
- M¸y t¹m thêi rêi khái ch¬ng tr×nh chÝnh, cÊp ph¸t bé nhí cho c¸c tham sè h×nh thøc vµ c¸c biÕn côc bé.
- G¸n c¸c gi¸ trÞ cña tham sè thùc sù cho c¸c tham sè h×nh thøc t¬ng øng.
- LÇn lît thùc hiÖn c¸c c©u lÖnh trong th©n hµm. NÕu gÆp c©u lÖnh return hoÆc gÆp dÊu “}” th× m¸y sÏ xo¸ c¸c tham sè h×nh thøc hoÆc c¸c biÕn côc bé quay vÒ ch¬ng tr×nh chÝnh ë chç cã lêi gäi hµm. NÕu tho¸t khái hµm b»ng c©u lÖnh Return th× gi¸ trÞ biÓu thøc cã trong c©u lÖnh nµy sÏ ®îc g¸n cho tªn hµm.
Khi gÆp lêi gäi hµm th× gi¸ trÞ tham sè thùc sù sÏ ®îc g¸n cho tham sè h×nh thøc t¬ng øng, mäi tÝnh to¸n trong th©n hµm sÏ ®îc thùc hiÖn trªn c¸c tham sè h×nh thøc. Khi tho¸t khái hµm m¸y sÏ xo¸ c¸c tham sè h×nh thøc vµ c¸c biÕn côc bé, nh vËy nh÷ng thay ®æi ®èi víi c¸c tham sè h×nh thøc kh«ng thÓ ®îc truyÒn vÒ ch¬ng tr×nh chÝnh th«ng qua tham sè thùc sù t¬ng øng.
VËy lµm thÕ nµo ®Ó trong ch¬ng tr×nh con cã thÓ thay ®æi gi¸ trÞ c¸c biÕn cã trong ch¬ng tr×nh chÝnh?
Ngêi ta dïng con trá lµm tham sè h×nh thøc ®Ó gi¶i quyÕt vÊn ®Ò nµy. Khi ®ã ngêi ta truyÒn cho ch¬ng tr×nh con ®Þa chØ cña biÕn tríc vµ sau lêi gäi hµm( tøc lµ tríc vµ sau khi thùc hiÖn hµm ®Þa chØ nµy kh«ng thay ®æi, hoµn toµn phï hîp víi c¸c gi¶ ®Þnh cña C++. Tuy nhiªn trong qu¸ tr×nh thùc hiÖn hµm th× gi¸ trÞ chøa trong ®Þa chØ ®ã cã thÓ bÞ thay ®æi, gi¸ trÞ nµy ®îc gi÷ nguyªn khi tho¸t khái hµm. §©y lµ ph¬ng ph¸p truyÒn gi¸ trÞ tõ ch¬ng tr×nh con vÒ ch¬ng tr×nh chÝnh.
VD: TruyÒn gi¸ trÞ tõ ch¬ng tr×nh con vÒ ch¬ng tr×nh chÝnh.
// Chuong trinh co ham tinh tong n so.
#include
#include
float TONG(float *vecto, int n)
{
int i;
float s=0;
for(i=0; i<n;i++)
s=s+ *(vecto+i);
return (s);
}
main()
{
int i;
float a[4]={1,2,3,4};
float b[6]={5,1,2,3,1,4};
clrscr();
cout<<"\n tong vecto a="<<TONG(a,4);//in so 10
cout<<"\n tong vecto b="<<TONG(&b[0],6); //in ra so 10
getch();
}
IV. Sö dông hµm trong nhiÒu ch¬ng tr×nh kh¸c.
Gi¶ sö cã mét tÖp gäi lµ: DVVECTERE.CPP
Chøa c¸c hµm sau:
Float TONG VTF( float * vecter, int n);
Float TICH VTF ( float * vecter, int n);
Void NHAP VTF ( float * vecter, int n);
Void IN VTF ( float * vecter, int n);
// Ch¬ng tr×nh hµm ®Þnh nghÜa trong ch¬ng tr×nh kh¸c
#include
#include
#include "C:\ baitap TC \ dvvecter.CPP"
main( )
{
int n=2;
float a[10];
NHAP VTF (a,n);
IN VTF(a,n);
TONG VTF(a,n);
TICH VTF (a,n);
Getch( );
}
V. Danh s¸ch ®èi cña hµm.
C¸c hµm kh¸c nhau cña mét ch¬ng tr×nh cã thÓ th©m nhËp chung vµo c¸c gi¸ trÞ víi nhau theo 2 ph¬ng ph¸p. Mét ph¬ng ph¸p lµ dïng biÕn toµn côc trong ch¬ng tr×nhl; Ph¬ng ph¸p thø hai lµ dïng danh s¸ch ®èi h×nh thøc.
Danh s¸ch ®èi ®a ra mét ph¬ng ph¸p kh¸c ®Ó th©m nhËp chung vµo c¸c gi¸ trÞ gi÷a mét hµm vµ ch¬ng tr×nh chung. Danh s¸ch ®èi cïng víi kiÓu cho l¹i cña hµm x¸c ®Þnh ra giao diÖn chung cña hµm. Mét hµm khÐp kÝn cã thÓ ®îc dïng qua nhiÒu ch¬ng tr×nh, nã kh«ng nhÊt thiÕt bÞ giíi h¹n vµo mét øng dông riªng. NÕu bá bít ®i mét ®èi hay truyÒn cho mét ®èi kiÓu sai sÏ g©y ra lçi. Kh¶ n¨ng lçi trong truyÒn ®èi t¨ng lªn theo kÝch cì cña danh s¸ch ®èi, dïng tèi ®a lµ 8 ®èi.
*Có ph¸p danh s¸ch.
Kh«ng ®îc phÐp bá thiÕu danh s¸ch ®èi cña hµm. Mét hµm kh«ng cã ®èi cã thÓ ®îc biÓu thÞ hoÆc b»ng danh s¸ch ®èi rçng hoÆc b»ng danh s¸ch ®èi chØ chøa mét tõ kho¸ void.
//Khai b¸o t¬ng ®¬ng
int fork();
int fork( void);
Danh s¸ch ®èi cßn ®îc gäi lµ dÊu hiÖu cña hµm bëi v× nã thêng ®îc dïng ®Ó ph©n biÖt mét thÓ nghiÖm cña hµm nµy víi hµm kh¸c. Tªn vµ dÊu hiÖu mét hµm x¸c ®Þnh duy nhÊt nã.
DÊu hiÖu bao gåm mét danh s¸ch c¸c kiÓu ®èi ph©n c¸ch nhau bëi dÊu phÈy. Kh«ng cã hai tªn ®èi nµo xuÊt hiÖn trong dÊu hiÖu ®îc phÐp trïng nhau. Tªn ®èi cho phÐp ®èi ®ã ®îc th©m nhËp tõ trong th©n cña hµm. Do ®ã tªn ®èi kh«ng cÇn viÕt trong khai b¸o hµm.
*TruyÒn ®èi.
Danh s¸ch ®èi cña hµm m« t¶ cho c¸c ®èi h×nh thøc. Mçi ®èi h×nh thøc ®îc cÊp bé nhí bªn trong vïng nhí cña hµm. C¸c biÓu thøc n»m gi÷a 2 d©u ngoÆc trßn cña lêi gäi hµm ®îc gäi lµ c¸c ®èi thùc t¹i cña lêi gäi. ViÖc truyÒn ®èi vËy lµ mét tiÕn tr×nh khëi ®Çu cho vïng nhí cña c¸c ®èi h×nh thøc theo c¸c ®èi thùc t¹i.
Víi truyÒn theo gi¸ trÞ, hµm kh«ng bao giê th©m nhËp vµo c¸c ®èi thùc t¹i cña lêi gäi, néi dung cña ®èi thùc t¹i kh«ng bÞ thay ®æi. Cã 2 ph¬ng ¸n truyÒn theo gi¸ trÞ.
Thø nhÊt lµ ®èi h×nh thøc ®îc khai b¸o lµ con trá.
Void pswap( int * x, int * y)
{
int tg=* y;
*y=* x;
*x=tg;
}
Thø 2 ®Ó truyÒn theo gi¸ trÞ lµ khai b¸o ®èi h×nh thøc cã kiÓu tham kh¶o
Void rswap( int &x, int &y)
{
int tg= y;
y= x;
x=tg;
}
VI. C¸c hµm trong C++.
1. Tham chiÕu.
Tham chiÕu lµ mét bÝ danh cña mét vïng nhí ®îc cÊp ph¸t cho mét biÕn nµo ®ã. Mét tham biÕn cã thÓ lµ mét biÕn tham sè h×nh thøc cña hµm hay dïng lµm mét gi¸ trÞ tr¶ vÒ cña hµm.
*Tham chiÕu tíi mét biÕn.
VD: int n;
int &p=n;
DÊu & x¸c ®Þnh p lµ mét biÕn tham chiÕu, cßn dÊu "=" vµ tªn biÕn n ®Ó x¸c ®Þnh vïng nhí mµ p tham chiÕu tíi.
VÒ b¶n chÊt tham chiªu vµ tham trá gièng nhau v× cïng chØ ®Õn ®èi tîng cã ®Þa chØ, cïng ®îc cÊp ph¸t ®Þa chØ khi khai b¸o, nhng c¸ch sö dông chóng th× kh¸c nhau. Khi nãi ®Õn tham chiÕu "&p" ta ph¶i g¾n nã víi mét biÕn nµo ®ã ®· khai b¸o qua "&p=n", trong khi ®ã khai b¸o con trá "*p" kh«ng nhÊt thiÕt ph¶i khëi t¹o gi¸ trÞ cho nã. Sau khi khëi t¹o cho tham chiÕu g¾n víi mét biÕn nµo ®ã råi th× ta kh«ng thÓ thay ®æi ®Ó g¾n tham chiÕu víi mét biÕn kh¸c, do vËy ®Ó truy nhËp ®Õn vïng nhí t¬ng øng víi mét biÕn chóng ta cã thÓ sö dông hoÆc lµ tªn biÕn hoÆc lµ tªn tham chiÕu t¬ng øng.
VD: #include
Void main( )
{
int x=3, &y=x; // y lóc nµy lµ " bÝ danh" cña x
cout<<"x="<<x<<"\n";
cout<<"y="<<y<<"\n";
y=7;
cout<<"x="<<x<<"\n";
<<"y="<<y<<"\n";
}
Kh«ng thÓ g¾n mét tham chiÕu víi mét h»ng sè trõ trêng hîp cã tõ kho¸ const ®øng tríc khai b¸o tham chiÕu.
Const int &p=3;
*H»ng tham chiÕu.
H»ng tham chiÕu ®îc khai b¸o nh sau:
Int n=5;
Const int &x=n;
Còng gièng nh biÕn, h»ng tham chiÕu ®Õn mét biÕn hoÆc mét h»ng.
Int n=5;
Const int &x=n;
Const int &y=100;
H»ng tham chiÕu kh«ng ®îc phÐp thay ®æi gi¸ trÞ cña vïng nhí mµ nã tham chiÕu. H»ng tham chiÕu thêng ®îc sö dông lµm ®èi cña hµm ®Ó cho phÐp hµm sö dông gi¸ trÞ cña c¸c tham sè trong lêi gäi hµm.
*TruyÒn tham sè cho hµm b»ng tham chiÕu.
NÕu ®èi lµ biÕn hoÆc h»ng tham chiÕu kiÓu K th× tham sè ( trong lêi gäi hµm) ph¶i lµ biÕn hoÆc phÇn tö m¶ng kiÓu K.
VD:
/*swap.cpp*/
#include
#include
/*Ham swap1 duoc goi voi cac tham so duoc truyen theo tham tri*/
void swap1(int x, int y)
{
int temp=x;
x=y;
y=temp;
}
/*Ham swap2 thuc hien viec truyen tham so bang tham tro*/
void swap2(int *x, int *y)
{
int temp=*x;
*x=*y;
*y=temp;
}
/*Ham swap3 thuc hien viec truyen tham so bang tham chieu*/
void swap3(int &x, int &y)
{
int temp=x;
x=y;
y=temp;
}
void main()
{
int a=2, b=3;
clrscr();
cout<<"Truoc khi goi swap1:\n";
cout<<"a = "<<a<<"b = "<<b<<"\n";
swap1(a,b);
cout<<"Sau khi goi ham swap1:\n";
cout<<"a = "<<a<<"b = "<<b<<"\n";
a=2;b=3;
cout<<"Truoc khi goi swap2:\n";
cout<<"a = "<<a<<"b = "<<b<<"\n";
swap2(&a,&b);
cout<<"Sau khi goi ham swap2:\n";
cout<<"a = "<<a<<"b = "<<b<<"\n";
a=2;b=3;
cout<<"Truoc khi goi swap3:\n";
cout<<"a = "<<a<<"b = "<<b<<"\n";
swap3(a,b);
cout<<"Sau khi goi ham swap3:\n";
cout<<"a = "<<a<<"b = "<<b<<"\n";
getch();
}
ket qua se la:
Truoc khi goi swap1:
a=2 b=3
Sau khi goi swap1:
a=2 b=3
Truoc khi goi swap2:
a=2 b=3
Sau khi goi swap2:
a=3 b=2
Truoc khi goi swap3:
a=2 b=3
Sau khi goi swap3:
a=3 b=2
Trong ch¬ng tr×nh trªn ta truyÒn tham sè a,b cho hµm swap1() theo tham trÞ nªn gi¸ trÞ cña chóng tríc vµ sau khi gäi hµm lµ kh«ng thay ®æi. Hµm swap2( ) thay v× truyÒn trùc tiÕp gi¸ trÞ 2 biÕn a,b ngêi ta truyÒn ®Þa chØ cña chóng råi th«ng qua c¸c ®Þa chØ nµy ®Ó x¸c ®Þnh gi¸ trÞ biÕn, b»ng c¸ch ®ã gi¸ trÞ cña 2 biÕn a,b sÏ ho¸n ®æi cho nhau sau lêi gäi hµm. Hµm swap3( )®a ra gi¶i ph¸p sö dông tham chiÕu, c¸c tham sè h×nh thøc cña hµm swap3( ) b©y giê lµ c¸c tham chiÕu ®Õn c¸c tham sè thùc ®îc truyÒn cho hµm. Nhê vËy mµ gi¸ trÞ cña 2 tham sè thùc a vµ b cã thÓ ho¸n ®æi ®îc cho nhau.
*Gi¸ trÞ tr¶ vÒ cña hµm lµ tham chiÕu.
§Þnh nghÜa cña hµm cã d¹ng:
& fct(… )
{ …
return;
}
BiÓu thøc ®îc tr¶ l¹i trong c©u lÖnh return ph¶i lµ tªn cña mét biÕn x¸c ®Þnh tõ bªn ngoµi hµm. V× nÕu lµ biÕn côc bé th× nã sÏ bÞ mÊt ®i khi kÕt thóc thùc hiÖn hµm.
Khi tr¶ vÒ cña hµm lµ tham chiÕu ta cã thÓ gÆp vÕ tr¸i lµ mét lêi gäi hµm chø kh«ng ph¶i lµ tªn mét biÕn.
VD:
#include
#include
struct TS
{
char ht[25];
float dt,dl, dh,td;
};
TS ts;
TS &f()
{
return ts;
}
void main()
{
TS &h=f(); // h tham chieu den bien ts
cout<<"\n Ho ten:";
cin.get(h.ht,25);
cout<<" Cac diem toan, diem ly, diem hoa:";
cin>>h.dt>>h.dl>>h.dh;
h.td=h.dt+h.dl+h.dh;
cout<<"\n Ho ten:"<<ts.ht;
cout<<"\n Tong diem:"<<ts.td;
getch();
}
2. §èi cã gi¸ trÞ mÆc ®Þnh.
Th«ng thêng sè tham sè trong lêi gäi hµm sÏ b»ng sè ®èi cña hµm. Mçi ®èi sÏ ®îc khëi g¸n gi¸ trÞ theo tham sè t¬ng øng cña nã. C++ cho phÐp t¹o gi¸ trÞ mÆc ®Þnh cho c¸c ®èi. C¸c ®èi nµy cã thÓ cã hoÆc kh«ng cã tham sè trong lêi gäi hµm. Khi kh«ng cã tham sè t¬ng øng ®èi ®îc khëi g¸n bëi gi¸ trÞ mÆc ®Þnh.
Sö dông hµm cã ®èi mÆc ®Þnh: Lêi gäi hµm cÇn viÕt theo quy ®Þnh sau:
C¸c tham sè thiÕu v¾ng trong lêi gäi hµm ph¶i t¬ng øng víi c¸c ®èi mÆc ®Þnh cuèi cïng, nghÜa lµ ®· dïng gi¸ trÞ mÆc ®Þnh cho mét ®èi th× còng ph¶i sö dông gi¸ trÞ mÆc ®Þnh cho c¸c ®èi cßn l¹i.
VD:
Hµm cã 3 ®èi mÆc ®Þnh.
Void h( int d1, float d2, char *d3="VIET NAM", int d4=10, double d5=3.14);
//lêi gäi hµm
h( 3, 3.4, "ABC", 10, 10);
h( 3, 3.4, "ABC");
h( 3, 3.4);
3. Hµm trùc tuyÕn( inline).
§Ó kh¾c phôc nhîc ®iÓm cña hµm lµ lµm chËm tèc ®é ch¬ng tr×nh do ph¶i thùc hiÖn mét sè thao t¸c cã tÝnh thñ tôc mçi khi gäi hµm. Ngêi ta dïng hµm trùc tuyÕn.
§Ó biÕn mét hµm thµnh trùc tuyÕn ta viÕt thªm tõ kho¸ inline vµo tríc nguyªn mÉu hµm. NÕu kh«ng dïng nguyªn mÉu th× viÕt tõ kho¸ nµy tríc dßng ®Çu tiªn cña ®Þnh nghÜa hµm.
VD:
Inline float f( int n, float x);
Float f(int n, float x)
{
// C¸c c©u lÖnh trong th©n hµm
}
hoÆc
inline float f(int n, float x)
{
// C¸c c©u lÖnh trong th©n hµm
}
Kh«ng ®îc ®Æt inline tríc ®Þnh nghÜa hµm. NÕu kh«ng bÞ quÈn kh«ng tho¸t ®îc.
VD: Sö dông hµm trùc tuyÕn.
Ch¬ng tr×nh tÝnh chu vi, diÖn tÝch cña h×nh ch÷ nhËt( Kh«ng khai b¸o nguyªn mÉu khi ®ã hµm tÝnh ph¶i ®Æt trªn hµm main).
#include
#include<iostream.h
inline void dtcvhcn(int x, int y, int& dt,int& cv)
{
dt=x*y;
cv=2*(x+y);
}
void main()
{
int x[10],y[10],dt[10],cv[10],;
cout<<"\n So hinh chu nhat:";
cin>>n;
for(int i=1;i<=n;++i)
{
cout<<"\n Nhap 2 canh cua hinh chu nhat thu"<<i<<":";
cin>>x[i]>>y[i];
dtcvhcn(x[i],y[i],dt[i],cv[i]);
}
clrscr();
for(i=1;i<=n;++i)
{
cout<<"\n Hinh chu nhat thu"<<i<<":";
cout<<"\n do dai 2 canh="<<x[i]<<"va"<<y[i];
cout<<"\n Dien tich="<<dt[i];
cout<<"\n Chu vi="<<cv[i];
}
getch();
}
4. §Ö quy.
Mét ®èi tîng ®îc gäi lµ cã tÝnh ®Ö quy nÕu trong ®Þnh nghÜa ®èi tîng nµy l¹i dïng chÝnh b¶n th©n nã tøc lµ dïng chÝnh ®èi tîng ®Ó ®Þnh nghÜa ®èi tîng.
Hµm ®Ö quy lµ hµm trong ®Þnh nghÜa hµm cã sö dông lêi gäi hµm. Mét ®Þnh nghÜa ®Ö quy cã Ýt nhÊt 2 ®iÒu kiÖn:
- §iÒu kiÖn dõng: Nã kh«ng chøa ®èi tîng ®ang ®Þnh nghÜa.
- Thµnh phÇn ®Ö quy: Nã cã chøa ®èi tîng ®ang ®Þnh nghÜa.
NÕu kh«ng cã ®iÒu kiÖn dõng th× hµm sÏ ®Ö quy “m·i m·i”. Sö dông kü thuËt ®Ö quy cho phÐp biÕn mét qu¸ tr×nh gåm v« h¹n c¸c thao t¸c thµnh mét qu¸ tr×nh gåm mét sè h÷u h¹n. Sau ®ã giao cho m¸y thùc hiÖn víi tèc ®é rÊt cao.
Ch¬ng tr×nh con ®Ö quy lµ ch¬ng tr×nh con cã chøa lêi gäi ®Õn chÝnh nã. Khi gÆp mét lêi gäi ®Õn ch¬ng tr×nh con m¸y sÏ t¹o ra mét tËp hîp c¸c biÕn côc bé míi, cã bao nhiªu lêi gäi ®Õn ch¬ng tr×nh con th× cã bÊy nhiªu lÇn tho¸t khái nã. Mçi khi tho¸t khái ch¬ng tr×nh con th× mét tËp hîp c¸c biÕn côc bé ®îc gi¶i phãng, qu¸ tr×nh gi¶i phãng c¸c biÕn côc bé ngîc víi qu¸ tr×nh t¹o ra nã, nghÜa lµ tËp hîp biÕn côc bé nµo t¹o ra sau th× sÏ ®îc gi¶i phãng tríc.
ViÕt vµ sö dông c¸c hµm ®Ö quy lµm cho ch¬ng tr×nh ng¾n gän nhng tèn thêi gian tÝnh to¸n vµ tèn bé nhí. B»ng ph¬ng ph¸p lËp tr×nh th«ng thêng cã thÓ kh«ng cÇn ®Õn kü thuËt ®Ö quy.
VD:
// ®Þnh nghÜa hµm GIAI_THUA theo kiÓu ®Ö quy.
Int GIAI_THUA( int n)
{
int gt;
if( n==0)
gt=1; // ®iÒu kiÖn dõng
else
gt=*n GIAI_THUA( n-1); //thµnh phÇn ®Ö quy
return( gt);
}
Ch¬ng II. BiÕn toµn côc, biÕn côc bé.
I. BiÕn toµn côc.
BiÕn toµn côc lµ mét biÕn ®îc khai b¸o trong ch¬ng tr×nh vµ cã ý nghÜa( nghÜa lµ cã thÓ sö dông) trong ch¬ng tr×nh nµy còng nh tÊt c¶ c¸c khèi ch¬ng tr×nh thuéc vÒ ch¬ng tr×nh nµy. Nh vËy biÕn toµn côc cã thÓ ®îc sö dông trong nhiÒu khèi ch¬ng tr×nh kh¸c nhau.
BiÕn toµn côc cã thÓ ®îc th©m nhËp tíi tõ trong th©n cña hµm, chØ cÇn nã ®îc khai b¸o ®óng chç. Ngêi lËp tr×nh cã thÓ g¸n mét gi¸ trÞ cho l¹i thø hai cho mét biÕn toµn côc.
BiÕn toµn côc cã u ®iÓm lµ ®¬n gi¶n, tiÖn lîi tiÖn dïng.
Nhîc ®iÓm cña nã lµ kh«ng trùc gi¸c. Tøc lµ tõ lêi gäi hµm ta kh«ng biÕt ®îc biÕn nµy ®· ®îc ®Æt gi¸ trÞ. Nã g©y khã kh¨n cho ngêi lËp tr×nh kh¸c khi muèn hiÓu hay muèn thay ®æi ch¬ng tr×nh. Kh¶ n¨ng th©m nhËp chung vµo biÕn toµn côc tõ bÊt kú ®©u bªn trong ch¬ng tr×nh võa lµ lîi Ých chÝnh cña nã võa lµ ®é tin cËy cã ý nghÜa nhÊt. TÝnh thÊy ®îc cña biÕn toµn côc lµm cho nã trë thµnh ph¬ng ph¸p thuËn tiÖn cho liªn l¹c gi÷a c¸c phÇn kh¸c nhau cña ch¬ng tr×nh. Nhîc ®iÓm cña viÖc dïng biÕn toµn côc cho viÖc liªn l¹c gi÷a c¸c hµm lµ nh sau:
+ C¸c hµm cã dïng tíi biÕn toµn côc phô thuéc vµo sù tån t¹i vµ kiÓu cña biÕn toµn côc ®ã, lµm cho viÖc dïng l¹i hµm nµy trong ng÷ c¶nh kh¸c trë lªn khã kh¨n h¬n nhiÒu.
+ NÕu cÇn söa ®æi ch¬ng tr×nh th× nh÷ng sù phô thuéc toµn côc sÏ lµm t¨ng kh¶ n¨ng sinh lçi. H¬n n÷a viÖc ®a vµo nh÷ng thay ®æi côc bé ®ßi hái viÖc hiÓu biÕt toµn bé ch¬ng tr×nh.
+ NÕu mét biÕn toµn côc nhËn mét gi¸ trÞ kh«ng ®óng th× ph¶i t×m kiÕm trong toµn bé ch¬ng tr×nh ®Ó xem lçi xuÊt hiÖn ë ®©u; kh«ng cã viÖc côc bé ho¸.
+ ViÖc ®Ö quy l¹i cßn khã kh¨n ®i ®Õn ®óng chç h¬n khi hµm dïng mét biÕn toµn côc.
Mét biÕn côc bé cã thÓ dïng l¹i tªn cña mét biÕn toµn côc. Khi ®ã biÕn côc bé che lÊp biÕn toµn bé cïng tªn. Ch¼ng h¹n:
include
int x;
main( )
{
int x=10; //biÕn côc bé
cout<< x <<"\n"; //biÕn toµn côc
}
Trong trêng hîp ®ã, khi muèn truy xuÊt tíi biÕn toµn côc ph¶i sö dông to¸n tö ph¹m vi "::" tríc tªn biÕn:
include
int x;
main( )
{
int x=10; //biÕn côc bé
::x=10;// biÕn toµn côc
cout<< x <<"\n"; //x côc bé
cout<< ::x <<"\n"; //x toµn côc
}
Mét biÕn toµn côc ®îc ®Þnh nghÜa trong mét tÖp nhng ®îc dïng ë tÖp thø hai hay trong nhiÒu tÖp kh¸c. Tõ kho¸ extert ®a ra gi¶i ph¸p.
Hai biÕn toµn côc ®îc ®Þnh nghÜa trong c¸c tÖp ch¬ng tr×nh t¸ch biÖt cïng dïng chung mét tªn nhng ®îc dù ®Þnh nãi tíi c¸c thùc thÓ ch¬ng tr×nh kh¸c nhau, mçi biÕn râ rµng ®îc dÞch riªng rÏ. Nhng khi g¾n l¹i víi nhau, biÕn bÞ b¸o lµ cã nhiÒu ®Þnh nghÜa vµ tr×nh biªn dÞch dõng l¹i. ViÖc dïng tõ kho¸ static ®a ra mét gi¶i ph¸p.
II. BiÕn côc bé.
BiÕn côc bé lµ biÕn ®îc khai b¸o trong ch¬ng tr×nh vµ nã chØ cã ý nghÜa ë ph¹m vi nã khai b¸o. Khi ra khái phÇn nã khai b¸o th× nã kh«ng cßn dïng ®îc n÷a.
C¸c nguyªn lý cña biÕn côc bé:
+ C¸c biÕn côc bé ( dï trïng tªn víi biÕn toµn côc) còng kh«ng lµm thay ®æi gi¸ trÞ cña biÕn toµn côc.
+ Mäi tham biÕn h×nh thøc lo¹i truyÒn theo trÞ trong c¸c ch¬ng tr×nh con( thñ tôc vµ hµm) ®Òu lµ c¸c biÕn côc bé.
+ C¸c biÕn khai b¸o trong c¸c ch¬ng tr×nh con ®Òu lµ c¸c biÕn côc bé.
+Khi ph¶i sö dông biÕn phô th× nªn dïng biÕn côc bé.
Ph¹m vi côc bé cã thÓ lång nhau. Mçi khèi cã chøa mét c©u lÖnh khai b¸o ®Òu duy tr× ph¹m vi côc bé riªng cña nã.
Ch¬ng III.
Ch¬ng tr×nh cã sö dông ®Þnh nghÜa hµm, biÕn toµn côc, biÕn côc bé.
#include
Các file đính kèm theo tài liệu này:
- 77783.DOC