¿Qué es el lenguaje C?

El lenguaje C es la abreviatura mixta de chino e inglés de Combined Language. Es un lenguaje de programación informática. Tiene las características tanto del lenguaje de alto nivel como del lenguaje ensamblador. Se puede utilizar como lenguaje de diseño de sistemas de trabajo para escribir aplicaciones del sistema, o como lenguaje de diseño de aplicaciones para escribir aplicaciones que no dependen del hardware de la computadora. Por lo tanto, tiene una amplia gama de aplicaciones, no solo en el desarrollo de software, sino también en diversas investigaciones científicas que requieren el uso del lenguaje C. Entre sus aplicaciones específicas se encuentra el desarrollo de microcontroladores y sistemas integrados.

El lenguaje C se ha desarrollado muy rápidamente y se ha convertido en uno de los lenguajes más populares, principalmente debido a sus potentes funciones. Muchos programas de sistemas famosos, como DBASE IV, están escritos en lenguaje C. El uso del lenguaje C más algunas subrutinas del lenguaje ensamblador puede demostrar mejor las ventajas del lenguaje C que se escriben con PC-DOS, WORDSTAR, etc.

En resumen, el lenguaje C tiene las siguientes características:

1. C es un lenguaje intermedio. Combina las estructuras y declaraciones básicas de los lenguajes de alto nivel con la practicidad de los lenguajes de bajo nivel. El lenguaje C puede operar en bits, bytes y direcciones al igual que el lenguaje ensamblador, y estas tres son las unidades de trabajo más básicas de la computadora.

2.C es un lenguaje estructural. La característica distintiva de los lenguajes estructurales es la separación de código y datos, es decir, cada parte del programa es independiente entre sí excepto para el intercambio de información necesario. Este enfoque estructurado hace que la jerarquía del programa sea clara y fácil de usar, mantener y depurar. El lenguaje C se proporciona a los usuarios en forma de funciones. Estas funciones se pueden llamar fácilmente y tienen una variedad de bucles y declaraciones condicionales para controlar el flujo del programa, lo que hace que el programa esté completamente estructurado.

El lenguaje 3.C tiene funciones completas. Tiene una amplia variedad de tipos de datos e introduce el concepto de punteros para hacer que los programas sean más eficientes. Además, el lenguaje C también tiene potentes funciones gráficas y admite una variedad de monitores y controladores. Además, la función de cálculo y la función de juicio lógico también son relativamente poderosas y pueden realizar el juego del propósito de la toma de decisiones.

4. El lenguaje C tiene una amplia gama de aplicaciones. Adecuado para una variedad de sistemas operativos, como Windows, DOS, UNIX, etc., también apto para una variedad de modelos de máquinas.

El lenguaje C es obviamente mejor que otros lenguajes interpretados de alto nivel para situaciones de escritura que requieren hardware para funcionar. Algunos software de aplicaciones a gran escala también están escritos en lenguaje C.

El lenguaje C tiene fuertes capacidades de dibujo, portabilidad y fuertes capacidades de procesamiento de datos, por lo que es adecuado para escribir software de sistema, gráficos y animaciones tridimensionales y bidimensionales. Es un lenguaje de alto nivel para cálculos numéricos.

Los IDE de lenguaje C (entornos de desarrollo integrados) de uso común incluyen Microsoft Visual C++, Dev-C++, Code::Blocks, Borland C++, Watcom C++, Borland C++ Builder, GNU DJGPP C++, Lccwin32 C Compiler 3.1, High C, Turbo C, C-Free, win-tc, etc...

Para un principiante, Microsoft Visual C++ es un mejor software. La interfaz es amigable, las funciones son poderosas y la depuración también es muy conveniente.

[Editar este párrafo]

Historial de desarrollo

El prototipo del lenguaje ALGOL 60 del lenguaje C. (También conocido como lenguaje A)

En 1963, la Universidad de Cambridge desarrolló el lenguaje ALGOL 60 en lenguaje CPL (Lenguaje de programación combinado).

