Icono del sitio Oposinet

Tema 31 – Lenguaje c: características generales.

1. INTRODUCCIÓN.. 2

2. HISTORIA.. 2

3. CARACTERÍSTICAS. 3

4. ELEMENTOS DE UN PROGRAMA C. 3

4.1 Identificadores. 3

4.2 Tipos de datos. 4

4.3 Tipos básicos. 4

4.4 Modificadores de tipo. 4

4.5 Variables. 4

4.6 Modificadores de almacenamiento. 4

4.7 Literales. 4

4.8 Operadores. 5

4.9 Precedencia. 7

4.10 Asociatividad. 7

4.11 Conversión de tipos. 7

4.12 Conversiones explícitas. 8

5. SENTENCIAS DE CONTROL. 8

5.1 Selección. 8

5.2 Bucles. 9

5.3 Saltos. 10

6. FUNCIONES. 10

6.1 Prototipos. 10

6.2 Definición. 10

6.3 Llamada a funciones. 11

6.4 Parámetros. 11

6.5 Funciones recursivas. 11

7. DIRECTRICES DEL PROCESADOR. 11

7.1 #include. 12

7.2 #define. 12

7.3 #if #else #elif #endif. 12

7.4 #ifdef #ifndef. 12

8. FUNCIONES DE LIBRERÍA.. 12

8.1 Funciones de entrada de datos. 12

8.2 Funciones de salida de datos. 13

8.3 Funciones de conversión de datos. 14

8.4 Funciones matemáticas. 14

9. ENTORNO DE COMPILACIÓN. HERRAMIENTAS PARA LA ELABORACIÓN Y DEPURACIÓN DE PROGRAMAS EN LENGUAJE C. 15

9.1 Editor. 15

9.2 Compilador. 15

9.3 Utilidades para la gestión de proyectos. 15

9.4 Depuradores. 15

1. INTRODUCCIÓN

· El lenguaje C se puede considerar como una alternativa al lenguaje ensamblador más que un lenguaje de alto nivel.

· Esto se debe a sus especiales características. C es un lenguaje que ofrece recursos análogos a los de un ensamblador, permitiendo accesos y operaciones que por lo general no son posibles con lenguajes de alto nivel, ya que éstos están definidos hacia tareas concretas, gestión, cálculo matemático, etc., mientras que C es un lenguaje diseñado para la creación de herramientas

2. HISTORIA

· La historia del lenguaje C está íntimamente ligada al desarrollo del sistema operativo Unix.

· C fue creado por Dennis Ritchie con la colaboración de Kernigham a partir de un lenguaje creado por Ken Thompson y que denominó lenguaje B.

· El lenguaje C fue implementado en un minicomputador PDP-11 a principio de los años 70.

· En 1983 ANSI estableció un comité con el objeto de normalizar este lenguaje. Un programa en ANSI C puede ser portable entre diferentes plataformas.

3. CARACTERÍSTICAS

· Hay que destacar que podemos encontrar S.Os, procesadores de texto, hojas de cálculo, programas de comunicaciones.. diseñador íntegramente en C.

· Es un lenguaje de nivel medio. Aunque tiene características de alto nivel también algunas características de bajo nivel.

· Sensibilidad a mayúsculas (se distingue entre MAYUS y minus)

· Hay que tener cuidado (no es lo mismo printf que Printf)

· No existe comprobación de tipos à compilación y ejecución más rápidas.

· Tiene un número pequeño de palabras reservadas frente a otros lenguajes.

· Muchas librerías definidas en este lenguaje.

4. ELEMENTOS DE UN PROGRAMA C

Pequeño programa en C.

/* Programa: suma.c

*Descripción: este programa efectúa la suma de 2 enteros */

#include <stdio.h>

Int suma (int a, int b)

{

Int res;

Res= a+b;

Return res;

}

Void main()

{

Int x,y,z;

X=5;

Y=10;

Z= suma (x,y);

Printf(“El resultado es: %d”,z);

}

Algunos de estos elementos:

Comentarios: /* y */ el compilador ignora todo lo que este entre ellos.

Directrices: van precedidas de #

