1. Tipos de Datos Primitivos
Surgen por la necesidad de una clasificación muy específica de la información en un programa
de computadora estableciendo rangos de valores.
Consisten de un conjunto de valores y un conjunto de operaciones aplicables a dichos valores.
Char,int,float,double y void.
Tipo Tamaño aproximado en bits Rango
char 8 -127 a 127
unsigned char 8 0 a 255
int 16 -32,767 a 32,767
unsigned int 16 0 a 65,535
long int 32 -2,147,483,647 a 2,147,483,647
unsigned long int 32 0 a 4,294,967,295
float 32 6 digitos de precision
double 64 10 digitos de precision
long double 128 10 digitos de precision
Identificadores
Los nombres de las variables, funciones, etiquetas y otros objetos definidos por el usuario se conocen como
identificadores.El primer caracter debe ser una letra o un simbolo de subrayado y los siguientes pueden ser
letras, numeros o simbolos de subrayado.
Correctos Incorrectos
cont 1cont
prueba23 hola!
balance_total balance..total
Mayusculas y minusculas son distintas por lo que Cuenta,cuenta y CUENTA son 3 identificadores
distintos. No debe coincidir con una palabra clave o reservada.
Variables.
Posición de memoria con nombre que se usa para mantener un valor que puede ser modificado por el
programa. Se tiene que declarar antes de ser utilizada. La forma general es:
tipo lista_de_variables;
Tipo debe ser valido en C, y lista_de_variables en uno o mas nombres separados por comas. Ejemplo:
int i,j,k;
double balance,beneficio,perdida;
Ejemplo Inicialización
char ch='a';
int primero = 0;
float balance=123.23;
Existen tres sitios basicos donde se pueden declarar: dentro de las funciones(locales), en la definicion de
parametros de funciones(parámetros formales) y fuera de todas las funciones(globales).
1
2. Sentencias
*Selección o Condicional (If y Switch)
*Iteración (While, For y Do-While)
*Salto (break, goto y return)
*Etiquetado (case, default)
Verdadero y Falso en C
uchas sentencias de C se basan en una prueba condicional que determina la acción que se ha de llevar a
cabo. Una expresión condicional tiene como resultado un valor cierto o falso. En C cualquier valor distinto
de cero es cierto, incluyendo los numeros negativos. El 0 es el único valor falso. Este enfoque permite
codificar de forma extremadamente eficiente muchos tipos de rutinas.
Ejemplo
void main(void)
{
int a,b;
printf("Introduzca 2 numeros:");
scanf("%d%d", &a, &b);
if (b)
printf("%dn", a/b);
else
printf ("No se puede dividir entre cero");
}
Sentencias de Selección
IF
La forma general es
if(expresion) sentencia;
else sentencia;
donde sentencia puede ser simple o un bloque de sentencias. la claúsula else es opcional.
Si la expresion del if es cierta, se ejecuta la sentencias o bloque de sentencias que constituyen el objetivo
del if, en otro caso se ejecuta el else(si existe). Nunca se ejecutan ambos. Ejemplo:
void main ()
{
int magico, intento;
magico=rand();
printf("Adivine el numero magico:");
scanf("%d", &intento);
if(intento==magico)
printf("Adivinaste el número magico...!!");
else
printf("Incorrecto...Intenta de nuevo");}
IFS Anidados
Un if anidado es un if que es el objeto de otro if o else. Los ifs anidados son muy comunes. En C
2
3. una sentencia else siempre se refiere al if mas proximo que este en el mismo bloque que el else
y que no esté ya asociado con un if.
Ejemplo
if ( i ){
if ( j ) sentencia 1;
if (k ) sentencia 2; /* este if esta*/
else sentencia 3; /* asociado con este else*/
}
else sentencia 4; /* asociado con if (i) */
La escala If-Else-If
Las condiciones se evaluan de arriba abajo. Tan pronto como se encuentre una condición cierta, se ejecuta
la sentencia asociada con ella y se pasa por alto el resto de la escala. Si ninguna de las condiciones es
cierta, se ejecuta el else final. Si no hay else final, no tiene lugar ninguna accion si todas las condiciones
son falsas.
if ( expresion) sentencia;
else
if( expresion) sentencia;
else
if ( expresion) sentencia;
.
.
.
else sentencia;
La alternativa
Se puede usar el operador ? para remplazar las sentencias if-else. Es un operador ternario y tiene la forma:
Exp1?Exp2:Exp3 donde Exp1, Exp 2 y Exp3 son expresiones. observe el uso y la posicion de los dos
puntos.
El valor de una expresion con ? se determina de esta forma:
Se evalua Exp1, si es cierta se evalua Exp2 y se convierte en el valor de la expresion completa. Si Exp1 es
falsa, se evalua Exp3 y su valor se convierte en el valor de la expresion completa.
Ejemplo
x=10;
y= x>9?100:200;
En este ejemplo a y se le asigna el valor de 100. Si x hubiera sido menor que 9, habria recibido el valor de
200.
utiizando if-else
x=10;
if ( x>9) y=100;
3
4. else y=200;
Switch
Sentencia de selección múltiple que compara sucesivamente el valor de una expresión con una
lista de constantes enteras o de caracteres. Cuando se encuentra una correspondencia, se
ejecutan las sentencias asociadas con la constante.
switch (expresion){
case constante1:
secuencia de sentencias
break;
case constante2:
secuencia de sentencias
break;
case constante3:
secuencia de sentencias
break;
.
.
.
default:
secuencia de sentencias
}
La sentencia default se ejecuta si no se ha encontrado ninguna correspondecia, es opcional y si
no esta presente, no se ejecuta ninguna accion al fallar todas las comprobaciones.
En ANSI C , una sentencia switch debe poder tener al menos 257 sentencias case, en C++
16,384.
Cuando se encuentra un break, la ejecucion del programa salta a la linea de codigo que sigue a
la sentencia switch. pero la sentencia break es opcional.
Ejemplo
do{ clrscr();
printf ("***********Menu Principal*********** nn");
printf ("1-Agregar a la Pila n");
printf ("2-Suprimir de la Pila n");
printf ("3-Tope de la Pila n");
printf ("4-Anula la Pila n");
printf ("5-Imprime Pilann");
printf ("6-Salir nn");
printf ("Seleccione una opcionn");
scanf("%d",&opc);
switch(opc){
case 1:printf("Dame el numero a insertar");
scanf("%d",&num);
inserta(num,&P);
break;
case 2:suprimir(&P);
getch();
break;
case 3:printf("El tope es: %dn",tope(&P));
getch();
break;
4
5. case 4:anula(&P);
break;
case 5:printf("La Pila es:");
imprime(&P);
getch();
}
} while(opc!=6);
Sentencias Switch Anidadas
Se puede tener un switch formando parte de la secuencia de sentencias de otro switch
switch (X){
case 1:
switch (y) {
case 0: printf( " Error de division por cero");
break();
case 1: procesar(x,y);
}
break();
case 2:
.
.
Sentencias de Iteracion
Las sentencias de iteración permiten que un conjunto de instrucciones sea ejecutado hasta que
se alcanze una cierta condicion.
El Bucle For
For(inicializacion;condicion;incremento) sentencia;
La inicializacion normalmente es una sentencia de asignación que se utiliza para iniciar la
variable del control del bucle. La condicion es una expresión relacional que determina cuando
finaliza el bucle. El incremento define como cambia la variable de control cada vez que se repite
el bucle. Estas tres secciones deben estar separadas por punto y coma. El bucle continua
ejecutándose mientras la condicion sea cierta. Una vez que la condicion se hace falsa, la
ejecucion del programa sigue por la sentencia sigue al for.
Ejemplo
Int x;
For(x=1; x<=100; x++)
Printf(“%d”, x);
For Infinito
Como no se necesita ninguna de las tres expresiones que constituyen el bucle for, se puede
conseguir que el bucle no tenga fin dejando la expresión condicional vacia. Cuando falta la
condicion, se asume que es cierta.
5
6. For(; ; ){
C = getchar();
If (C ==’A’) break;
}
printf(“Has pulsado una A”);
Sin embargo. No se garantiza el bucle infinito, ya que la sentencia de C break, cuando se
encuentra en cualquier lugar dentro del cuerpo de un bucle, da lugar a la terminación inmediata.
El Bucle While
While (condicion) sentencia;
La condicion puede ser cualquier expresión y cualquier valor distinto de 0 es cierto. El bucle
itera mientras la condicion es cierta.
Ejemplo
Char c;
While (C ¡= ‘A’)
C = getchar();
El Bucle Do-While
A diferencia de lo bucles for y while, que analizan la condicion del bucle a principio del mismo, el
bucle do-while analiza la condicion al final del bucle. Esto significa que siempre se ejecuta al
menos una vez.
Do{
Sentecia;
} while(condicion);
Itera hasta que la condicion se hace falsa. El sig ejemplo lee los numeros del usuario hasta que
encuentra un numero menor o igual a 100.
Do{
Scanf(“%d”, &num);
} while(num >100) ;
ARRAYS
Un array es una coleccion de variables del mimo tipo que se referencian por un nombre comun. A un
elemento especifico de un array se accede mediante un indice. En C todos los arrays constan de
posiciones de memoria contiguas. La dirección mas baja corresponde al primer elemento y la mas alta al
ultimo elemento.
Un array puede tener de una a varias dimensiones, el mas comun es la cadena, que simplemente es un
array de caracteres terminado por un nulo.
Tienen que declararse explícitamente para que asi el compilador pueda reservar espacio en memoria.
Tipo nombre_de_array[tamaño];
6
7. Int caificaciones[100];
Todos los arrays tiene el cero como indice de su primer elemento. Por tanto cuando se declara
Char p[10];
Se esta declarando un array de caracteres que tiene 10 elementos, desde p[0] hasta p[9].
Int x[100];
Int t;
For(t=0;t<100 ; t++)
x[t] = t ;
La cantidad de memoria requerida para guardar un array esta directamente relacionada con su tipo y su
tamaño. Para un array unidimensional, el tamaño total en bytes se calcula:
Total de bytes= sizeof(tipo) * tamaño del array
Note: C no comprueba los limites del array. Se puede pasar cualquier extremo de un array y escribir en
alguna otra variable.
Cadenas
Una cadena se define como un array de caracteres que terminan en un carácter nulo. Un carácter nulo se
especifica como ‘/0’ y generalmente es un cero. Por esta razon es necesario que sean de un carácter más
que la cadena mas larga que pueda contener.
C incluye una gran variedad de funciones de manejo de cadenas. Se encuentran en STRING.H
Strcpy(c1,c2) Copia C2 en C1
Strcat(c1,c2) Concatena C2 al final de C1
Strlen(C1) Devuelve la longitud de C1
Strcmp(c1,c2) Devuelve 0 si c1 y c2 son iguales, menor que 0 si c1<c2 y mayor que 0 si c1>c2.
Ejemplo
Char c1[80],c2[80];
gets(c1);
gets(c2);
printf(“longitudes: %d %dn” strlen(c1), strlen(c2) );
if (!strcmp(c1,c2))
printf(“Las cadenas on iguales”);
strcat(c1,c1);
printf(“%sn”,c1);
strcpy(c1,”Esta es una prueba.”);
printf(c1);
Resultado:
7
8. Longitudes: 4 4
Las cadenas son iguales
holahola
Esta es una prueba
Arrays Bidimensionales
Un array bidimensional es esencialmente un array de arrays unidimensionales. Para declarar un array d de enteros
bidimensional de tamaño 10,20 se escribiria.
Int d[10] [20];
Para acceder al punto 1,2 del array d, se escribiria..
d[1][2];
En el sig Ejemplo num[0][0] tiene el valor 1, num [0][1] tiene el valor 2...
Se almacenan en matrices fila-columna, en las que el primer indice indica la fila y el segundo indica la columna.
Num [fila] [columna]
0 1 2 3
1 2 3 4
5 6 7 8
9 10 11 12
Bytes = tamano primer indice *tamano segundo indice * sizeof(tipo base)
Array de Cadenas
Para crear un array de cadenas, se utiliza un array de caracteres bidimensional. El tamaño del índice izquierdo
determina el número de cadenas y el tamaño del índice derecho específica la longitud máxima de cada cadena.
Ejemplo:
Declara un array de 10 cadenas, cada una con una longitud máxima de 20 caracteres,
char array_cad[10] [20];
Es fácil acceder a una cadena individual, simplemente se especifica solo el índice izquierdo.
Ejemplo:
Gets(array_cad[2]);
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
A M A R I L L O
A N A R A N J A D O
V I O L E T A
A Z U L
N E G R O
B L A N C O
R O S A
8
9. C A F E
V E R D E
G R I S
Códigos ASCII (0-127).
Carácteres no imprimibles Carácteres imprimibles
D D D
D H C H Ca H C H C
Nombre e e e
e e a e r. e a e a
c c c
c x r. x x r. x r.
Nulo 0 0 N 3 2 Esp 6 4 @ 9 6 `
0 U 2 0 acio 4 0 6 0
L
Inicio de cabecera 1 0 S 3 2 ! 6 4 A 9 6 a
1 O 3 1 5 1 7 1
H
Inicio de texto 2 0 S 3 2 " 6 4 B 9 6 b
2 T 4 2 6 2 8 2
X
Fin de texto 3 0 E 3 2 # 6 4 C 9 6 c
3 T 5 3 7 3 9 3
X
Fin de transmisión 4 0 E 3 2 $ 6 4 D 1 6 d
4 O 6 4 8 4 0 4
T 0
enquiry 5 0 E 3 2 % 6 4 E 1 6 e
5 N 7 5 9 5 0 5
Q 1
acknowledge 6 0 A 3 2 & 7 4 F 1 6 f
6 C 8 6 0 6 0 6
K 2
Campanilla (beep) 7 0 B 3 2 ' 7 4 G 1 6 g
7 E 9 7 1 7 0 7
L 3
backspace 8 0 B 4 2 ( 7 4 H 1 6 h
8 S 0 8 2 8 0 8
4
Tabulador 9 0 H 4 2 ) 7 4 I 1 6 i
horizontal 9 T 1 9 3 9 0 9
5
Salto de línea 1 0 L 4 2 * 7 4 J 1 6 j
0 A F 2 A 4 A 0 A
6
Tabulador vertical 1 0 V 4 2 + 7 4 K 1 6 k
1 B T 3 B 5 B 0 B
7
Salto de página 1 0 F 4 2 , 7 4 L 1 6 l
2 C F 4 C 6 C 0 C
8
Retorno de carro 1 0 C 4 2 - 7 4 M 1 6 m
3 D R 5 D 7 D 0 D
9
Shift fuera 1 0 S 4 2 . 7 4 N 1 6 n
4 E O 6 E 8 E 1 E
0
Shift dentro 1 0 S 4 2 / 7 4 O 1 6 o
5 F I 7 F 9 F 1 F
1
Escape línea de 1 1 D 4 3 0 8 5 P 1 7 p
datos 6 0 L 8 0 0 0 1 0
E 2
Control dispositivo 1 1 D 4 3 1 8 5 Q 1 7 q
1 7 1 C 9 1 1 1 1 1
1 3
Control dispositivo 1 1 D 5 3 2 8 5 R 1 7 r
2 8 2 C 0 2 2 2 1 2
2 4
Control dispositivo 1 1 D 5 3 3 8 5 S 1 7 s
3 9 3 C 1 3 3 3 1 3
3 5
Control dispositivo 2 1 D 5 3 4 8 5 T 1 7 t
4 0 4 C 2 4 4 4 1 4
4 6
9
10. neg acknowledge 2 1 N 5 3 5 8 5 U 1 7 u
1 5 A 3 5 5 5 1 5
K 7
Sincronismo 2 1 S 5 3 6 8 5 V 1 7 v
2 6 Y 4 6 6 6 1 6
N 8
Fin bloque 2 1 E 5 3 7 8 5 W 1 7 w
transmitido 3 7 T 5 7 7 7 1 7
B 9
Cancelar 2 1 C 5 3 8 8 5 X 1 7 x
4 8 A 6 8 8 8 2 8
N 0
Fin medio 2 1 E 5 3 9 8 5 Y 1 7 y
5 9 M 7 9 9 9 2 9
1
Sustituto 2 1 S 5 3 : 9 5 Z 1 7 z
6 A U 8 A 0 A 2 A
B 2
Escape 2 1 E 5 3 ; 9 5 [ 1 7 {
7 B S 9 B 1 B 2 B
C 3
Separador 2 1 F 6 3 < 9 5 1 7 |
archivos 8 C S 0 C 2 C 2 C
4
Separador grupos 2 1 G 6 3 = 9 5 ] 1 7 }
9 D S 1 D 3 D 2 D
5
Separador 3 1 R 6 3 > 9 5 ^ 1 7 ~
registros 0 E S 2 E 4 E 2 E
6
Separador 3 1 U 6 3 ? 9 5 _ 1 7 D
unidades 1 F S 3 F 5 F 2 F E
7 L
10
11. neg acknowledge 2 1 N 5 3 5 8 5 U 1 7 u
1 5 A 3 5 5 5 1 5
K 7
Sincronismo 2 1 S 5 3 6 8 5 V 1 7 v
2 6 Y 4 6 6 6 1 6
N 8
Fin bloque 2 1 E 5 3 7 8 5 W 1 7 w
transmitido 3 7 T 5 7 7 7 1 7
B 9
Cancelar 2 1 C 5 3 8 8 5 X 1 7 x
4 8 A 6 8 8 8 2 8
N 0
Fin medio 2 1 E 5 3 9 8 5 Y 1 7 y
5 9 M 7 9 9 9 2 9
1
Sustituto 2 1 S 5 3 : 9 5 Z 1 7 z
6 A U 8 A 0 A 2 A
B 2
Escape 2 1 E 5 3 ; 9 5 [ 1 7 {
7 B S 9 B 1 B 2 B
C 3
Separador 2 1 F 6 3 < 9 5 1 7 |
archivos 8 C S 0 C 2 C 2 C
4
Separador grupos 2 1 G 6 3 = 9 5 ] 1 7 }
9 D S 1 D 3 D 2 D
5
Separador 3 1 R 6 3 > 9 5 ^ 1 7 ~
registros 0 E S 2 E 4 E 2 E
6
Separador 3 1 U 6 3 ? 9 5 _ 1 7 D
unidades 1 F S 3 F 5 F 2 F E
7 L
10
12. neg acknowledge 2 1 N 5 3 5 8 5 U 1 7 u
1 5 A 3 5 5 5 1 5
K 7
Sincronismo 2 1 S 5 3 6 8 5 V 1 7 v
2 6 Y 4 6 6 6 1 6
N 8
Fin bloque 2 1 E 5 3 7 8 5 W 1 7 w
transmitido 3 7 T 5 7 7 7 1 7
B 9
Cancelar 2 1 C 5 3 8 8 5 X 1 7 x
4 8 A 6 8 8 8 2 8
N 0
Fin medio 2 1 E 5 3 9 8 5 Y 1 7 y
5 9 M 7 9 9 9 2 9
1
Sustituto 2 1 S 5 3 : 9 5 Z 1 7 z
6 A U 8 A 0 A 2 A
B 2
Escape 2 1 E 5 3 ; 9 5 [ 1 7 {
7 B S 9 B 1 B 2 B
C 3
Separador 2 1 F 6 3 < 9 5 1 7 |
archivos 8 C S 0 C 2 C 2 C
4
Separador grupos 2 1 G 6 3 = 9 5 ] 1 7 }
9 D S 1 D 3 D 2 D
5
Separador 3 1 R 6 3 > 9 5 ^ 1 7 ~
registros 0 E S 2 E 4 E 2 E
6
Separador 3 1 U 6 3 ? 9 5 _ 1 7 D
unidades 1 F S 3 F 5 F 2 F E
7 L
10