Kết thúc bài học này, bạn có thể: Sử dụng con trỏ, Sử dụng con trỏ với mảng. Các bước trong bài học này được trình bày chi tiết, rõ ràng và cẩn thận. Điều này giúp ta hiểu rõ công cụ lập trình. Thực hiện theo các bước sau thật cẩn thận.
Bài 14 Con trỏ Mục tiêu: Kết thúc học này, bạn có thể: Sử dụng trỏ Sử dụng trỏ với mảng Các bước học trình bày chi tiết, rõ ràng cẩn thận Điều giúp ta hiểu rõ công cụ lập trình Thực theo bước sau thật cẩn thận Phần I – Trong thời gian 30 phút đầu: 14.1 Con trỏ Các biến trỏ C chứa địa biến có kiểu Nghĩa là, trỏ kiểu liệu số nguyên ký tự Một biến trỏ số nguyên chưa địa biến số nguyên Một trỏ ký tự chứa địa biến kiểu ký tự 14.1.1 Đếm số nguyên âm chuỗi sử dụng trỏ Các trỏ sử dụng thay cho số duyệt phần tử mảng Ví dụ, trỏ kiểu chuỗi dùng để trỏ đến địa bắt đầu từ Vì trỏ sử dụng để đọc ký tự từ Để minh họa điều này, viết chương trình C để đếm số nguyên âm từ cách sử dụng trỏ Các bước liệt kê sau: Khai báo biến trỏ kiểu ký tự Mã lệnh sau, char *ptr; Khai báo mảng ký tự nhập vào giá trị Mã lệnh sau, char word[10]; printf(“\n Enter a word : “); scanf(“%s”, word); Gán trỏ ký tự tới chuỗi Mã lệnh sau, ptr = &word[0]; Địa ký tự mảng ký tự, word, lưu biến trỏ, ptr Nói cách khác, trỏ ptr trỏ tới ký tự mảng ký tự word Lần lượt duyệt ký tự từ để xác định nguyên âm hay không Trong trường hợp nguyên âm tìm thấy, tăng giá trị biến đếm nguyên âm Đoạn mã lệnh sau, int i, vowcnt; for(i = 0; i < strlen(word); i++) { Con trỏ 201 } if((*ptr==‘a’) || (*ptr==‘e’) || (*ptr==‘i’) || (*ptr ==‘o’) || (*ptr==‘u’) || (*ptr==‘A’) || (*ptr==‘E’) || (*ptr ==‘I’) || (*ptr==‘O’) || (*ptr==‘U’)) vowcnt++; ptr++; Hiển thị từ số lượng nguyên âm từ Đoạn mã lệnh sau, printf(“\n The word is : %s \n The number of the word is: %d “, word,vowcnt); vowels in Dưới chương trình hồn chỉnh Gọi trình soạn thảo chương trình C Tạo tập tin Đưa vào đoạn mã lệnh sau: void main() { char *ptr; char word[10]; int i, vowcnt=0; printf(“\n Enter a word: “); scanf(“%s”, word); ptr = &word[0]; for(i = 0; i < strlen(word); i++) { if((*ptr==‘a’) || (*ptr==‘e’) (*ptr==‘o’) || (*ptr==‘u’) || (*ptr==‘E’) || (*ptr==‘I’) || (*ptr==‘U’)) vowcnt++; ptr++; } printf(“\n The word is: %s \n The the word is: %d “, word, } || (*ptr==‘i’) || (*ptr==‘A’) || (*ptr==‘O’) || number of vowcnt); vowels in Xem kết quả, theo bước sau: Lưu tập tin với tên pointerI.C Biên dịch tập tin, pointerI.C Chạy chương trình, pointerI.C Trở trình soạn thảo Kết chương trình thể hình 14.1 202 Lập trình C Hình 14.1 : Kết chương trình pointerI.C 14.1.2 Sắp xếp mảng theo thứ tự abc sử dụng trỏ Các trỏ sử dụng để hốn vị nội dung hai ô nhớ Để minh họa điều này, viết chương trình C để xếp tập chuỗi theo thứ tự abc Có nhiều cách giải chương trình Chúng ta dùng mảng trỏ ký tự để hiểu cách dùng mảng trỏ Để thực chương trình này, Để khai báo mảng trỏ ký tự chứa chuỗi Mã lệnh sau, char *ptr[5]; Mảng mơ tả hình 14.2 ptr[0] ptr[1] ptr[2] Ptr[3] ptr[4] Hình 14.2: Mảng trỏ ký tự Nhập chuỗi gán trỏ mảng trỏ đến chuỗi Đoạn mã lệnh sau, int i; char cpyptr1[5][10]; for (i=0;i 0) { temp = ptr[i]; ptr[i] = ptr[j]; ptr[j] = temp; } } } Hiển thị chuỗi ban đầu chuỗi xếp Đoạn mã lệnh là, print(“\nThe Original list is ”); for(i = 0; i < 5; i++) printf(“\n%s”, cpyptr2[i]); printf(“\nThe Sorted list is ”); for(i = 0; i < 5; i++) printf(“\n%s”, ptr[i]); Dưới chương trình hoàn thiện Tạo tập tin Đưa vào đoạn mã lệnh sau: 204 Lập trình C void main() { char *ptr[5]; int i; int j; char cpyptr1[5][10],cpyptr2[5][10]; char *temp; for(i = 0; i < 5; i++) { printf(“\nEnter a string: “); scanf(“%s”, cpyptr1[i]); ptr[i] = cpyptr1[i]; } for(i = 0; i < 5; i++) strcpy(cpyptr2[i], cpyptr1[i]); for(i = 0; i < 4; i++) { for(j = i + 1; j < 5; j++) { if (strcmp(ptr[i], ptr[j]) > 0) { temp = ptr[i]; ptr[i] = ptr[j]; ptr[j] = temp; } } printf(“\n The Original list is ”); for(i = 0; i < 5; i++) printf(“\n%s”, cpyptr2[i]); } printf(“\n The Sorted list is ”); for(i = 0; i < 5; i++) printf(“\n%s”, ptr[i]); } Để xem kết quả, thực theo bước sau: Lưu tập tin với tên pointII.C Biên dịch tập tin, pointII.C Chạy chương trình, pointII.C Trở trình soạn thảo Kết ví dụ hiển thị hình 14.5 Con trỏ 205 Figure 14.5: Kết chương trình pointII.C 206 Lập trình C Phần II – Trong thời gian 30 phút kế tiếp: Viết chương trình C để nối hai chuỗi cách sử dụng trỏ Để thực điều này, a Khai báo ba biến chuỗi b Khai báo ba trỏ kiểu ký tự c Nhập giá trị hai chuỗi d Tạo ba trỏ để trỏ đến ba biến chuỗi Chuỗi thứ ba khơng có giá trị e Lặp qua chuỗi thứ chép nội dung chuỗi vào chuỗi thứ ba Sử dụng biến trỏ để chép giá trị f Sau chép chuỗi thứ nhất, lặp qua chuỗi thứ hai chép nội dung chuỗi vào cuối chuỗi ba Sử dụng biến trỏ để chép giá trị g In chuỗi thứ ba Con trỏ 207 Bài tập tự làm Viết chương trình C để đảo mảng ký tự cách sử dụng trỏ Viết chương trình để cộng hai ma trận sử dụng trỏ 208 Lập trình C ... biến trỏ để chép giá trị g In chuỗi thứ ba Con trỏ 207 Bài tập tự làm Viết chương trình C để đảo mảng ký tự c? ?ch sử dụng trỏ Viết chương trình để c? ??ng hai ma trận sử dụng trỏ 208 Lập trình C ... tự abc sử dụng trỏ C? ?c trỏ sử dụng để hốn vị nội dung hai ô nhớ Để minh họa điều này, viết chương trình C để xếp tập chuỗi theo thứ tự abc C? ? nhiều c? ?ch giải chương trình Chúng ta dùng mảng trỏ. .. Viết chương trình C để nối hai chuỗi c? ?ch sử dụng trỏ Để th? ?c điều này, a Khai báo ba biến chuỗi b Khai báo ba trỏ kiểu ký tự c Nhập giá trị hai chuỗi d Tạo ba trỏ để trỏ đến ba biến chuỗi Chuỗi