Ir a Emagister Encuentra tu formación ideal
¡Mailxmail y emagister se unen para que tengas toda la formación a tu alcance!
12.184 cursos gratis
8.201.402 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:

Al presionar "Recibir" estás dándote de alta y aceptas las condiciones legales de mailxmail

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  

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


¿Quieres recibir más cursos de Programación? ¡Son gratis!