VietTuts

Tự Học Lập Trình Online

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • MyBatis
  • Java WS
  • C
  • C++
  • C#
  • Python
  • PHP
  • Excel
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • CSS
    • HTML
    • HTML5
    • Node.js
    • Angular 7
  • SQL
    • MySQL
    • SQL Server
  • Misc
    • Eclipse
    • Phần mềm tiện ích
    • Cấu trúc DL&GT
    • Selenium Test

C Cơ Bản

Ngôn ngữ lập trình C là gì? Lịch sử của C Các tính năng của C Cài đặt môi trường lập trình C Chương trình C đầu tiên Flow của chương trình C Biến trong C Các kiểu dữ liệu trong C Ép kiểu trong C Từ khóa trong C Các toán tử trong C Comment trong C Các hằng số trong C printf và scanf trong C Ký tự đặc biệt trong C Xử lý lỗi trong C Tệp Header trong C Toán tử sizeof trong C

Câu Lệnh Điều Khiển C

Mệnh đề if-else Mệnh đề switch Vòng lặp for Vòng lặp while Vòng lặp do-while Lệnh Break Lệnh Continue Lệnh Goto

Con Trỏ

Con trỏ (pointer) trong C Con trỏ trỏ tới con trỏ Con trỏ và mảng trong C Quản lý bộ nhớ trong C

Structure & Union

Structure trong C Mảng của structure trong C Structure lồng nhau trong C Union trong C

C Math

Hàm math cơ bản trong C

C Function

Hàm trong C Hàm do người dùng định nghĩa Các kiểu hàm trong C Đệ quy trong C Call by value Call by reference

C Array

Mảng (array) trong C Mảng 2 chiều trong C Truyền mảng vào hàm
Chuỗi (String) Trong C
File I/O Trong C
Bài Tập C Có Lời Giải

Bài Học Bổ Sung

Enumeration (enum) trong C Preprocessors trong C Bảng ASCII
1 / 3
❮ ❯

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


Hàm do người dùng định nghĩa trong C
Đệ quy trong C

Để hiểu rõ hơn về các đối số và giá trị trả về từ hàm, các loại hàm do người dùng định nghĩa có thể được phân loại theo đối số truyền vào và kiểu trả về, như sau:

  • Hàm không có đối số và không có giá trị trả về
  • Hàm không có đối số và có giá trị trả về
  • Hàm có đối số và không có giá trị trả về
  • Hàm có đối số và có giá trị trả về

4 chương trình dưới đây kiểm tra xem một số nguyên được nhập bởi người dùng có phải là số nguyên tố hay không. Và, tất cả các chương trình này tạo ra cùng một đầu ra. Sau đây là các ví dụ về các loại hàm do người dùng định nghĩa trong lập trình C:


Nội dung chính

  • Ví dụ 1: Hàm không có đối số và không có giá trị trả về
  • Ví dụ 2: Hàm không có đối số và có giá trị trả về
  • Ví dụ 3: Hàm có đối số và không có giá trị trả về
  • Ví dụ 4: Hàm có đối số và có giá trị trả về
  • Cách tiếp cận nào tốt hơn?

Ví dụ 1: Hàm không có đối số và không có giá trị trả về

#include <stdio.h>

void checkPrimeNumber();

int main()
{
    checkPrimeNumber(); // khong co doi so nao duoc chuyen vao ham nay
    return 0;
}

// kieu tra ve cua ham la void vi khong co gia tri nao duoc tra ve tu ham
void checkPrimeNumber()
{
    int n, i, flag=0;

    printf("Nhap mot so nguyen duong: ");
    scanf("%d",&n);

    for(i=2; i <= n/2; ++i)
    {
        if(n%i == 0)
        {
            flag = 1;
        }
    }
    if (flag == 1)
        printf("%d khong phai la mot so nguyen to.", n);
    else
        printf("%d la mot so nguyen to.", n);
}

Hàm checkPrimeNumber() 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 đơn trống trong câu lệnh checkPrimeNumber(); bên trong hàm main() chỉ ra 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: Hàm không có đối số và có giá trị trả về

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

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

    // khong co doi so nao duoc chuyen vao ham nay
    // gia tri tra ve tu ham nay duoc gan cho n
    n = getInteger();

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

    if (flag == 1)
        printf("%d khong phai la mot so nguyen to.", n);
    else
        printf("%d la mot so nguyen to.", n);

    return 0;
}

