You are on page 1of 14

Introduccin a la Programacin: C - 51 - Fernando Berzal

Programas


Estructura de un programa simple

Los programas ms simples escritos en lenguajes imperativos
suelen realizar tres tareas de forma secuencial:

Entrada de datos

Procesamiento de los datos

Salida de resultados



La funcin main

El punto de entrada de un programa en C es la funcin main:


int main (int argc, char *argv[])
{
Declaraciones y sentencias escritas en C

return 0;
}


Las llaves {} delimitan bloques de cdigo en C
(conjuntos de declaraciones y sentencias).

La ejecucin de un programa escrito en C comienza
invocando a la funcin main().


Introduccin a la Programacin: C - 52 - Fernando Berzal

El preprocesador de C

#include
Inclusin de ficheros de cabecera


#include <stdio.h>
#include biblioteca.h


#define
Definicin de constantes simblicas y macros


#define CONSTANTE expresin




#define MAX(a,b) ( ((a)>(b))? (a):(b) )



#ifndef #endif
Usado en ficheros de cabecera para no incluir lo mismo dos veces


#ifndef __XXX__
#define __XXX__

...

#endif


Introduccin a la Programacin: C - 53 - Fernando Berzal


Estructura general de un fichero de cdigo en C



#includes de ficheros de cabecera (bibliotecas)

#defines (constantes simblicas y macros)

Declaracin e implementacin de funciones




Funcionamiento del preprocesador


Fichero de entrada al compilador
Introduccin a la Programacin: C - 54 - Fernando Berzal

Operaciones de entrada/salida

Salida por pantalla con la funcin printf

La funcin printf, que forma parte de la biblioteca estndar de
funciones de entrada/salida <stdio.h>, nos permite mostrar
mensajes de texto en la pantalla cuando ejecutamos un programa:

#include <stdio.h>

int main (int argc, char *argv[])
{
...
printf(Mi programa v1.0);
...
}


Mostrar datos en funcin de su tipo

char c;
...
printf (%c, c);


int i;
...
printf (%d, i);


long x;
...
printf (%ld, x);
float f;
...
printf (%f, f);


double d;
...
printf (%lf, d);


long double r;
...
printf (%Lf, r);


Mostrar mensajes en distintas lneas

printf (Una lnea de texto.\n);
printf (Otra lnea de texto.\n);
Introduccin a la Programacin: C - 55 - Fernando Berzal

Entrada desde el teclado con la funcin scanf

La funcin scanf, de la biblioteca estndar de funciones de
entrada/salida <stdio.h>, nos permite leer datos desde el teclado
para suministrarle datos de entrada a un programa:

#include <stdio.h>

int main (int argc, char *argv[])
{
...
scanf(%d,&dato);
...
}


Leer datos en funcin de su tipo

char c;
...
scanf (%c, &c);


int i;
...
scanf (%d, &i);


long x;
...
scanf (%ld, &x);
float f;
...
scanf (%f, &f);


double d;
...
scanf (%lf, &d);


long double r;
...
scanf (%Lf, &r);



Operaciones de entrada/salida

printf(plantilla de formato, lista de variables);

scanf(plantilla de formato, lista de referencias a variables);


Introduccin a la Programacin: C - 56 - Fernando Berzal

Salida de datos con formato

Al representar un nmero o una cadena,
podemos especificar cmo deseamos hacerlo:



Sintaxis general %-n.mX



El nmero n indica el nmero de caracteres que se utilizarn
como mnimo para reprentar el dato (nmero total de dgitos
en el caso de los nmeros, tanto enteros como reales).

El nmero .m indica el nmero mximo de caracteres que se
utilizarn para representar el dato. En el caso de los nmeros
reales, indica el nmero de decimales que se mostrarn.

El signo menos (-) es opcional y lo usaremos para indicar
que el texto ha de justificarse a la izquierda.

X indica el tipo del dato:

%d Nmero entero en decimal
%x Nmero entero en hexadecimal
%o Nmero entero en octal

%c Carcter
%s Cadena de caracteres

%f Nmero real
%e Nmero real en notacin cientfica




Introduccin a la Programacin: C - 57 - Fernando Berzal

Ejemplos




Introduccin a la Programacin: C - 58 - Fernando Berzal

Ejemplo
Longitud de la hipotenusa de un tringulo rectngulo

/*
Hipotenusa de un tringulo rectngulo
calculada segn el teorema de Pitgoras
*/

#include <stdio.h>
#include <math.h>

int main ()
{
// Declaraciones

float lado1, lado2, hipotenusa;

// Entrada de datos

printf( Clculo de la hipotenusa \n);
printf(de un tringulo rectngulo\n);
printf(--------------------------\n);

printf(Primer lado: );
scanf(%f, &lado1);
printf(Segundo lado: );
scanf(%f, &lado2);

// Clculos

hipotenusa = sqrt(lado1*lado1 + lado2*lado2);

// Salida de resultados

printf (La hipotenusa mide %f.\n, hipotenusa);

return 0;
}

Introduccin a la Programacin: C - 59 - Fernando Berzal

Ejemplo
Programa para comprobar si un ao es bisiesto o no

Un ao es bisiesto si es divisible por 4 pero no por 100,
o bien es divisible por 400.


#include <stdio.h>

int main ()
{
// Declaracin de variables

int year;
int bisiesto;

// Entrada de datos

printf(Introduzca un ao: );
scanf(%d, &year);

// Clculos

bisiesto = ((year%4==0) && (year%100!=0))
|| (year%400==0);

// Salida de resultados

if (bisiesto) {
printf (El ao es bisiesto.);
} else {
printf (El ao no es bisiesto.);
}

return 0;
}

