3.283 cursos gratis
6.262.191 alumnos
Publica tu curso gratis
Busca cursos gratis:
Estás aquí: mailxmail > Cursos de Informática > Programación > Introducción al Lenguaje C > Ejercicios II

Introducción al Lenguaje C

Autor: Fernando Guerrero
Curso:  4,41/5 4,41/5 (464 opiniones) |25607 alumnos|Fecha publicación: 10/05/2004

Capítulo 15:

 Ejercicios II

17. Hacer el ejercicio de presentación (ejercicio 5) con una llamada a una función.

/* Saludo con funcion */
#include <stdio.h>
void contestar (char []);
main()
{
char nombre[20];
printf("Hola, me llamo Ordenador, y tu?\n");
scanf("%s",nombre);
contestar(nombre);
}
void contestar(char *nombre)
{
printf("Me alegro de conocerte %s\n",nombre);
}

18. Escriba un programa que calcule el cuadrado de un número mediante una macro.

/* Calculo del cuadrado de un numero */
#include <stdio.h>
#define CUAD(x) (x*x) /* Definicion de macros */
main()
{
float a;
printf("\nEscriba un numero: ");
scanf("% f",&a);
printf("\nSu cuadrado es: %f\n",CUAD(a));
}

19. Escriba un programa que imprima un mensaje rodeado por un borde, utilizando funciones para dibujar los elementos del borde.

/* Mensaje rodeado por un borde */
#include <stdio.h>
#define ANCHO 77
#define FILAS 4
void linea();
void lados();
main()
{
printf("\n\n\n\n");
linea();
lados();
printf(" *\t\t\t\t Bienvenido a C \t\t\t\t*\n");
lados();
linea();
printf("\n\n\n\n");
}
void linea()
{
int x;
printf(" ");
for (x=0; x<=ANCHO; ++x) putchar('*');
putchar('\n');
}
void lados()
{
int y;
for (y=0; y<=FILAS; ++y) printf(" *\t\t\t\t\t\t\t\t\t\t*\n");
}

20. Escriba un programa que imprima una tabla con las áreas del círculo y de la esfera para un radio en el rango de 0 hasta 2 en incrementos de 0.2.

/* Area del circulo y de la esfera para un radio desde 0 hasta 2 con incremento de 0.2 */
#include <stdio.h>
#define MAX_RADIO 2.0
#define PI 3.141592
double AreaCirculo(double radio);
double AreaEsfera(double radio);
main(){
double radio;
puts("\n\t=== Tabla de Areas ===\n");
puts("\tRadio\tCirculo\tEsfera");
puts("\t-----\t-------\t------");
for (radio=0.0; radio <= (double) MAX_RADIO; radio +=0.2)
printf("\t%6.2lf\t%6.3lf\t%6.3lf\n",radio,AreaCirculo(radio),AreaEsfera(radio));
}
double AreaCirculo(double radio)
{
double area;
area = PI * (radio * radio);
return(area);
}
double AreaEsfera(double radio)
{
double area;
area = 4.00 * PI * (radio * radio);
return(area);
}
double radio;
puts("\n\t=== Tabla de Areas ===\n");
puts("\tRadio\tCirculo\tEsfera");
puts("\t-----\t-------\t------");
for (radio=0.0; radio <= (double) MAX_RADIO; radio +=0.2)
printf("\t%6.2lf\t%6.3lf\t%6.3lf\n",radio,AreaCirculo(radio),AreaEsfera(radio));
}
double AreaCirculo(double radio)
{
double area;
area = PI * (radio * radio);
return(area);
}
double AreaEsfera(double radio)
{
double area;
area = 4.00 * PI * (radio * radio);
return(area);
}
{
double radio;
puts("\n\t=== Tabla de Areas ===\n");
puts("\tRadio\tCirculo\tEsfera");
puts("\t-----\t-------\t------");
for (radio=0.0; radio <= (double) MAX_RADIO; radio +=0.2)
printf("\t%6.2lf\t%6.3lf\t%6.3lf\n",radio,AreaCirculo(radio),AreaEsfera(radio));
}
double AreaCirculo(double radio)
{
double area;
area = PI * (radio * radio);
return(area);
}
double AreaEsfera(double radio)
{
double area;
area = 4.00 * PI * (radio * radio);
return(area);
}

