Beruflich Dokumente
Kultur Dokumente
FACULTAD DE INGENIERIA
DE SISTEMAS
MANUAL DE LENGUAJE C
2
⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗
⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗
Manual del Lenguaje C Laboratorio de Sistemas - EPN
TABLA DE CONTENIDOS
CAPITULO I
TIPOS DE DATOS
Representación de los tipos de datos
Caracteres
Enteros
Los flotantes
Tipo de dato void
Caracteres con barra invertida
CAPITULO II
OPERADORES
Operadores aritméticos
Operadores de comparación
Operadores lógicos
Operadores a nivel de bits
El operador ?
Operadores de asignación
La coma como operador
Operadores de incremento y decremento
Operadores de puntero * y &
Operador en tiempo de compilación sizeof
Los operadores de punto y flecha
Los paréntesis y los corchetes como operadores
Resumen de precedencias
CAPITULO III
TIPOS DE DATOS DERIVADOS
Arreglos
Variables de tipos puntero
CAPITULO IV
EVALUACION DE EXPRESIONES y ASIGNACION DINAMICA DE MEMORIA
Evaluación de expresiones
Asignación dinámica de memoria
CAPITULO V
VARIABLES
Variables locales
Parámetros formales
Variables globales
Clases de almacenamiento
Inicialización de variables
CAPITULO VI
SENTENCIAS DE CONTROL
Valores true y false
La sentencia while
La sentencia do-while
La sentencia for
La sentencia if-else
La sentencia switch
La sentencia break
La sentencia continue
La sentencia exit
La sentencia goto
CAPITULO VII
INTRODUCCION A LA PROGRAMACION ORIENTADA A OBJETOS
Generalización vs especialización
Funcionalidad propuesta
GENERALIDADES
⊃⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆≈
≡ µαθυινασ δε ≡
≡τιπο ρεπρεσεντα α 16 βιτσ 32 βιτσ≡
∩⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗∂
≡χηαρ χαραχτερεσ 8 8 ≡
≡ιντ εντεροσ 16 32 ≡
≡σηορτ εντεροσ χορτοσ 16 16 ≡
≡λονγ εντεροσ λαργοσ 32 32 ≡
≡υνσιγνεδ εντεροσ σιν σιγνο 16 32 ≡
≡φλοατ φλοταντεσ 32 32 ≡
≡δουβλε φλοταντε δοβλε 64 64 ≡
≡ πρεχισι⌠ν ≡
≡ϖοιδ γενεριχο 0 0 ≡
∪⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆⊆…
7 6 5 4 3 2 1 0
+-+-+-+-+-+-+-+-+
∨⊗ℜ⊗ℜ⊗ℜ⊗ℜ⊗ℜ⊗ℜ⊗ℜ⊗↵
≥0≥1≥1≥0≥0≥0≥0≥1≥
ℵ⊗ℑ⊗ℑ⊗ℑ⊗ℑ⊗ℑ⊗ℑ⊗ℑ⊗∧
∨⊗⊗ℜ⊗⊗ℜ⊗⊗ℜ⊗⊗ℜ⊗⊗ℜ⊗⊗ℜ⊗⊗ℜ⊗⊗↵ ∨⊗⊗ℜ⊗⊗ℜ⊗⊗ℜ⊗⊗ℜ⊗⊗ℜ⊗⊗ℜ⊗⊗ℜ⊗
⊗↵
≥15≥14≥13≥12≥11≥10≥ 9≥ 8≥ ≥ 7≥ 6≥ 5≥ 4≥ 3≥ 2≥ 1≥ 0≥
ℵ⊗⊗ℑ⊗⊗ℑ⊗⊗ℑ⊗⊗ℑ⊗⊗ℑ⊗⊗ℑ⊗⊗ℑ⊗⊗∧ ℵ⊗⊗ℑ⊗⊗ℑ⊗⊗ℑ⊗⊗ℑ⊗⊗ℑ⊗⊗ℑ⊗⊗ℑ⊗⊗∧
codigo significado
⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗
\b espacio atrás
\f salto de página
\n salto de línea
\r salto de carro
\t tabulación horizontal
\" imprime comillas
\' imprime comilla simple
\0 caracter nulo
\\ imprime barra invertida
\v tabulación vertical
\a alerta
\o constante octal
\x constante hexadecimal
⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗
&& | 0 1 || | 0 1
0 | 0 0 0 | 0 1
1 | 0 1 1 | 1 1
Operador Acción
& (Y)
| (O)
^ (XOR)
~ Complemento a uno (NOT)
>> Desplazamiento a la derecha
<< Desplazamiento a la izquierda
char car_del_modem(void)
{
char c;
c = leer_modem(); /*obtener un caracter
del puerto del modem */
return( c & 127)
}
Bit de paridad
≥
V
1 1 0 0 0 0 0 1 c conteniendo "A" con paridad a 1
0 1 1 1 1 1 1 1 127 en binario
&⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗ hacer Y a nivel de bits
0 1 0 0 0 0 0 1 "A" sin paridad
Ejemplo de desplazamiento.
#include "stdio.h"
{
unsigned int i;
int j;
i = 1;
/* desplazamientos a la izquierda */
for (j=0; j<4; j++)
{
i = i << 1; /* desplazar i a la izquierda en
1, que es lo mismo que
multiplicarlo por 2 */
printf("desplazamiento a la izquuierda %d: %d\n",j,i);
}
}
El operador de complemento a uno (~) cambia el estado de cada bit
en la variable especificada, es decir, los 1 se ponen a 0 y los 0
a 1.
1.5 EL OPERADOR ?
x = 10;
x = 10;
if (x>9) y = 100;
else y = 200;
a = a + b equivale a a += b
a = a - b a -= b
a = a & 0x0F a &= 0x0F
x = (y=3, y+1);
p[++s] = 2 equivale a s += 1
p[s] = 2
m = &cont;
q = *m;
char *c;
float f;
mostrará 8 2
struct empleado
{
char nombre [80];
int edad;
float sueldo;
} emp;
emp.sueldo = 123.23;
p->sueldo = 123.23;
1.12 LOS PARENTESIS Y LOS CORCHETES COMO OPERADORES
#include "stdio.h"
char c[80];
⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗
⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗
Mayor precedencia () [] → .
! ~ ++ -- - (tipo) * & sizeof
* / %
= -
<< >>
< <= > >=
== !=
&
^
|
&&
||
?
= += -= *= /=
Menor precedencia ,
⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗
⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗
CAPITULO III
TIPOS DE DATOS DERIVADOS
Declaración.
Ejemplos:
int tab[100];
Tablas multidimensionales
int t2d[10][20] ;
fig.1 fig.2
1 | 0 1 | 1
1 | 0 1 | 0
1 | 0 0 | 0
Declaración
o también:
t es equivalente a &t[0]
t+i es equivalente a &t[i]
t[i] es equivalente a *(t+i)
p = 0 ; /* puntero vacío */
int *p, *q ;
p = 1;
q = 2;
if (p < q);
....
∨⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗ℜ
⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗↵
≥ () [] −> . ≥ ιζθ. α δερ≥
≥ ! ∼ ++ −− − ∗ & (ΤΙΠΟ) σιζεοφ ≥ δερ. α ιζθ≥
≥ ∗ / % ≥ ιζθ. α δερ≥
≥ + − ≥ ιζθ. α δερ≥
≥ << >> ≥ ιζθ. α δερ≥
≥ < <= > >= ≥ ιζθ. α δερ≥
≥ == != ≥ ιζθ. α δερ≥
≥ & ≥ ιζθ. α δερ≥
≥ ⊥ ≥ ιζθ. α δερ≥
≥ | ≥ ιζθ. α δερ≥
≥ && ≥ ιζθ. α δερ≥
≥ || ≥ ιζθ. α δερ≥
≥ ?| ≥ ιζθ. α δερ≥
≥ = += −= ∗= /= %= >>= <<= &= |= ⊥= ≥ δερ. α ιζθ≥
≥ , ≥ ιζθ. α δερ≥
ℵ⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗ℑ
⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗∧
a + b * c es equivalenta a a + (b * c)
b / c + b * c es equivalente a (b / c) + (b * c)
a = a / d + b * c;
i = j = k = a + b;
x = x + b * c; es equivalenta a x += b * c;
x = x * (b + c); es equivalente a x *= b + c;
x = x * b + c; es equivalente a x = (x * b) + c;
#include "stdlib.h"
void *malloc(tam);
unsigned int tam;
pa = (int *)malloc(sizeof(int)) ;
ptr = malloc(sizeof(tipo)) ;
#include "stdlib.h"
void *calloc(num,tam);
unsigned int num;
unsigned int tam;
ap = 21 ; /* asignación incorrecta */
ap = 0 ; es equivalente a ap = NULL ;
ap = MALLOC(int) ;
#include "stdlib.h"
void *free(ptr);
void ptr;
free(ptr);
4.2.5 realloc()
#include "stdlib.h"
void *realloc(ptr,tam);
void *ptr;
unsigned int tam;
∨⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗↵
≥ ≥ διρεχχιονεσ δε ρετορνο δε φυνχιονεσ, εσταδο δελ
≥ πιλα ≥ ΧΠΥ, ϖαριαβλεσ λοχαλεσ (αυτοµ〈τιχασ).
℘⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗×
≥ µοντον ≥ σε υτιλιζα παρα λα ασιγναχι⌠ν διν〈µιχα δε
≥ (ηεαπ) ≥ µεµορια (µανεϕο δε πυντεροσ).
℘⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗×
≥ ϖαριαβλεσ ≥
≥ γλοβαλεσ ≥
℘⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗×
≥ χ⌠διγο δελ ≥
≥ προγραµα ≥
ℵ⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗∧
Por ejemplo:
∨⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗↵ ∨⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗↵
≥ εν φυνχι⌠ν: ≥ ≥εν βλοθυε: ≥
≥ ≥ ≥ ≥
≥ φυνχ1() ≥ ≥... ≥
≥ { ≥ ≥ιφ (χονδιχιον) ≥
≥ ιντ ξ ; ≥ ≥{ ≥
≥ ... ≥ ≥ ιντ αρραψ[20] ; ≥
≥ } ≥ ≥ ... ≥
≥ ≥ ≥} ≥
≥ φυνχ2() ≥ ℵ⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗∧
≥ { ≥ φιγ. 2
≥ ιντ ξ ; ≥
≥ ... ≥
≥ } ≥ φιγ. 1
ℵ⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗∧
auto int x;
Hemos dicho que una variable local está creada mientras dura la
ejecución de la función donde se las declara, esto impide que se
las pueda inicializar en tiempo de compilación, es por ello que si
queremos inicializar o mantener su valor sin que se destruya,
podemos declararlas con la palabra reservada static:
static int x = 5 ;
static float fx ;
int suma(a,b);
int a,b;
{
return (a+b);
}
func()
{
...
++cuenta; /* cuenta adquire un nuevo valor (101)*/
...
}
5.4.1 extern
5.4.2 static
5.4.3 register
potencia(m,e);
int m; register int e;
5.4.3 auto
char ch = 'a' ;
int primero = '0' ;
static float balance = 123.23 ;
CAPITULO VI
SENTENCIAS DE CONTROL
while (condición)
{
sentencias
} ;
int a;
a = 1;
while (a<=10)
{
printf(" %2d %3d \n" , a , a*a );
a++;
}
do
{
sentencias
}
while(condición) ;
int a;
a = 11;
do
{
printf(" %2d %3d \n" , a , a*a );
a++;
} while (a<=10) ;
será: 11 121
int a;
for (a=1 ; a<=10 ; a++)
{
printf(" %2d %3d \n",a,a*a) ;
}
reverse(s,r)
char *s, *r ;
{
int i,j ;
for ( i=strlen(s)-1,j=0 ; i>0 ; j++,i-- )
{
r[i] = s[j];
}
r[j] = '\0';
}
if (condición)
{
sentencias1;
}
else
{
sentencias2;
}
if (condición1)
if (condición2)
{
sentencias1 ;
}
else
{
sentencias2 ;
}
switch (condición);
{
case valor1:
sentencias1;
break;
case valor2:
sentencias2;
break;
...
case valorn
sentenciasn;
break;
default:
sentenciasd
}
char ch;
for (;;);
{
ch = getchar();
if (ch>32 && ch<127) break
else
{
if ( ch<=32 ) continue
else printf("ascii extendido");
}
}
En la POO cada objeto está definido como una clase que pueda ser
vista como un padrón para la creación de objetos específicos que
tengan un comportamiento similar.
Funcionalidad Pospuesta.