You are on page 1of 7

Escuel a Pol i tcni ca Superi or de El che

I n g e n i e r a I n d u s t r i a l . C u r s o 2 0 0 7 - 0 8
I n f o r m t i c a A p l i c a d a


Hoja de ejercicios resueltos Tema 1


Operadores

Ejercicio 1.- Descubrir errores

#i ncl ude <st di o. h>
voi d mai n( voi d) {
i nt i = 0;
whi l e( i <100)
{
pr i nt f ( %d\ n, i ) ;
i ++;
i f ( i=50)
br eak;
}
pr i nt f ( Acabado el bucl e whi l e) ;
}


Solucin ejercicio 1

Dentro del if, ponemos i=50, cuando debemos poner i==50. Qu pasa cuando ponemos i=50? Se
asigna 50 a i, se evala i. Cmo i es mayor que cero, la expresin del if resulta ser cierta, con lo
que se ejecuta break y sale del bucle.


Ejercicio 2.- Descubrir errores

#i ncl ude <st di o. h>
voi d mai n( voi d) {
i nt i = 0;
whi l e( i <10)
{
i f ( i=!0)
pr i nt f ( " %d\ n" , i ) ;
i ++;
}
pr i nt f ( " Acabado el bucl e whi l e" ) ;
}
Escuel a Pol i tcni ca Superi or de El che

I n g e n i e r a I n d u s t r i a l . C u r s o 2 0 0 7 - 0 8
I n f o r m t i c a A p l i c a d a


Solucin ejercicio 2

Esperamos que imprima todos los nmeros del 0 al 10 menos el 0. Pero resulta que imprime
muchos 1. Dentro del if, otra vez. Estamos negando el cero, asignndolo a i y ejecutando la
sentencia dentro del if.

Punteros

Ejercicio 3: Comentar el siguiente programa

i nt a, b; / / Var i abl es de t i po ent er o
i nt *pa; / / Punt er o a un ent er o

a = 5;
pa = &a; / / pa apunt a a l a var i abl e a.
b = *pa; / / b val e 5


Ejercicio 4: Comentar el siguiente programa

i nt i , j , *p;

p=&i ; / / p t i ene l a di r ecci n de i
*p=21; / / al cambi ar el val or del punt er o que apunt a a l a di r ecci n
de i , cambi amos t ambi n el val or de i a 21;
p=&j ; / / ahor a p t endr l a di r ecci n de j en l ugar de l a de i
*p=1; / / j t endr el val or 1



Ejercicio 5: Casting y punteros a void: Comentar el siguiente programa e identificar errores

i nt *p;
doubl e *q;
voi d *r ;


p=q;

p=( i nt *) q;
p=r =q

/ / Def i ni mos un punt er o a ent er o
/ / Def i ni mos un punt er o a un doubl e
/ / Def i ni mos un punt er o a voi d a t r avs del
cual podemos asi gnar l e cual qui er t i po de
punt er o
/ / ERROR: NO se puede pq apunt an a di st i nt os
t i po de var i abl e
/ / SI se puede pq hacemos cast i ng
/ / SI se puede pq usamos ant es r
Escuel a Pol i tcni ca Superi or de El che

I n g e n i e r a I n d u s t r i a l . C u r s o 2 0 0 7 - 0 8
I n f o r m t i c a A p l i c a d a


Ejericio 6: Aritmtica de punteros: Comentar el siguiente programa

voi d mai n( voi d) {

i nt a, b, c; / / Decl ar amos 3 ent er os
i nt *p1, *p2; / / Decl ar amos 2 punt er os

p1 = &a; / / p1 apunt a a l a di r ecci n de a
*p1 = 1; / / modi f i camos el val or de p1 y por t ant o a=1
p2 = &b; / / p2 apunt a a l a di r ecci n de b
*p2 = 2; / / modi f i camos el val or de p2 y por t ant o b=2
p1 = p2; / / l e asi gnamos el mi smo val or de di r ecci n de p2 a
p1, por t ant o p1 apunt ar ahor a a b
*p1 = 0; / / por t ant o b = 0
p2 = &c; / / p2 apunt a a l a di r ecci n de c
*p2 = 3; / / el val or de p2 ser 3, por t ant o c=3
}


Ejercicio propuesto 1 para resolver en clase: Aritmtica de punteros


#i ncl ude <st di o. h>

voi d mai n( voi d )
{
i nt u = 3, v;
i nt *pu; / / punt er o a ent er o
i nt *pv; / / punt er o a ent er o

pu = &u;
v = *pu;
pv = &v;
pr i nt f ( \ nu=%d &u=%X pu=%X *pu = %d, u, &u, pu, *pu) ;
pr i nt f ( \ nv=%d &v=%X pv=%X *pv = %d, v, &v, pv, *pv) ;
}


Solucin ejercicio propuesto 1










Salida:
u = 3 &u = ff56 pu = ff56 *pu = 3
v = 3 &v = f67A pv = f67A *pv = 3
Escuel a Pol i tcni ca Superi or de El che

I n g e n i e r a I n d u s t r i a l . C u r s o 2 0 0 7 - 0 8
I n f o r m t i c a A p l i c a d a

Ejercicios propuestos 2 para resolver en clase: Aritmtica de punteros


#i ncl ude <st di o. h>

