English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C 语言基础教程

C 语言流程控制

Funciones de C

Arreglos de C

Punteros de C

Cadenas de C

C 语言结构体

C 语言文件

C 其他

C 语言参考手册

C 语言用户定义函数的类型

在本教程中,您将学习使用函数来解决同一问题的不同方法。

下面的这4个程序检查用户输入的整数是否是质数。

下面所有这些程序的输出是相同的,并且在每个示例中我们都创建了一个用户定义的函数。但是,我们在每个示例中采用的方法都是不同的。

Ejemplo1:没有传递参数,也没有返回值

#include <stdio.h>
void checkPrimeNumber();
int main()
{
    checkPrimeNumber();    //没有传递参数
    return 0;
}
//El tipo de retorno es void, lo que significa que no devuelve ningún valor
void checkPrimeNumber()
{
    int n, i, flag = 0;
    printf("Ingrese un entero positivo: ");
    scanf("%d", &n);
    for(i=2; i <= n/2; ++i)
    {
        if(n % i == 0)
        {
            flag = 1;
        }
    }
    if (flag == 1)
        printf("%d no es un número primo.", n);
    else
        printf("%d es un número primo.", n);
}

checkPrimeNumber()函数接收用户的输入,检查它是否是质数,并将其显示在屏幕上。

main()函数内部checkPrimeNumber();的括号中的空括号表示没有参数传递给函数。

函数的返回类型为void。因此,该函数不返回任何值。

Ejemplo2:不传递任何参数,但返回值

#include <stdio.h>
int getInteger();
int main()
{
    int n, i, flag = 0;
   //没有传递任何参数
    n = getInteger();    
    for(i=2; i<=n/2; ++i)
    {
        if(n%i==0){
            flag = 1;
            break;
        }
    }
    if (flag == 1)
        printf("%d no es un número primo.", n);
    else
        printf("%d es un número primo.", n);
    return 0;
}
//返回用户输入的整数
int getInteger()       
{
    int n;
    printf("Ingrese un entero positivo: ");
    scanf("%d", &n);
    return n;
}

n = getInteger(); las llaves vacías en la语句 significan que no se pasaron parámetros a la función. Y se asignará el valor devuelto por la función a n.

Aquí, la función getInteger() obtiene la entrada del usuario y devuelve.

Ejemplo3: los parámetros se pasaron pero no se devolvieron valores

#include <stdio.h>
void checkPrimeAndDisplay(int n);
int main()
{
    int n;
    printf("Ingrese un entero positivo: ");
    scanf("%d", &n);
    // n se pasa a la función
    checkPrimeAndDisplay(n);
    return 0;
}
//El tipo de retorno es void, lo que significa que no devuelve ningún valor
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 no es un número primo.", n);
    else
        printf("%d es un número primo.", n);
}

El valor entero ingresado por el usuario se pasará a la función checkPrimeAndDisplay().

Aquí, la función checkPrimeAndDisplay() verifica si el parámetro pasado es un número primo y muestra un mensaje adecuado.

Ejemplo4: pasar parámetros y valores de retorno

#include <stdio.h>
int checkPrimeNumber(int n);
int main()
{
    int n, flag;
    printf("Ingrese un entero positivo: ");
    scanf("%d", &n);
    //n se pasa a la función checkPrimeNumber()
    //El valor devuelto se asigna a la variable flag
    flag = checkPrimeNumber(n);
    if (flag == 1)
        printf("%d no es un número primo.", n);
    else
        printf("%d es un número primo.", n);
    return 0;
}
//devuelve int desde la función
int checkPrimeNumber(int n)
{
    int i;
    for(i=2; i <= n/2; ++i)
    {
        if(n % i == 0)
            return 1;
    }
    return 0;
}

El valor de entrada del usuario se pasará a la función checkPrimeNumber().

La función checkPrimeNumber() verifica si el parámetro pasado es un número primo.

Si el parámetro pasado es un número primo, la función devuelve 0. Si el parámetro pasado no es un número primo, la función devuelve1. El valor de retorno se asignará a la variable flag.

dependiendo de si flag es 0 o1La función main() imprimirá un mensaje adecuado.

¿Cuál es el método mejor?

Bien, depende del problema que desee resolver. En este caso, es mejor pasar parámetros y devolver valores desde la función (ejemplo4)。

La función debe ejecutar una tarea específica. La función checkPrimeNumber() no acepta entrada del usuario ni muestra mensajes adecuados. Simplemente verifica si el número es primo.