Trang nhà | KIẾN THỨC LẬP TRÌNH | C/C++ | Hướng dẫn khai báo hàm con trong C. Ưu điểm của hàm trong thiết kế C


Nội dung

1. Các hàm vào C2. Các hàm vào C do người tiêu dùng xác định3. Khai báo hàm vào C4. Đệ quy trong thiết kế C5. Lớp lưu trữ trong thiết kế C

1. Những hàm trong C

Trong khuyên bảo này, bạn sẽ được ra mắt về các hàm trong C (cả hàm do người dùng định nghĩa cùng hàm thư viện chuẩn). Kế bên ra, bạn cũng biến thành biết được vì sao tại sao những hàm lại được thực hiện trong lập trình.

Bạn đang xem: Cách dùng as trong c#


*
*

Các hàm trong C


Hàm vào C (ngôn ngữ lập trình) là một trong những khối mã thực hiện một trách nhiệm cụ thể.

Giả sử, bạn cần viết một lập trình để chế tạo ra một hình tròn trụ và tô màu đến nó. Bạn cần chọn bán kính và color sắc. Bạn cũng có thể tạo 2 hàm sau đây để triển khai nhiệm vụ trên:

Tạo một hàm vẽ hình tròn: createCircle() functionTạo một hàm sơn màu: color() function

Việc phân chia các vấn đề phức tạp thành các vấn đề bé dại hơn giúp lập trình của khách hàng dễ hiểu cùng dễ thực hiện lại hơn.

Có hai các loại hàm trong C:

Các hàm tủ sách tiêu chuẩnCác hàm do người tiêu dùng định nghĩa

1.1 những hàm thư viện tiêu chuẩn

Các hàm tủ sách tiêu chuẩn chính là các hàm sẵn gồm trong lập trình sẵn C.

Các hàm này được xác định trong các header files (tệp tất cả phần không ngừng mở rộng .h)

Printf() là một hàm thư viện chuẩn có công dụng xuất kết quả đã được format sẵn ra màn hình hiển thị (hiển thị hiệu quả trên màn hình). Hàm này được khẳng định trong tệp title stdio.h. Vày đó, để thực hiện hàm printf (), họ cần bao gồm tệp title stdio.h bằng cách sử dụng #include .Hàm sqrt() có tính năng tính căn bậc nhì của một số. Hàm được xác minh trong tệp title math.h.

Truy cập vào các hàm thư viện tiêu chuẩn chỉnh trong xây dựng C để tò mò thêm.

1.2 các hàm do người tiêu dùng xác định

Bạn cũng hoàn toàn có thể tạo các hàm vào C phù hợp với yêu cầu của mình. Những hàm do người tiêu dùng tạo ra được hotline là hàm do người tiêu dùng xác định.

Hàm do người dùng xác định chuyển động như núm nào?

#include

void functionName()

… .. …

… .. …

int main()

… .. …

… .. …

functionName();

… .. …

… .. …

Lập trình này vẫn thực thi các mã sau hàm main()

Khi trình biên dịch chạm chán hàm functionName():, tinh chỉnh và điều khiển của lập trình đang nhảy tới

void functionName()

Và, trình biên dịch bước đầu thực thi những mã bên phía trong functionName ().

Điều khiển xây dựng sẽ quay trở lại hàm main() sau khi mã bên trong hàm này được thực thi.

Lưu ý, thương hiệu hàm là định danh và nên là duy nhất.

Ưu điểm của các hàm vào C do người tiêu dùng xác định

Lập trình này sẽ dễ hiểu, dễ duy trì và dễ dàng sửa lỗi hơn.Các mã tái sử dụng rất có thể được dùng một trong những lập trình khácMột lập trình lớn có thể được phân thành các mô-đun nhỏ hơn. Bởi đó, rất có thể chia một dự án lớn thành nhiều phần và mỗi lập trình sẵn viên phụ trách một phần.

2. Những hàm vào C do người dùng xác định

2.1 Ví dụ: Hàm vào C do người dùng xác định

Đây là lấy một ví dụ về bài toán thêm 2 số nguyên. Để thực hiện nhiệm vụ này, bạn phải tạo hàm addNumbers do người dùng xác định.

#include

int addNumbers(int a, int b); // function prototype

int main()

int n1,n2,sum;

printf(“Enters two numbers: “);

scanf(“%d %d”,&n1,&n2);

sum = addNumbers(n1, n2); // function call