voi d mai n( voi d) {
i nt a=5, b, *pa, *pb;

pr i nt f ( " La di r ecci on de a= %X\ n" , &a) ;
pr i nt f ( " El val or de a= %X\ n" , a) ;
pa=&a; / / punt er o apunt a a l a di r ecci on de a
pr i nt f ( " La di r ecci n del punt er o pa es %X\ n" , &pa) ;
pr i nt f ( " El punt er o pa apunt a a l a di r ecci n %X\ n" , pa) ;
pr i nt f ( " El val or de l a di r ecci n de memor i a a l a que apunt a el punt er o pa
es %d\ n\ n" , *pa) ;
pb=pa; / / el punt er o pb apunt a a l a di r ecci on del punt er o pa
pr i nt f ( " La di r ecci n del punt er o pb es %X\ n" , &pb) ;
pr i nt f ( " El punt er o pb apunt a a l a di r ecci n %X\ n" , pb) ;
pr i nt f ( " El val or de l a di r ecci n de memor i a a l a que apunt a el punt er o pb
es %d\ n" , *pb) ;

syst em( " PAUSE" ) ;
}

Solucin ejercicio propuesto 2

-La direccin de a =22FF74
-El valor de a =5
-La direccin del puntero pa es 22FF6C
-El puntero pa apunta a la direccin 22FF74
-El valor de la direccin de memoria a la que apunta el puntero pa es 5

-La direccin del puntero pb es 22FF68
-El puntero pb apunta a la direccin 22FF74
-El valor de la direccin de memoria a la que apunta el puntero pb es 5





Escuel a Pol i tcni ca Superi or de El che

I n g e n i e r a I n d u s t r i a l . C u r s o 2 0 0 7 - 0 8
I n f o r m t i c a A p l i c a d a



Aritmtica de punteros



Ejercicio 7: Aritmtica de punteros: Comentar el siguiente programa


char * pt r char ;
doubl e* pt r doubl e;
. . .
*( pt r char +3) = 33; / * l a di r ecci n es pt r char + 3 byt es */

*( pt r doubl e+3) = 33. 0; / * l a di r ecci n es pt r doubl e + 24 byt es, ya que cada
doubl e ocupa 8 byt es */


Ejercicio 8: Aritmtica de punteros con vectores: Comentar el siguiente programa


i nt v[ 5] ; / / un vect or de 5 el ement os ent er os
i nt *p; / / punt er o a ent er o
. . .
p = &v[ 0] ; / * pt r apunt a al pr i nci pi o del vect or */
*p = 1; / * i gual que vect or [ 0] = 1 */
*( p+1) = 2; / * i gual que vect or [ 1] = 2 */
*( p+2) = 3; / * i gual que vect or [ 2] = 3 */
Escuel a Pol i tcni ca Superi or de El che

I n g e n i e r a I n d u s t r i a l . C u r s o 2 0 0 7 - 0 8
I n f o r m t i c a A p l i c a d a

Funciones: Paso por direccin

Ejericio 1: Escribir la salida por pantalla del siguiente programa

#i ncl ude <st di o. h>
voi d f unc1( i nt u, i nt v) ;
voi d f unc2( i nt *pu, i nt *pv) ;
mai n ( )
{
i nt u=1;
i nt v=3;
pr i nt f ( " Ant es de f unc1: u=%d, v=%d\ n" , u, v) ;
f unc1( u, v) ;
pr i nt f ( " Despues de f unc1: u=%d, v=%d\ n" , u, v) ;
pr i nt f ( " Ant es de f unc2: u=%d, v=%d\ n" , u, v) ;
f unc2( &u, &v) ;
pr i nt f ( " Despues de f unc2: u=%d, v=%d\ n" , u, v) ;
syst em( " PAUSE" ) ;
}

voi d f unc1( i nt u, i nt v)
{
u=0;
v=0;
pr i nt f ( " Dent r o de f unc2: u=%d, v=%d\ n" , u, v) ;
}
voi d f unc2( i nt *pu, i nt *pv)
{
*pu=0;
*pv=0;
pr i nt f ( " Dent r o de f unc2: *pu=%d, *pv=%d\ n" , *pu, *pv) ;
}


Solucin ejercicio 1

Antes de func1: u=1, v=3
Dentro de func1: u=0, v=0
Despus de func1: u=1, v=3
Antes de func2: u=1, v=3
Dentro de func2: *pu=0,*pv=0
Despus de func2: u=0, v=0


Escuel a Pol i tcni ca Superi or de El che

I n g e n i e r a I n d u s t r i a l . C u r s o 2 0 0 7 - 0 8
I n f o r m t i c a A p l i c a d a



Arrays y punteros

Ejercicio 1: Arrays y punteros: Escribir la salida por pantalla del siguiente programa

#i ncl ude <st di o. h>

voi d mai n( voi d) {

i nt x[ 3] ; / / ar r ay de 3 ent er os
i nt *punt er o;
x[ 0] =10;
x[ 1] =20;
x[ 2] =30;
punt er o = x; / / met odo 1
punt er o = &x[ 0] ; / / met odo 2 ambos mt odos son equi val ent es
pr i nt f ( " %d\ n\ n" , punt er o[ 0] ) ; / / Most r amos el el ement o 0 del ar r ay
pr i nt f ( " %d\ n\ n" , *punt er o) ; / / Most r amos el el ement o 0 del ar r ay
pr i nt f ( " %X\ n\ n" , &punt er o) ; / / Most r amos l a posi ci n en memor i a del pr i mer
el ement o del ar r ay
pr i nt f ( " %X\ n\ n" , &punt er o[ 1] ) ; / / Most r amos l a posi ci n en memor i a del segundo
el ement o del ar r ay
pr i nt f ( " %d\ n\ n" , punt er o[ 1] ) ; / / Most r amos el segundo el ement o del ar r ay
pr i nt f ( " %d\ n" , *( punt er o+1) ) ; / / Most r amos el segundo el ement o del ar r ay
pr i nt f ( " %d\ n" , *( punt er o+2) ) ; / / Most r amos el t er cer el ement o del ar r ay
syst em( " pause" ) ;

}




Solucin ejercicio 1

Sal i da por pant al l a
10
10
22FF5C
22FF64
20
20
30