Está en la página 1de 41

Bienvenido a CLA: Programming Essentials en C

Módulo 0
Instalación y uso de su entorno de programación

Módulo 1
Introducción a la programación informática

Módulo 2
Tipos de datos, sus operaciones y conceptos básicos del control de flujo

Módulo 3
Control de flujo (continuación), más tipos de datos y lógica informática

Módulo 4
Agregando datos en arreglos

Módulo 5
Arrays vs estructuras: diferentes agregados para diferentes propósitos

Funciones del módulo 6

Módulo 7
Conexión al mundo real: archivos y transmisiones

Módulo 8
Preprocesador y declaraciones
1.- MODULO 0

-¿Dónde empezar?
Toda actividad creativa necesita herramientas y la programación no es una excepción. En su
forma más simple (por no decir la más primitiva), la programación requiere una hoja de papel y
un lápiz.

Por supuesto, no vamos a practicar la programación de esta manera; sería una buena práctica
para escribir código sin formato, pero es imposible de ejecutar y poco práctico. Como ejecutar
el código es el único método para averiguar si es correcto, la programación requiere una
computadora equipada con algunas herramientas adicionales.

En este documento, le mostraremos algunas formas de usar su computadora como estación


de trabajo para desarrolladores. Sin embargo, no olvide que hay muchos factores que afectan
las acciones que deben (o no deben) realizarse: plataforma de hardware, sistema operativo,
versión del sistema operativo, etc. No conocemos su sistema, por lo que nuestra guía es
general. Le mostraremos la dirección: tendrá que encontrar soluciones usted mismo.

Desafortunadamente, todas nuestras sugerencias requieren acceso a Internet, ya sea


permanente o temporal. Debe descargar prácticamente todos los archivos de instalación de
los sitios de los productos. Otras herramientas solo funcionan en línea. Lo sentimos, no hay
soluciones.

Por cierto, puede ejecutar con éxito todos nuestros programas y ejemplos sin el uso de ningún
entorno especializado, solo utilizando un editor de texto estándar y herramientas de
compilación de línea de comandos.

Sin embargo, no lo recomendamos, y es por eso que usaremos algunas aplicaciones


especiales que nos permitirán utilizar una variedad de herramientas en un solo lugar.

Generalmente, hay dos formas en las que podemos asesorarle:

 usando IDE instalado localmente


 usando herramientas en línea

¿Qué es IDE?
IDE (Integrated Development Environment) es una aplicación de software que normalmente
consta de un editor de código, un compilador, un depurador y un generador de interfaz gráfica
de usuario (GUI).

La programación con un IDE tiene muchas ventajas: obtiene un kit de herramientas que
contiene todo lo que puede necesitar. Los programadores reales también suelen utilizar un
IDE. Un IDE le brinda un escritorio cómodo equipado con todos los medios, suministros y
ayudas.
También hay algunas desventajas. Los escritorios cómodos suelen pesar mucho. También los
IDE. Pueden consumir muchos recursos y, francamente hablando, probablemente no necesite
la mayoría de las funciones que pueden realizar.

El uso de herramientas en línea le permite escribir, almacenar y ejecutar su código sin instalar
nada. Imagínelo como un IDE simplificado al que se puede acceder de forma remota a través
de Internet. Eso significa que necesita dos cosas: un navegador de Internet y acceso a
Internet.

Si puede probar ambos enfoques, elija el que sea más conveniente para usted. Si no puede,
elija el que pueda usar.
-Elija su IDE
Hay muchos IDE en el mercado, tanto gratuitos como no gratuitos. Para tener una idea
aproximada de cuán grande es la lista de entornos de desarrollo integrados para el lenguaje
C, puede visitar esta página de Wikipedia .

Escribimos y probamos todos nuestros ejemplos con NetBeans. No significa que pensemos
que NetBeans es el mejor. Puede ser que otros productos estén más acordes con tus gustos y
hábitos, por lo que no necesitas seguir nuestro camino. Siéntete libre de tomar tus propias
decisiones. Sin embargo, tenga en cuenta que muy pocos de los ejercicios de este curso
pueden estar preconfigurados para NetBeans.

Por esta razón, debe recordar que algunos elementos prácticos del curso podrían no funcionar
en otros IDE de la forma en que pretendíamos que funcionaran.

Queremos mostrarle 5 IDE de muestra. Una vez más, esto no significa que pensemos que son
mejores que los demás; pueden ser más populares que muchos otros, o realmente nos gustan
por varias razones (no todas las razones técnicas). Aquí están:

(IMAGEN DE DESCARGA)

Microsoft © Visual Studio Express ®


Un entorno de desarrollo de plataforma única diseñado especialmente para la creación de programas C /
C ++, tanto bajo como para el sistema operativo MS Windows.

 sitio de inicio: https://www.visualstudio.com
 descargas: https://www.visualstudio.com/products/free-developer-offers-vs.aspx
 licencia: la versión gratuita propietaria, pero limitada, denominada Visual Studio Community,
está disponible para descargar; Se requiere registro.

Eclipse
Entorno de desarrollo multiplataforma diseñado especialmente para Java. Programación en C posible sin
configuración adicional (versión dedicada de C / C ++ disponible para descargar).

 sitio de inicio: https://eclipse.org
 descargas: https://www.eclipse.org/downloads
 licencia: Licencia pública Eclipse (gratuita y abierta).
NetBeans
Entorno de desarrollo multiplataforma diseñado especialmente para Java. Programación en C posible sin
configuración adicional (versión dedicada de C / C ++ disponible para descargar).

 sitio de inicio: https://netbeans.org
 descargas: https://netbeans.org/downloads/index.html
 licencia: Licencia de distribución y desarrollo común o Licencia pública GNU versión 2
(gratuita y abierta).
Código :: Bloques
Entorno de desarrollo multiplataforma diseñado para programación C / C ++. El instalador
predeterminado de Windows no incluye el compilador de C; en su lugar, utilice el que contiene "mingw-
setup" dentro del nombre del archivo.

 sitio de inicio: http://www.codeblocks.org
 descargas: http://www.codeblocks.org/downloads/binaries
 licencia: Licencia pública GNU versión 3 (gratuita y abierta).