21. Escriba un programa con una función que borre la pantalla emitiendo una serie de caracteres de salto de línea.

/* Limpia Pantalla */
#include <stdio.h>
void LimpiaPantalla(int n);
main()
{
int numlin=30;
LimpiaPantalla(numlin);
}
void LimpiaPantalla(int n)
{
while (n-- >0) putchar('\n');
}

22. Escriba un programa que calcule la potencia entera de un número entero de forma iterativa y de forma recursiva.

/* Potencia entera. Por iteracion y por recursividad */
#include <stdio.h>
long poten_iter(int base, int expo);
long poten_recu(int base, int expo);main()
{
long potencia;
int b, e;
printf("\nEscriba una base entera para la operacion b= ");
scanf("%d",&b);
printf("\nEscriba un exponente entero para la operacion e= ");
scanf("%d",&e);
/* Forma iterativa */
potencia=poten_iter(b,e);
printf("\nEl resultado de la potencia en forma iterativa=%ld\n",potencia);
/* Forma recursiva */
potencia=poten_recu(b,e);
printf("\nEl resultado de la potencia en forma recursiva=%ld\n",potencia);
}
long poten_iter(int base, int expo)
{
long p=1;
int i;
for (i=1; i<=expo; i++) p*=base;
return(p);
}
long poten_recu(int base, int expo)
{
long p;
/* Condiciones de finalizacion de la recursividad */
if (base==0) return(0);
if (expo==0) return(1);
/* Desarrollo de la recursividad */
p=base*poten_recu(base,expo-1);
return(p);
}
{
long potencia;
int b, e;
printf("\nEscriba una base entera para la operacion b= ");
scanf("%d",&b);
printf("\nEscriba un exponente entero para la operacion e= ");
scanf("%d",&e);
/* Forma iterativa */
potencia=poten_iter(b,e);
printf("\nEl resultado de la potencia en forma iterativa=%ld\n",potencia);
/* Forma recursiva */
potencia=poten_recu(b,e);
printf("\nEl resultado de la potencia en forma recursiva=%ld\n",potencia);
}
long poten_iter(int base, int expo)
{
long p=1;
int i;
for (i=1; i<=expo; i++) p*=base;
return(p);
}
long poten_recu(int base, int expo)
{
long p;
/* Condiciones de finalizacion de la recursividad */
if (base==0) return(0);
if (expo==0) return(1);
/* Desarrollo de la recursividad */
p=base*poten_recu(base,expo-1);
return(p);
}
main()
{
long potencia;
int b, e;
printf("\nEscriba una base entera para la operacion b= ");
scanf("%d",&b);
printf("\nEscriba un exponente entero para la operacion e= ");
scanf("%d",&e);
/* Forma iterativa */
potencia=poten_iter(b,e);
printf("\nEl resultado de la potencia en forma iterativa=%ld\n",potencia);
/* Forma recursiva */
potencia=poten_recu(b,e);
printf("\nEl resultado de la potencia en forma recursiva=%ld\n",potencia);
}
long poten_iter(int base, int expo)
{
long p=1;
int i;
for (i=1; i<=expo; i++) p*=base;
return(p);
}
long poten_recu(int base, int expo)
{
long p;
/* Condiciones de finalizacion de la recursividad */
if (base==0) return(0);
if (expo==0) return(1);
/* Desarrollo de la recursividad */
p=base*poten_recu(base,expo-1);
return(p);
}

23. Escriba un programa que inicialice un array de enteros. Calcule e imprima su suma, media, mínimo y máximo.

