12.176 cursos gratis
8.741.981 alumnos
Facebook Twitter YouTube
Busca cursos gratis:

Introducción al Lenguaje C

Autor: Fernando Guerrero
Curso:
8,81/10 (467 opiniones) |73701 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

Nuestras novedades en tu e-mail

Escribe tu e-mail:



MailxMail tratará tus datos para realizar acciones promocionales (vía email y/o teléfono).
En la política de privacidad conocerás tu derechos y gestionarás la baja.

Cursos similares a Introducción al Lenguaje C



  • Vídeo
  • Alumnos
  • Valoración
  • Cursos
1. Lenguaje C++. Guía para Programadores
C++ es un potente lenguaje de programación que apareció en 1980, continuando con... [01/07/04]
37.692  
2. Action Script 3. Lenguaje de programación
Action script 3 . Este curso de informática fue realizado especialmente para las... [04/05/11]
274
Curso con video
3. Introducción a Oracle
En el curso se introducen los conceptos básicos para saber que es un Gestor de... [01/02/06]
21.247  

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