En 1967, Martin Richards de la Universidad de Cambridge simplificó el lenguaje CPL, dando como resultado el lenguaje BCPL.

En 1970, Ken Thompson de los Laboratorios Bell de Estados Unidos modificó el BCPL y le dio un interesante nombre "lenguaje B". Significa hervir el lenguaje CPL hasta dejarlo seco y extraer su esencia. Y escribió el primer sistema operativo UNIX en lenguaje B.

En 1972, el lenguaje B también fue "cocinado". D.M. Ritchie de Bell Labs en los Estados Unidos finalmente diseñó un nuevo lenguaje basado en el lenguaje B. Lo llamó BCPL. el nombre de este lenguaje, que es el lenguaje C.

Para promover el sistema operativo UNIX, en 1977 Dennis M. Ritchie publicó un texto compilado en lenguaje C "Compilador de lenguaje C portátil" que no depende del sistema de máquina específico.

En 1978, AT&T Bell Laboratories lanzó oficialmente el lenguaje C. Al mismo tiempo, el famoso libro "El lenguaje de programación C" fue coautor de B.W. Kernighan y D.M. Por lo general, se lo conoce como "K&R" para abreviar, y algunas personas lo llaman estándar "K&R". Sin embargo, en "K&R" no se definió un lenguaje C estándar completo. Posteriormente, el Instituto Nacional Estadounidense de Estándares desarrolló un estándar de lenguaje C basado en esto y lo publicó en 1983. A menudo llamado ANSI C.

En 1987, con la creciente popularidad de los microordenadores, aparecieron muchas versiones en lenguaje C. Dado que no existe un estándar unificado, existen algunas inconsistencias entre estos lenguajes C. Para cambiar esta situación, el Instituto Nacional Estadounidense de Estándares (ANSI) desarrolló un conjunto de estándares ANSI para el lenguaje C: 87 ANSI C, que se convirtió en el estándar actual del lenguaje C.

En 1990, la Organización Internacional de Normalización ISO (Organización Internacional de Normalización) aceptó 87 ANSI C como estándar ISO C (ISO9899-1990). En 1994, ISO revisó el estándar del lenguaje C.

La mayoría de los sistemas de compilación de lenguaje C actualmente populares se desarrollan en base a ANSI C, pero las funciones del lenguaje y las reglas gramaticales implementadas por diferentes versiones de los sistemas de compilación C son ligeramente diferentes.

[Editar este párrafo]

Ventajas

1. Simple, compacto, flexible y conveniente

Solo hay 32 lenguajes de lenguaje C Palabras clave, 9 tipos de declaraciones de control, la forma de escritura del programa es gratuita y se expresa principalmente en letras minúsculas. Combina las estructuras y declaraciones básicas de los lenguajes de alto nivel con la practicidad de los lenguajes de bajo nivel. El lenguaje C puede operar en bits, bytes y direcciones al igual que el lenguaje ensamblador, y estas tres son las unidades de trabajo más básicas de las computadoras.

2. Operadores ricos

Los operadores del lenguaje C cubren una amplia gama, con un máximo de 34 operadores. El lenguaje C trata los paréntesis, las asignaciones, las conversiones de tipo forzada, etc. como operadores. Esto hace que el lenguaje C sea extremadamente rico en tipos de operaciones y tipos de expresiones diversificadas. El uso flexible de varios operadores puede lograr operaciones que son difíciles de lograr en otros lenguajes de alto nivel.

3. Estructuras de datos enriquecidas

Los tipos de datos del lenguaje C incluyen: tipo entero, tipo real, tipo de carácter, tipo de matriz, tipo de puntero, tipo de estructura, tipo de usuario *** Tipo, etc. Se puede utilizar para implementar operaciones en varias estructuras de datos complejas. Y se introduce el concepto de punteros para hacer que el programa sea más eficiente. Además, el lenguaje C tiene potentes funciones gráficas y admite una variedad de monitores y controladores. Y la función de cálculo y la función de juicio lógico son poderosas.

