Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El lenguaje C fue creado por Dennis Ritchie (1941 – 2011) entre 1969 y 1972 en los
Laboratorios Bell.
En 1978, los científicos de la computación Dennis Ritchie y Brian Kernighan (1942 - )
escribieron un libro que se volvió referencia obligada en el campo de la computación: El
lenguaje de programación C.
int main( )
{
Cuerpo del programa
}
Apéndice: Lenguaje C. Aprendiendo a programar a partir de cero. Patricia Salazar Perdomo. ESCUELA COLOMBIANA DE INGENIERÍA.
Ejemplo.
#include <stdio.h>
#include <stdlib.h>
Se estila nombrar las variables con minúsculas y las constantes con mayúsculas.
El cuerpo del programa empieza con la declaración de variables cuya sintaxis es:
Tipo_de_dato variable o lista de variables;
Con punto y coma terminan todas las declaraciones e instrucciones o invocación a rutinas.
Los encabezados de las estructuras de control condicionales no terminan con punto y
coma salvo que se haga a conciencia como se verá en un ejemplo, más adelante.
Comentarios
Los comentarios se indican con doble slash (//) al principio y de ahí hasta el final de la
línea es tomado como tal. O también con /* para empezar y */ para terminar. Esta última
forma permite hacer comentarios de varias líneas señalando sólo el principio y el final de
éste. En los ejemplos se verá su uso.
En la siguiente tabla se contrasta lo básico del lenguaje algorítmico con el lenguaje C.
Apéndice: Lenguaje C. Aprendiendo a programar a partir de cero. Patricia Salazar Perdomo. ESCUELA COLOMBIANA DE INGENIERÍA.
Tipos de variables
entero Int
real float (o double)
caracter char
cadena_de char
Operador de asignación
=
Estructura condicional si simple
si (condición o condiciones) instrucción if (condición o condiciones) instrucción;
Conectores lógicos Conectores lógicos
y &&
ó ||
Operadores relacionales Operadores relacionales
>, ≥, <, ≤, =, ≠ >, >=, <, <=, ==, !=
Estructura condicional si de bloque
si (condición o condiciones) entonces if (condición o condiciones)
** cuerpo del si { ** Estos corchetes se necesitan sólo si hay más de una instrucción
fin_si ** cuerpo del if
}
si (condición o condiciones) entonces
** cuerpo del si if (condición o condiciones)
si_no { ** Estos corchetes se necesitan sólo si hay más de una instrucción
** cuerpo del si_no ** cuerpo del if
fin_si }
else
{ ** Estos corchetes se necesitan sólo si hay más de una instrucción
** cuerpo del else
}
Estructura condicional mq
mq (condición o condiciones) haga while (condición o condiciones)
** cuerpo del mq {
fin_mq ** Estos corchetes se necesitan sólo si hay más de una instrucción
** cuerpo del while
}
Instrucciones de entrada o salida
lea variable scanf(“formato”, dirección de la variable);
Ejemplo: lea sueldo
Ejemplo: scanf (“%d”, &sueldo); // %d: entero, %f: real, %c: caracter: %s: cadena
El operador de dirección & se pone sólo si la variable no es una
dirección. En este momento, sólo si se está pidiendo un entero, un real
o un caracter.
escriba “mensaje” printf(“mensaje”);
escriba variable printf(“mensaje y formatos correspondientes a las variables de la lista,
escriba variable, “mensaje”… asociados de izquierda a derecha y en el lugar que se quiere que
escriba “mensaje”, variable… aparezcan”, lista de variables);
Ejemplos: Ejemplos:
escriba “Colombia” printf (“Colombia”);
escriba “La suma de”,a,” y “,b,” es ”,suma,”.” printf (“La suma de %f y %f es %f.”,a, b, suma);
escriba a,” + “,b,” = ”,suma,”.” printf (“%f + %f = %f.”,a, b, suma);
printf (“mensaje”);
Ejemplo. printf (“Colombia”);
Apéndice: Lenguaje C. Aprendiendo a programar a partir de cero. Patricia Salazar Perdomo. ESCUELA COLOMBIANA DE INGENIERÍA.
printf(“mensaje y formatos correspondientes a las variables de la lista, asociados de
izquierda a derecha y en el lugar que se quiere que aparezcan”, lista de variables);
Ejemplos.
printf (“La suma de %f y %f es %f.”, a, b, suma);
// Formato %d: entero, %f: real, %c: caracter: %s: cadena
Si a vale 5, b vale 11 y c vale 16, escribirá en la pantalla:
La suma de 5 y 11 es 16.
Ejemplo.
scanf (“%d”, &sueldo); // Formato %d: entero, %f: real, %c: caracter: %s: cadena
if (condición) instrucción;
Los corchetes son obligatorios sólo si el cuerpo de la estructura está formado por más de
una instrucción.
Apéndice: Lenguaje C. Aprendiendo a programar a partir de cero. Patricia Salazar Perdomo. ESCUELA COLOMBIANA DE INGENIERÍA.
if (condición)
{
Cuerpo del if
}
else
{
Cuerpo del else
}
Obsérvese que, si el cuerpo del else tiene más de una instrucción, se deben poner entre
corchetes, los cuales son independientes de los del cuerpo del if.
if (a > b)
mayor = a;
else
mayor = b;
while (condición)
{
Cuerpo del while
}
Si el cuerpo está conformado por una sola instrucción, no se necesitan los corchetes.
num = 1;
while (num <= n)
{
printf ("%d “, num);
num++;
}
Apéndice: Lenguaje C. Aprendiendo a programar a partir de cero. Patricia Salazar Perdomo. ESCUELA COLOMBIANA DE INGENIERÍA.
La estructura de control repetitiva for
Esta estructura es similar a la estructura repetitiva para del lenguaje algorítmico pero es
mucho más versátil.
La sintaxis es:
int main(void)
{
int num, lim;
printf ("\n\nEscribo los números desde 1 hasta donde me indique.");
printf ("\n\n¿Hasta dónde quiere que los escriba (se espera un valor positivo)? ");
scanf ("%d", &lim);
printf ("\n\nLos números de 1 a %d son: ", lim);
for (num = 1; num <= lim; num++)
{
printf ("%d ", num);
}
Apéndice: Lenguaje C. Aprendiendo a programar a partir de cero. Patricia Salazar Perdomo. ESCUELA COLOMBIANA DE INGENIERÍA.
En el ejemplo, el for solamente tiene una instrucción. En ese caso sobran los corchetes
que agrupan el cuerpo de la estructura repetitiva.
Obsérvese que el paso 1 siempre se hace y sólo una vez. Si el usuario ingresara 0 o un
número negativo, inmediatamente después del for la variable num valdría 1.
Esta estructura es similar a la estructura while salvo que siempre se ejecuta al menos una
iteración.
La sintaxis es.
do
{
Cuerpo del do - while
}
while (condición);
Los corchetes se requieres si el cuerpo del do – while tiene más de una instrucción.
Esta estructura es muy útil para pedir un dato y validarlo o para trabajar con menús ya
que estos hay que mostrarlos al menos una vez.
do
{
printf ("Cantidad de elementos del conjunto (entre 1 y 100) ");
scanf("%d", &num);
}
while (num < 1 || num > 100);
Vectores
Los vectores se usan igual que en el lenguaje algorítmico pero se usan paréntesis
cuadrados en lugar de paréntesis. Hay que dimensionarlos con una constante entera
positiva. Se recomienda definir la constante con la directiva #define porque en caso de
que ese valor cambie, bastará con hacerlo en la definición.
Las posiciones van desde 0 hasta la dimensión definida menos 1. Mientras no se inicialice,
el valor en cada una de sus posiciones es desconocido, no es cero.
Ejemplo. Llenar un vector y luego escribirlo.
Apéndice: Lenguaje C. Aprendiendo a programar a partir de cero. Patricia Salazar Perdomo. ESCUELA COLOMBIANA DE INGENIERÍA.
#include <stdio.h>
#include <stdlib.h>
#define TM 20 // El tamaño máximo del vector es 20
int main(void)
{
int vector[TM], cn, pos; // El vector se dimensiona de 20 posiciones. TM representa ese valor.
printf ("\n\n¡Hola! Este programita pide números y los escribe.\n\n");
cn = -1;
while (cn < 1 || cn > TM)
{
printf ("Cantidad de números (entre 1 y %d) ", TM); // Se usa TM en la validación, es decir 20.
scanf("%d",&cn);
}
printf("\nIngreso de los números\n\n");
for (pos=0; pos < cn; pos++){
printf("\nNúmero #%d = ", pos+1);
scanf ("%d", &vector[pos]);
}
printf("\n\nNúmeros ingresados\n\n");
for (pos=0; pos < cn; pos++)
printf("%d ", vector[pos]);
printf("\n\nFin.\n\n");
system ("pause");
}
Programación modular
FE84 FE85 FE86 FE87 FE88 FE89 FE8A FE8B FE8C FE8D
FE8E FE8F FE90 FE91 FE92 FE93 FE94 FE95 FE96 FE97
FE98 FE99 FE9A FE9B FE9C FE9D FE9E FE9F FEA0 FEA1
FEA2 FEA3 FEA4 FEA5 FEA6 FEA7 FEA8 FEA9 FEAA FEAB
FEAC FEAD FEAE FEAF FEB0 FEB1 FEB2 FEB3 FEB4 FEB5
FEB6 FEB7 FEB8 FEB9 FEBA FEBB FEBC FEBD FEBE FEBF
FEC0 FEC1 FEC2 FEC3 FEC4 FEC5 FEC6 FEC7 FEC8 FEC9
FECA FECB FECC FECD FECE FECF FED0 FED1 FED2 FED3
FED4 FED5 FED6 FED7 FED8 FED9 FEDA FEDB FEDC FEDD
FEDE FEDF FEE0 FEE1 FEE2 FEE3 FEE4 FEE5 FEE6 FEE7
FEE8 FEE9 FEEA FEEB FEEC FEED FEEE FEEF FEF0 FEF1
FEF2 FEF3 FEF4 FEF5 FEF6 FEF7 FEF8 FEF9 FEFA FEFB
FEFC FEFD FEFE FEFF FF00 FF01 FF02 FF03 FF04 FF05
FF06 FF07 FF08 FF09 FF0A FF0B FF0C FF0D FF0E FF0F
FE10 FE11 FE12 FE13 FE14 FE15 FE16 FE17 FE18 FE19
Apéndice: Lenguaje C. Aprendiendo a programar a partir de cero. Patricia Salazar Perdomo. ESCUELA COLOMBIANA DE INGENIERÍA.
#include <stdio.h>
Entorno - lee
#include <stdlib.h> Variable Tipo Clase Dirección Contenido
x int * PR FE9C FE84
int main(void)
{ y int * Entorno
PR FEA0
– main FE8C
Variable Tipo Clase Dirección Contenido
int a,b,c; Entorno - suma
// Prototipos a int VL FE84 ? 14
Variable Tipo Clase Dirección Contenido
void lee(int *, int *); b
x int
int VL
PV FE8C
FE9C ?14-35
void suma(int, int, int *); cy int
int VL
PV FE94
FEA4 ?-35
-21
void resul(int, int, int);
z int * PR FEAC FE94
void desp(void);
// Invocaciones o llamados
lee(&a, &b);
suma(a, b, &c);
resul(a, b, c);
desp( );
}
// Definiciones
Primero que todo, en lenguaje C se invoca o llama una rutina sólo con su nombre. No
necesita el llame_a (call) del lenguaje algorítmico.
Existen los prototipos que son declaraciones de las rutinas, y como tales, van en la zona
de declaraciones, esto es, al principio.
Ejemplos.
void suma(int, int, int *);
void resul(int, int, int);
void desp(void);
Apéndice: Lenguaje C. Aprendiendo a programar a partir de cero. Patricia Salazar Perdomo. ESCUELA COLOMBIANA DE INGENIERÍA.
Los prototipos dan dos tipos de información de las rutinas:
- Si es procedimiento o función. Cuando la declaración de la rutina empieza con void
indica que es procedimiento. Más adelante se verá la diferencia con una función. Así
que, por ahora, todos los prototipos empezarán con la palabra void.
- Cómo son los argumentos (cuando se invocan las rutinas) y, por tanto, cómo son los
parámetros (cuando se reciben los argumentos en las rutinas). Esto ayuda a verificar
en la etapa de compilación que los argumentos correspondan con los parámetros en
cantidad y en tipo, asociados de izquierda a derecha.
Si se invoca una rutina con tres argumentos, los dos primeros de tipo entero y el
tercero real, entonces en la definición de ésta deberá haber tres parámetros, los dos
primeros de tipo entero y el tercero real. Importante tener presente que mientras los
argumentos pueden ser expresiones, los parámetros tienen que ser variables.
En la siguiente tabla se muestra cada prototipo del programa ejemplo y lo que indica:
Ejemplo de Encabezado de la
Prototipo Descripción
invocación rutina
void resul(int, int, int); La rutina resul es un resul(a, b, c); void resul(int x, int y, int z)
procedimiento que al ser llamado
debe enviar 3 argumentos, por
valor y todos de tipo entero. Los
parámetros serán 3 variables,
todas de tipo entero.
void desp(void); La rutina desp es un desp( ); void desp(void);
procedimiento sin argumentos y
por tanto sin parámetros.
void suma(int, int, int *); La rutina suma es un suma(a, b, &c); void suma(int x, int y, int * z)
procedimiento con dos
argumentos por valor, de tipo
entero, y uno por referencia.
void lee(int *, int *); La rutina lee es un procedimiento lee(&a, &b); void lee(int * x, int * y)
con dos argumentos por
referencia.
Los tres argumentos se pasan por valor. Si en suma se modificara el valor del parámetro
x, al argumento a, en main, no le afectaría esa modificación.
Apéndice: Lenguaje C. Aprendiendo a programar a partir de cero. Patricia Salazar Perdomo. ESCUELA COLOMBIANA DE INGENIERÍA.
Los dos argumentos se pasan por referencia. En lee se ingresarán los dos valores y éstos
serán los de a y b en main, que es la rutina que llamó a lee.
Nota. Los argumentos y los parámetros de una rutina tienen que coincidir en cantidad y
tipo pero no en nombre.
Apuntador
Un apuntador es una variable que puede contener la dirección de una variable. Cuando
no ha sido inicializada, su contenido es NULL.
Las variables, además de nombre, tipo y contenido, tienen una dirección de memoria. A
su dirección se accede con el operador de dirección &.
Cuando un argumento es entero, el parámetro tiene que ser una variable entera. Lo mismo
si es real o caracter. Cuando el argumento es por referencia, lo que se envía es la dirección
de la variable y por tanto el parámetro tiene que ser un apuntador.
Ejemplo 1.
Apéndice: Lenguaje C. Aprendiendo a programar a partir de cero. Patricia Salazar Perdomo. ESCUELA COLOMBIANA DE INGENIERÍA.
Entorno – main
Variable Tipo Clase Dirección Contenido
a int VL FE84 ? 14
b int VL FE8C ? -35
c int VL FE94 ?
Ejemplo 2.
Apéndice: Lenguaje C. Aprendiendo a programar a partir de cero. Patricia Salazar Perdomo. ESCUELA COLOMBIANA DE INGENIERÍA.
Entorno – main
Variable Tipo Clase Dirección Contenido
a int VL FE84 ? 14
b int VL FE8C ? -35
c int VL FE94 ? -21
Ejemplo. Escribir una secuencia de números de acuerdo con un número entero dado por
el usuario.
Caso 1. Si el usuario da 5, escribe 5 44 333 2222 11111
#include <stdio.h>
#include <stdlib.h>
int main(void)
{ Entorno - suma
int n; Variable Tipo Clase Dirección Contenido
void entrada(int *); x int PV FE9C 14
void secuencia(int); y int PV FEA4 -35
z int * PR FEAC FE94
entrada(&n);
secuencia(n);
printf ("\nF I N.\n\n");
}
void entrada(int * n)
{
printf ("\nEscribo una secuencia de números de acuerdo con un número entero dado por el
usuario. \nCaso 1. Si el usuario da 5, escribe 5 44 333 2222 11111. \n Caso 2. Si el usuario da 8,
escribe 8 77 666 5555 44444 333333 2222222 11111111. Para qu%c n%cmero la quieres >> ", 130,
163);
scanf("%d", n);
Apéndice: Lenguaje C. Aprendiendo a programar a partir de cero. Patricia Salazar Perdomo. ESCUELA COLOMBIANA DE INGENIERÍA.
}
void secuencia(int n)
{
int valor, veces;
void escr_numeros(int, int);
valor = n;
veces = 1;
while (valor >= 1)
{
escr_numeros(valor, veces);
valor--;
veces++;
}
}
Apéndice: Lenguaje C. Aprendiendo a programar a partir de cero. Patricia Salazar Perdomo. ESCUELA COLOMBIANA DE INGENIERÍA.