intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

NGÔN NGỮ LA65P5 TRỈNH C

Chia sẻ: Nguyen Phuong Anh | Ngày: | Loại File: PDF | Số trang:46

78
lượt xem
7
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

C là một ngôn ngữ mạnh và mềm dẻo nên nó được rất nhiều người sử dụng. Khắp nơi người ta đã bắt đầu dùng nó để viết mọi loại chương trình. Tuy nhiên, các tổ chức khác nhau đã bắt đầu sử dụng các version khác nhau của C và đã phát sinh nhiều sự khác nhau trong các thao tác làm cho người lập trình phải đau đầu.

Chủ đề:
Lưu

Nội dung Text: NGÔN NGỮ LA65P5 TRỈNH C

  1. Ng«n ng÷ lËp tr×nh C phÇn I: c¸c kh¸i niÖm c¬ b¶n Bµi 1. Më ®Çu Tãm t¾t lÞch sö ph¸t triÓn cña ng«n ng÷ C Ng«n ng÷ lËp tr×nh C do Dennis Ritchie t¹o lËp v o n¨m 1972 t¹i Bell Telephone Laboratories. Môc ®Ých ban ®Çu cña ng«n ng÷ n y l ®Ó thiÕt kÕ hÖ ®iÒu h nh UNIX. C l mét ng«n ng÷ m¹nh v mÒm dÎo nªn nã ® ®îc rÊt nhiÒu ngêi sö dông. Kh¾p n¬i ng- êi ta ® b¾t ®Çu dïng nã ®Ó viÕt mäi lo¹i ch¬ng tr×nh. Tuy nhiªn, c¸c tæ chøc kh¸c nhau ® b¾t ®Çu sö dông c¸c version kh¸c nhau cña C, v ® ph¸t sinh nhiÒu sù kh¸c nhau trong c¸c thao t¸c l m cho ngêi lËp tr×nh ph¶i ®au ®Çu. §Ó kh¾c phôc vÊn ®Ò n y, n¨m 1983, ViÖn Tiªu chuÈn Quèc gia cña Mü (ANSI) ® th nh lËp mét ñy ban ®Ó ®a ra mét ®Þnh nghÜa chuÈn cho ng«n ng÷ C, ®îc gäi l ANSI Standard C. Cã lÏ ph¶i nãi thªm mét chót vÒ tªn cña ng«n ng÷. Ng«n ng÷ n y cã tªn l C v× tríc nã ® cã mét ng«n ng÷ ®îc gäi l B. Ng«n ng÷ B do Ken Thompson ph¸t triÓn còng t¹i Bell Labs. Cã thÓ, B l ®Ó chØ tªn cña phßng thÝ nghiÖm, cßn C ch¾c l do ®øng sau B. T¹i sao l¹i dïng C? Trong thÕ giíi lËp tr×nh ng y nay, cã rÊt nhiÒu ng«n ng÷ lËp tr×nh bËc cao ®Ó lùa chän, ch¼ng h¹n nh C, Pascal, BASIC, Modula, v.v. TÊt c¶ ®Òu l nh÷ng ng«n ng÷ tuyÖt vêi phï hîp cho hÇu hÕt c¸c c«ng viÖc lËp tr×nh. Nhng tuy vËy, vÉn cã mét v i lý do ®Ó nhiÒu nh lËp tr×nh chuyªn nghiÖp c¶m thÊy C l ng«n ng÷ ®øng ®Çu, v×: C l mét ng«n ng÷ m¹nh v mÒm dÎo. H¹n chÕ duy nhÊt cña C chÝnh l sù h¹n chÕ trong t duy trõu tîng cña chÝnh ngêi lËp tr×nh m th«i. C ®îc sö dông cho nhiÒu môc ®Ých kh¸c nhau, nh thiÕt kÕ c¸c hÖ ®iÒu h nh, c¸c bé so¹n th¶o v¨n b¶n, ®å ho¹, trang tÝnh, v thËm chÝ l m c¸c ch¬ng tr×nh dÞch cho c¸c ng«n ng÷ kh¸c. C l mét ng«n ng÷ b×nh d©n ®îc nhiÒu ngêi lËp tr×nh chuyªn nghiÖp a dïng. B»ng chøng l ® cã rÊt nhiÒu ch¬ng tr×nh dÞch kh¸c nhau v nhiÒu tiÖn Ých kÌm theo. C l mét ng«n ng÷ chuyÓn ®æi ®îc tøc l mét ch¬ng tr×nh C ®îc viÕt cho mét hÖ m¸y vi tÝnh (vÝ dô IBM PC) cã thÓ ®îc dÞch v ch¹y trªn mét hÖ thèng kh¸c (vÝ dô DEC VAX) m chØ cÇn thay ®æi chót Ýt hoÆc kh«ng cÇn thay ®æi g× c¶.
  2. C l mét ng«n ng÷ ng¾n gän, nã chØ bao gåm mét sè c¸c tõ ®îc gäi l tõ khãa (keyword) l m c¬ së ®Ó t¹o ra c¸c c©u lÖnh cña ng«n ng÷. Víi c¸c ®Æc ®iÓm trªn, C l sù lùa chän tuyÖt vêi ®èi víi mét ng«n ng÷ lËp tr×nh. Nhng cã lÏ ngêi ta cßn nghe nãi vÒ C++ v mét kü thuËt lËp tr×nh míi ®îc gäi l lËp tr×nh híng ®èi tîng. Còng kh«ng cã g× ®¸ng hoang mang cho l¾m v× thùc ra C++ chØ l mét ng«n ng÷ siªu C víi tÊt c¶ nh÷ng g× m C cã céng thªm víi kü thuËt lËp tr×nh híng ®èi tîng. NÕu ai ®ã b¾t ®Çu ngay b»ng viÖc häc C++, th× tÊt c¶ nh÷ng g× ® ®îc d¹y khi häc C vÉn cßn ®îc ¸p dông cho C++. Trong khi häc C, kh«ng nh÷ng chØ häc mét ng«n ng÷ lËp tr×nh phæ th«ng v m¹nh nhÊt h«m nay m cßn tù chuÈn bÞ cho m×nh mét kü thuËt lËp tr×nh híng ®èi tîng cho ng y mai. ChuÈn bÞ cho viÖc lËp tr×nh Khi gi¶i mét b i to¸n cÇn ph¶i tiÕn h nh mét sè bíc nhÊt ®Þnh. §Çu tiªn ph¶i h×nh th nh hay cßn gäi l ®Þnh nghÜa b i to¸n. NÕu kh«ng biÕt b i to¸n cÇn ph¶i gi¶i quyÕt l g× th× kh«ng thÓ n o t×m ra kÕt qña ®îc. Mét khi b i to¸n ® ®îc ®Þnh râ, th× cã thÓ lËp ra mét kÕ ho¹ch ®Ó gi¶i quyÕt nã. Sau khi ® cã mét kÕ ho¹ch th× viÖc thùc hiÖn b i to¸n n y sÏ trë nªn dÔ d ng. Cuèi cïng, mét khi kÕ ho¹ch ® ®îc thùc thi, th× c¸c kÕt qña ph¶i ®îc thö l¹i ®Ó kiÓm chøng xem liÖu b i to¸n ® ®îc gi¶i quyÕt ®óng v trän vÑn cha. Mét logic nh trªn cã thÓ ®îc ¸p dông cho nhiÒu lÜnh vùc kh¸c nhau bao gåm c¶ viÖc lËp tr×nh trªn m¸y tÝnh. Khi t¹o lËp mét ch¬ng tr×nh trong C, cÇn ph¶i tu©n theo mét thø tù cña c¸c bíc sau ®©y: X¸c ®Þnh c¸c môc tiªu cña ch¬ng tr×nh. X¸c ®Þnh c¸c ph¬ng ph¸p cÇn ph¶i sö dông trong khi viÕt ch¬ng tr×nh. T¹o lËp ch¬ng tr×nh ®Ó gi¶i quyÕt b i to¸n. Ch¹y ch¬ng tr×nh ®Ó xem kÕt qña. Chu tr×nh ph¸t triÓn ch¬ng tr×nh Chu tr×nh ph¸t triÓn ch¬ng tr×nh cã c¸c bíc riªng cña nã. Trong bíc thø nhÊt, mét bé so¹n th¶o sÏ ®îc sö dông ®Ó t¹o ra mét tÖp ®Üa chøa c¸c m gèc (source code). T¹i bíc thø hai, c¸c m gèc sÏ ®îc dÞch ®Ó t¹o ra mét tÖp ®Ých (object file). T¹i bíc thø ba, c¸c m ® ®îc dÞch sÏ ®îc kÕt nèi l¹i ®Ó t¹o ra mét tÖp ch¬ng tr×nh cã thÓ ch¹y ®îc (executable file). Cuèi cïng, bíc bèn l ®Ó ch¹y ch¬ng tr×nh v xem kÕt qu¶. T¹o lËp m· gèc C¸c m gèc l mét lo¹t c¸c c©u lÖnh, hoÆc lÖnh chØ thÞ cho m¸y tÝnh thùc hiÖn c¸c c«ng viÖc m ngêi lËp tr×nh mong muèn. VÝ dô, díi ®©y l mét dßng cña m gèc:
  3. printf ("Chµo c¸c b¹n"); LÖnh n y chØ thÞ cho m¸y tÝnh hiÖn trªn m n h×nh th«ng ®iÖp Chµo c¸c b¹n. DÞch c¸c m· gèc C¸c m¸y tÝnh chØ hiÓu ®îc mét ng«n ng÷, ®ã l ng«n ng÷ m¸y (machine language). Bëi vËy, tríc khi mét ch¬ng tr×nh C cã thÓ ch¹y ®îc trªn mét m¸y tÝnh, nã ph¶i ®îc dÞch tõ c¸c m gèc sang m m¸y b»ng mét ch¬ng tr×nh ®îc gäi l ch¬ng tr×nh dÞch (compiler). Ch¬ng tr×nh dÞch lÊy c¸c m gèc l m input v cho ra mét tÖp ®Üa chøa c¸c c©u lÖnh m m¸y t¬ng øng víi c¸c c©u lÖnh m gèc. C¸c c©u lÖnh m m¸y ®îc t¹o ra bëi ch¬ng tr×nh dÞch ®îc gäi l c¸c m ®Ých v tÖp ®Üa chøa chóng ®îc gäi l tÖp ®Ých. TÖp ®Ých cã tªn trïng víi tªn tÖp gèc v lu«n cã ®u«i l OBJ. §u«i OBJ ®Ó chØ r»ng tÖp n y l tÖp ®Ých v sÏ ®îc sö dông bëi ch¬ng tr×nh kÕt nèi (linker). KÕt nèi ®Ó t¹o ra mét tÖp cã thÓ ch¹y ®îc CÇn ph¶i thùc hiÖn thªm mét bíc n÷a th× ch¬ng tr×nh míi cã thÓ ch¹y ®îc. Trong C cã mét bé phËn ®îc gäi l th viÖn. Th viÖn cña C chøa c¸c m ®Ých cña c¸c h m ® ®îc lËp s½n. VÝ dô, h m printf ®îc sö dông trong vÝ dô tríc l mét h m th viÖn. C¸c h m th viÖn thùc hiÖn c¸c c«ng viÖc thêng hay ph¶i dïng ®Õn, ch¼ng h¹n nh hiÖn c¸c th«ng tin lªn m n h×nh, ®äc sè liÖu tõ c¸c tÖp ®Üa. NÕu mét ch¬ng tr×nh cã sö dông c¸c h m th viÖn th× tÖp ®Ých cña nã cÇn ph¶i ®îc kÕt nèi víi m ®Ých cña c¸c h m n y ®Ó t¹o ra mét ch¬ng tr×nh cã thÓ ch¹y ®îc. TÖp n y cã tªn trïng víi tªn tÖp gèc v cã ®u«i l .EXE. Ho n thiÖn chu tr×nh ph¸t triÓn Sau khi dÞch v kÕt nèi cÇn ph¶i ch¹y thö ch¬ng tr×nh. NÕu kÕt qña nhËn ®îc kh«ng nh mong muèn th× cÇn ph¶i t×m ra nguyªn nh©n dÉn ®Õn c¸c sai sãt v söa l¹i ch¬ng tr×nh cho ®óng. Khi cã bÊt kú mét thay ®æi n o trong m gèc, ch¬ng tr×nh ph¶i ®îc dÞch v kÕt nèi l¹i. Chu tr×nh trªn sÏ ph¶i lÆp ®i lÆp l¹i cho ®Õn khi n o nhËn ®îc kÕt qña nh mong muèn. Mét ®iÓm lu ý cuèi cïng vÒ viÖc dÞch v kÕt nèi l , mÆc dï viÖc dÞch v kÕt nèi nh ® tr×nh bÇy trªn ®©y l hai giai ®o¹n t¸ch biÖt nhng nhiÒu ch¬ng tr×nh dÞch, ch¼ng h¹n c¸c ch¬ng tr×nh dÞch ch¹y díi DOS l¹i gép hai bíc trªn th nh mét. Cho dï nh vËy nhng vÉn cø ph¶i hiÓu r»ng ®©y l hai qóa tr×nh riªng rÏ ngay c¶ khi chóng chØ ®îc thùc hiÖn b»ng mét lÖnh. Chu tr×nh ph¸t triÓn mét ch¬ng tr×nh C Bíc 1: Sö dông mét bé so¹n th¶o ®Ó viÕt c¸c m· gèc. Th«ng thêng c¸c tÖp gèc cña C cã ®u«i l .C Bíc 2: Dïng mét ch¬ng tr×nh ®Ó dÞch ch¬ng tr×nh gèc. NÕu ch¬ng tr×nh dÞch kh«ng ph¸t hiÖn mét sai sãt n o trong ch¬ng tr×nh gèc nã sÏ sinh ra mét tÖp ®Ých. TÖp n y cã cïng tªn víi tÖp ch¬ng tr×nh gèc v ®u«i l .OBJ. NÕu ch¬ng
  4. tr×nh dÞch t×m thÊy mét lçi n o ®ã, nã sÏ th«ng b¸o lªn m n h×nh v ta ph¶i trë l¹i tõ bíc mét ®Ó söa c¸c lçi ® ®îc ph¸t hiÖn trong ch¬ng tr×nh gèc. Bíc 3: KÕt nèi ch¬ng tr×nh b»ng bé kÕt nèi. NÕu kh«ng cã lçi, bé kÕt nèi sÏ sinh ra mét tÖp ®Üa cã tªn trïng víi tªn ch¬ng tr×nh ®Ých víi ®u«i .EXE chøa mét ch¬ng tr×nh cã thÓ ch¹y ®îc. Bíc 4: Ch¹y ch¬ng tr×nh. CÇn ph¶i ch¹y thö ch¬ng tr×nh sau khi kÕt thóc bíc 3 ®Ó xem kÕt qña ® ®óng nh mong muèn cha. NÕu cha th× ph¶i quay l¹i tõ bíc 1 v tiÕn h nh c¸c thay ®æi cÇn thiÕt trong m gèc. KÕt luËn C l mét c«ng cô lËp tr×nh m¹nh, th«ng dông v chuyÓn ®æi ®îc. B i n y gi¶i thÝch c¸c b- íc kh¸c nhau trong qóa tr×nh viÕt mét ch¬ng tr×nh C. §ã l chu tr×nh so¹n th¶o/dÞch/kÕt nèi/kiÓm tra. ViÖc m¾c lçi trong khi ph¸t triÓn ch¬ng tr×nh l mét ®iÒu kh«ng thÓ tr¸nh khái. Ch¬ng tr×nh dÞch cña C sÏ ph¸t hiÖn c¸c lçi trong m gèc v hiÖn mét th«ng b¸o lçi vÒ kiÓu lçi v vÞ trÝ cña lçi. C¸c th«ng tin n y gióp ngêi lËp tr×nh söa l¹i m gèc mét c¸ch dÔ d ng. Tuy nhiªn, ch¬ng tr×nh dÞch kh«ng ph¶i lóc n o còng th«ng b¸o ®îc chÝnh x¸c kiÓu cña lçi còng nh vÞ trÝ cña chóng. §«i khi ngêi lËp tr×nh ph¶i vËn dông c¸c kiÕn thøc vÒ C ®Ó ph¸t hiÖn c¸c sai sãt ® g©y ra th«ng b¸o lçi. C©u hái v tr¶ lêi NÕu muèn cho mét ngêi n o ®ã mét ch¬ng tr×nh C th× ph¶i cho tÖp n o? C l mét ng«n ng÷ cã ch¬ng tr×nh dÞch. §iÒu ®ã cã nghÜa l , sau khi m gèc ® ®îc dÞch sÏ ph¸t sinh mét ch¬ng tr×nh cã thÓ ch¹y ®îc. Ch¬ng tr×nh n y cã thÓ tù ch¹y mét m×nh. NÕu muèn chuyÓn CHAO ®Õn nh÷ng ngêi n o ®ã, ®iÒu duy nhÊt cÇn l m l h y chuyÓn cho hä tÖp CHAO.EXE. Hä kh«ng cÇn tÖp gèc CHAO.C, hoÆc tÖp ®Ých CHAO.OBJ v thËm chÝ ngay c¶ ch¬ng tr×nh dÞch C n÷a. Sau khi ® t¹o ®îc tÖp cã thÓ ch¹y ®îc, th× cã cÇn ph¶i gi÷ tÖp gèc hoÆc tÖp ®Ých n÷a kh«ng? NÕu tÖp gèc bÞ mÊt th× sau n y kh«ng cßn c¸ch n o kh¸c ®Ó cã thÓ thay ®æi ®îc ch¬ng tr×nh ® dÞch v kÕt nèi. Do vËy nªn gi÷ l¹i c¸c tÖp gèc. Nhng ®èi víi c¸c tÖp ®Ých th× l¹i kh¸c. Cã mét v i lý do cÇn ph¶i gi÷ l¹i c¸c tÖp ®Ých, tuy nhiªn nÕu nãi ngay b©y giê th× cßn h¬i sím. Do vËy, cã thÓ xãa tÖp ®Ých mét khi ® cã tÖp cã thÓ ch¹y ®îc. NÕu cÇn tÖp ®Ých, cã thÓ dÞch l¹i tõ tÖp gèc. LiÖu cã thÓ bá qua c¸c th«ng b¸o nh¾c nhë kh«ng?
  5. Mét sè th«ng b¸o nh¾c nhë kh«ng l m ¶nh hëng ®Õn viÖc ch¹y cña ch¬ng tr×nh. Mét sè kh¸c l¹i cã. NÕu ch¬ng tr×nh dÞch cho ra mét th«ng b¸o nh¾c nhë, th× ®ã l mét dÊu hiÖu b¸o r»ng cã mét c¸i g× ®ã kh«ng ho n to n ®óng. HÇu hÕt c¸c ch¬ng tr×nh dÞch ®Òu cho phÐp ®Æt møc nh¾c nhë. B»ng c¸ch dã th× chØ nhËn ®îc c¸c nh¾c nhë tõ møc n y trë ®i. Trong ch¬ng tr×nh, cÇn ph¶i xem tõng nh¾c nhë mét v quyÕt ®Þnh nªn kh¾c phôc nã hay l kh«ng. Tèt nhÊt l nªn söa l¹i m gèc sao cho kh«ng cßn mét th«ng b¸o lçi v nh¾c nhë n o. LuyÖn lËp Môc LuyÖn tËp cho c¸c c©u hái ®Ó gióp ngêi ®äc cñng cè l¹i kiÕn thøc cña m×nh v c¸c b i tËp nh»m cung cÊp c¸c kinh nghiÖm khi sö dông nh÷ng ®iÒu ® häc. C©u hái H y nªu ba lý do t¹i sao C l mét lùa chän tèt nhÊt vÒ ng«n ng÷ lËp tr×nh. Ch¬ng tr×nh dÞch l m c«ng viÖc g×? C¸c bíc trong chu tr×nh ph¸t triÓn ch¬ng tr×nh l g×? CÇn ph¶i gâ lÖnh n o ®Ó dÞch mét ch¬ng tr×nh cã tªn PROG1.C b»ng ch¬ng tr×nh dÞch C ? Ch¬ng tr×nh dÞch C kÕt nèi v dÞch b»ng mét lÖnh hay b»ng hai lÖnh riªng rÏ? Nªn dïng ®u«i n o cho c¸c tÖp gèc cña C? FILENAME.TXT cã hîp lÖ cho mét tÖp gèc cña C kh«ng? NÕu mét ch¬ng tr×nh ® ®îc dÞch v nã kh«ng l m viÖc nh mong muèn, th× nªn l m nh thÕ n o? M m¸y l g×? Bé kÕt nèi l m c«ng viÖc g×? B i tËp H y nhËp v dÞch ch¬ng tr×nh sau ®©y. Ch¬ng tr×nh n y l m viÖc g×? (kh«ng viÕt c¸c sè hiÖu dßng khi so¹n ch¬ng tr×nh) include int bankinh, dientich; main()
  6. { printf( "NhËp b¸n kÝnh: " ); scanf( "%d", &bankinh ); dientich = 3.14159 * bankinh * bankinh; printf( "\n\nDiÖn tÝch = %d", dientich ); return 0; } 2. NhËp v dÞch ch¬ng tr×nh sau. Ch¬ng tr×nh n y l m viÖc g×? #include int x,y; main() { for ( x = 0; x < 10; x++, printf( "\n" ) ) for ( y = 0; y < 10; y++ ) printf( "X" ); return 0; } 3. Ch¬ng tr×nh sau ®©y cã mét vÊn ®Ò. H y nhËp v dÞch nã. C¸c dßng n o sinh ra th«ng b¸o lçi? #include main(); { printf( "H·y nh×n xem!" ) printf( "B¹n sÏ t×m thÊy nã!" );
  7. return 0; } 4. Ch¬ng tr×nh sau ®©y còng cã mét vÊn ®Ò. H y nhËp v dÞch nã. C¸c dßng n o sinh ra th«ng b¸o lçi? #include main() { printf( "§©y lµ mét ch¬ng tr×nh" ) do_it( "cã lçi!" ); return 0; } 5. Thay lÖnh sè 9 trong ch¬ng tr×nh ë b i tËp 2 nh díi ®©y. DÞch v ch¹y l¹i ch¬ng tr×nh. B©y giê ch¬ng tr×nh n y l m g×? 9: printf( "%c", 1 ); Bµi 2. C¸c thµnh phÇn cña mét ch¥ng tr×nh C Mäi ch¬ng tr×nh C ®Òu chøa mét sè c¸c th nh phÇn ®îc liªn kÕt víi nhau theo mét c¸ch nhÊt ®Þnh. §Ó cã mét bøc tranh tæng thÓ, tríc hÕt nªn b¾t ®Çu xÐt mét ch¬ng tr×nh C ng¾n nhng ho n chØnh víi tÊt c¶ c¸c th nh phÇn cña nã. Mét ch¬ng tr×nh C ng¾n Chong tr×nh 2.1 l m gèc cña mét ch¬ng tr×nh cã tªn l NHAN.C. §©y l mét ch¬ng tr×nh rÊt ®¬n gi¶n: nã chØ bao gåm viÖc nhËp hai sè tõ b n phÝm v tÝnh tÝch cña chóng. ë ®©y cha cÇn ph¶i hiÓu tÊt c¶ c¸c lÖnh cña ch¬ng tr×nh, m chñ yÕu l l m quen víi c¸c th nh phÇn cña mét ch¬ng tr×nh C m th«i.
  8. Tríc khi xÐt chi tiÕt ch¬ng tr×nh n y, cÇn ph¶i hiÓu râ kh¸i niÖm vÒ h m (function), v× h m l mét yÕu tè c¬ b¶n trong viÖc lËp tr×nh C. Mét h m l mét bé phËn ®éc lËp cña ch- ¬ng tr×nh, ®îc ®Æt tªn v thùc hiÖn mét c«ng viÖc n o ®ã. B»ng viÖc gäi tªn mét h m, ch- ¬ng tr×nh chÝnh cã thÓ thùc hiÖn c¸c lÖnh trong h m n y. Ch¬ng tr×nh chÝnh cã thÓ göi c¸c th«ng tin, ®îc gäi l ®èi sè (argument), cho h m, v h m cã thÓ ®a ra c¸c th«ng tin cho ch¬ng tr×nh. Cã hai kiÓu h m: c¸c h m th viÖn - mét bé phËn cña ch¬ng tr×nh dÞch cña C; v c¸c h m do ngêi sö dông tù ®Þnh nghÜa. Ch¬ng tr×nh 2.1. NHAN.C. 1: /* Ch¬ng tr×nh tÝnh tÝch cña hai sè. */ 2: #include 3: int a,b,c; 4: int tich(int x, int y); 5: main() 6: { 7: /* NhËp sè thø nhÊt */ 8: printf("NhËp mét sè n»m gi÷a 1 vµ 100: "); 9: scanf("%d", &a); 10 11: /* NhËp sè thø hai */ 12: printf("NhËp mét sè kh¸c n»m gi÷a 1 vµ 100: "); 13: scanf("%d", &b); 14: 15: /* TÝnh vµ hiÖn kÕt qña */ 16: c = tich(a,b); 17: printf( "\n%d nh©n %d = %d", a, b, c); 18: }
  9. 19: 20: /* Hµm tÝnh tÝch cña hai ®èi sè */ 21: int tich(int x, int y) 22: { 23: return ( x * y ); 24: } Ch¬ng tr×nh n y sÏ hiÖn trªn m n h×nh c¸c dßng kÕt qña sau: NhËp mét sè n»m gi÷a 1 vµ 100: 35 NhËp mét sè kh¸c n»m gi÷a 1 vµ 100: 23 35 nh©n 23 = 805 C¸c th nh phÇn cña ch¬ng tr×nh Sau ®©y l m« t¶ cña c¸c th nh phÇn kh¸c nhau cña ch¬ng tr×nh mÉu nãi trªn. C¸c sè hiÖu dßng kh«ng ph¶i l th nh phÇn cña ch¬ng tr×nh m chØ ®îc ®a v o ®Ó tiÖn viÖc theo dâi v ph©n tÝch. H m main() (C¸c dßng 5-18) Bé phËn duy nhÊt cÇn ph¶i cã trong mäi ch¬ng tr×nh C l h m main(). D¹ng ®¬n gi¶n nhÊt cña nã l : tªn h m main theo sau l mét cÆp dÊu ngoÆc trßn ( ) v mét cÆp dÊu ngoÆc nhän { } . N»m gi÷a c¸c dÊu ngoÆc nhän l c¸c lÖnh t¹o nªn th©n chÝnh cña ch¬ng tr×nh. Díi ®iÒu kiÖn b×nh thêng, ch¬ng tr×nh sÏ b¾t ®Çu thùc hiÖn tõ lÖnh thø nhÊt trong main() v kÕt thóc b»ng lÖnh cuèi cïng trong main(). ChØ thÞ #include (Dßng 2) ChØ thÞ #include b¸o cho ch¬ng tr×nh dÞch cña C biÕt ph¶i thªm v o ch¬ng tr×nh mét tÖp trong khi dÞch. Mét tÖp ®îc thªm v o l mét tÖp ®Üa riªng biÖt chøa c¸c th«ng tin cÇn thiÕt cho ch¬ng tr×nh dÞch. Mét sè tÖp trong c¸c tÖp n y (®«i khi cßn gäi l c¸c tÖp tiªu ®Ò - header files) ®îc cung cÊp cïng víi ch¬ng tr×nh dÞch. TÊt c¶ c¸c tÖp n y ®Òu cã ®u«i l .H. ChØ thÞ #include trong vÝ dô n y cã nghÜa l "Céng thªm néi dung cña tÖp stdio.h". HÇu hÕt c¸c ch¬ng tr×nh C ®Òu yªu cÇu mét hoÆc nhiÒu tÖp céng thªm.
  10. §Þnh nghÜa biÕn Mét biÕn l mét tªn gäi cho mét ®¹i lîng hoÆc mét ®èi tîng n o ®ã. Mçi biÕn ®Òu ®îc ph©n bæ mét ®Þa chØ trong bé nhí. Ch¬ng tr×nh C sö dông c¸c biÕn ®Ó lu gi÷ c¸c lo¹i d÷ liÖu kh¸c nhau trong qu¸ tr×nh thùc hiÖn ch¬ng tr×nh. Trong C, mét biÕn chØ cã thÓ ®îc sö dông sau khi ® ®îc ®Þnh nghÜa. Mét ®Þnh nghÜa biÕn cho ch¬ng tr×nh dÞch biÕt tªn cña biÕn v kiÓu cña d÷ liÖu m nã lu gi÷. Trong vÝ dô mÉu, ®Þnh nghÜa ë dßng 3, int a,b,c, ®Þnh nghÜa ba biÕn cã tªn l a, b, v c v mçi biÕn sÏ chøa mét gi¸ trÞ nguyªn (integer). Trong B i 3 sÏ nãi râ h¬n vÒ c¸c biÕn v c¸c ®Þnh nghÜa biÕn. Khai b¸o h m (Dßng 4) Mét khai b¸o h m cho ch¬ng tr×nh dÞch biÕt tªn v ®èi sè cña h m sÏ ®îc sö dông trong ch¬ng tr×nh. Khai b¸o n y ph¶i xuÊt hiÖn tríc khi h m ®îc sö dông. Khai b¸o h m kh¸c víi ®Þnh nghÜa h m. Mét ®Þnh nghÜa h m chøa c¸c lÖnh t¹o ra h m ®ã. C¸c lÖnh ch¬ng tr×nh (C¸c dßng 8, 9, 12, 13, 16, 17, 23) C«ng viÖc thùc sù cña mét ch¬ng tr×nh C ®îc thùc hiÖn bëi c¸c lÖnh cña nã. C¸c lÖnh cña C l : hiÖn c¸c th«ng tin trªn m n h×nh, ®äc c¸c phÝm ®îc gâ v o tõ b n phÝm, thùc hiÖn c¸c phÐp sè häc, gäi c¸c h m, ®äc c¸c tÖp ®Üa, v tÊt c¶ c¸c thao t¸c kh¸c m mét ch¬ng tr×nh cÇn ph¶i thùc hiÖn. Tõ b i n y trë ®i, mçi mét lÖnh C ®îc viÕt riªng trªn mét dßng v lu«n lu«n ®îc kÕt thóc b»ng mét dÊu chÊm phÈy (;). Sau ®©y l c¸c gi¶i thÝch ng¾n gän cho c¸c lÖnh cña ch¬ng tr×nh NHAN.C. printf() LÖnh printf() (c¸c dßng 8, 12, v 17) l mét h m th viÖn dïng ®Ó hiÖn th«ng tin lªn m n h×nh. LÖnh n y cã thÓ dïng ®Ó hiÖn mét th«ng b¸o v¨n b¶n ®¬n gi¶n (nh ë dßng 8 v 12) hoÆc mét th«ng b¸o v mét hoÆc nhiÒu biÕn ch¬ng tr×nh (nh ë dßng 17). scanf() LÖnh scanf() (c¸c dßng 9 v 13) còng l mét h m th viÖn dïng ®Ó ®äc d÷ liÖu tõ b n phÝm v g¸n d÷ liÖu n y cho mét hoÆc nhiÒu biÕn ch¬ng tr×nh. c = tich (a, b); LÖnh n y gäi mét h m cã tªn l tich().NghÜa l , nã thùc hiÖn c¸c lÖnh ch¬ng tr×nh chøa trong h m tich(). Nã cßn göi c¸c ®èi sè a v b cho h m. Sau khi c¸c lÖnh trong h m tich() ®îc ho n tÊt, tich() cßn ®a ra mét gi¸ trÞ cho ch¬ng tr×nh. Gi¸ trÞ n y ®- îc lu gi÷ trong biÕn cã tªn l c. return (x * y);
  11. LÖnh n y l mét bé phËn cña h m tich(). Nã tÝnh tÝch cña c¸c biÕn x v y råi chuyÓn kÕt qña cho ch¬ng tr×nh ® gäi tich(). §Þnh nghÜa h m (C¸c dßng 21-24) Mét h m l mét ®o¹n m gèc ®éc lËp thùc hiÖn mét nhiÖm vô nhÊt ®Þnh. Mçi h m ®Òu cã mét tªn, v c¸c m gèc cña h m n y ®îc thùc hiÖn mçi khi tªn h m ®îc gäi trong mét ch- ¬ng tr×nh. H m cã tªn tich() ë c¸c dßng 21-24 l mét h m do ngêi sö dông tù ®Þnh nghÜa v tù viÕt trong qu¸ tr×nh ph¸t triÓn ch¬ng tr×nh. H m n y rÊt ®¬n gi¶n: nã chØ l m mçi mét viÖc l nh©n hai gi¸ trÞ víi nhau v ®a kÕt qña cho ch¬ng tr×nh ® gäi nã. C cßn cã c¸c h m th viÖn ®îc cung cÊp cïng víi ch¬ng tr×nh dÞch. C¸c h m th viÖn thùc hiÖn hÇu hÕt c¸c c«ng viÖc c¬ b¶n nhÊt (nh c¸c thao t¸c trªn m n h×nh, b n phÝm, ®äc/ghi ®Üa) m mét ch¬ng tr×nh cÇn ®Õn. Trong vÝ dô n y, printf() v scanf() l c¸c h m th viÖn. C¸c chó thÝch trong ch¬ng tr×nh (C¸c dßng 1, 7, 11, 15, 20) BÊt kú phÇn n o m khëi ®Çu b»ng /* v kÕt thóc b»ng */ ®Òu ®îc gäi l mét chó thÝch. Ch¬ng tr×nh dÞch bá qua tÊt c¶ c¸c chó thÝch v nh vËy th× chóng tuyÖt ®èi kh«ng ¶nh h- ëng ®Õn sù ho¹t ®éng cña mét ch¬ng tr×nh. Cã thÓ viÕt bÊt cø thø g× trong mét chó thÝch v nã sÏ kh«ng ¶nh hëng ®Õn ho¹t ®éng cña ch¬ng tr×nh. Mét chó thÝch cã thÓ chØ chiÕm mét phÇn n o ®ã cña mét dßng, to n bé mét dßng, hoÆc còng cã thÓ nhiÒu dßng. Tuy nhiªn, kh«ng nªn lång chó thÝch n y trong mét chó thÝch kh¸c. HÇu hÕt c¸c ch¬ng tr×nh dÞch ®Òu kh«ng chÊp nhËn lo¹i h×nh n y. NhiÒu ngêi míi b¾t ®Çu häc lËp tr×nh cho r»ng kh«ng cÇn ®Õn chó thÝch v l m nh vËy l mÊt th× giê. Thùc ra th× kh«ng h¼n l nh vËy. C¸c thao t¸c trong ch¬ng tr×nh cã thÓ rÊt râ r ng v dÔ theo dâi trong khi ®ang viÕt. Nhng khi ch¬ng tr×nh trë nªn d i h¬n v phøc t¹p dÇn lªn, hoÆc khi cÇn ph¶i söa ®æi mét ch¬ng tr×nh ® viÕt tõ nhiÒu th¸ng tríc th× c¸c chó thÝch thËt l cã gi¸ trÞ. Râ r ng l cÇn ph¶i t¹o ra mét thãi quen dïng c¸c chó thÝch ®Ó l m s¸ng tá tÊt c¶ c¸c cÊu tróc v c¸c ho¹t ®éng trong ch¬ng tr×nh. C¸c dÊu ngoÆc nhän (C¸c dßng 6, 18, 22, 24) C¸c dÊu ngoÆc nhän ({ } ) dïng ®Ó nhãm c¸c dßng lÖnh th nh mét khèi. C¸c lÖnh cña mét h m, kÓ c¶ h m main(), ph¶i ®îc ®Ó trong c¸c dÊu ngoÆc n y. Ch¹y ch¬ng tr×nh ChuyÓn v o th môc chøa ch¬ng tr×nh dÞch C.
  12. Khëi ®éng bé so¹n th¶o. NhËp m gèc cña NHAN.C (lu ý, kh«ng nhËp c¸c sè hiÖu dßng). CÊt gi÷ tÖp ch¬ng tr×nh. DÞch v kÕt nèi ch¬ng tr×nh b»ng c¸ch ra c¸c lÖnh thÝch hîp víi ch¬ng tr×nh dÞch hiÖn cã. NÕu kh«ng cã sai sãt g× trong qóa tr×nh dÞch còng nh kÕt nèi, ch¹y ch¬ng tr×nh b»ng lÖnh run, hoÆc b»ng c¸ch gâ nhan t¹i dÊu nh¾c cña DOS. NÕu xuÊt hiÖn mét hoÆc nhiÒu th«ng b¸o lçi, quay l¹i tõ bíc hai v söa c¸c lçi ® m¾c ph¶i. KÕt luËn B i n y tuy ng¾n nhng rÊt quan träng. Nã cho biÕt cÊu tróc v c¸c th nh phÇn cña mét ch- ¬ng tr×nh C. Bé phËn duy nhÊt m mét ch¬ng tr×nh C yªu cÇu l h m main(). C«ng viÖc thùc sù cña ch¬ng tr×nh ®îc thùc hiÖn bëi c¸c lÖnh ch¬ng tr×nh. C¸c lÖnh n y híng dÉn cho m¸y tÝnh thùc hiÖn c¸c h nh ®éng m ch¬ng tr×nh mong muèn. B i n y cßn nãi vÒ c¸c biÕn v c¸c ®Þnh nghÜa biÕn, v chØ ra lîi Ých cña viÖc sö dông c¸c chó thÝch v c¸ch dïng chóng. Ngo i h m main() ra, mét ch¬ng tr×nh C cßn cã thÓ sö dông hai kiÓu h m kh¸c: c¸c h m th viÖn ®îc cung cÊp cïng víi bé ch¬ng tr×nh dÞch v c¸c h m do ngêi sö dông tù ®Þnh nghÜa. C©u hái v tr¶ lêi C¸c chó thÝch cã t¸c ®éng g× trªn mét ch¬ng tr×nh? C¸c chó thÝch l ®Ó cho ngêi lËp tr×nh. Khi ch¬ng tr×nh dÞch chuyÓn c¸c m gèc th nh c¸c m ®Ých, nã sÏ vøt bá c¸c chó thÝch v c¸c vïng tr¾ng. §iÒu ®ã cã nghÜa l chóng kh«ng hÒ cã mét t¸c ®éng n o lªn ch¬ng tr×nh cã thÓ ch¹y ®îc. C¸c chó thÝch cã l m cho ch¬ng tr×nh gèc d i h¬n, nhng ®iÒu ®ã còng kh«ng ®¸ng kÓ l¾m. VÒ l©u d i, nªn sö dông c¸c chó thÝch v c¸c kho¶ng trèng ®Ó ch¬ng tr×nh gèc dÔ ®äc v dÔ hiÓu h¬n. Sù kh¸c nhau gi÷a mét lÖnh v mét khèi l g×? Mét khèi l mét nhãm c¸c lÖnh ®îc ®Æt gi÷a c¸c dÊu ngoÆc nhän. Mét khèi cã thÓ ®îc sö dông ë hÇu hÕt c¸c vÞ trÝ m t¹i ®ã cã thÓ sö dông mét lÖnh. L m thÕ n o ®Ó t×m thÊy danh s¸ch c¸c h m th viÖn cã thÓ sö dông? NhiÒu ch¬ng tr×nh dÞch cã kÌm theo t i liÖu m« t¶ c¸c h m th viÖn. Chóng thêng ®îc xÕp theo thø tù tõ ®iÓn.
  13. LuyÖn tËp C©u hái ThuËt ng÷ n o dïng ®Ó chØ mét nhãm cña mét hoÆc nhiÒu lÖnh C ®îc ®Ó gi÷a c¸c dÊu ngoÆc nhän? Th nh phÇn n o ph¶i lu«n lu«n cã mÆt trong mét ch¬ng tr×nh C? L m thÕ n o ®Ó thªm v o c¸c chó thÝch ch¬ng tr×nh v t¹i sao ph¶i dïng chóng? Mét h m l g×? Trong C cã hai kiÓu h m. C¸c hiÓu ®ã l kiÓu g× v chóng kh¸c nhau nh thÕ n o? ChØ thÞ #include dïng ®Ó l m g×? B i tËp I. H y viÕt mét ch¬ng tr×nh C ng¾n nhÊt. II. Dïng ch¬ng tr×nh sau ®©y ®Ó tr¶ lêi cho c¸c c©u hái sau: A. C¸c dßng n o chøa c¸c lÖnh? B. C¸c dßng n o chøa c¸c ®Þnh nghÜa biÕn? C. C¸c dßng n o chøa c¸c khai b¸o h m? D. C¸c dßng n o chøa c¸c ®Þnh nghÜa h m? E. C¸c dßng n o chøa c¸c chó thÝch? /* BT2-2.C */ #include void in_dong(void); main() { in_dong(); printf("\n Tù d¹y ch¬ng tr×nh C trong 21 ngµy!\n";
  14. in_dong(); return 0} /* In mét dßng dÊu sao */ void in_dong(void) { int dem; ++ for(dem = 0; dem = 21; dem ) printf("*"); } /* kÕt thóc ch¬ng tr×nh */ III. Ch¬ng tr×nh sau ®©y l m viÖc g×? /*BT2-3.C */ #include main() { int ctr; for ( ctr=65; ctr,91; ctr++ ); printf( "%c", ctr ); return 0; } /* kÕt thóc ch¬ng tr×nh */ IV. Ch¬ng tr×nh sau ®©y l m viÖc g×? /* BT2-4.C */
  15. #include main() { char buffer(256); printf( "H·y viÕt tªn cña b¹n vµ Ên :\n"; gets(buffer); printf( "\nTªn cña b¹n cã %d ch÷ c¸i vµ dÊu cÊch!", strlen( bufferr); return 0; } Bµi 3. C¸c biÕn vµ c¸c h»ng C¸c ch¬ng tr×nh m¸y tÝnh thêng l m viÖc víi c¸c kiÓu d÷ liÖu kh¸c nhau v cÇn mét c¸ch n o ®ã ®Ó lu gi÷ c¸c gi¸ trÞ sÏ ph¶i sö dông. C¸c gi¸ trÞ n y cã thÓ l c¸c sè hoÆc c¸c ký tù. C cã hai c¸ch ®Ó lu gi÷ c¸c gi¸ trÞ sè - biÕn (variable) v h»ng (contstant) - víi nhiÒu tuú chän kh¸c nhau cho mçi c¸ch. Mét biÕn l mét tªn gäi v ®îc ph©n bæ mét ®Þa chØ lu tr÷. §Þa chØ n y ®îc dïng ®Ó lu gi÷ gi¸ trÞ cña biÕn. Gi¸ trÞ n y cã thÓ thay ®æi trong khi ch¬ng tr×nh thùc hiÖn. Ngîc l¹i, mét h»ng cã mét gi¸ trÞ cè ®Þnh kh«ng ®îc thay ®æi. Tríc khi ®i v o c¸c biÕn, cÇn biÕt qua mét chót vÒ sù ho¹t ®éng cña bé nhí m¸y tÝnh. Bé nhí cña m¸y tÝnh M¸y tÝnh dïng mét bé nhí truy nhËp ngÉu nhiªn (random access memory - RAM) ®Ó lu gi÷ th«ng tin trong khi ®ang ho¹t ®éng. RAM ®îc ®Æt trong c¸c m¹ch tÝch hîp, hay cßn gäi l chip, n»m bªn trong m¸y tÝnh. C¸c th«ng tin lu trong RAM thêng xuyªn cã thÓ bÞ xãa v ®îc thay thÕ b»ng c¸c th«ng tin míi. Ngo i ra RAM chØ nhí th«ng tin khi m¸y ®ang ch¹y v c¸c th«ng tin sÏ bÞ mÊt khi t¾t m¸y. Mét byte l ®¬n vÞ c¬ b¶n cña bé nhí d÷ liÖu cña m¸y tÝnh. C¸c kiÓu d÷ liÖu kh¸c nhau ®- îc lu gi÷ b»ng c¸c sè lîng byte kh¸c nhau. B¶ng 3.1. cho thÊy sù kh¸c nhau n y.
  16. B¶ng 3.1. Sè lîng bytes cÇn thiÕt ®Ó lu gi÷ d÷ liÖu D÷ liÖu Sè bytes cÇn thiÕt Ch÷ c¸i x 1 Sè 100 2 Sè 120.145 4 Côm tõ Tù häc ng«n ng÷ C 17 Mét trang ®¸nh m¸y 3000 (gÇn ®óng) RAM trong m¸y tÝnh ®îc tæ chøc theo kiÓu tuÇn tù, byte n y tiÕp byte kia. Mçi byte cã mét ®Þa chØ duy nhÊt ®Ó ®Þnh danh cho nã v ph©n biÖt nã víi tÊt c¶ c¸c byte kh¸c trong bé nhí. C¸c ®Þa chØ ®îc g¸n cho c¸c vÞ trÝ bé nhí mét c¸ch tuÇn tù, khëi ®Çu tõ 0 cho ®Õn hÕt bé nhí cña m¸y. C¸c biÕn Mét biÕn l mét tªn gäi v ®îc ph©n bæ mét ®Þa chØ lu tr÷. §Þa chØ n y ®îc dïng ®Ó lu gi÷ gi¸ trÞ cña biÕn. Gi¸ trÞ n y cã thÓ thay ®æi trong khi ch¬ng tr×nh thùc hiÖn. C¸c tªn biÕn Trong C, c¸c tªn biÕn ph¶i tu©n theo c¸c qui t¾c sau: Tªn biÕn cã thÓ chøa c¸c ch÷, c¸c ch÷ sè v dÊu g¹ch díi (_). Ký tù ®Çu tiªn cña tªn ph¶i l mét ch÷. Cã thÓ dïng dÊu g¹ch díi nh l ký tù ®Çu tiªn, nh- ng kh«ng nªn l m nh vËy v× xem ra kh«ng ®îc hîp lý cho l¾m. Ch÷ hoa v ch÷ thêng l kh¸c nhau. Tøc l , Count v count l hai biÕn kh¸c nhau. C¸c tõ gi nh riªng (keyword) cña C kh«ng ®îc sö dông l m tªn biÕn. Mét keyword l mét tõ m C sö dông nh l mét th nh phÇn cña nã. Sau ®©y l mét sè vÝ dô vÒ c¸c tªn biÕn hîp lÖ v kh«ng hîp lÖ trong C: phantram /* hîp lÖ */ y2x5_fg7h /* hîp lÖ */ loinhuan_hangnam /* hîp lÖ */ _1995_thue /* hîp lÖ, nhng kh«ng nªn dïng */ Taikhoan#tk /* kh«ng hîp lÖ, v× ký tù # kh«ng hîp lÖ */
  17. double /* kh«ng hîp lÖ, v× lµ keyword cña C */ 9thang /* kh«ng hîp lÖ, v× ký tù ®Çu tiªn lµ sè */ V× C ph©n biÖt ch÷ hoa víi ch÷ thêng, nªn phantram, Phantram, v PHANTRAM l tªn cña ba biÕn kh¸c nhau. Dï r»ng kh«ng b¾t buéc, nhng c¸c tªn biÕn trong C thêng ®îc viÕt b»ng ch÷ thêng, cßn tªn cña c¸c h»ng th× ®îc viÕt b»ng ch÷ hoa. §èi víi nhiÒu ch¬ng tr×nh dÞch, mét tªn biÕn cña C cã thÓ d i tíi 31 ký tù. Víi ®é d i nh vËy, cã thÓ t¹o ra c¸c tªn biÕn nãi lªn ®îc ý nghÜa cña d÷ liÖu ®îc lu gi÷ trong chóng. C¸c tªn cã bao h m ý nghÜa thêng gåm nhiÒu tõ. Cã thÓ dïng dÊu g¹ch díi ®Ó ph©n c¸ch c¸c tõ hoÆc c¸c côm tõ víi nhau cho dÔ hiÓu. Cßn mét kiÓu kh¸c gäi l bíu l¹c ® . Thay cho dÊu c¸ch, ngêi ta viÕt hoa ch÷ ®Çu tiªn cña mçi tõ. VÝ dô, TyLeLaiSuat, hoÆc TyleLaisuat. KiÓu n y cã vÎ thuËn tiÖn h¬n v× kh«ng ph¶i gâ thªm dÊu g¹ch díi. C¸c kiÓu biÕn sè C cung cÊp mét sè kiÓu biÕn sè kh¸c nhau. T¹i sao l¹i ph¶i cÇn mét sè kiÓu biÕn kh¸c nhau? §ã l v×, c¸c gi¸ trÞ sè kh¸c nhau yªu cÇu sè bytes ®Ó lu gi÷ kh¸c nhau v c¸c phÐp to¸n sè häc cã thÓ thùc hiÖn trªn chóng còng kh¸c nhau. C¸c sè nguyªn nhá (vÝ dô, 1, 19, -8) yªu cÇu Ýt byte ®Ó lu gi÷, v c¸c phÐp to¸n sè häc (céng, nh©n, v.v.) trªn c¸c sè n y cã thÓ ®îc thùc hiÖn rÊt nhanh b»ng m¸y tÝnh. Ngîc l¹i, nh÷ng sè nguyªn lín v c¸c sè dÊu chÊm ®éng (vÝ dô, 123000000 hoÆc 0.000000345213) yªu cÇu nhiÒu bytes h¬n v thêi gian tÝnh to¸n víi chóng còng l©u h¬n. B»ng c¸ch dïng c¸c kiÓu biÕn sè thÝch hîp, ch¬ng tr×nh sÏ ch¹y mét c¸ch hiÖu qña h¬n. C¸c biÕn sè cña C r¬i v o hai nhãm chÝnh sau ®©y: C¸c biÕn nguyªn (interger) dïng ®Ó lu gi÷ c¸c gi¸ trÞ kh«ng cã phÇn thËp ph©n. C¸c biÕn nguyªn l¹i ph©n th nh hai líp: biÕn nguyªn cã dÊu ®Ó ghi c¸c gi¸ trÞ nguyªn d¬ng v nguyªn ©m; biÕn nguyªn kh«ng dÊu chØ ®Ó ghi c¸c gi¸ trÞ kh«ng ©m (bao gåm c¶ sè 0). C¸c biÕn dÊu chÊm ®éng (Floating-point) gi÷ c¸c gi¸ trÞ cã phÇn thËp ph©n (sè thùc). Lu ý mét ®iÓm l , tríc ®©y ta vÉn quen dïng dÊu phÈy ®Ó ng¨n c¸ch phÇn nguyªn v phÇn ph©n cña mét sè, nªn míi cã tªn gäi dÊu phÈy ®éng, nay theo chuÈn cña ANSI th× ngêi ta dïng dÊu chÊm thËp ph©n, bëi vËp míi cã tªn gäi dÊu chÊm ®éng. Tõ nay trë ®i sÏ dïng dÊu chÊm thËp ph©n thay cho dÊu phÈy thËp ph©n. Cßn dÊu phÈy ®îc dïng l m dÊu ng¨n c¸ch h ng ngh×n, h ng triÖu, h ng tû, v.v. B¶ng 3.2. C¸c kiÓu d÷ liÖu sè cña C KiÓu biÕn Keyword S« bytes MiÒn gi¸ trÞ ký tù char 1 -128 ®Õn 127
  18. nguyªn int 2 -32768 ®Õn 32767 nguyªn ng¾n short 2 -32768 ®Õn 32767 nguyªn d i long 4 -2147483648 ®Õn 2147483647 ký tù kh«ng dÊu unsigned char 1 0 ®Õn 255 nguyªn kh«ng dÊu unsigned int 2 0 ®Õn 65535 nguyªn ng¾n kh. dÊu unsigned short 2 0 ®Õn 65535 nguyªn d i kh. dÊu unsigned long 4 0 ®Õn 4294967295 dÊu chÊm ®éng float 4 1.2E-38 ®Õn 3.4E38* ®é chÝnh x¸c ®¬n dÊu chÊm ®éng float 8 2.2E-308 ®Õn 1.8E308** ®é chÝnh x¸c gÊp ®«i * MiÒn gÇn ®óng; ®é chÝnh x¸c= 7 ch÷ sè. ** MiÒn gÇn ®óng; ®é chÝnh x¸c= 19 ch÷ sè. MiÒn gÇn ®óng trong b¶ng n y cã nghÜa l c¸c gi¸ trÞ cao nhÊt v thÊp nhÊt m mét biÕn ® cho cã thÓ nhËn. §é chÝnh x¸c nghÜa l ®óng ®Õn bao nhiªu ch÷ sè cña gi¸ trÞ ®îc ghi trong biÕn ® cho. (VÝ dô, nÕu tÝnh 1/3, th× kÕt qña ®óng l 0.333333.... víi c¸c sè 3 cø tiÕp tôc ®Õn v« h¹n. Mét biÕn víi ®é chÝnh x¸c ®¬n chØ ghi ®îc 7 con 3.) Trong b¶ng n y, c¸c kiÓu int v short int l gièng nhau. Nhng t¹i sao l¹i ph¶i cã hai kiÓu kh¸c nhau nh vËy? C¸c kiÓu biÕn int v short int l gièng hÖt nhau trªn c¸c hÖ thèng t¬ng thÝch víi c¸c m¸y tÝnh IBM-PC 16-bit, nhng chóng cã thÓ sÏ kh¸c nhau trªn c¸c phÇn cøng kiÓu kh¸c. Trªn mét hÖ VAX, mét biÕn short v mét biÕn int kh«ng cïng cì víi nhau. Mét biÕn short chiÕm 2 bytes, nhng mét biÕn int l¹i chiÕm nh÷ng 4 bytes. Do vËy, ®èi víi c¸c m¸y PC, hai kiÓu n y l nh nhau. C¸c khai b¸o biÕn Mäi biÕn cÇn ph¶i ®îc khai b¸o tríc khi ®îc ®em ra sö dông. Mét khai b¸o biÕn cho ch- ¬ng tr×nh dÞch biÕt tªn v kiÓu cña mét biÕn v cã thÓ khëi t¹o cho biÕn mét gi¸ trÞ n o ®ã. Mét khai b¸o biÕn cã d¹ng sau: tªnkiÓu tªnbiÕn TªnkiÓu x¸c ®Þnh kiÓu cña biÕn v ph¶i l mét trong c¸c keyword ® cho trong B¶ng 3.2. TªnbiÕn l tªn cña biÕn ®îc ®Æt theo c¸c qui t¾c ® nãi ë phÇn tríc. Cã thÓ khai b¸o nhiÒu biÕn cïng mét kiÓu trªn mét dßng, mçi biÕn c¸ch nhau b»ng mét dÊu phÈy. VÝ dô:
  19. int tuoi, luong, con; /* ba biÕn nguyªn */ float phantram, tong; /* hai biªn ®éng */ Keyword typedef Tõ khãa typedef ®îc sö dông ®Ó t¹o lËp mét tªn míi cho mét kiÓu d÷ liÖu ® cã. Nãi mét c¸ch chÝnh x¸c, typedef t¹o ra mét kiÓu ®ång nghÜa. VÝ dô, lÖnh typedef int integer; t¹o ra kiÓu integer tõ kiÓu int. Sau ®ã, cã thÓ dïng integer ®Ó ®Þnh nghÜa c¸c biÕn kiÓu int. Khëi t¹o c¸c biÕn sè Khi mét biÕn ®îc khai b¸o, ch¬ng tr×nh dÞch sÏ d nh ra mét vïng nhí cho biÕn n y. Tuy nhiªn, gi¸ trÞ ®îc nhí t¹i vïng n y cha ®îc x¸c ®Þnh. Nã cã thÓ l 0, hoÆc cã thÓ l mét gi¸ trÞ ngÉu nhiªn n o ®ã cßn l¹i sau khi vïng n y ®îc gi¶i phãng. Bëi vËy, tríc khi mét biÕn ®îc sö dông, nã ph¶i ®îc khëi t¹o b»ng mét gi¸ trÞ x¸c ®Þnh n o ®ã. ViÖc n y cã thÓ thùc hiÖn ho n to n ®éc lËp víi viÖc khai b¸o biÕn b»ng c¸ch dïng mét lÖnh g¸n. VÝ dô: int count; /* Dµnh mét vïng nhí cho biÕn count */ count = 0; /* Ghi 0 vµo count */ Cã thÓ khëi t¹o mét biÕn ngay khi khai b¸o b»ng c¸ch viÕt dÊu b»ng v gi¸ trÞ khëi t¹o sau tªn biÕn. VÝ dô int count = 0; double phantram = 0.01, tyle_thue = 20.5; C¸c h»ng Gièng nh mét biÕn, mét h»ng còng l mét tªn gäi v còng ®îc ph©n bæ mét ®Þa chØ trong bé nhí. Nhng kh«ng gièng nh mét biÕn, gi¸ trÞ ®îc ghi trong mét h»ng kh«ng ®îc thay ®æi trong qu¸ tr×nh thùc hiÖn cña ch¬ng tr×nh. C cã hai kiÓu h»ng, mçi kiÓu l¹i cã c¸c c¸ch sö dông kh¸c nhau. C¸c h»ng thùc sù (literal constant) Mét h»ng literal l mét gi¸ trÞ ®îc gâ trùc tiÕp v o ch¬ng tr×nh gèc bÊt cø khi n o nã ®îc cÇn ®Õn. §©y l hai thÝ dô: int count = 20;
  20. float tyle_thue = 0.20; C¸c gi¸ trÞ 20 v .20 l c¸c h»ng literal. C¸c lÖnh trªn lu gi÷ c¸c gi¸ trÞ n y v o c¸c biÕn count v tyle_thue. Mét h»ng literal víi dÊu chÊm thËp ph©n l mét h»ng dÊu chÊm ®éng v ®îc ch¬ng tr×nh dÞch C xem nh mét sè cã ®é chÝnh x¸c gÊp ®«i. Mét h»ng kh«ng cã dÊu chÊm thËp ph©n ®îc ch¬ng tr×nh dÞch biÓu diÔn nh mét sè nguyªn. C¸c h»ng nguyªn cã thÓ ®îc viÕt theo ba d¹ng díi ®©y: Mét h»ng khëi ®Çu b»ng mét ch÷ sè kh¸c 0 ®îc xem l sè nguyªn c¬ sè 10 (decimal). Mét h»ng nguyªn hÖ 10 cã thÓ chøa c¸c sè 0-9 v mét dÊu trõ hoÆc + ë ®»ng tríc. Mét h»ng khëi ®Çu b»ng ch÷ sè 0 ®îc xem l mét sè nguyªn c¬ sè 8 (octal). C¸c h»ng hÖ 8 cã thÓ chøa c¸c ch÷ sè 0-7 v phÝa tríc cã thÓ cã thªm dÊu trõ hoÆc céng. Mét h»ng khëi ®Çu b»ng 0x hoÆc 0X ®îc xem l mét h»ng hÖ c¬ sè 16 (hexadecimal). C¸c h»ng hÖ 16 cã thÓ chøa c¸c ch÷ sè 0-9 v c¸c ch÷ A, B, C, D v F, v mét dÊu trõ hoÆc céng ë ®»ng tríc. C¸c h»ng ký hiÖu (symbolic constant) Mét h»ng ký hiÖu l mét h»ng ®îc ký hiÖu bëi mét tªn gäi (symbolic) n o ®ã. Gièng nh mét h»ng literal, gi¸ trÞ cña mét h»ng symbolic kh«ng thÓ thay ®æi. Gi¸ trÞ thùc sù cña h»ng symbolic chØ ®îc nhËp v o khi nã ®îc ®Þnh nghÜa. ViÖc sö dông mét h»ng kiÓu n y y hÖt nh sö dông mét biÕn. H»ng ký hiÖu cã hai u ®iÓm næi bËt so víi h»ng thùc sù. VÝ dô, ®Ó tÝnh chu vi v diÖn tÝch cña mét h×nh trßn khi biÕt b¸n kÝnh, cã thÓ viÕt nh sau: chu_vi = 3.14 * (2 * ban_kinh); dien_tich = 3.14 * ban_kinh * ban_kinh; Tuy nhiªn, nÕu ®Þnh nghÜa mét h»ng ký hiÖu víi tªn l PI v gi¸ trÞ l 3.14, th× ®o¹n ch- ¬ng tr×nh trªn cã thÓ thay b»ng: chu_vi = PI * (2 * ban_kinh); dien_tich = PI * ban_kinh * ban_kinh; Hai lÖnh n y trë nªn s¸ng sña v dÔ hiÓu h¬n. Thay v× ph¶i b¨n kho¨n vÒ gi¸ trÞ 3.14 cã nghÜa l g×, ë ®©y cã thÓ hiÓu ngay ®îc PI l g×. ¦u ®iÓm thø hai cña h»ng ký hiÖu l ë chç dÔ thay ®æi. TiÕp tôc vÝ dô trªn, ®Ó cho kÕt qña cña ch¬ng tr×nh chÝnh x¸c h¬n cÇn ph¶i thay gi¸ trÞ cña PI l 3.14 b»ng mét gi¸ trÞ kh¸c
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2