XCode
Entorno de desarrollo de plataforma única diseñado especialmente para la creación de aplicaciones para
sistemas operativos diseñados por Apple Inc. Programación en C totalmente disponible.

 sitio de inicio: https://developer.apple.com/xcode
 descargas: https://developer.apple.com/xcode/download
 licencia: propietaria pero gratuita para los usuarios de Max OS X; integrado con OS X y
preinstalado.

Desafortunadamente, no podemos brindar ningún soporte en la instalación y / o uso de ningún IDE, ya


sea para los que mencionamos y los que no mencionamos. Si tiene problemas, busque ayuda del
proveedor de su software o (recomendado) de otros usuarios del producto en particular. Hay muchas
fuentes disponibles: preguntas frecuentes, foros, mesas de ayuda, comunidades, bases de conocimiento,
etc. Es poco probable que tu problema no le haya pasado ya a otra persona y, si le ha ocurrido, es muy
probable que esté resuelto. Busque soluciones y las encontrará.

Si es un usuario de Linux , intente utilizar las herramientas de su sistema principal para descargar e
instalar un IDE. Si usa cualquier otro sistema operativo, busque un paquete de instalación nativo
completo.
-Herramientas en línea: ideone
Para comenzar con la programación, no es necesario instalar nada. Si está leyendo esto, (lo más
probable) tiene un navegador de Internet que funciona y una conexión a Internet activa. Esto significa
que puede usar uno de los sitios a continuación y comenzar a programar de inmediato, así como así.

La primera es una herramienta llamada ideone disponible en http://ideone.com . Aunque no necesita


registrarse para comenzar su trabajo, le sugerimos que lo haga, ya que habilitará algunas características
adicionales valiosas.

Registrarse es fácil, ciertamente no más difícil que registrarse en el sitio web del Instituto C +
+ . También puede usar su cuenta de Facebook para iniciar sesión en ideone ; hará que todo el proceso
sea aún más rápido y conveniente.

Después de iniciar sesión, tendrá que personalizar un poco, y dos cosas son esenciales: cambie su
lenguaje de programación predeterminado a "C" (no olvide hacer eso) y luego habilite el resaltado de
sintaxis; hará que sea más fácil Haz tu trabajo.

Para probar el entorno de ideone , vaya a la pestaña "nuevo código" y simplemente copie y pegue el
siguiente texto en el campo del código fuente:

#include

int main(void)

printf("It's working\n");

return 0;

A continuación, haga clic en el botón "Idearlo". El texto que dice "Está funcionando" debería aparecer
casi de inmediato en el campo stdout; esto significa que su código fuente se ha compilado y ejecutado
felizmente.

¿Fácil? ¡Fácil! Pero ... hay un problema: no está permitido enviar más de 1000 presentaciones al
mes. Sin embargo, no creemos que eso te afecte realmente.

Algo importante: si tu programa lee algún dato de un usuario, tendrás que preparar los datos dentro
del campo stdin antes de que se ejecute el código (normalmente el proceso de lectura de entrada es
interactivo).

Visite http://ideone.com/faq para obtener más detalles.


Herramientas en línea: teclado
Codepad es otra herramienta en línea con una funcionalidad muy similar. Está disponible
en http://codepad.org .

Nuevamente, no necesita registrarse para comenzar su trabajo, y su funcionamiento principal es muy


similar al de ideone (aunque el teclado no ofrece tantas funciones útiles como ideone ). También te
permite crear tu propio proyecto para agrupar tus archivos.
-Edube interactivo
¡Tenemos más buenas noticias!

Este curso no requiere que instale ninguna aplicación de software ni utilice ningún sitio de
Internet externo para probar su código y hacer los ejercicios.

Para probar o experimentar con su código, puede utilizar un entorno de programación en línea dedicado
e interactivo: Edube Interactive, integrado en el curso.

Edube Interactive es una herramienta integrada con este curso, que se puede utilizar como un sandbox de
lenguaje C basado en navegador que permite ejecutar y probar el código discutido a lo largo del curso,
así como lanzar, realizar y realizar ejercicios de laboratorio diseñados específicamente para este curso.
Salvadera
La interfaz de Sandbox consta de tres partes principales:

 la ventana del Editor , que le permite escribir su código,


 la ventana de la consola , que le permite ver la salida de sus programas,
 y la barra de botones de acción , que le permite ejecutar su código, actualizar la ventana del
editor, descargar o cargar sus programas que se mostrarán en el editor, y el botón
Configuración, que le permite ajustar la configuración de visualización y cambiar entre
compiladores C / C ++ y Intérprete o simulador de Python.
Modo de estudio
El modo de estudio (lo está usando ahora) le permite navegar entre las páginas del curso, los
laboratorios, los cuestionarios y las pruebas, ya sea haciendo clic en las flechas ubicadas junto al título
de la página o abriendo el menú del curso, que mostrará todos los recursos disponibles en el curso o en
un módulo determinado.

Edube ha sido diseñado para enriquecer su experiencia de aprendizaje a lo largo del curso y permitirle
probar su código desde computadoras de escritorio, portátiles y dispositivos móviles. Para obtener la
mejor experiencia de aprendizaje, le recomendamos que aproveche todos los beneficios que vienen con
Edube Sandbox, Labs y Course Resources, así como que instale un entorno de programación local.

Edube Interactive todavía está en fase beta . Estamos trabajando arduamente para mejorar la
funcionalidad de la herramienta.

En todo momento, eres más que bienvenido a compartir tus pensamientos con nosotros y enviarnos tus
comentarios. Nos preocupamos por brindarle los mejores recursos de aprendizaje y experiencia de
aprendizaje posibles, por eso estaremos encantados de escuchar sus valiosas sugerencias y
observaciones. Solo se puede acceder a los laboratorios interactivos de Edube, los recursos de estudio,
los cuestionarios y las pruebas desde este curso. Aún así, ¡todos son más que bienvenidos a usar la
función Sandbox!

Ahora es el momento de comenzar a aprender programación real.


1.1.1.1 MODULO 1

CLA: Fundamentos de programación en C: Módulo 1


En este módulo, aprenderá sobre:

 idiomas: natural y artificial,


 lenguajes de máquina,
 lenguajes de programación de alto nivel,
 obtención del código máquina: proceso de compilación,
 escribir programas simples,
 variables,
 valores enteros en la vida real y en C,
 literales enteros,
 comentarios.
Lenguaje natural vs lenguaje de programación
Estamos aquí para mostrarle qué es el lenguaje "C" y para qué lo usamos. Consideremos por un
momento qué es el idioma en sí, no solo la “C”, sino cualquier idioma que use la gente. Intentaremos no
recurrir a definiciones que suenen científicas y, hablando informalmente, podemos decir que
un lenguaje es una herramienta para expresar y registrar los pensamientos humanos.

En otras palabras, es un mecanismo que conocemos nosotros y nuestros socios que nos permite a todos
entendernos y ser entendidos. Podemos usar nuestro idioma para hablar, escribir, leer, escuchar, pensar y
muchos otros propósitos.

Al menos un idioma nos acompaña a lo largo de toda nuestra vida: es nuestro idioma nativo, nuestra
lengua materna, que aprendemos casi inconscientemente desde el comienzo de nuestras
vidas. Aprenderemos otros idiomas, principalmente como resultado de una decisión consciente, quizás
forzada por condiciones sociales o necesidades comerciales, o quizás simplemente por interés personal.

Los lenguajes que usamos para comunicarnos con otras personas se llaman lenguajes naturales. Fueron
creados durante muchos siglos y aún están sujetos a cambios. Si ignoramos los lenguajes que han sido
creados artificialmente, como el esperanto o incluso el quenya (el idioma utilizado por los elfos en el
mundo de Tolkien), podemos decir que los lenguajes naturales han evolucionado de forma casi
independiente, de forma natural; una evolución sobre la que tenemos poco o ningún control.
Sin embargo, existen lenguajes cuya creación y desarrollo estuvo y sigue dictado por necesidades
específicas, y su desarrollo está totalmente sujeto al control de amplios grupos de personas, como los
comités y grupos de trabajo internacionales.

Las formas de estos lenguajes están definidas por estándares internacionales y, aunque muchas personas
los entienden, el intercambio de pensamientos entre seres humanos no es su aplicación más importante.

Estos lenguajes son, entre otros, lenguajes de programación . Probablemente ya esté familiarizado con


este concepto. Un lenguaje de programación se define por un conjunto de ciertas reglas rígidas, mucho
más inflexibles que cualquier lenguaje natural.

Por ejemplo, estas reglas determinan qué símbolos (letras, dígitos, signos de puntuación, etc.) se pueden
usar en el idioma. Esta parte de la definición del lenguaje se llama léxico .

Otro conjunto de reglas determina las formas adecuadas de clasificar los símbolos: esta es la sintaxis del
lenguaje.

También nos gustaría poder reconocer el significado de cada declaración expresada en el lenguaje dado,
y esto es lo que llamamos semántica .

Cualquier programa que escribamos debe ser correcto de estas tres formas: léxica, sintáctica y
semántica, de lo contrario no se ejecutará ni producirá ningún resultado aceptable. Puede estar seguro de
que en el transcurso de su carrera de programación, experimentará todos estos errores: errar es humano,
y estos humanos escriben programas de computadora.

El poder expresivo de los lenguajes de programación es mucho, mucho más débil que el que ofrecen los
lenguajes naturales. No podemos (aunque podemos intentarlo) usar un lenguaje de programación para
expresar emociones humanas, y es difícil imaginar una declaración de amor codificada en él. Es un
hecho simple que el mensaje incrustado dentro de un programa de computadora no está destinado a un
humano, sino a una máquina.

Algunos podrían preguntar por qué necesitamos un lenguaje de programación. Esa es una buena
pregunta, una que intentaremos responder por usted ahora.
Una computadora, incluso la más sofisticada técnicamente, carece incluso de un rastro de
inteligencia. Se podría decir que es como un perro bien entrenado: responde solo a
un conjunto predeterminado de comandos conocidos . Estos comandos reconocidos son muy
simples. Podemos imaginar que el ordenador responde a órdenes como “coger ese número, añadir otro
y guardar el resultado” . Un conjunto completo de comandos conocidos se denomina lista de
instrucciones , a veces abreviado como IL . Los diferentes tipos de computadoras pueden variar según
el tamaño de sus IL y las instrucciones en sí pueden diferir completamente de un modelo a otro.

El IL es de hecho el alfabeto de un idioma, comúnmente conocido como lenguaje de máquina . Este es


el lenguaje más simple y primario que podemos usar para dar comandos a nuestra
computadora. Podríamos decir que es la lengua materna de la computadora.

La programación de computadoras es el acto de componer comandos seleccionados (instrucciones) en el


orden adecuado para que se produzca el efecto deseado. El efecto en sí podría ser diferente en cada caso;
depende de la imaginación, el conocimiento y la experiencia del programador determinar cuál debería
ser ese efecto.

Es posible, y se usa a menudo en la práctica, que un programa de computadora se codifique directamente


en lenguaje de máquina usando instrucciones elementales (órdenes). Este tipo de programación es
tedioso, requiere mucho tiempo y es muy propenso a cometer errores del programador. En las primeras
etapas de la tecnología informática, era el único método disponible de programación y rápidamente
reveló algunos defectos graves. En primer lugar, la programación en lenguaje máquina requiere un
conocimiento exhaustivo del diseño del hardware de la computadora y su estructura interna. Esto
también significa que reemplazar la computadora por una que tenga un diseño diferente puede inutilizar
todo el conocimiento del programador. Además, los programas antiguos podrían volverse
completamente inútiles si la nueva computadora "usara" un IL diferente. Así, un programa escrito para
un tipo específico de computadora podría ser completamente inútil para otras computadoras y
viceversa. En segundo lugar, los programas escritos en lenguaje de máquina son muy difíciles de
entender para los humanos, incluidos los programadores experimentados. También lleva mucho tiempo
desarrollar programas en lenguaje de máquina, y también es muy costoso y engorroso.

Todas estas circunstancias llevaron a la necesidad de algún tipo de puente entre el lenguaje humano
(lenguaje natural) y el lenguaje informático (lenguaje máquina). Ese puente también es un lenguaje, un
lenguaje común intermedio para que humanos y computadoras trabajen juntos. Estos lenguajes a
menudo se denominan lenguajes de programación de alto nivel .

Un lenguaje de programación de alto nivel es al menos algo similar a un lenguaje natural; utiliza


símbolos, palabras y convenciones legibles para los humanos. Este lenguaje permite a los humanos
expresar comandos complejos para computadoras.

