Escuela Politécnica Superior

Anuncio
Escuela Politécnica Superior
Ingeniería Industrial
EXAMEN TEÓRICO DE INFORMÁTICA APLICADA
Elche, 1 de septiembre de 2007
1.- El siguiente fragmento de código C contiene errores de sintaxis. El programa debe
reservar memoria para almacenar una serie de datos enteros y de coma flotante y, a
continuación, los muestra por pantalla. Vuelva a escribir correctamente el código en
la hoja del examen.
#include<stdio.h>
#define MAX=5
struct datos{
float *vec
int *num
};
typedef struct datos datos
void RecogeDatosTeclado(struct datos *p)
void ImprimeDatosPantalla(struct datos a)
int main(void)
{
datos dat;
dat->num = (int)malloc(MAX*sizeof(int));
if(dat->num==NULL)
return -1;
dat->vec = (float)malloc(TAM*sizeof(float));
if(dat->vec==NULL)
return -1;
RecogeDatosTeclado(dat);
ImprimeDatosPantalla(*dat);
free(dat->num);
free(dat->vec);
return 0;
}
void ImprimeDatosPantalla(datos a);
{
int i;
for(i=0, i < TAM, i++)
printf("%d\t", a->num+i);
for(i=0, i < TAM, i++)
printf("%f\t", a.vec[i]);
void RecogeDatosTeclado(datos *b);
{
int i;
printf("\nIntroduzca enteros:\n");
for(i=0, i < TAM, i++)
scanf("%d", b.num[i]);
printf("\nIntroduzca floats:\n");
i=0;
while(i=<TAM-1)
{
scanf("%f", b.vec[i]);
i+=1;
}
(2.0 puntos, cada error no encontrado resta 0.5 puntos)
Duración del examen: 1:30 horas
Escuela Politécnica Superior
Ingeniería Industrial
2.- El siguiente código C lo hemos podido compilar sin problemas. El programa debe
leer una serie de números desde el fichero datos.txt. El fichero datos.txt existe y su
contenido se muestra a continuacion. Por cada número leído de datos.txt se debe escribir
por pantalla una secuencia de números como la mostrada en la figura. Sin embargo, el
funcionamiento del programa no es el deseado. Encuentre los errores de ejecución que
se producen en el programa y vuelva a escribir el código, de manera que funcione
correctamente.
#include <stdio.h>
int main(void)
{
FILE *fp;
int *pfloat;
int i;
fp = fopen("datos.txt", "w");
if(fp=NULL);
{
printf("\nError abriendo fichero");
return -1;
}
fclose(fp);
while(feof(fp))
{
fscanf(fp, "%f", pfloat[i]);
for(i=0; i < pfloat[i]; i++);
printf("%d ", i);
printf("\n");
}
free(pfloat);
}
system("PAUSE");
return 0;
datos.txt
Salida por pantalla
1.0
5.0
3.0
6.0
10.0
3.0
01
01234
012
012345
0123456789
012
(2.0 puntos, cada error no encontrado resta 0.5 puntos)
3.- Indique la salida por pantalla del siguiente código:
#include <stdio.h>
int Func(int *a);
int i, j;
Duración del examen: 1:30 horas
Escuela Politécnica Superior
Ingeniería Industrial
int main(void)
{
int i;
printf("\nValor de j: %d", j);
j=Func(&j);
printf("\nValor de j: %d", j);
i=Func(&j);
printf("\nValor de i: %d", i);
}
system("pause");
int Func(int *a)
{
j=*a;
i++;
*a=i;
j++;
}
return j;
(1.5 puntos)
4.- Dado el siguiente fragmento de un programa: ¿Cuál de las siguientes llamadas a la
función es la correcta?
#include <stdio.h>
struct datos{
float x;
int *vector[20];
};
int RecogeTeclado(float *a, int *x); //Prototipo
int main(void)
{
struct datos *a;
int m;
a = (struct datos*)malloc(sizeof(struct datos));
m=RecogeTeclado(.........);
}
free(a);
†
†
†
†
m
m
m
m
=
=
=
=
RecogeTeclado(*(*a).x, *(*a).vector );
RecogeTeclado(a->x, a->vector);
RecogeTeclado(&(a->x), (*a).vector[0]);
RecogeTeclado((*a).vector[0], &m);
(1.5 puntos)
5.- Indique la salida por pantalla del siguiente código:
#include <stdio.h>
int main(void)
{
int vec[3];
int *p[3];
int a=5, b=7, c=8;
vec[0]=1;
vec[1]=2;
vec[2]=1;
p[0]=&a;
p[1]=&b;
Duración del examen: 1:30 horas
Escuela Politécnica Superior
Ingeniería Industrial
p[2]=&c;
a++;
b--;
printf("%d %d %d ", *(p[0]) + *(p[1]), **(p+*vec), **p+*(vec+1));
system("PAUSE");
}
(1.0 punto)
6.- Explique en qué consiste el paso por valor, paso por dirección y paso por referencia.
Ponga un ejemplo de cada uno de ellos, indicando el prototipo de la función, su
implementación y la llamada a la función ¿Cuál se admite en C y cuál en C++?
(2.0 ptos)
Duración del examen: 1:30 horas
Descargar