Giáo trình Phương pháp lập trình

pdf 124 trang ngocly 2210
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Phương pháp lập trình", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_phuong_phap_lap_trinh.pdf

Nội dung text: Giáo trình Phương pháp lập trình

  1. GiáotrìnhPPlptrình TT.CơngNghThơngTin Chương1 TNGQUANVNGƠNNGLPTRÌNHC/C++ 1.LchscangơnnglptrìnhC/C++ CđưctobiDennisRitchieBellTelephoneLaboratoriesvào năm1972đchophéplptrìnhviênpháttrincácngdnghiu quhơncácngơnnglptrìnhhincĩtithiđimđĩ. ðimmnhvàmmdocaCchophépcácnhàpháttrinBell LabstonêncácngdngphctpnhưhđiuhànhUnix.Vào năm 1983, hc vin chun quc gia M (American National StandardsInstituteANSI)thànhlpmttiubanđchunhĩaC đưcbitđnnhưANSIStandardC.Ngàynay,ttctrìnhbiên dchC/C++đutuântheoANSIStandardC.C++đưcxâydng trênnntngcaANSIStandardC. C++làmtngơnnglptrìnhhưngđitưngmàbaohàmngơn ngCtrongnĩ.Tronggiáotrìnhnàychưakhosát phn lp trìnhhưngđitưngcaC++. 2.Kthutđgiiquytmtbàitốn Mtchươngtrìnhmáytínhđưcthitkđgiiquytmtbàitốn nàođĩ.Vìvy,nhngbưccnđtìmkimligiichomtbài tốncũnggingnhưnhngbưccnđvitmtchương trình. Cácbưcgm: Xácđnhyêucucabàitốn. Nghĩramtphươngcách(algorithm) đtìmligii. Thchinphươngcáchđĩ. Kimtraktquđxemligiicĩđúngviyêucucabài tốn. 1/124
  2. GiáotrìnhPPlptrình TT.CơngNghThơngTin KhivitmtchươngtrìnhtrongC/C++,đâylànhngbưcđưc đngh: 1. Xácđnhmcđíchcachươngtrình 2. Nghĩrathuttốnphùhpđgiiquytbàitốn(dùngmã gi,lưuđ, ) 3. Càiđt(vit)thuttốndùngngơnnglptrìnhC/C++ 4. Thcthichươngtrìnhvàkimth(testing) . 3.Cácbưctrongchutrìnhpháttrinchươngtrình Chutrìnhpháttrinchươngtrình(programdevelopmentcycle )cĩ nhngbưcsauđây.1.Mttrìnhsonthovănbnđưcdùngđ nhp mã ngun ( source code ). 2. Mã ngun đưc biên dch (compile )đtonêntptinđitưng( objectfile ).3.Cáctptin đi tưng đưc liên kt ( link )đtonêntptincĩththcthi (executablefile ).4.Thchin( run )chươngtrìnhđchrachương trìnhcĩlàmvicđúngnhưđãđnhkhơng. Use (Cfree,BorlandC/C++ editor editor) Source code (.c;.cppfiles) Compile (bc.exe) sourcefile Object code (.hfiles) (.exefile) Library Link Executable files objectfile program 2/124
  3. GiáotrìnhPPlptrình TT.CơngNghThơngTin 3.1.Sonthomãngun( sourcecodeeditor ) Mãngunlàmttpcáclnhdùngđchdnmáytínhthchin cơngvicmongmun.Tptinmãngunđưclưutrvi phn phânloi.c(C)hoc.cpp(C++). 3.2.Biêndch( compile ) TptinmãngunđưcvitbngnhngtgingtingAnhnênd dàngđđcvàhiu.Tuynhiên,máytínhkhơngthhiunhngt này.Máytínhyêucucácchdnnhphân( binary )trongdng thc ca ngơn ng máy ( machine language ). Trưc khi mt chươngtrìnhđưcvitbngngơnngcpcaonhưC/C++cĩth thcthitrênmáytính,nĩphiđưcbiêndchtmãngunsang mãmáy.Vicdchnàyđưcthchinbimtchươngtrìnhgilà trìnhbiêndch( compiler ). Cácchdnngơnngmáyđưctobitrìnhbiêndchđưcgilà mãđitưng( objectcode )vàtptinchachúnggilàtptinđi tưng.Tptinđitưngcĩcùngtênnhưtptinmãngunnhưng cĩphnphânloi.obj. 3.3.Totptinthcthi( executablefiles ) C/C++cĩmtthưvinhàmchamãđitưngchonhnghàmđã đưctosn.Nhnghàmnàythchincáctácvthưng dùng nhưxĩamànhình(clrscr()),nhpmtchuikýtt bàn phím (gets()),tínhcănbchai(sqrt()), màchươngtrìnhđưcvitcĩ thsdngmàkhơngphivitli. Tptinđitưngđưctorabitrìnhbiêndchskthpvimã đitưngcacáchàmthưvinđtonêntptinthcthi.Quá trìnhnày đưc gilà liênkt( linking ), đưc thc hin bi mt chươngtrìnhgilàbliênkt( linker ). 3.4.Thcthichươngtrình 3/124
  4. GiáotrìnhPPlptrình TT.CơngNghThơngTin Khichươngtrìnhngunđưcbiêndchvàliênktđtonêntp tinthcthi(cĩphnphânloi.exe),nĩcĩththcthitrênmáy tínhtidunhchthng. Nuchươngtrìnhhotđngkhơngđúngnhưyêucu,vnđcĩ thlàdolilptrình.Trongtrưnghpnày,chnh sa chương trìnhngun,biêndchlivàliênktliđtonênphiênbnmi catptinchươngtrình. Quátrìnhbnbưcnàyđưclpđilplichođnkhitptinthc thithchinđúngyêucucabàitốn. 4.KhosátmtchươngtrìnhC/C++đơngin Kho sát mt chương trình đơn gin dùng đ xut ra màn hình dịngchHelloWorld! //myfirstprograminC/C++ #include #include intmain() { cout 4/124
  5. GiáotrìnhPPlptrình TT.CơngNghThơngTin Cáclnhbtđubngdu#đưcdùngchocácchthtinxlý (preprocessor ).Trongvídnày,câulnh #include báochotrình biêndchbitcnphigpthưvin iostream.hlàtptinheader chuncaC/C++,chacácđnhnghĩavnhpvàxut. int main() ðnhnghĩahàm main(). Hàmmain()làđimmàttccácchương trìnhC/C++btđuthchin.Nĩkhơngphthucvàovtríca hàm,nidungcanĩluơnđưcthchinđutiênkhi chương trìnhthcthi.MtchươngtrìnhC/C++đuphitntimthàm main().Hàmmain()cĩthcĩhockhơngcĩthams.Nidung cahàmmain()tipngaysauphnkhaibáochínhthcđưcđt trongcpdungoc{}. cout << "Hello World!"; ðâylàmtlnhnmtrongphnthâncahàmmain. cout làmt dịng( stream )xutchuntrongC/C++đưcđnhnghĩatrongthư vin iostream.h .Khidịnglnhnàyđưcthcthi,ktqulàchui "HelloWorld!"đưcxutramànhình.Dịnglnhđưcktthúc bngduchmphy(;). getch(); ðâylàmthàmthưvindùngđchnhpmtkýttbànphím. return 0; Lnh return kt thúc hàm main và tr v mã đi sau nĩ, trong trưnghpnày là0. ðây là mtkt thúc bìnhthưng ca mt chươngtrìnhkhơngcĩlitrongquátrìnhthchin. Chươngtrìnhtrêncĩthvitlinhưsau: intmain(){cout<<"HelloWorld!";getch();return0;} cũngchocùngmtktqu. 5/124
  6. GiáotrìnhPPlptrình TT.CơngNghThơngTin 5.Cácchúthích( comments ) Cácchúthíchđưccáclptrìnhviênsdngđghichúhaymơt trongcácphncachươngtrình.TrongC/C++cĩhaicáchđchú thích: Chúthíchdịng:dùngcpdu//.Tvtrí//đncuidịngđưc xemlàchúthích Chú thích khi (chú thích trên nhiu dịng) dùng cp /* */. Nhnggìnmgiacpdunàyđưcxemlàchúthích. Víd: /* MysecondprograminC/C++withmorecomments Author:Noviceprogrammer Date:01/01/2008 */ #include #include intmain() { cout<<"HelloWorld!"; //outputHelloWorld! cout<<"IhateC/C++."; //outputIhateC/C++. getch(); return0; } Kt quxutcachươngtrìnhlà: HelloWorld!IhateC/C++. 6/124
  7. GiáotrìnhPPlptrình TT.CơngNghThơngTin 6.CutrúccamtchươngtrìnhC/C++ CutrúcmtchươngtrìnhC/C++baogmcácthànhphn như: Cácchthtinxlý,khaibáobintồncc,chươngtrìnhchính (hàmmain), Khosátchươngtrìnhsau: /*fact.c Phnnàythưngdùngđmơ Purpose:printsthefactorialsof thenumbersfrom0through10 tmcđínhchươngtrình,tác Author:Mr.Beginner gi,ngàyvit, (Phnkhơng Date:01/01/2008 btbuc) */ #include Khaibáocáctptinthưvin Khaibáoprototypecacác intfactorial(intn); hàmtto intmain() { inti; for(i=0;i<=10;i++) Hàmchínhcachươngtrình cout<<i<<“!=“<<factorial(i); return0; } /*Thisfunctioncomputesthe factorialofitsparameter,returningit*/ intfactorial(intn) { inti,product; product=1; ðnhnghĩacáchàmdongưi for(i=2;i<=n;i++)prod*=i; dùngtxâydng returnproduct; } 7/124
  8. GiáotrìnhPPlptrình TT.CơngNghThơngTin 7.Cáctptinthưvinthơngdng ðâylàcáctptinchađnhnghĩacáchàmthơngdng khi lp trìnhC/C++.Munsdngcáchàmtrongcáctptinheadernày thìphikhaibáo#include phnđucachương trình,viFileName.hlàtêntptinthưvin.Cáctptinthưvin thơngdnggm: stdio.h (C), iostream.h (C++) Tp tin đnh nghĩa các hàm vào/ra chun (standard input/output) gm các hàm xut d liu (printf())/cout),nhpgiátrchobin(scanf())/cin),nhnkýtt bànphím(getc()),inkýtramànhình(putc()),nhpmtchuiký ttbàmphím(gets()),xutchuikýtramànhình(puts()),xĩa vùngđmbànphím(fflush()),fopen(),fclose(),fread(), fwrite(), getchar(),putchar(), conio.h :TptinđnhnghĩacáchàmvàoratrongchđDOS (DOSconsole)gmcáchàmclrscr(),getch(),getche(),getpass(), cgets(),cputs(),putch(),clreol(), math.h: Tptinđnhnghĩacáchàmtốnhcgmcáchàmabs(), sqrt(),log(),log10(),sin(),cos(),tan(),acos(),asin(),atan(),pow(), exp(), alloc.h :Tptinđnhnghĩacáchàmliênquanđnvicqunlýb nhgmcáchàmcalloc(),realloc(),malloc(),free(),farmalloc(), farcalloc(),farfree(), io.h :Tptinđnhnghĩacáchàmvàoracpthpgmcác hàm open(),_open(),read(),_read(),close(),_close(),creat(),_creat(), creatnew(),eof(),filelength(),lock(), 8/124
  9. GiáotrìnhPPlptrình TT.CơngNghThơngTin Chương2 BIUTHC (Expressions) Biuthcđưctothànhtnhngthànhtnhưdliuvàtốnt. Dliucĩthchatrongbinhochng.Tốnttrongcácngơn nglptrìnhcĩcùngýnghĩanhưtrongtốnhc.Cĩnhiuloi tốntnhưtốntgán(=),tốntshc(+*/%),tốntquan h(== >=!=),tốntlunlý(&&||!), 1.Kiudliu( datatypes ) C/C++cĩnămkiudliucơs:kýt( char ),snguyên( int ),s thc( float ),sthccĩđchínhxácgpđơi( double ),vàkiuvơ đnh( void ).Ttcnhngkiudliukhácđudatrên5kiucơ snày.Kíchthưcvàphmvicanhngkiudliunàycĩth thayđitùytheoloiCPUvàtrìnhbiêndch. Kiu char đưc dùng đ gi các giá tr ca b mã ASCII (Amercican Standard Code for Information Interchange). Kiu charchim1bytebnh. Kíchthưccakiuintlà16bits(2bytes)trênmơitrưng16bit nhưDOS,Windows3.1.Mơitrưng32bitnhưWindows95,kích thưc kiu int là 32 bits (4 bytes). Nĩi chung, tùy thuc mơi trưng,kíchthưccakiuintcĩthkhácnhau. ChunCchraphmvitithiucakiudliusthc( float, double )là1E37đn1E+37. Kiuvoiddùngđkhaibáohàmkhơngtrvgiátrhoctonên cáccontrtngquát( genericpointers ). Ngoitrkiuvoid,cáckiudliucơscĩthcĩcáctnhư signed,unsigned,long,shortđitrưcnĩ.Cáctnàylàmthayđi phmvitithiumikiucơscĩthcha.Bngsautrìnhbày ttccáckthphplcakiudliuvicácttrên. 9/124
  10. GiáotrìnhPPlptrình TT.CơngNghThơngTin Kíchthưc Kiudliu Phmvitithiu bngbits char 8 127to127 unsignedchar 8 0to255 signedchar 8 127to127 int 16or32 32,767to32,767 unsignedint 16or32 0to65,535 signedint 16or32 gingnhưint shortinthocshort 16 32,767to32,767 unsignedshortint 16 0to65,535 signedshortint 16 gingnhưshortint longinthoclong 32 2,147,483,647to2,147,483,647 signedlongint 32 gingnhưlongint unsignedlongint 32 0to4,294,967,295 float 32 ðchínhxáclà6kýs double 64 ðchínhxáclà10kýs longdouble 80 ðchínhxáclà10kýs 2.Cácđnhdanh( Identifiernames ) Trong C/C++, tên ca các bin, hng, hàm, đưc gi là đnh danh.Nhngđnhdanhnàycĩthlà1hocnhiukýt.Kýtđu tiênphilàmtchcáihocdu_( underscore ),nhngkýttheo sauphilàchcái,chs,hocdu_.Sauđâylà nhng đnh danhđúngvàsai: ðúng Sai count 1count test23 hi!there high_balance high balance C/C++phânbitkýtHOAvàthưng.Vìvy,count,Count,và COUNTlà3danhđnhkhácnhau. 10/124
  11. GiáotrìnhPPlptrình TT.CơngNghThơngTin ðnhdanhkhơngđưctrùngvicáctkhĩa( keywords )vàkhơng nêncĩcùngtênnhưcáchàmthưvincaC/C++. 3.Tkhĩa( keywords ) Lànhngtđãđưcdànhriêngbingơnnglptrìnhchonhng mcđíchriêngcanĩ.Khơngđưcdùngtkhĩađđttêncho nhngđnhdanhnhưbin,hng,hàm, Ttccáctkhĩatrong C/C++đulàchthưng( lowercase ).Sauđâylàdanhsáchcáct khĩacaC/C++: auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while 4.Bin( variables ) Mtbinlàđnhdanhcamtvùngtrongbnhdùngđgimt giátrmàcĩthbthayđibichươngtrình.Tt c bin phi đưckhaibáotrưckhiđưcsdng.Dngkhaibáobintng quátlà: type variableNames; type :philàmttrongcáckiudliuhpl. variableNames :têncamthaynhiubin phâncáchnhaubi duphy. Ngồira,tacĩthvakhaibáovakhitogiátrbanđucho cácbindùngcúphápsau: type varName1=value, , varName_n=value; Víd: inti,j;//khaibáo2bini,jkiuint //khaibáobabinday,monthvàyearkiushortint shortday,month,year; 11/124
  12. GiáotrìnhPPlptrình TT.CơngNghThơngTin charch;//khaibáobinchkiukýt //khaibao4bienkieufloat,gánaveragegiátr0 floatmark1,mark2,mark3,average=0; Lưuý:Khikhaibáobinnukhơngcungcpgiátrkhitothìgiátr cabinlàchưaxácđnh.Dođĩ,vicdùngnhngbinnàytrongcác biuthclàvơnghĩa. Binđưckhaibáotibanơi:bêntronghàm,trong đnh nghĩa thamscahàm,vàbênngồittchàm.Nhngbinnàyđưc gilnlưtlàbinccb,cácthamshìnhthc,vàbintồncc. 4.1.Binccb( localvariables ) Nhngbinđưckhaibáobêntrongmthàmgilàbinccb. Cácbinccbchđưcthamchiuđnchbinhnglnhnm trongkhi( block )cĩkhaibáobin.Mtkhibtđuvidu{và ktthúcvidu}. Binccbchtntitrongkhikhichanĩđangthcthivàb hykhikhichanĩthcthixong. Víd:Xemxéthaihàmsau: voidfunc1(void) { intx; x=10; } voidfunc2(void) { intx; x=199; } Binnguyênxđưckhaibáo2ln,mttronghàmfunc1()vàmt tronghàmfunc2().Binxtrongfunc1()khơngcĩquanhgìvi binxtrongfunc2()bivìmixchtntitrongkhichanĩ. 4.2.Cácthamshìnhthc( formalparameters ) 12/124
  13. GiáotrìnhPPlptrình TT.CơngNghThơngTin Numthàmcĩnhncácđistruynvàohàmthìnĩphikhai báo các bin đ nhn giá tr ca các đi s khi hàm đưc gi. Nhng bin này gi là các tham s hình thc. Nhng bin này đưcđixgingnhưcácbinccbkhácđưckhaibáotrong hàm.Xemxétvídsau: intsum(intfrom,intto) { inttotal=0; for(inti=from;i voidincrease(); voiddecrease(); intgVar=100; voidmain() { cout<<“ValueofgVar=“<<gVar; increase(); cout<<“Afterincreased,gVar=“<<gVar; decrease(); cout<<“Afterdecreased,gVar=“<<gVar; } voidincrease() { gVar=gVar+1;} voiddecrease() { gVar=gVar1;} 13/124
  14. GiáotrìnhPPlptrình TT.CơngNghThơngTin Saukhithcthichươngtrìnhtrên,ktquxuttrênmànhìnhlà: ValueofgVar=100 Afterincreased,gVar=101; Afterdecreased,gVar=100; 5.Tkhĩaconst Giátrcabinthayđitrongsutquátrìnhthcthichươngtrình. ðgiátrcabinkhơngbthayđi,tađttrưckhaibáobint khĩaconst.Tkhibinđãcĩgiátr,giátrnàyskhơngbaogi bthayđibibtkỳlnhnàotrongchươngtrình.Thơngthưng tadùngchHOAđđttênchonhngbinnày. Víd:khaibáohngnguyênMAXcĩgiátr100 constintMAX=200; 6.Hng( constants ) Hng là nhng giá tr c đnh ( fixed values ) mà chương trình khơngththayđi.Btkỳkiudliunàocũngcĩhngtương ng.Hngcịnđưcgilàliterals. Hngkýtđưcràoquanhbicpdunháyđơn.Víd'a'và'%' lànhnghngkýt. Hngnguyênlànhngsmàkhơngcĩphnthpphân.Víd100 và100lànhnghngnguyên. Hngsthcyêucumtduchmthpphânphâncách phn nguyênviphnthpphân.Víd123.45làmthngsthc. Vídvcáchvitcáclaihngs: Kiudliu Cácvídvhng Ghichú int 1,123,21000,234 longint 35000L,34l CĩkýtlhocLcui unsignedint 10000U,987u,40000U CĩkýtuhocUcui float 123.23f,4.34e3F CĩkýtfhocFcui double 123.23,1.0,0.9876324 longdouble 1001.2L CĩkýtlhocLcui 14/124
  15. GiáotrìnhPPlptrình TT.CơngNghThơngTin 7.Hngchuikýt( stringconstants ) C/C++cungcpmtlaihngkhácgilàchui.Mtchuilàmt tpcáckýtđưcbaoquanhbicpdunháyđơi.Víd,"Thisis astring"làmtchui. Lưuýphânbithngchuivàhngkýt.Mthngkýtlàmt kýtbaoquanhbicpdunháyđơn.Dođĩ,'a'làhngkýt nhưng"a"làhngchui. 8.Hngkýtđcbit( escapesequences ) C/C++cĩnhnghngkýtđcbitmàkhơngthbiudinnhư nhnghngkýtthơngthưng.Nhnghngnàycịngilàescape sequences.Sauđâylàdanhsáchcáchngđcbitđĩ: Mã Ýnghĩa \b Lùisangtrái1kýt \f Vđudịng \n Sangdịngmi \r Xungdịng \t Tabtheochiungang \" Dunháyđơi \' Dunháyđơn \0 Null \\ Du\ \v Tabtheochiuđng \a Cnhbáo \? Duhi \N Hngbátphân(viNlàmthngbátphân) \xN Hngthplcphân(viNlàmthngthplcphân) Xemxétvídsau: \n #include Enter voidmain(void) { Items: cout<<"Items:\n"; Item1 cout<<”\tItem1\n”; output cout<<”\tItem2\n”; Item2 cout<<”\tItem3\n”; Item3 } tab \t 15/124
  16. GiáotrìnhPPlptrình TT.CơngNghThơngTin 9.Tốnt( operators ) C/C++ cĩ bn loi tốn t: s hc ( arithmetic ), quan h (relational ),lunlý( logical ),vàbitwise. 9.1.Tốntgán( assignmentoperator ) Dngtngquátcatốntgánlà variableName = expression; variableName :Tênbin expression :Biuthc Lưu ý, phía bên trái du bng phi là mt bin hay con tr và khơngthlàhàmhayhng. Víd: total=a+b+c+d; 9.2.Chuynđikiutrongcâulnhgán Khinhngbincamtkiukthpvinhngbincamtkiu khácthìmtschuynđikiuxyra.ðivicâulnhgán,giá trcabiuthcbênphidubngđưctđngchuyn thành kiudliucabinbêntráidubng. Víd: inti=100; doubled=123.456; Nuthcthilnh i=d; thìiscĩgiátrlà123vì123.456stđngchuyn thành s nguyênnênbctbphnthpphân.Schuynđikiunàygi làchuynđikiubmtmátthơngtin. 16/124
  17. GiáotrìnhPPlptrình TT.CơngNghThơngTin Nuthcthilnh d=i; thìdscĩgiátrlà100.0.Schuynđikiunàygilàchuyn đikiukhơngmtmátthơngtin. Tĩmli,khichuynđikiutkiudliucĩmingiátrnh sangkiudliucĩmingiátrlnhơnthìvicchuynđikiu nàylàantồnvìkhơngbmtmátthơngtin.Thttăngdnt kiudliucĩmingiátrnhđnkiudliucĩmingiátrln làchar int long float double. Khichuynđikiudliucĩmingiátrlnsangkiudliu cĩmingiátrnhhơnthìvicchuynđikiunàylàkhơngan tồnvìcĩthmtmátthơngtin.Thtgimdntkiudliu cĩ min giá tr ln đn kiu d liu cĩ min giá tr nh là double float long int char. Víd: inti=100; longl=200; floatf=123.456f; doubled=1.23456789; Khosátcáclnhgánsau: intn;longm;floatp;doubleq; n=i+l+f+d;//(1) m=i+l+f+d;//(2) p=i+l+f+d;//(3) q=i+l+f+d;//(4) 17/124
  18. GiáotrìnhPPlptrình TT.CơngNghThơngTin (1) i l f d 100 200 123.456 1.23456789 double double double double 100.0 200.0 123.456 1. 23456789 424.69056789 int ncĩgiátrlà424 (3) i l f d 100 200 123.456 1.23456789 double double double double 100.0 200.0 123.456 1.23456789 424.69056789 float pcĩgiátrlà424.690567 18/124
  19. GiáotrìnhPPlptrình TT.CơngNghThơngTin (4) i l f d 100 200 123.456 1.23456 789 double double double double 100.0 200.0 123.456 1.23456789 424.69056789 qcĩgiátrlà424.69056789 Ktlun:Trưnghp(1)và(3):mtmátthơngtin.Trưnghp (4)khơngmtmátthơngtin. 10.Cáctốntshc( arithmeticoperators ) Cáctốntshcgm:+(cng),(tr),*(nhân),/(chia),và% (lyphndưcaphépchianguyên). Khitsvàmuscaphépchialàsnguyênthìđĩlàphépchia nguyênnênphndưcaphépchianguyênbctb.Víd,5/2thì ktqulà2. Tốn t ly phn dư % ( modulus operator ) ch áp dng vi s nguyênvàtrvphndư.Víd,7%2thìktqulà1. 11.Tốnt++và( incrementanddecrementoperators ) C/C++cĩhaitốntrtthưngdùnglà++và.Tốnt++cng 1đntốnhngcanĩvàtốntthìtr1ttốnhngcanĩ. 19/124
  20. GiáotrìnhPPlptrình TT.CơngNghThơngTin Víd: x++;//tuongduongx=x+1; x;//tuongduongx=x1; Tốn t ++ và cĩ th đt phía trưc ( prefix ) hoc phía sau (postfix )tốnhng.Skhácnhauca2trưnghpnàylàkhitốn t++vàđngtrưctốnhng,hànhđngtăngvàgimtrêntốn hngđưcthchintrưc,sauđĩgiátrmicatốn hng s dùngđthamgiavàovicđnhtrcabiuthc. Víd:Khosátđonlnhsau intx=100; intn,m; Nuthchinlnh: n=++x+1;//nscĩgiátrlà102(1) Nuthchinlnh: n=x+++1;//nscĩgiátrlà101(2) Saukhilnh(1)hay(2)đưcthcthithìxcĩgiátrlà101 Tươngt,nuthchinlnh: m=x+1;//nscĩgiátrlà100(3) Nuthchinlnh: m=x+1;//nscĩgiátr101(4) Saukhilnh(3)hay(4)đưcthcthithìxcĩgiátrlà99 Khicáctốntshcxuthintrongmtbiuthc,thìđưutiên thchinnhưsau: 20/124
  21. GiáotrìnhPPlptrình TT.CơngNghThơngTin Caonht ++–– –(duâm) */% Thpnht +– Nhngtốnttrêncùnghàngthìcĩcùngđưutiên.Khibiuthc cĩnhiutốntcĩcùngđưutiênthìthtđnhtrbiuthclà ttráisangphi. 12.Tốntquanh&lunlý( relational&logicaloperators ) Tốntquanhliênquanđnsquanhcahaigiátr.Tốnt lunlýliênquanđnsniktcanhngquanh. Cácbiuthcmàdùngtốntquanhvàtốntlunlýđưc đnhtrlàtrue(đúng)hocfalse(sai).TrongC/C++,giátr0( zero ) đưcxemlàfalsevàgiátrkhác0( nonzero )đưcxemlàtrue. Cáctốntquanhgm: Tốnt Ýnghĩa > Lnhơn >= Lnhơnhaybng =500//false Cáctốntlunlý: 21/124
  22. GiáotrìnhPPlptrình TT.CơngNghThơngTin Operator Action Ýnghĩa && AND Và || OR Hoc(cĩ2du|) ! NOT Phđnh Bngchântrcacáctốntlunlý p q p&&q p||q !p 0 0 0 0 1 0 1 0 1 1 1 1 1 1 0 1 0 0 1 0 Chaitốntquanhvàlunlýcĩđưutiênthphơntốnts hc.Trongmtbiuthccĩthcĩnhiuloitốnt,thtđ đnhtrbiuthcdavàođưutiêncatốnt.ðthayđith tđnhtrtrongmtbiuthc,dùngcpdungocđơn ()như trongcácbiuthcshc. ðưutiêncatốntquanhvàlunlý: Caonht ! >>= 9&&8!=7)||(6 4)đưcđnhtrnhưsau: (10>9&&8!=7)&&(6 4) 1 1 0 1 1 1 1 Ktquđnhtrbiuthctrênlà1(true). 22/124
  23. GiáotrìnhPPlptrình TT.CơngNghThơngTin 13.Tốnt? (?operator ) Tốnt?làmttốntbangơidođĩcĩbatốnhng.Dngtng quátcatốnt?là: Exp1 ? Exp2 : Exp3; Exp1,Exp2,vàExp3làcácbiuthc. Tốnt?làmvicnhưsau:ðutiênExp1đưcđnhtr.Nukt qulàtruethìExp2đưcđnhtrvàgiátrcanĩtrthànhgiátr cacbiuthc.NuExp1làfalsethìExp3đưcđnhtrvàgiá trcanĩtrthànhgiátrcacbiuthc. Víd: x=10; y=x>9?100*x:200*x; Vìx>9làtruenêngiátrcabiuthcslà1000.Vyyscĩgiá trlà1000 14.Tốntsizeof sizeoflàtốntmtngơimàtrvsbytecakiudliuchim trongbnh.Mimơitrưng(hđiuhành,loiCPU, )dùngs bytekhácnhauchomikiudliu.Dngtngquátcatốnt sizeof sizeof(operand) operand :cĩthlàtênkiudliu,bin,biuthc. Vídsauchobitsbytecamikiudliu #include voidmain(void) { cout<<"Sizeofdatatypes:\n"; cout<<"Sizeofchar="<<sizeof(char)<<“bytes\n”; cout<<"Sizeofunsignedchar="<<sizeof(unsignedchar)<<“bytes\n”; cout<<"Sizeofsignedchar="<<sizeof(signedchar)<<“bytes\n”; cout<<"Sizeofint="<<sizeof(int)<<“bytes\n”; cout<<"Sizeofunsignedint="<<sizeof(unsignedint)<<“bytes\n”; cout<<"Sizeofsignedint="<<sizeof(signedint)<<“bytes\n”; cout<<"Sizeofshort="<<sizeof(short)<<“bytes\n”; cout<<"Sizeofunsignedshort="<<sizeof(unsignedshort)<<“bytes\n”; 23/124
  24. GiáotrìnhPPlptrình TT.CơngNghThơngTin cout<<"Sizeofsignedshort="<<sizeof(signedshort)<<“bytes\n”; cout<<"Sizeoflong="<<sizeof(long)<<“bytes\n”; cout<<"Sizeofunsignedlong="<<sizeof(unsignedlong)<<“bytes\n”; cout<<"Sizeofsignedlong="<<sizeof(signedlong)<<“bytes\n”; cout<<"Sizeoffloat="<<sizeof(float)<<“bytes\n”; cout<<"Sizeofdouble="<<sizeof(double)<<“bytes\n”; cout<<"Sizeoflongdouble="<<sizeof(longdouble)<<“bytes\n”; } Ktqukhithchinchươngtrìnhtrên: 15.Tốntduphy( commaoperator ) Tốntcommabuccácbiuthccùngvinhau.Biuthcbên tráicatốntcommaluơnluơnđưcđnhtrnhưvoid,biuthc bênphiđưcđnhtrvàtrthànhgiátrcabiuthc.Dngtng quátcatốntcomma: (exp_1, exp_2, , exp_n) Cácbiuthcđưcđnhtrttráisangphi,biuthccuicùng (exp_n)đưcđnhtrvàtrthànhgiátrcatồnbbiuthc. Víd: x=(y=3,y+1); ðutiênyđưcgángiátr3vàrixđưcgángiátriy+1là4. 24/124
  25. GiáotrìnhPPlptrình TT.CơngNghThơngTin Bngtĩmttđưutiêncacáctốnt Caonht ()[]>. !~++––(type)*&sizeof */% + > >= ==!= & ^ | && || ?: =+==*=/=%= Thpnht , 25/124
  26. GiáotrìnhPPlptrình TT.CơngNghThơngTin 16.Biuthc( expressions ) MtbiuthctrongC/C++làskthpcacácthànhphnnhư tốnt,hng,bin,vàhàmcĩtrvgiátr. Thtđnhtrcabiuthctùythucvàođưutiêncacáctốn t.Dođĩ,đvitbiuthcrõràngvàthchinvicđnhtrđúng theoyêucucalptrìnhviêntanêndùngcpdungoctrịn() đbaoquanhcácbiuthcconcabiuthc. Víd:ðnhtrbiuthcsau:result=x*yz%10+w/2; result=x*yz%10+w/2 1 2 3 4 5 6 ðvitlibiuthctrênrõràngdđcvàthchinnhưmong mun,tavit: result=(x*y)–(z%10)+(w/2); 17.Chuynđikiutrongcácbiuthc Khicáchngvàbincanhngkiukhácnhautntitrongmt biu thc, giá tr ca chúng phi đưc chuyn thành cùng kiu trưckhicácphéptốngiachúngđưcthchin.Trìnhbiêndch sthchinvicchuynkiu( convert )tđngđnkiucatốn hngcĩkiulnnht.Vicchuynkiunàygilàthăngcpkiu (typepromotion ). Víd: charch; 26/124
  27. GiáotrìnhPPlptrình TT.CơngNghThơngTin inti; floatf; doubled; result=(ch/i)+(f*d)–(f+i); int double float int double float double double double 18.Épkiu( casting ) Castingdùngđépmtbiuthcthànhmtkiutheoýmunca lptrìnhviên.Dngtngquátcacastinglà (type)expression hoc type(expression) type :làtênmtkiudliuhpl. Víd: floatresult; result=7/2; Do7/2làphépchianguyênnênktqukhơngcĩphnthpphân. Saulnhtrênresultcĩgiátrlà3. ðphépchiatrênlàphépchiasthcdùrngtốnhngcĩkiu nguyêntathchinépkiutshocmushocchai.Các cáchvitsauschocùngktqa: 27/124
  28. GiáotrìnhPPlptrình TT.CơngNghThơngTin result=(float)7/2; result=7/(float)2; result=(float)7/(float)2; result=float(7)/float(2); Nhưvy,trongcáclnhtrên,tađãépmthoc2tốnhngđn kiu float. Do đĩ, đ đnh tr biu thc, tốn hng kia s đưc thăngcp( typepromotion )thànhkiufloattươngngđthchin phépchiasauđĩ.Ktquca4lnhtrênlàtươngđươngvàresult scĩgiátrlà3.5 19.Dngvitttcacâulnhgán( shorthandassignments ) Cácdngvitttcacâulnhgánvicáctốntshcgm+=, =,*=,/=,và%=.Nhnglnhcĩdng: variable = variable operator expression; variable :Tênbin operator :Tốntshc(+,,*,/,%) expression :Biuthc cĩthđưcvitdưidngngngnhơnnhưsau: variable operator= expression; Víd: x=x+10; x+=10; x=x–10; x=10; x=x*10; x*=10; x=x/10; x/=10; x=x%10; x%=10; 28/124
  29. GiáotrìnhPPlptrình TT.CơngNghThơngTin BàitpChương2 1. Nhp bán kính đưng trịn r. Tính và xut chu vi, din tích đưngtrịntươngng. HD:cv=2* π*rvàdt= π*r 2 2.Nhpcnha.Tínhvàxutchuvi,dintíchhìnhvuơng. HD:cv=4*avàdt=a 2 3.Nhpcnha,b.Tínhvàxutchuvi,dintíchhìnhchnht. HD:cv=2*(a+b)vàdt=a*b 4.Nhpcnha,h1,h2.Tínhvàxutchuvi,dintíchhìnhthoi. HD:cv=4*avàdt=1.0/2*h1*h2 5.Nhpcnha,b,c,d,h.Tínhvàxutchuvi,dintíchhìnhthang. HD:cv=(a+b+c+d)vàdt=1.0/2*h*(a+b) 6.Nhpcnha,b,c.Tínhvàxutchuvi,dintíchhìnhtamgiác. HD:cv=a+b+cvàdt= p (* p − a (*) p − b (*) p − c) vip=cv/2 7.Nhpvàohaisnguyêndươnga,b.Tínhvàxuttng,hiu,tích, thương. 8.Nhp2snguyêna,b.Tínhvàxuta b. HD:dùnghàm pow(x,y)xy 9.Nhp1sn.Tínhvàxutgiátrtuytđi. HD:dùnghàm abs(a) |a| 10.Nhp1sn.Tínhvàxutcănbchaican. HD:dùnghàm sqrt(a) a 11.Nhp1gĩcx.Tínhvàxutsinx,cosx,tgx,cotgx. HD:cáchàmsin,cos,tanchtínhtheođơnvradiannênchúngta phi đi t đ x sang đ radian t như sau: t=x* π/180 => sinx=sin(t),cosx=cos(t),tgx=tan(t),cotgx=1/tgx 12.Nhptođ2đimA(x A,y A), B(x B,y B).Tínhvàxutđdài đonAB. 29/124
  30. GiáotrìnhPPlptrình TT.CơngNghThơngTin − 2 + − 2 HD:|AB|=d AB = (xB x A ) (y B y A ) ) 13.Nhptođ2đimA(x A,y A), B(x B,y B).Tínhhsgĩcca đưngthngđiquahaiđimđĩtheocơngthc: Hsgĩc=(y By A)/(x Bx A) 14.Vitchươngtrìnhnhpvàosnguyênnvàsthcx.Tínhvà inrabiuthc A = (x 2 + x + )1 n + (x 2 − x + )1 n 15. Nhp vào s giây bt kỳ t. Tính và xut ra dng Gi:Phút:Giây Víd:Nhp 3750 thìxutra 1:2:30AM 16.Nhp 51100 thìxutra 2:11:40PM HD: hour=(t/3600)%24 minute=(t%3600)/60 second=(t%3600)%60 17.Vitchươngtrìnhnhpvàongày,tháng,năm.Inrangàytháng nămtheodngdd/mm/yy.(dd:ngày,mm:tháng,yy:năm.Víd: 20/11/99) 18.Vitchươngtrìnhtínhlogaxvia,xlàcácsthcnhpvàot bànphím,vàx>0,a>0,a!=1.(dùnglogax=lnx/lna) 19.Vitchươngtrìnhnhpvàomtkýt: InramãASCIIcakýtđĩ. Inrakýtktipcanĩ. 20.VitchươngtrìnhnhpvàođimbamơnTốn,Lý,Hĩaca mthcsinh.Inrađimtrungbìnhcahcsinhđĩvihaisl thpphân. 21.Vitchươngtrìnhđongưcmtsnguyêndươngcĩđúng3 kýs. 30/124
  31. GiáotrìnhPPlptrình TT.CơngNghThơngTin Chương3 CÁCCUTRÚCðIUKHIN (Controlstructures) 1.GIITHIU Ttccácchươngtrìnhmáytínhdùđơnginhayphctpđu đưcvitbngcáchsdngcáccutrúcđiukhin.Cĩ3loicu trúcđiukhincơbnlàcutrúctunt( sequence ),cutrúcla chn( selection ),vàcutrúclp( repetitionorloop ).Cáccutrúc nàyđiukhinthtthcthicáclnhcachươngtrình. Cutrúctunt:thchincáclnhtheothtttrênxungdưi. Cutrúclachn:davàoktqucabiuthcđiukin.Tùy theosđnhtrcabiuthcnàymànhnglnhtương ng s đưcthchin.Cáccutrúclachngmcutrúcif,switch. Cutrúclp:lpli1haynhiulnhchođnkhibiuthcđiu kinlàsai.Cáccutrúclpgmfor,while,do while. Tuynhiên,thtthchincáclnhcachươngtrìnhcịnbchi phibicáclnhnhynhưcontinue,break,goto. Lnh( statement ):mtbiuthcktthúcbi1duchmphygi là1lnh. Víd: inta,b,c; a=10; a++; Khilnh( block ):mthaynhiulnhđưcbaoquanhbicpdu {}đưcgilàmtkhilnh.Vmtcúpháp,khi lnh tương đương1câulnhđơn.Dođĩnơiđâuxuthin1lnhthìnơiđĩcĩ thxuthin1khilnh. Víd: if(a<b) { temp=a; a=b; b=temp; } 31/124
  32. GiáotrìnhPPlptrình TT.CơngNghThơngTin 2.CUTRÚCLACHNIF Cutrúcifcĩcácdngtngquátsau: Dng1 : if(expression) statement ; expression :Biuthclunlý(cĩgiátrlàtruehayfalse) statement :Câulnh Lưuđcúpháp: false expression true statement Exit Ý nghĩa: ðu tiên expression đưcđnhtr.Nuktqulàtrue ( #include intmain() { inta; cout >a; if(a>=0) cout<<a<<"isapositive.”; getch(); return0; } 32/124
  33. GiáotrìnhPPlptrình TT.CơngNghThơngTin Gii thích: − Nunhpmtsa>=0thìcâulnh cout 0)thì statement1 đưcthcthi.Ngưcli,thì statement2 đưc thcthi. Víd1 :Vitchươngtrìnhnhpvàomtsnguyêna.Inramàn hìnhktqukimtraalàsâmhaydương. 33/124
  34. GiáotrìnhPPlptrình TT.CơngNghThơngTin #include #include intmain() { inta; cout >a; if(a>=0) cout #include voidmain() { intm; cout >m; if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) cout<<"Month“<<m<<”has31days."; else if(m==4||m==6||m==9||m==11) cout<<"Month“<<m<<”has30days."; else if(m==2) cout<<"Month“<<m<<”has28or29days."; else cout<<"Thisisnotavalidmonth:”<<m; getch(); } Lưuý: 34/124
  35. GiáotrìnhPPlptrình TT.CơngNghThơngTin Tacĩthsdngcáccâulnhif elselngnhau.Trongtrưng hpif elselngnhauthì elseskthpviifgnnhtchưa cĩelse . Trongtrưnghpcâulnhif“bêntrong”khơngcĩelsethìphi vitnĩtrongcpdu{}(coinhưlàkhilnh)đtránhskt hpelseifsai. Víd: if(ch>='0'&&ch ='A'&&ch ='a'&&ch ='0'&&ch ='A'&&ch ='a'&&ch<='z') kind=smallLetter; else kind=specialLetter; 35/124
  36. GiáotrìnhPPlptrình TT.CơngNghThơngTin 3.CUTRÚCLACHNswitch Cutrúcswitchlàmtcutrúclachncĩnhiunhánh.Khicĩ nhiuslachnthiđâylàcutrúcphùhpthay vìphidùng mtchuilnhif elselngnhau. Dngtngquátcacutrúcswitch: Cúpháp : switch(expression) { case value_1: statement_1; [break;] case value_n: statement_n; [break;] [default : statement;] } 36/124
  37. GiáotrìnhPPlptrình TT.CơngNghThơngTin Lưuđ: expression true expression statement_1 ==value_1? false true expression statement_2 ==value_2? false true expression statement_n ==value_n? false default: statement Exit 37/124
  38. GiáotrìnhPPlptrình TT.CơngNghThơngTin Giithích : − Trưchtchươngtrìnhsđnhtrca expression . − Nu giá tr ca expression bng value_1 thì thc hin statement_1 rithốt. − Nugiátrca expression khác value_1 thìsosánhvi value _2 ,nubng value_2 thìthchin statement_2 rithốt .,so sánhti value_n. − Nuttccácphépsosánhtrênđusaithìthchin statement catrưnghp default . Lưuý: − expression trong switch() phi cĩ kt qu là giá tr kiu s nguyên(int,char,long). − Cácgiátrsaucasephilàhngnguyên. − Khơngbtbucphicĩdefault. − Thơngthưngmicasecĩ1câulnhbreak.Khithchinlnh tương ng ca case cĩ giá tr bng expression , chương trình thchinlnhbreakđthốtkhicutrúcswitch. Víd1 : Nhpvàomtsnguyên,chiasnguyênnàycho2ly phndư.Kimtranuphndưbng0thìinrathơngbáo“làs chn”,nusdưbng1thìinthơngbáo“làsl”. #include #include voidmain() { clrscr(); intn,remainder; cout >n; remainder=(n%2); switch(remainder) { case 0: cout << n << ” is an even."; break; case1:cout<<n<<”isanodd.";break; } getch(); } 38/124
  39. GiáotrìnhPPlptrình TT.CơngNghThơngTin Víd2: Nhpvào2snguyênvà1phéptốn. − Nuphéptốnlà‘+’,‘‘,‘*’thìinraktqualàtng,hiu,tích ca2s. − Nuphéptốnlà‘/’thìkimtraxemsth2cĩkháckhơng haykhơng?Nukháckhơngthìinrathươngcachúng,ngưc lithìinrathơngbáo“Cannotdividebyzero!”. − #include #include intmain() { inta,b; charoperation; clrscr(); cout >a>>b; fflush(stdin );//Clearbuffer cout >operation; switch(operation) { case'+': cout<<a<<”+“<<b<<”=”<<a+b; break; case'': cout<<a<<”“<<b<<”=”<<ab; break; case'*': cout<<a<<”*“<<b<<”=”<<a*b; break; case'/': if(b!=0) cout<<a<<”/“<<b<<”=”<<(float)a/b; else cout<<"Cannotdividebyzero!"; break; } getch(); } 39/124
  40. GiáotrìnhPPlptrình TT.CơngNghThơngTin Víd3 : Yêucungưithchinchươngtrìnhnhpvàomts nguyên dươnglàthángtrongnămvàinrasngàycathángđĩ. Thángcĩ31ngày:1,3,5,7,8,10,12 Thángcĩ30ngày:4,6,9,11 Thángcĩ28hoc29ngày:2 Nunhpvàos 12thìinracâuthơngbáo“Thereisno monthlikethis.“. #include #include intmain() { intmonth; clrscr(); cout >month; switch(month) { case1: case3: case5: case7: case8: case10: case12: cout<<"Month”<<month<<”has31days."; break; case4: case6: case9: case11: cout<<"Month”<<month<<”has30days."; break; case2: cout<<"Month“<<month<<“has28or29days."; break; default: cout<<”Thereisnomonthlikethis.”; } getch(); } 40/124
  41. GiáotrìnhPPlptrình TT.CơngNghThơngTin 4.CÁCCUTRÚCLP(Loopstructures) Cutrúclpchophéplplinhiuln1câulnhhay1khilnh nàođĩchođnkhibiuthcđiukincịntha. 4.1.Cutrúcwhile Cutrúc while chophépthchin statement trongkhi expression vncịnđúng. Cúpháp : while(expression) statement; Lưuđcúpháp: false expression true statement Exit Bưc1: expression đưcđnhtr. Bưc2:Nuktqulàtruethìthchin statement riquayli bưc1. Bưc3:Nuktqulàfalsethìthốtkhivịnglpwhile. 41/124
  42. GiáotrìnhPPlptrình TT.CơngNghThơngTin Víd1:Vitchươngtrìnhtínhtngcácsnguyênt1tin. #include #include voidmain() { clrscr(); inti,n,sum; cout >n; i=1; sum=0; while(i #include voidmain() { inti; clrscr(); cout<<”Displatonetoten:"; i=1; while(i<=10) { cout<<setw(3)<<i; i++; } getch(); } Lưuý:vịnglpphiktthúcmtđimnàođĩ,vìvybêntrong vịnglpphicungcpmtcáchthcnàođĩđbuc expression trthànhfalsenukhơngthìslpvơtn.Trongvídtrêni++;là cáchthctăngbiniđđnkhii=11thìvịnglpktthúc. 42/124
  43. GiáotrìnhPPlptrình TT.CơngNghThơngTin 4.2.Cutrúclpdo while Cutrúclp do while gingnhưvịnglpwhile,dùngđlpli mt statement trong khi expression là true. statement luơn luơn đưcthchinítnht1ln. Cúpháp: do { statement; }while(expression); Lưuđ: statement true expression false Exit Bưc1: statement đưcthchin Bưc2: expression đưcđnhtr. Bưc3:Nu expression làtruethìquaylibưc1 Bưc4:Nu expression làfalsethìthốtkhido while. 43/124
  44. GiáotrìnhPPlptrình TT.CơngNghThơngTin Víd1 :Vitđonchươngtrìnhindãysnguyênt1đn10. #include #include voidmain() { inti; clrscr(); cout #include voidmain() { unsignedintn,i,sum; clrscr(); cout >n; sum=0; i=1; do { sum+=i; i++; }while(i<=n); cout<<”Sumfrom1to”<<n<<”=”<<sum; getch(); } 44/124
  45. GiáotrìnhPPlptrình TT.CơngNghThơngTin 4.3.Cutrúclpfor Chcnăngchínhcacutrúclpforlàlplimtđanlnhnào đĩ trong khi Exp2 cịnlàtrue.Cutrúclpforthưngsdng trongnhngchươngtrìnhmàslnlplimtđanlnhnàođĩ đưcbittrưc. Cúpháp : for(Exp1 ;Exp2;Exp3 ) statement; Cáchhotđngcavịng lpfornhưsau: Exp1 Bưc 1: Exp1 là biu thc khi to đưc thc hin. Thơng thưng nĩ gán giá tr khi to cho bin điu khin cu trúc for. Biu thc này ch false Exp2 đưcthchinch1ln. Bưc 2: Exp2 là biu thcđiukinđưcđnh true tr. Bưc 3: Nu giá tr là statement true thì statement s đưcthcthi, Exp3 đưc thcthi.Quaylibưc2 Bưc 4: Nu giá tr là Exp3 false thì thốt khi cu trúcfor. Lưuđcúpháp: Exit 45/124
  46. GiáotrìnhPPlptrình TT.CơngNghThơngTin Víd1: Vitchươngtrìnhtínhtngcacácsnguyênt1tin. #include #include voidmain() { inti,n,sum; cout >n; sum=0; for(i=1;i<=n;i++) sum+=i; cout<<”Sumfrom1to“<<n<<”is:”<<sum; getch(); } − C/C++chophépbiuthcđutiêntrongvịnglpforlàmt đnhnghĩabin.Vídtrongvịnglptrênthìicĩthđưcđnh nghĩabêntrongvịnglp: for( int i=1 ;i<=n;++i) sum+=i; − Btkỳbiuthcnàotrong3biuthccavịnglpforđucĩ thrng.Víd,xĩabiuthcđuvàbiuthccuichochúng tadnggingnhưvịnglpwhile: for(;i!=0;)statement; //tươngđươngviwhile(i!=0)statement; − Xĩattccácbiuthcchochúngtamtvịnglpvơtn. for(;;) //vịnglpvơhn statement; 46/124
  47. GiáotrìnhPPlptrình TT.CơngNghThơngTin 5.CÁCLNHRNHÁNHVÀLNHNHY 5.1.Lnhbreak Lnhbreakthưngdùngtrongphncasecacutrúc switch đ thốtkhicutrúcswitchsaukhicáclnhtươngngcacaseđã đưcthchin.Ngồira,trongcáccutrúclp,numunthốt khi1vịnglptcthìmàkhơngchchođnkhibiuthcđiu kin( conditionalexpression)cacutrúcđưcđnhtrlàfalse,ta dùnglnhbreak.Khibreakđưcthchinbêntrong1cutrúc lp,điukhin (controlflow) tđngnhyđnlnhđutiênngay saucutrúclpđĩ.Lnhbreakthưngliênđivimtcâulnhif trongnhngtrưnghpnày.Khơngsdnglnhbreakbênngồi cáccutrúclpnhưwhile,do while,forhaycutrúcswitch. Víd1: ðcvàomtmtkhungưidùngtiđaattemptsln for(i=0;i >passWord; if(check(passWord))//kimtramtkhuđúnghaysai break; //thốtkhivịnglp cout #include 47/124
  48. GiáotrìnhPPlptrình TT.CơngNghThơngTin voidmain() { intnum,sum=0; clrscr(); while(1) { cout >num; if(num >num; if(num>=0) sum+=num; }while(num>=0); 5.2.Lnhcontinue Lnhcontinuechđưcdùngtrongthâncáccutrúclpnhưfor, while,do while.Trongmilnlpcacáccutrúctrên,cáclnh trongthânvịnglpđưcthchinriđiukhinsquayvđu vịnglpchunbcholnlpktip.Tuynhiên,numunđiu khinquayvđuvịnglpngaylptcmàkhơngthchincác lnhcịnlicalnlphinhànhthìtadùngcâulnhcontinue. Câulnhcontinuethưngđikèmvi1câulnhif. Víd:mtvịnglpthchinđcmts,xlýnĩnhưngbqua nhngsâm,vàdngkhislà0,cĩthdingiinhưsau: do { cin>>num; if(num<0) continue ; //processnumhere }while(num!=0); 48/124
  49. GiáotrìnhPPlptrình TT.CơngNghThơngTin ðiunàytươngđươngvi: do { cin>>num; if(num>=0) { //processnumhere } }while(num!=0); − Mtbinthcavịnglpnàylàđđcchínhxácmts n ln cĩthđưcdingiinhưsau: for(i=0;i >num; if(num >num; if(num<0) continue ;//jumptoi++ //processnumhere } //etc } 49/124
  50. GiáotrìnhPPlptrình TT.CơngNghThơngTin BÀITPCHƯƠNG3 1. Nhp1sn>=0.Tínhvàxutcănbchaican. HD:dùnghàm sqrt(a)= a 2. Nhp vào s giây bt kỳ t>=0 . Tính và xut ra dng Gi:Phút:Giây Víd: Nhp 3750 thìxutra 1:2:30AM Nhp 51100 thìxutra 2:11:40PM HD: hour=(t/3600)%24 minute=(t%3600)/60 second=(t%3600)%60 3. Nhp3sthca,b,c.Tìmslnnht. 4. Nhpn.Kimtranlàschnhaysl. 5. Nhp2sa,b.Kimtraxemchúngcĩcùngduhaykhơng. 6. Nhpvàohaisnguyêndươnga,b.Sosánhgiátrcachúng (lnhơn,nhhơn,bng). 7. Giivàbinlunphươngtrìnhbc1:ax+b=0. 8. Giivàbinlunphươngtrìnhbc2:ax 2+bx+c=0. 9. Nhpvàothángt(vi1<=t<=12).Chobittthucqúy my trongnăm. 10. Nhpvàothángt(vi1<=t<=12).Chobitthángtcĩbaonhiêu ngày.Riêngtháng2thìphikimtranămnhun(Nămnhun lànămchiahtcho4màkhơngchiahtcho100,hocchiaht cho400). 11. Nhpvàomtngày( ngày,tháng,năm ).Tìmngàyksaungày vanhp( ngày/tháng/năm ). 12. Nhp vào mt ngày ( ngày, tháng, năm ). Tìm ngày k trưc ngàyvanhp( ngày/tháng/năm ). 50/124
  51. GiáotrìnhPPlptrình TT.CơngNghThơngTin 13. Nhp vào mt ngày ( ngày, tháng, năm ).Chobitngàyđĩlà ngàythbaonhiêutrongnăm. 14. Nhpvàomtnămdươnglch.Hãychobitnămâmlch.(vd: n=2007=>ðinhHi) 15. Nhpmtsncĩtiđa2chs.Hãychobitcách đc ra dngch. (vd:n=35=>Bamươilăm,n=5=>năm). 16. Nhpmtsncĩtiđa3chs.Hãychobitcách đc ra dngch. (vd:n=235=>Haitrămbamươilăm,n=305=>Batrăm l năm) 17. Nhpmtsnbtkỳ.Hãychobitcáchđcradngch. 18. NhpvàođimTốn,Lý,Hố.HãytínhðTBvàChobitsinh viênđĩxploigì(Xutsc,Gii,Khá,Trungbình,Yu) 19. Kimtrasnguyêndươngncĩphilà s chínhphương hay khơng? 20. Vit chương trình nhp vào mt s nguyên dương n vi 1 =0,b>=0,c>=0.Nua,b,ctothànhtamgiácthì hãy tính vàxutchu vi,dintíchhìnhtamgiác.Ngưc li, thơngbáo“Khơngtothànhtamgiác” HD:cv=a+b+c,p=cv/2vàdt= p (* p − a (*) p − b (*) p − c) 23. Vitchươngtrìnhnhptbànphím2sa,bvàmtkýtch. Nu: 51/124
  52. GiáotrìnhPPlptrình TT.CơngNghThơngTin − chlà“+“thìthchinphéptínha+bvàinktqulên mànhình. − chlà“–“thìthchinphéptínhabvàinktqulên mànhình. − chlà“*”thìthchinphéptínha*bvàinktqulên mànhình. − chlà“/”thìthchinphéptínha/bvàinktqulên mànhình. 24. Mtsnguyêndươngchiahtcho3nutngcácchsca nĩchiahtcho3.Vitchươngtrìnhnhpvàomtscĩ3ch s,kimtrasđĩcĩchiahtcho3dùngtínhchttrên.(if) 25. Vitchươngtrìnhnhnvàogi,phút,giâydng(hh:mm:ss),t bànphím.Cngthêmmtsgiâyvàovàinraktqu dưi dng(hh:mm:ss). 26. Kimtramtkýtnhpvàothuctphpnàotrongcáctpký tsau: − Cáckýtchhoa:'A' 'Z' − Cáckýtchthưng:'a' 'z' − Cáckýtchs:'0' '9' − Cáckýtkhác. 27. Hthplcphândùng16kýsbaogmcáckýt 0 9vàA,B,C,D,E,F. CáckýsA,B,C,D,E,Fcĩgiátrtươngngtrong h thpphânnhưsau: A10 B11 C12 D13 E14 F15 Hãyvitchươngtrìnhchonhpvàokýtbiudinmtký scahthplcphânvàchobitgiátrthpphântương ng. Trưng hp ký t nhp vào khơng thuc các ký s trên,đưarathơngbáoli:"Hthplcphânkhơngdùngký snày" 52/124
  53. GiáotrìnhPPlptrình TT.CơngNghThơngTin 28. Nhpn>=0.TínhS(n)=1+2+3+ +n. 29. Nhpn>=0.TínhS(n)=2+4+ +n. 30. Nhpn>=0.TínhS(n)=1+3+ +n. 31. Nhpn>=0.TínhS(n)=1 2+2 2+3 2+ +n 2. 32. Nhpn>=0.TínhS(n)=1 2+2 2+3 2+ +n 2. 1 1 1 33. Nhpn>=0.Tính S ( n ) = 1 + + + + 2 3 n 1 1 1 34. Nhpn>=0.Tính S ( n ) = + + + 2 4 2 n 1 1 1 35. Nhpn>=0.Tính S ( n ) = 1 + + + + 3 5 2 n + 1 1 1 1 36. Nhpn>=0.Tính S ( n ) = + + + 1 × 2 2 × 3 n × ( n + )1 1 2 n 37. Nhpn>=0.Tính S (n ) = + + + 2 3 n + 1 1 3 2 n + 1 38. Nhpn>=0.Tính S (n) = + + + 2 4 2n + 2 39. Nhpn>=0.TínhT(n)=1 ×2×3× ×n 40. Nhpn>=0.TínhS(n)=1+1 ×2+1 ×2×3+ +1 ×2×3× ×n 41. Nhpx,n.TínhT(x,n)=x n 42. Nhpx,n.Tính S(n) = n x 43. Nhpx,n.TínhS(x,n)=x+x 2+x 3+ +x n 44. Nhpx,n.TínhS(x,n)=x 2+x 4+x 6+ +x 2n 45. Nhpx,n.TínhS(x,n)=x+x 3+x 5+ +x 2n+1 46. Nhpn.Tính 1 1 1 S (n ) = 1 + + + + 1 + 2 1 + 2 + 3 1 + 2 + + n 47. Nhpx,n.Tính x 2 x 3 x n S ( x, n ) = x + + + + 1 + 2 1 + 2 + 3 1 + 2 + + n 53/124
  54. GiáotrìnhPPlptrình TT.CơngNghThơngTin x 2 x 3 x n 48. Nhpx,n.Tính S ( x , n ) = x + + + + 2 ! 3! n ! x 2 x 4 x 2 n 49. Nhpx,n.Tính S ( x , n ) = x + + + + 2! 4! 2 n ! x 3 x 5 x 2 n +1 50. Nhpx,n.Tính S ( x , n ) = x + + + + !3 !5 2( n + 1)! 51. Nhpn.Tính S ( n ) = 2 + 2 + 2 + + 2 ,cĩnducăn lngnhau. 52. Nhpn.Tính S (n ) = n + (n − )1 + (n − )2 + + 2 + 1 ,cĩn ducănlngnhau. 53. Nhpn.Tính S ( n ) = 1 + 2 + 3 + + ( n − )1 + n ,cĩn ducănlngnhau. 54. Litkêttccácưcs casnguyêndươngn. 55. Litkêttccác ưcsl casnguyêndươngn. 56. Litkêttccác ưcschn casnguyêndươngn. 57. Tínhtngttccác ưcs casnguyêndươngn. 58. Tínhtíchttccác ưcs casnguyêndươngn. 59. ðmslưngcác ưcs casnguyêndươngn. 60. Tìm ưcslnnht casnguyêndươngn. 61. Kimtrancĩphilà snguyênthaykhơng? 62. Litkêcác snguyêntnhhơnhaybngsnguyêndươngn. 63. Litkêcácchslà snguyêntcasnguyêndươngn. 64. Tínhtngcácchslà snguyêntcasnguyêndươngn. 65. Tínhtíchcácchslà snguyêntcasnguyêndươngn. 66. ðmslưngcácchs chn casnguyêndươngn. 67. Tínhtngcácchs chn casnguyêndươngn. 68. Tínhtíchcácchs chn casnguyêndươngn. 54/124
  55. GiáotrìnhPPlptrình TT.CơngNghThơngTin 69. ðmslưngcácchs lcasnguyêndươngn. 70. Tínhtngcácchs lcasnguyêndươngn. 71. Tínhtíchcácchs lcasnguyêndươngn. 72. Tìm ưcschunglnnht ca2snguyêndươnga,b. 73. Tìm Bischunglnnht ca2snguyêndươnga,b. 74. Kimtrasnguyêndươngncĩphilà sđixng haykhơng? 75. Kimtrasnguyêndươngncĩphilà shồnthin(Pefect number) haykhơng?(Shồnthinlàscĩtngcácưcs canĩ(khơngknĩ)thìbngchínhnĩ.Vd:6cĩcácưcslà 1,2,3và6=1+2+3 6làshồnthin) 76. Kim tra s nguyên dương n cĩ phi là s thnh vưng (Abundantnumber) haykhơng?(Sthnhvưnglàscĩtng cácưcscanĩ(khơngknĩ)thìlnhơnnĩ.Vd:12cĩcác ưcslà1,2,3,4,6và12 1+3 9làskhơngtrnvn) 78. Kimtrasnguyêndươngncĩcácchstồnlà chschn haykhơng? 79. Kimtrasnguyêndươngncĩcácchstồnlà chsl hay khơng? 80. Kimtrasnguyêndươngncĩ cácchstăngdnttráiqua phi haykhơng? 81. Kimtrasnguyêndươngncĩ cácchsgimdnttrái quaphi haykhơng? 82. Nhp n>0. Tìm s nguyên dương m ln nht sao cho 1+2+3+ +m 0. Tìm s nguyên dương m nh nht sao cho 1+2+3+ +m>n. 84. Xutsđocasnguyêndươngn. 85. XutracáckýttA>Z,Z>A,a>z,z>a. 55/124
  56. GiáotrìnhPPlptrình TT.CơngNghThơngTin 86. Xutracácslnhhơn50trcács11,25,37. 87. Nhpn>0.Xutrabngcuchươngn. 88. Hãytìmsgàvàschĩ?bit: Vagàvachĩ bĩlichotrịn bamươisáucon mttrămchânchn. 89. Hãytìmstrâumiloi?bit: Trămtrâutămc Trâuđngănnăm Trâunmănba Trâugiàbaconmtbĩ 90. Xutramànhìnhcáchìnhcĩchiucaoh>0.vídh=4tacĩ cáchìnhnhưsau: 56/124
  57. GiáotrìnhPPlptrình TT.CơngNghThơngTin 91. Vitchươngtrìnhthchintrịchơiđốnsnhưsau: Máylyramtsngunhiênn ∈[1,100]làscamáy: Smáy (sdnghàmrandom). Ngưinhpvàomts( Snhp ) +Nu Snhp lnhơn Smáy thìthơngbáo“Sbnln hơnsmáy”. +Nu Snhp nhhơn Smáy thìthơngbáo“Sbnnh hơnsmáy”. Trịchơiktthúckhi: +HocBnđãđốntrúng:thơngbáo“Hahabntàitht”. +HocBnđãđốnsai7ln:thơngbáo“Bnđãthuari” vàhinth Smáy . 92. Trịchơilybì: 57/124
  58. GiáotrìnhPPlptrình TT.CơngNghThơngTin “CĩMviênbi,haingưichơilnlưtlyđicácviênbisaochos viênbilyítnhtlà1vànhiunhtlà3,ngưinàomàlyđưc viênbicuicùngthìngưiđĩbthua ” Gisbnchơivimáy.Hãyvitchươngtrìnhmơphngtrị chơinàysaochomáycĩcơhithngnhiunht. Ngưichơicn nhp vàosviênbi Mvà chnlưtly bi trưc( máylytrưchaybnlytrưc )sauđĩcthayphiên nhauly.Cuicùngthìthơngbáoktqucavánchơi. 58/124
  59. GiáotrìnhPPlptrình TT.CơngNghThơngTin Chương4 MNG (Array) 1.Mng Mnglàmttphpcácbincĩcùngkiudliunmliêntip nhau trong b nh và đưc tham chiu bi mt tên chung (tên mng).Miphntcamngđưcthamchiuthơngquachmc (index ).Numngcĩnphntthìphntđutiêncĩchmclà 0vàphntcuicĩchmclàn1.ðthamchiuđnmtphn ttadùngtênmngvàchmccaphntđưcđttrongcpdu []. Slưngphnttrongmngđưcgilà kíchthưc camng. Kíchthưccamnglàcđnhvàphiđưcxácđnhtrưc;nĩ khơngththayđitrongsutquátrìnhthchinchươngtrình. Víd:Khaibáomngacĩ10phnt.Miphntcĩkiuint inta[10]; int int int a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] Cĩ2loimngthơngdnglàmng1chiuvàmngnhiuchiu. 2.Mng1chiu 2.1.Khaibáomtmngmtchiu Dngtngquátđkhaibáomtmngmtchiulà: typearrayName[elements]; type :kiudliucamiphntmng. elements :sphntcĩtrongmng 59/124
  60. GiáotrìnhPPlptrình TT.CơngNghThơngTin arrayName :tênmng Gingnhưnhngbinkhác,mngphiđưckhaibáotưngminh đchotrìnhbiêndchcĩthcpphátbnhchonĩ. Kíchthưc(tínhbngbyte)camngđưctínhtheocơngthc: Total_size=sizeof(type)*elements Víd,đkhaibáomtmngcĩ100phnttênnumcĩkiuint,ta dùnglnh: intnum[100]; Vymngtrêncĩkíchthưclà2bytes*100=200bytes(gisint chim2bytes) Miphntmnglàmtbinthơngthưng.ðanlnhdưiđây minhhavicsdngcácphntmng. num[0]=2;//gánphntcĩchmc0giátr2 num[1]=num[0]+3//num[1]cĩgiátr5 num[2]=num[0]+num[1];//num[2]cĩgiátr7 cout<<num[1];//Inragiátr5 2.2.Khaibáovàkhitomngmtchiu Ngồira,tacịncĩthvakhaibáovakhitocácphntca mngmtchiu.Dngtngquátnhưsau: typearrayName[]={value1,value2, ,valuen}; Lưuý:kíchthưcmngkhơngkhaibáo.Slưngphnttrong mnglàssgiátrđưccungcptrongcpdungoc{}.Mi giátrphâncáchnhaudùngduphy. Víd:Xemxétkhaibáosau: intsoChan[]={2,4,6,8,10}; MngsoChancĩ5phntlnlưtlà: soChan[0]cĩgiátrlà2 soChan[1]cĩgiátrlà4 soChan[4]cĩgiátrlà10 60/124
  61. GiáotrìnhPPlptrình TT.CơngNghThơngTin 2.3.Mtsvíd Víd1: TomtmngnguyênacĩNphnt.Miphntcĩgiá trlàchmccanĩ.Inmngramànhình. #include #include #defineN10 voidmain() { inta[]; for(inti=0;i #include voidmain() { unsignedintn; unsignedintremainder; unsignedintbinary[20],k=0,i; cout >n; do { remainder=n%2; binary[k]=remainder; k++; n=n/2; }while(n>0); cout =0;i) cout<<setw(3)<<binary[i]; getch(); } 61/124
  62. GiáotrìnhPPlptrình TT.CơngNghThơngTin 3.Mngnhiuchiu C/C++htr mngnhiuchiu.Dngđơnginnhtca mng nhiuchiulàmng2chiu.Mnghaichiuthcchtlàmngca nhngmngmtchiu.Tacĩthxemmnghaichiulàmtma trngmcáchàngvàcácct. 3.1.Khaibáomnghaichiu typearrayName[rows][columns]; rows :shàng columns :sct Gistakhaibáomtmngnumcĩ3hàngvà4ct,kiuintvà gángiátrchocácphntnhưhìnhminhha. intnum[3][4]; num[0][0]=1; num[0][1]=2; num[0][2]=3; num[0][3]=4; num[1][0]=5; num[2][3]=12; 3.2.Khaibáovàkhitomnghaichiu Dngtngquátkhaibáovàkhitomnghaichiu: typearrayName[][columns]={{value1,value2, ,valuen}, {value1,value2, ,valuen}, { }, {value1,value2, ,valuen}}; 62/124
  63. GiáotrìnhPPlptrình TT.CơngNghThơngTin Lưuý: Sphntcamihàngphibngsct(columns) Shàng(rows)cakhaibáomnghaichiuđtrng. Shàngcamngđưcxácđnhdavàoshàngtrongphn khito.Giátrcácphnttrongmihàngđưcđttrongcp {},cáchàngphâncáchnhaubngmtduphy. Víd,đkhaibáovàkhitomnghaichiucahìnhminhha trên,takhaibáonhưsau: intnum[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 3.3.Mtsvíd Víd1: To1mnghaichiucĩROWShàng,COLUMNSct. Giátrcaphnttrongmngđưcxácđnhbngtích ca ch mchàngvàchmcctcachúng. #include #include #defineROWS4 0 0 0 #defineCOLUMNS3 0 1 2 voidmain() { 0 2 4 inta[ROWS][COLUMNS]; //Initialization 0 3 6 for(inti=0;i<ROWS;i++) for(intj=0;j<COLUMNS;j++) a[i][j]=i*j; //Displayarraycontents cout<<“Contentsinarray:\n”; for(inti=0;i<ROWS;i++) { for(intj=0;j<COLUMNS;j++) cout<<setw(4)<<a[i][j]; cout<<endl; } } 63/124
  64. GiáotrìnhPPlptrình TT.CơngNghThơngTin Víd2: Tomtmatrnvuơng4x4.Tínhtngcácphnttrên đưngchéochính #include #include voidmain() { inta[][4]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}}; intsum=0; //Tinhtongduongcheochinh for(inti=0;i<4;i++) for(intj=0;j<4;j++) if(i==j) sum+=a[i][j]; cout<<“Tongduongcheochinhla:”<<sum; } 64/124
  65. GiáotrìnhPPlptrình TT.CơngNghThơngTin BÀITPCHƯƠNG4 1. Vitchươngtrìnhnhpvàomtdãynsthca[0],a[1], ,a[n 1],spxpdãystheothtgimdn.Xutradãyssaukhi spxp. 2. Vitchươngtrìnhspxpmtmngtheothttăngdnsau khiđãloibcácphnttrùngnhau. 3. Vitchươngtrìnhnhpvàomtmng,hãyxutramànhình: Phntlnnhtcamng. Phntnhnhtcamng. Tínhtngcacácphnttrongmng. 4. Vitchươngtrìnhnhpvàomtdãycácstheotht tăng, nunhpsaiquycáchthìyêucunhpli.Indãyssaukhiđã nhpxong. 5. Vitchươngtrìnhnhpvàomtmatrn(mnghaichiu)các snguyên,gmmhàng,nct.Inmatrnđĩlênmànhình. 6. Vitchươngtrìnhđchuynđivtrítdịngthành ct ca mtmatrn(matrnchuynv)vuơng4hàng4ct.Sauđĩ vitchomatrntngquátcpm*n. Víd: 12341291 25582545 94203528 15864806 7. Vitchươngtrìnhnhpvàomtmngstnhiên.Hãyxutra mànhình: Dịng1:gmcácsl,tngcngcĩbaonhiêusl. Dịng2:gmcácschn,tngcngcĩbaonhiêuschn. Dịng3:gmcácsnguyênt. Dịng4:gmcácskhơngphilàsnguyênt. 8. Vitchươngtrìnhtínhtngbìnhphươngcacácsâmtrong mtmngcácsnguyên. 9. Vitchươngtrìnhthchinvicđomtmngmtchiu. Víd:123457910đothành109754321. 65/124
  66. GiáotrìnhPPlptrình TT.CơngNghThơngTin 10. VitchươngtrìnhnhpvàohaimatrnAvàBcĩcpm,n.In haimatrnlênmànhình.TnghaimatrnAvàBlàmatrnC đưctínhbicơngthc: c =a +b (i=0,1,2, m1;j=0,1,2 n1) ij ij ij TínhmatrntngCvàinktqulênmànhình. 11. VitchươngtrìnhnhpvàohaimatrnAcĩcpm,kvàBcĩ cpk,n.Inhaimatrnlênmànhình.TíchhaimatrnAvàB làmatrnCđưctínhbicơngthc: c =a *b +a *b +a *b + +a *b ij i1 1j i2 2j i3 3j ik kj (i=0,1,2, m1;j=0,1,2 n1) TínhmatrntíchCvàinktqulênmànhình. 12. Nhpsphntvàcácphntnguyêndươngcamnga. a) Incácsnguyêntcĩtrongmnga. b) Spxpcácschntrongmngtheothttăngdn. 13. Vitchươngtrìnhnhpvàomnga a) Vithàmkimtramngđixngkhơng?Nucĩtrv1 ngưclitrv0. b) Nhpmngb,kimtramngbcĩphilàmngconca mngakhơng?Nucĩtrvslnmngbxuthintrong mnga. 14. Vitchươngtrìnhtheodnghàm:nhpvàomngnguyênacĩ nphntvi: a) Cácsnguyênt(nucĩ)trongmngphi<100. b) Khơngcĩphnttrùngnhautrongmng. c) Tínhtngcácsnguyênttrongmng. 15. Vitchươngtrìnhthchincácbưcsau: a) Nhpmngthc. b) Spxpmngthctheothttăngdn. c) Inphntcĩslnxuthinnhiunhttrongmng. 16. Nhpvàomnga,btheokiucpphátđng.Vi: a) Cácphntcaavàbkhơngtrùngnhau. b) Xptheothttăngdnhaimnga,b. c) Ni hai mng này li thành mt mng duy nht sao cho mngvntăng. 17. Nhpvàomtmnga.Thchinspxpsau: 66/124
  67. GiáotrìnhPPlptrình TT.CơngNghThơngTin a) Ttccácslnmphíatrưcdãys,cácschn nm phíasaudãys,cács0nmgia. b) Nhpvàomtsx,hãytìmsnguyênttrongabéhơnvà gnvixnht. 18. Vitchươngtrìnhnhpvàomngmtchiucĩnsnguyên dương.Hãychobitsnàotrongmngcĩgiátrgnvitrung bìnhcngcatồnmng. 19. Nhpvàomtmngcĩnsnguyêndươngkhácnhau.Hãyin rattccácphnttrongmngcĩgiátrnhhơngiátrln nhtvàlnhơngiátrnhnhtcamng. 20. Vitchươngtrìnhnhpngunhiênmtmngcĩnsnguyên dương.Nhpvàomtsnguyêndươngk.Hãytínhtrungbình cngcacácphnttrongmngcĩgiátrlnhơnhaybngk. 21. Nhpvàomtdãysnguyêndươngngunhiên(random)cĩn phnt.Vitchươngtrìnhinraslnhơnsnhnhtcadãy vànhhơnhaybngvimiscịnli(nghĩalàtìmsnhth haitrongdãy).Nunphntđubngnhauthìthơng báo: khơngtntiscntìm. 22. Vitchươngtrìnhnhpvàomngsnguyêncĩnphnt.Hãy tìmschnlnnhtvàslnhnht. 23. Hãynhpdãynsnguyêndươngcĩgiátrtrongkhongt1 >100.Spxplidãystrêntheochiutăngdnvàloibcác phnttrùngnhau(chgilimtgiátrtrongsđĩ) 24. Hãynhpdãynsnguyêndươngcĩgiátrtrongkhongt1 >100.Spxplidãystrêntheochiutăngdn.Nhp vào mtsxnguyêndương.Chènxvàodãysaochothtcadãy khơngthayđi. 25. Hãynhpdãynsnguyêndươngcĩgiátrtrongkhongt1 >100.Inramànhìnhcácschnxuthintrongdãytheoth ttăngdn. 26. Hãynhpdãynsnguyêndươngcĩgiátrtrongkhongt1 >100.Inragiátrtrungbìnhcngcacácschnxuthin trongdãy. 27. Vitchươngtrìnhthchincáccơngvicsau: a) Nhpvàomtmatrncácgiátrthckíchthưcmxn,vin vàmđưcnhptbànphím. b) Tínhtngcácsdươngcĩtrongmng. 28. Vitchươngtrìnhthchincáccơngvicsau: 67/124
  68. GiáotrìnhPPlptrình TT.CơngNghThơngTin a) Nhpvàomtmatrncácgiátrthckíchthưcnxn,vin đưcnhptbànphím. b) Tìmttccácvtrítrongmatrnthayêucusau:giátr camatrntivtríđĩlàgiátrlnnhtcamatrn. 29. Vitchươngtrìnhthchincơngvicsau: a) Nhpvàosnguyên dươngN. Cpphátđng mt mng nguyênAcĩNphnt.Thchinvicnhpgiátr cho mngnày. b) Tìmsnguyêntlnnhtcĩtrongmng.Nukhơng cĩ phicĩthơngbáo. 30. VitchươngtrìnhnhpvàomatrnvuơngA(NxN),viNnhp vàotbànphím. a) Inratngcácgiátrtrongtamgiácvuơngtrêncamatrn A(kccácphnttrênđưngchéocamatrnA) InmatrntíchAxAramànhình. 68/124
  69. GiáotrìnhPPlptrình TT.CơngNghThơngTin Chương5 CONTR (Pointers) 1.Contr Mtcontrlà1binchamtđachbnhĩ.ðachnàylàvtrí camtđitưngkhác(thưnglàmtbin)trongbnh.Nu mtbinchađachcamtbinkhác,binthnhtđưcgilà trđnbinthhai. Víd: Bintrong ðach bnh bnh Mtbinđưccpphátơnhti đach1000cĩgiátrlàđach (1003)ca1binkhác.Binth nhtđưcgilàcontr. Bnh 69/124
  70. GiáotrìnhPPlptrình TT.CơngNghThơngTin 2.Bincontr(pointervariables) Numtbinschađachcamtbinkhácthìnĩphiđưc khaibáolàmtcontr.Khaibáo1binlàcontrgmkiud liucơs,mtdu*,vàtênbin.Dngtngquátđkhaibáomt bincontrlà type*pointerVariable; type :xácđnhkiudliucabinmàcontrcĩthtrđn.Ví dcontrcĩkiuintstrđnbincĩkiuint.Docácphéptốn shctrêncontr(tăng,gim)liênquanđntypecanĩnêncn phikhaibáotypecacontrđúngđn. 2.1.Cáctốntcontr( pointeroperators ) Cĩ2tốntcontrlà*và&. Tốnt&làtốnt1ngơimàtrvđachbnhcatốnhng canĩ.(tốnt1ngơichyêucu1tốnhng). Víd: intcount; int*m; m=&count; Lnhm=&count;đtđachbnhcabincountvàocontrm. Lnh trên cĩ th phát biu: "con tr m nhn đa ch ca bin count.". Gisbincountđưccppháttiđachbnh2000đlưutr giátrcanĩ.Gisrngcountcĩgiátr100.Nhưvy,tiđach bnh2000cĩchagiátr100.Saukhilnhm=&count;đưc thchinthìmscĩgiátrlà2000. Tốntcontr*làtốntmtngơitrvgiátrtiđachcon trtrđn. Víd:q=*m; Lygiátrtiđachmàmtrđnvàđtvàobinq.Nhưvyqs cĩgiátrlà100(làgiátrcabincount). 70/124
  71. GiáotrìnhPPlptrình TT.CơngNghThơngTin 2.2.Cácthaotáctrêncontr 2.2.1.Lnhgáncontr Tacĩthdùngmtcontrbênphicacâulnhgán(=)đgán giátrca1contrchomtcontrkhác.Víd: intx; int*p1,*p2; p1=&x; p2=p1; Saukhiđanlnhtrênđưcthchin,chaip1vàp2cùngtr đnbinx. 2.2.2.Phéptốnshctrêncontr Chcĩ2phéptốnshctacĩthdùngtrêncontrđĩlàcngvà tr.Gisp1làmtcontrnguyênvigiátrhintilà2000. Cũnggisrngsnguyênchim2bytesbnh.Nhưvy,sau khithchinlnh p1++ ;thìp1cĩgiátrlà2002chkhơngphi 2001.Tươngt,Gisp1làmtcontrnguyênvigiátrhin tilà2000.Cũnggisrngsnguyênchim2bytesbnh.Như vy,saukhithchinlnh p1 ;thìp1cĩgiátrlà1998ch khơngphi1999. Tngquátt2vídtrên:Ttccontrstănghaygimviđơn vlàkíchthưccakiudliucanĩ. 71/124
  72. GiáotrìnhPPlptrình TT.CơngNghThơngTin Giskiuký Giskiu t(char)cĩ nguyên(int) kíchthc1 cĩkíchthc2 byte. bytes. Ngồitốnttăng( ++ )vàgim( ),tacĩthcnghaytrs nguyênvicontr.Víd:theohìnhminhhatrên. Contrcharchchađach3000,vylnh ch=ch+3; chschađach3003 Contrnguyênichađach3000,vylnh i=i+2; ischađach3004 Lưuý:đơnvtăngcacontrcharlà1byte,contrintlà2bytes. Tươngt,giscontrcharchchađach3003,vylnh ch=ch–3; chschađach3000 72/124
  73. GiáotrìnhPPlptrình TT.CơngNghThơngTin Giscontrnguyênichađach3004,vylnh i=i–2; ischađach3000 3.Mtsvídvcontr Víd1 :Vitchươngtrìnhhốnđigiátrca2bindùngcontr #include #include voidmain() { inta=20,b=15; int*pa,*pb,temp; pa=&a;//contrpachađachcaa pb=&b;//contrpbchađachcab temp=*pa; *pa=*pb; *pb=temp; cout<<"a="<<a<<endl; cout<<“b=”<<b; getch(); } //ktquxutramànhình a=15 b=20 4.Cpphátbnhđng ContrcungcpshtrchocpphátbnhđngtrongC/C++. Cpphátđnglàphươngtinnhđĩmtchươngtrìnhcĩthdành đưcthêmbnhtrongkhiđangthcthi. Bintồncc( globalvariables )đưccpphátbnhvàolúcbiên dch. Bin cc b ( local variables ) dùng stack. Tuy nhiên, bin tồncchayccbkhơngthđưctothêmtrongkhithcthi 73/124
  74. GiáotrìnhPPlptrình TT.CơngNghThơngTin chươngtrình.Mtschươngtrìnhcnthêmbnhkhithcthi, giiphápchovnđnàylàcpphátđng. C/C++htrhaihthngcpphátđng:mtcáiđưcđnhnghĩa biCvàmtcáibiC++. 4.1.CpphátđngđưcđnhnghĩabiC BnhcpphátđngbinhnghàmcpphátđngcaClàt heap(heaplàvùngnhrinmgiachươngtrìnhcabnvàvùng lưutrthưngtrcvàstack).Mcdukíchthưcvùngnhheap làkhơngbittrưc,nhưngnĩichunglàkháln. HaihàmcpphátđngquantrngnhtcaClàmalloc()vàfree(). Nhnghàmnàylàmviccùngnhauđdùngvùngnhriđcp phátvàthuhibnh.Hàmmalloc()dùngđcpphát b nh đngvàhàmfree()dùngđthuhi.Btkỳchươngtrìnhnàodùng nhnghàmnàyphiincludetptinheaderstdlib.h. Hàmmalloc()cĩnguyênmu(prototype)sau: void*malloc(length) length :làsbytemuncpphátbnh.Hàmmalloc()trvmt contrcĩkiuvoid,dođĩcĩthgánnĩchocontrcĩkiubt kỳ.Saukhicpphátthànhcơng,hàmmalloc()trvđachca byte đu tiên ca vùng nh đưc cp phát t heap. Nu khơng thànhcơng(khơngcĩđvùngnhriyêucu),hàmmalloc()tr vnull. ðanmãdưiđâycpphát1000bytesvùngnhliêntc: char*p; p=(char*)malloc(1000);//cpphát1000bytes Vìhàmmalloc()trvcontrkiuvoid,trongtrưnghpnàyta phiépkiu(casting)nĩthànhcontrcharchophùhpvibin contrp. ðonmãdưiđâycpphátvùngnhcho50snguyên. int*p; 74/124
  75. GiáotrìnhPPlptrình TT.CơngNghThơngTin p=(int*)malloc(50*sizeof(int)); Lưuý:trongvídtrêntadùngtốntsizeofđxác đnh kích thưckiudliuint. Tđĩ,dokíchthưccaheapthìkhơngxácđnhnênkhicpphát bnhtaphikimtragiátrtrvcahàmmalloc()đbitlàb nhcĩđưccpphátthànhcơnghaykhơng.ðonmãdưiđây dùngđkimtra: p=(int*)malloc(100); if(p==NULL) { cout<<"Khongdubonho"; exit(1); } Hàmfree()thìngưclivihàmmalloc().free()trvvùngnh đưccptrưcđĩchohthng.Hàmfree()cokhuơnmusau: voidfree(void*p); đây,plàcontrđnvùngnhđãđưccppháttrưcđĩbi hàmmalloc(). 4.2.CpphátđngđưcđnhnghĩabiC++ C++cungcphaitốntcpphátbnhđng:new và delete. Nhngtốntnàydùngđcpphátvàthuhibnhtrongkhi chươngtrìnhthcthi. Tốntnewcpphátbnhvàtrvmtcontrđnbyteđu tiêncavùngnhđưccpphát.Tốntdeletethuhivùngnh đưccppháttrưcđĩbitốntnew.Dngtngquátcanew vàdeletelà: p=newtype; deletep; 75/124
  76. GiáotrìnhPPlptrình TT.CơngNghThơngTin đây,plàmtbincontrmànhnđachcavùngnhđưc cpphátđlnđcha1đitưngcĩkiulàtype. Víd: #include #include intmain() { int*p; p=newint;//allocatespaceforanint *p=100; cout<<"At"<<p<<""; cout<<"isthevalue"<<*p<<"\n"; deletep; return0; } 5.Contrvoid( voidpointers ) Kiudliukhikhaibáobincontrchínhlàkiudliumàcon trcĩthtrđn.ðachđtvàobincontrphicùngkiuvi kiucacontr.Xemxétđanmãsau: inta; floatf; int*pa; float*pf; Nhnglnhsaulàhpl: pa=&a; pf=&f; Nhnglnhsaulàkhơnghpl: pa=&f; //palàcontrintdođĩchchađach //cabinkiuint pf=&a; //pflàcontrfloatdođĩchcha //đachcabinkiufloat 76/124
  77. GiáotrìnhPPlptrình TT.CơngNghThơngTin Contrvoidlàmtlaicontrđcbitmàcĩthtrđnbtkỳ kiudliunào.Cúphápkhaibáocontrvoidnhưsau: void*pointerVariable; Nutakhaibáocontrvoidsau: void*p; thìcáclnhsauđâylàhpl p=&a;//saulnhnàyptrđnbinnguyêna p=&f;//saulnhnàyptrđnbinthcf Tuynhiên,tùythuccontrvoidđangtrđnkiudliunào,ta phiépvđúngkiutươngngkhidùngtrongcácbiuthc. Vídpđangtrđnbinnguyêna,đtănggiátrcabinalên 10taphidùnglnhsau: (int*)*p+10; Nupđangtrđnbinthcf,đtănggiátrcabinflên10ta phidnglnhsau: (float*)*p+10; 6.Contrnull( Nullpointers ) Mtcontrhinhànhkhơngtrđnmtđachbnhhplthì đưcgángiátrNULL(màlàzero).Biquiưc,contrNULLlà contrkhơngtrđnđâucvàkhơngnêndùng.NULLđưcđnh nghĩatrong Nuchươngtrìnhvơtìnhdùngcontrnullnhưdưiđây thì s nhnlikhithcthichươngtrình( runtimeerror ). #include voidmain() { int*p; cout<<“Giatricontroptrodenla:“<<*p; } 77/124
  78. GiáotrìnhPPlptrình TT.CơngNghThơngTin Ktqucachươngtrìnhtrênlà: NULLPOINTERASSIGNMENT Chươngtrìnhtrênsgâyralivàolúcthcthivìbincontrp khơngđưcgánđachbnhhpl.Nĩlàcontrnull,vìvy, truycpđnđach0gâyrathơngbáolitrên. 7.Contrvàmng Giacontrvàmngcĩmtsquanhgn.Xemxétđanmã dưiđây: charch[80],*p; p=ch; ch p p+1 p+2 p+9 ch[0] ch[1] ch[2] ch[3] ch[4] ch[5] ch[6] ch[7] ch[8] ch[9] đây,pđưcgánđachcaphntđutiêncamngch.ð thamchiuphntth3trongmngch,tadùngmttrong2cách sau:ch[2]hoc*(p+2).Chaicáchđuthamchiuđnphnt thbatrongmngch(lưuýchmccamngbtđulà0). Tngquát:C/C++cungcphaiphươngthcđtruycpcácphn tmng:dùngchmcthơngquatênmngvàdùngshccontr. Tênmngđưcxemlà“contrhng”nghĩalànĩchađachca phntđutiêntrongmngvàgiátrnàykhơngbaogithayđi. Dođĩtakhơngthápdngcácphéptốnshc(cng,tr)cho tênmng.Nhưvy,trongvídtrênchlàtênmngđngthicũng làcontrhngvàlnhp=ch;saochépđachcachvàobincon trp. 78/124
  79. GiáotrìnhPPlptrình TT.CơngNghThơngTin Víd:Inragiátrcácphntcamngsaukhiđãnhâncho10 dùngcontr #include voidmain() { inta[]={0,1,2,3,4,5,6,7,8,9}; int*p; p=a; for(inti=0;i<10;i++) { *(p+i)*=10;//tuongduonga[i]=a[i]*10 cout<<“a[“<<i<<“]=“<<*(p+i); } } 8.Mngcontr Mibincontrlàmtbinđơn.Tacĩthtomngcacáccon tr.Miphntcamnglàmtcontrthơngthưng.Cúpháp đkhaibáomngcontrlà: type*pointerArray[elements]; type :kiudliumàcáccontrphnttrđn. pointerArray :tênmngcontr. elements :sphntcamngcontr. Víd:int*p[5];lnhnàykhaibáomngcontrpcĩ5phnt. Cáclnhdưiđâyminhhacáchsdngmngnày: p[0]=&a;//gánđachcabinnguyênachocontrp[0] p[2]=p[0];//saochépđachcĩtrongp[0]vàop[2] b=*p[0];//gángiátrtiđachp[0]trđnvàobinb.Trong trưnghpnày,lnhtươngđươngvib=a;vìhintip[0]cha đachcabina. 79/124
  80. GiáotrìnhPPlptrình TT.CơngNghThơngTin BÀITPCHƯƠNG5 1. Vitchươngtrìnhnhpvàomtmngagmnphntnguyên. Spxpmngtheochiugimdn(lưuýsdngtên mng nhưcontrvàsdngcontr). 2. Hãydùngmtvịngforđnhpvàomtmatrnvuơngcpn vicácphntthcvàtìmphntMaxcamatrnnày. 3. Vithàmhốnvhaibinthca,bbngcáchsdngcontr (đivàolàhaicontr).Vitchươngtrìnhchínhnhp hai s thca,b.Sdnghàmtrênđđichavàb. 4. Vithàmgiihphươngtrìnhbcnhtvisáuđivàolàa,b, c,d,e,fvà2điralàxvày. 5. Vithàmtínhgiátrđathc: n f(x)=a 0x + +a n1x+a n.viđivàolàbinnguyênnvà mngthca. 6. Vithàmcnghaimatrnvuơngavàbcpn(sdng con tr). 7. Vitchươngtrìnhtínhtíchphâncaf(x)trênđon[a,b]bng cơngthchìnhthang.Theođĩ,tíchphâncaf(x)trên [a, b] bng:h*s.Trongđĩ: hlàđdàikhongphânhochđon[a,b]thànhnkhong. slàtngttccácf(a+i*h)viit1tin. Sdnghàmtrênđtínhtíchphântrongđon[1,4]ca: f(x) = (e x2sin(x 2))/ (1+x 4). (nghiên cu cách đưa con tr vàogiiquytbàitốn). 80/124
  81. GiáotrìnhPPlptrình TT.CơngNghThơngTin Chương6 HÀM (Functions) 1.Kháinimhàm Mthàmlàmtkhilnhđưcđttênvàcĩmttínhchtlànĩcĩ thđưcthcthitnhiuđimkhácnhautrongchươngtrìnhkhi đưcgi. Hàmnhĩmmtslnhthànhmtkhivàđưcđtmttên.Khi nàycịngilàunithaymodule.Hàmcĩthđưcgitnhiuch khácnhautrongchươngtrình.Khihàmđưcgi,khilnhtương ngcahàmđưcthcthi.Saukhithchinxong, quyn điu khinđưctrvchochươngtrìnhgi.Xemhìnhminhhadịng thcthicachươngtrìnhcĩgiđnnhiuhàm. voidmain() f1() { { . ; . ; . } f1(); . f1() . { . ; f2(); ; . } . . f3(); f1() . { . ; . ; } } 81/124
  82. GiáotrìnhPPlptrình TT.CơngNghThơngTin Hàmcịnđưcgilàchươngtrìnhcon (subroutine) .Hàmcĩth trvgiátrchochươngtrìnhgihockhơng.Nuhàmkhơngtr v giá tr cho chương trình gi thì nĩ đưc gi là th tc (procedure). Hàm cĩ th đưc gi t chương trình chính (hàm main)hoct1hàmkhác.Hàmcĩthđưcginhiuln. Cĩhailaihàm:hàmthưvinvàhàmdongưidùngđnhnghĩa. Hàmthưvinlànhnghàmđãđưcxâydngsn.Munsdng cáchàmthưvintrongchươngtrìnhtaphikhaibáothưvincha nĩtrongphnkhaibáo#include. Víd:Tìmminca4giátra,b,c,d #include intmin(inta,intb);//prototype voidmain() { inta=40,b=30,c=10,d=20,min4; min4=min(a,b); min4=min(min4,c); min4=min(min4,d) cout<<“Min=“<<min4; } intmin(inta,intb) { if(a<b)returna; elsereturnb; } 2.Dngtngquátcahàm Hàmcĩdngtngquátnhưsau: returnTypefunctionName(parameterList) { bodyofthefunction } 82/124
  83. GiáotrìnhPPlptrình TT.CơngNghThơngTin returnType : Kiu d liu ca giá tr tr v bi hàm. Nu hàm khơngtrvgiátrthìreturnTypelàvoid functionName :Tênhàm. parameterList :Danhsáchcácthamshìnhthcđưcđttrong cpdu().Làdanhsáchcáctênbinvàkiudliutươngngca chúngphâncáchnhaubiduphy.Nuhàmkhơngcĩthams thìdanhsáchnàylàrng. Víd:xemkhaibáohàmsau: intmax(inta,intb) { if(a<b) returnb; else returna; } Trongvídtrên,maxlàtênhàm,hàmcn2thamsđhatđng là2binnguyên,dliutrvcahàmcĩkiuint.Phnmãnm gia{}làthânhàm. 3.Cácquitcvphmvicahàm Hàmgingnhưmthpđen,bêntronghàm(thânhàm)làkhơng bitđivinhnglnhnmngồihàm.Phnthânca hàm ch đưcthcthikhihàmđưcgi.Dođĩ,khơngcĩlnh nào bên ngồihàmcĩthnhytrctipvàothânhàm.Tĩmli,mãvàd liubêntrongmthàmkhơngthtươngtácvimãvàdliunm trongmthàmkhác. Nhngbinđưckhaibáobêntronghàm(kccácthamshình thc)lànhngbinccb.Nhngbinnàyđưctorakhihàm đưcgivàbinmtsaukhihàmthcthixong. 4.Thamshìnhthcvàthamsthc Khihàmcnnhnđis( arguments )đthcthithìkhikhaibáo hàmcnkhaibáodanhsáchcácthamsđnhngiátrtchương trìnhgi.Cácthamsnàyđưcgilàthamshìnhthc.Khigi hàm,tacungcpcácgiátrtht,cácgiátrnàysđưcsaochép vàocácthamshìnhthcvàkhiđĩtagichúnglàthamsthc. 83/124
  84. GiáotrìnhPPlptrình TT.CơngNghThơngTin Víd:Xemxétđnhnghĩahàmsau intmin(inta,intb) { if(a<b)returna; elsereturnb; } Trongđnhnghĩahàmmintrênthìavàblà2thamshìnhthc. Khigihàmnhưcâulnhsau: minAB=min(15,7); thì15đưcsaochépvàobina,7đưcsaochépvàobinb.15và 7đưcgilàđis.Khiavàbnhngiátrdoligihàmthì chúngđưcgilàthamsthc. đis(arguments) minAB=min( 15,7 ); saochép intmin(int a,int b) { Thamshìnhthc if(a<b)returna; elsereturnb; } Cĩhaicáchtruynđisvàothamshìnhthc:Truynthamtr vàtruynthambin. 4.1.Truynthamtr( callbyvalue ) Cáchnàysaochépgiátrcađisvàothamshình thc ca hàm.Trongtrưnghpnày,nhngthayđicatham s khơng nhhưngđnđis.Nhưvy,nukhơngmunhàmlàmthayđi giátrcađistruynvàothìtakhaibáothamscahàmlà binthơngthưng(nghĩalàkhơngphibincontr). 84/124
  85. GiáotrìnhPPlptrình TT.CơngNghThơngTin Víd:Khosátchươngtrìnhsau #include voiddoubleNum(inta);//prototype voidmain() { inta=40; doubleNum(a); cout voiddoubleNum(int*b);//prototype voidmain() { inta=40; doubleNum(&a); cout<<“Insidemainfunction:”<<endl; cout<<“a=“<<a<<endl; } voiddoubleNum(int*b) { *b=*b+*b; cout<<“InsidedoubleNumfunction.a=“<<*b; } 85/124
  86. GiáotrìnhPPlptrình TT.CơngNghThơngTin Trongchươngtrìnhtrên,khigihàmdoubleNumtatruynđach cađisavàobincontrbcahàm.Nhưvy,contrbs cha đa ch ca bin a ca hàm main. Trong thân hàm doubleNum,lnhlàmgpđơigiátrcavùngnhdocontrbtr đnthcchtđãlàmtănggpđơigiátrcabin a trong hàm main. Víd2:Hốnđigiátr2bindùngcontr(truynthamchiu) #include voidswap(int*a,int*b);//prototype voidmain() { inta=20,b=40; int*pa,*pb; pa=&a; pb=&b; swap(pa,pb); cout<<“Aftercallswap,Values:”<<endl; cout<<“a=“<<a<<endl; cout<<“b=“<<b<<endl; } voidswap(int*a,int*b) { inttemp; temp=*a; *a=*b; *b=temp; } 5.Truynmngvàohàm Khimtmngđưcdùngnhưmtđisđtruynchohàm,đa chcamngđưctruynđnhàmvàothamshìnhthc. Như vy,truynmngvàohàmmcđnhlàtruynthamchiu.Dođĩ, nhngthayđiđngiátrcacácphntmngtrongthânhàms nhhưngđnmnggc. 86/124
  87. GiáotrìnhPPlptrình TT.CơngNghThơngTin Víd:Vitchươngtrìnhthayđigiátrcácphntmngtheoyêu cu:nugiátr>=0thìthaybng1,ngưclithaybng0. #include voidchange(inta[],intelements);//prototype voidmain() { intarr[]={5,5,3,3,7,7}; change(arr,6); cout<<“Aftercallchange,valueofarray:\n”; for(inti=0;i<6;i++) cout<<“arr[“<<i<<“]=“<<arr[i]<<endl; } voidchange(inta[],intelements) { for(inti=0;i<elements;i++) if(a[i]<0)a[i]=0; elsea[i]=1; } Nhưvy,saukhigihàmchange,giátrcácphnttrongmngb thayđithành0hay1. 6.ðiscahàmmain HàmmainlàđimbtđucamichươngtrìnhC/C++. Thnhthong,tacntruynthơngtinvàohàmmainkhinĩthc thi.Nhngthơngtinnàytagilàđisdịnglnh (commandline arguments). Hàmmaincĩ2thamslàargvvàargcdùngđnhncácđis dịnglnh.Thamsargclàmtbinnguyêngisđiscĩtrong dịnglnh.Thamsargvlàmtmngcontrchar.Miphnt camngnàytrđnmtđisdịnglnh.Ttcđis dịng lnhlàchui( string ). 87/124
  88. GiáotrìnhPPlptrình TT.CơngNghThơngTin Khihàmmaincĩnhnđisdịnglnh,nĩđưckhai báo như sau: intmain(intargc,char*argv[]) Xemxétchươngtrìnhsau: #include intmain(intargc,char*argv[]) { if(argc!=2) { count<<“Hello,“<<argv[1]; exit(1); } return0; } Gissaukhibiêndchchươngtrìnhtrên,tađưctptinthcthi làgreeting.exe TidunhchđiuhànhDOS,tanhplnhsau: greetingMr.IT Thìtrênmànhìnhxuthin: Hello,Mr.IT LnhgeetingMr.ITgm2đisdịnglnhlàgettingvàMr.IT, cácđisnàyđưctrđnbi2contrlàargv[0]vàargv[1].Do đĩ,khithcthichươngtrìnhtrên,chuiMr.ITsđưcinra. Khimtchươngtrìnhkhơngyêucucungcpđisdịnglnh, thơngthưngnĩđưckhaibáolàmain()màkhơngcĩthams. ðâylàmuđưcdùngchohuhtcácvídtrongtàiliunày. 7.Lnhreturn Lnhreturncĩ2cáchdùngquantrng.Thnht,nĩktthúcngay lptchàmchanĩkhinsthcthichươngtrìnhđưctrvcho chươngtrìnhgihàm.Thhai,nĩdùngđtrvmtgiátrcho chươngtrìnhgi. 88/124
  89. GiáotrìnhPPlptrình TT.CơngNghThơngTin 7.1.Cáchdùngthnht(ktthúchàm) Cĩhaicáchthcđhàmktthúcsthcthicanĩvàtrđiu khinvchươngtrìnhginĩ. Mtlà(thơngthưng)làkhilnhcuicùngcĩtrong hàm đưc thcthi. Víd:Xemxétchươngtrìnhsau: #include voidprintMessage(); voidmain() { cout voidmain() { inta[]={3,2,1,0,1,2,3]; for(inti=0;i<7;i++) { if(a[i]<0)return; count<<setw(5)<<a[i]; } } 89/124
  90. GiáotrìnhPPlptrình TT.CơngNghThơngTin Thchinchươngtrìnhtrên,khiduytđnphnta[4]cĩgiátr là1nênbiuthcđiukincacâulnhiflàtruenênlnhreturn đưcthcthivàchươngtrìnhktthúc. 7.2.Cáchdùngthhai(trvmtgiátr) Xemxétvídsau:Tínhtngcácphntcĩtrongmng #include inttotal(inta[],intsize); voidmain() { inta1[]={1,2,3]; inta2[]={1,2,3,4,5,6]; inttotal1,total2; total1=total(a1,3); total2=total(a2,6); cout<<“Tongmang1la=“<<total1<<endl; cout<<“Tongmang2la=“<<total2<<endl; } inttotal(inta[],intsize) { intsum=0; for(inti=0;i<size;i++) sum+=a[i]; returnsum; } Nhưvy,mikhihàmtotalđưcgi,mngtươngngđưctính tngvàlnhreturntrvgiátrnàychochươngtrìnhgi. 8.ðqui Mthàmcĩthgiđnchínhnĩ.Mthàmđưcgilàđquinu mtlnhtrongthânhàmgiđnchínhhàmđĩ. Víd,xemxétchươngtrìnhtínhgiaithacan. n!=1*2* *n 90/124