Un programa de ordenador es una secuencia de instrucciones, escritas en un determinado lenguaje de programación.
Existen tres tipos de lenguajes de programación :
n Lenguajes máquina. Son los únicos lenguajes que los ordenadores entienden. Se trata de secuencias de 0 y 1 (código binario), que indican las operaciones y las celdas de memoria en que aquellas se realizan. Son complicados para el programador.
n Lenguajes de bajo nivel (ensambladores). Son una representación simbólica de las instrucciones en código binario. Son más fáciles de entender. Posteriormente necesitan un programa ensamblador que los traduzca a código máquina.
n Lenguajes de alto nivel. Facilitan la escritura de los programas, por su mayor parecido a los lenguajes humanos. Requieren un programa especial para traducir las instrucciones del lenguaje a código binario. Según como se efectúa esta traducción, tendremos un compilador (antes de ejecutarlo traduce íntegro el programa) o un intérprete (va traduciendo instrucción a instrucción, no traduciendo la siguiente hasta que la anterior se ha ejecutado). C es un lenguaje compilado.
El diagrama de flujo es la representación gráfica de las principales acciones que el programa debe realizar.
Es el paso previo a la escritura de cualquier programa.
Los símbolos que usaremos son :
Inicio y fin, escribiendo dentro del óvalo la opción de que se trate |
|
Introducción de datos | |
Asignación de variables y operaciones | |
Escritura en pantalla | |
|
Bucles |
Bifurcaciones | |
Conectores y subrutinas | |
Unen los anteriores símbolos, indicando el sentido del flujo. Siempre rectas. |
Todas las sentencias (instrucciones) se escriben en minúsculas y acaban en ;.
Es costumbre escribir las variables en minúsculas y las constantes en mayúsculas.
#include <stdio.h> |
Encabezamiento. Se informa al compilador que inserte en esa posición el archivo stdio.h. Este contiene las funciones de entrada/salida por pantalla. |
void main() |
La función main indica dónde empieza el programa |
{
} |
Llaves que delimitan el programa |
Son partes de la memoria donde se guardan datos, identificadas por un nombre, que debe empezar por una letra, y que sólo puede contener letras, números y el carácter _ Se deben dar nombres representativos de lo que en ellas se guarda.
Siempre se declaran previamente a su uso. El ordenador distingue entre mayúsculas y minúsculas.
Los tipos principales son:
Entero int para almacenar números enteros
Real float para almacenar números reales
Carácter char para almacenar caracteres
Ejemplos:
la edad de una persona la almacenaríamos en una variable entera, de nombre, por ejemplo, edad.
La nota de un examen se almacenará en una variable float, de nombre, por ejemplo, calificacion.
La puerta del piso en que vivimos la almacenaríamos en una variable de tipo char, de nombre, por ejemplo, letra.
Serían incorrectos como nombres de variables: calificación, nota 1, 1nota, *edad, piso%, etc.
Los tipos pueden variar de un compilador a otro. Valores típicos son:
Se declaran al comienzo del programa, tras la llave de apertura, en la forma:
tipovariable nombrevariable;
Una vez definidas, se les da valor en la forma: nombrevariable = valor;
Puede darse valor en el momento de la definición: int nombrevariable = valor; En el caso del tipo char, el carácter se escribe entre comillas simples.
Podemos escribir nombrevariable1 = nombrevariable2; para conseguir que la variable de la izquierda pase a valer lo que vale la variable de la derecha.
Cuando queremos contar podemos poner nombrevariable = nombrevariable + 1; con lo que cada vez que se ejecute la instrucción se suma 1 en la variable nombrevariable
Ejemplos:
de tipo real: float pi;
pi=3.14159; ( los decimales se indica con . y no con , )
de tipo entero: int numero;
numero=23;
de tipo char: char letra;
letra=’a’; ( con comillas simples )
Se realiza mediante la función scanf(“formato”,&nombrevariable); donde:
formato indica el tipo al que pertenece la variable: %d, %f ó %c
nombrevariable, precedido por &, es la variable (que debe haber sido previamente definida), donde vamos a introducir el dato.
La función scanf está en el fichero de cabecera stdio.h
Ejemplos:
Programa que pida al usuario la edad:
#include <stdio.h>
void main()
{int edad;
scanf("%d",&edad);
}
Programa que pida al usuario su altura en metros:
#include <stdio.h>
void main()
{ float altura;
scanf("%f",&altura);
}
Programa que pida al usuario una letra:
#include <stdio.h>
void main()
{ char letra;
scanf("%c",&letra);
}
Se realiza mediante la función printf, cuya sintaxis es : printf(“formato”,variable);
Ejemplos:
cadena literal: printf(“Hola”); |
no hay que especificar formato. |
variable: printf(“El número es %d”,num) |
% d indica que en su posición se insertará el valor de la variable num, que posteriormente se indica |
varias variables: printf(“la suma de %d y %d es %d”,num1,num2,num1+num2); |
las cadenas de formato deben concordar con el tipo de cada variable |
Si en vez de entera fuesen variables de tipo real, en la cadena de formato escribiríamos %f y si fuese char, %c
Como ocurría con la función scanf, la función printf se encuentra en el fichero de cabecera stdio.h
Ejemplos:
Programa que pida al usuario la edad y la muestre posteriormente en pantalla:
#include <stdio.h>
void main()
{ int edad;
printf(“¿Cuál es tu edad?”);
scanf("%d",&edad);
printf("Tu edad es %d",edad);
}
Programa que pida al usuario su altura en metros, mostrándola posteriormente en pantalla:
#include <stdio.h>
void main()
{ float altura;
printf(“¿Cuánto mides?”);
scanf("%f",&altura);
printf("Tu altura es %f",altura);
}
Programa que pida al usuario una letra y que posteriormente la muestre:
#include <stdio.h>
void main()
{ char letra;
printf("Escribe un carácter ");
scanf("%c",&letra);
printf("El carácter introducido es %c",letra);
}
Observación: Si ya hemos introducido algún dato, para que scanf funcione
correctamente con las variables de tipo char, es necesario vaciar el buffer.
Para ello usamos la función fflush(stdin);
perteneciente al fichero de cabecera conio.h
Son muy útiles para revisiones posteriores del programa.
Se escriben entre /* y */
Ejemplo: /* Esto es un comentario */
Realizan determinadas acciones. Las más comunes son:
\n pasa a nueva linea.
\t coloca el cursor en la siguiente tabulación
\b retrocede el cursor un espacio
\a emite un aviso sonoro
\” para escribir el carácter “
\’ para escribir el carácter ‘
\\ para escribir el carácter \
Ejemplos:
#include <stdio.h>
void main()
{printf("Hola, ¿qué tal?");
}
#include <stdio.h>
void main()
{printf("Hola,\n¿qué tal?");
}
#include <stdio.h>
void main()
{printf("Hola,\t¿qué tal?");
}
Son aquellos datos cuyo valor no se modifica a lo largo del programa. Por ejemplo, los días de un mes, el valor de π, etc.
Se suelen escribir en mayúsculas.
La forma de definirlas es: const tipo nombreconstante=valor; en donde tipo puede ser int, float, char, etc.
Ejemplo:
#include <stdio.h>
void main()
{ const float PI=3.14159;
float radio;
printf("¿Radio?");
scanf("%f",&radio);
printf("Longitud=%f",2*PI*radio);
}
OPERACIÓN |
MATEMÁTICAS |
C |
SUMA |
+ |
+ |
RESTA |
- |
- |
MULTIPLICACIÓN |
· |
* |
DIVISIÓN |
/ |
/ |
RESTO DE DIVISIÓN ENTERA |
Módulo |
% |
La raíz cuadrada se realiza mediante la función sqrt(número); que se encuentra en el fichero de cabecera math.h
Ejemplos:
/*division entera*/
#include <stdio.h>
void main()
{ int dividendo,divisor,cociente,resto;
printf("Dame el dividendo ");scanf("%d",÷ndo);
printf("Dame el divisor ");scanf("%d",&divisor);
cociente=dividendo/divisor;printf("Cociente= %d",cociente);
resto=dividendo%divisor;printf("\nResto= %d",resto);
}
Si queremos evitar el redondeo a entero del ejemplo anterior, podemos transformar temporalmente uno de los números involucrados en la operación, a real y, lógicamente, guardar este resultado en una variable real:
#include <stdio.h>
void main()
{ int dividendo,divisor;
float cociente;
printf("¿Dividendo?");scanf("%d",÷ndo);
printf("¿Divisor?");scanf("%d",&divisor);
cociente=(float)dividendo/divisor; /*aquí transformamos temporalmente dividendo a real*/
printf("Cociente=%f",cociente); /*obtenemos: Cociente=6.500000*/
}
/*raíz
cuadrada*/ la
salida de este programa sería: 2.000000
#include <stdio.h>
#include <math.h>
void main()
{printf ("%f",sqrt(4.0));
}
Se utilizan para comparar expresiones. Por ejemplo, para saber si hace calor nos podríamos preguntar si la temperatura es mayor de 25º. Para saber si un alumno ha suspendido, si su nota es menor de 5, etc.
Mayor |
> |
Menor |
< |
Igual |
== |
Distinto |
!= |
Mayor o igual |
>= |
Menor o igual |
<= |
Su utilización la veremos al estudiar la instrucción if
Se utilizan cuando necesitamos realizar varias comparaciones en una sola instrucción. Por ejemplo, si la nota de un alumno es mayor de 6.5 y menor o igual a 8, tiene un notable.
Y |
&& |
O |
|| |
No |
! |
Utilizaríamos && cuando queremos que se cumplan 2 (ó más) condiciones: ?se necesita ingeniero menor de 30 años?. La persona que opte al empleo tiene que ser ingeniero y además tener menos de 30 años.
Utilizaríamos || cuando basta con que se cumpla alguna condición: ?se necesita ingeniero o llevar trabajando más de 5 años en puesto similar?. A este anuncio pueden optar los ingenieros y quienes no siéndolo lleven trabajando más de 5 años.
Utilizaríamos ! cuando queremos negar algo: ?Se vende piso. Abstenerse agencias.? Es decir, no queremos que llamen las agencias. La expresión sobre la que actúa este operador va entre paréntesis.
La utilización de estos operadores la veremos al estudiar la instrucción if
Consiste en que el programa siga uno u otro camino dependiendo de que se cumpla o no una determinada condición. Existen dos estructuras selectivas: IF y SWITCH.
Su sintaxis es: if (condición) instrucción 1; es decir, la instrucción sólo se ejecutará si se cumple la condición.
La condición puede ser simple (sólo con un operador de relación) o compuesta (con varios operadores de relación unidos mediante operadores lógicos), y siempre va entre paréntesis.
Ejemplo:
#include <stdio.h>
void main()
{
float nota;
printf("Dime la nota ");scanf("%f",¬a);
if (nota>=5) printf ("Enhorabuena");
printf("\nAdios");
}
dos posibles entradas serían las notas 4 y 6, con lo que obtendríamos:
Dime la nota 4 Adios
|
Dime la nota 6 Enhorabuena Adios |
La instrucción if admite otra sintaxis: if (condición) instrucción1;
else instrucción 2; en caso de cumplirse la condición, se realiza la instrucción 1 (la instrucción 2 no) y en caso de no cumplirse la condición, se realiza la instrucción 2 (y no la 1).
Si instrucción1 o instrucción2 no son instrucciones simples, sino varias instrucciones, las encerraríamos entre llaves:
if (condición)
{ instrucción1;
instrucción2;
... ;
}
Ejemplo:
#include
<stdio.h>
void main()
{
float nota, horas;
printf("Dime la nota ");scanf("%f",¬a);
if (nota>=5) printf ("Enhorabuena");
else {printf("Estudia más");
printf("\n¿Cuánto estudiaste?");
scanf("%f",&horas);
printf("Pues %f horas es poco tiempo",horas);
}
}
La posibles salidas serían:
Dime la nota 4 Estudia más ¿Cuánto estudiaste?3 Pues 3 horas es poco tiempo
|
Dime la nota 6 Enhorabuena |
Ejemplo (con operadores lógicos). Programa que pida una letra indicando si es vocal o consonante:
#include
<stdio.h>
void main()
{ char letra;
printf("Introduce una letra ");scanf("%c",&letra);
if (letra=='a' || letra=='e' || letra=='i' || letra=='o' || letra=='u' || letra=='A'
|| letra=='E' || letra=='I' || letra=='O' || letra=='U') printf("VOCAL");
else printf("CONSONANTE");
}
Ejemplo (también con operadores lógicos). Programa que pida la nota y muestre la correspondiente apreciación, según la escala:
0=nota<4.5 Insuficiente
4.5=nota<6 Suficiente
6=nota<8.5 Notable
8.5=nota=10 Sobresaliente
#include
<stdio.h>
void main()
{ float nota;
printf ("Introduce la nota ");scanf ("%f",¬a);
if (nota<0 ||nota>10) printf ("Imposible");
else if (nota>=0 && nota<4.5) printf ("Insuficiente");
if (nota>=4.5 && nota<5.5) printf("Suficiente");
else if (nota>=5.5 && nota<6) printf ("Bien");
else if (nota>=6 && nota<8.5) printf ("Notable");
else if (nota>=8.5) printf ("Sobresaliente");
}