Documente Academic
Documente Profesional
Documente Cultură
#include <stdio.h>
#include <stdlib.h>
struct alumno {
char nombre[50];
float nota;
};
int x,opcion=1;
float sum=0,cont=0,mejor,peor;
for (x=0;x<5;x++)
{
printf("Introduzca nombre alumno:");
gets(alumnos[x].nombre);
gets(alumnos[x].nombre);
printf("Introduzca nota:");
scanf("%f",&alumnos[x].nota);
}
if (opcion==1)
{
printf("Introduzca un nombre: ");
gets(alum.nombre);
gets(alum.nombre);
system("PAUSE");
return 0;
}
FUNCIONES
Resumen-Teoría: Los programas sencillos, como los ejemplo planteados hasta ahora, normalmente no necesitan un nivel de
estructuración elevado, es decir, pueden escribirse todo seguido como una lista de órdenes sencilla (a pesar de los bucles). Pero cuando los
programas crecen un poco, es necesario estructurarlos adecuadamente para mantenerlos legibles, facilitar su mantenimiento y para poder
reutilizar ciertas porciones de código. El mecanismo de C que nos permite esto son las funciones. Con los compiladores, los fabricantes
nos proporcionan un conjunto importante de funciones de librería.
Declaración, definición y llamada
En la declaración declaramos una función, es decir, le decimos al compilador qué tipo de valor devuelve la función, cuántos datos hay
que proporcionarle y de qué tipos. Por ejemplo:
float funcionprueba (int exponente, float base);
En este ejemplo, la function “funcionprueba” devuelve un valor float, y recibe un int y un float.
Cuando una función no devuelve ningún valor hay que poner “void” como tipo retornado. Del mismo modo, si no recibe ningún
parámetro, hay que poner también “void” entre los paréntesis:
void funcion (void); // declaración de una función que no recibe ni devuelve nada.
En la definición se establece qué hace una función, es decir, se define la función. Por ejemplo:
float funcionprueba (int exponente, float base {
int i;
float resultado;
if(exponente=0) {
resultado=1;
}
else{ resultado = base;
for(i=0;i++;i<exponente)
{
resultado = base * resultado;
}//fin de for
}//fin de else
return resultado; }
En este ejemplo, la function “funcionprueba” multiplica por sí misma la base tantas veces como indica el exponente, es decir, calcula la
potencia. La definición de la función puede estar antes o después que el main. Cuando se pone antes que el main hace las veces de
declaración.
Ámbito de las variables
Al igual que al comienzo del main, en las funciones también se pueden declarar variables (como el caso de “i” y de “resultado” del
ejemplo anterior), estas variables se pueden usar únicamente dentro de la función en la que están declaradas. A esto se le llama el ámbito
de una función. En C los ámbitos se crear abriendo llave “{” y se cierran cerrando llave “}”. Al cerrar un ámbito se destruyen todas las
variables en él declaradas.
Si se declara una variable fuera de todos los ámbitos (fuera del main), se dice que es una “variable global”, ya que se podrá utilizar dentro
de cualquier función.
Los parámetros que recibe una función son variables locales de dicha función que se inicializan en la llamada a la función y, al igual que
todas las variables locales, se destruyen al terminar la función. La única excepción a esta regla son los arrays: cuando el argumento que se
pasa a la función es un array, este dato no es una variable local, sino que sigue perteneciendo al entorno desde el que se hizo la llamada y
los valores modificados se conservarán al terminar la función. Veamos un ejemplo:
void datos(int array[])
{ x[0]=7; x[1]=8; x[2]=9;
}
void main(void){
int x[3]={1,2,3};
for(i=0;i<3;i++)printf(“%d,”,x[i]);// qué imprimirá??
}
Imprimirá: 7,8,9.
EJERCICIOS
Ejercicio 1: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int mi_funcion(void)
{ return 3+2;
}
void main(void){
printf(“La function devuelde %d”,mi_funcion());
}
Ejercicio 2: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int mi_funcion(int x)
{return x*x;
}
void main(void){
printf(“La function devuelde %d”,mi_funcion(5));
}
Ejercicio 3: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int mi_funcion(int x)
{ int y;
y=2+x*3;
return y;
}
void main(void){
printf(“La function devuelde %d”,mi_funcion(5+2));
}
Ejercicio 4: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int mi_funcion(int x)
{ return x*x;
}
void main(void){
int x=3;
mi_funcion(x);
printf(“La function devuelde %d”, mi_funcion(x));
printf(“La variable vale %d”, x);
}
Ejercicio 5: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int mi_funcion(int x)
{ x=x*5;
return x;
}
void main(void){
int x=3;
mi_funcion(x);
printf(“La function devuelde %d”, mi_funcion(x));
printf(“La variable vale %d”, x);
}
Ejercicio 6: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int mi_funcion(int x)
{ x=x*5;
return x;
}
void main(void){
int x=3;
x=mi_funcion(x);
printf(“La function devuelde %d”, mi_funcion(x));
printf(“La variable vale %d”, x);
}
Ejercicio 7: ¿Qué imprime?.
¿Qué imprime el siguiente fragmento de código? Compruébalo.
int mi_funcion(int x)
{ x=x*5;
return x; }
void main(void){
int y=3, x=4;
printf(“La function devuelde %d”, mi_funcion(y));
printf(“La variable vale %d”, x); }
Ejercicio 8: Función cuadrado.
Escribir el código de la función que devuelve el cuadrado de un número que recibe como argumento. Comprobar que funciona utilizando
un programa de prueba como el siguiente:
int cuadrado(int x)
{ /*código a escribir*/
}
void main(void){
int y=4;
printf(“Introduzca un numero:”);
scanf(“%d”,&x);
printf(“Su factorial es %d”, cuadrado(x));
}
Ejercicio 9: Función factorial.
Escribir el código de la función que devuelva el factorial de un número que recibe como argumento. Comprobar que funciona utilizando
un programa de prueba como el siguiente:
int factorial(int x)
{ /*código a escribir*/
}
void main(void){
int y=4;
printf(“Introduzca un numero:”);
scanf(“%d”,&x);
printf(“Su factorial es %d”, factorial(x));
}
Ejercicio 10: Función elmayor.
Escribir el código de la función que devuelva el número mayor de un número que recibe como argumento. Comprobar que funciona
utilizando un programa de prueba como el siguiente:
int elmayor(int x, int y)
{ /*código a escribir*/
}
void main(void){
int y,x;
printf(“Introduzca un numero:”);
scanf(“%d”,&x);
printf(“Introduzca otro numero:”);
scanf(“%d”,&y);
printf(“El mayor es %d”, elmayor(x,y));
}
Ejercicio 11: Función escribe_asteriscos.
Escribir el código de la función que imprima por pantalla tantos asteriscos como indique el número que recibe como argumento.
Comprobar que funciona utilizando un programa de prueba como el siguiente:
void escribe_asteriscos(int x)
{ /*código a escribir*/
}
void main(void){
int y,x;
printf(“Introduzca un numero:”);
scanf(“%d”,&x);
escribe_asteriscos (x);
}
Ejercicio 12: Función divisores.
Escribir el código de la función que imprima por pantalla todos los divisores del número que recibe como argumento. Comprobar que
funciona utilizando un programa de prueba como el siguiente:
void divisores(int x)
{ /*código a escribir*/
}
void main(void){
int x;
printf(“Introduzca un numero:”);
scanf(“%d”,&x);
divisores(x);
}
Ejercicio 13: Función divisores comunes.
Escribir el código de la función que imprima por pantalla todos los divisores comunes de dos números que recibe como argumento.
Ejercicio 14: Función máximo divisor comunes.
Escribir el código de la función que retorne el máximo común divisor de dos números que recibe como argumento.
#include <stdio.h>
#include <stdlib.h>
int main (){
int tabla [10];
int i;
for(i=0;i<10;i++){
printf("Introduce un valor de fila %d: ", i+1);
scanf("%d",&tabla);};
for(i=10;i>0;i--){
printf("El inverso de la tabla anterior es: %d n",tabla);};
system("pause");
}
3) Escribir un programa que lea 10 números por teclado. Luego lea dos más e indique si éstos están entre los anteriores.
4) Escribir un programa que lea una matriz de 3 filas y 3 columnas de valores enteros. A continuación, el programa debe pedir el número
de una fila. El programa deberá devolver el máximo de esa fila.
5) Escribir un programa que lea un matriz de enteros de 2 filas y 4 columnas y muestre por pantalla la traspuesta a dicha matriz.
Ejemplo: Entrada: 2 3 4 5 Salida 2 7
7654 36
45
54
6) Escribir un programa que lea una matriz de números enteros y que devuelva la suma de los elementos positivos de la matriz y la suma
de los elementos negativos.
7) Escribir un programa que lea una matriz de enteros de 4 filas y 4 columnas y a continuación intercambie la fila i con la fila j, siendo i
y j dos valores introducidos por teclado.
#include "iostream"
#include "conio.h"
using namespace std;
int main()
{
int mat[6][6];
int n,i,j,f1,f2,aux;
cout<<"\n \t \t Intercambia Valores entre las filas i y j \n";
for (i=1;i<=4;i++)
{
for (j=1;j<=4;j++)
{
do
{
cout<<"\t \t \tValor en la posicion ("<<i<<" , "<<j<<") \t";
cin>>mat[i][j];
}
while(mat[i][j]<0);
}
}
// IMPRIME MATRIZ
cout<<"\n La matriz es: \n";
for (i=1;i<=4;i++)
{
cout<<"\n \t \t \t";
for (j=1;j<=4;j++)
{
cout<<mat[i][j]<<"\t";
}
}
cout<<" \n \n\t \t \t Para Intercambiar las filas";
cout<<" \n \n Ingrese el numero de la 1ra. fila: ";cin>>f1;
cout<<" \n Ingrese el numero de la 2da. fila: ";cin>>f2;
//Intercambiando
for (j=1;j<=4;j++)
{ aux=mat[f1][j];
mat[f1][j]=mat[f2][j];
mat[f2][j]=aux;
};
8) Escribir un programa que lea una matriz de 4 filas y 3 columnas, la visualice por pantalla y a continuación encuentre el mayor y el
menor elemento de la matriz y sus posiciones.
#include <stdio.h>
#include<stdlib.h>
int main(){
int tabla[4][3];
int f,c,f_mayor,c_mayor, f_menor,c_menor;
int mayor=0,menor=tabla[0][0];
for(f=0;f<4;f++){
for(c=0;c<3;c++){
printf("introduzca el numero de la fila %d y columna %d \n",f+1,c+1);
scanf("%d",&tabla[f][c]);
}}
for(f=0;f<4;f++){
for(c=0;c<3;c++){
printf("%d \n",tabla[f][c]);
if (mayor<tabla[f][c]){
mayor=tabla[f][c];
f_mayor=f;
c_mayor=c;
}
if(menor>tabla[f][c]){
menor=tabla[f][c];
f_menor=f;
c_menor=c;
}
}}
printf("el numero mayor %d \n", mayor);
printf("su posicion es fila: %d, columna %d \n", f_mayor+1,c_mayor+1); /*Editado me faltó ese detalle*/
printf("el numero menor %d \n ",menor );
printf("su posicion es fila: %d, columna %d \n", f_menor+1,c_menor+1); /*Editado me faltó ese detalle*/
system("pause");
}
9) Escribir un programa que lea una frase y determine la frecuencia de aparición de cada vocal con respecto al total de caracteres de la
frase.
#include <stdio.h>
#include <stdlib.h>
int sum=0,x;
char frase[50];
printf("\n\n");
system("PAUSE");
return 0;
}
10) Escribe un programa que lea del teclado una cadena y muestre en la pantalla la cantidad de consonantes y de vocales que contiene.
11) Escribe un programa que lea del teclado una cadena y construya y muestre en la pantalla otra cadena en la que cada vocal haya sido
reemplazada por un punto.
#include<conio.h>
seguida cada palabra del número de letras que compone cada palabra.*/
scanf("%s",&x[i]);
int lon;
while(palabra != NULL){
lon = strlen(palabra);
int main(){
char cad[50][50];
int y;
scanf("%d",&y);
cont(y,cad);
getch();
13) Escribir un programa que lea una frase y sustituya todas las secuencias de dos o más blancos por un solo blanco y visualice la frase.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char frase[100], salida[100];
int i, c = 0, contBlancos = 0;
salida[c] = '\0';
printf("\n%s\n", salida);
system("pause");
return 0;
}
14) Una palabra es palíndroma si se puede leer igual de izquierda a derecha que de derecha a izquierda, por ejemplo: reconocer es
palíndroma. Construye un programa que pida una palabra por teclado e imprima por pantalla si es o no palíndroma.
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
char cadena[80];
int palíndromo(void);
void quitar_blancos(void);
void main()
{clrscr();
printf("ingrese una cadena:");
gets(cadena);
quitar_blancos();
if(palíndromo())
printf("la cadena es un palíndromo");
else
printf("la cadena no es un palíndromo");
getch();
}
void quitar_blancos()
{
int c,i;
char a[80];
for(i=0;i<strlen(cadena);i++)
{
if(!isspace(cadena[i]))
{
a[c]=cadena[i];
c++;
}
a[c]='';
strcpy(cadena,a);
}
}
15) Un cuadrado mágico 3 x 3 es una matriz 3 x 3 formada por números del 1 al 9 donde la suma de sus filas, sus columnas y sus
diagonales son idénticas. Crear un programa que permita introducir un cuadrado por teclado y determine si este cuadrado es mágico o
no. El programa deberá comprobar que los números introducidos son correctos, es decir, están entre el 1 y el 9.
#include<stdio.h>
#include<conio.h>
void main()
{
int i,j,k,l,A[3][3],aux,f1=0,c1=0,dp=0;
int f2=0,c2=0,f3=0,c3=0,ds=0,sw=0;
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
do
{
printf("\nIngrese valor entre 1 y 9... ");
scanf("%d",&aux);
if ((aux<1)||(aux>9))
printf("\nNumero no permitido!");
}
while ((aux<1)||(aux>9));
k=0;
l=0;
sw=0;
while ((k<3)&&(sw==0))
{
l=0;
while ((l<3)&&(sw==0))
{
if (aux==A[k][l])
sw=1;
l++;
}
k++;
}
if (sw==0)
A[i][j]=aux;
else
{
printf("\nEl valor esta repetido!");
j--;
}
}
}
getch();
clrscr();
printf("\nLos elementos ingresados son:\n\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%3d",A[i][j]);
printf("\n");
}
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
if (i==0)
f1= f1+A[i][j];
else
if (i==1)
f2= f2+A[i][j];
else
f3= f3+A[i][j];
if(j==0)
c1= c1+A[i][j];
else
if (j==1)
c2= c2+A[i][j];
else
c3= c3+A[i][j];
if (i==j)
dp= dp+A[i][j];
if ((i+j)==2)
ds= ds+A[i][j];
}
}
aux=0;
if (f1==f2)
aux++;
if (f1==f3)
aux++;
if (f1==c1)
aux++;
if (f1==c2)
aux++;
if (f1==c3)
aux++;
if (f1==dp)
aux++;
if (f1==ds)
aux++;
if (aux==7)
printf("\nEl cuadrado si es magico");
else
printf("\nEl cuadrado no es magico");
getch();
}
16) Se dice que una matriz tiene un punto de silla si alguna posición de la matriz es el menor valor de su fila y a la vez el mayor de su
columna. Escribir un programa que tenga como entrada una matriz de números enteros y calcule la posición de un punto de silla (si es
que existe).
#include <stdio.h>
#define N 3
#define M 4
int main()
{
int mat[N][M] = {
3, 4, 5, 3,
2, 3, 2, 2,
1, 2, 0, 1 };
int posFila=2, posColumna=1;
printf("\n");
escribeMat(mat);
// comparo todas las posiciones del array para ver si son punto de silla
for (posFila = 0; posFila < N; posFila++)
for (posColumna = 0; posColumna < M; posColumna++)
if(puntoSilla(mat, posFila, posColumna)==1)
printf("Tiene punto de silla en la posicion %d-%d\n", posFila, posColumna);
else
printf("No hay punto de silla en la posicion %d-%d\n", posFila, posColumna);
return 0;
}
return noenc;
}
La Frase.
“Pregunta sin reparos lo que quieras saber: más que ignorar, es malo no querer aprender”
Marco Porcio Catón (234-149 a.C.)