Puede preguntar cómo hacemos que las computadoras comprendan los programas escritos de esta
manera. El estímulo no funcionará, pero puede traducir su programa al lenguaje de máquina. Además,
la traducción puede realizarse por computadora, lo que hace que todo el proceso sea rápido y eficiente.

Observe cuántos beneficios puede obtener de un curso esto. No es necesario que aprenda muchos
lenguajes de máquina diferentes; solo necesita conocer un lenguaje de programación de alto nivel. Si hay
un traductor diseñado para una computadora específica, su programa podría ejecutarse sin ningún
problema. En otras palabras, los programas escritos en lenguajes de alto nivel podrían traducirse a
cualquier número de lenguajes de máquina diferentes y así hacerlos utilizables en muchas computadoras
diferentes. Esta característica de los lenguajes de programación de alto nivel se llama portabilidad .
Compilacion
La traducción a la que nos referimos se realiza mediante un programa informático especializado
llamado compilador . El proceso de traducción de un lenguaje de alto nivel a un lenguaje de máquina se
llama compilación .

Ahora volvamos a cuestiones más interesantes relacionadas con el proceso de creación de un nuevo
programa. Ya sabemos que la tarea principal es escribir un programa de acuerdo con las reglas del
lenguaje de programación elegido. Dicho programa (que de hecho es solo texto) se llama código fuente,
o simplemente fuente, mientras que el archivo que contiene la fuente se llama archivo fuente .

Para escribir el código fuente necesitas un editor de texto que te permita manipular el texto sin
información de formato (por esta razón, Microsoft Word no es una buena opción, a diferencia del Bloc
de notas). Este código se coloca en un archivo y el nombre del archivo debería darle alguna pista sobre
su contenido. Por ejemplo, es común que un archivo que contiene el código fuente en el lenguaje "C"
tenga su nombre terminado con el sufijo " .c ", por lo que si escribiste un programa de computadora y
decidiste llamarlo " proggie ", sería un buena idea poner el código fuente en un archivo llamado
" proggie.c ".

A continuación, debe compilar su código fuente . Para hacer esto, ejecuta un compilador, indicándole


dónde almacenó el código fuente que desea traducir al lenguaje de máquina. El compilador lee su
código, hace un análisis complejo y su primer objetivo es determinar si cometió o no algún error durante
la codificación. Estos análisis son muy reveladores, pero recuerde que están hechos por una máquina, no
por un humano, y no debe esperar demasiado de ellos. De acuerdo, si su error fue que intentó sumar dos
números usando “#” en lugar de “+”, el compilador le informará amablemente de su error.

Sin embargo, si escribió un "-" en lugar de un "+", el compilador ya no podrá adivinar que su intención
era sumar dos números, en lugar de restarlos. No espere que el compilador piense por usted. Pero no
hay razón para estar triste por eso, gracias a eso, todavía se necesitan desarrolladores.

Si el compilador no nota ningún error en su fuente, el resultado de su trabajo será un archivo que
contenga su programa traducido al lenguaje de máquina. Ese archivo se denomina comúnmente archivo
ejecutable . El nombre del archivo depende del compilador que utilice y del sistema operativo con el
que esté trabajando. Por ejemplo, la mayoría de los compiladores diseñados para el sistema Unix / Linux
crean un archivo de salida llamado " a.out " por defecto. Los compiladores diseñados para su uso en MS
Windows® pueden dar a este archivo el mismo nombre que el archivo fuente, solo cambiando el sufijo
de “ .c ” a “ .exe ”.
Debemos admitir que todo el proceso es un poco más complicado. Su código fuente puede ser completo
y dividido entre varios o incluso docenas de archivos fuente. También puede suceder que el programa no
haya sido escrito por usted solo, sino por un equipo, en cuyo caso la división de fuentes en varios
archivos es simplemente una necesidad. En tales casos, la compilación se divide en dos fases:
una compilación de su fuente, para traducirla al lenguaje de máquina, y una unión (o pegado) de su
código ejecutable con el código ejecutable derivado de otros desarrolladores en una sola y unificada
producto. La fase de "pegar" los diferentes códigos ejecutables se conoce comúnmente
como vinculación, mientras que el programa que conduce el proceso se denomina vinculador .

Algunas palabras sobre C


El lenguaje "C" es uno de los muchos lenguajes de programación que se utilizan actualmente y uno de
los más antiguos. Fue creado a principios de los años setenta del siglo XX por Dennis Ritchie mientras
trabajaba en Bell Laboratories. Algunos dicen que "C" fue un subproducto de un proyecto que condujo a
la primera versión del sistema operativo Unix. Hay muchos otros lenguajes de programación
ampliamente utilizados, algunos de ellos podrían considerarse descendientes de "C". Incluso heredaron
un nombre de su antepasado, como "C ++" o "C #". Otros tomaron prestadas algunas características de la
"C" original y agregaron muchas nuevas, como Perl, Java o JavaScript.

¿Cuál es el uso más común de "C"? Es el llamado lenguaje de programación de propósito general , es


decir, adecuado para casi cualquier proyecto de programación y, al mismo tiempo, no está
particularmente predestinado a ninguna clase de aplicaciones específica y estrecha. Es mejor si se utiliza
para codificar controladores, aplicaciones integradas o sistemas operativos (por ejemplo, el kernel de
Linux se codifica principalmente en "C"). También puede usarlo para construir servicios públicos
complejos. Te podemos asegurar que conocer el lenguaje “C” es muy útil si quieres aprender C ++, C #
o Java.

Le garantizamos que el tiempo que dedique a aprender el idioma "C" no será en vano.
Libro "El lenguaje de programación C"
Si se toma en serio el aprendizaje de la lengua "C", no se detendrá en leer este texto. Entre los cientos de
libros escritos sobre la lengua “C”, hay uno que es especialmente recomendable. El libro se ha publicado
decenas de veces en todo el mundo y está disponible en más de 20 idiomas (naturales) diferentes. Lo
recomendamos sin dudarlo. Sin duda alguna, es el mejor libro sobre programación en C jamás escrito; su
alta calidad puede demostrarse por el hecho de que uno de sus autores es Dennis Ritchie .

El segundo autor es Brian Kernighan , el compañero de trabajo de Dennis cuando trabajaron