NOTA: La sentencia if nos permite controlar la ejecucin de un
conjunto de sentencias en funcin de que se cumpla una condicin.
Introduccin a la Programacin: C - 60 - Fernando Berzal

Ejemplo
Cuota de una hipoteca

intersMensual () = intersAnual / 12

12
) 1 (
1
1

+


=
aos
cantidad
al cuotaMensu



#include <stdio.h>
#include <math.h>

int main ()
{
// Declaracin de variables

double cantidad; // en euros
double interes; // en porcentaje (anual)
int tiempo; // en aos
double cuota; // en euros (mensual)

double interesMensual; // en tanto por uno

// Entrada de datos

printf("Importe de la hipoteca (): ");
scanf("%lf", &cantidad);

printf("Tipo de inters (%): ");
scanf("%lf", &interes);

printf("Perodo de amortizacin (aos)");
scanf("%d", &tiempo);

// Clculo de la cuota mensual

interesMensual = interes/(12*100);

cuota = (cantidad*interesMensual)
/ (1.0 - 1/pow(1+interesMensual,tiempo*12));

// Resultado

printf("Cuota mensual: %.2lf ", cuota);

return 0;
}
Introduccin a la Programacin: C - 61 - Fernando Berzal

Documentacin del cdigo

Comentarios
Los comentarios sirven para incluir aclaraciones en el cdigo.

ANSI C permite dos tipos de comentarios:

// Comentarios de una lnea

/* Comentarios de varias lneas */


Es bueno incluir comentarios que expliquen lo que hace el
programa y sus caractersticas claves (p.ej. autor, fecha,
algoritmos utilizados, estructuras de datos, peculiaridades).

// Clculo del MCD
// usando el algoritmo de Euclides
// Fernando Berzal, 2004

Los comentarios nunca han de limitarse a decir en lenguaje
natural lo que ya est escrito en el cdigo: Jams se utilizarn
para parafrasear el cdigo y repetir lo que es obvio.

i++; // Incrementa el contador

Los comentarios han de aclarar; esto es, ayudar al lector en las
partes difciles (y no confundirle). Si es posible, escriba cdigo
fcil de entender por s mismo: cuanto mejor lo haga, menos
comentarios necesitar.

int mes; // Mes

int mes; // Mes del ao (1..12)


ax = 0x723; /* RIP L.v.B. */

NB: Beethoven muri en 1827 (0x723 en hexadecimal).
Introduccin a la Programacin: C - 62 - Fernando Berzal

Sangras
Conviene utilizar espacios en blanco o separadores para delimitar
el mbito de las estructuras de control de nuestros programas.

Lneas en blanco
Para delimitar claramente los distintos segmentos de cdigo en
nuestros programas dejaremos lneas en blanco entre ellos.

Identificadores
Los identificadores deben ser descriptivos (reflejar su significado).

p, i, s...

precio, izquierda, suma...

Declaraciones

Usualmente, declararemos una nica variable por lnea.

Nunca mezclaremos en una misma lnea la declaracin de
variables que sean de distintos tipos o que se utilicen en el
programa para distintos fines.

Constantes

Se considera una mala costumbre incluir literales de tipo
numrico (nmeros mgicos) en medio del cdigo.

Se prefiere la definicin de constantes simblicas
(mediante la directiva #define del preprocesador de C).




Introduccin a la Programacin: C - 63 - Fernando Berzal

Expresiones

Uso de parntesis: Aunque las normas de precedencia de los
operadores vienen definidas en el lenguaje, no abusaremos de
ellas. Siempre resulta ms fcil interpretar una expresin si sta
tiene los parntesis apropiados. Adems, stos eliminan
cualquier tipo de ambigedad.

Uso de espacios en blanco: Resulta ms fcil leer una
expresin con espacios que separen los distintos operadores y
operandos involucrados en la expresin.

a%x*c/b-1 ( (a%x) * c ) / b - 1

Expresiones booleanas: Es aconsejable escribirlas como se
diran en voz alta.

!(bloque<actual) ( bloque >= actual )

Expresiones complejas:
Es aconsejable dividirlas para mejorar su legibilidad

Claridad:
Siempre buscaremos la forma ms simple de escribir una expresin.

key = key >> ( bits ((bits>>3)<<3));

key >>= bits & 0x7;

Conversiones de tipo (castings):
Evitaremos las conversiones implcitas de tipo.
Cuando queramos realizar una conversin de tipo,
lo indicaremos explcitamente.

i = (int) f;

Siempre se han de evitar los efectos colaterales
(modificaciones no deseadas pueden afectar a la ejecucin del
programa sin que nos demos cuenta de ello).
Introduccin a la Programacin: C - 64 - Fernando Berzal


IDEA CLAVE

Escribimos cdigo para que lo puedan leer otras personas,
no slo para que lo traduzca el compilador (si no fuese as,
podramos seguir escribiendo nuestros programas en binario).



No comente el cdigo malo (uso de construcciones extraas,
expresiones confusas, sentencias poco legibles...): Reescrbalo.


No contradiga al cdigo: Los comentarios suelen coincidir con
el cdigo cuando se escriben, pero a medida que se corrigen
errores y el programa evoluciona, los comentarios suelen
dejarse en su forma original y aparecen discrepancias. Si
cambia el cdigo, asegrese de que los comentarios sigan
siendo correctos.



El cdigo bien escrito
es ms fcil de leer, entender y mantener
(adems, seguramente tiene menos errores)



Errores de programacin
Errores sintcticos
Errores detectados por el compilador en tiempo de compilacin.
Errores semnticos
Slo se detectan en tiempo de ejecucin: Causan que el programa
finalice inesperadamente su ejecucin (p.ej. divisin por cero) o
que el programa proporcione resultados incorrectos.

You might also like