¿Cómo aprender rápidamente el lenguaje C y el microcontrolador? Gracias a todos los héroes.
Cómo aprender bien el lenguaje C
La mayoría de los estudiantes que han impartido el curso "Programación en lenguaje C" durante muchos años encuentran este curso difícil de aprender. De hecho, de acuerdo con nuestro plan de estudios y requisitos de enseñanza actuales, siempre que los estudiantes dominen algunos métodos, superen las dificultades psicológicas y no se rindan, podrán aprenderlo bien.
La "Programación en lenguaje C" es muy rica en contenido. Según nuestro programa de enseñanza actual, el contenido principal de la enseñanza son los conocimientos básicos, la programación de cuatro estructuras, la aplicación de funciones y matrices y algunos algoritmos simples. . Al estudiar, los estudiantes deben concentrarse en dominar estas partes del contenido y dominarlas mediante ejercicios (ejercicios y depuración, etc.). Por supuesto, cuando aprende el lenguaje C por primera vez, puede encontrar algunos problemas que no comprende o que las expresiones son diferentes de las que solía usar para aprender matemáticas (como operadores, etc.). y haz más preguntas sobre cosas que no entiendes, reúne el coraje para aprender. Después de aprender los conocimientos de este capítulo, los problemas anteriores se resolverán. Siento que este aspecto es lo que más les falta a la mayoría de nuestros estudiantes. ¡La mayoría de ellos se debe a que no aprendieron bien al principio! Ríndete cuando encuentres dificultades. Una vez, cuando hablé con muchos estudiantes sobre sus problemas, las respuestas fueron que no entendían, no querían escuchar y se dieron por vencidos, ¿asististe a esta clase? La respuesta es no. Ni siquiera he escuchado la clase. Según esto, si no aprendes bien, ¿cómo puedes hablar de aprender bien?
Cuando aprenda el lenguaje C, recuerde siempre que "la luz está al frente" y "es difícil comprar y mirar hacia atrás". "Es difícil comprar y mirar hacia atrás" es una forma importante de aprender conocimientos. Es decir, para aprender el conocimiento detrás, no olvides mirar hacia atrás. La forma más importante de aprender conocimientos es aprender bien los conocimientos posteriores, nunca olvidar retroceder y aclarar los problemas restantes y profundizar la comprensión de los conocimientos previos. Esto es lo más difícil de hacer para nuestros estudiantes, pero lo es. el más importante. Por ejemplo: la idea más típica en lenguaje C es la idea de programación estructurada, no importa qué tipo de libro de texto, este método se enfatiza al principio. Es posible que no pueda comprenderlo completamente en este momento, pero cuando lo haga. aprenda esta función y luego regrese y experimente cuidadosamente, no será tan difícil aprender y comprender. Aprender el lenguaje C significa pasar por varias iteraciones antes de poder acumular el conocimiento del lenguaje C que debes dominar.
Entonces, ¿cómo aprendemos a programar en C?
1. Aprenda los operadores y el orden de operación del lenguaje C.
Esta es la base para aprender "programación en lenguaje C". Las operaciones del lenguaje C son muy flexibles y las funciones son muy. Rico y los tipos de operaciones están muy lejos de otros lenguajes de programación. Otros lenguajes de programación son relativamente concisos en términos de expresiones, como la autosuma, la autodecremento, la operación de coma y la operación ternaria, lo que hace que las expresiones sean más concisas. Sin embargo, los principiantes a menudo encuentran que estas expresiones son difíciles de entender. es que los operadores y El orden de las operaciones no se entiende, está incompleto e incompleto. Cuando muchas operaciones diferentes forman una expresión, es decir, cuando hay varios operadores en una expresión, el orden y las reglas de combinación de las operaciones se vuelven muy importantes. En el aprendizaje, siempre que podamos clasificarlos razonablemente y descubrir la diferencia entre ellos y las operaciones que hemos aprendido en matemáticas, no será difícil recordar estos operadores después de comprender más. para usar en el futuro, y algunos pueden abandonarse y olvidarse temporalmente, y no será demasiado tarde para recordarlos cuando se usen.
En primer lugar, debemos dejar claro que los operadores se clasifican según diferentes prioridades. Los operadores en "Programación en lenguaje C" se pueden dividir en 15 prioridades, de mayor a menor. a excepción de los niveles 2, 3 y 14, que son combinaciones de derecha a izquierda, los demás son combinaciones de izquierda a derecha, lo que determina el orden de operaciones de los operadores del mismo nivel. A continuación usamos varios ejemplos para ilustrar:
(1) 5*8/4%10 Hay 3 operadores en esta expresión, que son operadores del mismo nivel, y el orden de las operaciones es de izquierda a Bien combinado, entonces el primer resultado calculado es 5 * 8 = 40, luego dividido por 4, el resultado es 10, y finalmente la operación % (resto), por lo que el resultado final de la expresión es 10%10 = 0;
(2) a = 3; b = 5; c =++ a* b; d =a + +* b; la tabla En el orden, ++ se ejecuta primero, luego *, por lo que después de ejecutar ++ a, el valor de a es 4.
Como + + es la primera operación y el valor de a es 4, el valor de C es 4*5=20 en lugar de 3*5=15. *b, debido a que a ++ es una posoperación, el valor de a es 4 y participa en la operación, por lo que el valor de d sigue siendo 20. El valor de a después de participar en la operación se incrementa en 1, es decir es decir, el valor es 5. Después de ejecutar este ejemplo, el valor de a es 5, el valor de b es 5, el valor de c es 20 y el valor de d es 20;
(3) (a = 3, b = 5, b+ = a, c = b* 5)
El "," en la pregunta de ejemplo es una operación de combinación de coma. La ecuación anterior se llama expresión de coma cuando se combina de izquierda a derecha. el valor del resultado de la última expresión es el resultado de la expresión de coma, por lo que el resultado de la expresión de coma anterior es 40, el valor de a es 3, el valor de b es 8 y el valor de c es 40.
(4) a = 5;b = 6;c = a >b?a:b;
a>b?a:b en el ejemplo es una operación trinomio, su función es realizar primero la parte a>b de la operación relacional. Si el resultado es verdadero, entonces tome el valor de a después del signo de interrogación; de lo contrario, tome el valor de b después de los dos puntos, por lo que el valor de c debe ser. 6. En aplicaciones simples, esta operación se puede utilizar en lugar de declaraciones if...else....
II.Aprende las cuatro estructuras de programas del lenguaje C
(1) Estructura secuencial
La programación de estructura secuencial es la más sencilla, siempre y cuando sigas el orden. de las preguntas Simplemente escriba la declaración correspondiente, y su orden de ejecución es de arriba a abajo.
Por ejemplo; a=3, b=5, ahora intercambiando los valores de a y b, este problema es como intercambiar dos tazas de agua, de las cuales la tercera taza es por supuesto agua. Si la tercera taza es c, entonces el procedimiento correcto es: c=a; a=b; b=c; c=a; b=c, el resultado cambiará. Se convierte en a=b=c=5, lo que no logra el propósito esperado y también es el error más común que cometen los principiantes. La estructura secuencial puede formar de forma independiente un programa simple y completo. Un programa común de entrada, cálculo y salida de tres pasos es la estructura secuencial. Por ejemplo, para calcular el área de un círculo, la secuencia de declaraciones del programa es. para ingresar el radio r del círculo y calcular s=3. Sin embargo, en la mayoría de los casos, la estructura secuencial se usa como parte del programa y, junto con otras estructuras, forma un programa complejo, como una estructura de rama. Un programa complejo, como una estructura de rama en una declaración compuesta, una estructura de bucle en un cuerpo de bucle, etc.
(2) Rama
Los programas secuenciales pueden resolver problemas como el cálculo y la salida, pero no pueden emitir juicios ni elecciones. Para problemas que requieren juicio primero y luego selección, se puede utilizar una estructura de ramificación. La ejecución de la estructura de rama selecciona la ruta de ejecución en función de ciertas condiciones, en lugar de seguir estrictamente el orden físico de las declaraciones. La clave del método de programación de estructura de bifurcación es construir condiciones de bifurcación apropiadas, analizar el flujo del programa y seleccionar declaraciones de bifurcación apropiadas en función de diferentes flujos de programa. La estructura de rama es adecuada para cálculos con juicios condicionales, como comparaciones lógicas o comparaciones relacionales. El diseño de dichos programas a menudo requiere dibujar el diagrama de flujo del programa y luego escribir el programa fuente de acuerdo con el flujo del programa. Esto separa el análisis del diseño del programa del lenguaje. Haga que el problema sea simple y fácil de entender. Un diagrama de flujo de un programa es un diagrama de flujo de ejecución de un programa elaborado en base al análisis de resolución de problemas.
No se deje confundir por el anidamiento de ramas cuando aprenda la estructura de las ramas, siempre que dibuje el diagrama de flujo correctamente y aclare las funciones que debe realizar cada rama, la estructura anidada no es difícil. El anidamiento no es más que ramas y declaraciones que contienen ramas. No es un conocimiento nuevo, siempre que comprenda claramente las ramas dobles, el anidamiento de ramas no es difícil. A continuación presento varias estructuras de ramas básicas.
①if (condición)
{
Rama
}
Rama en esta estructura de rama El cuerpo puede ser una declaración, en cuyo caso "{ }" se puede omitir, o pueden ser varias declaraciones, es decir, una declaración compuesta. Tiene dos rutas de bifurcación para elegir. Una es ejecutar el cuerpo de la bifurcación cuando la condición es verdadera; de lo contrario, el cuerpo de la bifurcación se omite y no se ejecuta.
Por ejemplo: para calcular el valor absoluto de x, de acuerdo con la definición de valor absoluto, sabemos que cuando x>=0, su valor absoluto permanece sin cambios, y cuando x<0, su valor absoluto es el recíproco de x. Por lo tanto, el segmento del programa es: if(x<0) x=-x
②if(condition)
{branch1}
else
{branch2 }
Esta es una estructura de rama típica. Si la condición es verdadera, se ejecuta la rama 1; de lo contrario, se ejecuta la rama 2. La rama 1 y la rama 2 pueden ser una o más declaraciones. Por ejemplo: Encuentra las raíces de ax^2+bx+c=0
Análisis: Porque cuando b^2-4ac>=0, la ecuación tiene dos raíces reales, de lo contrario (b^2-4ac < 0) Hay dos raíces plurales unidas con dos dedos. El segmento del programa es el siguiente:
d=b*b-4*a*c
if(d>=0)
{x1=; (-b +sqrt(d))/2a;
x1=(-b-sqrt(d))/2a
printf("x1=%8.4f,x2; =%8.4 f\n",x1,x2);
}
else
{r=-b/(2*a);
i =sqrt(-d)/(2*a);
printf("x1=%8.4f+%8.4f\n");
printf("x1 =%8.4f+%8.4f\n 8.4f+%8.4fi\n "r, i
printf("x2=%8.4f-%8.4fi\n); "r,i)
printf("x2=%8.4f-%8.4fi\n "r,i)
p>}
3) Declaración de rama anidada: el formato de la declaración es:
if(condición 1) {rama 1};
else if(condición 2) {rama 2}
else if(condición 3) {rama 3}
......
else if(condición n) {rama n}
else if( condición 3) {branch 3}
else {branch n +1}
El anidamiento de declaraciones de rama puede resolver el problema de múltiples entradas y múltiples salidas, pero después de anidar más de 3 A veces, la estructura de la declaración se vuelve muy complicada, lo cual es extremadamente inconveniente al leer y comprender el programa. Por lo tanto, se recomienda anidar menos de 3 veces. Se pueden anidar más de 3 veces. Utilice las siguientes declaraciones.
④Switch switch declaración: esta declaración también es una declaración de selección de múltiples ramas. El bloque que se ejecuta depende de la configuración del interruptor, es decir, cómo el valor de la expresión coincide con la expresión constante. es if... .else declaración, todas sus ramas están una al lado de la otra. Cuando se ejecuta el programa, comienza a buscar desde la primera rama. Si coincide, sus bloques posteriores se ejecutan. Todas las ramas ejecutadas a continuación están una al lado de la otra. Se ejecuta el primero. Al bifurcar, si hay una coincidencia, se ejecuta el siguiente bloque. Ejecute los bloques de programa posteriores y luego ejecute los bloques de programa de la segunda rama, la tercera rama ... hasta que encuentre la declaración de interrupción, si no hay coincidencia, verifique si la siguiente rama coincide; Al aplicar esta declaración, se debe prestar especial atención al establecimiento razonable de las condiciones de conmutación y a la aplicación razonable de las declaraciones de desconexión.
(3) Estructura de bucle:
La estructura de bucle puede reducir la carga de trabajo de la escritura repetida de programas fuente y se utiliza para describir el problema de ejecutar repetidamente un determinado algoritmo. Una forma efectiva de programación es una estructura de programa que aprovecha las fortalezas de la computadora. El lenguaje C proporciona cuatro tipos de bucles, a saber, goto loop, while loop, do- while y el lenguaje C proporciona cuatro tipos de bucles, a saber, goto loop y while loop. , bucle do- while y bucle for.
Estos cuatro tipos de bucles se pueden utilizar para solucionar el mismo problema. En general, pueden reemplazarse entre sí. Sin embargo, generalmente no se recomienda el uso de bucles goto porque cambiar a la fuerza el orden del programa a menudo provocará errores imprevistos. Durante el aprendizaje, aprendemos principalmente tres tipos de bucles: while, do... while y for. El objetivo de aprender las tres estructuras de bucles de uso común es aclarar sus similitudes y diferencias para que puedan usarse en diferentes situaciones. Es necesario comprender el formato y el orden de ejecución de estos tres bucles después de tener una comprensión profunda del flujo. gráfico de cada bucle, cómo usar sustituciones, como usar el bucle while como ejemplo, y reescribir un programa usando declaraciones for para comprender mejor su función. Se debe prestar especial atención al hecho de que el cuerpo del bucle debe contener declaraciones que tienden a terminar (es decir, cambios en el valor de la variable del bucle), de lo contrario puede convertirse en un bucle infinito, que es un error común cometido por los principiantes.
Después de conocer estos tres tipos de bucles, debes aclarar sus similitudes y diferencias: en los bucles while y do... while, la operación de inicialización de las variables del bucle debe realizarse antes del cuerpo del bucle, mientras que el El bucle for generalmente está en la declaración 1; tanto el bucle while como el for primero juzgan la expresión y luego ejecutan el cuerpo del bucle. En el bucle do... while, la operación de inicialización de la variable del bucle debe realizarse antes del cuerpo del bucle. el bucle for generalmente se realiza en la instrucción 2. Los bucles while y do... while evalúan la expresión primero y luego ejecutan el cuerpo del bucle, mientras que el bucle do... while generalmente se ejecuta en la instrucción 3. ... El bucle while ejecuta primero el cuerpo del bucle y luego evalúa la expresión, lo que significa que el cuerpo del bucle do... while se ejecuta al menos una vez, mientras que los bucles while y for pueden no ejecutarse en absoluto. También debe tenerse en cuenta que estos tres tipos de bucles pueden usar la instrucción break para saltar del bucle y la instrucción continue para finalizar el bucle, pero la instrucción goto y el bucle if no pueden ser controlados por las declaraciones break y continue.
Las estructuras secuenciales, las estructuras ramificadas y las estructuras en bucle no están aisladas entre sí. Puede haber estructuras de rama y estructuras secuenciales en bucles, y puede haber estructuras de bucle y estructuras secuenciales en ramas, pero no importa qué estructura, podemos tratarlas aproximadamente como una declaración. En el proceso de programación real, estas tres estructuras a menudo se combinan para implementar varios algoritmos y diseñar los programas correspondientes. Sin embargo, si desea programar para resolver un problema más grande, el programa escrito suele ser muy largo y tiene muchas estructuras repetitivas, lo que resulta en The. la legibilidad es pobre y difícil de entender. La forma de resolver este problema es diseñar el programa C en una estructura modular.
(4) Estructura modular del programa
La estructura modular del programa del lenguaje C se implementa mediante funciones, es decir, el programa C complejo se divide en varios módulos y cada módulo está escrito como una función C, y luego la función principal llama a la función y la subfunción llama a la función para realizar la escritura del programa C del gran problema, por eso la gente suele decir: programa C = función principal + subfunción. Debido a esto, se debe prestar especial atención a la comprensión y aplicación de definiciones de funciones, llamadas, valores de retorno, etc., y se deben consolidar mediante la depuración.
3. Domina algunos algoritmos simples. Domina algunos algoritmos simples
De hecho, gran parte del trabajo de programación es analizar el problema, encontrar una manera de resolverlo y luego escribir el código en el lenguaje de programación correspondiente. Esto requiere dominar los algoritmos. Según nuestro programa de estudios de "Programación en lenguaje C", solo debemos dominar algunos algoritmos simples. Después de dominar estos algoritmos básicos, será fácil completar el análisis del problema. Como el método de intercambio de dos números, el método de comparación de tres números, el método de clasificación por selección y el método de clasificación por burbujas, esto requiere que tengamos claro el significado intrínseco de estos algoritmos. Entre ellos, la dificultad del método de clasificación por selección y la clasificación por burbujas. El método es un poco grande, pero siempre que comprenda el proceso específico de clasificación, no es difícil comprender el código.
Por ejemplo, el método de selección se utiliza para ordenar 10 números enteros diferentes (de pequeño a grande). La idea de ordenar mediante el método de selección es: hay 10 elementos a [1] ~ a [10] y a [). 1] y comparación a[2] ~a[10], si a[1] es menor que a[2]~a[10], no se realiza ningún intercambio, es decir, no se realiza ninguna operación si a[1] está en a; [2]~a[10] ] es más pequeño que el más grande (se supone que es a[i]), se intercambia con a[1] y el más pequeño entre los 10 se almacena en a[1]. En la segunda ronda, se compara a [2] con a [3] ~ a [10], y el a [i] más pequeño entre los 9 números restantes se intercambia con a [2]. a[2] El segundo número más pequeño entre los números; y así sucesivamente, *** ha realizado 9 rondas de comparaciones, y a[1] a a[10] se han almacenado en orden de menor a mayor. Es decir, en cada ronda se debe encontrar el más pequeño de los números restantes. El código es el siguiente:
for(i=1;i<=9;i++)
.for( j=i+1;j<=10;j++)
if(a[i]>a[j]
{temp=a[i]
a[i] =a[j];
a[j]=temp;
}
Conclusión: Cuándo dominamos lo anterior En este sentido, siempre que los estudiantes puedan superar su miedo a las dificultades y su disgusto por aprender, escuchar atentamente en clase y practicar y depurar bien, el lenguaje C en realidad no es difícil de aprender.