Variables: almacenan datos y se distinguen por un identificador compuesto por letras y códigos.

Funciones: toman parámetros de entrada y devuelven un valor. Son un subprograma.

Función main: función principal e indica el punto de entrada del programa asi como el punto de salida. Podemos tener definidas otras funciones y llamarlas desde aquí.

Elementos del lenguaje:

4.1 Identificadores

Referencian variables, funciones y objetos definidos por el usuario.

Identificador válido: numero1, suma, potencia

Identificador no válido: 1er número, 2324

4.2 Tipos de datos

Existen palabras clave para definir diferentes tipos.

4.3 Tipos básicos

Son los tipos elementales no compuestos, incluidos en la mayoría de los lenguajes:

-char – int – float – doublé

4.4 Modificadores de tipo

Signed: con signo

Unsigned: sin signo

Long: largo

Short: corto

Es posible combinarlos con tipo básicos:

Unsigned int

Long int

4.5 Variables

Representa un valor que puede variar a lo largo de la ejecución. Necesitamos un tipo y un identificadorà int número

4.5.1 Variables globales

Accesibles desde cualquier función del programa y se declaran al principio del programa.

4.5.2 Variables locales

Se definen dentro de una función. Solo son accesibles dentro de la función en la que están definidas. Se crean al entrar en la función y se destruyen al salir.

4.6 Modificadores de almacenamiento

Se utilizan para modificar el modo de almacenamiento de las variables.

4.6.1 Static

Tiene una existencia permanente. Su valor permanece entre llamada y llamada.

Int incrementa () {

Static int cont= 0;

Cont ++;

}

4.6.2 Register

Estas variables serán almacenadas en registros de la CPU.

4.7 Literales

Representan valores explícitos y pueden tomar diferentes tipos.

4.7.1 Literales carácter

Se encierra entre comillas simples à char tecla= ‘s’ ;

4.7.2 Literales carácter de barra invertida

\n Nueva línea

\t Tab horizontal

\v Tab vertical (sólo para impresora)

\b Backspace (retroceso)

\r Retorno de carro

\f Alimentación de página (sólo para impresora)

\a Bell (alerta, pitido)

\’ Comilla simple

\” Comilla doble

\\ Backslash (barra invertida)

\ddd Carácter ASCII. Representación octal

\xdd Carácter ASCII. Representación hexadecimal

4.7.3 Literales enteros

Es un conjunto de números sin parte decimal. à int n =587;

4.7.4 Literal real

Conjunto de números con parte decimal y exponente. à float pi: 3.1416;

4.7.5 Literal cadena

Conjunto de caracteres encerrado entre comillas dobles. à printf (“Hola mundo”)

4.8 Operadores

Se utilizan para formar expresiones y pueden ser clasificados, según su funcionalidad, en aritméticos, relacionales, lógicos…

4.8.1 Operadores aritméticos

Se utilizan para formar expresiones aritméticas cuyo resultado será un número entero o real.

Operador

Significado

+

Suma

Resta

*

Producto

/

División

%

Resto división entera

++

Incremento

Decremento

4.8.2 Operadores relacionales

Se comparan dos expresiones de un mismo tipo.

Operador Operación

< Primer operando “menor que” el segundo

> Primer operando “mayor que” el segundo

<= Primer operando “menor o igual que” el segundo

>= Primer operando “mayor o igual que” el segundo

== Primer operando “igual que” el segundo

!= Primer operando “distinto que” el segundo

4.8.3 Operadores lógicos

Estos operadores producen un resultado entero que es interpretado como valor lógico.

Operador

Significado

&&

AND

||

Or

!

Not

4.8.4 Operadores de asignación

= Asignación simple

*= Multiplicación más asignación

/= División más asignación

%= Módulo más asignación

+= Suma más asignación

-= Resta más asignación

<<= Desplazamiento a izquierdas más asignación

>>= Desplazamiento a derechas más asignación

&= Operación AND sobre bits más asignación

|= Operación OR sobre bits más asignación

^= Operación XOR sobre bits más asignación

4.8.5 Operadores sobre bits

& Operación AND al nivel de bits