printf(“sum = %d”,sum);

return 0;

int addNumbers(int a, int b) // function definition

int result;

result = a+b;

return result; // return statement

2.2 Nguyên mẫu mã hàm

Nguyên chủng loại hàm chính là sự khai báo hàm: tên hàm, các tham số cùng kiểu trả về. Nó chưa phải là phần thân của hàm.

Nguyên mẫu mã hàm thông tin cho trình biên dịch rằng hàm đó hoàn toàn có thể sẽ được áp dụng trong xây dựng này.

Cú pháp của nguyên mẫu mã hàm

returnType functionName(type1 argument1, type2 argument2, …);

note: argument: đối số

Trong ví dụ như trên, int addNumbers(int a, int b); chính là nguyên mẫu hàm đưa thông tin cho trình biên dịch:

tên của hàm là addNumbers ()kiểu trả về của hàm là inthai đối số kiểu int được chuyển mang đến hàm

Không yêu cầu tạo nguyên chủng loại hàm nếu hàm do fan dùng khẳng định được đặt trước hàm main().

2.3 Lời call hàm

Quyền kiểm soát lập trình được đưa sang cho hàm do fan dùng xác minh thông qua lời gọi hàm

Cú pháp của lời gọi hàm

functionName(argument1, argument2, …);

Trong lấy ví dụ như trên, lời gọi hàm được triển khai bằng lệnh addNumbers(n1, n2); bên trong hàm main().

2.4 Định nghĩa hàm

Định nghĩa hàm cất khối mã để tiến hành một trách nhiệm cụ thể. Trong lấy một ví dụ trên, có mang hàm chính là thêm 2 số cùng trả lại nó.

Cú pháp định nghĩa hàm

returnType functionName(type1 argument1, type2 argument2, …)

//body of the function

Khi một hàm được gọi, quyền tinh chỉnh và điều khiển của lập trình sẽ tiến hành chuyển sang tư tưởng hàm. Và trình biên dịch bắt đầu thực thi các mã bên phía trong phần thân của hàm.

2.5 Truyền đối số cho một hàm

Trong lập trình, đối số ám chỉ một biến hóa được truyền cho hàm. Trong lấy ví dụ như trên, 2 trở nên số n1 với n2 được truyền thông qua quá trình gọi hàm.

Các thông số a với b gật đầu đồng ý các đối số được truyền vào trong tư tưởng hàm. Các đối số này được gọi là tham số xác định của hàm.

Loại đối số được truyền cho một hàm và các tham số đồng ý phải khớp nhau. Trường hợp không, trình biên dịch đã báo lỗi.

Nếu n1 thuộc loại char thì a cũng đề nghị thuộc loại char. Nếu n2 thuộc vẻ bên ngoài float thì biến đổi b cũng yêu cầu thuộc kiểu float.

Cũng hoàn toàn có thể gọi một hàm cơ mà không cần truyền đối số.

2.6 Câu lệnh return (trả về)

Câu lệnh return chấm dứt việc xúc tiến một hàm và trả về giá bán trị đến hàm vẫn gọi. Điều khiển của lập trình sẽ được chuyển đến hàm đang điện thoại tư vấn nằm sau câu lệnh return.

Trong lấy ví dụ trên, quý hiếm của trở thành result được trả về mang lại hàm main. Biến sum trong hàm main() được gán quý hiếm này.

Cú pháp của câu lệnh return

return (expression);

Ví dụ,

return a;

return (a+b);

Kiểu quý hiếm được trả về tự hàm, kiểu dáng trả về được chỉ định trong nguyên mẫu hàm và khái niệm hàm đề xuất khớp nhau.

Xem thêm: Top 15 Bộ Phim Được Xem Phim Hay Nhất Hiện Nay, Top 15 Bộ Phim Được Xem Nhiều Nhất Hiện Nay

Truy cập vào chỗ này để biết thêm thông tin chi tiết về bí quyết truyền đối số và quý hiếm trả về xuất phát điểm từ một hàm.

3. Khai báo hàm trong C

Trong phần này, các bạn sẽ được mày mò về các cách thức tiếp cận không giống nhau để giải quyết và xử lý cùng một vấn đề bằng phương pháp sử dụng, khai báo hàm vào C.

4 lập trình dưới đây sẽ khám nghiệm xem số nguyên mà người tiêu dùng nhập vào liệu có phải là số thành phần không.