/* Calculo de la suma, media, minimo y maximo de un vector de enteros */
#include <stdio.h>
#define MIN(a,b) ((a < b) ? a : b)
#define MAX(a,b) ((a > b) ? a : b)
main()
{int valores[] = {10,1,3,4,15,6,7,8,9,10};
int i, tam, suma=0, minimo=valores[0], maximo=valores[0];
float media;
tam=sizeof(valores)/sizeof(int);
for (i=0; i<tam;++i)
{
printf(" %d ",valores[i]);
minimo=MIN(minimo,valores[i]);
maximo=MAX(maximo,valores[i]);
suma+=valores[i];
}
media=(float) suma / tam;
printf("\nSuma= %d; Media= %f\nMinimo= %d; Maximo=%d\n",suma,media,minimo,maximo);
}
int i, tam, suma=0, minimo=valores[0], maximo=valores[0];
float media;
tam=sizeof(valores)/sizeof(int);
for (i=0; i<tam;++i)
{
printf(" %d ",valores[i]);
minimo=MIN(minimo,valores[i]);
maximo=MAX(maximo,valores[i]);
suma+=valores[i];
}
media=(float) suma / tam;
printf("\nSuma= %d; Media= %f\nMinimo= %d; Maximo=%d\n",suma,media,minimo,maximo);
}
int valores[] = {10,1,3,4,15,6,7,8,9,10};
int i, tam, suma=0, minimo=valores[0], maximo=valores[0];
float media;
tam=sizeof(valores)/sizeof(int);
for (i=0; i<tam;++i)
{
printf(" %d ",valores[i]);
minimo=MIN(minimo,valores[i]);
maximo=MAX(maximo,valores[i]);
suma+=valores[i];
}
media=(float) suma / tam;
printf("\nSuma= %d; Media= %f\nMinimo= %d; Maximo=%d\n",suma,media,minimo,maximo);
}

24. Escriba un programa que contenga dos arrays y utilizando punteros genere un tercer array con la suma de los otros dos.

/* Suma de arrays por punteros */
#include <stdio.h>
#define FILAS 4
#define COLS 5
main()
{
int j,k;
int arr1 [FILAS] [COLS] = { {13,15,17,19,21},{20,22,24,26,28},{31,33,35,37,39},{40,42,44,46,48} };
int arr2 [FILAS] [COLS] = { {10,11,12,13,14},{15,16,17,18,19},{20,21,22,23,24},{25,26,27,28,29} };
int arr3 [FILAS] [COLS];
for (j=0; j<FILAS; j++)
{
for (k=0; k<COLS; k++)
{
*(*(arr3+j)+k) = *(*(arr1+j)+k) + *(*(arr2+j)+k);
printf("%d ", *(*(arr3+j)+k));
}
printf("\n");
}
}

25. Escriba un programa que utilice una función para intercambiar dos valores. Hacerlo para dos funciones, una con llamada por valor y otra por referencia.

/* Intercambio de valores usando llamada por valor y por referencia*/
# include <stdio.h>
void IntercambioValor(int v1, int v2);
/* Utiliza variables*/
void IntercambioReferencia(int *pv1, int *pv2);
/* Utiliza punteros*/
main()
{
int val1=10, val2=20;
printf("Valores iniciales:\n\tval1 = %d; val2 = %d\n",val1,val2);
/* Paso de parametros por valor */
IntercambioValor(val1, val2);
printf("\nPaso de parametros por valor:\n\tval1 = %d; val2 =%d\n",val1,val2);
/* Paso de parametros por referencia */
IntercambioReferencia(&val1, &val2);
printf("\nPaso de Parametros por Referencia:\n\tval1 = %d; val2 =%d\n",val1,val2);
}
void IntercambioValor(int v1, int v2)
{
int tmp;
tmp = v1;
v1 = v2;
v2 = tmp;
}
void IntercambioReferencia(int *pv1, int *pv2)
{
int tmp;
tmp = *pv1;
*pv1 = *pv2;
*pv2 = tmp;
}
# include <stdio.h>
void IntercambioValor(int v1, int v2);
/* Utiliza variables*/
void IntercambioReferencia(int *pv1, int *pv2);
/* Utiliza punteros*/
main()
{
int val1=10, val2=20;
printf("Valores iniciales:\n\tval1 = %d; val2 = %d\n",val1,val2);
/* Paso de parametros por valor */
IntercambioValor(val1, val2);
printf("\nPaso de parametros por valor:\n\tval1 = %d; val2 =%d\n",val1,val2);
/* Paso de parametros por referencia */
IntercambioReferencia(&val1, &val2);
printf("\nPaso de Parametros por Referencia:\n\tval1 = %d; val2 =%d\n",val1,val2);
}
void IntercambioValor(int v1, int v2)
{
int tmp;
tmp = v1;
v1 = v2;
v2 = tmp;
}
void IntercambioReferencia(int *pv1, int *pv2)
{
int tmp;
tmp = *pv1;
*pv1 = *pv2;
*pv2 = tmp;
}

