Các loại hàm do người dùng định nghĩa trong lập trình C

Trong hướng dẫn này, bạn sẽ tìm hiểu về các cách tiếp cận khác nhau mà bạn có thể thực hiện để giải quyết cùng một vấn đề bằng cách sử dụng các hàm.

4 chương trình dưới đây kiểm tra số nguyên do người dùng nhập có phải là số nguyên tố hay không.

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

Ví dụ 1: Không có đối số nào được truyền và không có giá trị trả về

#include <stdio.h>

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 <= n/2; ++i)
    {
        if(n%i == 0)
        {
            flag = 1;
        }
    }
    if (flag == 1)
        printf("%d is not a prime number.", n);
    else
        printf("%d is a prime number.", n);
}

Các checkPrimeNumber()chức năng có đầu vào từ người dùng, kiểm tra cho dù đó là một số nguyên tố hay không và hiển thị nó trên màn hình.

Các dấu ngoặc trống trong checkPrimeNumber();câu lệnh bên trong main()hàm cho biết rằng không có đối số nào được truyền cho hàm.

Kiểu trả về của hàm là void. Do đó, không có giá trị nào được trả về từ hàm.

Ví dụ 2: Không có đối số nào được truyền nhưng có giá trị trả về

#include <stdio.h>
int getInteger();

int main()
{
    int n, i, flag = 0;

   // no argument is passed
    n = getInteger();    

    for(i=2; i<=n/2; ++i)
    {
        if(n%i==0){
            flag = 1;
            break;
        }
    }

    if (flag == 1)
        printf("%d is not a prime number.", n);
    else
        printf("%d is a prime number.", n);

    return 0;
}

// returns integer entered by the user
int getInteger()       
{
    int n;

    printf("Enter a positive integer: ");
    scanf("%d",&n);

    return n;
}

Các dấu ngoặc trống trong n = getInteger();câu lệnh chỉ ra rằng không có đối số nào được truyền vào hàm. Và, giá trị trả về từ hàm được gán cho n .

Tại đây, getInteger()hàm nhận đầu vào từ người dùng và trả về. Mã để kiểm tra xem một số có phải là số nguyên tố hay không nằm trong main()hàm.

Ví dụ 3: Đối số được truyền nhưng không có giá trị trả về

#include <stdio.h>
void checkPrimeAndDisplay(int n);

int main()
{
    int n;

    printf("Enter a positive integer: ");
    scanf("%d",&n);

    // n is passed to 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 <= n/2; ++i)
    {
        if(n%i == 0){
            flag = 1;
            break;
        }
    }
    if(flag == 1)
        printf("%d is not a prime number.",n);
    else
        printf("%d is a prime number.", n);
}

Giá trị số nguyên do người dùng nhập được chuyển cho checkPrimeAndDisplay()hàm.

Tại đây, checkPrimeAndDisplay()hàm sẽ kiểm tra xem đối số được truyền vào có phải là số nguyên tố hay không và hiển thị thông báo thích hợp.

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

#include <stdio.h>
int checkPrimeNumber(int n);

int main()
{
    int n, flag;

    printf("Enter a positive integer: ");
    scanf("%d",&n);

    // n is passed to 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 <= n/2; ++i)
    {
        if(n%i == 0)
            return 1;
    }

    return 0;
}

Đầu vào từ người dùng được chuyển cho checkPrimeNumber()hàm.

Các checkPrimeNumber()kiểm tra chức năng cho dù lập luận thông qua là số nguyên tố hay không.

Nếu đối số được truyền là một số nguyên tố, hàm trả về 0. Nếu đối số được truyền vào là số không phải nguyên tố, hàm trả về 1. Giá trị trả về được gán cho biến cờ .

Tùy thuộc vào việc cờ là 0 hay 1, một thông báo thích hợp sẽ được in từ main()hàm.

Cách tiếp cận nào tốt hơn?

Vâng, nó phụ thuộc vào vấn đề bạn đang cố gắng giải quyết. Trong trường hợp này, truyền đối số và trả về một giá trị từ hàm (ví dụ 4) là tốt hơn.

Một chức năng nên thực hiện một nhiệm vụ cụ thể. Các checkPrimeNumber()chức năng không lấy đầu vào từ người sử dụng cũng không hiển thị thông báo thích hợp. Nó chỉ kiểm tra xem một số có phải là số nguyên tố hay không.









Gõ tìm kiếm nhanh...