juntos en Bell Labs. El libro se llama simplemente El lenguaje de programación C , pero no
se sorprenda cuando sus amigos lo llamen simplemente " Kernighan-Ritchie ".

Una vez que sea un programador competente, querrá tener acceso a una fuente de conocimiento a través
de la cual pueda comprender rápidamente las respuestas a las preguntas emergentes o simplemente llenar
los vacíos en su memoria. En lugar de un manual, necesitará un libro que describa brevemente los
estándares del idioma: todo lo que es realmente importante y nada más. Este libro es en realidad un
informe (mejorado y actualizado permanentemente), publicado por el comité de normalización
de ISO . La versión más reciente del informe es ISO / IEC 9899: TC3 . Puede encontrarlo en Internet y
buscarlo, pero aún es demasiado pronto para leerlo.

Mire eso cuando termine nuestro curso, no antes.


Tu primer programa
Ahora nos gustaría mostrarte un programa muy simple (y completamente inútil) escrito en el
lenguaje "C". Usando este ejemplo, le mostraremos algunas reglas básicas a medida que
modificamos el programa muchas veces, enriqueciéndolo con varios elementos y al mismo
tiempo ampliando nuestro conocimiento de programación.

Primero, definimos nuestras expectativas para el programa. Serán muy modestos. Queremos


que aparezca en pantalla un texto breve y sin sentido. Supongamos que el texto debe
proclamar al mundo:

It's me, your first program.

No esperamos nada más de él hasta ahora.

¿Qué pasos adicionales debería realizar nuestro primer programa? Intentemos enumerarlos


aquí:

1. para empezar ;
2. para escribir el texto en la pantalla;
3. de parada

Este tipo de descripción estructurada y semiformal de cada paso del programa se


denomina algoritmo . Las fuentes de esta palabra se remontan al idioma árabe, y se originó
en la época medieval temprana, lo que puede ser el pretexto para señalar que los inicios de la
programación de computadoras se encuentran en tiempos muy antiguos.

Ahora es el momento de ver nuestro programa. Está en el lado derecho de la pantalla, en el


editor.

Parece un poco misterioso, ¿no? Ahora veremos detenidamente cada línea del programa,
explicando su significado y propósito. La descripción no es particularmente precisa y aquellos
que conocen el lenguaje "C" probablemente ya concluirían que es demasiado simplista y algo
infantil. Hicimos esto a propósito, no es nuestra intención construir Roma en un día.

Empecemos.
Preste atención al carácter  # (hash) al comienzo de la primera línea. Significa que el contenido
de esta línea es una directiva de preprocesador . Te contaremos más sobre
el preprocesador un poco más tarde, pero por ahora solo diremos que es una parte separada
del compilador, cuya tarea es pre-leer el texto del programa y hacer algunas modificaciones a
eso. El prefijo "pre" sugiere que estas operaciones se realizan antes de que tenga lugar el
procesamiento completo (compilación).

Los cambios que introduce el preprocesador están controlados completamente por


sus directivas . En el programa de ejemplo, estamos tratando con la directiva include. Cuando
el preprocesador encuentra esa directiva, reemplaza la directiva con el contenido del archivo
cuyo nombre aparece en la directiva (en nuestro caso, este es el archivo  stdio.h ). Nota: los
cambios realizados por el preprocesador nunca modifican el contenido de su archivo fuente de
ninguna manera. Cualquier alteración se realiza en una copia volátil de su programa, que
desaparece inmediatamente después de que el compilador termina su trabajo.

Puede preguntar por qué queremos que el preprocesador incluya el contenido de un archivo
completamente desconocido  stdio.h . Escribir un programa es similar a construir un edificio
con bloques prefabricados. En nuestro programa, usaremos dicho bloque y lo usaremos
cuando queramos escribir algo en la pantalla. Ese bloque se llama puts (puede encontrarlo
dentro de nuestro código), pero el compilador no sabe nada al respecto hasta ahora. En
particular, el compilador no tiene idea de que put es un nombre válido para ese bloque
mientras que put no lo es. El compilador debe ser consciente de esto. Esta información
preliminar que necesita el compilador se incluye en los archivos cuyos nombres suelen
terminar con " .h " ( encabezado ). Estos archivos se denominan comúnmente archivos de
encabezado .

El archivo stdio.h (definido por el estándar del lenguaje “C”) contiene una colección de


información preliminar sobre bloques prefabricados que un programa puede usar para escribir
texto en la pantalla o leer letras desde el teclado. Entonces, cuando nuestro programa va a
escribir algo, obviamente usará un bloque llamado put, que puede hacer el truco. No
queremos que el compilador se sorprenda, por lo que debemos advertirle sobre eso. Los
desarrolladores del compilador colocan un conjunto de dicha información anticipatoria en el
archivo stdio.h. Solo tenemos que usar el archivo. Esto es exactamente lo que esperamos de
la  include directiva.

También puede preguntar dónde  stdio.h se encuentra el archivo. La respuesta es simple


pero no tan precisa como podría desear, pero ese no es nuestro problema en este
momento. El preprocesador sabe dónde está. Volveremos al tema cuando comencemos la
historia detallada del preprocesamiento.
Ya hemos mencionado algo sobre los bloques . Vayamos un poco más profundo ahora. Uno
de los tipos más comunes de bloques que se utilizan para construir programas "C" son
las funciones . Si entiende las funciones solo en un sentido puramente matemático, esta es
una pista bastante buena. Imagina una función como una caja negra , donde puedes insertar
algo en ella (no siempre es necesario) y sacar algo nuevo como si fuera un sombrero
mágico. Las cosas que se colocan en el cuadro se denominan argumentos
de función (o parámetros de función ). Las cosas que se sacan de la caja se
denominan resultados de función. Además, una función puede hacer algo más al margen. Si
esto suena bastante vago, no se preocupe, hablaremos de las funciones muchas veces con
más detalle.

Volvamos a nuestro programa. El estándar del lenguaje "C" asume que, entre los muchos
bloques diferentes que se pueden poner en un programa, siempre debe estar presente un
bloque específico, de lo contrario el programa no será correcto. Este bloque es siempre una
función del mismo nombre:  main .

Cada función en "C" comienza con el siguiente conjunto de información:

 ¿cuál es el resultado de la función?


 cual es el nombre de la funcion?
 ¿cuántos parámetros tiene la función y cuáles son sus nombres ?

