Phân tích, thiết kế và lập trình hướng đối tượng_phụ lục 4
lượt xem 7
download
Tham khảo tài liệu 'phân tích, thiết kế và lập trình hướng đối tượng_phụ lục 4', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Phân tích, thiết kế và lập trình hướng đối tượng_phụ lục 4
- Phô lôc 4 Hµm víi ®èi sè bÊt ®Þnh trong C Trong c¸c gi¸o tr×nh C thêng chØ híng dÉn c¸ch x©y dùng hµm víi c¸c ®èi cè ®Þnh. Mçi ®èi cÇn cã mé t tham sè (cïng kiÓu víi nã) trong lêi gäi hµm. Tuy nhiªn mét vµi hµm chuÈn cña C l¹i kh«ng nh vËy, m µ linh ho¹t h¬n, ch¼ng khi dïng hµm printf hay scanf th× sè tham sè mµ ta cung cÊp cho hµm lµ kh«ng cè ®Þnh c¶ vÒ sè lîng lÉn kiÓu c¸ch. VÝ dô trong c©u lÖnh: printf(“\n Tæng = %d “ , 3+4+5) ; cã 2 tham sè, nhng trong c©u lÖnh: printf(“\n Hµ Néi“ ) ; chØ cã mét tham sè. Nh vËy cÇn ph©n biÖt c¸c kh¸i niÖm sau: - §èi sè cè ®Þnh ®îc khai b¸o trong dßng ®Çu cña hµm, nã cã tªn vµ kiÓu - Tham sè øng víi ®èi sè cè ®Þnh gäi lµ tham sè cè ®Þnh - §èi bÊt ®Þnh ®îc khai b¸o bëi ba dÊu chÊm: bÊt ®Þnh c¶ vÒ sè lîng vµ kiÓu - Tham sè bÊt ®Þnh (øng víi ®èi bÊt ®Þnh) lµ mét danh s¸ch gi¸ trÞ víi sè lîng vµ kiÓu tuú ý (kh«ng x ¸c ®Þnh) Trong phô lôc nµy sÏ tr×nh bÇy c¸ch x©y dùng c¸c hµm víi ®èi sè bÊt ®Þnh. C«ng cô chñ yÕu ®îc dïng lµ con trá vµ danh s¸ch. 1. BiÕn con trá BiÕn con trá (hay con trá) dïng ®Ó chøa ®Þa chØ cña biÕn, m¶ng, hµm, ... Cã nhiÒu kiÓu ®Þa chØ, v× vË y còng cã nhiÒu kiÓu con trá. BiÕn con trá ®îc khai b¸o theo mÉu: KiÓu *Tªn_biÕn_con_trá ; VÝ dô: float px ; // px lµ con trá thùc C¸c phÐp to¸n quan träng trªn con trá gåm: 561 562 + G¸n ®Þa chØ mét vïng nhí cho con trá (dïng to¸n tö g¸n, phÐp lÊy ®Þa chØ, c¸c hµm cÊp ph¸t bé nhí)
- + Truy nhËp vµo vïng nhí th«ng qua con trá, dïng phÐp to¸n: *Tªn_con_trá (§Ó ý ë ®©y cã 2 vïng nhí: vïng nhí cña biÕn con trá vµ vïng nhí mµ ®Þa chØ ®Çu cña nã chøa trong biÕn con trá) + Céng ®Þa chØ ®Ó con trá chøa ®Þa chØ cña phÇn tö tiÕp theo, dïng phÐp to¸n: ++ Tªn_con_trá hoÆc Tªn_con_trá ++ Chó ý r»ng c¸c phÐp to¸n trªn chØ cã thÓ thùc hiÖn ®èi víi con trá cã kiÓu. 2. Danh s¸ch kh«ng cïng kiÓu Dïng con trá cã kiÓu chØ qu¶n lý ®îc mét danh s¸ch gi¸ trÞ cïng kiÓu, vÝ dô dÉy sè thùc, dÉy sè ngu yªn, dÉy c¸c cÊu tróc,.... Khi cÇn qu¶n lý mét danh s¸ch c¸c gi¸ trÞ kh«ng cïng kiÓu ta ph¶i dïng con trá kh«ng kiÓu (void) kha i b¸ o nh sau: void * Tªn_con_trá ; Con trá void cã thÓ chøa c¸c ®Þa chØ cã kiÓu bÊt kú, vµ dïng ®Ó trá ®Õn vïng nhí chøa danh s¸ch cÇn qu¶n lý. Mét chó ý quan träng lµ mçi khi göi vµo hay lÊy ra mét gi¸ trÞ tõ vïng nhí, th× tuú theo kiÓu gi ¸ trÞ mµ ta ph¶i dïng phÐp chuyÓn kiÓu thÝch hîp ®èi víi con trá. VÝ dô sau minh ho¹ c¸ch lËp mét danh s¸ch gåm mét sè nguyªn, mét sè thùc vµ mét chuçi ký tù. Chóng ta cÇn mét bé nhí ®Ó chøa sè nguyªn, sè thùc vµ ®Þa ch Ø chuçi vµ dïng c¸c con trá void ®Ó qu¶n lý vïng nhí nµy. void *list , *p ; // Con trá list trá tíi ®Çu danh s¸ch // p dïng ®Ó duyÖt qua c¸c phÇn tö cña danh s¸ch list=malloc(sizeof(int) + sizeof(float)+ sizeof(char*) ); p=list; *((int*)p) = 12; // §a sè nguyªn 12 vµo danh s¸ch ((int*)p)++ ; // ChuyÓn sang phÇn tö tiÕp theo *((float*)p) = 3.14; // §a sè thùc 3.14 vµo danh s¸ch ((float*)p)++ ; // ChuyÓn sang phÇn tö tiÕp theo
- *((char**)p) = “HA NOI”; // §a ®Þa chØ chuçi “HA NOI” // vµo danh s¸ch // NhËn c¸c phÇn tö trong danh s¸ch p=list; // VÒ ®Çu danh s¸ch int a = *((int*)p); // NhËn phÇn tö thø nhÊt ((int*)p)++ ; // ChuyÓn sang phÇn tö tiÕp theo float x= *((float*)p); // NhËn phÇn tö thø hai ((float*)p)++ ; // ChuyÓn sang phÇn tö tiÕp theo char *str = *((char**)p) ; // NhËn phÇn tö thø ba 3. Hµm víi ®èi sè bÊt ®Þnh + §èi bÊt ®Þnh bao giê còng ®Æt sau cïng vµ ®îc khai b¸o b»ng dÊu ba chÊm. VÝ dô vÝ dô hµm void f(int n, char *s, ...) ; cã 2 ®èi cè ®Þnh lµ n, s vµ ®èi bÊt ®Þnh. + §Ó nhËn ®îc c¸c tham sè bÊt ®Þnh trong lêi gäi hµm ta cÇn lu ý c¸c ®iÓm sau: - C¸c tham sè bÊt ®Þnh chøa trong mét danh s¸ch. §Ó nhËn ®îc ®Þa chØ ®Çu danh s¸ch ta dïng mét con tr á void vµ phÐp g¸n sau: void *list ; list = ... ; - Dïng mét tham sè cè ®Þnh kiÓu chuçi ®Ó quy ®Þnh sè lîng vµ kiÓu cña mçi tham sè trong danh s¸ch, vÝ dô: “3i” hiÓu lµ : tham sè bÊt ®Þnh gåm 3 gi¸ trÞ int “3f” hiÓu lµ : tham sè bÊt ®Þnh gåm 3 gi¸ trÞ float “fiss” hiÓu lµ cã 4 tham sè bÊt ®Þnh cã kiÓu lÇn lît lµ float, int, char*, char* Mét khi ®· biÕt ®îc ®Þa chØ ®Çu danh s¸ch, biÕt ®îc sè lîng vµ kiÓu cña mçi tham sè , th× dÔ dµng nhËn ®îc gi¸ trÞ c¸c tham sè ®Ó sö dông trong th©n hµm. 563 564 VÝ dô sau ®©y minh ho¹ c¸ch x©y dùng c¸c hµm víi tham sè bÊt ®Þnh. Hµm dïng ®Ó in c¸c gi¸ t rÞ kiÓu int, float vµ char. Hµm cã mét tham sè cè ®Þnh ®Ó cho biÕt cã bao nhiªu gi¸ trÞ vµ kiÓu c¸c gi¸ trÞ cÇn i n. KiÓu quy
- ®Þnh nh sau: i lµ int, f lµ float, s lµ char*. Tham sè cã 2 c¸ch viÕt: lÆp (gåm mét h»ng sè nguyªn vµ mét ch÷ c¸i ®Þnh kiÓu) vµ liÖt kª (mét dÉy c¸c ch÷ c¸i ®Þnh kiÓu). VÝ dô: “4s” cã nghÜa in 4 chuçi “siif” cã nghÜa in mét chuçi, 2 gi¸ trÞ nguyªn vµ mét gi¸ trÞ thùc: #include #include #include #include #include #include void InDanhSachGiaTri(char *st,...) { void *list ; int gt_int ; float gt_float; char *gt_str; int n,i ; char kieu; int lap; list = ... ; // list tro toi vung nho chua danh sach dia chi cac // tham so lap = isdigit(st[0]) ; if (lap) n=st[0] - '0' ; else n=strlen(st);
- printf("\n n= %d lap = %d",n,lap); getch(); for(i=0;i
- ((char**)list)++ ; printf("\nGia tri %d = %s",i,gt_str); 565 566 } } } void main() { float x=3.14; int a=123; char *tp="HAI PHONG"; InDanhSachGiaTri("4i",a); InDanhSachGiaTri("4s","HA NOI"); InDanhSachGiaTri("ifsssffii", a, x, tp, tp,"QUY NHON", x, 6.28, a, 246); InDanhSachGiaTri("4f",6.28); getch(); } 4. Hµm kh«ng ®èi vµ hµm víi ®èi bÊt ®Þnh NhiÒu ngêi nghÜ hµm khai b¸o nh sau void f(); lµ hµm kh«ng ®èi trong C. Trong C++ th× hiÓu nh thÕ lµ ®óng, cßn trong C th× ®ã lµ hµm cã ®èi bÊt ® Þnh (hµm kh«ng ®èi trong C khai b¸o nh sau: f(void) ). Do kh«ng cã ®èi cè ®Þnh nµo cho biÕt vÒ sè lîng vµ kiÓu cña c¸c tham sè bÊt ®Þnh, nªn gi¶i ph¸p ë ®©y lµ dïng c¸c biÕn toµn bé. Râ rµng gi¶i ph¸p nµy kh«ng kh«ng th uËn tiÖn cho ngêi dïng v× ph¶i khai b¸o ®óng tªn biÕn toµn bé vµ ph¶i khëi g¸n gi¸ trÞ cho nã tríc khi gäi hµm. VÝ dô tr×nh bÇy mét hµm chØ cã ®èi bÊt ®Þnh dïng ®Ó tÝnh max vµ min cña c¸c gi¸ trÞ thùc. C¸c tham sè bÊt ®Þnh ®îc
- ®a vµo theo tr×nh tù sau: §Þa chØ chøa max, ®Þa chØ chøa min, c¸c gi¸ trÞ nguyªn cÇn tÝnh max, min. Ch¬ng tr×nh dïng biÕn toµn bé N ®Ó cho biÕt sè gi¸ trÞ nguyªn cÇn tÝnh max, min. int N; void maxmin() { void *lt = ... ; float *max, *min , tg; int i; max = *((float**)lt)++; min = *((float**)lt)++; *max = *min = (float) *((double*)lt)++; for(i=1;i *max) *max = tg; if(tg < *min) *min = tg; } }
- 567
CÓ THỂ BẠN MUỐN DOWNLOAD
-
HƯỚNG DẪN LẬP NỘI DUNG PHÂN TÍCH THIẾT KẾ PHẦN MỀM
8 p | 592 | 189
-
Phân tích thiết kế hướng đối tượng (phần 2)
2 p | 403 | 180
-
phụ lục 6 phân tích, thiết kế và lập trình tượng
30 p | 199 | 36
-
Phần tích thiết kế giải thuật (phần 7)
14 p | 116 | 17
-
Phần tích thiết kế giải thuật (phần 8)
11 p | 111 | 17
-
Phần tích thiết kế giải thuật (phần 9)
7 p | 115 | 15
-
Bài giảng Phân tích thiết kế hệ thống: Bài giảng 2 - TS. Đào Nam Anh
28 p | 136 | 15
-
Bài giảng Phân tích thiết kế hệ thống: Bài giảng 8 - TS. Đào Nam Anh
32 p | 107 | 13
-
Phân tích, thiết kế và lập trình hướng đối tượng_phụ lục 3
8 p | 120 | 11
-
Bài giảng Phân tích và thiết kế hướng đối tượng: Phân tích thiết kế hướng đối tượng - Đỗ Ngọc Như Loan
79 p | 85 | 10
-
Phân tích, thiết kế và lập trình hướng đối tượng_phụ lục 5
11 p | 95 | 7
-
Phân tích, thiết kế và lập trình hướng đối tượng_phụ lục 6
51 p | 75 | 6
-
Phân tích, thiết kế và lập trình hướng đối tượng_phụ lục 1
4 p | 86 | 6
-
Bài giảng Phân tích thiết kế hệ thống thông tin: Chương 3 - Phan Hồ Duy Phương
39 p | 11 | 6
-
Giáo trình Phân tích thiết kế hướng đối tượng với UML (Nghề Lập trình máy tính): Phần 2 - Tổng cục dạy nghề
69 p | 40 | 4
-
Bài giảng Lập trình hướng đối tượng: Bài 12 - Phân tích thiết kế hướng đối tượng và biểu đồ lớp
63 p | 15 | 4
-
Giáo trình Phân tích thiết kế thuật toán (Nghề Lập trình máy tính): Phần 1 - Tổng cục dạy nghề
109 p | 85 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn