Aprende C conmigo

prefacio

Este blog fue escrito cuando estaba autoaprendiendo el lenguaje C durante las vacaciones de invierno de mi primer año. Por un lado, se usó como un cuaderno para registrar y clasificar algunos progresos de aprendizaje; Chicos, ayuda.
Este blog puede considerarse como un diario para explorar el mundo de la programación. Debido a la reproducibilidad del código y la conveniencia de la captura de pantalla, es más conveniente registrar el proceso de aprendizaje. Principalmente registra algunos detalles que se pueden notar, registros de algunas operaciones y explicaciones de algunos conceptos.
El tema es aprende a programar conmigo, con la actitud de aprender con mis compañeros, entonces no es didáctico, ni técnico, y hasta tiene mucho chisme jaja.
De todos modos, ¡disfrutemos el viaje de aprendizaje!

¡Hola Mundo!

Detalles del código

#include <stdio.h>
//回车留一行空白
int main()
{
    
    
    //放主程序的地方
    return 0;
}

Este es el marco del programa, y ​​es suficiente para escribir los programas que estamos aprendiendo actualmente en este marco. Solía ​​eliminarlos después de crear un nuevo archivo antes, y mi compañero de cuarto me detuvo jaja, pero tengo que poder escribir en silencio.
Por supuesto que es fácil de recordar, pero hay algunos detalles que quiero escribir de manera más estándar y hermosa, como aprender el orden de los trazos antes de practicar la caligrafía y aprender a sostener el bolígrafo antes de aprender el orden de los trazos. Empieza bien.
Copié este marco del material didáctico del profesor Weng Kai, y el código del profesor debe ser estándar y hermoso. Nota sobre el formato creo que hay dos aspectos:

  • Por un lado, hay líneas y espacios en blanco, por ejemplo, cuando se incluye un archivo de encabezado en una directiva de preprocesamiento (símbolo #), se puede colocar un espacio entre el nombre del archivo de encabezado y el include, se deja una línea entre el directiva de preprocesamiento y la función principal; por supuesto, debe haber un espacio entre el retorno y el valor devuelto, de lo contrario no se reconocerá y se producirá el error de compilación.
  • Por otro lado está la alineación, la primera es cómo tocar las llaves. Si el corchete de apertura y la declaración que lo usa deben colocarse en la misma línea o en una línea separada es un problema, especialmente para mí, que soy algo obsesivo-compulsivo. Elegí usar al Sr. Weng Kai, como mi compañero de cuarto cuyo código es muy atractivo, usando el formato Allman, es decir

"Cada llave está en una línea separada, y tanto las llaves de apertura como las de cierre están alineadas con la declaración en la que se usan" .

return tiene una sangría, puede presionar una pestaña a la derecha y está alineado con el nombre de la función principal. No sé la razón, así que lo hice primero. Se dice que la sangría en python es muy importante.

comprensión del programa

De hecho, la lógica es fácil de entender, principalmente para registrar algunos términos aquí, para que la terminal no se llame "la ventana negra" en el futuro (Profesor Weng Kai). Haga clic en compilar y ejecutar, aparecerá la ventana negra que muestra ¡Hola mundo!, esto se llama terminal, consola o línea de comando.
empezar desde el principio

  • # es una directiva de preprocesamiento, aquí hay una referencia que incluye un archivo de encabezado.
  • #include es un comando de inclusión de archivos, que es equivalente a extraer el archivo de encabezado aquí para su uso.
  • <stdio.h> es el archivo de encabezado al que nos referimos, "entrada y salida estándar", que es una biblioteca estándar de C. Los paréntesis angulares y las comillas dobles aquí son comunes (pro-test es efectivo), la diferencia es que la ruta de búsqueda del archivo de encabezado es diferente, se dice que las comillas dobles son más poderosas (esto todavía no lo entiendo bien) ), se puede encontrar más información aquí: El uso de #include en el sitio web chino en lenguaje C.
  • int main() es nuestra función principal. En un archivo, simplemente escríbalo directamente al comienzo del programa. Pero no es el caso de que se creen varios archivos en un proyecto. El DEV C ++ que usé al principio no lo sentí, pero luego usé clion y creé directamente un nuevo archivo de código de práctica bajo el mismo proyecto, lo cual no fue bueno. Así que ahora usamos clion para crear un nuevo proyecto, y solo hay un archivo de código en el nuevo proyecto. Todavía puedo entender la esencia de estas situaciones, y debería saberlo naturalmente cuando quiera usar proyectos de varios archivos en el futuro. Pongo corchetes después de main aquí debido a una experiencia previa de depuración. En ese momento, usaba arduionoI para programar el auto (la gramática es similar), cuando ejecutaba una función, ingresaba directamente el nombre de la función, de todos modos, no había ningún valor entre paréntesis, y el resultado siempre informaba un error en esta función hasta que agregué esos paréntesis vacíos. A partir de ahí, el nombre de la función y sus paréntesis tienen en mi mente la impresión inseparable. El int aquí es el tipo del valor de retorno de la función principal (aún no lo entiendo bien).
    Abra el corchete de apertura, finalmente vamos a comenzar a escribir nuestro programa, y ​​lentamente escriba el mundialmente famoso ¡Hola mundo!
#include <stdio.h>

int main()
{
    
    
	printf("Hello World!\n");

	return 0;
}

Ventana de terminal ¡Hola mundo!

Creo que todo amigo que aprenda a programar se emocionará un poco cuando vea esta línea de salida.
Una breve explicación de algunos de los nuevos símbolos que han surgido

  • printf es una función de salida formateada que puede imprimir lo que queremos generar en la terminal
  • \n puede entenderse como la función de retorno de carro en Word. Puede ver que hay una línea en blanco entre hola y la línea punteada. Si no es grande, no es necesario escribir \n. Tenga en cuenta que hay una barra invertida para escapar.
  • Además, preste atención a la relación posicional entre corchetes, comillas y punto y coma.


En este punto, he hecho un pequeño cambio en mi camino de aprendizaje. Porque en este momento instalé una máquina virtual con un sistema operativo Linux. En cuanto al hecho de que decidí aprender a programar en una máquina virtual, la primera razón es que es más novedoso, y la segunda es que un amigo que es un magnate de la informática hizo precisamente eso. Se dice que hay algunas instrucciones que serán útiles. Al instalar el IDE en la máquina virtual, luché por un tiempo entre clion y VScode, y finalmente elegí este último. Por un lado, he usado clion durante un tiempo y la experiencia no es buena, lo que me satisface es que los gráficos y las páginas se ven mejor, por otro lado, escuché que las funciones de VS son relativamente potente, e incluso puede comunicarse con la inteligencia artificial ChatGPT.Me encanta. El proceso de instalación y los resultados también son muy limpios, esperando el próximo estudio.
Instale dos complementos primero, y aún no me he dado cuenta de sus funciones
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Hay una pequeña secuencia secuencial de pasos al crear un nuevo archivo. Puede haber formas de simplificarlo en el futuro.
En primer lugar, debe abrir el directorio donde desea crear un nuevo archivo paso a paso y luego hacer clic en Crear archivo, recuerde cambiar la extensión a .Las
palabras se explican como notas de estudio.

Speedrun "Ajá C"

Capítulos 1 y 2

(El compilador puede convertir el archivo .C en un exe, que es un archivo ejecutable, es decir, un programa que puede ejecutarse directamente en la computadora) (Aha c comentarios, ayuda para entender el tipo de archivo)

El siguiente es el primer programa de muestra en el libro.
Jaja, el primer programa pequeño es un error.
inserte la descripción de la imagen aquí
Eche un vistazo a la explicación de chatGPT.
inserte la descripción de la imagen aquí
Jaja, elimine, depure
aquí y pídale a chatGPT que aprenda cómo compilar y ejecutar el programa en el terminal.
inserte la descripción de la imagen aquí
Por supuesto, también puede hacer clic directamente en la esquina superior derecha. Un error de error más un botón para ejecutar el gráfico
inserte la descripción de la imagen aquí

#include <stdio.h>
/*#include <stdlib.h>//这里似乎没有用*/

int main()
{
    
    
    printf("ni hao\n");
   
    return 0;
}

inserte la descripción de la imagen aquí
Si no agrega el \n de avance de línea y retorno de carro, será así, está bien, pero no es tan bueno como antes. Simplemente completé una pequeña tarea y escribí la siguiente pieza de código.
inserte la descripción de la imagen aquí
Efectivamente
inserte la descripción de la imagen aquí
, algunos comandos en linux son diferentes a los de win.
inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí

Un fragmento de código para sumar, no hay problema:

#include <stdio.h>

int main()
{
    
    
    int a,b,c;//变量类型 变量名称
    a=1;
    b=2;
    c=a+b;
    printf("%d",c);
    return 0;
}

Tratar con decimales ((float y %f

#include <stdio.h>

int main()
{
    
    
    float a,b,c;
    a=1.5;
    b=2.3;
    c=a+b;
    printf("%f",c);
    return 0;
}

Muestre la expresión completa en la terminal:

#include <stdio.h>

int main()
{
    
    
    float a,b,c;
    a=1.5;
    b=2.3;
    c=a+b;
    printf("%f+%f=%f\n",a,b,c);
    //每个%f分别从后面的一个变量里拎一个值出来显示
    return 0;
}

unirse a la entrada de datos

  • scanf(“%d”, &a);
  • Se parece a printf, principalmente porque hay un extra &. Este es el tomador de direcciones, denominado tomador de direcciones, y su función es obtener la dirección de la variable a.

"Haz esta fórmula: si vas a un salón de clases, necesitas saber la dirección del salón de clases antes de la clase, para que puedas ir; pero si la clase ha terminado, debes salir del salón de clases, porque ya están en el salón de clases, por lo que la dirección de este salón de clases ya no es necesaria”.

——Ajá C

Después de leer la introducción del libro, intente compilar una calculadora de suma usted mismo.

#include <stdio.h>

int main()
{
    
    
    float a,b,c;
    printf("please type in the two numbers which you want to add up\n");
    scanf("%f %f",&a,&b);
    c = a + b;
    printf("%f+%f=%f",a,b,c);
    return 0;
}  

Al ingresar en la terminal, simplemente ponga un espacio entre los dos valores que ingresa.
inserte la descripción de la imagen aquí
Parece que no hay problema, pero la salida no es 18.210000, lo cual es un poco extraño. La introducción es la siguiente: el
inserte la descripción de la imagen aquí
programa está modificado. como sigue

#include <stdio.h>

int main()
{
    
    
    double a,b,c;//用精度更高的double变量类型
    printf("please type in the two numbers which you want to add up\n");
    scanf("%lf %lf",&a,&b);//注意这里要用%lf
    c = a + b;
    printf("%f+%f=%f",a,b,c);
    return 0;
}    

Hay una pequeña operación para cambiar el resultado de salida a 15 bits

printf("%.15f+%.15f=%.15f",a,b,c);//%.15f,就会输出15位

Hoy me acosté y finalmente traté de ejecutar el programa directamente en la terminal de Linux, Wuhu, dormir
inserte la descripción de la imagen aquí
Me gusta mucho el entorno de la máquina virtual, así que cambié los parámetros de configuración. La cantidad de núcleos de memoria y procesador se agregan a la mitad de la máquina física. Es cierto que la velocidad de apertura del IDE y la velocidad de compilación se han vuelto más rápidas.

Intercambiar variables. La lógica es simple, con un pequeño recordatorio sobre la sintaxis. En la función scanf, si hay un espacio entre los dos %d es lo mismo. Al ingresar en la terminal, se coloca un espacio entre los dos valores. Agregué una coma entre los dos %ds en este fragmento de código y puse una coma entre los dos valores al escribir en la terminal.

#include <stdio.h>
//To swap the values of two variables
int main()
{
    
    
    int a,b,temp;
    
    printf("Please type in the two values you want to swap\n");
    scanf("%d,%d",&a,&b);
    
    temp = a;//Use a temporary variable
    a = b;
    b = temp;
    
    printf("%d,%d\n",a,b);
    
    return 0;
}

inserte la descripción de la imagen aquí
Intenta intercambiar dos valores sin una nueva variable

#include <stdio.h>
//To swap the values of two variables
int main()
{
    
    
    int a,b;
    
    printf("Please type in the two values you want to swap\n");
    scanf("%d,%d",&a,&b);
    
    a = b - a;//record the differerce between the two variables
    b = b - a;//now the value of b is the original value of a
    a = b + a;//the original value of a plus this difference is the original value of b
    
    printf("%d,%d\n",a,b);
    
    return 0;
}

inserte la descripción de la imagen aquí
Ajá, el profesor C habló sobre la legibilidad, la simplicidad, la eficiencia y la belleza del código aquí,
que es lo que todos llaman "elegante". De hecho, existe tal búsqueda en el diseño mecánico.
Espero poder desarrollar algo elegante en el futuro.
Aquí hay algunas sugerencias de los maestros:

  • El código no solo debe ser entendido por las máquinas, sino también por los humanos.
  • Use el tabulador Tabulador en lugar de 4 espacios
  • Use comentarios en lugar de eliminaciones temporales

tercer capitulo

  • El uso de seis operadores relacionales para juzgar la relación entre dos números.
  • igual, mayor que, menor que, mayor o igual que, menor o igual que, no igual
  • == > < >= <= !=

Escribe el siguiente código para juzgar si es un número positivo

#include <stdio.h>
//Determine whether a number is positive
int main()
{
    
    
    printf("Please type in the number you want to determine whether it is positive.");
    int a;
    scanf("%d", &a);
    if(a>0)
    {
    
    
        printf("yes");
        //The Tab here indicates that printf("yes") is part of the if statement                                                                                                                                                                                                                                                 
    }
    if(a<=0)
    {
    
    
        printf("no");
    }
}

Escriba un fragmento de código a continuación para determinar si es un múltiplo de 5:

  • El nuevo operador % toma el resto, el uso es el siguiente
#include <stdio.h>
//Determine whether a number is positive
int main()
{
    
    
    printf("Please type in the number you want to determine whether it is a multiple of 5.\n");
    int a;
    scanf("%d", &a);
    if(a%5 == 0)
    {
    
    
        printf("yes\n");//The Tab here indicates that printf("yes") is part of the if statement                                                                                                                                                                                                                                                 
    }
    if(a%5 != 0)
    {
    
    
        printf("no\n");
    }
}

Reemplace if(a%5 != 0) con else y el resultado es el mismo

#include <stdio.h>
//Determine whether a number is positive
int main()
{
    
    
    printf("Please type in the number you want to determine whether it is a multiple of 5.\n");
    int a;
    scanf("%d", &a);
    if(a%5 == 0)
    {
    
    
        printf("yes");//The Tab here indicates that printf("yes") is part of the if statement                                                                                                                                                                                                                                                 
    }
    else
    {
    
    
        printf("no\n");
    }
}

inserte la descripción de la imagen aquí
Escriba un fragmento de código para encontrar el número máximo
y simular el proceso de pensamiento humano

#include <stdio.h>
//Find out the largest number
int main()
{
    
    
    int a,b,c,d;
    printf("Please enter three numbers\n");
    scanf("%d,%d,%d",&a,&b,&c);
    
    d = a;//Just keep the value of d in mind
    if(b>=d)
    {
    
    
        d=b;
    }
    else
    {
    
    
        d=d;
    }
       if(c>=d)
    {
    
    
        d=c;//Always replace the number d with the largest number I have seen
    }
    else
    {
    
    
        d=d;
    }

    printf("the largest number is %d\n",d);
}

Aquí omitimos la discusión de clasificación sin cerebro, agregamos directamente algunos algoritmos y usamos una ordenación de burbuja:

#include <stdio.h>
//Sorting
int main()
{
    
    
    int a,b,c;
    printf("Please enter the three numbers you want to sort\n");
    scanf("%d,%d,%d",&a,&b,&c);
    
    int temp;//define a temperorary box, used for swap values
    if(a>b)
    {
    
    
        temp=a;
        a=b;
        b=temp;
    }
        if(a>c)
    {
    
    
        temp=a;
        a=c;
        c=temp;
    }
        if(b>c)
    {
    
    
        temp=b;
        b=c;
        c=temp;
    }
//the first round is to put the smallest one in the first place
//the second round is to put the second smallest one in the second place
//we don't eliminate values, we just swap values
    printf("the result is %d,%d,%d\n",a,b,c);

}

inserte la descripción de la imagen aquí
Si el si es un número, ¿es verdadero o falso?

#include <stdio.h>

int main()
{
    
    
    int a;
    scanf("%d",&a);
    if(a)
    printf("yes");
    else
    printf("no");
}

La verdad es que todo lo demás es verdad excepto 0

Comencemos a discutir la anidación sin llaves

#include <stdio.h>

int main()
{
    
    
    int a,b,c;
    scanf("%d,%d,%d",&a,&b,&c);
    if(a>c)
        if(a>b)
            printf("%d",a);
        else
            printf("%d",b);
    else
        if(c>b)
            printf("%d",c);
        else
            printf("%d",b);
}

Preste atención a la correspondencia entre if y else, y preste atención a la integridad de la declaración if-else.

Algunas operaciones simples de la línea de comandos

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Vuelva a ejecutar el código compilado./
inserte la descripción de la imagen aquí

Algunas teclas de atajo útiles

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
**ctrl+/** Convierte directamente varias líneas de código en comentarios

Capítulo cuatro

mientras

#include <stdio.h>

int main()
{
    
    
    while (1)
    {
    
    
        printf("wa");
    }
}

inserte la descripción de la imagen aquí
se está volviendo loco

imprimir numeros del 1 al 100

#include <stdio.h>

int main()
{
    
    
    int a=1;
    while (a<=100)
    {
    
    
        printf("%d\n",a);
        a=a+1;
    }
    
}

Imprima los múltiplos de tres dentro de cien
// printf, agregue Tab aquí para indicar la declaración que se ejecutará si se cumple la condición

#include <stdio.h>

int main()
{
    
    
    int a=1;
    while (a<=100)
    {
    
    
        if(a%3==0)
        	printf("%d\n",a);
        a=a+1;
    }   
}

1 a 100 suma

#include <stdio.h>

int main()
{
    
    
    int sum=0,i=1;
    while(i<=100)
    {
    
    
        sum=sum+i;
        i=i+1;
    }
    printf("%d",sum);
}

encontrar factorial

#include <stdio.h>

int main()
{
    
    
    int fac=1,i=1,a=0;
    
    printf("please enter an integer\n");
    scanf("%d",&a);
    
    while (i<=a)
    {
    
    
        fac=fac*i;
        i=i+1;    
    }
    
    printf("%d\n",fac);
}

reloj de cuenta regresiva

#include <stdio.h>
#include <unistd.h>//different from windows when using 'sleep'

int main()
{
    
    
	printf("enter the minute and second repectively\n");
	
	int min,sec;
	scanf("%d,%d",&min,&sec);

	while(min>=0 && sec>=0)//we dont want negtive time
	{
    
    
		printf("%02d:%.2d\n",min,sec);
		//use formatting to print leading zeros
		//two ways to do it
		sleep(1);
		
		//divide into two categories
		if(sec<=0)
		{
    
    
			min--;
			sec=59;
		}
		else
		{
    
    
			sec--;
		}
	}

}

Imprima los asteriscos en la fila a y la columna b.
Use el anidamiento de bucles.
La i y la j que se usan inconscientemente aquí están bastante en línea con la tradición.
Estas pequeñas cosas se llaman variables de bucle.
Por defecto, ijkimn se usa desde la capa externa a la capa interna .

#include <stdio.h>

int main()
{
    
    
    int a=3,b=4;//determine the numbers of rows and lines
    
    int i=1;
    while(i<=a)
    {
    
    
        int j=1;
        while(j<=b)
        {
    
    
            printf("*");
            j++;
        }
        printf("\n");
        j=1;
        i++; 
    }
}

inserte la descripción de la imagen aquí
Otro ejercicio de anidamiento de bucles

#include <stdio.h>

int main()
{
    
    
    int a=6;
    int i=1,j=1;
    while(j<=a)
    {
    
    
        while(i<=j)
        {
    
    
            printf("%d",j);
            i=i+1;
        }
        printf("\n");
        i=1;
        j=j+1;
    }
}

para el debut

El ejemplo más simple:

#include <stdio.h>

int main()
{
    
    
    int a;
    for(a=1;a<=10;a++)
    {
    
    
        printf("%d\n",a);
    }
}

suma con para

#include <stdio.h>
//caldulate the sum from 1 to a
int main()
{
    
    
    int a,sum=0;
    printf("please enter the value of a");
    scanf("%d",&a);

    int i;//use this little thing again
    for(i=1;i<=a;i++)
    {
    
    
        sum=sum+i;
    }

    printf("%d",sum);
}

Enumera todos los números primos hasta el cien:

#include <stdio.h>

int main()
{
    
    
    int a=100;    
    int prime;    
    for(prime=2;prime<=a;prime++)
    {
    
    
        int i;
        int count=0;        
        for(i=2;i<=prime-1;i++)
        {
    
    
            if(prime%i==0)
                count++;
        }
        if(count==0)
            printf("%d\n",prime);
    }
}

nada mal
inserte la descripción de la imagen aquí

"Programación en lenguaje C" - Profesor Weng Kai

Decisión (si - si no)

  • Escriba código que suficiente gente pueda entender su código.
  • Calcula la relación entre dos valores, por lo que se denomina operación relacional. El resultado de la operación es el esperado y el resultado del cálculo es 1; de lo contrario, es 0.
  • Los operadores relacionales tienen una precedencia baja, pero son más altos que los operadores de asignación.
  • En los operadores relacionales == y ! = tiene menor prioridad.
  • Siempre ponga paréntesis después de if y else
  • Error significa que el programa está mal, o incluso no compila; la advertencia no es 100% problemática, pero "la advertencia debe respetarse".
  • "El estilo son tres vistas"
    inserte la descripción de la imagen aquí

la rama

  • Continuo si no requerirá un juicio continuo, que no es eficiente
  • El interruptor puede saltar directamente al caso correspondiente hasta que encuentre un descanso
#include <iostream>

using namespace std;

int main()
{
    
    
    cout << "please enter a number" << endl;
    int n;
    cin >> n;
    switch(n)
    {
    
    
        case 1:
        cout << "morning" << endl;
        break;
        case 2:
        cout << "afternoon" << endl;
        break;
        case 3:
        cout << "evening" << endl;
        break;
        default:
        cout << "what?" << endl;
        break;
    }
}
  • El if-else si en cascada
    puede entenderse como el primer if no se satisface, luego ingrese el primer else; y dentro del else, hay otro par de if-else
  • Una sola salida es mejor, es decir, el lado izquierdo de la figura de abajo es mejor que el lado derecho
    inserte la descripción de la imagen aquí
    anidado if-else
    inserte la descripción de la imagen aquí

ciclo

consejos para bucles:
si hay un número fijo de veces, use for
para ejecutar al menos una vez, use do-while
y otros usen while

ejercicio de hacer mientras:

//Calculate the number of digits of a number.
#include <iostream>

using namespace std;

int main()
{
    
    
    cout << "please enter a number" << endl;
    int theNum;
    cin >> theNum;
    int n = 0 ;
    do{
    
    
        theNum /= 10;
        n++;
    } 
    while(theNum != 0);
    cout << n << endl;
}

tipo de datos

  • inf significa infinito, nan significa inexistencia
//touch the boundry of numbers
#include <stdio.h>

int main()
{
    
    
    printf("hello\n");
    printf("%f\n",12.0/0.0);
    printf("%f\n",-12.0/0.0);
    printf("%f\n",0.0/0.0);

    return 0;
}
hello
inf
-inf
-nan
  • float1 == float2 puede fallar
    debería float1-float2<1e-12
  • Los números enteros deben ser exactos, solo se puede confiar en los números de punto flotante dentro de un cierto rango
    inserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquí
  • Cuando hay tipos inconsistentes en ambos lados del operador, se convierte automáticamente a un tipo más grande
  • Conversión de tipo obligatorio, como (int)i, la prioridad de la operación es mayor que la suma, resta, multiplicación y división

función

  • La duplicación de código es un signo de mala calidad del programa
  • return tiene dos funciones, una es terminar la ejecución de la función y la otra es devolver el siguiente valor (opcional)

puntero

  • El puntero es la dirección de los datos. Esta dirección "apunta" a donde residen esos datos
  1. Este programa es para usar una función para obtener dos valores de retorno
    , pero si usa return, solo puede devolver un valor, tal como la función aprendida en la escuela.
    Aquí usamos punteros, y le pasamos dos direcciones a esta función (a través de estos dos La función de la función
    es modificar los valores en estas dos direcciones
    En la función principal, acceda a los valores en estas dos direcciones y luego emita, es decir, emita los resultados del procesamiento de la función.
//use one function to return more than one values
//some of the values could just be returned with the help of pointers

#include <iostream>

using namespace std;

void maxmin(int a[], int* p_max, int* p_min);//define two pointers as parameters

int main()
{
    
    
    int a[] = {
    
    1,2,3,4,5,87};
    int max, min;
    maxmin(a, &max, &min);
    cout << max << endl << min << endl;
}

void maxmin(int a[], int* p_max, int* p_min)
{
    
    
    int i;
    *p_max = *p_min = a[0];//initialize the values on the two addresses
    
    for(i=0; i<=5; i++){
    
    
        
        if(*p_min>a[i]){
    
    
            *p_min=a[i];
        }
        
        if(*p_max<a[i]){
    
    
        *p_max=a[i];
        }
    }
}
  1. Use el resultado de la función para devolver el estado de la operación
    y use el puntero para devolver el resultado de la operación
    para evitar condiciones anormales (como el divisor es 0
#include <iostream>

using namespace std;

int get_quotient(int a, int b, double* p_c);
int main()
{
    
    
    cout << "please enter the dividend and divisor repectively:\n" ;
    int a, b;
    cin >> a;
    cin >> b;
    double c;
    if(get_quotient(a,b,&c)){
    
    
        cout << c;
    }
}

int get_quotient(int a, int b, double* p_c)
{
    
    
    int ret = 1;
    if(b==0){
    
    
        ret=0;
    }
    else{
    
    
        *p_c = (double)a/b;   //this double is used to get a double result
            // or the quotient of two integers would lead to an integer too
    }
    return ret;
}

Supongo que te gusta

Origin blog.csdn.net/m0_73293161/article/details/128353636
Recomendado
Clasificación