Eche un vistazo a nuestro programa e intente leerlo correctamente, aceptando el hecho de


que es posible que aún no comprenda todo completamente.

 el resultado de la función es un valor entero (lo leemos de la palabra  int que es la


abreviatura de entero )
 el nombre de la función es  main (ya sabemos por qué)
 la función no requiere ningún parámetro (que leemos de la palabra  void )

Un conjunto de información como este a veces se denomina prototipo , y es como una


etiqueta adherida a una función que anuncia cómo podemos usar esa función en su
programa. El prototipo no dice nada sobre para qué está destinada la función. Está escrito
dentro de la función y el interior de la función se llama cuerpo de la función . El cuerpo
funcional comienza donde  { se coloca el primer corchete de apertura y termina donde  } se
coloca el corchete de cierre correspondiente . Puede sonar sorprendente, pero el cuerpo de la
función puede estar vacío; esto solo significa que la función no hace nada.

Incluso podemos imaginar una función que sea perezosa, estaría codificada así:

void lazy(void) { }

Este dron no da ningún resultado (el primero  void ), su nombre es “perezoso”, no toma ningún
parámetro (el segundo  void ) y no hace absolutamente nada (el espacio en blanco entre
paréntesis).

Por cierto, los nombres de las funciones están sujetos a restricciones bastante
rígidas. Hablaremos de esto más tarde.
Dentro del cuerpo de la función principal debemos escribir lo que se supone que debe hacer
nuestra función (y por lo tanto el programa). Miramos dentro y encontramos una referencia a
un bloque llamado put . Esto es lo que llamamos una invocación de función . Ahora
consideremos algunos detalles importantes.

En primer lugar, fíjese en el emícola al final de la línea. Cada instrucción (precisamente: cada


instrucción) en "C" debe terminar con un punto y coma ; sin él, el programa será
incorrecto. Una declaración como esta dice: instruya a la función llamada puts para que
muestre texto en la pantalla. Podría preguntar: ¿cómo sabemos que la función de venta hará
eso por nosotros? Bueno, lo sabemos por los estándares del lenguaje "C", pero también, el
nombre de la función es una abreviatura de " PUT String ". El texto que se pretende mostrar
en pantalla se pasa a la función como parámetro de función. Recuerde que el nombre de la
función invocada siempre debe ir seguido de un par de paréntesis  ( e  ) incluso cuando la
función no espera ningún parámetro de nuestra parte.

En segundo lugar, el parámetro de la función pone es texto (cadena). Para simplificar,


podemos suponer que las cadenas de un programa en "C" siempre están entre comillas; de
esa manera, el compilador distingue el texto que se envía al usuario del programa y el texto
que se pretende compilar (traducido al lenguaje de máquina ). Esta distinción es muy
importante. Echar un vistazo:
Estamos llegando al final ahora. Solo queda una línea por explicar en nuestro programa. Esto
es:

return 0;

Además de la invocación de la función, esta es otra declaración del lenguaje "C". Su nombre


es simplemente return y eso es exactamente lo que hace. Usado en la función, provoca el
final de la ejecución de la función . Si realiza en  return algún lugar dentro de una función,
esta función interrumpe inmediatamente su ejecución. El cero que ves después de la palabra
retorno es el resultado de tu función  main . Esto es importante: así es como su programa le
dice al sistema operativo el siguiente mensaje: Hice lo que tenía que hacer, nada me detuvo y
todo está bien. Si tuvieras que escribir:

return 1;

significaría que algo salió mal, no permitió que su programa tuviera éxito y el sistema
operativo podría usar esa información para reaccionar de la manera más apropiada.

¿Eso es todo? ¡Si! Veamos nuevamente nuestro programa y veamos qué está sucediendo


paso a paso:

 introducimos la función  main en nuestro programa; se ejecutará cuando inicie el


programa;
 invocamos la función  puts dentro de la función principal - imprimirá el texto en la
pantalla;
 el programa finaliza inmediatamente después de la impresión, lo que indica que se ha
logrado todo lo que esperaba lograr.

Esperamos que no haya sido tan difícil como parecía a primera vista. Ahora intentaremos
persuadir a la computadora para que calcule algo por nosotros. De hecho, para eso usamos
las computadoras.
Nivel de dificultad
Muy fácil

Objetivos
Familiarice al estudiante con:

 Escribiendo un primer programa


 Impresión en pantalla
 La función principal
Guión
Escriba su primer programa en el lenguaje "C". Simplemente escriba su nombre 3
veces. Recuerde incluir una  return declaración y hacer un uso adecuado de la  main función.

int main () {/ * Inserte su código aquí * / / * Inserte su código aquí * / / * Inserte su código aquí * /
return 0; }
Números y cómo los ven las computadoras
¿Sabes cómo las computadoras realizan cálculos con números? Quizás haya oído hablar del sistema
binario y sepa que es el sistema que utilizan las computadoras para almacenar números y que pueden
realizar cualquier operación sobre ellos. No vamos a explorar aquí las complejidades de los sistemas
numéricos posicionales, pero diremos que los números que manejan las computadoras modernas son de
dos tipos:

 enteros , es decir, los que carecen de la parte fraccionaria;


 números de punto flotante (o simplemente flotantes), que contienen (o pueden contener) la
parte fraccionaria.

Esta definición no es del todo precisa, pero lo suficientemente buena para nuestros propósitos. Esta
distinción es muy importante y el límite entre estos dos tipos de números es muy estricto . Ambos tipos
de números difieren significativamente en cómo se almacenan en la memoria de una computadora y en
el rango de valores aceptables. Además, la característica de un número que determina su tipo, rango y
aplicación se llama tipo .

En este punto, nos hemos hecho amigos de dos tipos de lenguaje “C”: un tipo entero (conocido
como int ) y un tipo de punto flotante (conocido como float ).

Por ahora, dejemos a un lado los números de punto flotante (volveremos a ellos pronto) y consideremos
la pregunta, tal vez un poco banal a primera vista, de cómo el lenguaje “C” reconoce los números
enteros.

Bueno, es casi de la misma manera en que estás acostumbrado a escribirlos con un lápiz sobre papel: es
simplemente una cadena de dígitos que componen el número. Pero hay una reserva: no debe insertar
caracteres que no sean dígitos dentro del número. Tomemos, por ejemplo, el número once millones
ciento once mil ciento once. Si tomaras un lápiz en tu mano ahora mismo, escribirías el número así:

11,111,111

o (si eres polaco o alemán) así:

11.111.111

o (si eres polaco o alemán) así:

11 111 111

Obviamente, esto hace que sea más fácil de leer si el número está compuesto por muchos dígitos. Sin
embargo, en "C" está prohibido. Usted debe escribir este número de la siguiente manera:

11111111

De lo contrario, se expondría a algunos comentarios mordaces del compilador. ¿Cómo codificamos


números negativos en "C"? Como de costumbre, agregando un signo menos. Puedes escribir:

-11111111
No es necesario que los números positivos estén precedidos por el signo más, pero puede hacerlo si lo
desea. Las siguientes líneas describen el mismo número:

+123

123

Por ahora, solo trataremos con números enteros; presentaremos números de punto flotante en el próximo
capítulo.

Hay dos convenciones adicionales, desconocidas para el mundo de las matemáticas. El primero nos
permite usar los números en una representación octal. Si un número entero está precedido por
el dígito 0 , se tratará como un valor octal . Esto significa que el número debe contener dígitos tomados
del rango [0..7] únicamente.

0123

es un número octal con un valor decimal igual a 83.

0x123

es un número hexadecimal con un valor decimal igual a 291.

Tal vez desee ver el resultado de su cálculo. Hablaremos de esto más adelante, pero ahora es un buen
momento para mencionar cómo imprimir el valor de un número.

Bueno, para imprimir un número entero, debe usar (esta es solo una forma simple):

printf("%d\n", IntegerNumberOrExpression);

Para imprimir un número de punto flotante, debe usar (este es solo un formulario simple):

printf("%f\n", FloatNumberOrExpression);

En ambos casos, primero debe incluir el archivo de encabezado stdio (como hicimos en el primer
programa):

#include
Una variable es variable
Parece bastante obvio que el lenguaje "C" nos permite escribir números. No te sorprenderá que podamos
hacer algunas operaciones aritméticas con estos números: sumarlos, restarlos, multiplicarlos y
dividirlos. Lo haremos pronto. Pero es una pregunta perfectamente normal preguntar cómo almacenar
los resultados de estas operaciones para usarlos en otras operaciones. Hay " contenedores " especiales
para este propósito y estos contenedores se denominan variables . El nombre sugiere que el contenido
de un contenedor se puede variar en (casi) cualquier forma.

¿Qué tiene cada variable?

 un nombre ;
 un tipo ;
 un valor ;
Nombres variables
Comencemos nuestra discusión con los problemas relacionados con el nombre de una variable . Las
variables no aparecen en nuestro programa de forma mágica. Nosotros (como desarrolladores) decidimos
cuántas y qué variables queremos que existan en nuestro programa. También les damos sus nombres,
casi convirtiéndonos en sus padrinos. Si quieres darle un nombre a una variable debes seguir unas reglas
estrictas:

 el nombre de la variable debe estar compuesto por letras latinas en mayúsculas o minúsculas,


dígitos y el carácter _ ( guión bajo );
 el nombre de la variable debe comenzar con una letra ;
 el carácter subrayado es una letra (extraño pero cierto);
 las letras mayúsculas y minúsculas se tratan de manera diferente (un poco diferente que en el
mundo real: Alice y ALICE son los mismos nombres de pila, pero son dos nombres de variable
diferentes, por lo tanto, dos variables diferentes);

Tenga en cuenta que las mismas restricciones se aplican a los nombres de funciones .

El estándar del lenguaje "C" no impone restricciones sobre la longitud de los nombres de las variables,
pero un compilador específico puede tener una opinión diferente sobre este tema. No se preocupe; por lo
general, la limitación se establece tan alta que es poco probable que desee utilizar nombres de variables
(o funciones) tan largos.
Aquí hay algunos nombres de variables correctos , pero no siempre convenientes:

 variable
 yo
 t10
 Tipo de cambio
 mostrador
 DaysToTheEndOfTheWorld
 El nombre de una variable que es tan largo que no será capaz de escribir sin errores
 _

El apellido en particular puede generar preocupaciones, pero desde el punto de vista del compilador no
tiene nada de malo.

Y ahora algunos nombres incorrectos :

 10t (no comienza con una letra)


 Adiós_Señora (contiene caracteres ilegales)
 Tipo de cambio (contiene un espacio)
Tipos de variables
El tipo es un atributo que define de forma única qué valores se pueden almacenar dentro de la
variable. Ya conocemos los tipos de entero ( int ) y punto flotante ( float ). El valor de una variable es lo
que le hemos puesto. Por supuesto, solo puede ingresar un valor que sea compatible con el tipo de
variable. Solo se puede asignar un valor entero a una variable entera (para decir lo mismo pero de una
manera ligeramente diferente, a una variable de tipo int ). El compilador no nos permitirá poner un
número de punto flotante allí.

Hablemos ahora de dos cosas importantes: cómo se crean las variables y cómo poner un valor dentro de
ellas (o más bien, cómo darles un valor).

La variable surge como resultado de una declaración . Una declaración es una estructura sintáctica que
une un nombre, proporcionado por el programador, a un tipo específico ofrecido por el lenguaje "C". La
construcción de la declaración (en otras palabras, la sintaxis de la declaración) es simple: simplemente
use el nombre del tipo deseado, luego el nombre de la variable (o los nombres de las variables separados
por comas si hay más de uno). Toda la declaración termina con un punto y coma.
Declaración de variables
Intentemos declarar una variable de tipo int llamada Counter . La parte relevante del programa se ve así:

int Counter;

Ahora, ¿qué piensas? ¿Qué declara el siguiente fragmento de un programa?

int variable1, account_balance, invoices;


Cheque

Se declara tres variables de tipo int con nombre


(respectivamente) variable1, account_balancey invoices.

Recuerde que puede usar tantas declaraciones de variables como necesite para lograr su objetivo.

Valores variables
¿Y cómo le damos un valor a la variable recién declarada? Necesita utilizar el operador de
asignación . Aunque esto suena bastante misterioso, el operador tiene una sintaxis simple y una
interpretación inequívoca. El operador de asignación parece muy familiar, aquí está:

Veamos algunos ejemplos:

Counter = 1;