4. C es un lenguaje estructural

La característica distintiva de un lenguaje estructural es la separación de código y datos, es decir, cada parte del programa es independiente entre sí excepto para el necesario intercambio de información. Este enfoque estructurado hace que la jerarquía del programa sea clara y fácil de usar, mantener y depurar. El lenguaje C se proporciona a los usuarios en forma de funciones. Estas funciones se pueden llamar fácilmente y tienen una variedad de bucles y declaraciones condicionales para controlar el flujo del programa, lo que hace que el programa esté completamente estructurado.

5. Las restricciones de sintaxis de C no son demasiado estrictas y la libertad de programación es amplia.

Aunque el lenguaje C también es un lenguaje fuertemente tipado, su sintaxis es relativamente flexible, lo que permite a los escritores de programas tener mayor flexibilidad.

6. El lenguaje C permite el acceso directo a direcciones físicas y puede operar directamente el hardware.

Por lo tanto, tiene las funciones de los lenguajes de alto nivel y muchas funciones de los lenguajes de bajo nivel. , y puede usarse como lenguaje ensamblador. Las mismas operaciones se realizan en bits, bytes y direcciones, y estas tres son las unidades de trabajo más básicas de la computadora y pueden usarse para escribir software del sistema.

7. El código objeto generado es de alta calidad y la eficiencia de ejecución del programa es alta.

Generalmente, es solo entre un 10 y un 20 % menos eficiente que el código objeto generado por el ensamblador. .

8. El lenguaje C tiene una amplia gama de aplicaciones y buena portabilidad

Una de las ventajas sobresalientes del lenguaje C es que es adecuado para una variedad de sistemas operativos, como como DOS y UNIX también es adecuado para muchos modelos. El lenguaje C tiene potentes capacidades de dibujo, buena portabilidad y sólidas capacidades de procesamiento de datos, por lo que es adecuado para escribir software de sistemas, gráficos y animaciones tridimensionales y bidimensionales. También es un lenguaje de alto nivel para cálculos numéricos.

[Editar este párrafo]

Desventajas

1. Las deficiencias del lenguaje C se reflejan principalmente en la encapsulación de datos, lo que hace que C esté seguro de los datos. Hay grandes fallas en el rendimiento, que también es una diferencia importante entre C y C++.

2. Las restricciones de sintaxis del lenguaje C no son demasiado estrictas y las restricciones de tipo de las variables no son estrictas, lo que afecta la seguridad del programa. No hay verificación de subíndices de matriz fuera de los límites. , etc. Desde la perspectiva de la aplicación, el lenguaje C es más difícil de dominar que otros lenguajes de alto nivel.

[Punteros del lenguaje C]

Los punteros son una característica importante del lenguaje C y se puede decir que son una razón importante por la que el lenguaje C es superior a otros lenguajes de alto nivel. . Solo porque tiene punteros, puede realizar operaciones directamente cerca del hardware, pero las operaciones de puntero de C también le aportan muchos factores inseguros. C++ ha realizado grandes mejoras en esta área, conservando las operaciones de puntero y al mismo tiempo mejorando la seguridad. Java cancela las operaciones de puntero, mejora la seguridad y es adecuado para principiantes.

[Editar este párrafo]

Características estructurales

1. Un programa fuente en lenguaje C puede estar compuesto por uno o más archivos fuente.

2. Cada archivo fuente puede estar compuesto por una o más funciones.

3. No importa cuántos archivos conste de un programa fuente, hay una y sólo una función principal, es decir, la función principal.

4. Puede haber comandos de preprocesamiento en el programa fuente (el comando de inclusión es solo uno de ellos). Los comandos de preprocesamiento generalmente deben colocarse al frente del archivo fuente o del programa fuente.

