Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ajustes
Diagrama de temas
Administración del curso
SILABO Lenguaje C Tipo de Datos, Variables y salida a pantalla Constantes+Operadores+Ingreso por teclado Calificaciones
Funciones Matemáticas Estructuras Repetitivas Estructuras Condicionales+PC2 Tema 7 PARCIAL Ajustes de mi perfil
Pueden ser llamadas tantas veces como sea necesario por lo que se reduce el código del
programa, al tener el efecto de reutilización de código.
http://www.fieeuni.edu.pe/lms/course/view.php?id=706&topic=11 1/13
5/11/2017 Curso: CB411SOT (Parte II)
Una subrutina puede llamar a otra subrutina, esto se conoce como Anidamiento.
FUNCIONES
Una función sirve para realizar tareas concretas y simplificar el programa. Sirve para evitar tener que
repetir el mismo código varias veces. Nosotros ya hemos trabajado con funciones, como por ejemplo
printf. Una función tiene el siguiente formato:
http://www.fieeuni.edu.pe/lms/course/view.php?id=706&topic=11 2/13
5/11/2017 Curso: CB411SOT (Parte II)
Argumentos: Estos son variables que se pasan como datos a una función. Deben ir separados por
una coma. Los srgumentos son opcionales en una función (la lista de argumentos puede estar
vacía), esto depende de lo que requiera hacer la función.
Programa que tiene una función que imprime los cuadrados de los números de 1 hasta 9.
#include <stdio.h>
#include <math.h>
void potencia2()
{
int contador;
for(contador=1; contador<10; contador++)
printf("%.0lf\n",pow(contador,2));
}
main() {
potencia2();
system("PAUSE");
}
La función compara toma dos números, los compara e imprime cual es mayor. En este caso la función
no devuelve ningún valor y es por ello que en la definición de la función se utiliza el tipo de datos void.
#include <stdio.h>
void compara (int a,int b)
{
if ( a>b ) printf( "%i es mayor que %i\n", a, b );
else printf( "%i es mayor o igual que %i\n", b, a );
}
main() {
int num1, num2;
http://www.fieeuni.edu.pe/lms/course/view.php?id=706&topic=11 3/13
5/11/2017 Curso: CB411SOT (Parte II)
printf("Ingrese primer numero: ");
scanf("%i", &num1);
printf("Ingrese segundo numero: ");
scanf( "%i", &num2 );
compara (num1,num2); // Llamamos a la función con sus dos argumentos
system("PAUSE");
}
La función hipotenusa requiere del valor de dos catetos y devuelve como resultado la hipotenusa.
#include <stdio.h>
#include <math.h>
double hipotenusa (int a,int b)
{
double h;
h=sqrt(pow(a,2)+pow(b,2));
return (h);
}
main() {
int cat1, cat2;
double hipo;
printf("Ingrese primer cateto (numero entero): ");
scanf("%i", &cat1);
printf("Ingrese segundo cateto (numero entero): ");
scanf("%i", &cat2);
hipo = hipotenusa (cat1,cat2);
printf("La hipotenusa de los catetos %i y %i es %lf\n", cat1, cat2, hipo);
system("PAUSE");
}
Ejemplo 04I: Programa que solicita el ingreso de dos números decimales y mediante una función
denominada promedio, calcula su respectivo promedio. El programa principal imprime el resultado.
Solución A:
#include <stdio.h>
double promedio (double dato1,double dato2)
{
double semi;
semi = (dato1 + dato2) / 2;
return(semi);
}
main() {
double num1, num2;
double prom;
printf("Ingrese primer numero: ");
scanf("%lf", &num1);
printf("Ingrese segundo numero: ");
scanf("%lf", &num2);
prom = promedio (num1,num2);
printf("El promedio es: %lf\n",prom);
system("PAUSE");
}
Observar el siguiente gráfico, en donde se observa como es la transferencia de información entre las
variables del programa principal y las variables de la función, asi como los espacios en memoria que
ocupan:
http://www.fieeuni.edu.pe/lms/course/view.php?id=706&topic=11 4/13
5/11/2017 Curso: CB411SOT (Parte II)
Solución B: Otra forma de realizar la función es realizar el cálculo dentro de los paréntesis de la
instrucción return.
#include <stdio.h>
double promedio(double dato1, double dato2)
{
return((dato1 + dato2) / 2);
}
main() {
double num1, num2;
double resultado;
printf("Ingrese primer numero: ");
scanf("%lf", &num1);
printf("Ingrese segundo numero: ");
scanf("%lf", &num2);
resultado = promedio (num1, num2);
printf("El promedio es: %lf\n",resultado);
system("PAUSE");
}
Declaración de Funciones
Podemos declarar las funciones antes del inicio del programa principal (main). La declaración consiste en
definir la "cabecera" de la función después de las definiciones de variables (sin escribir el código
asociado a ellas).
Nota: En la definción de una función no debe omitirse los identificadores de los parámetros.
#include <stdio.h>
#include <math.h>
//Definición de funciones
double hipotenusa( int a, int b );
main() {
int cat1, cat2;
double hipo;
printf("Ingrese primer cateto (numero entero): ");
scanf("%i", &cat1);
printf("Ingrese segundo cateto (numero entero): ");
scanf("%i", &cat2);
hipo = hipotenusa(cat1,cat2);
printf("La hipotenusa de los catetos %i y %i es %lf\n", cat1, cat2, hipo);
system("PAUSE");
}
double hipotenusa( int a, int b )
http://www.fieeuni.edu.pe/lms/course/view.php?id=706&topic=11 5/13
5/11/2017 Curso: CB411SOT (Parte II)
{
double h;
h=sqrt(pow(a,2)+pow(b,2));
return (h);
}
Cuando se define la cabecera de la función sin su código, debemos poner un ';' al final. Cuando
definamos el código más tarde no debemos poner el ';' se hace como una función normal.
Variables Locales
Se denomina variables locales a las variables que son definidas dentro de la función y a las cuales no se
pueden acceder desde el programa principal ni desde otra función.
Cuando definimos una variable dentro de una función, esa variable sólo es válida dentro de la función.
Esto quiere decir que podemos usar la misma variable en diversas funciones sin tener problemas de
duplicidad.
Ejemplo 06I:
#include <stdio.h>
//Definición de funciones
void imprimeValor();
main() {
int contador = 0;
contador++;
printf("El valor de contador es: %i\n", contador);
imprimeValor();
printf("Ahora el valor de contador es: %i\n", contador);
system("PAUSE");
}
void imprimeValor()
{
int contador = 5;
printf("El valor de contador es: %i\n", contador);
}
Si definimos una variable dentro de main sólo podremos usarla dentro de main.
Variables Globales
A diferencia de las variables locales cuyo ámbito estaba confinado a la función donde estaban
declaradas, el ámbito de las variables globales se extiende desde el punto en que se definen hasta el final
del programa. En otras palabras, si definimos una variable al principio del programa, cualquier función que
forme parte de éste podrá utilizarla simplemente haciendo uso de su nombre.
Ejemplo 07I:
#include <stdio.h>
//Definición de variables globales
int dato;
//Definición de funciones
void primera();
void segunda();
main() {
dato = 9;
printf("El valor de variable es: %i\n", dato);
primera();
segunda();
dato++;
printf("Ahora el valor de variable es: %i\n", dato);
system("PAUSE");
}
void primera()
{
printf("En la funcion primera, variable es: %i\n",dato);
}
void segunda()
{
dato++;
printf("En la funcion segunda, variable es: %i\n",dato);
}
http://www.fieeuni.edu.pe/lms/course/view.php?id=706&topic=11 6/13
5/11/2017 Curso: CB411SOT (Parte II)
Podemos crear una variable global y en una función una variable local con el mismo nombre. Dentro de
la función cuando llamamos a esa variable llamamos a la local, no a la global. Esto no da errores pero
puede crear confusión al programar y al analizar el código.
Observamos que hay una duplicidad de arreglos, que para una cantidad grande de elementos
consumiría mucha memoria. Cuál es la solución?
Los arrreglos en C se pasan a una función como referencia y no como valor. Esto significa que todas las
modificaciones que hagamos dentro de la función al arreglo que recibimos como parámetro, realmente se
realizan en el arreglo original que se utilizó como argumento al momento de llamar a la función.
Es necesario también, pasarle el tamaño del arreglo (el número de elementos del arreglo). Como el
arreglo se pasa a la función como referencia, lo que esta recibiendo la función en realidad es un
"puntero" al primer elemento del arreglo, pero no sabe en donde termina el arreglo, por eso es necesario
que la función también reciba como parámetro el número de elementos del arreglo.
http://www.fieeuni.edu.pe/lms/course/view.php?id=706&topic=11 7/13
5/11/2017 Curso: CB411SOT (Parte II)
imprimeElementosEnteroArreglo: Permite imprimir en pantalla cada uno de los elementos
enteros de un arreglo.
#include <stdio.h>
int numeroElementosArreglo();
void ingresoElementosEnteroArreglo(int m[], int tamano);
void imprimeElementosEnteroArreglo(int m[], int tamano);
main() {
int elementos;
elementos = numeroElementosArreglo();
int Datos[elementos];
ingresoElementosEnteroArreglo (Datos, elementos);
imprimeElementosEnteroArreglo (Datos, elementos);
system("PAUSE");
}
int numeroElementosArreglo(){
int i;
do{
printf("Ingrese el numero de elementos para el arreglo, mayor a cero: ");
scanf("%i", &i);
}while(i<=0);
return (i);
}
void ingresoElementosEnteroArreglo(int m[], int tamano) {
int i;
for (i=0;i<tamano;i++) {
printf("Ingrese el elemento [%i] del arreglo: ", i);
scanf("%i", &m[i]);
}
}
void imprimeElementosEnteroArreglo(int m[], int tamano) {
int i;
printf( "Los datos ingresados al arreglo son: \n");
for (i=0;i<tamano;i++) {
printf("Elemento [%i] es: %i\n", i, m[i]);
}
}
Una variante al programa anterior es definir a la variable elementos como variable global, con lo cual
nos ahorramos en tener que pasar su valor a cada funcion que lo requiera:
#include <stdio.h>
void numeroElementosArreglo();
void ingresoElementosEnteroArreglo(int m[]);
void imprimeElementosEnteroArreglo(int m[]);
int elementos;
main() {
numeroElementosArreglo();
int Datos[elementos];
ingresoElementosEnteroArreglo (Datos);
imprimeElementosEnteroArreglo (Datos);
system("PAUSE");
}
void numeroElementosArreglo(){
do{
printf("Ingrese el numero de elementos para el arreglo, mayor a cero: ");
scanf("%i", &elementos);
}while(elementos<=0);
}
void ingresoElementosEnteroArreglo(int m[]) {
int i;
for (i=0;i<elementos;i++) {
printf("Ingrese el elemento [%i] del arreglo: ", i);
scanf("%i", &m[i]);
}
}
void imprimeElementosEnteroArreglo(int m[]) {
int i;
printf( "Los datos ingresados al arreglo son: \n");
for (i=0;i<elementos;i++) {
printf("Elemento [%i] es: %i\n", i, m[i]);
}
}
http://www.fieeuni.edu.pe/lms/course/view.php?id=706&topic=11 8/13
5/11/2017 Curso: CB411SOT (Parte II)
La función debe pasar al programa principal el valor de la suma para que sea impresa en pantalla.
Adicionalmente se esta creando una variable global para almacenar allí el número de elementos
del arreglo.
Solucion:
#include <stdio.h>
void numeroElementosArreglo();
void ingresoElementosEnteroArreglo(int m[]);
void imprimeElementosEnteroArreglo(int m[]);
int sumaElementosEnteroArreglo(int m[]);
int elementos
main() {;
numeroElementosArreglo();
int arreglo[elementos], suma;
ingresoElementosEnteroArreglo (arreglo);
imprimeElementosEnteroArreglo (arreglo);
suma=sumaElementosEnteroArreglo(arreglo);
printf("La suma de todos los elementos del arreglo son: %i\n", suma);
system("PAUSE");
}
void numeroElementosArreglo(){
int i;
do{
printf("Ingrese el numero de elementos para el arreglo, mayor a cero: ");
scanf("%i", &i);
}while(i<=0);
return (i);
}
void ingresoElementosEnteroArreglo(int m[]) {
int i;
for (i=0;i<elementos;i++) {
printf("Ingrese el elemento [%i] del arreglo: ", i);
scanf("%i", &m[i]);
}
}
void imprimeElementosEnteroArreglo(int m[]) {
int i;
printf( "Los datos ingresados al arreglo son: \n");
for (i=0;i<elementos;i++) {
printf("Elemento [%i] es: %i\n", i, m[i]);
}
}
int sumaElementosEnteroArreglo(int m[]) {
int i,sum=0;
for (i=0;i<elementos;i++) {
sum=sum+m[i];
}
return (sum);
}
Ejercicio 01I: Elaborar un programa principal que solicite el ingreso de un número entero mayor a
cero. El programa tiene las siguientes funciones:
Crear el arreglo tipo char con el número de elementos indicado en la función numeroElementos.
Solicitar el ingreso de la letra mayúscula mínima y la letra mayúscula máxima que se requiere
para enviarlo como parámetros a la función crearAleatorioElementosCharArreglo. Se debe
validar:
http://www.fieeuni.edu.pe/lms/course/view.php?id=706&topic=11 9/13
5/11/2017 Curso: CB411SOT (Parte II)
Ejercicio 03I: Programa que calcule el área sombreada de color gris, considerando que el lado del
cuadrado (del tipo decimal) es una variable global.
El programa principal debe imprimir los valores de área del cuadrado, área del triángulo, área del sector
circular y finalmente el área sombreada.
http://www.fieeuni.edu.pe/lms/course/view.php?id=706&topic=11 10/13
5/11/2017 Curso: CB411SOT (Parte II)
Si la función no imprime el resultado, el programa principal debe hacerlo (previo mensaje indicado lo que
se va a imprimir).
Ejemplo: Programa que solicita el ingreso de dos opciones (tecla S o N) y displaya que opción hemos
elegido.
#include <stdio.h>
main() {
int i,opcion;
do {
printf("Presionar Si (S) o No (N): ");
opcion = getch();
printf("%c\n",opcion);
} while (opcion!='S' && opcion!='N');
if(opcion=='S'){
printf("Usted a elegido Si");
}
if(opcion=='N'){
printf("Usted a elegido No");
}
printf("\n");
system("PAUSE");
}
http://www.fieeuni.edu.pe/lms/course/view.php?id=706&topic=11 11/13
5/11/2017 Curso: CB411SOT (Parte II)
El programa principal debe solicitar los valores de numA y numB (enteros mayores a cero)
Se debe crear un tercer arreglo M cuyos elementos deben ser grabados de la siguiente manera:
Ejemplo:
arregloA: 2 5 6 9 1 12
arregloB: 8 5 3 6 14
numA = 2
numB = 3
arregloM: 2 6 12 3 6
numeroElementos: Permite ingresar por teclado el número de elementos que tendrá un arreglo.
crearAleatorioElementosEnteroArreglo: Considerar que se le debe indicar a la función el valor
mínimo (min) y el valor maxímo (max) de los valores que deben ser creados en forma aleatoria
para el arreglo.
imprimeElementosEnteroArreglo: Imprimir en pantalla cada uno de los elementos de un arreglo
del tipo entero.
numeroMultiplosEnteroArreglo: Calcula para un arreglo de enteros, el número de multiplos que
tiene (múltiplo debe ser enviado como argumento a la función).
cargaMultiplosArreglo: Carga en un tercer arreglo los múltiplos de numA del arreglo A y los
múltiplos de numB del arreglo B.
http://www.fieeuni.edu.pe/lms/course/view.php?id=706&topic=11 12/13
5/11/2017 Curso: CB411SOT (Parte II)
Ir a... Elegir...
http://www.fieeuni.edu.pe/lms/course/view.php?id=706&topic=11 13/13