Khái niệm và Cách Khai báo Hàm trong C

Chuyên khảo phân tích Htmt va nnc chapter 9, đánh giá các khía cạnh quan trọng, đề xuất hướng nghiên cứu tiếp theo., phục vụ nghiên cứu và ứng dụng thực tiễn

Trường đại học

Trường Đại Học

Chuyên ngành

Công Nghệ Thông Tin

Người đăng

Ẩn danh

Thể loại

Tài liệu

2023

105
3
0

Phí lưu trữ

35 Point

Tóm tắt

I. Khái niệm hàm trong C Tìm hiểu cơ bản và ứng dụng

Hàm trong C là một khối mã có thể được gọi để thực hiện một tác vụ cụ thể. Hàm giúp tổ chức mã nguồn, tái sử dụng và giảm thiểu lỗi. Mỗi hàm có thể nhận tham số và trả về giá trị. Việc sử dụng hàm trong C không chỉ giúp mã nguồn trở nên rõ ràng hơn mà còn giúp lập trình viên dễ dàng quản lý và bảo trì.

1.1. Định nghĩa hàm trong C Cấu trúc và chức năng

Hàm trong C được định nghĩa bằng cú pháp: kiểu_trả_về tên_hàm(danh_sách_tham_số) { // thân hàm }. Hàm có thể trả về giá trị hoặc không. Hàm main() là hàm đặc biệt, nơi bắt đầu thực thi chương trình.

1.2. Tại sao nên sử dụng hàm trong C Lợi ích và ứng dụng

Sử dụng hàm giúp mã nguồn trở nên dễ đọc và dễ bảo trì. Hàm cho phép tái sử dụng mã, giảm thiểu sự lặp lại và giúp tổ chức mã theo cách logic hơn. Điều này rất quan trọng trong các dự án lớn.

II. Cách khai báo hàm trong C Hướng dẫn chi tiết và ví dụ

Khai báo hàm trong C là bước quan trọng để sử dụng hàm. Việc khai báo bao gồm việc xác định kiểu trả về, tên hàm và danh sách tham số. Cú pháp khai báo hàm cần phải chính xác để tránh lỗi biên dịch.

2.1. Cú pháp khai báo hàm trong C Các thành phần cần thiết

Cú pháp khai báo hàm bao gồm: kiểu_trả_về tên_hàm(danh_sách_tham_số);. Ví dụ: int so_sanh(int a, int b); là khai báo hàm so sánh hai số nguyên.

2.2. Khai báo prototype của hàm Tại sao và cách thực hiện

Prototype của hàm cho phép trình biên dịch biết về hàm trước khi nó được gọi. Điều này giúp tránh lỗi khi gọi hàm mà chưa được định nghĩa. Prototype thường được đặt trong các file header.

III. Tham số hàm trong C Cách sử dụng và quy tắc

Tham số hàm là các biến được truyền vào hàm để thực hiện các phép toán. Việc hiểu rõ cách truyền tham số là rất quan trọng để đảm bảo hàm hoạt động đúng.

3.1. Các loại tham số trong hàm Giá trị và tham chiếu

Có hai loại tham số: tham số giá trị và tham số tham chiếu. Tham số giá trị sao chép giá trị vào hàm, trong khi tham số tham chiếu cho phép hàm thay đổi giá trị của biến bên ngoài.

3.2. Quy tắc truyền tham số trong C Những điều cần lưu ý

Khi truyền tham số, cần chú ý đến kiểu dữ liệu và số lượng tham số. Nếu số lượng tham số không khớp, trình biên dịch sẽ báo lỗi. Cần khai báo đúng kiểu dữ liệu để tránh lỗi không mong muốn.

IV. Hàm đệ quy trong C Khái niệm và ứng dụng thực tiễn

Hàm đệ quy là hàm gọi chính nó trong quá trình thực thi. Hàm đệ quy thường được sử dụng để giải quyết các bài toán có cấu trúc lặp lại, như tính giai thừa hay tìm kiếm trong cây.

4.1. Định nghĩa hàm đệ quy Cách hoạt động và ví dụ

Hàm đệ quy hoạt động bằng cách gọi chính nó với các tham số khác nhau cho đến khi đạt điều kiện dừng. Ví dụ: hàm tính giai thừa có thể được định nghĩa như sau: long factorial(long n) { return (n > 1) ? n * factorial(n - 1) : 1; }.

4.2. Ứng dụng của hàm đệ quy Tình huống thực tế

Hàm đệ quy thường được sử dụng trong các thuật toán tìm kiếm, sắp xếp và giải quyết các bài toán phức tạp như phân tích cú pháp. Việc sử dụng hàm đệ quy giúp mã nguồn trở nên ngắn gọn và dễ hiểu hơn.

V. Kết luận về hàm trong C Tương lai và xu hướng phát triển

Hàm trong C là một phần không thể thiếu trong lập trình. Việc hiểu rõ về hàm giúp lập trình viên viết mã hiệu quả hơn. Tương lai của lập trình C sẽ tiếp tục phát triển với các tính năng mới, nhưng khái niệm hàm vẫn giữ vai trò quan trọng.

5.1. Tương lai của hàm trong C Xu hướng và cải tiến

Với sự phát triển của công nghệ, các ngôn ngữ lập trình mới có thể ảnh hưởng đến cách sử dụng hàm trong C. Tuy nhiên, khái niệm hàm vẫn sẽ là nền tảng cho lập trình.

5.2. Lời khuyên cho lập trình viên Cách tối ưu hóa việc sử dụng hàm

Lập trình viên nên chú ý đến việc tổ chức mã nguồn và sử dụng hàm một cách hợp lý. Việc tối ưu hóa hàm không chỉ giúp mã chạy nhanh hơn mà còn dễ bảo trì hơn trong tương lai.

Tóm tắt và mô tả trên trang này được tạo với sự hỗ trợ của AI từ nội dung tài liệu gốc; tài liệu do người dùng đóng góp và được kiểm duyệt trước khi xuất bản. Báo lỗi nội dung.

15/07/2025
Htmt va nnc chapter 9

Trích đoạn nội dung tài liệu

CHÖÔNG 9 HAØM CHÖÔNG 9 HAØM 9.1 Khaùi nieäm haøm 9.2 Khai baùo haøm 9.3 Ñoái soá cuûa haøm - ñoái soá laø tham trò 9.4 Keát quaû traû veà cuûa haøm - leänh RETURN 9.5 PROTOTYPE cuûa moät haøm 9.6 Haøm ñeä quy Baøi taäp cuoái chöông CHÖÔNG 9 HAØM 9.1 KHAÙI NIEÄM HAØM Chöông trình con laø ñoaïn chöông trình ñaûm nhaän thöïc hieän moät thao taùc nhaát ñònh. Ñoái vôùi C, chöông trình con chæ ôû moät daïng laø haøm (function), khoâng coù khaùi nieäm thuû tuïc (procedure). CHÖÔNG 9 HAØM 9.1 KHAÙI NIEÄM HAØM Haøm main () laø haøm ñaëc bieät cuûa C, noù laø moät haøm maø trong ñoù caùc thao taùc leänh (bao goàm caùc bieåu thöùc tính toaùn, goïi haøm, .) ñöôïc C thöïc hieän theo moät trình töï hôïp logic ñeå giaûi quyeát baøi toaùn ñöôïc ñaët ra. Vieäc söû duïng haøm trong C seõ laøm cho chöông trình trôû neân raát deã quaûn lyù, deã söûa sai.

CHÖÔNG 9 HAØM 9.1 KHAÙI NIEÄM HAØM Taát caû caùc haøm trong C ñeàu ngang caáp nhau. Caùc haøm ñeàu coù theå goïi laãn nhau, dó nhieân haøm ñöôïc goïi phaûi ñöôïc khai baùo tröôùc haøm goïi. CHÖÔNG 9 HAØM 9.1 KHAÙI NIEÄM HAØM Caùc haøm trong moät chöông trình coù theå naèm treân caùc taäp tin khaùc nhau vaø khaùc vôùi taäp tin chính (chöùa haøm main ()), moãi taäp tin ñöôïc goïi laø moät module chöông trình, Caùc module chöông trình seõ ñöôïc dòch rieâng reõ vaø sau ñoù ñöôïc lieân keát (link) laïi vôùi nhau ñeå taïo ra ñöôïc moät taäp tin thöïc thi duy nhaát. Caùch taïo chöông trình theo kieåu nhieàu module nhö vaäy trong C laø project CHÖÔNG 9 HAØM 9.1 KHAÙI NIEÄM HAØM Ví duï: Chöông trình 1 #include <stdio.h> main () { double a, b, c, delta, n1, n2; clrscr(); printf ("Nhap 3 he so phuong trinh bac hai; "); scanf ("%lf %lf %lf", &a, &b, &c); CHÖÔNG 9 HAØM 9.1 KHAÙI NIEÄM HAØM if (a ==0)/* phuong trinh suy bien ve bac nhat */ { printf ("Phuong trinh suy bien ve bac nhat va "); if (b == 0) if (c == 0) printf ("vo so nghiem\n"); else /* c != 0 */ printf ("vo nghiem\n"); else / * b != 0 */ CHÖÔNG 9 HAØM 9.1 KHAÙI NIEÄM HAØM { n1 = -c/b; printf ("co 1 nghiem: = %5.2f \n", n1); } } else /* a != 0 */ { printf ("Phuong trinh bac hai va "); delta = b*b - 4*a*c; CHÖÔNG 9 HAØM 9.1 KHAÙI NIEÄM HAØM if (delta < 0) printf ("vo nghiem thuc\n"); else if (delta == 0) { n1 = n2 = -b/2/a; printf ("co nghiem kep x1 = x2 = %5.2f \n" ,n1); } CHÖÔNG 9 HAØM 9.1 KHAÙI NIEÄM HAØM else /* delta > 0 */ { n1 = (-b + sqrt(delta))/2/a; n2 = (-b - sqrt(delta))/2/a; printf ("co hai nghiem phan biet; \n"); printf ("x1 = %5.2f \n", n2); } } getch(); } CHÖÔNG 9 HAØM 9.1 KHAÙI NIEÄM HAØM Ví duï: Chöông trình 2 #include <stdio.h> void gptb1 (double a, double b); void gptb2 (double a, double b, double c); CHÖÔNG 9 HAØM 9.1 KHAÙI NIEÄM HAØM void gptb1 (double a, double b) { printf ("Phuong trinh suy bien ve bac nhat va "); if (a == 0) if (b == 0) printf ("vo so nghiem\n"); else /* b != 0 */ printf ("vo nghiem\n"); else printf ("co 1 nghiem: x = %5.2f \n",-b/a); } CHÖÔNG 9 HAØM 9.1 KHAÙI NIEÄM HAØM void gptb2 (double a,double b,double c) { double delta, x1, x2; printf ("Phuong trinh bac hai va "); delta = b*b - 4*a*c; if (delta < 0) printf ("vo nghiem thuc\n"); else if (delta == 0) printf ("co nghiem kep x1 = x2 = %5.2f \n", - b/2/a); CHÖÔNG 9 HAØM 9.1 KHAÙI NIEÄM HAØM else /* delta > 0 */ { x1 = (-b + sqrt(delta))/2/a; x2 = (-b - sqrt(delta))/2/a; printf ("co hai nghiem phan biet: \n"); printf ("x1 = %5.2f \n" , x2); } } CHÖÔNG 9 HAØM 9.1 KHAÙI NIEÄM HAØM main() { double a, b, c; clrscr(); printf ("Nhap 3 he so phuong trinh bac hai: "); scant ("%lf %lf %lf", &a, &b, &c); if (a == 0) /* phuong trinh suy bien ve bac nhat */ gptb1 (b, c); else /* a != 0 */ gptb2 (a, b, c); getch(); } CHÖÔNG 9 HAØM 9.2 KHAI BAÙO HAØM Khai baùo moät haøm laø chæ ra roõ raèng traû veà vò trí kieåu gì, ñoái soá ñöa vaøo cho haøm coù bao nhieâu ñoái soá, moãi ñoái soá coù kieåu nhö theá naøo vaø caùc leänh beân trong thaân haøm xaùc ñònh thao taùc cuûa haøm.

Coù hai loaïi haøm: haøm trong thö vieän cuûa C vaø haøm do laäp trình vieân töï ñònh nghóa. CHÖÔNG 9 HAØM 9.2 KHAI BAÙO HAØM - Neáu haøm söû duïng laø haøm chuaån trong thö vieän thì vieäc khai baùo haøm chæ ñôn giaûn laø khai baùo prototype cuûa haøm, caùc prototype naøy ñaõ ñöôïc phaân loaïi vaø ôû trong caùc file .h, laäp trình vieân caàn ra leänh #include bao haøm caùc file naøy vaøo chöông trình hoaëc module chöông trình söû duïng noù. CHÖÔNG 9 HAØM 9.2 KHAI BAÙO HAØM - Neáu caùc haøm söû duïng laø do laäp trình vieân töï ñònh nghóa thì vieäc khai baùo haøm bao goàm hai vieäc: khai baùo prototype cuûa haøm ñaàu chöông trình vaø ñònh nghóa caùc leänh beân trong thaân haøm (hay thöôøng ñöôïc goïi taét laø ñònh nghóa haøm). CHÖÔNG 9 HAØM 9.2 KHAI BAÙO HAØM Daïng 1: Daïng 2: (Laïc haäu) kieåu teân_haøm kieåu teân_haøm (danh_saùch_ñoái_soá) (danh_saùch_khai_baùo_ñoái_soá) khai_baùo_ñoái_soá { { khai_baùo_bieán_cuïc_boä khai_baùo_bieán_cuïc_boä leänh leänh } } CHÖÔNG 9 HAØM 9.2 KHAI BAÙO HAØM Daïng 1: Daïng 2: int so_sanh (int a, int b) int so_sanh (a, b) { int a, b; int ket_qua; { if (a >b) int ket_qua: ket_qua = 1: if (a >b) else if (a == b) ket_qua = 1; else if (a == b) ket_qua = 0; ket_qua = 0; else if (a < b) else if (a < b) ket_qua = -1; ket_qua = -1; return ket_qua; return ket_qua; } } CHÖÔNG 9 HAØM 9.2 KHAI BAÙO HAØM Ví duï: #include <stdio.h> int so_sanh (int a, int b);  prototype cuûa haøm so_sanh main() { int a, b, ket_qua; clrscr(); printf ("Moi nhap hai so "); scanf ("%d %d" , &a, &b); ket_qua = so_sanh (a, b); goïi haøm CHÖÔNG 9 HAØM 9.2 KHAI BAÙO HAØM switch (ket_qua) { case -1: printf ("So %d nho hon so %d \n" , a, b); break; case 0: printf ("So %d bang so %d \n", a, b); break; case 1: printf ("So %d lon hon so %d \n" , a, b); break; } getch(); } CHÖÔNG 9 HAØM 9.2 KHAI BAÙO HAØM int so_sanh (int a, int b) { int ket_qua: if (a >b) ket_qua = 1; else if (a == b) ket_qua = 0; else if (a < b) ket_qua = -1; return ket_qua; } CHÖÔNG 9 HAØM 9.3 ÑOÁI SOÁ CUÛA HAØM - ÑOÁI SOÁ LAØ THAM TRÒ Khi goïi haøm thì ñoái soá thaät caàn gôûi cho haøm chæ ñöôïc gôûi döôùi daïng tham soá trò, coù nghóa laø caùc bieán, trò hoaëc bieåu thöùc ñöôïc gôûi ñeán cho moät haøm, qua ñoái soá cuûa noù, seõ ñöôïc laáy trò ñeå tính toaùn trong thaân haøm.

Coù theå noùi trò cuûa bieán thaät beân ngoaøi khi goïi haøm ñaõ ñöôïc cheùp sang ñoái soá giaû, ta coù theå xem nhö laø bieán cuïc boä cuûa haøm, vaø moïi vieäc tính toaùn chæ ñöôïc thöïc hieän treân bieán cuïc boä naøy maø thoâi. CHÖÔNG 9 HAØM 9.3 ÑOÁI SOÁ CUÛA HAØM - ÑOÁI SOÁ LAØ THAM TRÒ Ví duï:Vieát chöông trình tính luõy thöøa n cuûa x(xn), vôùi n nguyeân vaø thöïc.h> double luy_thua(double x, int n); main() { int n; double x, xn; clrscr(); printf ("Moi nhap so tinh luy thua: "); scant ("%lf", &x); CHÖÔNG 9 HAØM 9.3 ÑOÁI SOÁ CUÛA HAØM - ÑOÁI SOÁ LAØ THAM TRÒ printf ("Moi nhap so luy thua: "); scanf ("%d", &n); xn =luy_thua (x, n); printf("Ket qua: %5.2f luy thua %d bang: %7.2f\n", x,n,xn); printf ("Tri cua so mu la %d", n); getch();} double luy_thua(double x, int n) { double t = 1; for ( ; n > 0; n--) t *= x; return t; } CHÖÔNG 9 HAØM 9.3 ÑOÁI SOÁ CUÛA HAØM - ÑOÁI SOÁ LAØ THAM TRÒ Khi goïi haøm luõy thöøa, trò cuûa bieán x vaø n seõ ñöôïc cheùp vaøo cho hai ñoái soá giaû x vaø n, do ñoù ta coù ñoàng thôøi caùc hoäp bieán nhö sau khi vaøo trong haøm luy_thua(): Bieán cuûa haøm main() Bieán cuûa haøm luy_thua() x 3.45 x n 3 3 n CHÖÔNG 9 HAØM 9.3 ÑOÁI SOÁ CUÛA HAØM - ÑOÁI SOÁ LAØ THAM TRÒ Ví duï: Ta coù theå goïi haøm luy_thua() vaø truyeàn cho haøm naøy moät bieåu thöùc: xn = luy_thua( 3*a + x , 5); Tuy nhieân, caùch truyeàn tham soá nhö treân khoâng theå thay ñoåi trò cuûa bieán, maø ñieàu naøy ñoâi khi laïi caàn thieát. CHÖÔNG 9 HAØM 9.3 ÑOÁI SOÁ CUÛA HAØM - ÑOÁI SOÁ LAØ THAM TRÒ Ví duï: Vieát chöông trình duøng haøm nhaäp soá lieäu #include <stdio.h> void nhap_tri (int a, int b); main() { int a = 0, b = 0; clrscr(); printf ("Truoc khi goi ham nhap_tri: a = %d, b = %d\n", a, b); nhap_tri (a, b); printf("Sau khi goi ham nhap_tri a = %d, b = %d\n", a, b); getch(); } CHÖÔNG 9 HAØM 9.3 ÑOÁI SOÁ CUÛA HAØM - ÑOÁI SOÁ LAØ THAM TRÒ void nhap_tri (int a, int b) { printf ("Moi nhap hai so: "); scanf ("%d %d", &a, &b); } CHÖÔNG 9 HAØM 9.3 ÑOÁI SOÁ CUÛA HAØM - ÑOÁI SOÁ LAØ THAM TRÒ Ví duï: Thieát keá chöông trình duøng haøm nhaäp maûng, tính toång caùc phaàn töû vaø in ra maøn hình keát quaû.h> void nhap_tri (int a[], int n); int tong (int a[], int n); CHÖÔNG 9 HAØM 9.3 ÑOÁI SOÁ CUÛA HAØM - ÑOÁI SOÁ LAØ THAM TRÒ main() Giaù trò cuûa maûng { int a[100], n; coù theå bò thay ñoåi int sum; trong haøm clrscr(); printf ("Moi nhap so phan tu cua mang: "); scanf (%d , &n); nhap_tri (a, n); sum = tong (a, n); printf ("Tong cac phan tu cua mang la: %d \n", sum); getch(); } CHÖÔNG 9 HAØM 9.3 ÑOÁI SOÁ CUÛA HAØM - ÑOÁI SOÁ LAØ THAM TRÒ void nhap_tri (int a[], int n) { int i; printf ("Moi nhap cac phan tu cua mang: "); for (i = 0; i <n; i++) scanf ("%d", &a[i]); } int tong (int a[], int n) Giaù trò cuûa maûng { int i, s = 0; coù theå bò thay ñoåi for (i = 0; i < n; s += a[i++]) trong haøm ; return s;} CHÖÔNG 9 HAØM 9.4 KEÁT QUAÛ TRAÛ VEÀ CUÛA HAØM - LEÄNH RETURN Ñoái vôùi C khoâng coù söï phaân bieät giöõa thuû tuïc (procedure) vaø haøm (function), maø thuû tuïc cuõng ñöôïc xem laø moät haøm maø khoâng traû veà giaù trò naøo caû. Ñeå khai baùo kieåu traû veà töø haøm nhö vaäy C ñöa ra kieåu void, taïm goïi laø kieåu khoâng hieåu.

Ví duï: so saùnh 2 tröôøng hôïp söû duïng haøm c = getch(); vaø getch(); hoaëc c = getche(); vaø getche(); CHÖÔNG 9 HAØM 9.4 KEÁT QUAÛ TRAÛ VEÀ CUÛA HAØM - LEÄNH RETURN Trong chöông trình, ta cuõng bieát leänh return duøng ñeå thöïc hieän vieäc traû trò cuûa haøm veà cho nôi goïi noù, duø trò naøy coù ñöôïc söû duïng hay khoâng tuøy nôi goïi. Ví duï: Thieát keá haøm so saùnh hai soá. CHÖÔNG 9 HAØM 9.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