PDF de programación - SEMINARIO “C para programadores java”

Imágen de pdf SEMINARIO “C para programadores java”

SEMINARIO “C para programadores java”gráfica de visualizaciones

Actualizado el 20 de Mayo del 2018 (Publicado el 18 de Enero del 2017)
2.309 visualizaciones desde el 18 de Enero del 2017
284,2 KB
8 paginas
Creado hace 15a (23/09/2008)
Algoritmos y Estructuras de Datos

2º de Ingeniería Informática, Curso 2008/2009

SEMINARIO “C para programadores java”
(este seminario forma parte de las actividades del proyecto piloto)



Sesión 1

Contenidos:


1. Características generales de C
2. Edición y compilación de un programa C
3. Variables y tipos de datos básicos
4. Operadores
5. Sentencias de control de flujo
Ejercicios



1. Características generales de C



• C es un lenguaje:

o IMPERATIVO (vs. orientado a objetos).
o estructurado de nivel medio-alto:

 no es bajo nivel, como ensamblador
 pero es débilmente tipado, hace uso intensivo de punteros, tiene

goto…

o de tamaño reducido
o pero con una gran potencia y expresividad
o se asume que “el programador sabe lo que hace” ⇒ errores, más difíciles

de detectar; por ejemplo, no hay excepciones1


• Pero entonces, ¿por qué aprender C cuando ya sé java? ¿Porque me obligan?

o C es al mismo tiempo de nivel alto y bajo, polivalente.
o Mejor control de los mecanismos de bajo nivel.
o Mejor rendimiento que java (interpretado vs. compilado)
o Java oculta muchos detalles necesarios para escribir código del S.O.



1 ¿Conocéis las excepciones?

Algoritmos y Estructuras de Datos, 2007/2008
Seminario de C – Sesión 1

2/8


• Tipos de datos:

o elementales:

 enteros (int, long, short)
 caracteres (char)

 enumerados (enum)
 no hay booleanos, pero sí en C++

reales (float, double)

o compuestos (ojo, no son clases):

 arrays

 No hay colecciones, clases, string ni envolventes2, pero sí en C++

registros (struct) y uniones (union).

• Funciones y procedimientos:

o No hay distinción entre unas y otros.
o Tienen la forma:



<tipo_devuelto> <nombre_operacion> (<parámetros>)
{

}

<codigo>

o Si no devuelve nada o no hay parámetros, se pone void.
o No se pueden anidar.

• Sentencias de control de flujo:

o Iteración (for, while, do-while)
o Condicionales (if, if-else)
o Selección de casos (switch)

• Expresiones y sentencias:

(para la comparación usar “==”). Por ejemplo “a= 4+(b=0);”.

o Cualquier expresión en C puede ser una sentencia.
o La asignación es una expresión, se expresa mediante el símbolo “=”
o Las sentencias acaban en “;”.
o Sentencia vacía, “;”, es una sentencia válida.
o Bloque:

− secuencia de sentencias (0 o más), entre llaves.
− es una sentencia.

• Declaración de variables:

o Obligatoria.
o Forma: <tipo_var> <nombre_var> [, <nombre_var>];
o Las variables pueden ser globales (declaradas fuera de una función) o
locales (declaradas al principio del código de un procedimiento, nunca
intercaladas con el código, aunque en C++ sí es posible).

o Ejemplos:

int a,b,c;
int a=0,b,c=1; (inicialización en la declaración)

o OJO: no hay inicialización a 0 automática de variables (en java sí).



REGLA DE ORO: siempre inicializar “todo” antes de usarlo.



2 ¿Sabéis lo que son?

3/8

Algoritmos y Estructuras de Datos, 2007/2008
Seminario de C – Sesión 1

Escribir por pantalla: printf()

• No forma parte del lenguaje, hay que “incluirlo”: #include <stdio.h>

printf ("Hola!");
printf("%d", expresión_entero); // Otro comentario
printf("%c", expresión_caracter);
printf("%f", expresión_real);
printf("Un entero: %d y un real: %f", entero, real);
printf("Dos caracteres: %c%c, con fin de línea.\n", car1, car2);

/* Esto es un comentario */







A modo de resumen:



paradigma

nivel

eficiencia
interpretado
excepciones
clases, string…

union

booleano

declaración variables entre

líneas de código

variables autoinicializadas

JAVA
OO
alto
media




no



C

imperativo
medio-alto

alta
no
no
no

no
no

C++

OO + imperativo

medio-alto

alta
no








no

no

2. Edición y compilación de un programa C



• Un programa C está compuesto por un conjunto de funciones.
• Debe existir una función llamada main (“principal”), es la que será invocada

cuando se ejecute el programa.

• El programa puede estar en uno o varios ficheros, con extensión: .c







• Ejemplos de programas C:

nada.c


main () {} /* Programa que no hace absolutamente nada */



#include <stdio.h>
/* Este hace un poco más... */
void main (void)
{
printf("Hola!");
}

hola.c

#include <stdio.h> /* Puede ser necesario */
int main(int num_argumentos) /* Cuenta el num. de argumentos */
{
printf("%d argumentos\n", num_argumentos);
return 0;
}

argum.c

Algoritmos y Estructuras de Datos, 2007/2008
Seminario de C – Sesión 1

4/8

• Compara con java:
o Aplicación:



class <Nombre>
{
public static void main(String[] args)
{
instrucciones;
}
}



o Applet:

class <Nombre> extends Applet
{
public void init()
{
instrucciones;
}
}