26. Escriba un programa que pida una cadena por el teclado y la imprima después de convertir el primer carácter en mayúscula y el resto en minúsculas.

/* Primera letra mayuscula y demas minuscula */
#include <stdio.h>
#include <ctype.h>
#define MAXCADENA 20
char *ConversionLetra(char *cadena);
main()
{
char tmp[MAXCADENA+1];
/* Se suma 1 para el byte NUL */
printf("\ nEscriba una cadena (de %d caracteres maximo) y teclee INTRO:\n",MAXCADENA);
gets(tmp);
printf("\n%s\n", ConversionLetra(tmp));
}
char *ConversionLetra(char *cadena)
{
char *pc;
pc=cadena;
*pc=toupper(*pc);
++pc;
while (*pc != '\0')
{
*pc = tolower(*pc);
++pc;
}
return(cadena);
}

27. Escriba un programa que lea una cadena desde el teclado y cuente el número de caracteres de tres categorías: letras (a-z y A-Z), dígitos (0-9) y otros caracteres. Utilice las funciones isdigit() e isalpha() definidas en la librería ctype.h.

/* Contar letras de (a-z y A-Z), digitos (0-9) y otros caracteres Funciones isdigit() e isalpha() */
#include <stdio.h>
#include <ctype.h>
#define MAXCAD 80
main()
{
char linea[MAXCAD], *pc=linea;
int digitos=0, letras=0, otros=0;
printf("\nEscriba una cadena (<%d caracteres):\n", MAXCAD);
gets(linea);
while (*pc != '\0')
{
if (isdigit(*pc)) ++digitos;
else if (isalpha(*pc)) ++letras;
else ++otros;
++pc;
}
printf("\n\tDigitos = %d\n\tLetras = %d\n\tOtros = %d\n",digitos,letras,otros);
}

28. Escriba un programa que lea una cadena y busque un carácter en ella.

/* Buscar un caracter en una cadena */
# include <string.h>
main()
{
char caract, cadena[80], *ptr;
printf("Introduzca la cadena donde se va a buscar:\n");
gets(cadena);
printf("Escriba el caracter a buscar:\n");
caract=getchar();
ptr=strchr(cadena, caract);
if (ptr==0) printf("El caracter %c no se encuentra en la cadena.\n",caract);
else printf("La posicion del caracter es %d.\n", ptr-cadena+1);
}

29. Escriba un programa que inserte un carácter en una determinada posición de una cadena.

/* Insertar caracter en una posicion en una cadena */
#include <stdio.h>
#include <string.h>
void insertar(char *cadena, char ca, int n);
main()
{
char car, cadena[81];
int posicion;
printf("\nEscriba una cadena [Intro], caracter [Intro], posicion\n");
gets(cadena);
scanf("%c\n%d",&car,&posicion);
insertar(cadena,car,posicion);
puts(cadena);
}
void insertar(char *cadena, char ca, int n)
{
char temporal[81];
strcpy(temporal,&cadena[n-1]);
cadena[n-1]=ca;
strcpy(&cadena[n], temporal);
}

