Publicado el 14 de Enero del 2017
943 visualizaciones desde el 14 de Enero del 2017
175,9 KB
28 paginas
Creado hace 14a (14/02/2011)
Bloque II: Programación orientada al
sistema
Tema 9. Programación en Lenguaje C
UNIVERSIDAD
DE CANTABRIA
-
Introducción al lenguaje C.
- Estructura de un programa.
- Tipos de datos y declaraciones de datos.
- Operadores y expresiones.
- Entrada/ salida simple.
-
- Funciones y paso de parámetros.
- Modularidad.
- Tratamiento de errores.
Instrucciones de control.
Tema 10. Programación del intérpretes de órdenes
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
9
© Michael González, J. Javier Gutiérrez
14/feb/11
1
UNIVERSIDAD
DE CANTABRIA
1. Introducción al lenguaje C
El lenguaje C es uno de los lenguajes de programación más
populares que existen hoy en día
Características más importantes:
• lenguaje sencillo (aunque más difícil de aplicar)
• estructurado
• tipos definidos por el usuario
• no exige tipificación estricta
• permite compilación separada
• es de un nivel relativamente bajo
• compiladores baratos y eficientes
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
2
Versiones del lenguaje C
Existen diversas versiones del lenguaje C:
• C común: apareció en 1978 y estaba directamente ligado al
UNIVERSIDAD
DE CANTABRIA
sistema operativo UNIX
• C ANSI o C ISO: estandarización en 1988, y luego en 1990;
versión no ambigua y más portable, que añade
- asignación de estructuras (registros)
-
- prototipos de funciones
-
tipos enumerados
librerías estándar (funciones matemáticas, entrada/salida, etc.)
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
3
Versiones del lenguaje C (cont.)
• Posteriormente se refina la versión ISO/ANSI en 1999
- soporte para caracteres internacionales
- soporte para números complejos
tipo entero long
-
- comentarios //
- etc.
En este curso usaremos el ISO C 99
UNIVERSIDAD
DE CANTABRIA
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
4
2. Estructura de un programa
Estructura de un bloque en Java y en C:
UNIVERSIDAD
DE CANTABRIA
{
}
<declaraciones>
<instrucciones>
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
5
Estructura de un programa
(cont.)
Estructura de un programa:
UNIVERSIDAD
DE CANTABRIA
Java
import modulo1.*;
public class Clase {
public static void main
(String[] args)
{
<declaraciones>
<instrucciones>
}
}
}
C
#include <modulo1.h>
int main()
{
<declaraciones>
<instrucciones>
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
6
Ejemplo
UNIVERSIDAD
DE CANTABRIA
#include <stdio.h>
int main()
{
printf("hola\n"); // printf escribe en pantalla
return 0;
}
public class Hola{
public static void main(String[] args)
{
System.out.println("hola");
// println escribe
}
}
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
7
Algunas observaciones:
UNIVERSIDAD
DE CANTABRIA
C
Java
se distingue entre mayúsculas y
minúsculas
las instrucciones acaban con “;”,
pero los bloques no
las funciones son bloques que se pue-
den anidar
comentarios entre /* */
o empezando con //
todas las variables deben declararse
los strings se encierran entre ""
el retorno de línea se pone en el string
"\n"
idem
idem
las funciones son bloques que siem-
pre son métodos de las clases
además, existen los comentarios de
documentación
idem
idem
retorno de línea con operaciones
específicas (println)
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
8
3. Tipos de datos y declaraciones de
datos
Tipos predefinidos:
UNIVERSIDAD
DE CANTABRIA
Java
byte
short
int
long
boolean
char
float
double
String
C
signed char
short, short int
int
long, long int
long long
(se usa int)
(se usa char)
float
double
long double
char[], char*
Otros tipos C
char
unsigned short int
unsigned int
unsigned long int
unsigned long long
float _Complex
double _Complex
long double _Complex
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
9
Declaraciones
C
UNIVERSIDAD
DE CANTABRIA
int lower;
char c,resp; // dos variables de tipo char
int i=0;
const float eps=1.0e-5;
#define MAX 8 // otra constante
// variable inicializada
// constante
Java
int lower;
char c,resp; // dos variables de tipo char
int i=0;
final float eps=1.0e-5;
final int max=8;
// variable inicializada
// constante
// otra constante
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
10
Observaciones sobre las declaraciones
Puede observarse que, tanto en C como en Java:
• las variables se pueden inicializar
• se pueden declarar como constantes
• se pueden declarar varias variables juntas
UNIVERSIDAD
DE CANTABRIA
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
11
Tipos enumerados
En C se pueden definir tipos enumerados, cuyos valores son
identificadores:
UNIVERSIDAD
DE CANTABRIA
typedef enum {planox,planoy,planoz} dimension;
dimension fuerza, linea;
...
fuerza=planox;
linea=fuerza+1; // toma el valor planoy
La instrucción typedef permite crear tipos de datos nuevos, con
los cuales se pueden crear variables más adelante
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
12
Tipos enumerados en Java
En Java se puede hacer lo equivalente a este tipo enumerado
mediante el uso de constantes
UNIVERSIDAD
DE CANTABRIA
final int planox=0;
final int planoy=1;
final int planoz=2;
int fuerza, linea;
...
fuerza=planox;
linea=fuerza+1; // toma el valor planoy
Aunque el tipo enumerado de Java sería:
enum Dimension {PLANOX,PLANOY,PLANOZ};
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
13
Observaciones:
• En C y Java el operador de asignación es “=”
• En C los valores enumerados se tratan como enteros, con
UNIVERSIDAD
DE CANTABRIA
valores 0, 1, 2, ...
- linea toma el valor 1 (planoy) en el ejemplo
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
14
Caracteres
Los caracteres en C y Java se representan encerrados entre
apóstrofes:
char c1,c2;
c1=’a’;
UNIVERSIDAD
DE CANTABRIA
Los caracteres de control tiene una representación especial:
Carácter
salto de línea
carácter nulo
bell (pitido)
apóstrofe
C y Java
’\n’
’\0’
’\a’
’\’’
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
15
Arrays
Los arrays de C son muy diferentes de los de Java:
• no tienen un tamaño conocido durante la ejecución
- pero sí un tamaño fijo en memoria
• el usuario es responsable de no exceder su tamaño real
• se pueden manipular mediante punteros
Los arrays de Java son mucho más seguros
UNIVERSIDAD
DE CANTABRIA
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
16
UNIVERSIDAD
DE CANTABRIA
Arrays (cont.)
Las siguientes declaraciones de arrays en Java:
final int MAX=8;
float[] v1; //índice va de 0 a MAX-1
v1=new float[MAX]; // tamaño puesto en la creación
short[][] c=new short[MAX][MAX];
Tienen el siguiente equivalente en C:
#define MAX 8 // constante en C
float v1[MAX]; //índice va de 0 a MAX-1
//array creado al declararlo
short int[MAX][MAX] c;
En C los arrays de números no se inicializan a cero
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
17
Tipos array
En C se pueden crear tipos array para usarlos más tarde en
declaraciones de arrays
UNIVERSIDAD
DE CANTABRIA
typedef float vector[MAX];
typedef short int contactos[MAX][MAX];
typedef int numeros[4];
declaraciones:
vector v={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
vector w;
contactos c1,c2;
numeros a;
Literal de array
(solo en inicialización)
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
18
Uso de elementos de arrays
Las siguientes instrucciones se escriben igual en Java y C:
UNIVERSIDAD
DE CANTABRIA
w[3]=10.0;
c1[0][3]=1;
a[0]=9; a[1]=3; a[2]=0; a[3]=4;
No hay asignación de arrays en C
c1=c2; // no se puede
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
19
Strings en C
Los strings en C son arrays de caracteres, con un número de
elementos variable.
El string debe terminar siempre con un carácter nulo (código ASCII
cero), que sirve para saber dónde acaba el string.
Los strings constantes se representan encerrados entre comillas,
como en Java:
UNIVERSIDAD
DE CANTABRIA
char linea[80];
char otra[]="hola esto es un string";
char linea2[]="hola esto es una linea\n";
// incluye un salto de linea
Los strings constantes ya incluyen el carácter nulo al final
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
20
Operaciones con strings
El módulo <string.h> define funciones para manipular strings
UNIVERSIDAD
DE CANTABRIA
strcpy(s1, s2)
strncpy(s1, s2, n)
strcat(s1,s2)
size_t strlen(s)
int strcmp(s1,s2))
Copia el string s2 en s1
Copia hasta n caracteres de s2 en s1
Añade el string s2 al final del s1
Retorna un entero con la longitud de s
Compara el string s1 con s2 y retorna:
entero menor que cero si s1<s2
entero mayor que cero si s1>s2
cero si s1=s2
Las tres primeras son operaciones peligrosas, pues no se
comprueba si el resultado cabe en el espacio reservado a s1
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
14/feb/11
21
Operaciones de conversión con strings
Comentarios de: Bloque II: Programación orientada al sistema (0)
No hay comentarios