ENUNCIADOS
1. Escribe cuál es la salida del siguiente programa:
#include <stdio.h>
#include <stdlib.h>
main()
{
int s, j, k, i, l;
s=0;
for (j=1;j<=5;j++)
{ printf("%d", j );
if (j%2 ==0) { s=s+j; }
}
printf("\n%d",s);
i= 10;
while (i>0)
i=i-1;
printf("\n%d",i);
printf("\n\n");
system ("PAUSE");
}
2. Escribe cuál es la salida del siguiente programa:
#include <stdio.h>
#include <stdlib.h>
main()
{
int i, j;
for (i=1; i<=10; i++)
{ for (j=1; j<=10-i+1; j++)
{ printf(" %d",j); }
printf("\n");
}
printf("\n\n");
system ("PAUSE");
}
3. Escribe cuál es la salida del siguiente programa:
#include <stdio.h>
#include <stdlib.h>
main()
{ int i, j, sum;
for (i=1; i<=3; i++)
{ sum=0;
for (j=1; j<=i; j++)
{ sum=sum+j;
if (i!=j) {printf("%d/%d + ",i,sum);}
else {printf("%d/%d \n",i,sum);}
}
}
printf("\n\n");
system ("PAUSE");
}
4 Enunciados
4. Escribe cuál es la salida del siguiente programa:
#include <stdio.h>
#include <stdlib.h>
#define maxFila 6
main()
{ int fila, columna, numero;
numero=0;
for (fila=1;fila<=maxFila; fila++)
{ columna=1;
while (columna<=fila)
{ numero ++;
printf("%5d", numero);
columna ++;
}
printf("\n");
}
printf("\n\n");
system ("PAUSE");
}
5. Escribe cuál es la salida del siguiente fragmento de programa:
main()
{ int Minimo=1, Maximo=5, i, dato=25;
for(i=Maximo;Minimo<=i;i--)
{ printf("\n el que va el %d es %d \n", i, dato-i); }
printf("Está terminado");
printf("\n\n");
system ("PAUSE");
}
6. Escribe cuál es la salida del siguiente programa:
#include <stdio.h>
#include <stdlib.h>
main()
{ int Minimo=1, Maximo=3, i,j;
for(i=Minimo;i<=Maximo;i++)
for(j=Minimo;j<=Maximo;j++)
printf("i vale %d y j vale %d .\n", i, j);
printf("\n\n");
system ("PAUSE");
}
7. Escribe cuál es la salida del siguiente programa:
#include <stdio.h>
#include <stdlib.h>
main()
{ int i,k;
for (i=1; i<=5; i++)
{ for (k=1; k<=i; k++)
printf("*");
printf("\n");
}
Enunciados
5
for (i=4; 1<=i; i--)
{ for (k=1; k<=i; k++)
printf("*");
printf("\n");
}
printf("\n\n");
system ("PAUSE");
}
8. Escribe cuál es la salida del siguiente programa:
#include <stdio.h>
#include <stdlib.h>
main()
{int a,b,n,x,y;
n=6;
x=0;
y=0;
for (a=1; a<=n; a++)
{ if (a%2== 0)
{ for (b=a; b<n; b++) {x=x+1;}
printf("\n%d >>> %d", a,x);
}
else
{ for (b=1; b<a; b++) {y=y+1;}
printf("\n%d >>> %d", a,y);
}
}
printf("\n\n");
system ("PAUSE");
}
9. Escribe cuál es la salida del siguiente programa:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{char cadena[]="este error es el grave?";
int cont,i,desde, hasta, ind, tam;
cont=0;
tam= strlen(cadena); // tamaño de la cadena
for (ind=0; ind<tam; ind++)
{ if (cadena[ind]=='e')
{cont++;}
}
printf("En la cadena '%s' hay %d 'e'\n",cadena, cont);
for (i=1;i<=cont;i++)
{ printf("%d 'e' está: ",i);
desde=0;
hasta=0;
while (desde<i)
{ if (cadena[hasta]=='e')
{desde++;}
hasta++;
}
for (ind=0; ind<hasta; ind++)
{printf("%c", cadena[ind]);}
6 Enunciados
printf("\n");
}
printf("\n\n");
system ("PAUSE");
}
10. Di si los dos fragmentos de programa que están a continuación son
equivalentes. Razona la respuesta.
( Decir que son equivalentes significa que escribir uno u otro fragmento
dentro de un programa da el mismo resultado.)
A.-
if (x<10) {x:=x+1;}
if (x>=10) {x:=x-1;}
if (x<10) {x:=x+1;}
else {x:=x-1;}
B.-
for (i=10;i<=25; i++)
printf(" %d \n",i);
printf("Ha terminado");
i=10;
while (i<=25)
{ printf(" %d",i);
printf("Ha terminado \n ");
}
11. ¿Los dos fragmentos de programa, hacen lo mismo ?. Si es que si dí que
hacen y si es que no ¿porqué no?:
A esta= 0;
ind = 0;
while ((ind<N) && (esta==0))
{ if (x==tabla[ind])
{esta=1;}
ind=ind+1;
}
if (esta==1)
{printf("%d está en la posición %d ", x, ind-1);}
else
{printf("%d no está", x);}
B esta=0;
for (ind=0;ind<N;ind++)
{ if (x==tabla[ind])
{esta=1;}
}
if (esta==1)
{printf("está en la posición %d ", x, ind-1);}
else
{printf("%d no está", x);}
12. ¿ Hacen lo mismo los dos fragmentos de programa?. Si es que si dí qué
hacen y si es que no ¿porqué no?:
Enunciados
7
A printf("Dame un número: ");
scanf("%d", &n);
cont=1;
while(cont<=n)
{ printf("%d \n", cont);
cont=cont+2;
}
B printf("Dame un número: ");
scanf("%d", &n);
for(cont=1;cont<=n;cont++)
{ if (cont%2==0)
{printf("%d \n", cont);}
}
13. Escribe qué hace el siguiente programa.
#include <stdio.h>
#include <stdlib.h>
main()
{ int x, y, num;
printf("Dame un número: ");
scanf("%d",&num);
x=0;
y=0;
while (num!=0)
{ if (num%2==0)
{y++;}
x++;
scanf("%d",&num);
}
printf("\Total de números: %d", x);
printf("\nTotal de números pares: %d", y);
printf("\n\n");
system ("PAUSE");
}
14. El siguiente programa contiene errores, corrígelo:
#define <stdio.h>
#define <stdlib.h>
#include Tope 10;
main()
{int tabla [tope], i, aux;
for (i=0; i<Tope; i++)
{ tabla[i]=i;
i=i+1;
}
i=0;
while (i<=Tope)
{ aux=tau[i];
tabla[i]=tabla[i+1];
tabla[i+1]=aux;
}
8 Enunciados
printf("\n\n");
system ("PAUSE");
}
15. Sustituye las sentencias if por un único switch :
#include <stdio.h>
#include <stdlib.h>
main()
{ int n;
printf("Escribe un número: ");
scanf("%d", &n);
if ((n==5) || (n==6) ) {n=n+4;}
else if ((n>7) && (n<=10)) { n=n-5;}
else if (n==7) {n=n+1;}
else {n=n-1; }
printf("Número: %d", n);
printf("\n\n");
system ("PAUSE");
}
16. Dí que hace el siguiente diagrama de flujo y a continuación escribe el
correspondiente programa en C :
INICIO
div<n
d divisible div
FIN
si
no
si
si
no
div
aux
aux←1
no aux es 0
n
NO SI
div div 1
17. Realiza el diagrama de flujo y el programa en C que haga lo siguiente:
a. Se teclearán dos números enteros por pantalla hasta que los dos sean
menores que 50.
Enunciados
9
b. El más pequeño se irá incrementando de 5 en 5 y el más grande se
decrementará de 2 en 2, se irán imprimiendo a la vez que se van
generando. El programa terminará cuando los valores se crucen.
18. El siguiente programa intenta contar cuantos carácteres “t” seguidos de
“a” hay en una frase que se pedirá por pantalla, la frase acabará con un
punto. En el programa hay 5 errores, corrígelos. Ejemplo de ejecución
(en negrita los datos introducidos por el usuario):
Escribe un frase(para acabar un punto): abba tkktajjtaiitaktaoi.
– ta – aparece 4 veces
#include <stdio.h>
#include <stdlib.h>
main()
{ int antes, tot=0;
char ahora;
antes='z';
printf("Escribe una frase, para acabar un punto '.': \n");
scanf("%c", &ahora);
while (ahora!='.')
if (ahora=='a' || antes=='t') then {tot ++;}
antes=ahora;
scanf("%c", &orain);
printf(" aparece veces '-ta-'", tot);
printf("\n\n");
system ("PAUSE");
}
19. Haz un programa que pida un número entero y obtenga la suma de los
cuadrados de los números de 4 en 4 que hay hasta llegar a él. Por
ejemplo, si el dato de entrada es 10, la solución vendrá dada por el
resultado de la siguiente operación: 12 + 52 + 92
20. ¿Qué hace el siguiente programa?
#include <stdio.h>
#include <stdlib.h>
main()
{ int x, n=0;
for (x=45; 1<=x; x--)
if (x<30) {n=n-x;}
else {n=n+x;}
printf("%d", n);
printf("\n\n");
system ("PAUSE");
}
11
SOLUCIONES PROPUESTAS
1. 12345
6
0
2. 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
3. 1/1
2/1 + 2/3
3/1 + 3/3 + 3/6
4. 1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
5. el que va el 5 es 20.
el que va el 4 es 21.
el que va el 3 es 22.
el que va el 2 es 23.
el que va el 1 es 20.
Está terminado.
6. i vale 1 y j vale 1.
i vale 1 y j vale 2.
i vale 1 y j vale 3.
i vale 2 y j vale 1.
i vale 2 y j vale 2.
i vale 2 y j vale 3.
i vale 3 y j vale 1.
i vale 3 y j vale 2.
i vale 3 y j vale 3.
7. *
**
***
****
*****
****
***
**
*
12 Soluciones propuestas
8. 1 === 1
2 >>> 5
3 === 4
4 >>> 8
5 === 9
6 >>> 9
9. En la cadena ‘este error es el grave?’ hay 6 ‘e’.
1 ‘e’ está: e
2 ‘e’ está: este
3 ‘e’ está: este e
4 ‘e’ está: este error e
5 ‘e’ está: este error es e
6 ‘e’ está: este error es el grave
10. A) No son equivalentes, en el primer fragmento cuando x es 9 a x
se le suma 1, con lo cual es 10, y al seguir en la siguiente
instrucción como x es 10 se le resta 1 a la x, en el segundo
fragmento si x es menor que 10 se le suma 1 a la x y en caso
contrario se le resta 1 a la x.
B) No son equivalentes, en el primer fragmento se escribe los
números de 1 a 25 y al final Ha terminado, en el segundo
fragmento como no se incrementa la i, comienza con 10 y escribe
10 Ha terminado de forma indefinida.
11. No tienen el mismo efecto, en los dos se intenta ver si un valor
x está en una tabla de N elementos, en el primer fragmento
termina de recorrer la tabla bien porque lo ha encontrado o
porque se han acabado los elementos, en el segundo recorre
siempre toda la tabla y además si lo ha encontrado siempre
imprime que está en la posición ind-1, número de elementos de la
tabla menos 1.
12. No tienen el mismo efecto, en los dos se solicita un número por
pantalla, imprimiéndose los números impares hasta llegar al
número en el primer fragmento y en el segundo fragmento los
pares.
13. Se van pidiendo números por pantalla hasta que se teclee el
número 0, en y se van sumando el número de pares que se
introducen y en x el número de números que se introducen, al
final se imprime x e y.
14. #define <stdio.h> corregido #include <stdio.h>
#define <stdlib.h> corr. #include <stdio.h>
#include Tope 10; corr. #define Tope 10
main (){
int tabla [Tope], i, lag;
for (i=1; i<Tope; i++) corr. for (i=0; i<Tope; i++)
{ tau[i]=i;
Soluciones propuestas 13
i=i+1; sobra
}
i=1; corr. i=0;
while (i<=Tope) corr. while (i<Tope)
{ lag=tau[i];
tau[i]=tau[i+1];
tau[i+1]=lag; falta i=i+1;
}
printf("\n\n");
system ("PAUSE");
}
15. switch (n)
{
case 5: case 6: n=n+4; break;
case 7: n=n+1; break;
case 8: case 9: case 10: n=n-5; break;
otherwise: n=n-1;
}
16. Se imprime SI si un número tecleado previamente por pantalla es
primo y NO si no lo es.
#include <stdio.h>
#include <stdlib.h>
main ()
{ int n, div,aux;
printf("Dame un número: ");
scanf("%d", &n);
div=2;
aux=0;
while (div<n)
{ if (n%div==0)
{aux=1;}
div=div+1;
}
if (aux==0)
{printf("SI");}
else
{printf("NO");}
printf("\n\n");
system ("PAUSE");
}
17. #include <stdio.h>
#include <stdlib.h>
main ()
{ int a,b,t,h;
printf("Dame dos números menores que 50 ");
scanf("%d %d", &a, &b);
while (50<a || 50<b)
14 Soluciones propuestas
{ printf("Dame dos números menores que 50 " );
scanf("%d %d", &a, &b);
}
if (b<a)
{t=b; h=a;}
else
{t=a; h=b;}
while (t<=h)
{ printf("El más pequeño : %5d .El más grande: %5d\n",t,h);
t=t+5;
h=h-2;
}
printf("\n\n");
system ("PAUSE");
}
Soluciones propuestas 15
18. #include <stdio.h>
#include <stdlib.h>
main ()
{ int tot=0;
char ahora,antes;
antes='z';
printf("Escribe una frase, para acabar un punto '.': \n");
scanf("%c", &ahora);
while (ahora!='.')
{ if (ahora=='a' || antes=='t')
{tot ++;}
antes=ahora;
16 Soluciones propuestas
scanf("%c", &ahora);
}
printf(" aparece %d veces '-ta-'", tot);
printf("\n\n");
system ("PAUSE");
}
19. #include <stdio.h>
#include <stdlib.h>
main ()
{ int n, z;
long sum;
printf("Teclea un número: ");
scanf("%d",&n);
sum=0;
z=1;
while (z<=n)
{ sum= sum + z*z;
z=z+4;
}
printf("Solución: %ld", sum);
printf("\n\n");
system ("PAUSE");
}
20. Empieza el programa dando el valor 45 a la x, entra en un bucle
mientras x sea mayor o igual que 1, en el bucle si x es mayor o
igual que 30 realiza n=n+x y si x es menor que 30 realiza n=nx,
en los dos resta 1 a x. Al final se imprime el valor 165.
No hay comentarios.:
Publicar un comentario
COMENTAR