Beruflich Dokumente
Kultur Dokumente
Manual de Lenguaje C
Cubre la Materia ‘Programación 1’
Visite: http://www.scribd.com/enriqueruizdiaz
Asimismo: http://sites.google.com/site/enriqueruizdiaz/
1
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
LENGUAJE DE PROGRAMACION C
______________________________________________________________________________________
# include <stdio.h>
# define PI 3.141596
void main()
{
int r = 5;
float a;
a = Area(r);
printf ("Area del circulo %f\n",a);
getch();
}
______________________________________________________________________________________
# include Declara las cabeceras del programa
# include <math.h> También puede haber una línea con esta instrucción, la cual
permite usar en el programa funciones matemáticas tales como
exponenciación, seno, coseno, tangente, etc.
# include <stdio.h> Las < > quiere decir que los archivos del subdirectorio include
están en esta ruta C:\TC\INCLUDE
# define PI 3.141596 Esta instrucción que se encuentra en la parte inicial del programa
permite crear una constante valida para todo el programa. En
este caso la constante se llama “PI” y toma un valor de 3.141596.
(vea que no lleva el signo de = )
float Area (int radio); Esta línea se llama “DECLARACIÓN DE PROTOTIPOS” Declara
al programa que función buscará, como se llama dicha función,
que tipo de dato va a regresar, cuantos parámetros tiene y cuales
son.
2
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
DECLARACIÓN DE PROTOTIPOS
void main( ) Todos los programas deben tener la función main() que es el
{ cuerpo principal del programa. Aunque en nuestro programa de
... ejemplo la función main() se encuentra después de la función
... Area, en realidad el programa siempre se dirige primero al
} cuerpo del main() y luego se ejecutara la función secundaria, en
este caso “Area” cuando esta sea llamada.
a = Area(r); Esta instrucción dentro del main() es la que
llama la ejecución de la función “Area” y de paso le transfiere el
valor que tiene “ r ” que es de 5, y este valor será recibido por el
parámetro (variable) “radio” de la función
DEFINICIONES
LIBRERIA: Una Libreria contiene funciones especificas. En el programa se usa una libreria
con la linea: # include
3
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
TIPOS DE DATOS EN C
char Caracter
int valor númerico entero
float valor número flotante (real)
double flotante de doble presición
void Sin valor
Nota: Como en el caso de unsigned char ya no usa el primer bit reservado al signo por lo que hay
mas capacidad de almacenamiento. Observe como en otros casos, también se elimina el signo (se
deja solo como positivo) y se aumenta la capacidad.
Nota: en el caso de la variable caracter char sexo, ya sabemos que ocupa 8 bits = 1 byte, pero a la
variable char nombre se le asigna un espacio de 31, es decir, 31 bytes, de ahi la suma de 32 bytes.
4
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
NOMBRE DE IDENTIFICADORES
Los nombres usados para referenciar las variables, las funciones, las etiquetas y otros
objetos definidos por el usuario se conocen como identificadores. Las reglas para escribir los
nombres de los identificadores son:
1. Se pueden usar las letras del alfabeto tanto mayúsculas y minúsculas; así como también los
dígitos del 0 al 9 y el caracter de subrayado o “underline”
2. Los nombres de los identificadores deben de comenzar con una letra seguida de 1 o mas
letras ó los dígitos del 0 al 9
3. Cuando un nombre de identificador contenga mas de una palabra, entonces deberán ser
unidas por el caracter de subrayado.
VARIABLE : Una variable es una posición de memoria con nombre que se usa para mantener
que puede ser modificado por el programa. La característica de la variable es que tiene una
dirección en memoria y un contenido.
Su forma general es:
tipo lista_ de_variables;
donde:
tipo: Es un tipo de dato valido de C con cualquier modificador. Ejemplo de tipo: char (caracter)
int (número entero)
5
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
VARIABLES LOCALES: Son definidas por una función y solo dentro de ella es reconocida.
Por ejemplo, en el programa siguiente:
______________________________________________________________________________________
void f (void) 1
{
int t ; 2
scanf (“%d”, &t);
if (t = = 1)
{
char s[80]; 3
printf (“Introduzca el nombre:”);
gets(s);
}
}
______________________________________________________________________________________
1 Tenemos una función de nombre ‘f ’ que no devuelve ningún valor (primer void), ni recibe
ningún valor (segundo void)
2 ´t ´ es una Variable local de tipo entero. Es variable local porque solo existe mientras se ejecuta
la función, al terminar de ejecutarse, la variable se destruye.
3 ´s ´ es una variable de tipo caracter con 80 posiciones (80 bytes), es variable local porque existe
dentro de la función ´f ´ pero a la vez solo es reconocida si se entra al ciclo if ... si no se entrara al
ciclo if entonces no se crea la variable ´s ´
de otra parte del programa. los dos parametros son de tipo char (caracter).
if (valor = = 1)
printf (“Esta en la cadena”);
else
printf (“No esta en la cadena”);
}
______________________________________________________________________________________
VARIABLES GLOBALES: Estas variables estan fuera de main() y fuera de cualquier otra
función y son reconocida en todo el programa.
______________________________________________________________________________________
# include “stdio.h”
int cuenta; 4
void func1 (void);
void func2 (void);
7
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
4 int cuenta; en esta línea vemos una variable de tipo entero (int) que se llama “cuenta” y como
esta fuera de main ( ) y fuera de cualquier otra función es variable global, es decir, que será
reconocida en cualquier parte del programa.
5Recuerde que no importa en que parte del programa se encuentre la función main () (principal) el
programa siempre ejecuta esta función antes que otras funciones (en este caso ejecuta primero
main() antes que func1 y func2). La variable global cuenta toma un valor de 100.
7Dentro de la función func1( ) se crea la variable local “temp” y vea que en la siguiente línea la
variable local “temp” toma el valor de la variable global “cuenta”. Por lo que “temp” vale 100
9 Se crea una variable local de nombre “cuenta” es variable local porque esta creada dentro de la
función func2() y solo tiene validez para ella.
Recuerde que tenemos también una variable global de nombre “cuenta” y que vale 100.
pero dentro la función func2 se creo una variable local del mismo nombre, entonces dentro de
esta función la variable que existe es la variable local.
10 Este es un ciclo repetitivo for en la cual la variable local “cuenta” toma un valor de 1 hasta 10.
1 1Al terminar de ejecutarse la función func2 regresamos a la función func1, y se imprime el valor
de la variable global “cuenta” que vale 100.
Cuando salimos de la función func2 todas sus variables locales se destruyeron.
OPERADORES ARITMETICOS
SUMA +
RESTA -
MULTIPLICACION *
RESIDUO ENTERO %
RAIZ CUADRADA sqrt ( )
POTENCIACION pow (base, exponente)
8
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
1. ()
2. ^
3. *, /, mod, div, NOT
4. +, -, AND
5. >, <, <=, >=, < >, =, OR
¿Cuando se usan los parentesis ? Cuando se quiere dar prioridad a cierta operación sobre
otras.
Por ejemplo:
m = y2 - y1 / x2 - x1 No es correcto !!!
1. X2 =
pow (X,2)
2. h = a2 + b 2 =
h = pow (a,2) + pow (b,2)
3. (a (b + c))2 =
pow (a*(b + c), 2); porque : (a*(a + c)) es la base y 2 es el exponente
1. x= a
x = sqrt (a)
2. a= a+b
a = sqrt ( a + b)
A = sqrt ( P * (P - A) * (P - B) * (P - C) )
1. x = - b + - b2 - 4ac
2a
2. despejar m de : pv = m( t + 460)
pv =m
(t + 460)
m= pv =
(t + 460)
m = (p*v) / (t + 460)
4. h2 = a2 + b 2
h= a2 + b 2
5. d= x2 + y2
10
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
OPERADORES LOGICOS
1. NOT !
2. AND &&
3. OR ||
NOT
A !A Comentario
AND
A B A && B Comentario
V V V
V F F Para el AND con uno de sus dos
F V F elementos que sea falso, el resultado
F F F es falso.
OR
A B A || B Comentario
V V V
V F V Para el OR con uno de sus dos
F V V elementos que sea verdadero, el
F F F resultado es verdadero.
11
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Si a = b entonces
...
...
fin_si
if (a = = b)
...
Ya que en if (a = b), para C es un error ya que a toma el valor que tenga b, no funciona.
Para C el signo de = es de Asignación, es decir, la variable toma el valor de lo que tenga enfrente,
por ejemplo:
x = a; ‘x ’ toma el valor de lo que valga ‘a’
a = b + c; ‘a ‘ toma el valor del resultado de la suma de b + c
A la utilización del signo = se le llama Asignación.
Pero ...
Si queremos Comparar dos valores, bien en un ciclo if, while, u otro entonces usaremos el
signo de Comparación o igual que ... = =
El signo diferente !=
En programación utilizaremos ..
if ( a != b)
...
...
12
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
OPERADORES ESPECIALES:
1. De incremento ++
2. Decremento --
Su uso:
1. Modo prefijo (pre - antes) ++a
2. Modo posfijo (pos - después)a + +
Por ejemplo:
______________________________________________________________________________________
a = 5;
++a; 1
a ++; 3
en 1 ( a = 7)
5 Se imprime el valor actual de a que es 7
FUNCIONES BASICAS
Especificadores de Formato
%c Caracter
%d Entero decimal
13
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
%i Entero decimal
%e flotante
%f flotante
%g flotante
%o octal
%s Cadena de caracteres
%x Hexadecimal
scanf (“ % o “, &numero); Nos pide que leamos un número, pero en octal, por ejemplo
si capturo 10 en realidad es un 108 (diez en octal).
scanf (“ % x “, &numero); Nos pide que leamos un número, pero en hexadecimal, por
ejemplo si capturo 10 en realidad es un 1016 (diez en
hexadecimal).
scanf (“ % s “, nom); Nos pide que tecleemos una cadena de caracteres. Por
ejemplo “Felipe de Jesus” . El problema con esta instrucción
es que solo guardaría la palabra “Felipe” se requiere la
instrucción siguiente para guardar la siguiente palabra “de”.
(Esta instrucción no es apropiada para guardar cadena de
caracteres, se debe usar la función gets ( ) como veremos mas
adelante).
14
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
FUNCION gets ( )
Permite leer cadena de caracteres completas incluyendo espacios en blanco.
gets (nom_var_cadena);
Ejemplo:
char nom[31]
....
....
gets (nom);
FUNCIÓN printf ( )
Visualiza mensajes, así como valores de variables.
printf ( cadena_de_control );
La cadena de control esta formada por dos tipos de elementos. El primer tipo esta
compuesto por los caracteres que se mostrarán en la pantalla.
El segundo tipo contiene especificadores de formato que define la forma en que muestran
los argumentos posteriores. Un especificador de formato empieza con un signo de porcentaje y
sigue con el codigo de formato debe haber exactamente el mismo número de argumentos que de
especificadores de formato y ambos deben coincidir en su orden de aparición de izquierda a
derecha.
Especificadores de Formato
%c Caracter
%d Enteros decimales con signo
%i Enteros decimales con signo
%e Notación cientifica ( e minuscula)
%E Notación cientifica ( E mayuscula)
%f flotante (despues del punto decimal tiene 6 digitos de precisión)
%g Usar % e ó % f, el más corto (selecciona automaticamente la expresión mas corta)
%G Usar % E ó % F, el más corto
%o octal sin signo
%x Hexadecimal sin signo (letras minusculas)
%X Hexadecimal sin signo (letras mayusculas)
%s Cadena de caracteres
%U Enteros decimales sin signo
%p Muestra un puntero
15
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Por ejemplo:
Nota: Si no hubiera avance de línea entonces imprimiria 25253119251F así pues, se requiere
especificar un “avance de Línea” con \n Por ejemplo:
printf (“ % d \n ”, numero);
Con la instrucción printf ( ) también puede imprimirse un texto y a la vez el valor de una variable,
vea como:
Vea como el texto: “ La variable num vale: ” esta dentro de las comillas, y también el
especificador de formato % d, y fuera de las comillas va una coma y la variable que se va a
imprimir, en este caso num. Si voy a imprimir una variable entonces necesito un especificador de
formato.
otro ejemplo:
int a = 2, b = 8, c;
c = a + b;
Se imprime en pantalla: 2 + 8 = 10
Observaciones: considere los signos +, = como simple texto que se imprime, vea como
tenemos tres especificadores de formato que afectan a tres variables respectivamente.
16
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
printf (“ % 5.2 f “, numero); Se imprimaran en total 5 números dos de los cuales serán
para caracteres, así: XXX.XX
Elaborar un programa que dado un número de cuatro cifras, lo presente invertido en su orden.
Por ejemplo se le lee el numero 4895 debe imprimirse el numero 5984
______________________________________________________________________________________
# include <stdio.h>
# include <math.h>
void main()
{
int A, B, C, X1, X2, X3, Num2, Num;
A=Num % 1000;
X1=Num / 1000;
B=A % 100;
X2=A / 100;
C=B % 10;
X3=B / 10;
getch();
}
______________________________________________________________________________________
Tres personas desean establecer una empresa para la cual cada una de ellas hace una aportación
económica para integrar el capital social de dicha empresa.
Hacer un programa determina el porcentaje de participación que tendrán en la empresa.
______________________________________________________________________________________
# include <stdio.h>
void main()
{
float cap1, cap2, cap3, capsocial, part1, part2, part3;
17
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
getch();
}
______________________________________________________________________________________
Hacer un programa que determine la distancia que hay entre dos puntos de una línea recta en el
plano cartesiano. Así como también la pendiente de esa línea recta. Utilizando las siguientes
fórmulas:
m = y2 - y1
x2 - x1
______________________________________________________________________________________
# include <stdio.h>
# include <math.h>
void main()
{
float x2, x1, y2, y1, d, m;
18
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
SENTENCIAS SELECTIVAS
FUNCION if ( )
Sintaxis:
a) if (expresión)
sentencia;
b) if (expresión)
{
...
sentencias;
...
}
if ( a )
if ( a + 5)
19
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
if ( digito(num) )
1. if ( a = 0 )
2. if ( a = = 0 )
El primer ejemplo es incorrecto, ya que ‘a’ toma el valor de cero, no funciona el ciclo ya
que si ‘a’ siempre vale cero entonces la expresión siempre será falsa.
El segundo ejemplo esta bien expresado, si a es igual con 0 entonces el ciclo toma una
valor de 1, o sea es verdadero y si se entra al ciclo.
Si ‘a’ no es igual a 0 entonces el ciclo toma un valor de 0, o sea es falso y no se entra al
ciclo.
a) if (expresión)
sentencia;
b) if (expresión)
{
...
sentencias;
...
}
Observe que cuando hay una sola sentencia (una sola línea de instrucción) entonces no
habrá llaves al principio y final de dicha sentencia. Y al no haber llaves el lenguaje C entiende
que solo hay una sentencia que pertenece al if.
20
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Si hay mas de una sentencia (dos o más) entonces debe haber llave que abre al principio y
una llave que cierra al final de la sentencias.
a) if (expresión)
sentencia;
else
sentencia;
b) if (expresión)
{
...
sentencias;
...
}
else
{
...
sentencias;
...
}
c) if (expresión)
{
...
sentencias;
...
}
else
sentencia;
d) if (expresión)
sentencia;
else
{
...
sentencias;
...
}
21
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
En la función if ( ) ... else Si para el cuerpo del if no se abre llave, el lenguaje C entiende
que solo hay una sentencia que pertenece a la parte del if, igual ocurre con la parte del else, si no
se abren llaves se entiende que solo le corresponde una sola sentencia.
Si para un bloque sea este el if o el else le corresponden dos o mas sentencias, entonces
debe haber llaves que cubran todas las sentencias que les pertenece.
# include <stdio.h>
void main()
{
int num;
float compra, desc;
if (num< 74)
desc = compra * .15;
else
desc = compra * .20;
}
______________________________________________________________________________________
22
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Es una sentencia de control selectiva, es decir, de un menú previo se elige solo una
opción, y solo se ejecutara el bloque correspondiente a la opción elegida.
Sintaxis
switch (expresion)
{
case <valor_1>:
...
sentencias;
...
break;
case <valor_2>:
...
sentencias;
...
break;
case <valor_n>:
...
sentencias;
...
}
Donde:
Programa: Este permite al usuario llevar a cabo el calculo del área de cualquier de las
siguientes figuras geométricas:
1. Cuadrado
2. Rectángulo
3. Triángulo
4. Circulo
______________________________________________________________________________________
# include <stdio.h>
# define PI 3.141596
23
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
void main( )
{
int l, b, h, r, opc;
float a;
24
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
1. SENTENCIA while ( )
Hacer mientras la condición sea cierta, en el momento que la condición sea falsa se sale. Si
la condición fuera falsa desde un principio entonces nunca entra.
V
F
Condición
Sentencias
Sintaxis:
1. while (expresión)
sentencia;
2. while (expresión)
{
...
sentencias;
...
}
25
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Observe que el ciclo while al igual que el if, si solo le pertenece una sentencia, no se usan
llaves, el lenguaje C entiende que solo hay una sola sentencia para el ciclo. Si al ciclo le
corresponden dos o mas sentencias entonces estas deberán estar cubiertas con llaves que abran y
cierren, como en el segundo caso.
# include <stdio.h>
# define max 20
void main()
{
int ca=1, scal=0, cal, may, men;
float prom;
if (ca == 1)
{
may = cal;
men = cal;
}
else
if (cal > may)
may = cal;
else
if (cal < men)
men = cal;
scal+ = cal;
++ca;
getch( );
}
______________________________________________________________________________________
26
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Programa: Una persona debe realizar un muestreo con 50 personas para determinar el
promedio de peso de los niños, jóvenes, adultos y viejos que existen en una zona habitacional. Se
determina la categoría con base en la siguiente tabla.
Categoría Edades
Niños 0 - 12
Jóvenes 13 - 29
Adultos 30 - 59
Viejos 60 ...
______________________________________________________________________________________
# include <stdio.h>
void main( )
{
float edad, ninos=0, suma1=0, joven=0, suma2=0, adultos=0;
float suma3=0, viejos=0, suma4=0;
float prom_n, prom_j, prom_a, prom_v;
int c = 0;
if (edad <=12)
{
suma1+=edad;
ninos+=1;
}
else
if (edad <=29)
{
suma2+=edad;
joven+=1;
}
else
if (edad <=59)
{
suma3+=edad;
adultos+=1;
}
else
{
suma4+=edad;
viejos+=1;
}
c+=1;
}
27
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
prom_n=suma1/ninos;
prom_j=suma2/joven;
prom_a=suma3/adultos;
prom_v=suma4/viejos;
getch();
}
______________________________________________________________________________________
Observaciones:
1. En este programa vea que en los ciclos if ... else las instrucciones que
corresponden a cada if están cubiertas por llaves, pero cuando a un else le sigue un if no se usan
llaves para cubrir a este if, dado que no es necesario, ya que se toma por una sola instrucción,
independientemente de todas las instrucciones que dentro de ese if estén, pero esas instrucciones
ya corresponden al if interno y no al else
2. El programa funciona, pero si por ejemplo no hubiera niños, entonces niños=0, y
suma1=0, y 0/0 es un error para C.
# include <stdio.h>
void main()
{
int c=0, x=0, r1=1, r2=1, r3=1;
float suma=0, tiempo=0, prom;
while (c<10)
{
printf ("Tiempo hecho:");
scanf ("%f", &tiempo);
28
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
suma+=tiempo;
c+=1;
}
prom=suma/10;
if (prom<=15)
r3=1;
else
r3=0;
printf ("Prom. es: %f, prueba1= %d, prueba2 = %d, prueba3 = %d \n", prom, r1,r2, r3 );
getch();
}
______________________________________________________________________________________
Programa: El mismo problema anterior se resuelve con el siguiente programa de una forma
mas sencilla. Analícelo.
______________________________________________________________________________________
# include <stdio.h>
void main()
{
float tiempo, prom, capto=0, cnapto=0, c=0, total=0;
29
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
while (c<10)
{
printf ("Cual es el tiempo:");
scanf ("%f", &tiempo);
if (tiempo<=16)
capto=capto + 1;
else
cnapto=cnapto + 1;
total=total + tiempo;
c+=1;
}
prom=total/10;
printf ("Su promedio es %f ", prom);
printf ("Contador de apto %f, Contador no apto %f\n ", capto, cnapto);
getch();
}
______________________________________________________________________________________
Programa: El gobierno del estado de México desea reforestar un bosque que mide
determinado número de hectáreas.
Si la superficie del terreno excede un millón de m2 entonces decidirá sembrar de la
siguiente manera:
1. 70 % de arboles de pino
2. 20 % de arboles de hóyameles
3. 10 % de arboles de cedro
El gobierno desea saber el numero de pinos, hóyameles y cedros que tendrá que sembrar
en el bosque, si se sabe que en 10 m2 cabe 8 pinos, en 15 m2 cabe 15 hóyameles y en 18 m2 cabe 10
cedros. También se sabe que una hectárea equivale a 10,000 m2
______________________________________________________________________________________
# include <stdio.h>
30
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
void main()
{
float superf, b, pinos, hoya, ced;
if (superf>1000000)
{
b=((1.25/1)*7) + ((1/1)*2) + ((1.8/1)*1);
pinos=(7/b)*superf;
hoya=(2/b)*superf;
ced=(1/b)*superf;
}
else
{
b=((1.25/1)*5) + ((1/1)*3) + ((1.8/1)*2);
pinos=(5/b)*superf;
hoya=(3/b)*superf;
ced=(2/b)*superf;
}
b= 12.55 m2
Vea que dentro de los paréntesis internos lo que ocurre son simples conversiones y nos
queda un resultado en metros cuadrados, dichos resultados en m2 son multiplicados por 7, 2, y 1
que equivalen al porcentaje de 70%, 20% y 10% respectivamente. De esta forma se crean las
constantes: 7/b, 2/b, 1/b para pinos, hoya y cedros, respectivamente. Donde podemos despejar
para una determinada superficie.
pinos= (7/b)*superf;
hoya= (2/b)*superf;
ced= (1/b)*superf;
31
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
sentencias
F V
expresion
Sintaxis:
1) do
sentencia;
while (expresión);
2) do
{
...
sentencias;
...
}
while (expresión);
En el ciclo do ... while ( ) las sentencias se realizan cuando menos una vez, ya que la
evaluación de la expresión se da hasta el final del ciclo. El ciclo continua mientras la expresión
sea verdadera.
32
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Con una sola sentencia no se usan llaves, con dos o mas sentencias estas deben ser
cubiertas por llaves. Observe que el último renglón del ciclo while (expresión); termina con un
punto y coma.
# include <stdio.h>
void main()
{
int ca=0, capro=0, cal;
float pa;
do
{
++ca;
printf ("Calificacion del %d alumno:", ca);
scanf ("%d", &cal);
if (cal>=70)
capro=capro+1;
}
while (ca<12);
pa=capro*100/12;
printf ("Porcentaje de aprobados: %f\n", pa);
getch();
}
______________________________________________________________________________________
Observaciones: El ciclo do ... while () se realiza mientras sea verdadero, y se ejecuta cuando menos
una vez.
33
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
3. SENTENCIA for ( )
V=Vi
V<=Vf
F
V=V+1
Sentencias
Donde:
V Es una variable que actúa como contador
Vi Valor inicial (constante o variable)
Vf Valor final (constante o variable)
Sintaxis:
Donde:
34
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Ejemplos:
sn+ = i;
2) i = 1; 2
3) i = 1; 3
for ( ; i<=20; )
{
sn+=i;
i++;
}
4) i = 1; 4
for ( ; ; )
{
ns+=i;
if (i<=20)
i++;
else
break; 5
35
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
1En el ejemplo No. 1, supongamos que la variable ‘sn’ tiene un valor inicial de 0, de tal forma
que al ejecutarse este ciclo for la variable ‘sn’ primero vale 1, luego vale la suma de 1 mas 2, luego
vale la suma de 3 mas 3 y así sucesivamente hasta que ‘i ’ vale 19 se termina el ciclo.
sn+=i; es lo mismo que sn = sn + i El ciclo for le da un valor inicial de 1 a ‘i ‘ y se incrementa su
valor de 1 en 1
2Vea que antes de iniciar el ciclo for tenemos la expresión de inicialización (i = 1), de tal forma
que esta ya no aparece como primera expresión del for, quedando en su lugar solo el punto y
coma (;)
El programador puede quitar de la sentencia for esta expresión de inicialización o
cualquier otra, o las tres, pero queda a su responsabilidad anotarlas en el lugar correcto
3En el tercer caso, no tan solo queda fuera la expresión de inicialización, sino también la tercera
expresión que es la de incremento del ciclo (i ++) - Cuando la variable ‘i ‘ incrementa su valor de
1 en 1 con cada vuelta del ciclo - . Observe que aunque se han quitado dos expresiones, estas
quedan representadas por puntos y comas.
Y como ya se había mencionado en estos casos queda bajo responsabilidad del
programador poner dichas expresiones en el lugar adecuado.
4 En el cuarto caso se han quitado de la sentencia for las tres expresiones, quedando en la
sentencia dos puntos y comas - for (; ;) - y expresándose fuera de dicha sentencias las expresiones
del ciclo.
NOTA: Al igual que con otros ciclos, si al ciclo for le corresponde una sola sentencia
entonces no se usan llaves, si le corresponden dos o mas sentencias entonces el cuerpo del ciclo
va cubierto por llaves.
Programa: Se crea un ciclo for, para ejecutarse diez veces (x=0; x<10) y los incrementos son de uno
en uno ( x++) Se va a imprimir “valor de x:” en varias ocasiones donde x toma un valor desde 0
hasta 7 y no llega a 10 dado que la instrucción (x == 7) “si x es igual a 7 ” entonces x=10 y cuando
el programa regresa a la sentencia for, ya x no es menor a 10 y se sale del ciclo
______________________________________________________________________________________
# include <stdio.h>
void main()
{
int x;
for (x=0; x<10; x++)
{
printf ("valor de x: %d \n", x);
if (x==7)
x=10;
}
getch();
}
______________________________________________________________________________________
36
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Cuando x toma valor de 10 y por lo tanto se sale del ciclo, pudimos haber salida con la
instrucción break, así.
if (x==7)
break;
Programa: Realizar un programa que permite calcular una elevación a una potencia, por
ejemplo si dada una base de 2 y dado un exponente de 3 el resultado debe ser 8 porque 23 =8
______________________________________________________________________________________
# include <stdio.h>
void main()
{
int a,n,i;
long int pot=1; 1
for (i=1;i<=n;i++)
pot*=a; 2
1 La palabra long int significa que la variable “pot” no este limitada a un rango de -32,767 a 32,767
ya que long int asigna a “pot” la capacidad de tomar un valor de
-2,147,483,647 a 2,147,483,647
2 La sentencia pot*=a; es lo mismo que pot=pot * a, es decir, conforme el ciclo for se ejecuta una y
otra vez pot vale primeramente el resultado de multiplicar 1 por la base que se por ejemplo: base
=2, exponente =3 entonces mientras se ejecuta el ciclo for ocurre que:
(pot=pot*a)
pot a (base) n (exponente) i (del ciclo for: i<=n) por * = a
1 2 3 1 1*2=2
2
2 2*2=4
4
3 4*2=8
8 Resultado final de “pot”
37
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
# include <stdio.h>
void main()
{
int suma=0, cal, prom, c, i;
suma+=cal; 2
}
prom=suma/c; 3
printf ("Promedio obtenido: %d ", prom);
getch();
}
______________________________________________________________________________________
1 Cuando dice “Dame la calificación de la ... materia” lo que aparece en pantalla es: “Dame la
calificación de la 1 materia, de la 2 materia, de la 3 materia, etc. la expresión i +1 no altera el valor
de ‘ i ‘ solo que para efectos de presentación en pantalla no conviene que aparezcan “Dame la
calificación de la 0 materia, sino de la 1 materia y así sucesivamente conforme ‘i ‘ incrementa su
valor.
2 Recuerde que suma+=cal es lo mismo que decir suma=suma + cal, es decir, la variable ‘suma’
que tiene una valor inicial de cero, funciona como variable acumulador (o sumador) sumando
todas las calificaciones.
3Un promedio siempre se obtendrá dividiendo la suma acumulada entre la cantidad de materias,
en este caso. De tal forma que prom=suma/c; el promedio es igual a la suma acumulada entre ‘c‘
que es la cantidad de materias.
38
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Programa: Se tiene un grupo de n alumnos en donde cada uno de ellos cursa un cierto
número de materias. Hacer un programa que determine.
a) El promedio por alumno
b) El alumno que obtuvo el mayor promedio
c) El alumno que obtuvo el menor promedio
d) El promedio del grupo
c) Por cada alumno obtener en que materia obtuvo la menor calificación
______________________________________________________________________________________
# include <stdio.h>
void main()
{
int na,ca,nm,cm,alumay,alumen,matmen;
float cal, calmen, calmay,scal=0,prom, promay, promen;
float promgpo, sprom=0;
for (cm=1;cm<=nm;cm++)
{
printf ("Dame la calificacion de la %d materia:", cm);
scanf ("%f", &cal);
scal+=cal;
if (cm==1)
{
calmen=cal;
matmen=cm;
}
else
if (cal<calmen)
{
calmen=cal;
matmen=cm;
}
39
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
prom=scal/nm;
if (ca==1)
{
promay=promen=prom;
alumay=alumen=ca;
}
else
if (prom>promay)
{
promay=prom;
alumay=ca;
}
else
if (prom<promen)
{
promen=prom;
alumen=ca;
}
sprom+=prom;
}
promgpo=sprom/na;
}
______________________________________________________________________________________
40
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
ARREGLOS (ARRAYS)
Un arreglo es una colección de variables del mismo tipo que se referencian utilizando un
nombre común. En turbo C, un arreglo o array consta de posiciones de memoria contiguas. La
dirección más baja corresponde al primer elemento y la más alta al último. Un arreglo puede
tener una o varias dimensiones. Para acceder a un elemento especifico de un arreglo se usa un
índice.
En resumen, un Arreglo es un conjunto de posiciones contiguas, que tienen un nombre. Donde
cada elemento del arreglo es de un mismo tipo (char, int, float, etc.).
Una Variable almacena un solo valor, un Arreglo almacena un conjunto de valores.
Arreglos unidimensionales
El formato general para la declaración de un arreglo unidimensional es
tipo nombre_var[tam];
Aquí tipo declara el tipo base del arreglo. El tipo base determina el tipo de datos de cada
elemento del arreglo. El tam define cuántos elementos guardará. Por ejemplo, lo siguiente declara
un arreglo de enteros llamado “ejemplo” de diez elementos:
int ejemplo[10];
En C, todos los arreglos usan cero como índice del primer elemento. Por tanto, el ejemplo
anterior declara un arreglo de enteros - int - de diez elementos: ejemplo[0] a ejemplo[9].
0
1
2 Observe que el arreglo
3 contiene 10 posiciones, y la
primera posicion del arrego
4
es 0
5
6
7
8
9
0
1
2
3 Arreglo
.
.
.
n-1
41
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Por ejemplo, el programa siguiente carga un arreglo de enteros con los numeros del del 0
al 9:
______________________________________________________________________________________
main ()
{
int x[10];
int i
}
______________________________________________________________________________________
}
______________________________________________________________________________________
Observe que el arreglo “crash” fue declarado para almacenar solo 10 elementos - int crash[10] -,
sin embargo, el ciclo for le introduce 100 elementos !!, es decir, se desborda el arreglo “crash”.
Esto hace que se sobreescriba información importante, ocasionando un fallo en el programa.
42
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Representación en memoria
Suponga que tiene una Arreglo con números enteros que empiezan a partir de la
dirección @ 142 ¿Cual seria la dirección de la posición 5?
Donde: Tamaño de dato en este caso es 2 (bytes) por ser de tipo int - entero - .
142 + 2 * ( 5 - 1 ) = 142 + 2 * (5 - 1) =
= 142 + 2 * 4 = 142 + 8 =@150
0 @142
1 @144
2 @146
3 @148
4 @150 La Dirección de la quinta posicion es @150. Recuerde que C
5 empieza en 0 y la quinta posición realmente sera en n - 1 = 4
6
7
8
9
DECLARACIÓN DE UN ARREGLO
donde:
Ejemplos:
0 0 0
1 1 1
2 2 2
. . .
. . .
. . .
28 79 10
29 80 11
44
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Decíamos que un arreglo de caracteres requiere la última posición del arreglo para una
caracter nulo. Así que si en el vector cadena introducimos la expresión:
T u x t e p e c , O a x . \0
Y dado que nuestro vector “cadena” tiene una capacidad de 81 posiciones, en este caso
todo las demás posiciones fueron desaprovechadas.
Programa: Crear un vector con 10 elementos, y una vez hecho que este vector genere otro
automáticamente con los elementos capturados en forma inversa al primer vector. Y visualizar
ambos vectores.
______________________________________________________________________________________
# include <stdio.h>
void main()
{
int vect1[10], vect2[10], i,x;
for (i=0; i<10; i++) /*En este ciclo nosotros capturamos el vector con 10 elem*/
{
printf ("Introduzca el %d valor:", i+1);
scanf ("%d", &vect1[i]);
}
i = 9;
for (x=0; x<10; x++) /*Este ciclo genera automaticamente el otro vector, inversamen*/
{
vect2[x]=vect1[i];
i = i - 1;
}
# include <stdio.h>
void main()
{
int a[20], i, ordenado=1;
if (ordenado) 2
printf ("Esta ordenado \n");
else
printf ("No esta ordenado");
getch();
}
______________________________________________________________________________________
1La sentencia if compara el valor que se encuentra en el vector ‘a’ en la posición de i - 1 con el
valor que se encuentra en el mismo vector ‘a’ en la posición siguiente, es decir, la posición i. Si el
primer valor es mayor al segundo entonces la variable bandera “ordenado” toma un valor de 0 lo
que origina la salida del ciclo for.
2Esta sentencia if tiene una expresión - ordenado - si ésta tiene un valor de 1 entonces el if es
verdadero y se imprime “Esta ordenado”. De lo contrario si “ordenado” tiene un valor de 0 se
imprime “No esta ordenado”
# include <stdio.h>
void main()
{
int vect[50], i, cmay=0, suma=0, prom;
46
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
prom=suma/50;
printf ("El promedio es: %d\n", prom);
Programa: Llenar 2 vectores A y B de 45 elementos cada uno, sumar el elemento uno del
vector A con el elemento uno del vector B y así sucesivamente hasta 45, almacenar el resultado en
un vector C, e imprimir el vector resultante.
______________________________________________________________________________________
#include <stdio.h>
void main()
{
int a[45], b[45], c[45], i;
getch();
}
______________________________________________________________________________________
47
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Programa: Llenar un vector con 20 elementos, imprimir la posición y el valor del elemento
mayor almacenado en el vector, suponga que todos los elementos del vector son diferentes.
______________________________________________________________________________________
# include <stdio.h>
void main()
{
int vect[20], i, mayor, pos;
Observaciones:
1 Para este ciclo for solo hay una sentencia o instruccion que le pertenece; la cual es la linea del if
siguiente. Por lo mismo, no hay llaves que cubran a todo este bloque del if. Recuerde todo lo que
esta dentro del if, incluyendo al mismo else es parte interno del if, o sea, ya no pertenece al ciclo
for.
En otras palabras, pudimos haber hecho esto:
48
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Programa: Almacenar 500 números en un vector, elevar al cuadrado cada valor almacenado
en el vector, almacenar el resultado en otro vector. Imprimir el vector original y el vector
resultante.
______________________________________________________________________________________
# include <stdio.h>
# include <math.h>
void main()
{
int vec1[500], vec2[500], i;
getch();
}
49
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
______________________________________________________________________________________
Programa: Almacenar 300 números en un vector, imprimir cuantos son ceros, cuantos son
negativos, cuantos positivos. Imprimir además la suma de los positivos y la suma de los
negativos.
______________________________________________________________________________________
# include <stdio.h>
void main()
{
int vec[300], i, cc=0, cp=0, cn=0, sumpos=0, sumneg=0;
getch();
}
______________________________________________________________________________________
Donde:
cc .- Es el contador de ceros. cp.- Es el contador números de positivos. cn.- Es el
contador de números negativos. sumpos.- Suma valores positivos. sumneg.- Suma
valores negativos.
50
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
# include <stdio.h>
void main()
{
int vect1[150], vect2[150], i, x;
x = 149;
for (i=0; i<150; i++)
{
vect2[i] = vect1[x];
x = x - 1;
}
getch();
}
______________________________________________________________________________________
# include <stdio.h>
void main()
{
int m[100], n[100], i, r=1;
51
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
if (r) 3
printf ("Vectores iguales");
else
printf ("Vectores diferentes");
getch();
}
______________________________________________________________________________________
Observaciones:
igual a 1 mientras los elementos de ambos vectores sean iguales, de caso contrario ‘ r ‘ será igual
con 0 y se sale del ciclo for.
3 Aquí tenemos una expresión - if (r) - que dice “si r tiene un valor de 1 ... entonces” de lo
Programa: Se tiene el vector A con 100 elementos almacenados. Diseñe un algoritmo que
escriba “Si” si el vector esta ordenado ascendentemente o “No” si el vector no esta ordenado.
______________________________________________________________________________________
# include <stdio.h>
void main()
{
int a[100], i, r = 1;
if (r)
printf ("Si");
else
printf ("No");
getch();
}
______________________________________________________________________________________
52
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
# include <stdio.h>
void main()
{
int vecx[80], i, r = 0, pos, num;
if (r)
printf ("Posicion donde se encuentra %d:", pos);
else
printf ("NO encontrado");
getch();
}
______________________________________________________________________________________
Programa: Almacena en un vector llamado FIB los primeros 100 números de la serie
FIBONACI: 0, 1, 1, 2, 3, 5, 8, 13, ...
______________________________________________________________________________________
# include <stdio.h>
void main()
{
int i;
long fib[100], a=0, b=1, c;
fib[0] = a;
fib[1] = b;
53
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
getch();
}
______________________________________________________________________________________
Observación (solo para el programador). El programa funciona bien, hasta los primeros 24
números, siendo el ultimo valor correcto 28,657 después arroja incorrectamente valores
negativos, como si la capacidad numérica fuera insuficiente (a pesar de que el vector fib[100] y
sus variables: a, b, c fueron declarados como enteros de capacidad superior a 32,767 con long).
Nota: Asunto pendiente para investigar.
54
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
MATRICES
Matriz Cuadrada
Aquella que tiene el mismo número de renglones y columnas: 3x3, 4x4, 2x2
Representación en memoria
Tipo nom_matriz[n][m]
donde:
n No. de Renglones (Constante)
m No. de Columnas (Constante)
Vea las palabras en negrillas, este es el tipo de Matriz que se declara, es decir, si
almacenará numeros enteros - int -, letras - char - , o numeros reales - float -
Posibles usos:
1 Esta matriz nos puede servir para guardar calificaciones de 30 alumnos cada uno con 5 materias
2 Podemos almacenar el sexo (M ó F) de 20 personas en 5 deptos. diferentes.
3 Para almacenar 10 nombres de 30 caracteres cada uno.
4 Para almacenar las cosechas de los 12 meses del año en 3 años diferentes
55
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Programa: Genera una Matriz Unidad de 5x5. La Matriz Unidad es aquella que su diagonal
principal esta compuesta por 1’s y por arriba y debajo de ella 0’s.
______________________________________________________________________________________
# include <stdio.h>
# define R 5
# define C 5
void main()
{
int a[R][C], i, j; 1
printf ("\n");
}
getch();
}
______________________________________________________________________________________
1 Para las Matrices la variable ‘i ‘ será la que controle la posición en los renglones y la
variable ‘j ‘ será la que controle la posición en las columnas.
56
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
2 Para este problema cuando i es igual a j, es decir, el número de renglón es el mismo al
número de columna, entonces estamos en la Diagonal principal ponemos 1’s en caso contrario -
else- ponemos 0’s.
Programa: Crear una matriz cuadrada de 4x4, En la diagonal principal unos, en la parte
superior ceros, y en la inferior llenar con 2’s
______________________________________________________________________________________
# include <stdio.h>
# define R 4
# define C 4
void main()
{
int mat[R][C], i, j;
if (j > i) 2
mat[i][j] = 0;
}
}
printf ("\n");
}
getch();
}
______________________________________________________________________________________
57
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
2 Si j es mayor que i entonces estamos en la parte superior de la diagonal principal y
llenamos con 0’s
Programa: Que permite capturar una matriz de 9x5, obtiene el promedio de los números
capturados, el número mayor, y el menor.
______________________________________________________________________________________
# include <stdio.h>
# define R 9
# define C 5
void main()
{
int matriz[R][C], i, j, mayor, menor;
long int suma=0;
float prom;
prom=suma/45;
getch();
}
______________________________________________________________________________________
58
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
1 Cuando i=0 y j=0 quiere decir que estamos en el primer renglón y en la primer columna.
Recordar que para C la primera posición es 0 y no 1. Así pues estamos en el primer cuadro de la
matriz. Por eso, las variables “mayor” y “menor” se cargan con ese primer valor que fue
capturado.
2 Después de que las variables “mayor” y “menor” tomaron el primer valor capturado, se
establecen comparaciones con los nuevos valores capturados para cambiar los valores de estas
variables cuando los nuevos valores capturados sean mas grande a lo que tiene “mayor” o mas
pequeño a lo que tienen “menor”
Programa: Se debe llenar una matriz de 7x7 calcular la suma de cada renglón y almacenarla
en un vector, la suma de cada columna y almacenarla en otro vector.
______________________________________________________________________________________
# include <stdio.h>
# define R 7
# define C 7
void main()
{
int mat[R][C], vect1[7], vect2[7], i, j, suma;
for (i=0; i<R; i++) /*La suma de cada renglon se guarda en el vector 1 */
{
suma=0;
for (j=0; j<C; j++)
suma=suma + mat[i][j];
vect1[i]=suma;
}
vect2[j]=suma;
}
59
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
printf ("Valores del vector 1 con la suma de cada renglon:\n");
for (i=0; i<5; i++)
printf ("%d \n", vect1[i]);
______________________________________________________________________________________
Programa: Se debe llenar una matriz de 20x20. Sumar las columnas e imprimir que columna
obtuvo la máxima suma y la suma de esa columna.
______________________________________________________________________________________
# include <stdio.h>
# define R 20
# define C 20
void main()
{
int matriz[R][C], i, j, suma, colmayor, sumayor;
for (i=0; i<R; i++)
for (j=0; j<C; j++)
{
printf ("Dame valor para posicion %d,%d: ", i+1, j+1);
scanf ("%d", &matriz[i][j]);
}
for (j=0; j<C; j++)
{
suma=0;
if (j == 0)
{
sumayor=suma;
colmayor=j+1;
}
else
if (suma > sumayor)
{
sumayor=suma;
colmayor=j+1;
}
}
printf ("La %d Columna tiene la maxima suma, con: %d ", colmayor, sumayor);
getch();
}
______________________________________________________________________________________
60
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Programa: Se debe llenar una matriz de 5x5 y que almacena la diagonal principal en un
vector. Imprimir el vector resultante.
______________________________________________________________________________________
# include <stdio.h>
# define R 5
# define C 5
void main()
{
int mat[R][C], i, j, vec[5];
if (i == j)
vec[i]=mat[i][j];
getch();
}
______________________________________________________________________________________
Programa: Que permita capturar una matriz de 6x8 y que almacene toda la matriz en un
vector. Imprimir vector resultante.
______________________________________________________________________________________
# include <stdio.h>
# define R 6
# define C 8
void main()
{
int mat[R][C], i, j, vec[48], x=0;
61
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
vec[x] = mat[i][j];
x = x + 1;
}
getch();
}
______________________________________________________________________________________
Programa: Que llene una matriz de 5x4, y se almacenara la suma de los renglones y la suma
de las columnas en un vector, que se imprime el vector resultante.
______________________________________________________________________________________
# include <stdio.h>
# define R 5
# define C 4
void main()
{
int mat[R][C], i, j, vec[9], x=0, suma;
for (i=0; i<R; i++) /* Se suma cada renglon y las sumas se guardan en vec*/
{
suma=0;
vec[x]=suma;
x=x+1;
}
for (j=0; j<C; j++) /*Se suma cada columna y se agrega cada suma al vector */
{
suma=0;
62
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
suma=suma+mat[i][j];
vec[x]=suma;
x=x+1;
}
getch();
}
______________________________________________________________________________________
Programa: Que llena una matriz de 5x6, y que imprima cuantos de los números almacenados
son 0, cuantos positivos y cuantos negativos
______________________________________________________________________________________
# include <stdio.h>
# define R 5
# define C 6
void main()
{
int matriz[R][C], i, j, cceros=0, cpos=0, cneg=0;
if (matriz[i][j] == 0)
cceros = cceros+1;
else
if (matriz[i][j] > 0)
cpos = cpos + 1;
else
cneg = cneg + 1;
}
printf ("Cantidad de ceros: %d, positivos: %d, negativos: %d", cceros, cpos, cneg);
getch();
}
63
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
______________________________________________________________________________________
Programa: Se debe generar un arreglo almacenando las calificaciones de 6 alumnos
en 5 materias diferentes. Determinar: a) Promedio por alumno, b) Promedio por
materia c) Guardar estos resultados en dos vectores diferente e imprimirlos
______________________________________________________________________________________
# include <stdio.h>
# define R 6
# define C 5
void main()
{
int i, j;
float matriz[R][C], promalum[R], promat[C], suma;
promalum[i]=suma/C;
}
promat[j]=suma/R;
}
64
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Programa: Hacer un programa que lea una cadena de caracteres y lo imprima en forma
inversa a como se introdujo.
______________________________________________________________________________________
# include <stdio.h>
# include <string.h>
void main()
{
char cadena[81]; 1
int i;
getch();
}
______________________________________________________________________________________
1 En esta línea tenemos la declaración del arreglo que guardara la cadena de caracteres - char -
donde se dispondrá de un total de 80 posiciones. Recordar que el la última posición de la cadena
la utiliza C para un caracter nulo.
2La variable ‘i ‘ toma un valor inicial igual a la longitud de la cadena de caracteres (cada espacio
en blanco cuenta como un caracter). Se le resta 1 para que no se incluya al caracter nulo.
Por ejemplo para una cadena de caracteres que tenga 18 caracteres, la variable ‘i ’ toma
ese valor inicial de 18.
3 A partir de esa posición ultima de la cadena, se empieza a imprimir la cadena, y por cada
Programa: Hacer un programa que lea una cadena de caracteres que este integrada por puras
letras e imprima la frecuencia con la cual aparece cada letra
______________________________________________________________________________________
# include <stdio.h>
# include <string.h>
# include <ctype.h>
65
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
void main()
{
char cadena[81];
int frecuencia[26], i;
getch();
}
______________________________________________________________________________________
1 Vea en el ciclo for, i se iniciala con 1, como se hace generalmente. La segunda expresión del
ciclo for es precisamente una “expresión”: cadena[i]; Significa que se va a ejecutar el ciclo mientras
no se llegue al caracter nulo - \0 -.
Se pudo haber expresado de esta manera cadena for (i=0; cadena[i] != \0; i++)
2 La sentencia if tiene una expresión que dice “Si NO es espacio en la posición actual de la cadena
- if (!isspace(cadena[i])) - De No ser espacio entonces se entra al if.
66
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
Vector “frecuencia”
0 0
1 0
2 0
3 0
4 1 La posición 4 del vector frecuencia se ha incrementado en 1
5 0 (++frecuencia) Representando a la primera ‘E’ encontrada.
. 0 Así pues cada casilla representa a una letra, y solo hay
. 0 incremento en 1 sí se encuentra su respectiva letra.
. 0
25 0
4 La línea printf ("%c = %d \n", i+65, frecuencia[i]); Nos dice que se imprime el valor actual de ‘i ’
incrementándosele previamente 65, lo que resulte se imprime pero en %c, es decir, el valor
numérico se convierte en letra. También se imprime el valor almacenado en la posición
frecuencia[i] que representa la cantidad de veces que fue encontrada la letra. Por ejemplo:
Tomando la ilustración anterior, se imprimiría: E 1
# include <string.h>
Nos permite usar funciones como strlen que nos permite saber cuantos caracteres tiene
una cadena
i = strlen(var_de_caracteres)
La variable i que es de tipo numerico recibe como valor el total de caracteres de una
variable de caracteres. Esta cantidad numerica incluye al caracter nulo. Por lo que hay que restar
1 para obtener el valor neto de la cadena.
# include <ctype.h>
Incluye funciones de conversion para cadena de caracteres.
if (!isspace(cad_caract[i]))
!isspace significa “Si no es espacio”. De tal forma que si en la posición actual de la cadena
de caracteres no es espacio, entonces la sentencia if toma un valor de 1 o verdadero y se entra al
mismo.
toupper (cad_caract[i])
El caracter que se encuentre en la posicion actual de la cadena de caracteres se convierte a
mayuscula.
67
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
PUNTEROS
1. Primero, los punteros proporcionan los medios con los cuales las funciones pueden
modificar sus argumentos de llamada.
Los punteros son una de las características mas poderosas de C, aunque también una de
las más peligrosas, por ejemplo, los punteros no inicializados pueden provocar el fallo del
sistema, quizás pero, es fácil utilizar punteros de forma incorrecta, y el uso incorrecto puede
causar fallos muy difíciles de encontrar.
Un puntero es una variable que contiene una dirección de memoria. Esa dirección es la
posición de otro objeto. (Normalmente otra variable) en memoria. Por ejemplo, si una variable
contiene la dirección de otra variable entonces se dice que la primera variable apunta a la
segunda.
@148
@150
@152 20 La Variable.- Tiene una Dirección (@152) Asignada por la
@154 PC, y un contenido (20) asignado por el usuario.
.
.
.
@160 @152 El puntero.- Tiene una Dirección propia (@160) y un
contenido el cual es una dirección de una variable (@152)
que se va a buscar.
68
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
VARIABLES Y PUNTEROS
Si una variable va a contener un puntero, entonces tiene que declararse como tal. Una
declaración de puntero consiste en un tipo base y un nombre de variable. La forma general de
declaración de una variable puntero es:
tipo *nombre;
donde tipo es el tipo base de puntero y puede ser cualquier tipo valido de C ( int, char,
float, etc.). El nombre de la variable puntero se especifica con nombre. Ejemplo.
1) & Dirección
2) * Contenido
Ejemplo:
______________________________________________________________________________________
p = #3
*p = 40; 4
69
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
@150
@152
@154 20 1 Se crea la variable ‘num’ , la PC le asigna la dirección
@156
@154 y el usuario le asigna a ‘num’ un contenido de 20
@158
@160
@162
@164 @154
2 Se crea el puntero *p el cual no tiene en ese momento
relación alguna con la variable ‘num’.
@166 3 En la segunda línea del programa p=# En ese
@168 momento se relaciona el puntero con la variable. el puntero toma
como contenido la dirección de ‘num’ (@154).
El & permite dar como contenido al puntero la dirección
de la variable, y no el contenido de esta, es decir, p=num,
entonces p=20. error!! (@20 Dirección desconocida !!)
4 *p = 40; En la dirección a la que apunta el puntero ‘p’ se asigna el valor de 40, es decir,
‘num’ ya no vale 20, sino 40.
5 printf (¨” %d \n”, *p); Esta línea visualiza el contenido de la dirección a la que apunta
‘p’, es decir, visualiza el valor de ‘num’ que es 40.
6 printf (“%d \n”, num); Esta línea visualiza el contenido de la variable ‘num’ que es 40.
7 printf (“%p \n”, p); Esta línea imprime el contenido del puntero ‘p ’ que es la dirección
de la variable ‘num’; @154
8 printf (“%p \n”, &p); Esta línea imprime la dirección del puntero ‘p ‘ que es @164
Programa: Que permite capturar un vector con 10 elementos y usando un puntero visualiza
los elementos en forma inversa a como fueron capturados.
______________________________________________________________________________________
# include <stdio.h>
void main()
{
int num[10], i, *p;
70
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
p=&num[9]; 1
getch();
}
______________________________________________________________________________________
Supongamos que nuestro vector ‘num’ fue llenado con las siguientes cantidades, y con una
dirección inicial supuesta.
1 p = &num[9]; Esta línea asigna al puntero la dirección de memoria de la posición 9 del vector.
2printf ("%d \n", *p); Imprime el contenido de la dirección a la que primeramente apunta el
puntero (@168). Imprime 2.
# include <stdio.h>
# include <string.h>
# define MAX 81
void main()
{
char cadena[MAX], *apun; 1
int band=1, i;
apun = &cadena[strlen(cadena)-1]; 2
if (band)
printf ("Es un PALINDROMO");
else
printf ("NO es PALINDROMO");
getch();
}
______________________________________________________________________________________
1 Si un determinado puntero va ser usado para manejar una cadena de caracteres - char -
entonces el puntero debe ser declarado del mismo tipo - char - como en este programa. De lo
contrario no da resultado.
2 apun = &cadena[strlen(cadena)-1]; Vea que el puntero ‘apun’ va a tomar como
contenido la dirección de una posición de la variable cadena. Esa posición será dada por el total
de caracteres realmente capturados, incluyendo espacios en blanco - strlen - y se resta 1 para no
considerar el caracter nulo. Así pues, ‘apun’ tendrá la dirección del ultimo caracter introducido.
3 --apun; La dirección que tiene como contenido ‘apun’ disminuye en 1, es decir, la
primera vez que ‘apun’ tenga un decremento apuntará al penúltimo caracter.
72
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
# include <stdio.h>
void main()
{
char cadena[81], *p;
/* Primera opcion */
p = &cadena[0];
/* Segunda opcion */
p = cadena;
getch();
}
______________________________________________________________________________________
Si por ejemplo se introduce “ala” tanto en la primera como segunda opción arroja los
mismos resultados: se imprime primeramente una dirección (la que tiene como contenido el
puntero) y luego se imprime la letra ‘a’ (el contenido de la dirección hacia la que apunta el
puntero).
Ilustracion:
73
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
FUNCIONES
Las funciones son los bloques constructores de C y el lugar donde se produce toda la
actividad del programa. Son unas de las características más importantes de C.
formato general:
El tipo.- Especifica el tipo de valor que devuelve la función. Una función puede devolver
cualquier tipo de dato excepto un arreglo. Si no se especifica ningún tipo, el compilador asume
que la función devuelve como resultado un entero.
La lista de parámetros.- Es la lista de nombres de variables separados por comas con sus
tipos asociados que reciben los valores de los argumentos cuando se llama a la función. Una
función puede no tener parámetros, en cuyo caso la lista de parámetros esta vacía. Sin embargo,
incluso cuando no hay parámetros se requieren los paréntesis.
Ejemplo:
______________________________________________________________________________________
void main()
{
printf (“%d \n”, suma(10, 20)); 6
getch();
}
______________________________________________________________________________________
74
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
z = x + y;
return z;
}
______________________________________________________________________________________
Ejemplo de función que no devuelve ningún valor (void)
______________________________________________________________________________________
void suma (void)
{
int x, y, z;
z = x + y;
En las declaraciones de variables se pueden declarar múltiples variables del mismo tipo
mediante una lista con los nombres de las variables separados por comas, en cambio, en las
funciones todos los parámetros deben declararse individualmente incluyendo para cada uno
tanto el tipo como el nombre, es decir, la lista de declaración de parámetros de una función tiene
la siguiente forma general:
75
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
1)
______________________________________________________________________________________
# include <stdio.h>
void main()
{
printf ("%d \n", suma(10, 20));
getch();
}
2)
______________________________________________________________________________________
# include <stdio.h>
void main()
{
int a;
a = suma(10,20);
printf ("%d \n", a);
getch();
}
Definición de Función
La función hace algo y puede devolver un valor.
También son funciones:
ÍNDICE
CONCEPTO BÁSICOS DEL LENGUAJE C ...................................................................... 1
TIPOS DE DATOS EN C ...................................................................................................... 3
77
Autor: M.C. Enrique Ruiz Díaz Lenguaje de Programación C - (Materia: ‘Programación I’)
MATRICES ............................................................................................................................ 53
Declaración de una Matriz ................................................................................................... 53
Programas con Matrices ....................................................................................................... 54
PUNTEROS ........................................................................................................................... 67
¿Que son los Punteros? ........................................................................................................ 67
Variables y Punteros ............................................................................................................ 68
Operadores con direcciones ................................................................................................. 68
Programas con acceso a un Arreglo usando un Puntero .................................................. 69
Regla sobre punteros ............................................................................................................ 70
FUNCIONES ......................................................................................................................... 73
Definición de Función .......................................................................................................... 75
78