Đầu ra của tất cả các lập trình dưới đây đều giống nhau, với tôi chỉ chế tạo một hàm do tín đồ dùng xác định trong mỗi ví dụ. Mặc dù nhiên, biện pháp tiếp cận nhưng mà tôi thực hiện trong mỗi lấy ví dụ là không giống nhau.

Ví dụ 1: không tồn tại đối số làm sao được truyền và không tồn tại giá trị như thế nào trả về

#include

void checkPrimeNumber();

int main()

checkPrimeNumber(); // argument is not passed

return 0;

// return type is void meaning doesn’t return any value

void checkPrimeNumber()

{

int n, i, flag = 0;

printf(“Enter a positive integer: “);

scanf(“%d”,&n);

for(i=2; i Ví dụ 2: không có đối số như thế nào được truyền nhưng có giá trị trả về

#include

int getInteger();

int main()

{

int n, i, flag = 0;

// no argument is passed

n = getInteger();

for(i=2; iVí dụ 3: Đối số được truyền nhưng không tồn tại giá trị trả về

#include

void checkPrimeAndDisplay(int n);

int main()

int n;

printf(“Enter a positive integer: “);

scanf(“%d”,&n);

// n is passed khổng lồ the function

checkPrimeAndDisplay(n);

return 0;

// return type is void meaning doesn’t return any value

void checkPrimeAndDisplay(int n)

{

int i, flag = 0;

for(i=2; i Ví dụ 4: Đối số được truyền và có giá trị trả về

#include

int checkPrimeNumber(int n);

int main()

int n, flag;

printf(“Enter a positive integer: “);

scanf(“%d”,&n);

// n is passed to lớn the checkPrimeNumber() function

// the returned value is assigned to the flag variable

flag = checkPrimeNumber(n);

if(flag == 1)

printf(“%d is not a prime number”,n);

else

printf(“%d is a prime number”,n);

return 0;

// int is returned from the function

int checkPrimeNumber(int n)

{

int i;

for(i=2; i Cách tiếp cận nào tốt hơn?

Để review cách tiếp cận nào xuất sắc hơn thì phải xem xét đến vụ việc mà bạn đang muốn giải quyết. Tuy thế trong trường hợp này, truyền đối số và trả về giá bán trị từ 1 hàm (ví dụ 4) là tốt nhất.

Một tính năng nên tiến hành một nhiệm vụ cụ thể. Hàm checkPrimeNumber() quan yếu lấy đầu vào từ bạn dùng tương tự như không thể hiển thị thông báo thích phù hợp được. Nó chi có tính năng kiểm tra một số có buộc phải là số nguyên tố hay không.

4. Đệ quy trong lập trình C

Trong phần này, bạn sẽ được học phương pháp khai báo hàm đệ quy trong lập trình sẵn C trải qua ví dụ.

Một hàm có tác dụng tự gọi thiết yếu nó thì được xem là hàm đệ quy. Và kỹ thuật này được điện thoại tư vấn là đệ quy.

Đệ quy vận động như cố gắng nào?

void recurse()

… .. …

recurse();

… .. …

int main()

… .. …

recurse();

… .. …

Đệ quy diễn ra liên tục cho tới khi nó bị chống lại vày một đôi nét kiện nhất định.

Để ngăn chặn đệ quy lặp vô hạn, bạn áp dụng câu lệnh if … else (hoặc biện pháp tiếp cận tương tự) trên vị trí nhưng một nhánh thực hiện lệnh call đệ quy và nhánh còn sót lại thì không.

Ví dụ: Tổng những số thoải mái và tự nhiên sử dụng đệ quy

#include

int sum(int n);

int main()

int number, result;

printf(“Enter a positive integer: “);

scanf(“%d”, &number);

result = sum(number);

printf(“sum = %d”, result);

return 0;

int sum(int n)

if (n != 0)

// sum() function calls itself

return n + sum(n-1);

else

return n;

Đầu ra

Enter a positive integer:3

sum = 6

Đầu tiên, hàm sum() được điện thoại tư vấn từ hàm main() cùng với number được truyền dưới dạng đối số.

Giả sử thuở đầu giá trị của n bên trong sum() là 3. Trong lần gọi hàm tiếp theo, 2 được chuyển cho hàm sum(). Quy trình này tiếp tục cho tới khi n bằng 0.

Khi n bởi 0, điều kiện if không thành công xuất sắc và phần else được thực thi, trả về tổng số ở đầu cuối của những số nguyên cho hàm main ().

Ưu điểm cùng nhược điểm của đệ quy

Đệ quy góp lập trình trở phải ngắn gọn hơn. Mặc dù nhiên, dùng vòng lặp thay vì chưng đệ quy sẽ khiến cho lập trình diễn ra chậm hơn nhiều.

Tóm lại, đệ quy là 1 khái niệm quan tiền trọng. Nó thường xuyên được thực hiện trong kết cấu dữ liệu và các thuật toán. Ví dụ, đệ quy hay được thực hiện để giải quyết những sự việc như chuẩn y cây.

5. Lớp lưu trữ trong thiết kế C

Trong phần này, các bạn sẽ được tò mò về phạm vi và thời hạn tồn tại của những biến toàn cục và các biến toàn cục. Bên cạnh đó, bạn cũng trở nên biết thêm thông tin về đổi thay tĩnh và biến hóa register.

Tất cả các biến trong thiết kế C đều phải sở hữu 2 tính năng: nhiều loại và lớp lưu lại trữ.

Loại đề cập đến kiểu tài liệu của một biến. Với lớp lưu giữ trữ xác minh phạm vi, kỹ năng hiển thị và thời gian tồn trên của một biến.

Có 4 nhiều loại lớp lưu lại trữ:

Tự độngbên ngoàitĩnhregister

5.1 vươn lên là cục bộ

Các đổi mới được khai báo phía bên trong một khối chính là biến auto hoặc đổi thay cục bộ. Cá biến tổng thể chỉ tồn tạo bên phía trong một khối mà lại nó được khai báo.

Ví dụ:

#include

int main(void) {

for (int i = 0; i 5.2 phát triển thành toàn cục

Các trở thành được khai báo phía bên ngoài tất cả các hàm được gọi là biến phía bên ngoài hoặc đổi thay toàn cục. Chúng hoàn toàn có thể được truy cập từ bất kỳ hàm như thế nào trong lập trình.

Ví dụ 1: thay đổi toàn cục

#include

void display();

int n = 5; // global variable

int main()

++n;

display();

return 0;

void display()

++n;

printf(“n = %d”, n);

Đầu ra

n = 7

Giả sử, một biến toàn cục được khai báo trong file1. Giả dụ bạn nỗ lực sử dụng đổi thay đó vào tệp file2, trình biên dịch sẽ khiếu nại. Để xử lý vấn đề này, chúng ta nên thực hiện từ khóa extern vào file2 nhằm ám chỉ rằng rằng biến bên phía ngoài đã được khai báo trong một tệp khác.

5.3 thay đổi register

Từ khóa register dùng làm khai báo biến hóa register. đổi thay register vẫn chạy cấp tốc hơn biến cục bộ.

Tuy nhiên, những trình biên dịch tân tiến có ưu điểm là về tối ưu hóa mã nhanh chóng. Và sử dụng biến register cũng không giúp lập trình của người tiêu dùng chạy cấp tốc hơn.

Trừ khi bạn làm việc trên hệ thống nhúng và bạn biết phương pháp tối ưu hóa mã cho những áp dụng nhất định thì không đề xuất sử dụng các biến register.

5.4 đổi thay tĩnh

Biến tĩnh được khai báo bằng phương pháp sử dụng trường đoản cú khóa static. Ví dụ;

static int i;

Giá trị của biến chuyển tĩnh vẫn tồn tại cho tới khi thiết kế kết thúc.

Ví dụ 2: phát triển thành tĩnh

#include

void display();

int main()

display();

display();

void display()

static int c = 1;

c += 5;

printf(“%d “,c);

Đầu ra

6 11

Trong lần call hàm đầu tiên, quý hiếm của c được khởi tạo bằng 1. Giá trị của nó tạo thêm 5. Thời điểm này, cực hiếm của c đã là 6 và số 6 được ấn lên màn hình

Trong lần điện thoại tư vấn thứ 2, c ko được khởi tạo từ một nữa vì c là 1 biến tĩnh. Cơ hội này, cực hiếm của c tăng thêm 5. Và giá trị của c đang là 11, số 11 được in ấn lên màn hình.

Trên đây là tất cả các kiến thức về các hàm trong C, ưu thế của việc thực hiện hàm. Hy vọng nội dung bài viết sẽ giúp cho bạn có thêm kiến thức và kỹ năng về (hàm) function vào C. Chúc các bạn thành công!