5. Cada descripción y cada declaración debe terminar con un punto y coma. Sin embargo, no se pueden agregar puntos y coma después de preprocesar comandos, encabezados de funciones y llaves "}".

6. Los identificadores y palabras clave deben estar separados por al menos un espacio. Si hay separadores obvios, ya no puedes agregar espacios para separarlos.

[Editar este párrafo]

Aprende el lenguaje C

Cuando aprendes el lenguaje C por primera vez, puedes encontrar algunos problemas que no puedes entender claramente, o la expresión El método es diferente al anterior. El aprendizaje de las matemáticas es diferente (como operadores, etc.), lo que requiere no desanimarse, preguntar más y pensar más en lo que no entiendes, y tener el coraje de estudiar después de aprender. En los siguientes capítulos, los problemas anteriores se resolverán fácilmente. En este sentido, siento que nuestros compañeros son los que más carecen. La mayoría de las personas que no aprenden bien lo hacen porque se dan por vencidos cuando encuentran dificultades al principio. Una vez hablé con muchos compañeros de clase sobre sus problemas y las respuestas fueron que no podían entender, no querían escuchar. y me di por vencido. Le pregunté: ¿has escuchado esta clase? La respuesta es nuevamente no, no he asistido a ninguna clase, entonces, ¿cómo puedo decir que no entiendo? En consecuencia, si no estudias nada, ¿cómo puedes aprender bien?

Al aprender el lenguaje C, siempre debes recordar "el amanecer está por llegar" y "es difícil comprar mucho dinero y mirar hacia atrás". Es una forma importante de aprender conocimientos. Es decir, aprender los conocimientos subyacentes. No olvide volver atrás y aclarar los problemas restantes y profundizar su comprensión del conocimiento previo. Esto es lo más difícil de hacer para nuestros estudiantes. , pero también es el más importante. Aprender el lenguaje C requiere varias iteraciones antes de poder recorrerlo todo y acumular el conocimiento de C que debes dominar.

Entonces, ¿cómo aprendemos bien "Programación en C"?

1. Aprenda bien los operadores y el orden de las operaciones del lenguaje C

Esta es la base para aprender "Las operaciones del lenguaje C son muy flexibles, ricas en funciones y tienen muchos más tipos de operaciones que otras programaciones". idiomas.

En términos de expresiones, es más simple que otros lenguajes de programación. Por ejemplo, la suma automática, la resta automática, la operación de coma y la operación ternaria hacen que las expresiones sean más simples. Sin embargo, los principiantes a menudo encuentran que estas expresiones son difíciles de leer. son difíciles de leer. Los operadores y el orden de las operaciones no se comprenden completamente. Cuando varias operaciones diferentes forman una expresión operativa, es decir, cuando aparecen varios operadores en una expresión operativa, el orden de precedencia y las reglas de combinación de las operaciones son muy importantes. En el aprendizaje, siempre que los clasifiquemos razonablemente y descubramos las diferencias entre ellos y las operaciones que aprendimos en matemáticas, no es difícil recordar estas operaciones. Algunos operadores se recordarán aún más después de comprenderlos. Podrá utilizarlos fácilmente en el futuro, pero algunos de ellos pueden abandonarse temporalmente y recordarse nuevamente cuando se utilicen.

Primero es necesario aclarar que los operadores se clasifican según diferentes prioridades. Los operadores en “Programación C” se pueden dividir en 15 prioridades, de mayor a menor, con prioridades que van del 1 al 15, excepto. para 2 y 13 Excepto el nivel 14 y el nivel 14, que se combinan de derecha a izquierda, los demás se combinan de izquierda a derecha, lo que determina el orden de operaciones de los operadores del mismo nivel.

2 . Aprenda bien las cuatro estructuras de programa del lenguaje C

(1) Estructura secuencial

La programación con estructura secuencial es la más simple. Simplemente escriba las declaraciones correspondientes en el orden de resolución del problema. El orden de ejecución es de arriba a abajo, de forma secuencial.

