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

5.403.813 usuarios, 2.222 cursos

Ej: inglés, excel, guitarra, etc.

Curso: Introducción al Lenguaje C

Temáticas:
programación
Categoría:
ti/informática
Autor:
Fernando Guerrero Tala
Fecha de publicación:
10/05/04
Dificultad:
Fácil

Alumnos que han seguido este curso:
15.245

Contenido del curso

  1. 1. Introducción
  2. 2. Elementos
  3. 3. Tipos de datos
  4. 4. Tipos de datos (II)
  5. 5. Declaraciones
  6. 6. Operadores
  7. 7. Sentencias
  8. 8. Funciones
  9. 9. Arrays y Cadenas
  10. 10. Punteros
  11. 11. Entrada y Salida
  12. 12. PreProcesador
  13. 13. Librerías
  14. 14. Ejercicios
  15. 15. Ejercicios II


15. Ejercicios II


Capítulo anterior: 14 - Ejercicios

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);
}





¡Te informamos cada semana de los nuevos cursos gratuitos que subimos on-line para ti!
Pon aquí tu e-mail y aprende gratis con nosotros

« Anterior 15/15



Hay 460 opiniones del curso


  • 5/5 MUY BUEN CURSO -- José Francisco (13/11/08)

    Este curso me ha venido muy bien para poner aprobar en el ciclo formativo que estoy haciendo ya que es muy sencillo de enterder.

  • 5/5 Excelente -- Yoderky (06/11/08)

    Este sitio me es muy util, me ha acalarado muchas dudas. Es un gran trabajo el que han hecho, Facil de entender, ejemplos entendibles y sencillos, en fin que sigan es un excelente sitio

  • 4/5 muy bien -- baby_fer-zamora (18/09/08)

    es un exelente curso muy claro y consiso pero le faltaria muchas cosas basicas para empezar a programar

  • 4/5 Aprender es facil -- Edgardo Rafael (26/02/08)

    Muy buen curso. Felicitaciones .


Publicar en