Introducción
Para entender un poco esto vamos a realizar un pequeño programa en nuestro compilador y luego explicaremos el porqué de cada una de las cosas.
#include <stdio.h> void main (void) { printf(“hola, este es nuestro primer programa en c”); }
Todos los programas en C deben tener ciertos componentes fijos. Veamos lo que usamos en este programa.
- #include <stdio.h>: Los archivos .h son los archivos de cabecera en C. Con esta línea de código se indica al compilador que se desea emplear, en el programa redactado, alguna función que está declarada en el archivo de biblioteca h. Este archivo contiene la declaración de una colección de programas de entrada y salida por consola (pantalla y teclado). STDIO.H hace referencia a STANDAR INPUT OUTPUT.
- main: Es el nombre de una función. Es la función principal y establece el punto donde comienza la ejecución del programa. La función main es necesaria en cualquier programa de C que se desee ejecutar instrucciones. UN CODIGO SERÁ EJECUTABLE SI Y SÓLO SI DISPONE DE LA FUNCION main.
- void main (void): Los paréntesis se encuentran siempre después de un identificador de función. Entre ellos se recogen los parámetros que se pasa a la función llamada. En este caso no se recoge ningún parámetro por lo cual se indica de tipo void (vacio). Delante del nombre de la función principal (main) también viene la palabra void, por que la función principal que hemos realizado no devuelve ningún valor.
- ; : Toda sentencia en C termina con el punto y coma. En C, se entiendo por sentencia todo lo que tenga, al final, un punto y coma. La línea antes comentada #include, no termina con un punto y coma porque no es una sentencia: es una directiva.
- {}: Indican el princio y el final de todo bloque de programa. Cualquier conjunto de sentencias que se deseen agrupar, para formar entre ellas una sentencia compuesta o bloque, irán marcadas por un par de llaves: una antes de la primara sentencia agrupar; la otra, de cierre, después de la última sentencia. Una función es un bloque de programa y debe, por tanto, llevarlas a su inicio y a su fin.
Sentencias simples y sentencias compuestas
Una sentencias simple es cualquier expresión valida en la sintaxis de C que termine con el carácter de punto y como. Sentencia compuesta es una sentencia formada por una o varias sentencias simples.
La sentencia simple queda definida cuando la terminamos una expresión con un punto y coma. La sentencia compuesta se inicia con la llave de apertura ({) y se termina con una llave de clausura (}).
Tipos de datos y variables en C
Un tipo de dato define de forma explícita un conjunto de valores, denominado dominio, sobre el cual se pueden realizar una serie de operaciones. Un valor es un elemento del conjunto que hemos llamado dominio. Una variable es un espacio memoria destinada al almacenamiento de un valor de un tipo de dato concreto, referenciada por un nombre.
Declaración de variables.
Veamos cómo se crea una variable en C.
Toda variable debe ser declarada previa a su uso. Declarar una variable es indicar al programa un identificador o nombre para esa variable, y el tipo de dato para la que se crea esa variable.
La declaración de variables tiene la siguiente sintaxis:
tipo var_1;
Donde tipo es el nombre del tipo de variable que se desea crear, y var_1, es el nombre o identificador de esa variable.
Tipos de variables
Estos son los tipos de variables primitivas
- char, sirve para almacenar caracteres alfanuméricos.
- int, sirve para almacenar valores numéricos.
- float, sirve para almacenar valores numéricos con punto flotante ( valores con coma)
Operadores
Operadores de asignación
El operador de asignación permite modificar los valores de las variables y alterar, por tanto, el estado de la memoria.
El carácter que representa al operador asignación es el carácter `=´. La forma general de este operador es:
nombre_variable = expresión;
Donde expresión puede ser una literal, otra variable, o una combinación de variables, literales, operadores y funciones. Podemos definirlo como una secuencia de operando y operadores que unidos según ciertas reglas producen un resultado.
Este signo en C no significa igualdad en el sentido matemático al que estamos acostumbrados, sino asignación. Nos pude llevar a equívocos expresiones como la siguiente:
a=a+1;
Ante esta instrucción, el procesador toma el valor de la variable a, y lo incrementa en una unidad y almacena el valor en nuevamente en la variable a.
Operadores aritméticos
Los operadores aritméticos son:
- Suma, el identificador de este operador es el carácter `+´
- Resta, el identificador de este operador es el carácter `-´
- Producto, el identificador de este operador es el carácter `*´
- Cociente o División, el identificador de este operador es el carácter `/´
- Modulo, el identificador de este operador es el carácter `%´
- Incremento y decremento, Estos dos operadores no existen en otros lenguajes. El identificado de estos operadores son los caracteres “++” para el incremente y “- -“ para el decremento.
La expresión “a++;” equivale a la expresión “a=a + 1;”. Y la expresión “a- -;” equivale a “a=a-1;”.
Operadores relaciones y lógicos.
Los operadores relaciones y los operadores lógicos crean expresión que se evalúan como verdaderas o falsas.
En lenguaje C tomo como falsa cualquier expresión que se evalúe como 0. Y toma como verdadera cualquier otra evaluación de la expresión. Y cuando en C se evalúa una expresión con operados relaciones y/o lógicos, la expresión queda evaluada a 0 si el resultado es falso y a 1 si el resultado es verdadero.
Los operadores relaciones son seis:
Igual que | == |
Distintos | != |
Mayor que | > |
Mayor o igual que | >= |
Menor que | < |
Menor o igual que | <= |
Los operadores lógicos son:
Y – AND | && |
O – OR | || |
Negación – Not | ! |
Mayor o igual que | >= |
Menor que | < |
Menor o igual que | <= |
Funciones de entrada y salida por consola
Las funciones de entrada y salida estándar de datos por consola, están declaradas en un archivo de cabeceras llamado stdio.h. Siempre que deseemos usar estas funciones deberemos añadir, al principio del código de nuestro programa, la directriz #include <stdio.h>
Salida de datos. La función printf()
El prototipo de la función es el siguiente:
int printf(const char *cadena_control[,argumeto,…]);
La función, como toda función lleva después del nombre un par de paréntesis. Entre ellos va redactado el texto que deseamos que quede impreso en la pantalla. La cadena_control indica al texto que debe ser impreso, con unas espesificaciones que indican el formato de esa impresión; es una cadena de caracteres recogidos entre comillas, que indica el texto que se ha de mostrar por pantalla.
Para comenzar a practicar, comenzamos por escribir en el editor de C el siguiente código.
#include <stdio.h> void main (void) { printf(“ El texto que va a mostrar la pantalla”); }
Que sucede?
Si introducimos ahora otra instrucción con la función printf a continuación y debajo de la otra, por ejemplo
printf(“otro texto”);
Que sucede?
Ahora si le agregamos el modificador \n
#include <stdio.h> void main (void) { printf(“ El texto que va a mostrar la pantalla\n”); printf(“ otro texto”); }
Cuando en un texto a imprimir se desea intercalar el valor de una variable, en la posición donde debería ir ese valor se coloca el carácter % seguido de algunos caracteres. Según los caracteres que se introduzcan, se imprimirá un valor de un tipo de dato concreto, con un formato de presentación determinado. Este carácter % y esos caracteres que le sigan son los especificadores de formato. Al final la cadena, después de las comillas de cierre, se coloca una coma y el nombre de la variable que se desea imprimir.
Ejemplo:
#include <stdio.h> void main(void) { int a=5, b=10, c; c=a+b; printf(“el valor de la variable c es %d \n”,c); b++; printf(“el valor de la variable b es %d \n”,b); printf(“el valor de la variable a es %d \n”,a); }
Los especificadores de formatos más comunes que vamos a utilizar son:
- %d, muestra un valor entero, en base decimal
- %f, muestra un valor real
- %c, muestra un carácter alfanumérico
- %s, muestra una cadena de caracteres
Entrada de datos. La función scanf()
La función scanf puede leer datos ingresados desde el teclado y los almacena cuando presionamos la tecla enter.
El prototipo de la función es:
int scanf(const char *cadena_control[,direcciones,…]);
La función scanf puede leer del teclado tantas entradas como se le indiquen. De todas formas, se recomienda usar una función scanf para cada entrada distinta.
El valor que devuelve la función es el número de entras diferentes que ha recibido. Si la función ha sufrido algún error, entonces devuelve un valor que significa error (por ejemplo, un valor negativo).
En la cadena de control se indica el tipo de dato del valor que se espera recibir por teclado. No hay que escribir texto alguno en la cadena de control de la función scanf, únicamente el especificador de formato.
El formato de este especificador es similar al presentado en la función printf, un carácter % seguido de una o dos letras que indican el tipo de dato que se espera.
Ademas de la cadena de control, la función scanf requiere de otro parámetro, el lugar donde se debe almacenar el valor introducido. La función scanf espera, como segundo, el lugar donde se aloja la variable, no el nombre. Espera la dirección de la variable.
Para poder saber la dirección de una variable, C dispone de un operador &. El operador de dirección, prefijo a una variable, devuelve la dirección de memoria de esa variable.
Resumiendo
El uso de las funciones printf() y scanf(), ambas están declaradas en el archivo de cabecera stdio.h. Cuando queremos hacer que un programa use alguna de estas funciones debemos incluir #include<stdio.h>
Estructuras de Control
Estructuras de control condicionales
Las estructuras de control condicionales que vamos a ver son bifurcación abierta y cerrada
La bifurcación abierta. La sentencia if.
La sentencia que está preciedia por la estructura de control condicionada se ejecutará si la condición de la estructura de control es verdadera, en cado control no se ejecuta la instrucción condicionada.
La sintaxis de la estructura de control condicionada abierta es la siguiente:
if (condición) sentencia;
Si la condición es verdadera ejecuta la sentencia, si la condición es falsa no ejecuta la sentencia.
Ejemplo
#include <stdio.h> void main(void) { int a=5; if (a>3) printf(“el valor de la variable a es mayor que 3\n”); }
La bifurcación cerrada. La sentencia if – else.
En la bifurcación cerrada, la sentencia está precedida por una estructura de control condicionada, donde se ejecutará una sentencia si la condición e verdadera y otra si la condición es falsa.
La sintaxis de la estructura de control condicionada cerrada es la siguiente:
if (condición) sentencia1; else sentencia2;
Si la condición es verdadera, se ejecuta la sentencia llamada sentencia1. Si la condición es falsa se ejecuta la sentencia llamada sentencia2.
Ejemplo
#include <stdio.h> void main(void) { int a, b, r; printf(“Ingrese el dividendo); scanf(“%d”,a); printf(“Ingrese el divisor); scanf(“%d”,b); if (b>0) {r=a/b; printf(“el resultado de la división es %d \n”,r); } else printf(“no se puede dividir por 0”); }