La declaración anterior dice: asignar un valor de  1 a una variable nombrada  Counter , o un poco más
corto: asignar  1 a  Counter .

Algunos usan una convención diferente y la leen como: se  Counter convierte  1 .

Otro ejemplo:

result = 100 + 200;

En este caso, el nuevo valor de la variable  Result será el resultado de sumar  100 a  200 , que
probablemente no es una sorpresa para usted, ¿verdad?
Y ahora un ejemplo un poco más difícil:

x = x + 1;

Al ver eso, un matemático probablemente protestaría: ningún valor puede ser igual a sí mismo más
uno. Ésta es una contradicción.

Pero en el lenguaje “C” el signo  = no significa que es igual a , sino que asigna un valor .

Entonces, ¿cómo leemos tal registro en el programa? Así es como lo hacemos:

Tome el valor actual de la variable  x , agréguelo  1 y almacene el resultado en la variable  x .

En efecto, el valor de la variable  x se incrementó en uno, lo que no tiene nada que ver con comparar la
variable con cualquier valor.
Palabras clave: por qué son las claves
Eche un vistazo al lado derecho de la pantalla: hay una lista de palabras que desempeñan un papel muy
especial en cada programa de lenguaje "C". Se llaman palabras clave o (más precisamente) palabras
clave reservadas .

Están reservados porque no debe usarlos como nombres: ni para sus variables, ni funciones, ni ninguna
otra entidad con nombre que desee crear. El significado de la palabra reservada está predefinido y no
debe cambiarse de ninguna manera. Afortunadamente, debido a que el compilador “C” distingue
entre mayúsculas y minúsculas , puede modificar cualquiera de estas palabras cambiando el caso de
cualquier letra, creando así una nueva palabra, que ya no está reservada.

Por ejemplo, no puede hacer esto:

int int;

No debe tener una variable nombrada  int , está prohibido.

Pero puedes hacer esto en su lugar:

int Int;

El compilador estará contento, muy contento.


Comentarios en C
Ahora vamos a hacer algunos comentarios. No nos referimos a comentarios sobre sus logros o nuestros
logros. Nos referimos a todos los demás comentarios, es decir, comentarios sobre el programa
y dentro del programa al mismo tiempo.

El desarrollador puede querer poner algunas palabras dirigidas no al compilador sino a los humanos,
generalmente para explicar a otros lectores del código cómo funcionan los trucos utilizados en el
código, o el significado de las variables y funciones y, finalmente, para poder Mantenga la información
almacenada sobre quién es el autor y cuándo se escribió el programa.

Los desarrolladores buenos (y responsables) describen cada función; en particular, explican el papel de
los parámetros, el valor que devuelve la función como resultado y lo que realmente hace la función.

¿Cómo dejamos este rastro en el código fuente? Tiene que hacerse de una manera que no obligue al
compilador a interpretarlo como parte del código. Una observación insertada en un programa que se
omite en el momento de la compilación se denomina comentario .

Si queremos ser precisos, debemos decir que cada comentario es léxico equivalente a un
espacio . Siempre que el compilador encuentra un comentario en su programa, el comentario es
completamente transparente para él; desde el punto de vista del compilador, este es solo un espacio
(independientemente de la longitud del comentario real).

En el idioma "C", un comentario es un texto que comienza con el par de caracteres:

/*

y termina con el par de personajes:

*/

El comentario puede abarcar varias líneas o puede ocupar solo una línea o solo parte de una línea.
Aquí puede ver un ejemplo de un comentario cuidadoso y justo ingresado en el programa:

/* Counter variable counts the number of sheep in the meadow */

int Counter;

Cualquier desarrollador que lea el programa será consciente del verdadero significado de la variable. El
desarrollador leerá el código más rápido y le llevará menos tiempo comprenderlo.

Los desarrolladores a menudo colocan una nota al principio de la fuente informándonos de cuándo
escribieron el programa y quién lo modificó y por qué. La nota puede aparecer así:

/*************************************************

Counting sheep version 1.0

Author: Ronald Sleepyhead, 2012

email: rs@insomnia.org

Changes:

2012-09-13: Ginny Drowsy: counting black sheep improved

*************************************************/

A pesar de la estructura complicada y la multitud de estrellas, la condición que dice cómo se debe
comenzar y terminar el comentario se cumple completamente.

Los comentarios pueden ser útiles en otro aspecto: puede usarlos para marcar un fragmento de código
que actualmente no es necesario por alguna razón. A menudo hacemos esto durante la prueba de un
programa para aislar el lugar donde podría estar oculto un error.

Lo que nos queda ahora es ocuparnos de otro aspecto de este caso. Los compiladores difieren en la
evaluación de si se puede colocar otro comentario dentro de un solo comentario. Considere el siguiente
programa:

/* int i; /* int j; */ int k; */

La pregunta es: ¿la declaración de variable es  k un comentario o no? Si el compilador permite el uso de
comentarios dentro de los comentarios, todo el registro se tratará como un comentario. De lo contrario, si
el compilador no acepta tales comentarios (a veces llamados comentarios anidados ) verá la
declaración de la variable  k como una parte normal y visible del programa y el último par de  */ se
considerará inválido porque el compilador no puede determinar dónde comenzó el comentario.

Este es ciertamente un argumento en contra de anidar comentarios en sus programas.


Nivel de dificultad
Fácil

Objetivos
Familiarice al estudiante con:

 Corregir errores en un programa


 Números enteros
 Impresión en pantalla
Guión
Consulta el programa en el editor. Encuentre todos los posibles errores de compilación y
errores lógicos. Arreglalos.

Su versión del programa debe imprimir el mismo resultado que el resultado esperado. Antes
de utilizar el compilador, intente encontrar los errores solo mediante el análisis de código
manual.

Rendimiento esperado
The value of six is: 6
Nivel de dificultad
Fácil

Objetivos
Familiarice al estudiante con:

 Corregir errores en un programa


 Números enteros
 Impresión en pantalla
Guión
Consulta el programa en el editor. Encuentre todos los posibles errores de compilación y
errores lógicos. Arreglalos.

Su versión del programa debe imprimir el mismo resultado que el resultado esperado. Antes
de utilizar el compilador, intente encontrar los errores solo mediante el análisis de código
manual.

Rendimiento esperado
The value of seven is: 7

The value of eight is: 8

También podría gustarte