// ham getInteger() tra ve mot so nguyen duong
int getInteger() {
    int n;

    printf("Nhap mot so nguyen duong: ");
    scanf("%d",&n);

    return n;
}

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

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


Ví dụ 3: Hàm có đối số và không có giá trị trả về

#include <stdio.h>

void checkPrimeAndDisplay(int n);

int main() {
    int n;

    printf("Nhap mot so nguyen duong: ");
    scanf("%d",&n);

    // n duoc truyen vao ham
    checkPrimeAndDisplay(n);

    return 0;
}

// void chi ra rang khong co gia tri nao duoc tra ve tu ham
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 khong phai la mot so nguyen to.", n);
    else
        printf("%d la mot so nguyen to.", n);
}

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

Ở đây, hàm checkPrimeAndDisplay() kiểm tra xem đối số đã truyền 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: Hàm có đối số và có giá trị trả về

#include <stdio.h>

int checkPrimeNumber(int n);

int main()
{
    int n, flag;

    printf("Nhap mot so nguyen duong: ");
    scanf("%d", &n);

    // n duoc truyen vao ham checkPrimeNumber()
    // gia tri tra ve tu ham duoc gan cho bien flag
    flag = checkPrimeNumber(n);

    if (flag == 1)
        printf("%d khong phai la mot so nguyen to.", n);
    else
        printf("%d la mot so nguyen to.", n);

    return 0;
}

/*
 * Mot so nguyen duoc tra ve tu ham nay
 * parameter: n - so nguyen duong
 * return: 0 - n la so nguyen to
 *         1 - n khong phai la so nguyen to
 */
int checkPrimeNumber(int n) {
    int i;

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

    return 0;
}

Dữ liệu đầu vào từ người dùng được chuyển đến hàm checkPrimeNumber().

Hàm checkPrimeNumber() kiểm tra xem đối số được truyền vào 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ố đã truyền không là một số nguyên tố, hàm trả về 1. Giá trị trả về được gán cho biến flag.


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

Nó phụ thuộc vào vấn đề bạn đang cố gắng giải quyết. Trong trường hợp của vấn đề này, cách tiếp cận cuối cùng là tốt hơn.

Một hàm nên thực hiện một tác vụ cụ thể. Hàm checkPrimeNumber() không lấy dữ liệu đầu vào từ người sử dụng cũng không hiển thị thông báo đến người sử dụng. Nó chỉ kiểm tra xem một số là nguyên tố hay không, mà làm cho code có tính mô-đun, dễ hiểu và gỡ lỗi.


Hàm do người dùng định nghĩa trong C
Đệ quy trong C

Recent Updates

Xuất dữ liệu ra màn hình console trong JavaCài đặt môi trường JavaLinkedList trong javaArrayList trong javaXử lý duplicate trong SQLPhím tắt hay dùng trong ExcelBảo mật tập tin ExcelDịch trang tính trong ExcelIn trang tính trong ExcelHàm VLOOKUP trong ExcelĐối tượng đồ họa trong ExcelSử dụng macro trong ExcelSắp Tết 2026 Rồi! - Còn bao nhiêu ngày nữa là đến tết 2026?

VietTuts on facebook

Học Lập Trình Online Miễn Phí - VietTuts.Vn
Danh Sách Bài Học

Học Java | Hibernate | Spring
Học Excel | Excel VBA
Học Servlet | JSP | Struts2
Học C | C++ | C#
Học Python
Học SQL

Bài Tập Có Lời Giải

Bài tập Java
Bài tập C
Bài tập C++
Bài tập C#
Bài tập Python
Ví dụ Excel VBA

Câu Hỏi Phỏng Vấn

201 câu hỏi phỏng vấn java
25 câu hỏi phỏng vấn servlet
75 câu hỏi phỏng vấn jsp
52 câu hỏi phỏng vấn Hibernate
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

Scroll back to top

Copyright © 2016 VietTuts.Vn all rights reserved. | Liên hệ | Chính sách - riêng tư | sitemap.html | sitemap_index.xml