30. Escriba un programa que copie un fichero a otro.

/* Copia de un fichero a otro con otro nombre */
#include <stdio.h>
main(argc,argv)
int argc;
char *argv[];
{
FILE *origen, *destino;char car, aux1, aux2; int i=0, igu=1;
if (argc != 3)
{
printf ("Error. La instruccion es:\n copia fichero_origen fichero_destino\n");
return;
}
do
{
aux1=*(argv[1]+i);
aux2=*(argv[2]+i);
if (aux1 != aux2)
{
igu=0;
break;
}
i++;
} while (aux1 != '\0' || aux2 != '\0');
if (igu == 1)
{
printf ("El fichero destino es el mismo que el fichero origen\n");
return;
}
origen=fopen(argv[1],"r");
destino=fopen(argv[2],"w");
if (origen==NULL || destino ==NULL)
{
printf ("El fichero de origen no existe o no hay espacio en el disco\n");
return;
}
while ( (car=getc(origen)) != EOF ) putc(car,destino);
fclose(origen);
fclose(destino);
}
char car, aux1, aux2;
int i=0, igu=1;
if (argc != 3)
{
printf ("Error. La instruccion es:\n copia fichero_origen fichero_destino\n");
return;
}
do
{
aux1=*(argv[1]+i);
aux2=*(argv[2]+i);
if (aux1 != aux2)
{
igu=0;
break;
}
i++;
} while (aux1 != '\0' || aux2 != '\0');
if (igu == 1)
{
printf ("El fichero destino es el mismo que el fichero origen\n");
return;
}
origen=fopen(argv[1],"r");
destino=fopen(argv[2],"w");
if (origen==NULL || destino ==NULL)
{
printf ("El fichero de origen no existe o no hay espacio en el disco\n");
return;
}
while ( (car=getc(origen)) != EOF ) putc(car,destino);
fclose(origen);
fclose(destino);
}

31. Escriba un programa que lea y muestre en pantalla el contenido de un fichero.

/* Muestra en pantalla el contenido de un fichero de texto */
#include <stdio.h>
#define MAXVIA 64
#define MAXLINEA 256
main()
{
int car; /* caracter de entrada */
FILE *pf; /* puntero a fichero */
char via_acceso[MAXVIA]; /* buffer para el nombre del fichero */
char linea[MAXLINEA]; /* buffer de linea para fgets() */
printf("\nNombre de fichero: ");
gets(via_acceso);
if (*via_acceso == '\0') return; /* No se ha introducido ningun nombre */
pf = fopen(via_acceso, "r");
if (pf == NULL)
{
printf("\nEL fichero no existe o la ruta no es valida.\n");
return;
}
while (fgets(linea,MAXLINEA,pf) != NULL) fputs(linea,stdout);
fclose(pf);
}

Capítulo anterior - Ejercicios
Recibe nuestras novedades
Al presionar "Recibir" estás dándote de alta y aceptas las condiciones legales de mailxmail

Hay 464 opiniones. Opina sobre este curso.


Cursos similares a Introducción al Lenguaje C


Cursos Valoración Alumnos Vídeo
Creación de un microrobot
Este es un robot muy sencillo pensado para aquellos que se quieren iniciar en el mundo de la microbótica. La estructura mecánica está realizada con piezas de Lego y como ... [25/02/05]
5/5 8.057  
Usabilidad web
La usabilidad es el principal elemento con el cual debe contar toda página Web. Yo defino Usabilidad como la capacidad de una aplicación de ser agradable, eficiente y fá... [17/07/06]
 4,25/5 1.763  
Primeros pasos con XML y XSL
XML es el acrónimo del inglés eXtensible Markup Language cuyo objetivo principal es conseguir una página web más semántica. Inicialmente nace como sucesor del HTML, separ... [10/09/04]
 4,25/5 6.827  


Publicar en   del.icio.us    digg    meneame

¿Qué es mailxmail.com?|ISSN: 1699-4914|Recomiéndanos|Ayuda
Condiciones legales de mailxmail