| Operación OR al nivel de bits (ASCII 124)

^ Operación XOR al nivel de bits

<< Desplazamiento a la izquierda

>> Desplazamiento a la derecha

~ Not

4.8.6 Operador condicional

Este lenguaje cuenta con un operador ternario con la siguiente sintaxis.

Condición ¿exp1: exp2;

Evalúa la condición y, en caso de cumplirse, devuelve como resultado la expresión tras

El signo ¿, si no, devuelve el resultado tras el signo : .

4.9 Precedencia

Indica el orden en el que serán evaluados los operadores en una expresión de forma que se evalúan en primer lugar los más prioritarios.

4.10 Asociatividad

Indica el sentido en el que son evaluados los operadores. 2 alternativas:

o Evaluarlos de izq a dcha (2-2-2=0-2=-2)

o Evaluarlos de dcha a izq (2-2-2=2-0=2)

4.11 Conversión de tipos

Si en una expresión aparecen operandos con diferente tipo, para ser evaluados, es necesario efectuar una conversión de tipo.

Ejemploà

Float pi = 3.1416

Float x ;

X= pi+2;

En este caso cambiamos el tipo del segundo operador, convirtiéndolo en real, tras lo cual, se efectúa la suma.

4.12 Conversiones explícitas

Se puede convertir el resultado de un operador o expresión a un tipo si se antepone dicho tipo encerrado entre paréntesis. (cast)

Si hacemos 5/2 à 2, porque se hace una división entera.

Si hacemos x=(float) 5/2; à x= 2.5

5. SENTENCIAS DE CONTROL

Permiten cambiar el flujo del programa.

5.1 Selección

Alteran el flujo del programa en función del valor de una expresión.

5.1.1 Sentencia if

Ejecuta una sentencia si se cumple una condición.

If (n>=5)

Printf(“\nAprobado”);

5.1.2 Sentencia if else

Las sentencias que siguen se ejecutarán en caso de no cumplirse la condición.

if(condición)

Sentencia1;

else

Sentencia2;

5.1.3 Sentencia if else encadenada

Son evaluadas varias condiciones. El último if contiene la sentencia a ejecutar en caso de que no se cumpla ninguna condición.

if(condición)

Sentencia1;

Elseif(cond2)

Sentencia2;

Elseif (condN)

sentencian;

else

sentencia;

5.1.4 Sentencia switch

Desvía el flujo del programa en función del valor que tome una expresión. Cada caso ejecuta las sentencias que se encuentra por debajo hasta encontrar un break.

Switch(var) {

Case 1: sentencias; break;

Case n: sentencias; break;

Default: sentencias; break;

}

5.2 Bucles

Ejecutan un conjunto de sentencias repetidas veces.

5.2.1 Sentencia for

Se utiliza cuando conocemos el número de vueltas del bucle. Pero en C, el bucle continuará ejecutándose en función de una condición.

For(inic; cond; incr)

Sentencias;

For (i=0; i<10; i++)

Printf(“\n Numero : %d”,i);

5.2.2 Sentencia while

Hemos de especificar una condición. El bucle se ejecutará mientras se cumpla dicha condición.

While (cond)

Sentencias;

Ejemplo:

While (tecla != ‘s’)

{

Printf(“\nPulsa la tecla s “);

Tecla= getch();

}

5.2.3 Sentencia o while

La condición se evalúa tras ejecutar las instrucciones que componen el bucle.

Do

Sentencias;

While(cond);

5.3 Saltos

Se utilizan para alterar el flujo del programa de manera incondicional, saltando hacia un lugar diferente.

5.3.1 Break

Termina la ejecución de la estructura de control en la que se encuentra, continuando con la siguiente sentencia tras dicha estructura de control.

5.3.2 Continue

Va al inicio de un bucle saltando todas las secuencias que se encuentran tras ella.

5.3.3 Goto

Es una palabra en desuso (provoca código difícil de entender)

Es un salto incondicional a un punto definido del programa.

Etiqueta: Sentencia1

Sentencia2

SentenciaN

Goto Etiqueta;

6. FUNCIONES

Es un programa constituido por un conjunto de instrucciones y datos que puede ser llamado desde un punto del programa.

