Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SULA
UNAH-VS
SECCIÓN: 0700
PRESENTADA POR:
CAROL LIZETH LOPEZ GARCIA CTA# 20152005774
EJERCICIOS DE AUTOEVALUACIÓN
5.1 Responda cada una de las siguientes preguntas:
a) A un módulo de programa en C, se le llama función.
b) Una función se invoca mediante una llamada a función.
c) A una variable que sólo se conoce dentro de la función en la que se definió se le
llama variable local.
d) La instrucción return dentro de una función se utiliza para pasar el valor de una
expresión hacia la función que la invoca.
e) La palabra reservada void se utiliza dentro de una función para indicar que ésta
no devuelve valor alguno, o para indicar que la función no contiene parámetros.
f) El alcance de un identificador se refiere a la porción del programa en la que se
puede utilizar dicho identificador.
g) Las tres formas de devolver el control desde la función invocada hasta la función
que llama son return, return expresión y al encontrar} de fin de función.
h) Un prototipo de función permite al compilador verificar el número, tipo y
orden de los argumentos que se pasan a una función.
i) La función rand se utiliza para producir números aleatorios.
j) La función srand se utiliza para establecer la semilla de los números aleatorios
para randomizar un programa.
k) Los especificadores de clase de almacenamiento son: auto, register, extern, y
static.
l) Se asume que las variables declaradas dentro de un bloque, o en la lista de
parámetros de una función, tienen una clase de almacenamiento auto, a menos
que se especifique lo contrario.
m) El especificador de clase de almacenamiento register es una recomendación al
compilador para que almacene una variable en uno de los registros de la
computadora.
n) Una variable definida fuera de cualquier bloque o función es una variable
externa, función.
o) Para que una variable local de una función retenga su valor entre las llamadas a
la misma, la variable se debe declarar con el especificador de clase de
almacenamiento static.
p) Los cuatro posibles alcances de un dentificador son alcance de función, alcance
de archivo, alcance de bloque y alcance de prototipo de función.
q) Una función que se invoca a sí misma de manera directa o indirecta es una
función recursividad.
r) Por lo general, una función recursiva tiene dos componentes: uno que
proporciona un medio para que termine la recursividad a través de la evaluación
de un caso base, y otro que expresa el problema como una llamada recursiva a
un problema ligeramente más sencillo que el de la llamada original.
#include <stdio.h>
int cubo( int y );
int main ( )
{
int x;
for ( x = 1; x <= 10; x++ )
printf( “%d\n”, cubo( x ) );
return 0;
}
Int cubo(int y)
{
return y*y*y;
}
5.3 Escriba un programa que compruebe si los ejemplos sobre las llamadas a las
funciones matemáticas de la biblioteca que mostramos en la figura 5.2 producen
realmente los resultados indicados.
#include <stdio.h>
#include <math.h>
int main()
{
printf( “sqrt(%.1f) = %.1f\n”, 900.0, sqrt( 900.0 ) );
printf( “sqrt(%.1f) = %.1f\n”, 9.0, sqrt( 9.0 ) );
} /* fin de main */
5.7 Encuentre el error en cada uno de los segmentos de programa y explique cómo
puede corregir dicho error (vea también el ejercicio 5.50):
a) int g( void )
{
printf( “Dentro de la funcion g\n” );
int h( void )
{
printf( “Dentro de la función h\n” );
}
}
{
printf( “Dentro de la función h\n” );
}
}
d) void f( float a )
{
float a;
printf( “%f”, a );
}
void f( float a );
{
printf( “%f”, a );
}
5.9 Un estacionamiento cobra la cuota mínima de $2.00 por las tres primeras horas de
estacionamiento. El estacionamiento cobra $0.50 adicional por hora o fracción después
del tiempo mínimo. El cobro máximo para cualquier periodo de 24 horas es de $10.00.
Suponga que ningún automóvil se estaciona por más de 24 horas, al mismo tiempo que
otro. Escriba un programa que calcule e imprima los cobros por cada uno de los tres
clientes que se estacionaron ayer en el estacionamiento. Debe introducir el número de
horas que cada cliente pasó estacionado ahí. Su programa debe imprimir los resultados
en una forma tabular, y debe calcular e imprimir los recibos de las percepciones de ayer.
El programa debe utilizar la función calculaImporte para determinar el importe de cada
cliente. Sus salidas deben ser semejantes al formato siguiente:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
float horas=0;
float importe=0;
float totalHoras=0;
float totalImporte=0;
int c=1;
while(horas!=0){
importe=calculaImporte(horas);
printf("%-9d %10.1f %11.2f\n",c,horas,importe);
totalHoras+=horas;
totalImporte+=importe;
c++;
scanf("%f",&horas);
}
printf("Total%15.1f %7.2f\n",totalHoras,totalImporte);
return 0;
}
if(horas<=3) costo=2;
if(horas>3 && horas<19) costo=2+0.5*(ceil(horas)-3);
if(horas>=19) costo=10;
return costo;
}
5.11 La función floor puede utilizarse para redondear un número a una posición decimal
determinada. La instrucción:
y = floor( x * 10 + .5 ) / 10; redondea x a la posición de las décimas (la primera
posición a la derecha del punto decimal). La instrucción y = floor( x * 10 + .5 ) / 100;
redondea x a la posición de las centésimas (la segunda posición a la derecha del punto
decimal). Escriba un programa que defina cuatro funciones para redondear al número x
de distintas maneras:
a) redondeaAentero( numero )
#include<stdio.h>
float floor(float)
Void main()
{
Float a;
Int x;
Printf( “Numero ”);
Scanf(“%f”,&a);
x= floor(a+.5);
Printf( “El valor es :”,x);
}
b) redondeaAdecimas ( numero )
#include<stdio.h>
float floor(float)
Void main()
{
float a;
Int x;
Printf( “Numero ”);
Scanf(“%f”,&a);
x= floor( a * 10 + .5 ) / 10
Printf( “El valor es :”,x);
}
c) redondeaAcentesimas ( numero )
#include<stdio.h>
float floor(float)
Void main()
{
float a;
Int x;
Printf( “Numero ”);
Scanf(“%f”,&a);
n= floor( a * 10 + .5 ) / 100
Printf( “El valor es :”,x);
}
d) redondeaAmilesimas ( numero )
#include<stdio.h>
float floor(float)
int] main()
{
float a;
Int n1,n2,n3;
Printf( “Numero ”);
Scanf(“%f”,&a);
n1= floor(x+.5);
n2= floor( a * 10 + .5 ) / 10;
n3= floor( a * 10 + .5 ) / 100;
Printf( “El valor es :”,n1);
Printf( “El valor es :”,n2);
Printf( “El valor es :”,n3);
Por cada valor leído, su programa debe imprimir el valor original, el número
redondeado al entero más cercano, el número redondeado a la décima más cercana, el
número redondeado a la centésima más cercana, y el número redondeado a la milésima
más cercana.
#include<iostream>
#include<math>
return 0;
}
5.13 Escriba instrucciones que asignen enteros de manera aleatoria a la variable n en los
siguientes rangos:
a) 1 ≤ n ≤ 2
b) 1 ≤ n ≤ 100
c) 0 ≤ n ≤ 9
d) 1000 ≤ n ≤ 1112
e) _1 ≤ n ≤ 1
f) _3 ≤ n ≤ 11
#include<iostream>
#include <ctime>
#include<cstdlib>
void aleatorio(){
int x, y, z, a, b, c;
srand(time(NULL));
a = rand()%(1 - 2 + 1);
b = rand()%(1 - 100 + 1);
c = rand()%(0 - 9 + 1);
d = rand()%(1000 - 1112 + 1);
e = rand()%(-1 - 1 + 1);
f = rand()%(-3 - 11 + 1);
int main(){
void aleatorio();
return 0;
}
5.15 Defina una función llamada hipotenusa que calcule la longitud de la hipotenusa de
un triángulo recto, cuando se introducen los otros dos lados. Utilice esta función en un
programa que determine la longitud de la hipotenusa para cada uno de los siguientes
triángulos. La función debe tomar dos argumentos de tipo double y devolver la
hipotenusa como double. Verifique su programa con los valores de los lados
especificados en la figura 5.18.
#include<iostream>
#include<cmath>
double hipo;
int main(){
hipotenusa(l0, l1);
return 0;
}
5.17 Escriba una función multiplo que determine para un par de enteros, si el segundo
es múltiplo del primero. La función debe tomar dos argumentos enteros y devolver 1
(verdadero) si el segundo es un múltiplo del primero, y de lo contrario 0 (falso). Utilice
esta función en un programa que introduzca una serie de pares de enteros.
#include<iostream>
int main(){
return 0;
}
#include <stdio.h>
int main()
{
int lado;
printf("Introduzca la medida de los lados de un cuadrado: ");
scanf("%d",&lado);
if(lado>=1 && lado<=20){
int contador =1;
while(contador<=lado){
int contador1 = 1;
while(contador1<=lado){
printf("*");
contador1++;
};
printf("\n");
contador++;
}
}
return 0;
}
5.21 Utilice técnicas similares a las empleadas en los ejercicios 5.19 y 5.20 para
producir un programa que grafique un número variado de figuras.
#include <stdio.h>
int main()
{
int lado;
printf("Introduzca la medida de los lados de un cuadrado: ");
scanf("%d",&lado);
if(lado>=1 && lado<=20){
int contador =1;
while(contador<=lado){
int contador1 = 1;
while(contador1<=lado){
printf("*");
printf("#");
printf("&");
printf("$");
contador1++;
};
printf("\n");
contador++;
}
}
return 0;
}
5.23 Escriba una función que tome el tiempo en tres argumentos enteros (para horas,
minutos, y segundos), y que devuelva el número de segundos desde la última vez que el
reloj “marcó las 12”. Utilice esta función para calcular los segundos que existen entre
dos horas, las cuales se miden con el ciclo de 12 horas del reloj.
5.25 Escriba una función que devuelva el más pequeño de tres números de punto
flotante.
#include<iostream.h>
int main()
{
Int n1,n2,n3;
Printf( “Primer Numero ”);
Scanf(“%f”,&n1);
Printf( “segundo Numero ”);
Scanf(“%f”,&n2);
Printf( “segundo Numero ”);
Scanf(“%f”,&n3);
If (n1<= n2 && n1<=n3)
Printf( “Numero Menor ”,n1);
else
If (n2>n3)
Printf( “Numero Menor ”,n2);
else
Printf( “Numero Menor ”,n3);
return 0;
}
5.27 Se dice que un entero es primo si sólo es divisible entre 1 y entre sí mismo. Por
ejemplo, 2, 3, 5 y 7 son primos, pero 4, 6, 8 y 9 no lo son.
a) Escriba una función que determine si un número es primo.
#include <stdio.h>
if(n != 1)
b) Utilice esta función en un programa que determine e imprima todos los números
primos entre 1 y 10,000. ¿Cuántos de estos 10,000 números tiene que verificar
realmente antes de que esté seguro de que encontró todos los números primos?
#include<iostream>
#include<iomanip>
using namespace std;
int primos();
int main()
{
primos();
}
int primos()
{
int i;
for(int n=2; n<10000; n++)
{
for(i=2; n%i; i++);
if(i==n) cout<<setw(6)<<n;
}
cout<<endl;
getchar();
return 0;
}
c) Inicialmente podría usted pensar que n/2 es el límite máximo que debe probar para
ver si un número es primo, pero sólo necesita ir tan arriba como la raíz cuadrada de n.
¿Por qué? Rescriba el programa, y ejecútelo de ambas maneras. Estime la mejora en el
rendimiento.
5.29 El máximo común divisor (MCD) de dos enteros es el entero más grande que
divide cada uno de los números. Escriba un programa mcd que devuelva el máximo
común divisor de dos enteros.
#include<stdio.h>
int main ()
{
int n1,n2;
int residuo, mcd;
printf("Ingresar un numero");
scanf("%d",&n1);
printf("Ingresar un numero");
scanf("%d",&n2);
do{
residuo=n1%n2;
if(residuo !=0)
{
n1=n2;
n2=residuo;
}
else
{
mcd=n2;
}
} while(residuo != 0);
printf("MCD:%d\n", mcd);
return 0;
#include <iostream.h>
#include <conio.h>
do{
clrscr();
cout<<"Nombre del estudiante: ";
cin>>nombre;
cout<<"Calificacion 1: ";
cin>>c1;
cout<<"Calificacion 2: ";
cin>>c2;
cout<<"Calificacion 3: ";
cin>>c3;
cout<<"Calificacion 4: ";
cin>>c4;
prom=promedio(c1,c2,c3,c4);
getch();
}