Por ejemplo: a = 3, b = 5, ahora intercambia los valores de a y b. Este problema es como intercambiar dos tazas de agua. Esto por supuesto requiere el uso de la tercera. taza. Si la tercera taza es c, entonces el programa correcto es: c = a; a = b = c. El resultado de la ejecución es a = 5, b = c = 3. Si se cambia el orden, se escribe; como: a = b; c = a; b = c; entonces el resultado de la ejecución se convierte en a = b = c = 5, lo que es más probable que los principiantes cometan este error. La estructura secuencial se puede utilizar de forma independiente para formar un programa completo simple. El 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. El programa consiste en ingresar el radio r del círculo y calcular s = 3.14159, generar el área s del círculo. Sin embargo, en la mayoría de los casos, la estructura secuencial se utiliza como parte del programa y forma un programa complejo junto con otras estructuras, como declaraciones compuestas en estructuras de rama, cuerpos de bucle en estructuras de bucle, etc.

(2) Estructura de ramas

Aunque los programas con una estructura secuencial pueden resolver problemas como el cálculo y la salida, no pueden emitir juicios y luego tomar decisiones. Para problemas que requieren juicio primero y luego elección, se debe 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 en que aparecen 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 de acuerdo con los diferentes flujos del programa. La estructura de rama es adecuada para cálculos con juicios condicionales como lógica o comparación relacional. Al diseñar un programa de este tipo, a menudo es necesario dibujar primero el diagrama de flujo del programa y luego escribir el programa fuente de acuerdo con el flujo del programa. Análisis del diseño del programa desde el 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 comprenda las funciones que debe realizar cada rama, la estructura anidada no es difícil. El anidamiento es solo una rama que contiene una declaración de rama. No es un conocimiento nuevo, siempre que tenga una comprensión clara de las ramas dobles, el anidamiento de ramas no es difícil. A continuación presento varias estructuras de ramas básicas.

①if (condición)

{branch}

La rama en esta estructura de rama puede ser una declaración, en cuyo caso se puede omitir "{}". o pueden ser declaraciones múltiples, es decir, declaraciones compuestas. Tiene dos rutas de bifurcación para elegir. Una es ejecutar la bifurcación cuando la condición es verdadera; de lo contrario, la bifurcación se omitirá y no se ejecutará.

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 no cambia, y cuando x<0, su valor absoluto es el signo inverso de x , entonces el segmento del programa es: if(x<0)x=-x;

②if (condición)

{rama 1}

else

{branch 2}

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. Tanto la rama 1 como la rama 2 pueden estar compuestas por. una o varias declaraciones. Por ejemplo: Encuentra la raíz 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 del complejo ***yoke. El segmento del programa es el siguiente:

main()

{

int a,b,c,d,x,y;

printf("Por favor, escriba el número de a,b&c de la ecuación cuadrática de una variable uno por uno\n");

scanf("%d%d%d",&a,&b, &c) ;

d=b*b-4*a*c;

if(d<0)

{

printf( "¡NO hay raíz! ¡Incorrecto!\n");

}

else

{

y=-b-sqrt (d )/2*a;

x=-b+sqrt(d)/2*a;

printf("La primera ecuación root=%d\nLa segunda ecuación root= %d",y,x);

}

}

③IF declaración de rama anidada: Su formato de 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) {branch n}

else {branch n+1}

PARA anidar, su formato de declaración es:

para (valor inicial A; rango A; tamaño de paso A)

{

para (valor inicial B; rango B; tamaño de paso B)

{

Cuerpo del bucle

}

}

Ejemplo FOR anidado: noventa y nueve tablas de multiplicar

main()

{

int a,b,c;

for(a=1;a<=9;a++)

{

for(b=1;b<=a;b++)

{

c=b*a;

printf("%dx%d=%d ",b,a,c);

}

printf("\n");

}

}