6.1 Prototipos

Debemos saber que una función debe estar definida para ser utilizada. Si colocamos en primer lugar una función llamada main, y desde esta hacemos una llamada a una función que se encuentra definida debajo, provocará un error de compilación.

Por eso usamos la directiva #include en la cabecera junto con los ficheros de cabecera, puesto que en estos ficheros viene incluido el prototipo de las funciones de librería que emplearemos en nuestros programas.

6.2 Definición

Incluiremos el código y datos de la función, es decir, la implementamos.

Ejemplo:

Int suma (int a, int b)

{

Int res;

Res= a+b;

Return res;

}

6.3 Llamada a funciones

Se efectúa mediante el identificador de dicha función, incluyendo los parámetros.

Ejemplo:

Void main(){

X=suma (5,4);

…}

6.4 Parámetros

Datos que pasamos a la función durante el proceso de llamada.

o Parámetros formales: indicados en el prototipo de la función.

o Parámetros reales: Datos que pasamos a la función en la llamada.

6.4.1 Paso de parámetros por valor

El compilador pasa una copia de los parámetros reales sobre los formales. Un cambio en el contenido de los parámetros formales no afecta a los parámetros reales, solo se modifica la copia.

6.4.2 Paso de parámetros por referencia

No se pasa una copia, sino, la dirección de los parámetros reales. Un cambio en su contenido afecta a los parámetros reales (puntero* y dirección &)

6.5 Funciones recursivas

Es una función que se llama a sí misma. (ejemplo del factorial)

7. DIRECTRICES DEL PROCESADOR

Son procesadas por el preprocesador C antes de la fase de compilación, alternando el contenido de los ficheros a compilar.

7.1 #include

Incluye el contenido de ficheros de cabecera, de manera que podemos usar las funciones, constantes y definiciones incluidas en dichos ficheros.

Ficheros de cabecera más usuales:

Fichero

Propósito

Stdio.h

Entrada y salida de datos

Conio.h

Entrada y salida por consola

Math.h

Funciones matemáticas

String.h

Manipulación de cadenas

Time.h

Funciones de fecha y hora

Malloc.h

Asignación de memoria

Signal.h

Señales

7.2 #define

Permite definir macros, serán sustituidas por el valor indicado antes de ser compilado el código fuente.

Ejemplo:

#define PI 3.1416

7.3 #if #else #elif #endif

Permite la compilación condicional, de manera que, si se cumple la condición especificada el código indicado, será compilado, y, en caso contrario, no será compilado.

7.4 #ifdef #ifndef

El preprocesador comprueba sin un símbolo está definido o no.

8. FUNCIONES DE LIBRERÍA

Incluyen un amplio repertorio de funciones de librería.

8.1 Funciones de entrada de datos

Utilizada para la entrada de datos que serán retornados por la función, de manera que podemos asignárselo a una variable.

Carácter

Prototipo

Descripción

Int getc();

Devuelve un carácter leído desde teclado.

Int getchar();

Lee un carácter, pero, en este caso debemos pulsar enter.

Int getche();

Lee un carácter haciendo eco en pantalla

Cadena

Prototipo

Descripción

Char * gets(char * cad);

Lee una cadena de caracteres desde teclado

Formateada

Prototipo

Descripción

Scan(char* cadenaformato, params…)

Le pasamos una cadena de formato indicándole el formato de la entrada y una lista de variables que contendrán estos datos.

Códigos de formato:

8.2 Funciones de salida de datos

Utilizada para la salida de datos, que serán mostrados por consola.

Carácter

Prototipo

Descripción

Putc(int c)

Muestra en pantalla un carácter

Cadena

Prototipo

Descripción

Puts(char * cad)

Muestra una cadena de caracteres.

Formateada

Prototipo

Descripción

Printf(char*cadenaformato, params…)

Le pasamos una cadena de formato indicándole el formato de salida y una lista de variables que contendrán estos datos.

8.3 Funciones de conversión de datos

Prototipo

Descripción

Int abs(int n);

Calcula el valor absoluto de un entero.

Double atof(const char * string), int atoi(const char * string);

Convierten una cadena en número real y entero respectivamente.

Char *itoa (int value, char * string, int radix);

Convierte un entero en cadena.

Double strtod (const char * nptr, char** endptr);

Convierte una cadena en real de doble precisión.

Int tolower(int c);

Convierte un carácter en minúsculas.

Int toupper(int c);

Convierte a mayúsculas.

8.4 Funciones matemáticas

sqr    sqr(x)=x*x
sqrt        sqrt(x)=raíz cuadrada de x
raíz        sqrt(x)=raíz cuadrada de x
exp         exp(x)=exponencial natural de x=e^x
log         log(x)=logaritmo natural de x
log10       log10(x)=logaritmo base 10 de x
abs         abs(x)=valor absoluto de x
ent         ent(x)=mayor entero n tal que n<x
sgn         sgn(x)=signo de x (1 si x>0,-1 si x<0,0 si x=0)
ind         ind(b)=indicadora de b (1 si b=true, 0 si b=false)
sin         sin(x)=seno de x
sen         sen(x)=seno de x
cos         cos(x)=coseno de x
tan         tan(x)=tangente de x
cot         cot(x)=cotangente de x
sec         sec(x)=secante de x
csc         csc(x)=cosecante de x
sinh        sinh(x)=seno hiperbólico de x=(exp(x)-exp(-x))/2
senh        senh(x)=seno hiperbólico de x=(exp(x)-exp(-x))/2
cosh        cosh(x)=coseno hiperbólico de x=(exp(x)+exp(-x))/2
tanh        tanh(x)=tangente hiperbólica de x=sinh(x)/cosh(x)
coth        cot(x)=cotangente hiperbólica de x=cosh(x)/sinh(x)
sech        sech(x)=secante hiperbólica de x=1/cosh(x)
csch        csch(x)=cosecante hiperbólica de x=1/senh(x)
asin        asin(x)=ángulo cuyo seno es x
asen        asen(x)=ángulo cuyo seno es x
acos        acos(x)=ángulo cuyo coseno es x
atan        atan(x)=ángulo cuyo coseno es x

9. ENTORNO DE COMPILACIÓN. HERRAMIENTAS PARA LA ELABORACIÓN Y DEPURACIÓN DE PROGRAMAS EN LENGUAJE C.

Entornos de trabajo que incluyen multitud de herramientas que facilitan el trabajo al programador. Incluye:

– Editor

– Compilador

– Enlazador

– Depurador

9.1 Editor

Permite la edición de ficheros que contienen el código fuente. (uso de colores, indentación, comentarios, operadores…)

Incluye las siguientes funciones:

– Abrir, guardar, guardar como

– Seleccionar, cortar, copiar, borrar, buscar, reemplazar

– Tabuladores, Indentación, colores

9.2 Compilador

Transforma los ficheros fuentes en código ejecutable.

Como mínimo indicaremos la lista de ficheros a compilar, las librerías que usaremos y el fichero de salida.

Dispondrá de las siguientes opciones:

Opciones de depuración: Parámetro que indica al compilador que el fichero ejecutable debe incluir información para ser depurado.

Optimización de código: Hacen más eficiente la ejecución de los programas obtenidos.

Generación de avisos: Tiene opciones para indicar el nivel de avisos que vamos a utilizar. (warnings)

9.3 Utilidades para la gestión de proyectos

Herramienta que nos facilita la compilación de estos grandes ficheros, de modo que solo serán compilados aquellos ficheros que sean necesarios.

9.4 Depuradores

Nos permite ejecutar un programa de manera controlada, para localizar posibles errores para su posterior reparación.

Un depurador puede contar con las siguientes opciones:

– Ejecutar à ejecuta un programa hasta el punto de interrupción.

– Paso a paso à ejecuta un programa paso a paso.

– Ejecutar hasta el cursor à ejecuta hasta el punto en el que situemos el cursor.

– Ver llamadas à Se nos permite ver la pila de llamadas.

– Punto de ruptura à permite ver, poner y quitar puntos de ruptura.

– Variable à Permite ver/establecer el valor de las variables.

Salir de la versión móvil