[Notas de estudio] Programación en lenguaje C06 C (semana 6): funciones

Este curso proviene de "La esencia de la programación en lenguaje C" en el MOOC de la Universidad de China (Instituto de Tecnología de Harbin)

  Esta conferencia introducirá algunos conocimientos básicos sobre funciones:

1. Llamada a función

  En programación, el uso de funciones favorece la programación modular. Las funciones deben definirse antes de que se puedan llamar. A continuación, solo se presenta el proceso de llamada de funciones.
  Cada vez que se ejecuta una llamada a una función, hay:

  1. Realice protección de campo y asigne memoria para variables locales (incluidos parámetros formales) en la función
  2. Copie el valor real del parámetro en el parámetro formal, pase el valor unidireccional (parámetro real → parámetro formal)
  3. El número, tipo y orden de los parámetros formales participantes reales deben ser consistentes

  Al salir de la función, hay:

  1. Regrese al lugar de esta llamada de función de acuerdo con la dirección de retorno guardada en la pila de llamadas de función
  2. Devuelve el valor de la función a la función que llama, mientras devuelve el control a la persona que llama
  3. Recupere la memoria asignada a todas las variables (incluidos los parámetros formales) en la función

  Por ejemplo, la función de la siguiente función es calcular el valor promedio:

#include <stdio.h>
float Average(int x, int y) ;           /* compute average */

int main()
{
    
    
    int a, b ;
    scanf("%d %d",&a, &b) ;
    printf("avg = %.2f", Average(a, b)) ;
    return 0 ;
}

float Average(int x, int y)
/* compute average of x and y */
{
    
    
    float avg ;
    avg = (x + y) / 2.0 ;
    return avg ;
}
1 2
avg = 1.50

  En la función principal main(), la función se usa para Average()calcular el valor promedio. En el proceso de transferencia de control main(), primero se ejecuta la instrucción en la función. Cuando se ejecuta la función Average(), el control se pasa a la Average()función y se asigna espacio para y luego Average()se ejecuta la instrucción en la función, y luego Average()regresa de la función, pasa el control a la función principal main(), y finalmente la función finaliza. En todo el proceso, hay parámetros de la función , el flujo de control de la función, y el valor de retorno de función de transferencia. En esencia, llamada de función es también una manera de flujo de control de cambio, que tiene ciertas similitudes con la selección y la estructura de bucle.

2. Afirmaciones y seguridad del programa

  Para el diseño de programas, la eficiencia del programa es muy importante, pero la corrección del programa es aún más importante, porque el programa incorrecto no puede obtener el resultado correcto sin importar cuán eficiente sea.

2.1 Afirmación

void assert (int expression);
Evaluar aserción
Si la expresión del argumento de esta macro con forma funcional se compara igual a cero (es decir, la expresión es falsa), se escribe un mensaje en el dispositivo de error estándar y se llama a abortar, terminando la ejecución del programa.

  Afirmación assert()en la <assert.h>macro definida, la macro, detectará expressionverdadero y falso:

  1. expressionEs verdadero, silencioso y silencioso;
  2. expressionSi es falso, interrumpa el programa.

  Puede considerarse equivalente a if(!expression) exit(1) ;un ejemplo que se da a continuación:

#include <stdio.h>
#include <assert.h>
int main()
{
    
    
    int x, y ;
    scanf("%d %d",&x, &y) ;
    assert(y != 0) ;                             /* if y == 0, exit . */
    printf("%.2f\n", (float)x/y ) ;
    return 0 ;
}
1 0
Assertion failed: y != 0, file :\Documents\Desktop\myproject\Cstudy\Cprogram\main.c, line 7

  Aunque esto puede estar prohibido y == 0, assert()solo se usa para depurar y no se puede usar como una función del programa, por lo assert()que se recomiendan las siguientes situaciones:

  1. Verifique la exactitud de varias suposiciones en el programa
  2. Para probar o probar que no ocurre una situación imposible.

  Como la siguiente situación:

int MakeNumber(void)
{
    
    
	int number;
	number = rand() % 100 + 1;
	assert(number >= 1 && number <= 100);
	return number;
}

  Vale la pena señalar que funciona assert()durante la fase de depuración de la función:

  1. La versión de depuración se
    utiliza para la depuración interna; assertsolo funciona en la versión de depuración
  2. La versión de lanzamiento está
    disponible para que los usuarios la utilicen; el compilador saltará y assertno generará código de verificación

2.2 Seguridad del programa

  La seguridad del programa es un gran tema. Aquí, consideramos el siguiente ejemplo para presentarlo: Para
  intercambiar dos valores, hay dos métodos a continuación:

/* method 1 */
t = a ;
a = b ;
b = t ;
/* method 2 */
a = a + b ;
b = a – b ;
a = a – b ; 

  La conclusión conocida es method 1superior method 2, entonces, ¿cuál method 2es el problema? ¡Bienvenido a discutir en la sección de comentarios!

3. Prueba de programación

1. Suma factorial de tres dígitos

El contenido del título
  asume que existe una m de tres dígitos, cuyas centenas, decenas y unidades son respectivamente a, b, c. Si m = a!+b!+c!, entonces estos tres dígitos se denominan suma factorial de tres dígitos (convención 0!=1). Programe para calcular y generar todas las sumas factoriales de tres dígitos.
 Prototipo de función: long Fact(int n);
 Función función: Calcular el factorial de n

#include <stdio.h>
long Fact(int n) ;
int main()
{
    
    
    int m, a, b, c ;
    for(m=100; m<1000; m++)
    {
    
    
        a = m / 100 ;               /* the hundreds place of m */
        b = (m / 10) % 10 ;         /* the tens place of m */
        c = m % 10 ;                /* the ones place of m */
        if(m == (Fact(a)+Fact(b)+Fact(c)))
        {
    
    
            printf("%d\n", m) ;
        }
    }
    return 0 ;
}
long Fact(int n)
/* compute factorial of n */
{
    
    
    long sum = 1 ;
    int i ;
    for(i = n; i >= 1; i--)
    {
    
    
        sum *= i ;
    }
    return sum ;
}
145

4. Revisión anterior

1. [Notas de estudio] Programación en lenguaje C (1ra semana): Variables y constantes
2. [Notas de estudio] Programación en lenguaje C (2da semana): Operadores y expresiones C
3. [Notas de estudio] Diseño de programas en lenguaje C (la tercera semana) : entrada y salida
4. [notas de estudio] Programación en lenguaje C (cuarta semana): seleccione la estructura
5. [notas de estudio] Programación en lenguaje C (quinta semana): estructura de bucle
6. [Notas de estudio] Programación en lenguaje C (suplemento en la semana 5) ): ejercicios con estructura de bucle

Supongo que te gusta

Origin blog.csdn.net/Stu_YangPeng/article/details/114211105
Recomendado
Clasificación