Aunque las declaraciones de rama anidadas pueden resolver el problema de múltiples entradas y salidas, después de más de tres niveles de anidamiento, la estructura de la declaración se vuelve muy complicada. Es extremadamente inconveniente leer y comprender el programa. Se recomienda anidarlo en 3 niveles. Si supera los 3 niveles, puede utilizar la siguiente declaración.

④Declaración de cambio: 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, la ruta donde el valor de la expresión coincide con la expresión constante es diferente. de la sentencia if...else, todas sus ramas son paralelas. Cuando se ejecuta el programa, la búsqueda comienza desde la primera rama. Si hay una coincidencia, se ejecutan los siguientes bloques y luego los bloques de la segunda rama. la tercera rama... se ejecuta hasta que se encuentra una declaración de interrupción, si no coincide, averigüe 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 interrupción.

(3) Estructura de bucle:

La estructura de bucle puede reducir la carga de trabajo de la escritura repetida del programa fuente y se utiliza para describir el problema de ejecutar repetidamente un determinado algoritmo. La forma más efectiva de programación Aprovechando la estructura de programas especializados de la computadora, el lenguaje C proporciona cuatro tipos de bucles, a saber, bucle goto, bucle while, bucle do?C while y bucle for. Se pueden utilizar cuatro tipos de bucles para solucionar el mismo problema. Generalmente, se pueden reemplazar entre sí. Sin embargo, generalmente no se recomienda utilizar bucles goto porque cambiar a la fuerza el orden del programa a menudo provoca errores impredecibles en la ejecución. del programa 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 comprender sus similitudes y diferencias para que puedan usarse en diferentes situaciones. Esto requiere conocer el formato y el orden de ejecución de los tres bucles y comprender a fondo el diagrama de flujo de cada bucle. Comprenderá cómo usarlos indistintamente, como usar el ejemplo del bucle while y reescribir un programa usando declaraciones for, para que pueda comprender mejor sus funciones. Se debe prestar especial atención a las declaraciones que tienden a terminar (es decir, el cambio del valor de la variable del bucle) dentro del cuerpo del bucle, de lo contrario puede convertirse en un bucle infinito. Este es un error común entre los principiantes.

Después de aprender estos tres bucles, debes aclarar sus similitudes y diferencias: al usar los bucles while y do... while, la operación de inicialización de las variables del bucle debe ser antes del cuerpo del bucle, mientras que el bucle for generalmente está en la declaración 1. Se lleva a cabo en; el bucle while y el bucle for juzgan la expresión primero y luego ejecutan el cuerpo del bucle, mientras que el bucle do... while ejecuta el cuerpo del bucle primero y luego juzga la expresión, lo que significa que el cuerpo del bucle do... while se ejecuta al menos una vez. El bucle while y for no pueden ejecutarse ni siquiera una vez. Además, cabe señalar que estos tres tipos de bucles pueden utilizar la instrucción break para salir del bucle y la instrucción continue para finalizar el bucle actual. Sin embargo, el bucle formado por la instrucción goto y if no puede ser controlado por el. declaraciones de pausa y continuación.

Las estructuras secuenciales, las estructuras de rama y las estructuras de bucle no están aisladas entre sí. Puede haber ramas y estructuras secuenciales en bucles, y también puede haber bucles y estructuras secuenciales en ramas. tipo de estructura, podemos pensar en ellos en términos generales como una declaración. En el proceso de programación real, estas tres estructuras a menudo se combinan entre sí para implementar varios algoritmos y diseñar los programas correspondientes. Sin embargo, la programación es un gran problema. Los programas escritos suelen ser muy largos y tienen estructuras repetidas, lo que resulta en poca legibilidad y dificultad. Comprenda que 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 en una función C, y luego la función principal llama a la función y la función llama a la función para realizar la escritura de un programa C a gran escala. Por lo tanto, a menudo se dice: programa C = función principal + subfunción. Por lo tanto, se debe prestar especial atención a la comprensión y aplicación de definiciones de funciones, llamadas, retornos de valores, etc., y se debe consolidar mediante la depuración informática.