• NOTA IMPORTANTE: en C y C++, el fichero ejecutable generado corre
directamente sobre la máquina hardware, no sobre la máquina virtual java, de
modo que el ejecutable a generar es distinto según la máquina y sistema
operativo.

• Entrar en la máquina:

o Lilo: linux
o

login/password: mismos que suma, platón o correo ALU


• Crear y editar el fichero .c. Usar “joe”, “jed”, “rhide”, “vi”...

• Compilar con gcc. Ejemplos de compilación:
>> gcc nada.c

>> gcc hola.c -o hola

>> gcc -o argum.exe argum.c 



El ejecutable es “a.out”
El ejecutable es “hola”
El ejecutable es “argum.exe”

• Ejecutar los programas compilados:

>> hola
>> ./hola  para evitar ese problema
>> ./argum.exe
>> ./argum.exe uno dos tres

 Si no funciona es que el directorio actual no está en el PATH



NOTA: en linux un fichero es ejecutable porque tiene permisos de ejecución, no por tener extensión .exe

Algoritmos y Estructuras de Datos, 2007/2008
Seminario de C – Sesión 1

5/8



Tipo

Carácter

Entero

Real

Real
doble

char

8

int

Nombre Bits3 Descripción

32

número entre -128 y +127.

Representa un carácter ASCII,
aunque se puede usar como un

3. Variables y tipos de datos básicos.
Ejemplo
char c1, c2;
c1= 'a';
c2= 'A' + 5;
printf("%c ", c2);
printf("%d ", c1);
int i1= 0;
i1= 288;
i1= 032; /*Octal*/
i1= 0xf0;/*Hexad*/
printf("%d", i1);
float f1= 0.0;
f1= 3.142;
f1= 3e-12;
printf("%f", f1);
printf("%g", f1);
printf("%5f", f1);
double d1;
d1= 4.3e-3;
printf("%f", d1);
printf("%4.3f",d1);

flotante, con doble precisión.

Entero de 32 bits, con signo.

Número real en punto

Número real en punto

flotante.

float

32

double

64


3 Puede variar según la máquina y el compilador usados
4 ¿conocéis el concepto de referencia directa vs. indirecta?

• Variantes: signed/unsigned, short/long

o De char:

o De int:

• unsigned char (número de 0 a 255)
• signed char (por defecto, equivale a char).

• short int (entero corto, se puede poner sólo short)
• long int (entero largo, se puede poner sólo long)
• long long (entero muy largo)
• unsigned (equivalente a unsigned int), unsigned long…

o De double: long double.



• No existe el tipo booleano (en C++ sí):

o en su lugar se usan los enteros, caracteres o punteros: si vale 0 entonces
o un true “generado” es un uno cuando usado como número.

significa false, cualquier otro valor es true.

• int bol= (63>7);
• char bol2= (5==2+3) && bol;

• Enumerados: enum; basados en enteros; ojo, son tipo básico, referencia directa4

enum dias {lunes, martes, miercoles}; /* Definicion tipo */
enum dias d1= lunes, d2= miércoles; /* Declaracion vars */

enum sexo {hombre=1, mujer=2, nsnc=3}; /* Asignación manual */
enum sexo s1= hombre;
enum sexo s2= 3; /* Válido, aunque no recomendado */
printf("%d ", s1); /* Se deben imprimir como enteros... */


printf("Tamaño de long long: %d bytes\n", sizeof(long long));

• Probar el tamaño (en bytes) de los distintos tipos: sizeof(tipo)
• ¿Cómo escribir un unsigned, un long…? → man –a











Tipo

Aritméticos

Relacionales

Booleanos

Operaciones
con bits

Asignación5

Incrementales

Operadores
Suma: +
Resta: -
Multiplicación: *
División: /
Módulo: %
Igual: ==
Distinto: !=
Menor: <
Menos o igual: <=
Mayor: >
Mayor o igual: >=
No lógico: !
Y lógico: &&
O lógico: ||
No nivel bits: ~
Y nivel bits: &
O nivel bits: |
Xor nivel bits: ^
Despl. izq.: <<
Despl. Der.: >>
Asignación: =
Suma con asig.: +=
Resta con asig.: -=
*=, /=, …
Preincremento: ++c
Postincremento: c++
Predecremento: --c
Postdecremento: c--
sizeof(tipo)

Descripción

Ejemplo

Operadores aritméticos
elementales. Más operaciones
en las librerías matemáticas.

char c= 'A'-'a';
int i= c%4;
long l= 0xff*((double) 1);
double d= (2/3)*3;

Operadores de comparación
entre enteros, caracteres y
reales.

int cond1= (32>=4);
int cond2= (cond1<6);
cond1==cond2;

Operaciones lógicas,
aplicadas sobre enteros,
siendo 0 → false y otro valor
true.
Operaciones lógicas aplicadas
a nivel de bits. En los
desplazamientos: a << c,
significa desplazar c bits el
valor a.
Operaciones de asignación a
una variable. Las de forma:
a+= b, son equivalentes a:
a= a + b
Preincremento: devuelve c y
hace c= c+1
Postincremento: hace
c= c+1 y devuelve c
Devuelve el tamaño (en
bytes) de un tipo de datos.
Une varias expresiones en
una misma línea de código.
Resultado = expr2.

int a, b, c;
(!(a && (b || c)))

int a= 0xff, b= 0xf0;
(a & b);
(a | b);
a << 2;

int a, b, c;
a= b= c= 0;
a+= 1;
  • Links de descarga
http://lwp-l.com/pdf1973

Comentarios de: SEMINARIO “C para programadores java” (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad