Ingeniero Técnico en Informática de Sistemas
Programación en C
MAITRISE EN SISTEMAS DE POTENCIA Y CONTROL ELECTRONICO
- INTRODUCCIÓN.
1.1.- HISTORIA.
-
Creado por Denis Ritchie, de los laboratorios Bell, en 1972.
-
Muy ligado con el sistema UNIX.
-
Se deriva del lenguaje B de Thompson.
-
Se trata de un lenguaje de Medio Nivel. Está entre los de Bajo Nivel (L. Ensambladores) y los de Alto Nivel (L. Pascal, L. Basic...)
-
El C se ha utilizado para desarrollar programas como:
-
C dispone de pocos tipos de datos en comparación con otros lenguajes (Ej: Pascal)
-
En ejecución no hace chequeo de errores, es responsabilidad del programador.
-
C permite la manipulación directa de bits, bytes, palabras y punteros.
-
Sólo tiene 28 palabras clave.
-
Traducen un texto, expresado en un Lenguaje de Alto (Medio) Nivel, antes de permitir la ejecución.
-
La traducción se realiza de todo el texto.
-
Se traduce a Lenguaje Máquina.
-
Al texto origen se le llama Código Fuente.
-
Al texto traducido se le llama Código Objeto.
-
Traducen todo un texto escrito en Lenguaje Ensamblador en su equivalente en Lenguaje Máquina.
-
Traducen y Ejecutan una a una las instrucciones de un programa escrito en un Lenguaje de Alto Nivel.
-
Requiere el paso previo de traducción de cada instrucción a lenguaje máquina pero sin producir un código objeto.
-
Convierte uno o varios módulos objeto en un único módulo ejecutable.
-
Se le asignan las funciones siguientes:
-
Reubicar módulos a su zona de ejecución.
-
Resolver las referencias externas de los módulos.
-
Desde el punto de vista de la programación es muy interesante la utilización de librerías de programas (pueden ser de uso general, operaciones aritméticas en coma flotante, operaciones trigonométricas,...)
-
Lee un fichero ejecutable de un medio de almacenamiento externo y lo traspasa a memoria principal, para proceder a su ejecución.
-
Debe trabajar con el formato de salida del montador.
-
En muchas aplicaciones interesa que el cargador sea reubicador para que pueda posicionar el programa en la zona de memoria deseada.
-
El Programa Cargador también debe tener un sistema de detección / corrección de errores para asegurar que el traspaso se produzca sin alteración de la información.
-
Los pasos que daremos para trabajar en C:
-
Utilizar un editor ASCII para escribir el programa C.
-
Compilar el programa. En UNIX se tecleará.
-
Las variables y constantes son los objetos básicos que se manipulan en un programa.
-
Las variables y constantes se denominan por nombres. Estos se construyen con letras y dígitos. El carácter de subrayado “-“ se considera igual que una letra.
-
El primer carácter de un nombre debe ser una letra.
-
Las letras mayúsculas y minúsculas son diferentes.
-
En la práctica se utilizan:
-
Mayúsculas para nombres de constantes.
-
Minúsculas para nombres de variables.
-
Dependiendo del compilador admite más o menos caracteres para los nombres, lo habitual es 8.
-
Los nombres se seleccionan de forma que sean significativos para atender el sentido de la variable o constante.
-
Los nombres no deben coincidir con las palabras reservadas. Estas son:
-
Los básicos son:
-
Además hay 3 calificadores que se aplican sobre enteros:
-
Aunque la resolución depende de la máquina, en general:
-
Ejemplo: Asignar a la constante LETRA el valor A:
-
Ejemplos de definiciones:
-
Si el valor de un constante int se sale de rango automáticamente el compilador la pasará a long.
-
Si el valor de una constante long se puede representar como int automáticamente lo hará el compilador. Para evitarlo se añade L. Ejemplo:
-
Los números se pueden representar en otras bases:
-
Las siguientes definiciones son similares:
-
Algunos casos de representaciones válidas:
-
Ejemplos de definiciones:
-
¿Qué ocurre si al realizar alguna operación nos salimos de rango?. Depende del compilador, en general:
-
Todas las variables deben de ser declaradas antes de utilizarlas.
-
Una declaración específica un tipo, y le sigue una lista de una o más variables de ese tipo. Ejemplos de definiciones:
-
La forma de indicar comentarios es:
-
Las variables se pueden inicializar a un valor (igual que la definición de constantes). Ejemplo:
-
Las variables no inicializadas toman valores indefinidos.
-
Son los siguientes:
-
La división entera trunca cualquier parte fraccionaria. Ejemplo:
-
El operador % no puede utilizarse con operadores del tipo float o double.
-
Las acciones que se aplican en caso de desbordamiento (overflow) o “underflow” varían en cada compilador.
-
Son los siguientes:
-
Al evaluarse una expresión relacional se devuelve:
-
Ejemplo:
-
Son los siguientes:
-
Al evaluarse una expresión lógica se devuelve:
- Sistemas Operativos. | - Compiladores |
- Ensambladores. | - Editores de texto. |
- Programas Comunicaciones | - Bases de datos. |
- Utilidades... |
Virtudes del C:
- Es PORTATIL |
- Es FLEXIBLE. |
- Es POTENTE. |
1.2.- COMPILADORES, ENSAMBLADORES E INTÉRPRETES.
Alto Nivel. | |
Medio Nivel. | |
Bajo Nivel | |
Bajo Nivel. | |
HARDWARE |
COMPILADORES.
ENSAMBLADORES.
INTÉRPRETES.
1.3.- MONTADOR, CARGADOR.
PROGRAMA MONTADOR.
PROGRAMA CARGADOR.
El nombre del fichero terminará en ____ . c.
Ejemplo: xxxx . c
$ cc xxxx . c (nombre del fichero que contiene el programa)
Se genera un programa ejecutable llamado: a . out
Sobre DOS el proceso de compilación va en función del compilador utilizado: Turbo C, Microsoft C, Borland C, C++, ...
CONSTANTES, VARIABLES Y TIPOS.
2.1. IDENTIFICADORES.
auto | Double | If | Static |
break | Else | Int | Struct |
case | Entry | Long | Switch |
char | Extern | Register | Typedef |
continue | Float | Return | Union |
Default | For | Short | Unsigned |
do | goto | sizeef | While |
2.2. TIPOS DE DATOS.
Char: Un byte (octeto) capaz de contener un carácter.
Int: Un entero, normalmente de 16 bits.
Float: Un número en coma flotante, normalmente de 32 bits.
Double: Un número en coma flotante de doble precisión, normalmente de 64 bits.
Short: Entero corto, se representa sobre 8 bits; Short int.
Long: Entero largo, se representa sobre 32 bits; long int.
Unsigned: Entero sin signo. Son siempre positivos que se gobiernan por las leyes de la aritmética de módulo 2n; unsigned int.
Tipo | Nº bits | Rango |
Char | 8 | 0 a 255 (28 = 256) |
Int | 16 | -32.768 a 32.767 |
Short int | 8 | -128 a 127 |
Unsigned int | 16 | 0 a 65.535 |
Long int | 32 | - 4.294.967.296 a 4.294.967.295 |
Float | 32 | 6 o 7 cifras decimales y un rango de ±(10-37 a 1038) ** |
Double | 64 | " 12 cifras decimales y un rango de ±(10-37 a 1038) ** |
(**) Puede ser mayor en función del ensamblador.
2.3. CONSTANTES.
TIPO CHAR
Char LETRA = 65;
Char LETRA = `A';
TIPO INT (SHORT, LONG, UNSIGNED)
Int COLOR = 7;
Int MESES = 12, DIAS =7, HORAS = 24;
Short int COLOR = 7;
Short COLOR = 7;
Long int DATO = -41728;
Long DATO = -41728;
Unsigned int MAXIMO = 10000;
Unsigned MAXIMO = 10000;
Long DATO = 33L
Hexadecimal 0x10000 o bien 0X10000
Octal 074
Int DATO = 16;
Int DATO = 0x10;
Int DATO = 020;
TIPOS FLOAT Y DOUBLE.
3,14159 .2 4e16 .8e-5 100
Float VALOR = 32000.0;
Double VALOR = 32000.0;
- En exceso: detiene el programa generándose código de error.
- Por defecto: Se sustituye por 0.
2.4. DECLARACIONES.
Int SUPERIOR; | |
Int INFERIOR; | |
Int SUPERIOR, INFERIOR, PASO = | Int PASO; |
Char LETRA, INDICE; = | Char LETRA; |
Float VALOR, CANTIDAD = | Char INDICE; |
Float VALOR; | |
Float CANTIDAD; | |
Nota: Aunque ocupa más líneas es más conveniente porque permite añadir un comentario a cada declaración y porque es más fácil realizar modificaciones posteriores: |
/* aquí viene el comentario */
Int SUPERIOR = 40;
EJERCICIOS
1.- ¿Qué tipo de dato se utilizaría para expresar las cantidades siguientes?
La población de Mislata.
El peso de una pintura de Rembrandt.
La inicial de un nombre.
El nº de veces que aparece esa inicial en un capítulo de libro.
2.- Seguidamente se presentan unos valores para constantes. Asignar el valor y dar nombre; seguir el criterio de ahorrar memoria:
-12 | ABC | C | 2.347x107 | 37 | 3.34 | 6 | 65530 |
DECIMAL | HEXAD | LETRA | OCTAL | FORMATO 32 BITS |
3.- Dadas las definiciones siguientes, indicar las que son correctas e incorrectas, para estas últimas indicar cuál es el error.
Unsigned int = 28000;
Int nom1 = 33.24;
Char nom2 = M;
Double nom3 = -34e-7; /*definición de constantes/*
Short int nom4 = 128;
4.- Comentar si existe alguna diferencia entre las variables nom1 y nom2 cuando se ejecute la sentencia siguiente:
int nom1, nom2 = 1000;
2.5. OPERADORES: ARITMÉTICOS, RELACIONALES Y LÓGICOS.
OPERADORES ARITMÉTICOS.
Operador | Acción |
- | Resta y menos unitario. |
+ | Suma |
* | Multiplicación |
/ | División |
% | Módulo división (resto división) |
Int num1 = 7;
Int num2 = 3;
Int num3 = 6;
7 | 3 | 6 | 3 | |
1 | 2 | 0 | 2 |
El resultado de num1 / num2 es 2. | El resultado de num3 / num2 es 2. |
El resultado de num1 % num2 es 1. | El resultado de num3 % num2 es 0. |
OPERADORES RELACIONALES.
Operador | Acción |
> | Mayor que |
>= | Mayor o igual que |
< | Menor que |
<= | Menor o igual que |
== | Igual |
!= | Distinto |
1 : si la relación se cumple, es CIERTA.
0 : si la relación NO se cumple, es FALSA.
Int num1 = 7;
Int num2 = 3;
El resultado de num1 > num2 es 2 es. | 1 |
El resultado de num1 >= num2 es 1 es. | 1 |
El resultado de num1 < num2 es 2 es. | 0 |
El resultado de num1 <= num2 es 0 es. | 0 |
El resultado de num1 == num2 es 2 es. | 0 |
El resultado de num1 = num2 es 0 es. | 1 |
NOTA: En C cualquier valor " 0 se considera como VERDADERO (true), aunque lo habitual es asignar a VERDADERO el 1.
OPERADORES LÓGICOS.
Operador | Acción |
&& | AND |
|| | OR |
! | NOT |
1 : VERDADERO.
0 : FALSO.
Op1 | && | Op2 | Resultado | Op1 | || | Op2 | Resultado | !Op1 |
Enviado por: | Luixi |
Idioma: | castellano |
País: | España |