Apuntes de C
Apuntes de C
Apuntes de C
Programa:
Variable:
Elemento de programación cuyo valor puede variar a lo largo del programa y tendrá un
nombre elegido por el programador. Este nombre puede contener letras, dígitos y carácter
subrayado. Nunca puede empezar por dígito.
En un programa primero tenemos que declarar todas las variables que se vayan a utilizar.
tipo variable;
Si existen varias variables del mismo tipo se separan por comas, ejemplo:
Tipos de datos
Órdenes
Escritura.- Sirve para que el ordenador escriba por pantalla lo que le indiquemos. Su forma
general es:
printf(“mensaje”);
_________;
_________;
Una vez que el programa esta limpio, hay que aplicarle un proceso de enlace (Link).
Ejemplos de formatos :
int a,b;
float x;
printf(“El resultado es %d\n”,a); lo que va entre comillas se escribe como plantilla y luego va
el formato, el cual se sustituye por el valor de esa variable.
Imprime en pantalla valor de <<a>> sumado con valor de <<b>> es<< a+b>>
Ejercicio 1
Hola
Este es
mi primer programa
de c */
#include<stdio.h>
void main ( )
Lectura de datos
Con la orden de lectura se consigue que el ordenador lea o acepte los datos que el usuario
introduce por teclado, su estructura es:
La cadena de control va entre comillas, solo se indican los formatos de las variables que se
quieren leer nunca mensajes ni saltos de línea.
Ejemplos:
scanf(“%d”,&a);
scanf(“%f”,&x);
scanf(“%d %f”,&a,&x);
Ejercicio 2
#include<stdio.h>
void main ( )
int a;
scanf("%d",&a);
Ejercicio 3
#include<stdio.h>
void main()
int a,b;
printf("primer numero:");
scanf("%d",&a);
printf("\nsegundo numero:");
scanf("%d",&b);
printf("\n%d + %d = %d\n",a,b,a+b);
printf("%d - %d = %d\n",a,b,a-b);
Ejercicio 4
#include<stdio.h>
void main ()
int a,b;
printf("Introduzca un numero:");
scanf("%d",&a);
if(a>0)
scanf("%d",&b);
SENTENCIA CONDICIONAL
_________;
Cuando hay varias cosas que hacer si se cumple una condición , tiene la siguiente expresión:
If(condicion)
___________;
___________;
Operadores condicionales
Aritméticos:
> mayor que
< menor que
= = igual a
! = distinto de
ejemplo: if(a= = b)
________;
void main( )
if(a>0)
scanf(“%d”,&b);
printf(“\n%d”,a+b);
___________; { ___________;
___________; ___________; {
} ____________;
else ____________;
___________; }
if(condicion)
_________;
_________;
}
else
_________;
_________;
Ejercicio 5
#include<stdio.h>
void main ()
int a,b;
scanf("%d",&a);
if (a%2==0)
scanf("%d",&b);
if (a%2!=0)
Ejercicio 6
mostrar su cuadrado */
#include<stdio.h>
void main ()
{
int a,b;
scanf("%d",&a);
if(a%5==0)
scanf("%d",&b);
else
Ejercicio 7
#include<stdio.h>
void main ()
int a,b,c;
scanf("%d",&a);
if (a<0)
scanf("%d",&b);
if(b<0)
else
{
printf("\nComo es positivo introduzca otro numero entero:");
scanf("%d",&c);
else
Asignación
Sirve para dar o asignar valor a una variable, la forma general es:
Variable = expresión;
Cuando esta orden se ejecuta la variable que aparece a la izquierda del signo igual, toma el
valor de la expresión que aparece a la derecha. Dicha expresión puede ser un valor constante
una variable o una operación aritmética.
Ejercicio 8
#include<stdio.h>
void main ()
int a,b,c;
printf("Introduzca un numero entero:");
scanf("%d",&a);
scanf("%d",&b);
if(a>b)
else
if(a%2!=0)
scanf("%d",&c);
else
Ejercicio 9
#include<stdio.h>
void main ()
int a,b;
scanf("%d",&a);
if(a%5==0)
{
printf("\nIntroduzca otro numero:");
scanf("%d",&b);
if(b>0)
else
else
if(a%2==0)
BUCLE WHILE
Es un conjunto de una o mas sentencias que se pueden ejecutar varias veces, en función de
una determinada condición.
While (condicion)
___________;
___________;
Contador.- Es una variable cuyo valor aumenta o disminuye una cantidad fija cada vez que se
ejecuta el bucle.
Acumulador.- Es una variable cuyo valor aumenta o disminuye una cantidad variable, cada
vez que se ejecuta el bucle.
Tanto los contadores, como los acumuladores deben inicializarse siempre, antes de ser
utilizados, esto es, debe asignárseles un valor inicial.
Ejercicio 11
/*Pedir 6 numeros enteros y calcular la suma de todos ellos */
#include<stdio.h>
void main ()
int a,sum,cont;
scanf("%d",&a);
cont=cont+1;
sum=sum+a;
Sum cont a
----- ---- --
13 2 5
18 3 2
20 4 10
30 5 4
+ + .- Es el operador incremento y sirve para incrementar en una unidad el valor del operando.
- - .- Es el operador decremento y sirve para decrementar en una unidad el valor del operando.
Ejercicio 12
/*Pedir seis numeros enteros y calcular la suma de aquellos que sean impares */
#include<stdio.h>
void main ()
int a,sum,cont;
sum=cont=0;
while(cont<6)
scanf("%d",&a);
cont++;
if(a%2!=0)
sum=sum+a;
Ejercicio 13
#include<stdio.h>
void main()
int a,cont,sum,nomultiplos;
sum=cont=nomultiplos=0;
while(cont<6)
scanf("%d",&a);
cont++;
if(a%5==0)
sum=sum+a;
else
nomultiplos++;
Ejercicio 14
sumar los que sean impares, ademas calcular el producto de todos los numeros
introducidos */
#include<stdio.h>
void main()
int a,cont,cuentaneg,suma,producto;
cont=cuentaneg=suma=0;
producto=1;
while(cont<6)
scanf("%d",&a);
cont++;
producto=producto*a;
if(a<0)
cuentaneg++;
if(a%2!=0)
suma=suma+a;
}
printf("\nLos numeros negativos han sido %d\n",cuentaneg);
Ejercicio 15
#include<stdio.h>
void main()
int a,multiplos,suma,pares,cont;
multiplos=suma=pares=cont=0;
while(cont<6)
scanf("%d",&a);
cont++;
if(a%3==0)
multiplos++;
else
suma=suma+a;
if(a%2==0)
pares++;
Cálculo de la media
Para calcular la media debemos sumar todos y dividir por el número de ellos, para ello
utilizaremos un bucle, ejemplo:
While ( )
_________;
_________;
printf(“ media”, suma/6); /*No hace falta ninguna variable par la media */
Ejercicio 16
#include<stdio.h>
void main()
int a,suma,cont;
suma=cont=0;
while(cont<6)
scanf("%d",&a);
cont++;
suma=suma+a;
Como comentario adicional al ejercicio anterior, debemos saber que en C cuando se dividen 2
números enteros, el resultado es siempre otro numero entero. Sin embargo si uno de los 2
números que se dividen o los 2 son reales, el resultado de la división es un número real.
Para escribirlo, es decir, para mostrar un número real debemos escribir “ %f”, pero si quiero
números decimales, entonces utilizaremos la siguiente expresión:
“%.nº decimales f”
La suma puede ser una variable entera ya que si las variables son enteras lo lógico es que su
suma también sea entera.
Ejercicio 17
#include<stdio.h>
void main()
int a,cont,suma,pares,contimpar;
cont=suma=pares=contimpar=0;
while(cont<6)
scanf("%d",&a);
cont++;
if(a%2==0)
pares++;
else
suma=suma+a;
contimpar++;
if(contimpar!=0)
else
Comentario al ejercicio 17
Ejercicio 18
/*Pedir seis numeros enteros calcular la suma de los que sean multiplos
#include<stdio.h>
void main()
int a,suma,cont,contneg,producto,sumaneg;
cont=suma=cont=contneg=sumaneg=0;
producto=1;
while(cont<6)
scanf("%d",&a);
cont++;
if(a%3==0)
suma=suma+a;
if(a<0)
sumaneg=sumaneg+a;
contneg++;
else
producto=producto*a;
if(contneg!=0)
printf("\nLa media de los multiplos de 3 negativos es %.2f\n",(float)sumaneg/contneg);
else
Ahormado
----------
Ejercicio 19
calcular la media de los que sean menores que el primer numero leido y
de los que no lo sean mostrar un mensaje con cada uno indicando si son
pares o impares */
#include<stdio.h>
void main()
int x,a,cont,suma,contmenor;
cont=suma=contmenor=0;
scanf("%d",&a);
while(cont<6)
scanf("%d",&x);
cont++;
if(x<a)
suma=suma+x;
contmenor++;
else
if(x%2==0)
else
if(contmenor!=0)
else
Ejercicio 20
#include<stdio.h>
void main()
int a,cont;
cont=1;
scanf("%d",&a);
while(cont<=10)
printf("\n%d * %d = %d\n",a,cont,a*cont);
cont++;
}
/*el cont++ no puede ir antes de printf porque empezaria en 2.
Ejercicio 21
multiplicar */
#include<stdio.h>
void main()
int a,b,cont,mayores;
scanf("%d",&a);
if(a%2!=0)
cont=mayores=0;
while(cont<6)
scanf("%d",&b);
cont++;
if(b>a)
mayores++;
else
cont=1;
while(cont<=10)
{
printf("\n%d * %d = %d\n",a,cont,a*cont);
cont++;
Operadores lógicos
&& <<equivale a>> Y
| | <<equivale a>> O
! <<equivale a>> NO
Ejercicio 22
numeros y calcular la media de los que sean mayores que el primero y menores
que el segundo */
#include<stdio.h>
void main()
int a,b,c,cont,suma,cantidad;
scanf("%d",&a);
scanf("%d",&b);
if(a>=b)
cont=0;
while(cont<=10)
{
printf("\n%d * %d = %d\n",a,cont,a*cont);
cont++;
else
cont=cantidad=suma=0;
while(cont<6)
scanf("%d",&c);
cont++;
if(c>a&&c<b)
suma=suma+c;
cantidad++;
if(cantidad!=0)
else
Ejemplo:
4/2+5*3
---- ------
15
-----------
17
Caso nº1:
__________;
else
___________;
Caso nº 2:
a = 3; equivale a a = 3;
printf(“Hola\n”); {
printf(“Hola\n”);
Caso nº 3:
a = 3;
printf(“Hola\n”);
printf(“Adios\n);
Caso nº1:
_________; _________;
} _________;
Caso nº 2:
x= 0;
printf(“Hola\n”);
x + +;
X = 0; x = 0;
{ { programa se queda
x + +; printf(“Hola\n”);
} x + +;
Caso nº 3:
x = 0;
printf(“Hola\n”);
x + +;
como equivale a:
x = 0;
While(x!=0) /*Escribe <<Hola>> una vez y aumenta << x >> una unidad */
printf(“Hola\n”);
x + +;
Realizamos test I y II
Realizar un ejercicio de un producto como suma abreviada y otro de potencia como producto
abreviado.
Ejercicio 23
/*Pedir dos numeros enteros si el segundo es mayor o igual que cero,
#include<stdio.h>
void main()
int a,b,suma,cont;
scanf("%d",&a);
scanf("%d",&b);
if(b>=0)
cont=suma=0;
while(cont<b)
suma=suma+a;
cont++;
Ejercicio 24
#include<stdio.h>
void main()
int a,b,cont,producto;
scanf("%d",&a);
scanf("%d",&b);
if(a!=0&&b>=0)
cont=0;
producto=1;
while(cont<b)
producto=producto*a;
cont++;
Ejercicio 25
/*pedir dos numeros enteros, si el segundo es menor que cero, pedir entonces
seis numeros enteros y contar los que sean mayores que el primero y contar
tambien los que sean multiplos del segundo, pero si el segundo numero no es
menor que cero calcular el producto de ambos a base de sumar el primero las
#include<stdio.h>
void main()
int a,b,c,cont,mayores,multiplos,suma;
scanf("%d",&a);
scanf("%d",&b);
if(b<0)
cont=mayores=multiplos=0;
while(cont<6)
{
printf("\nIntroduzca otro numero entero:\n");
scanf("%d",&c);
cont++;
if(c>a)
mayores++;
if(c%b==0)
multiplos++;
else
cont=suma=0;
while(cont<b)
suma=suma+a;
cont++;
Ejercicio 26
/*Pedir un entero si es distinto de cero, pedir otro, si este es menor que cero
#include<stdio.h>
void main()
int a,b,cont,producto,potencia;
if(a!=0)
scanf("%d",&b);
if(b<0)
cont=0;
producto=0;
while(cont<10)
cont++;
printf("\n%d * %d = %d\n",b,cont,producto+b);
else
cont=0;
potencia=1;
while(cont<b)
cont++;
Factorial
Los números menores que cero no tienen factorial, entonces normalmente se comenzara con
un if.
Ejercicio 27
/*Pedir un numero entero calcular y mostrar su factorial */
#include<stdio.h>
void main()
int a,fact,cont;
scanf("%d",&a);
if(a<0)
else
cont=1;
fact=1;
while(cont<=a)
fact=fact*cont;
cont++;
Ejercicio 27 bis
/*se empieza siempre por un if para evitar que sea menor que cero*/
#include<stdio.h>
void main()
int a,fact,cont;
scanf("%d",&a);
if(a<0)
printf("\nPor ser un numero negativo no tiene factorial");
else
cont=a;
fact=1;
while(cont!=1)
fact=fact*cont;
printf("%d",fact);
cont--;
Ejercicio 28
menores que él */
#include<stdio.h>
void main()
int a,b,media,fact,cont,menores;
scanf("%d",&a);
if(a>=0)
cont=a;
fact=1;
while(cont>0)
fact=fact*cont;
cont--;
else
cont=media=menores=0;
while(cont<6)
scanf("%d",&b);
if(b<a)
media=media+b;
menores++;
cont++;
if(menores!=0)
else
Los divisores de un número son aquellos que dividen al número y su resto es cero. El primer
divisor es siempre 1, entonces necesitamos un contador inicializado a 1, posteriormente, el
resto de dividir el número entre el contador debe ser cero.
Ejercicio 29
#include<stdio.h>
void main()
int a,cont,producto;
scanf("%d",&a);
if(a<=0)
cont=0;
while(cont<10)
cont++;
printf("%d * %d = %d\n",a,cont,producto);
else
cont=1;
while(cont<=a)
if(a%cont==0)
printf("%d\t",cont);
cont++;
printf("\n");
Cuando se quiere regular la posición del cursor y separarlo de la última posición, usaremos el
comando \t e imprimiremos una línea en blanco para separar del texto “presione una tecla
para continuar”.
Ejercicio 30
/*Pedir un numero entero si es mayor que cero calcular y escribir la suma de sus
#include<stdio.h>
void main()
int a,cont,suma;
scanf("%d",&a);
if(a>0)
cont=1;
suma=0;
while(cont<=a)
if(a%cont==0)
suma=suma+cont;
cont++;
if(suma>30)
cont=0;
while(cont<10)
cont++;
printf("\n%d * %d = %d\n",a,cont,a*cont);
}
}
BUCLE FOR
____________________;
____________________;
Expresion2 .- Es una condición, mientras esta se cumpla, se ejecutará el cuerpo del bucle.
Funcionamiento de FOR
Ejemplo de programa:
printf(“Introduce un numero:”);
scanf(“%d”,&a);
suma=suma+a;
for( ;cont<6; ) /*Cualquiera de las expresiones 1 ó 3 se puede quitar pero se conservan los
<< ; >> */
/* Las inicializaciones como sum=cont=0; se pueden escribir como sum=0,cont=0; es decir
separdos por comas */
Ejemplo:
_________; /*Como no hay nada expresado, lo que hay en el cuerpo del bucle se repetira
infinitamente */
_________;
Ejercicio 31
#include<stdio.h>
void main()
int a,cont;
scanf("%d",&a);
for(cont=1;cont<=10;cont++)
printf("%d * %d = %d\n",a,cont,a*cont);
Ejercicio 32
/*Pedir un numero entero, si es menor que cero, pedir 6 numeros y calcular la media
de los que sean multiplos de él, y si no es menor que cero, calcular y escribir su
factorial */
#include<stdio.h>
void main()
int a,b,suma,fact,cuenta,cont;
scanf("%d",&a);
if(a<0)
for(cont=cuenta=suma=0;cont<6;cont++)
scanf("%d",&b);
if(b%a==0)
suma=suma+b;
cuenta++;
if(cuenta!=0)
else
else
for(fact=1,cont=a;cont>0;cont--)
fact=fact*cont;
Ejercicio 33
/*Pedir un entero si es mayor que cero, mostrar por pantalla sus divisores,
#include<stdio.h>
void main()
{
int a,cont;
scanf("%d",&a);
if(a>0)
for(cont=1;cont<=a; cont++)
if(a%cont==0)
printf("%d\t",cont);
printf("\n");
else
for(cont=1;cont<=10;cont++)
printf("\n%d * %d = %d\n",a,cont,a*cont);
Ejercicio 34
#include<stdio.h>
void main()
int cont;
for(cont=1;cont<=100;cont++)
printf("%d\t",cont);
Ejercicio 35
#include<stdio.h>
void main ()
{
int cont;
for(cont=1;cont<100;cont=cont+2)
printf(" %d\t",cont);
SENTENCIA SWITCH
case valor 1:
_________;
_________;
_________;
break;
case valor 2:
_________;
_________;
break;
case valor 3:
_________;
_________;
break;
case valor 4:
_________;
_________;
break;
case valor 5:
_________; /* Se ejecuta en caso de que la variable tome
case valor 6:
_________;
default:
Ejercicio 36
#include<stdio.h>
void main()
int a;
printf("introduce un num:");
scanf("%d",&a);
switch(a)
case 1:
printf("Lunes\n");
break;
case 2:
printf("Martes\n");
break;
case 3:
printf("Miercoles\n");
break;
case 4:
printf("Jueves\n");
break;
case 5:
printf("Viernes\n");
break;
case 6:
case 7:
printf("Fin de semana\n");
break;
default:
printf("La cagaste\n");
La sentencia <break> lo que hace es que una vez que sea introducido el número que solo
salga lo que queremos. En el último del todo no hace falta el break
Vamos haciendo por parte, primero el switch sin nada, compilamos, luego el caso 1 y
compilamos, etc.
Ejercicio 37
#include<stdio.h>
void main()
int x,a,cont,f,cim;
scanf("%d",&x);
switch(x)
case 1:
printf("Introduce un numero:");
scanf("%d",&a);
if(a>0)
cont=1;
f=1;
while(cont<=a)
f= f * cont;
cont++;
else
break;
case 2:
printf("Introduce un numero:");
scanf("%d",&a);
for(cont=0;cont<=10;cont++)
printf("%d x %d = %d\n",a,cont,a*cont);
break;
case 3:
printf("Introduce Un Numero:");
scanf("%d",&a);
if(a>0)
for(cont=1;cont<=a;cont++)
if(a%cont==0)
printf("%d\t",cont);
}
printf("\n");
break;
case 4:
cim=0;
cont=0;
f=0;
while(cont<6)
printf("Introduce un numero:");
scanf("%d",&a);
if(a%2!=0)
f=f+a;
cim++;
cont++;
break;
BUCLE DO....WHILE
Su estructura es:
do
_________;
_________;
_________;
} while(condicion); /* Se coloca a la altura de la llave final para poder identificarla, pero no
tiene obligación de ser así */
Bucle: Bucle:
do while(condicion)
{{
________; __________;
________; __________;
}while (condicion); }
Lo que supone que el cuerpo del bucle lo que supone que el cuerpo del
Se ejecuta de una a “n” veces (al menos bucle se ejecuta de cero a “n” veces.
Ejemplo:
Se tienen dos números < a > y < b > (a!=0 y b>=0) calcular < a >
cont = 0; cont = 0;
p = 1; p = 1;
while(cont<b) do
{{
p=p*a; p=p*a;
cont++; cont + +;
} }while (cont<6);
comprobación 1
a b cont p
3201
3
9
comprobación 2 comprobación 2
si funciona, el exponente es 0 a b cont p
1 3 /* No se cumple*/
Ejercicio 38
/*Vamos a incluir un menu que nos indique que es lo que queremos que haga
#include<stdio.h>
void main()
int x,a,cont,f,cim;
do{
printf("1.Factorial\n");
printf("2.Tabla de multiplicar\n");
printf("3.Divisores\n");
printf("4.Media impares\n");
printf("5.Salir\n");
printf("\n");
scanf("%d",&x);
switch(x)
case 1:
printf("Introduce un numero:");
scanf("%d",&a);
if(a>0)
cont=1;
f=1;
while(cont<=a)
f= f * cont;
cont++;
else
break;
case 2:
printf("Introduce un numero:");
scanf("%d",&a);
for(cont=0;cont<=10;cont++)
printf("%d x %d = %d\n",a,cont,a*cont);
break;
case 3:
printf("Introduce Un Numero:");
scanf("%d",&a);
if(a>0)
for(cont=1;cont<=a;cont++)
if(a%cont==0)
printf("%d\t",cont);
}
printf("\n");
break;
case 4:
cim=0;
cont=0;
f=0;
while(cont<6)
printf("Introduce un numero:");
scanf("%d",&a);
if(a%2!=0)
f=f+a;
cim++;
cont++;
break;
}while(x!=5);
Utilizaremos el bucle do....while para hacer menús y/o para pedir un dato que cumpla unas
determinadas condiciones
Ejemplos:
do
printf(--------);
scanf(“%d”,&a);
}while (a<=0); /* La condición de while es la opuesta a lo que se pide */
do
printf(--------);
scanf(--------);
}while(a%2!=0);
Ejercicio 39
/*Pedir un numero entero mayor que cero e indicar cuantas cifras tiene*/
#include<stdio.h>
void main()
int a,cont,aux;
do{
scanf("%d",&a);
}while(a<=0);
cont=0;
aux=a;
while(aux!=0)
cont++;
aux=a/10;
Ejercicio 40
/*Pedir un numero entero mayor que cero, si tiene una cantidad de cifras impar
#include<stdio.h>
void main()
{
int a,cont,c,aux;
do{
scanf("%d",&a);
}while(a<=0);
cont=0;
aux=a;
while(aux!=0)
cont++;
aux=aux/10;
if(cont%2!=0)
for(c=1;c<=a;c++)
if(a%c==0)
printf("%d\t",c);
printf("\n");
else
for(cont=1;cont<=10;cont++)
printf("%d x %d = %d\n",a,cont,a*cont);
}
Ejercicio 41
/*Pedir un entero mayor que cero, calcular y escribir la suma de sus cifras*/
#include<stdio.h>
void main()
int a,suma,aux,cifra;
do{
scanf("%d",&a);
}while(a<0);
for(suma=0,aux=a;aux!=0; )
cifra=aux%10;
suma=suma+cifra;
Ejercicio 42
/*Pedir un entero mayor que cero, calcular la suma de sus cifras impares
#include<stdio.h>
void main()
int suma,a,aux,cifra,cont;
do{
scanf("%d",&a);
}while(a<0);
for(suma=cont=0,aux=a;aux!=0;aux=aux/10)
{
cifra=aux%10;
if(cifra%2!=0)
suma=suma+cifra;
else
cont++;
Ejercicio 43
/*Pedir un entero mayor que cero, si es mayor que mil contar cuantos treses
#include<stdio.h>
void main()
int a,suma,cont,cifra,aux;
do{
scanf("%d",&a);
}while(a<0);
if(a>1000)
for(aux=a,cont=cifra=0;aux!=0;aux=aux/10)
cifra=aux%10;
if(cifra==3)
cont++;
else
for(cifra=1,suma=0;cont<a;cont++)
if(a%cont==0)
suma=suma+cont;
if(suma==a)
else
Ejercicio 44
#include<stdio.h>
void main()
int a,aux,cifra,reves;
do{
scanf("%d",&a);
}while(a<=0);
reves=0;
cifra=0;
while(aux!=0)
if(reves==a)
else
ejemplo:
2941 2941 0 1
149
Ejercicio 45
lo es, mostrar todos los numeros que hay entre 1 y él, ambos incluidos en orden
descendente*/
#include<stdio.h>
void main()
int a,aux,cifra,reves,cont;
do
scanf("%d",&a);
}while(a<=0);
aux=a;
reves=0;
cifra=0;
while(aux!=0)
{
cifra=aux%10;
reves=reves*10+cifra;
aux=aux/10;
if(reves==a)
for(cont=1;cont<=a;cont++)
if(a%cont==0)
printf("%d\t",cont);
printf("\n");
else
for(cont=a;cont>0;cont--)
printf("%d\t",cont);
printf("\n");
Bucles anidados
Dos bucles están anidados si un bucle está dentro de otro. Para hacer bucles anidados hay
que tener en cuenta dos cuestiones:
1ª) Las variables que controlan los bucles deben ser diferentes.
2ª ) Antes de cada bucle, deben inicializarse los controladores y acumuladores que se vayan a
utilizar en dicho bucle.
___________;
___________;
while(condicion)
__________;
__________;
____________;
____________;
Ejercicio 46
#include<stdio.h>
void main()
int a,c1,c2tabla;
c1=0;
while(c1<6)
scanf("%d",&a);
c2tabla=1;
while(c2tabla<=10)
printf("%d * %d = %d\n",a,c2tabla,a*c2tabla);
c2tabla++;
c1++;
}
Ejercicio 47
#include<stdio.h>
void main()
int a,suma,cont,fact,c,c2;
cont=0;
suma=0;
c2=0;
while(cont<6)
scanf("%d",&a);
cont++;
if(a>=0)
for(c=fact=1;c<=a;c++)
fact=fact*c;
else
suma=suma+a;
c2++;
if(c2!=0)
printf("\nLa media de los que son menores que cero es %.2f\n",(float)suma/c2);
else
Ejercicio 48
/*Pedir 6 numeros enteros de cada uno que sea mayor que cero, mostrar sus divisores
e indicar la suma de los mismos y de los que no sean mayores que cero, mostrar la
#include<stdio.h>
void main()
int a,c,cont,contdiv,suma;
for(cont=0;cont<6;cont++)
scanf("%d",&a);
if(a>0)
for(contdiv=1,suma=0;contdiv<=a;contdiv++)
if(a%contdiv==0)
printf("%d\t",contdiv);
suma=suma+contdiv;
else
{
printf("\nLa tabla de multiplicar de %d es\n",a);
for(c=0;c<=10;c++)
printf("%d * %d = %d\n",a,c,a*c);
Ejercicio 49
/*Pedir 6 numeros enteros de los que sean mayores que cero contar los que
sean capicuas, y de los que no sean mayores que cero, mostrar la tabla de
multiplicar*/
#include<stdio.h>
void main()
int a,aux,cifra,reves,cont,capicuas,cont2;
for(cont=0,capicuas=0;cont<6;cont++)
scanf("%d",&a);
if(a>0)
aux=a;
reves=0;
cifra=0;
while(aux!=0)
cifra=aux%10;
reves=reves*10+cifra;
aux=aux/10;
if(reves==a)
capicuas++;
else
for(cont2=1;cont2<=10;cont2++)
printf("%d * %d = %d\n",a,cont2,a*cont2);
Ejercicio 50
#include<stdio.h>
void main()
int a,cont,fact,cont2,suma;
for(cont=0;cont<6;cont++)
scanf("%d",&a);
if(a>=0)
cont2=fact=1;
suma=0;
while(cont2<=a)
fact=fact*cont2;
suma=suma+fact;
cont2++;
FUNCIONES EN C:
Los programas se pueden dividir en subprogramas, que no son más que trozos de programa
que tienen un nombre y que se pueden utilizar cuando sea necesario sin más que llamarlos o
invocarlos.
Los programas de C como mínimo tienen siempre una función: main( ), que es por donde
empieza siempre la ejecución. Cuando dentro demain( ) se detecta la llamada a una función,
el control pasa entonces a dicha función y se realizan entonces todas sus sentencias. Cuando
estas terminan, el control de la ejecución pasa de nuevo al punto de llamada.
Una función es una colección de declaraciones y sentencias que sirven para resolver una
determinada tarea. Puede ser utilizada cuantas veces sea necesario para lo cual sólo se
precisa efectuar una llamada cada vez que sea preciso.
Parámetro: Dato que se le envía a la función cuando se efectúa una llamada a la misma.
las que no retornan nada al punto de llamada (realizan cálculos y muestran resultados)
las que retornan un dato al punto de llamada (realizan cálculos y devuelven un dato al punto de
llamada para que sea utilizado en él)
Llamada a la función
Definición de la función
Prototipo de la función
Los prototipos de las funciones van colocados después de los #include y antes de main( ). En
un prototipo se indica:
el nombre de la función
los tipos de dato de los diferente parámetros que se le envían a la función al llamarla
tipo nombre_funcion(tipo,tipo,....);
Ejemplos:
int f1 (int,int); El tipo es int, la funcion denominada f1 que recibe dos enteros como
parámetros y retorna un entero al punto de llamada.
float f2 (int); Función denominada f2 que recibe un entero como parámetro y retorna un real
al punto de llamada.
int f4( ); También se puede poner int f4(void);): Función denominada f4 que no recibe
parámetros y retorna un entero al punto de llamada.
Llamada a la función
Se hace de forma diferente según que la función retorne un valor o no retorne nada.
nombre_funcion(param1,param2,...);
Si la función retorna un dato al punto de llamada, la llamada a dicha función debe hacerse
SIEMPRE desde el interior de una expresión. Ala hora de efectuar la llamada a este tipo de
funciones hay que determinar qué es lo que se quiere hacer en el punto de llamada con el
valor que retorne la función.
int f(int):
x = f(a); Si lo que queremos es guardar en una variable el valor retornado por la función.
Definición de la función
Consta de una cabecera y un cuerpo. La cabecera es igual que el prototipo pero indicando los
nombres de los parámetros recibidos. El cuerpo de una función es un conjunto de
declaraciones y sentencias entre llaves. La función termina con una sentencia return que
retorna el control al punto de llamada.
1º.- DEBE haber una CONCORDANCIA TOTAL en cuanto a NUMERO Y TIPO DE LOS
PARÁMETROS del prototipo, de la llamada y de la definición.
Las variables que se declaran en una función se denominan variables locales y se destruyen
cuando la función termina. Pueden existir variables locales con el mismo nombre en distintas
funciones porque en realidad son distintas. Desde una función no se pueden utilizar las
variables locales de otra función, o sea las variables locales de una función sólo las puede
utilizar dicha función.
#include<stdio.h>
void main( )
int a,b;
printf(“Introduzca un numero:”);
scanf(“%d”,&a);
tabla(a); /*llamada a la función tabla, hace lo que sea y vuelve. <<a>> es parámetro actual */
printf(“Introduce otro”);
scanf(“%d”,&b);
tabla(a+b);
tabla(3);
int c;
printf(“%d * %d = %d\n”,num,c,num*c);
return; /* Solo es obligatorio ponerlo si retorna un dato para trabajar mejor acostumbrarse a
ponerlo */
}
Como resumen:
main( ) lo dirige todo y manda a otras funciones que hagan cosas...
Ejercicio 51
/*Pedir un numero entero mayor o igual que cero y acontinuacion llamar a una
#include<stdio.h>
void factorial(int);
void main()
int a;
do
scanf("%d",&a);
}while(a<0);
factorial(a);
int cont,fact;
for(cont=fact=1;cont<=num;cont++)
fact=fact*cont;
return;
Ejercicio 52
/*Pedir un entero mayor que cero y llamar a una funcion que calcule y escriba la
#include<stdio.h>
void funcion(int);
void main()
{
int a;
do{
scanf("%d",&a);
}while(a<=0);
funcion(a);
int cifra,suma,aux;
for(suma=0,aux=num;aux!=0;)
cifra=aux%10;
suma=suma+cifra;
aux=aux/10;
return;
Ejercicio 53
#include<stdio.h>
void divisores(int);
void tablamult(int);
void main()
int a;
if(a>0)
divisores(a);
else
tablamult(a);
int cont,contdiv;
for(cont=1,contdiv=0;cont<=num;cont++)
if(num%cont==0)
contdiv++;
Ejercicio 54
/*Pedir seis numeros enteros con cada uno de ellos que sea mayor que cero
#include<stdio.h>
void capicua(int);
void main()
int a,cont;
cont=0;
while(cont<6)
scanf("%d",&a);
cont++;
if(a>0)
capicua(a);
}
}
int aux,reves,cifra;
aux=num;
reves=0;
cifra=0;
while(aux!=0)
cifra=aux%10;
reves=reves*10+cifra;
aux=aux/10;
if(reves==num)
else
return;
Ejercicio 55
mayor o igual que cero y llamar a una funcion que calcule y escriba
#include<stdio.h>
void potencia(int,int);
void main()
int a,b;
do
}while(a==0);
do
scanf("%d",&b);
}while(b<=0);
potencia(a,b);
int cont,producto;
cont=0;
producto=1;
while(cont<b)
producto=producto*a;
cont++;
return;
Ejercicio 56
/* Pedir un numero entero mayor que cero y llamar a una funcion que lo cambie
#include<stdio.h>
void cambio_base(int);
void main()
int a;
do{
printf("Introduzca un numero entero mayor que cero:");
scanf("%d",&a);
}while(a<=0);
cambio_base(a);
int aux,x,resto,cont;
x=0;
aux=num;
cont=1;
while(aux!=0)
resto=aux%5;
x=resto*cont+x;
cont=cont*10;
aux=aux/5;
return;
Volvemos sobre funciones, esta vez las que retornan un dato, lo hacemos mediante un
ejercicio ejemplo:
#include<stdio.h>
int factorial(int);
void main( )
int a;
do {
printf(“Numero ?:”);
scanf(“%d”,&a);
}while(a<0);
int factorial(int a)
int c,f;
for(c=f=1;c<=a;c+ +)
f=f*c;
Ejercicio 57
/*Pedir un numero entero mayor que cero e indicar cuantas cifras tiene.
#include<stdio.h>
int cuenta_cifras(int);
void main()
int a;
do{
scanf("%d",&a);
}while(a<=0);
int cuenta_cifras(int a)
int cont,aux;
cont=0;
aux=a;
while(aux!=0)
cont++;
aux=aux/10;
return cont;
Ejercicio 58
/*Pedir un numero entero mayor que cero, si la suma de sus cifras es un numero
impar mostrar su tabla de multiplicar. Hay que hacer una funcion que reciba un numero entero
y retorne la suma de sus cifras y otra funcion que reciba un numero entero y muestre su tabla
de multiplicar*/
#include<stdio.h>
int suma_cifras(int);
void tabla_multiplicar(int);
void main()
int a;
do{
scanf("%d",&a);
}while(a<=0);
if(suma_cifras(a)%2!=0)
printf(tabla_multiplicar(a);
int suma_cifras(int a)
int suma,aux,cifra;
for(suma=0,aux=a;aux!=0; )
cifra=aux%10;
suma=suma+cifra;
aux=aux/10;
return suma;
void tabla_multiplicar(int a)
int cont;
for(cont=1;cont<=a;cont++)
Ejercicio 59
/*Pedir 6 numeros enteros de aquellos que sean mayores que cero contar
cuantos tienen mas de dos unos. Es necesario hacer una función que
#include<stdio.h>
int contador(int);
void main()
int a,cont,c2;
cont=c2=0;
while(cont<6)
scanf("%d",&a);
cont++;
if(a>0)
if(contador(a)>2)
c2++;
int contador(int a)
int aux,cuentaunos,cifra;
for(aux=a,cuentaunos=cifra=0;aux!=0;aux=aux/10)
cifra=aux%10;
if(cifra==1)
cuentaunos++;
aux=aux/10;
return cuentaunos;
Ejercicio 60
/*Pedir 6 numeros enteros y calcular la suma de sus factoriales. Hay que hacer una
#include<stdio.h>
int factorial(int);
void main()
int a,cont,suma;
cont=0;
suma=0;
while(cont<6)
printf("Introduce un numero:");
scanf("%d",&a);
cont++;
if(a<0)
else
suma=suma+factorial(a);
int factorial(int a)
int cfact,fact;
for(cfact=fact=1;cfact<=a;cfact++)
fact=fact*cfact;
return fact;
Ejercicio 61
Hay que hacer una funcion que reciba un numero y lo retorne al reves. El
#include<stdio.h>
int reves(int);
void main()
int a;
do{
scanf("%d",&a);
}while(a<=0);
if(reves(a)==a)
else
int reves(int a)
{
int aux,rev,cifra;
aux=a;
rev=0;
cifra=0;
while(aux!=0)
cifra=aux%10;
rev=rev*10+cifra;
aux=aux/10;
return rev;
TEST I
/* este es un comentario/*
#include<studio.h>
void main( );
int a
a= = 2;
if(a>0);
printf(“Hola”);
else
printf(“Adios”);
printf(“%d\n”,2*a)
printf(“%d\n” 3*a)
a=5;
if(a%3= =0)
printf(“%d\n”,2*a);
else
printf(“%d\n”, 3*a);
printf(“%d\n”, a*a);
a=9;
if(a%3= =0)
printf(“%d\n”,2*a);
else
printf(“%d\n”, 3*a);
printf(“%d\n”, a*a);
7.- Idem
a=5;
b=2;
c=a;
a=b;
b=b+4;
8.- 2 - 8 * 2 + 10 / 2 * 3
9.- 20 / 5 * 2 - 3 * 1 + 2
10.- 20 / (5*2) - 3 * 1 + 2
Resultados TEST I
10ª línea falta una <<,>> dentro del paréntesis y <<;>> al final.
6.- 18
8.- 15
9.- 7
10.- 1
TEST II
1.- a = 2;
if(a>3)
printf(“Hola”);
else
printf(“Adios”);
2.- a = 2;
if(a<3)
printf(“Hola”);
else
printf(“Adios”);
3.- a = 2;
if(a<3);
printf(“Hola”);
else
printf(“Adios);
4.- a = 2;
if(a>3);
printf(“Hola”);
5.- a = 2;
if(a<3);
printf(“Hola”);
6.- a =0;
while (a! = 0)
printf(“Hola”);
a+ +;
7.- a = 1;
while (a!=0)
printf(“Hola”);
a+ +;
8.- a = 1;
while(a!=0);
printf(“Hola”);
a+ +;
9.- a = 0;
while(a!=0);
printf(“Hola”);
a+ +;
Resultados TEST II
1.- Adios
2.- Hola
3.- No compila
4.- Hola
5.- Hola
6.- NADA
Ejercicio 62
Hay que hacer una función que reciba un entero y retorne un uno si dicho
#include<stdio.h>
int capicua(int);
void main()
int a;
do{
scanf("%d",&a);
}while(a<=0);
if(capicua(a)==1)
else
int capicua(int a)
int aux,reves,cifra;
aux=a;
reves=0;
cifra=0;
while(aux!=0)
cifra=aux%10;
reves=reves*10+cifra;
aux=aux/10;
if(reves==a)
return 1;
else
return 0;
Ejercicio 63
#include<stdio.h>
int capicua(int);
void main()
int a,cont;
cont=0;
a=1;
while(cont<20)
if(capicua(a)==1)
printf("%d\t",a);
cont++;
a++;
int capicua(int a)
{
int aux,reves,cifra;
aux=a;
reves=0;
cifra=0;
while(aux!=0)
cifra=aux%10;
reves=reves*10+cifra;
aux=aux/10;
if(reves==a)
return 1;
else
return 0;
Ejemplo:
Ejemplo:
a= 5;
printf(“x”);
else
printf(“y”);
a= 5;
if (a =3) /*Asigna a <<a>> el valor 3 y averigua si <<a>> es cierto,o sea si es distinto de o*/
else
printf(“y”);
En C la forma en que por defecto se envían parámetros a una función es por valor, esto
significa que loq ue la función recibe es una copia de lo que se envía. Por lo tanto cualquier
cambio que dicha copia sufra dentro de la función no afectará al dato original, que seguirá
teniendo el mismo valor que antes de la llamada a la función.
Ejemplo:
#include<stdio.h>
void main()
int a=5;
funcion(a);
printf(“%\n”,a); /* escribirá 5 */
a= a-3;
return;
Examen
Switch ( i )
case 1: printf(“uno”);
case 2: printf(“Dos”);
break
default: printf(“%d”,i);
Respuesta:
i = 0;
while(i<n)
if(i = = 0)
else
if (i = = 2)
printf(“Dos”);
else
printf(“%d”,i);
i++;
2.- Hacer una función que muestre la osición final de un vehículo (x,y), tomando como
parámetros, su posición inicial (,), un vector velocidad (, que indica la dirección y magnitud del
movimiento en m/s , y el tiempo trancurrido en segundos.
Fórmula a aplicar:
Respuesta
Void funcion( , int t ) /* hay que colocar el tipo delante de cada variable*/
int x,y;
x = + * t;
y = + * t;
Ejercicio 64
/*Mostrar los 20 primeros numeros cuya suma de cifras sea un numero par*/
#include<stdio.h>
int suma_cifras(int);
void main()
int a,cont;
cont=0;
a=1;
while(cont<20)
if(suma_cifras(a)%2==0)
printf("%d\t",a);
cont++;
a++;
int suma_cifras(int a)
int suma,aux,cifra;
for(suma=0,aux=a;aux!=0; )
cifra=aux%10;
suma=suma+cifra;
aux=aux/10;
return suma;
Ejercicio 65
#include<stdio.h>
int suma_cifras(int);
void main()
int a,cont,n;
printf("Introduce un un numero:");
scanf("%d",&n);
cont=0;
a=1;
while(cont<n)
if(suma_cifras(a)%3!=0)
printf("%d\t",a);
cont++;
a++;
int suma_cifras(int a)
int suma,aux,cifra;
for(suma=0,aux=a;aux!=0; )
cifra=aux%10;
suma=suma+cifra;
aux=aux/10;
return suma;
Ejercicio 66
#include<stdio.h>
int suma_cifras(int);
void main()
int a,cont,n;
printf("Introduce un un numero:");
scanf("%d",&n);
cont=0;
a=1;
while(cont<n)
if(a%10!=0)
if(suma_cifras(a)%(a%10)==0)
printf("%d\t",a);
cont++;
a++;
int suma_cifras(int a)
int suma,aux,cifra;
for(suma=0,aux=a;aux!=0; )
cifra=aux%10;
suma=suma+cifra;
aux=aux/10;
return suma;
imprima los n primeros primos (n se pide por teclado), tales que la suma de
sus cifras no sea divisible por 5. Por ejemplo para "n" igual a 10, serían
#include<stdio.h>
int suma_cifras(int);
int primo(int);
void main()
int a,cont,n;
printf("Cuantos numeros:");
scanf("%d",&n);
cont=0;
a=1;
while(cont<n)
if(primo(a)==1&&suma_cifras(a)%5!=0)
printf("%d\t",a);
cont++;
a++;
int suma_cifras(int a)
int suma,aux,cifra;
for(suma=0,aux=a;aux!=0; )
cifra=aux%10;
suma=suma+cifra;
aux=aux/10;
return suma;
int c;
for(c=2;c<a;c++)
if(a%c==0)
return 1;
Si quiero que a = b (<<a >>coja valor de <<b>>), entonces antes debemos guardar el valor de
<<a>>
a = b; b = a;
b = aux; a = aux
Ejercicio 68
/*Pedir dos numeros enteros y mostrar por pantalla todos los numeros que
#include<stdio.h>
void main()
int a,b,aux,cont;
scanf("%d",&a);
printf("Introduzca otro numero entero:");
scanf("%d",&b);
if(a>b)
aux=b;
b=a;
a=aux;
printf("%d\t",cont);
Ejercicio 69
naturales donde los dos primeros numeros son el 1 y los siguientes se hallan
/*Necesitamos un bucle que escriba 20 numeros, dos variables una que me guarde
el dato anterior y otra que me escriba el numero, luego tendré que escribir
el numero dentro del bucle, luego tengo que hacer un intercambio, que lo que era el
numero ahora sea anterior (mediante un auxiliar y num sea lo que era antes el
#include<stdio.h>
void main()
int cont,anterior,num,aux;
for(cont=0,anterior=0,num=1;cont<20;cont++)
aux=anterior;
anterior=num;
num=num+aux;
}
}
ARRAYS
Es una colección de datos del mismo tipo. Pueden ser unidimensionales y se denominan
vectores y bidimensionales que se denominan matrices.
Todos los datos que se almacenan en un vector se denominan elementos de dicho vector, y
cada uno de ellos ocupa una posición dentro del mismo, siendo la 1ª posición 0.
Cuando se trabaja con un vector, no podemos tomar el vector completo sino que hay que ir
trabajando uno a uno con sus elementos para poder acceder a un elemento del vector, se
indica:
Declaración de un vector:
Tipo nombre[numero]
Ejemplo:
No podemos coger todo el vector completo para scanf o printf, para eso debemos recorrer el
vector mediante un bucle, ejemplo
for( i = 0;i < num. elementos; i++) /* <<i >>indica las posiciones, se denomina indice*/
Ejercicio 70
En otra linea mostrar el contenido del vector al reves, a continuacion leer de teclado
un numero entero y calcular la media de los elemetos del vector menores que dicho numero*/
#include<stdio.h>
void main()
int v[8],i,cont,suma,a;
for(i=0;i<8;i++)
scanf("%d",&v[i]);
printf("\n");
for(i=0;i<8;i++)
printf("%d\t",v[i]);
printf("\n");
for(i=7;i>=0;i--)
printf("%d\t",v[i]);
printf("\n");
scanf("%d",&a);
for(i=0,cont=suma=0;i<8;i++)
if(v[i]<a)
suma=suma+v[i];
cont++;
if(cont<=0)
else
En un vector no se puede poner una variable entre corchetes al declararlo, pues no compila el
programa. Debemos colocar un numero máximo de elementos y luego una variable que nos
indique cuántos elementos va a tener el vector. Ejemplo:
int v[20], n, i;
do
{
scanf(“%d”,&n);
acción
for( )
Ejercicio 71
teclado y tiene que ser mayor que 0 y menor o igual que 20. Mostrar
#include<stdio.h>
void main()
int v[20],n,i,suma;
do{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&v[i]);
for(i=0;i<n;i++)
printf("%d\t",v[i]);
printf("\n");
for(i=suma=0;i<n;i++)
if(v[i]%2!=0)
suma=suma+v[i];
/*Pedir un entero `n' mayor que 0 y menor o igual que 30, a continuación
cargar el vector con `n' numeros reales leidos de teclado, mostrar el vector
por pantalla visualizando cada elemento con dos digitos decimales. Mostrar cual es
el elemento mayor del vector. Para ello inicializamos una variable (max)
con el primer elemento del vector, 2º recorrer el vector (con bucle for) e ir
#include<stdio.h>
void main()
float v[30],max;
int n,i;
do{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%f",&v[i]);
for(i=0;i<n;i++)
printf("%.2f\t",v[i]);
printf("\n");
max=v[0];
for(i=0;i<n;i++)
{
if(max<v[i])
max=v[i];
Ejercicio 73
Cargar 2 vectores con `n' numeros reales leídos de teclado, calcular el vector suma
#include<stdio.h>
void main()
float v1[30],v2[30],v3[30];
int n;
do{
scanf("%d",&n);
leer(v1,n);
leer (v2,n);
printf("Primer vector:\n");
ver(v1,n);
ver(v2,n);
suma(v1,v2,v3,n);
printf(“El vector suma es:\n);
ver(v3,n);
int i;
for(i=0;i<n;i++)
printf("Introduce elemento");
scanf("%f",&v[i]);
return;
int i;
for(i=0;i<n;i++)
printf("%.2f\t",v[i]);
printf("\n");
return;
int i;
for(i=0;i<n;i++)
v3[i]=v1[i]+v2[i];
return;
Cuando un array se envía como parámetro a una función dicho envio se realiza por referencia.
Esto significa que los cambios que se hagan en la función sobre el Array, se conservan una
vez que la función termina.
Ejercicio 74
/*Pedir un entero `n' mayor que 0 y menor o igual que 15. En una funcion
cargar un vector con `n' enteros leidos de teclado, en otra funcion mostrar el
vector por pantalla, a continuacion pedir un entero `x', y llamar a una funcion
que cuente cuantas veces aparece el numero `x' en el vector y escribir el resultado
en "main"*/
#include<stdio.h>
int contar(int[],int,int);
void main()
int v[15],n,x;
do{
scanf("%d",&n);
leer(v,n);
ver(v,n);
scanf("%d",&x);
printf("\n");
int i;
for(i=0;i<n;i++)
printf("\n");
return;
int i;
for(i=0;i<n;i++)
printf("%d\t",v[i]);
printf("\n");
return;
int contar(int v[], int n,int x) /*la int es porque retorna un dato*/
int i,cont;
for(i=cont=0;i<n;i++)
if (x==v[i])
cont++;
return cont;
Definición de constantes
Ejemplo:
#define n 8
void main ( )
int v[n] = {--,--,--,--,--} /*Si se ponen menos números en la declaración que los que se indican
en la cte, el programa los rellena con ceros. Si se ponen mas NO COMPILA*/
for(i=0;i<n;i+ +)
________ ;
________ ;
Ejercicio 75
/*Se tiene un vector con numeros enteros, contar cuantos elementos del vector son
#include<stdio.h>
float media(int[]);
int contar(int[],float);
void main()
int v[n]={7,3,-5,12,0,14,-4,-10};
float m;
m=media(v);
int i,suma;
suma=0;
for(i=0;i<n;i++)
suma=suma+v[i];
return (float)suma/n;
int i,cont;
cont=0;
for(i=0;i<n;i++)
if(v[i]>m)
cont++;
return cont;
Ejercicio 76
/*Se tiene un vector de numeros enteros, llamar a una funcion que muestre por pantalla los
elementos mayor y menor de dicho vector, el vector puede considerarse el del ejemplo pero el
programa ha de ser general para cualquier vector. Pedir un entero y llamar a una funcion que
modifique el vector multiplicando cada elemento por dicho entero, a continuacion llamar a otra
funcion que muestre el vector por pantalla*/
#include<stdio.h>
#define n 6
void funcion(int[]);
void multiplica(int[],int);
void escribir(int[]);
void main()
int a,v[n]={2,5,-8,14,0,3};
funcion(v);
scanf("%d",&a);
multiplica(v,a);
escribir(v);
int i,mayor,menor;
mayor=v[0];
menor=v[0];
for(i=0;i<n;i++)
if(v[i]>mayor)
mayor=v[i];
if(v[i]<menor)
menor=v[i];
int i;
for(i=0;i<n;i++)
v[i]=v[i]*a;
return;
int i;
for(i=0;i<n;i++)
printf("%d\t",v[i]);
printf("\n");
return;
/*Pedir al usuario que introduzca el numero de elementos de un vector y llamar a una funcion
para cargar un vector de reales leido de teclado. A continuacion pedir el numero de elementos
que tendra un segundo vector con numeros reales leidos de teclado. Si ambos vectores tienen
el mismo numero de elementos llamar a una funcion que calcule su producto escalar y escribir
el resultado en "main", en cualquier caso mostrar los dos vectores.El PRODUCTO ESCALAR
es un numero, se van multiplicando los vectores elemento a elemento. Si no tienen el mismo
numero de elementos, llamar a una función que cuente los elementos negativos del primer
vector y escribir el resultado en main() y llamar a otra función que encuentre el mayor y menor
elemento del segundo vector*/
#include<stdio.h>
int cuentaneg(float[],int);
void mayormenor(float[],int);
void main()
float v1[30],v2[30];
int n,m;
do{
scanf("%d",&n);
}while(!(n>0));
cargar(v1,n);
do{
scanf("%d",&m);
}while(!(m>0));
cargar(v2,m);
printf("v1= ");
ver(v1,n);
printf("v2= ");
ver(v2,m);
if(n==m)
else
{
printf("\nLos numeros negativos del primer vector son %d\n",cuentaneg(v1,n));
mayormenor(v2,m);
int i;
for(i=0;i<num;i++)
scanf("%f",&v[i]);
return;
int i;
for(i=0;i<num;i++)
printf("%.2f\t",v[i]);
printf("\n");
return;
int i;
float suma;
suma=(float)0;
for(i=0;i<n;i++)
suma=suma+v1[i]*v2[i];
}
return suma;
int i,cont1;
for(i=cont1=0;i<n;i++)
if(v1[i]<0)
cont1++;
return cont1;
int i;
float mayor,menor;
mayor=v2[0];
menor=v2[0];
for(i=0;i<m;i++)
if(v2[i]>mayor)
mayor=v2[i];
if(v2[i]<menor)
menor=v2[i];
La posición de un elemento dentro de una matriz, viene determinada por 2 números: su fila y
su columna.
tipo nombre [ nº] [ nº]; /*Siempre va primero el número de filas y luego el de columnas*/
Un elemento de la matriz se especifica así:
Fila 0 ............ 9 0 3
Fila 1 ............1 7 -2
Fila 2 ............8 5 4
Fila 3 ............3 7 1
ejemplo:
etc.
// Acaba la fila.
Comprobación, ejemplo:
20
6
Ejercicio 78
/*Cargar una matriz de 3 filas y 3 columnas con numeros enteros leidos de teclado, a
continuacion mostrar dicha matriz por pantalla*/
#include<stdio.h>
void main()
int i,k;
for(i=0;i<3;i++)
for(k=0;k<3;k++)
scanf("%d",&matriz[i][k]);
printf("\nLa matriz introducida fue: \n"); /*con los bucles vemos la matriz*/
for(i=0;i<3;i++)
for(k=0;k<3;k++)
printf(" %d\t",matriz[i][k]);
printf("\n");
printf("\n");
Ejercicio 79
/*Cargar una matriz de 3x3 con numeros enteros pedidos de teclado. A continuacion mostrar
la matriz por pantalla. Pedir un numero entero y contar cuantas veces aparece dicho numero
en la matriz, ademas de indicar en que filas y columnas aparece*/
#include<stdio.h>
void main()
int m[3][3],i,j,a,cont;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("Introduce un numero:");
scanf("%d",&m[i][j]);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("%d\t",m[i][j]);
printf("\n");
printf("\n");
scanf("%d",&a);
cont=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(a==m[i][j])
cont++;
Ejercicio 80
/*Pedir al usuario que introduzca el numero de filas y columnas de un matriz, ambos numeros
deberan ser mayores que 0 y menores o iguales que 10. A continuación cargar una matriz de
numeros reales leidos de teclado y despues mostrar dicha matriz, visualizando cada elemento
con 2 digitos decimales. Calcular la media de los elementos de la matriz negativos y contar los
que no sean negativos*/
#include<stdio.h>
void main()
int i,j,f,c,noneg,neg;
float m[10][10],suma;
do{
scanf("%d",&f);
do{
scanf("%d",&c);
for(i=0;i<f;i++)
for(j=0;j<c;j++)
printf("\nIntroduce un elemento:");
scanf("%f",&m[i][j]);
printf("\n");
for(i=0;i<f;i++)
for(j=0;j<c;j++)
printf("%.2f\t",m[i][j]);
printf("\n");
}
suma=(float)0;
neg=noneg=0;
for(i=0;i<f;i++)
for(j=0;j<c;j++)
if(m[i][j]<0)
suma=suma+m[i][j];
neg++;
else
noneg++;
if(neg!=0)
else
Ejercicio 81
/* Pedir el numero de filas y columnas de una matriz (mayores que cero y menores o iguales
que 10), llamar a una funcion para cargar una matriz de numeros enteros leidos por teclado,
llamar a otra funcion que muestre la matriz por pantalla, a continuacion llamar a otra funcion
que encuentre el elemento menor de la matriz y escribirlo en main, llamar a una funcion que
muestre por pantalla la suma
de cada fila,llamar a una funcion que muestre,cuantos elementos impares hay en cada
columna */
#include<stdio.h>
int menor(int[][10],int,int);
void sumafila(int [][10],int,int);
void main()
int m[10][10],f,c;
do {
scanf("%d",&f);
do{
scanf("%d",&c);
printf("\n");
leer(m,f,c);
ver(m,f,c);
sumafila(m,f,c);
impares(m,f,c);
int i,j;
for(i=0;i<f;i++)
for(j=0;j<c;j++)
scanf("%d",&m[i][j]);
}
printf("\n");
return;
int i,j;
for(i=0;i<f;i++)
for(j=0;j<c;j++)
printf("%d\t",m[i][j]);
printf("\n");
return;
menor=m[0][0];
for(i=0;i<f;i++)
for(j=0;j<c;j++)
if(m[i][j]<menor)
menor=m[i][j];
return menor;
int suma,i,j;
for (i=0;i<f;i++)
for(suma=0,j=0;j<c;j++)
suma=suma+m[i][j];
return;
void impares(int m[][10],int f,int c) //para recorrer una matriz por columnas solo se cambia el
orden
int i,j,ci;
printf("\n");
for(j=0;j<c;j++)
for(ci=i=0;i<f;i++)
if(m[i][j]%2!=0)
ci++;
Ejercicio 82
/*Se tiene una matriz de numeros enteros, llamar a una funcion que escriba la media de cada
fila, y llamar a otra funcion que muestre el elemento mayor de cada columna. La matriz puede
suponerse una concreta pero el programa ha de ser general*/
#include<stdio.h>
#define f 4
#define c 4
void media(int[f][c]);
void mayor(int[f][c]);
void main()
int m[f][c]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
media(m);
mayor(m);
}
int suma,i,j;
for(i=0;i<f;i++)
suma=0;
for(j=0;j<c;j++)
suma=suma+m[i][j];
return;
int i,j,mayor;
for(j=0;j<c;j++)
mayor=m[0][j];
for(i=0; i<f;i++)
if(m[i][j]>mayor)
mayor=m[i][j];
return;
Ejercicio 83
/*Escribir una funcion en C que reciba una matriz de numeros reales de, como maximo,10x12,
y que devuelva un vector en el que cada elemento contenga el producto de cada uno de los
elementos de la columna correspondiente de la matriz*/
{
int i,j;
float prod;
for(j=0;j<c;j++)
for(i=0,prod=1;i<f;i++)
prod=prod*m[i][j];
v[j]=prod;
Ejercicio 84
/*Escribir una funcion que calcule el factorial de un numero. Utilizando esta funcion escribir
otra que calcule el numero combinatorio m sobre n ( m!/n!(m-n)! )*/
int comb;
comb=(factorial(m))/(factorial(n)*factorial(m-n));
return comb;
int factorial(int a)
int fact,cont;
fact=1;
for(cont=1;cont<=a;cont++)
fact=fact*cont;
return fact;
Ejercicio 85
/*Escribir un programa en C que posea una funcion que dada una matriz de, como
columna correspondiente. El programa principal debera pedir la matriz por teclado e imprimir
el vector resultado por pantalla*/
#include<stdio.h>
void leer(int[][10],int,int);
void mostrar(int[][10],int,int);
void media(int[][10],float[],int,int);
void main()
int f,c,m[10][10],k;
float v[10];
do{
scanf("%d",&f);
do{
scanf("%d",&c);
leer(m,f,c);
mostrar(m,f,c);
media(m,v,f,c);
for(k=0;k<f;k++)
printf("%.2f\t",v[k]);
int i,j;
for(i=0;i<f;i++)
for(j=0;j<c;j++)
printf("Introduce un elemento:\n");
scanf("%d",&m[i][j]);
printf("\n");
return;
int i,j;
for(i=0;i<f;i++)
for(j=0;j<c;j++)
printf("%d\t",m[i][j]);
printf("\n");
return;
int i,j,suma;
for(j=0;j<c;j++)
for(i=0,suma=0;i<f;i++)
suma=suma+m[i][j];
v[j]=(float)suma/f;
return;
Ejercicio 86
/*Escribir una funcion que reciba 2 matrices de numeros reales de igual numero de filas y de
columnas y que devuelva una tercera en la que cada elemento [i][j] contenga la media de los
elementos i, j de las otras 2 matrices. Obligatoriamente la funcion ha de recibir como
parametros las 3 matrices, el numero de filas y el numero de columnas*/
int i,j;
for(i=0;i<f;i++)
for(j=0;j<c;j++)
w[i][j]=(m[i][j]+n[i][j]) / 2;
Ejercicio 87
/*Escribir una funcion que reciba 2 matrices de numeros reales de igual numero de filas y de
columnas y que devuelva una tercera en la que cada elemento [i][j] contenga el elemento
menor de las otras 2 matrices. Obligatoriamente la funcion ha de recibir como parametros las
3 matrices, el numero de filas y el numero de columnas*/
int i,j,menor;
for(i=0;i<f;i++)
for(j=0;j<c;j++)
if(m[i][j]<n[i][j])
w[i][j]=m[i][j];
else
w[i][j]=n[i][j];
return;
Ejercicio 88
#include<stdio.h>
void main()
{
int i,j,m[5][3];
for(i=0;i<5;i++)
for(j=0;j<3;j++)
printf("Introduce un valor:\n");
scanf("%d",&m[i][j]);
printf("\n");
for(i=4;i>=0;i--)
for(j=2;j>=0;j--)
printf("%d\t",m[i][j]);
printf("\n");
printf("\n");
Ejercicio 89
/* a) Escribir una funcion que, a partir de un numero entero recibido como parametro,
calcule y devuelva la suma de la mayor de sus cifras con la menor de sus cifras.
pida un digito 'd' por teclado (entre 1 y 9) y calcule y muestre los n primeros
numeros (n se pide por teclado) que verifican que la suma de la mayor de sus cifras
con la menor de sus cifras es divisible exactamente por el digito 'd' leido*/
#include<stdio.h>
int suma_mayor_menor(int);
void main()
{
int d,n,cont,a;
do{
printf("Introduce un digito:");
scanf("%d",&d);
do{
scanf("%d",&n);
}while(n<=0);
cont=0;
a=1;
while(cont<n)
if(suma_mayor_menor(a)%d==0)
printf("%d\t",a);
cont++;
a++;
int suma_mayor_menor(int a)
int mayor,menor,aux,cifra;
mayor=menor=a%10;
for(aux=a;aux!=0;aux=aux/10)
cifra=aux%10;
if(cifra<menor)
menor=cifra;
if(cifra>mayor)
mayor=cifra;
return mayor+menor;
Ejercicio 90
/* a) Escribir una funcion que dada una matriz de reales de, como maximo 10 x 10, calcule y
devuelva un vector con la media de cada columna de la matriz.
b) Aprovechando la funcion del apartado anterior escribir un programa que para una matriz
dada por teclado calcule y muestre por pantalla cual es la columna con menor media, y el
valor de esta media*/
#include<stdio.h>
void leer(float[][10],int,int);
void ver(float[][10],int,int);
void main()
int a,b,i,j;
float m[10][10],v[10],aux;
do{
scanf("%d",&a);
do{
scanf("%d",&b);
leer(m,a,b);
ver(m,a,b);
media(m,v,a,b);
for(i=0;i<a;i++)
printf("%.2f\t",v[i]);
printf("\n");
aux=v[0];
for(i=j=0;i<a;i++)
if(v[i]<aux)
aux=v[i];
j=i;
int i,k;
for(i=0;i<a;i++)
for(k=0;k<b;k++)
scanf("%f",&m[i][k]);
return;
int i,k;
for(i=0;i<a;i++)
for(k=0;k<b;k++)
printf(" %.2f\t",m[i][k]);
printf("\n");
printf("\n");
return;
int i,k;
float suma;
for(k=0;k<b;k++)
suma=(float)0;
for(i=0;i<a;i++)
suma=suma+m[i][k];
v[k]=suma/a;
return;
En una variable tipo char guardamos un caracter ( letras, ( ,+, [,*, etc).
char x;
Lectura
1ª.- scanf(“%c”,&x);
2ª.- x = getchar( );
Escritura
1ª.- printf(“%c”,x);
El valor de una variable de tipo <<char>> debe ir entre apóstrofes ( comillas simples).
Ejemplo:
Ejercicio 91
/*Pedir al usuario que pida un caracter, a continuacion pedir un numero 'n' mayor que 0 y
menor o igual que 20. Mostrar por pantalla 'n' lineas conteniendo cada una de ellas 'n' veces el
caracter leido*/
#include<stdio.h>
void main()
char c;
int n,i,j;
printf("Introduce un caracter:");
scanf("%c",&c);
do{
printf("\nIntroduce un numero:");
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
printf("%c\t",c);
printf("\n\n\n");
Ejercicio 92
#include<stdio.h>
void main()
{
int a,cont;
char c;
do{
scanf("%d",&a);
for(cont=1;cont<=10;cont++)
printf("\n%d x %d = %d",a,cont,a*cont);
getchar(); //Ponerlo antes de leer un caracter cuando previamente se haya pedido otro dato
scanf("%c",&c);
}while(c=='s' || c=='S');
Cadena de caracteres
Lectura
1ª- gets(cad);
2ª- scanf(“%s”,cad);
La instrucción que sirve para leer una palabra o una frase es: gets( cad ); entre paréntesis la
cadena que quiero leer.
Cuando el ordenador recibe la orden << gets>> se encarga de leer todos los caracteres que el
usuario teclea, hasta detectar el salto de línea y los guarda en el vector, ocupando cada
carácter una osición. Además después del último carácter guarda un caracter especial <<\0>>
que es el caracter de fin de cadena.
Ejemplo:
Si tenemos una cadena de caracteres <<c>> de máximo 80 posiciones c[80]; y la leemos mediante
la instrucción <<gets>>, tendríamos un vector (array) de 80 posiciones:
H O L A \0
0 1 2 3 4 . . . . . . . . . . . . 77 78 79
En la pantalla del Pc escribimos la palabra HOLA y <<return>>, el ordenador coge los
caracteres y los guarda.
Escritura
1ª- puts(cad);
2ª- printf(“%s”,cad);
for( i=0; cad[i] ! = `\0'; i+ +) // hasta que cad[i] sea distinto de << \0 >>
Ejercicio 93
/*Leer una cadena de caracteres y decir el porcentaje de blancos que contiene sobre el total
de caracteres.
#include<stdio.h>
void main()
char cad[50];
int i,blanco,cont;
gets(cad);
blanco=cont=0;
for(i=0;cad[i]!='\0';i++)
cont++;
if(cad[i]==' ')
blanco++;
}
Otras funciones de caracteres
char cad[30];
gets (cad);
Recorrido:
for(i=o;cad[i]!='\0';i++) for(i=0;i<strlen(cad);i++)
STRCPY- Función que recibe 2 cadenas de caracteres y hace que la primera sea una copia
de la segunda. Esta función es útil ya que no se pueden realizar asignaciones entre cadenas:
char cad1[80],cad2[80]; strcpy(cad2,cad1)
cad2=cad1;
strcat(cad1,cad2)
Ejercicio 94
/*Escribir un programa que pida un numero entero por teclado y que imprima por
pantalla la suma de las cifras que ocupan las posiciones pares, despues la suma
de las cifras que ocupan las posiciones impares y a continuacion mostrar el numero
#include<stdio.h>
void main()
int a,cont,cifra,aux,sumpar,sumimpar;
printf("Introduce un numero:");
scanf("%d",&a);
sumpar=suminpmar=0;
cont=1;
aux=a;
while(aux!=0)
cifra=aux%10;
if(cont%2!=0)
sumimpar=sumimpar+cifra;
else
sumpar=sumpar+cifra;
cont++;
aux=aux/10;
printf("%d,%d,%d,sumimpar,sumpar,a);
Ejercicio 95
/*Escribir un programa que calcule los 'n' primeros numeros (n se pide por teclado)
tales que la suma de su primera cifra con su ultima cifra sea impar*/
#include<stdio.h>
int sumacifras(int);
void main()
int n,cont,a;
printf("Introduce un numero:");
scanf("%d",&n);
a=1;
cont=0;
while(cont<n)
if(sumacifras(a)%2!=0)
printf("%d\t",a);
cont++;
a++;
}
int sumacifras(int num)
int aux,cifra;
for(aux=num;aux!=0;aux=aux/10)
cifra=aux%10;
return cifra+num%10;
Test
8
8.16
0
Ninguna de las anteriores
¿ Y si `m' fuese de tipo flotante?
Valdría 0 también ya que 4/5 es una división de numeros enteros, por tanto su cociente
también será un numero entero. m = 10.2 * 0 = 0
/*Cargar una matriz de numeros enteros leidos de teclado, previamente se pedira el numero
de filas y de columnas que, como máximo sera 10. Llamar a una funcion que devuelva la
matriz traspuesta y mostrarla.
Una matriz esta traspuesta cuando le cambiamos las filas por columnas*/
#include<stdio.h>
void cargar(int[10][10],int,int);
void traspuesta(int[10][10],int,int,int[10][10]);
void mostrar(int[10][10],int,int);
void main()
{
int f,c,m[10][10],t[10][10];
do{
scanf(“%d”,&f);
do{
scanf(“%d”,&c);
cargar(m,f,c);
traspuesta(m,f,c,t);
mostrar(t,f,c);
int i,j;
for(i=0;i<f;i++)
for(j=0;j<c;j++)
printf(“Introduce un elemento:”);
scanf(“%d”,&m[i][j]);
int i,j;
for(i=0;i<f;i++)
for(j=0;j<c;j++)
t[i][j]=m[j][i];
}
int i,j;
for(i=0;i<f;i++)
for(j=0;j<c;j++)
printf(“%d”,m[i][j]);
Libreria math.h
#include<stdio.h>
#include<math.h>
void main()
Ejercicio 97
/*Escribir una funcion en C que reciba una matriz de numeros reales de, como máximo 10x12,
e imprima cual o cuales son los elementos [i][j] que se aproximan más a la media de todos los
elementos de la matriz*/
float x,difmenor;
int i,j;
x=media(m,f,c);
difmenor=fabs(m[0][0]-x);
for(i=0;i<f;i++)
for(j=0;j<c;j++)
if(fabs(m[i][j]-x)<difmenor)
difmenor=fabs(m[i][j]-x);
for(i=0;i<f;i++)
for(j=0;j<c;j++)
if(fabs(m[i][j]-x)==difmenor)
float suma;
int i,j;
suma=(float)0;
for(i=0;i<f;i++)
for(j=0;j<c;j++)
suma=suma+ m[i][j];
Ejercicio 98
/*Hacer un programa que pida los coeficientes de una ecuación de segundo grado y a
continuación muestre sus raices*/
#include<stdio.h>
#include<math.h>
void main()
float a,b,c;
scanf(“%f %f %f”,&a,&b,&c);
if(a==0)
if(b==0)
else
printf(“Raiz= %f”,-c/b);
else
dis=pow(b,2)-4*a*c;
if(dis<0)
else
printf(“Raiz 1= %f”,(-b+sqrt(dis))/(2*a));
printf(“Raiz 2= %f”,(-b-sqrt(dis))/(2*a));
Ejercicio 99
/*Hacer una función que reciba 2 matrices y devuelva la matriz producto de ambas.
Para multiplicar 2 matrices tenemos que asegurarnos de que la primera tiene el mismo
numero de columnas que filas tienes la segunda (c1=f2)
m1(f1,c1)*m2(f2,c2)=m3(f1,c2) */
int i,j,k,suma;
for(i=0;i<f;i++)
for(suma=k=0;k<c2;k++)
for(j=0;j<c1;j++)
suma=suma+( m1[i][j]*m2[j][k] );
m3[i][k]=suma;
Ejercicio 100
/*Pedir un numero positivo de 3 digitos y reorganizar sus digitos para que quede ordenado de
menor a mayor*/
#include<stdio.h>
void main()
int a,u,d,c,aux;
do{
printf("Introduce un numero:");
scanf("%d",&a);
u=a%10;
d=(a%100)/10;
c=a/100;
if(c>d)
aux=c;
c=d;
d=aux;
if(d>u)
aux=d;
d=u;
u=aux;
if(c>d)
{
aux=c;
c=d;
d=aux;
a=c*100+d*10+u;