falso - Cobre 2 Software

Anuncio
Fundamentos de
programación
Conceptos Básicos
Estructura de un programa en C
• Directivas del preprocesador
• Declaraciones globales y/o externas
- Prototipos de funciones (cabeceras)
- Variables
• Declaraciones de funciones (subprogramación)
- Función principal main
- Definición, en su caso, de otras funciones
Estructura de un programa
/* primer programa */
#include <stdio.h>
main()
{
printf (“Hola Mundo\n”);
}
Estructura de un programa
/* primer programa */
#include <stdio.h>
int main()
{
printf (“Hola Mundo\n”);
return 0;
}
Estructura de un programa
/* primer programa */
#include <stdio.h>
void main()
{
printf (“Hola Mundo\n”);
}
Estructura de un programa
/* primer programa */
#include <stdio.h>
void main(void)
{
printf (“Hola Mundo\n”);
}
Directivas del preprocesador
Son instrucciones dadas al compilador previas a
la obtención del código objeto (fase de la
compilación).
Tienen la forma
#directiva
Las dos más usuales son #include y #define
#include “filetype.h”
#include <ctype.h>
#define LENGTH 20
#define MAX(a,b) ((a) > (b) ? (a) : (b))
#ifdef _TEST_
#undef _TEST_
Directivas del preprocesador
#include “filename”
#include <filename>
Indica al preprocesador que inserte el fichero filename
desde la posición donde se encuentra la directiva.
#include “mifichero.ext”
#include <string.h>
#define item valor
Asocia el objeto item con el valor a su derecha. La definición
es efectiva a partir de la línea donde se encuentra la directiva.
#define MENSAJE “Hola Mundo”
#define Max_Length 500
Declaraciones globales
Son el conjunto de objetos (funciones, constantes, variables,…)
que son conocidos en la totalidad del programa.
Las directivas pueden ser consideradas en algunos casos como
declaraciones globales.
char cadena[ ] = {‘c’,‘a’,‘d’,‘e’,‘n’,‘a’};
unsigned long var = 5, otravar;
struct Fecha {
unsigned char dia;
char *
mes;
unsigned int
año;
} Mi_fecha = {12,“Agosto”,2010};
El conjunto de caracteres de C
Alfabeto: ASCII.
• Letras mayúsculas:
A–Z
• Letras minúsculas:
a–z
• Dígitos:
0–9
• Caracteres especiales:
+
!
<
:
?
>
;
*
^
(
.
/
“
)
,
=
‘
[
_
%
~
]
&
\
{
#
|
}
(espacio en blanco)
El conjunto de caracteres de C
Secuencias de escape
\a
alert (bell)
\\
backslash
\b
backspace
\?
question mark
\f
formfeed
\’
quote
\n
newline
\”
double quote
\r
carriage return
\ooo octal number
\t
horizontal tab
\xhh hex number
\v
vertical tab
Identificadores
Término para denominar varios elementos del programa,
como constantes, variables, funciones, ...y otros objetos
definidos por el usuario.
¾ Secuencia de letras, dígitos y/o subrayados _
¾ El primer carácter debe ser una letra, (algún compilador
admite el carácter de subrayado), no puede empezar con
un número ( el carácter de subrayado es considera como
una letra).
¾ Las letras mayúsculas y minúsculas son diferentes (C es
sensible a mayúsculas).
Identificadores
Identificadores válidos:
X
y12 suma_1
Nombres area
A Habitacion120
_temperatura
porc_imp
TABLA
Fecha_Compra_Casa
Identificadores no válidos:
4num
“x”
Orden-no
Indicador error
el primer carácter debe ser una letra
carácter ilegal “
carácter ilegal –
carácter ilegal (espacio en blanco)
Significativo:
Tabla
TABLA tabla TABla tabLA
Identificadores
Palabras reservadas en ANSI C
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
Tipos de datos
Tipos de datos básicos en C
–
–
–
–
–
char
int
float
double
void
1 byte, normalmente identificado con un carácter.
2 ó 4 bytes, la longitud de palabra de la máquina.
reales, 32 bits con al menos 6 dígitos significativos.
float, en doble precisión.
sin valor de retorno, en general.
Modificadores: short, long, unsigned, signed.
Tipos de datos enumerados
enum escapes { BELL = ‘\a’, BACKSPACE = ‘\b’, TAB = ‘\t’,
NEWLINE = ‘\n’, VTAB = ‘\v’, RETURN = ‘\r’ };
enum months { JAN = 1, FEB, MAR, APR, MAY, JUN,
JUL, AUG, SEP, OCT, NOV, DEC }; /* FEB = 2, MAR = 3... */
Tipos enumerados
enum dia_semana {
LUNES = 1, MARTES, MIERCOLES, JUEVES,
VIERNES, SABADO, DOMINGO = 10, FESTIVO = 10
};
void main ()
{
enum dia_semana dia;
··· ··· ···
if (dia <= VIERNES) printf(“Es laborable”);
··· ··· ···
dia = MARTES;
/* Muestra el valor de la constante: 2 */
printf(“Hoy es: %d”, dia);
··· ··· ···
}
Variables
Objeto abstracto donde se almacena un valor. Se puede
consultar y modificar durante la ejecución del programa.
Declaración: antes de ser usadas por primera vez:
– reservar espacio en memoria.
– asociar un identificador.
– opcionalmente, asignar un valor (inicialización).
unsigned short int a, b, c = 5;
char linea [100], vector[5] ={‘\0’};
char stringvar1 [ ] = {‘H’,‘o’,‘l’,‘a’,‘\0’};
char stringvar2 [ ] = “Hola”;
struct { long int a,b; } estructura;
Constantes
Es un objeto cuyo valor no puede cambiar a lo largo de la
ejecución de un programa.
• Constantes literales:
–
–
–
–
constante enteras
constantes reales
constantes carácter
constante cadena
• Constantes definidas (simbólicas)
• Constantes enumeradas
• Constante de carácter de barra invertida (sec. escape)
Constantes
Constantes declaradas
- El calificador const permite dar un nombre simbólico a una
constante:
const tipo nombre = valor;
Si se omite el tipo, C utiliza int por defecto.
const char caracter = ‘a’;
const int semana = 7;
- La directiva #define no especifica ningún tipo de datos, no
utiliza el operador de asignación = y no termina en ;
Entrada y salida básica
C proporciona entrada y salida con formato.
Entrada / salida estándar. Cuando comienza la ejecución de
un programa C se dispone de tres ficheros (streams)
abiertos de forma automática, y que están accesibles a
través de los correspondientes identificadores definidos en
el header stdio.h
stdin
/* entrada estándar */
stdout /* salida estándar */
stderr /* salida de errores estándar */
Salida básica
En general, salida a pantalla, con formato de mensajes y
valores. La función básica de salida es printf:
printf(cadena_de_formato, dato1,dato2,dato3,...)
printf () transforma los datos, que están en representación
binaria, a ASCII según los códigos transmitidos.
printf(“Valores : %d %d %d”, 234,45,-9);
Valores : 234 45 -9
Salida básica
printf (cadena_de_formato, dato1, dato2,...);
– Cadena_de_formato contiene los tipos de los datos y
forma de mostrarlos.
– dato1,dato2,... variables, constantes, datos de salida.
¾ El número de argumentos de printf es indefinido.
¾ La cadena de formato contiene códigos que determinan la
impresión de los datos.
¾ Cada código comienza con el carácter %, a continuación puede
especificarse el ancho mínimo del dato, y termina con el carácter de
conversión apropiado.
Salida básica
Ejemplo:
char ch;
int num;
··· ··· ···
ch = ‘A’;
num = 17;
printf(“Caracter %c y entero %3d\n”, ch, num);
Salida:
Caracter A y entero 17
Salida básica
Mostrar datos en función de su tipo:
char c; ... printf(“%c”, c);
El dato se considera de tipo carácter.
int i;
... printf(“%d”, i);
El dato se convierte a entero decimal.
string
… printf(“%s”,s);
El dato debe ser una cadena de caracteres.
float f; ... printf(“%f”, f);
El dato se considera de tipo float.
Se convierte a notación decimal, con
parte entera y dígitos de precisión.
double d; printf(“%e”,d); El dato se considera de tipo float.
Se convierte a notación científica, de la
forma: [-]n.mmmmmmE[+/- ]dd.
Salida básica
Salida sin formato
• int putchar(int) visualiza un carácter en dispositivo de
salida estándar.
char c;
putchar(c);
• int puts(const char *) visualiza un string (array terminado
en ‘\0’) en el dispositivo de salida estándar.
char frase[ ] = “Hola mundo”;
puts(frase);
Entrada básica
En general, entrada por teclado, con formato de valores.
La función básica de entrada es scanf:
scanf(cadena_de_formato, var1, var2,var3,...)
cadena_de_formato contiene los tipos de datos a capturar (junto con
su formato). var1,var2,... Variables del tipo de los códigos de control.
Los argumentos var1,var2,... se pasan por dirección o referencia
pues van a ser modificados por la función para devolver los datos.
Por ello es necesario el operador de dirección &
Entrada básica
Ejemplo:
char ch;
int num;
…………
scanf(“%c %d”, &ch, &num);
/* salida más clara, mensajes explicativos */
printf(“Teclear un carácter y un número : ”);
scanf(“%c %d”, &ch, &num);
Entrada básica
Capturar datos en función de su tipo:
char c;
... scanf(“%c”, &c);
int i;
... scanf(“%d”, &i);
float f;
... scanf(“%f”, &f);
double d; … scanf(“%lf”,&d);
Entrada básica
Entrada sin formato
• int getchar( ) devuelve el siguiente carácter leído del dispositivo
de entrada estándar como un char sin signo (convertido a int), o
EOF si es fin de fichero o ocurre un error.
int c;
c = getchar();
• char * gets(char *S) lee la siguiente línea de la entrada
estándar en el array S. Además reemplaza el fin de línea ‘\n’ por
un ‘\0’. Esta función retorna S o NULL si existe un error.
• scanf(“%s”,S) rellena el array S. El criterio de terminación es un
blanco o un fin de línea.
Legibilidad
Comentarios:
•
•
•
Sirven para incluir aclaraciones de código.
– // comentarios en una línea (sólo si se soporta C++)
– /* comentarios en varias líneas */
Incluir cometarios que expliquen lo que hace el programa así como
sus características clave.
Deben aclarar y no confundir.
Sangrías
Líneas en blanco
Identificadores significativos
Declaraciones y constantes
Expresiones aritméticas
Fórmula matemática que devuelve un número.
Asignación.
variable = expresión;
variable1 = variable2 = ··· = variableN = expresión;
Operadores. Unarios
Cambio de signo
Incremento
Decremento
Binarios
Suma
Resta
Multiplicación
División
Módulo
−
++
−−
+
−
*
/
%
Expresiones aritméticas
Forma prefija ++ y postfija −−
x = ((++z) − (w−−)) % 100; z++;
x = (z − w) % 100; w−−;
x = 5; y = x++; /* x == 6 pero y == 5 */
x = 5; y = ++x; /* x == 6 e y == 6 */
Operación y asignación de forma compacta.
i += 5; es lo mismo que i = i + 5;
x *= (y + 2); es lo mismo que x = x * (y +2);
Expresiones relacionales
Se usan para realizar comparaciones.
Operadores relacionales:
Menor
Mayor
Menor o igual
Mayor o igual
Igual
Distinto
<
>
<=
>=
==
!=
Expresiones relacionales
Resultado lógico:
falso equivale a cero
cierto equivale a distinto de cero
No confundir asignación (=) con comparación (==).
x=3
4>8
3 <= 24
23 == 22
4 != 5
es también una expresión
equivale a falso
equivale a cierto
equivale a falso
equivale a cierto
Expresiones lógicas
Operadores Lógicos:
&& Conjunción ó Y lógico
|| Disyunción ó O lógico
! Negación ó NO lógico
4 && 0
! (4 > 1)
(x < x − 8) || 4
5 <= 0 || ! (x > x − 1)
2 && 4 > 9
(8 == 4 * 2) && 5 > 2
equivale a falso
equivale a falso
equivale a cierto
equivale a falso
equivale a falso
equivale a cierto
Expresiones lógicas
Tabla de verdad
A
cierto
cierto
falso
falso
B
cierto
falso
cierto
falso
!A
falso
falso
cierto
cierto
A && B
cierto
falso
falso
falso
A || B
cierto
cierto
cierto
falso
! (A && B) es lo mismo que ! A || ! B
! (A || B)
es lo mismo que ! A && ! B
El header ctype.h
isalnum(c)
isalpha(c) || isdigit(c)
isalpha(c)
iscntrl(c)
isdigit(c)
isgraph(c)
islower(c)
isprint(c)
ispunct(c)
isspace(c)
isupper(c)
isxdigit(c)
int tolower(c)
int toupper(c)
isupper(c) || islower(c)
carácter de control
dígito decimal
carácter imprimible excepto el espacio
letra minúscula
carácter imprimible incluido el espacio
carácter imprimible excepto letras, dígitos y el espacio
espacio, formfeed, newline, carriage return, tab, vert tab
letra mayúscula
dígito hexadecimal
convierte a minúscula
convierte a mayúscula
Tabla de precedencia de operadores
Operador
( )
!
[ ]
~
*
/
+
-
++
--
izquierda a derecha
.
+
-
(tipo)
*
&
derecha a izquierda
sizeof
izquierda a derecha
%
izquierda a derecha
<<
<
->
Asociatividad
izquierda a derecha
>>
<=
==
>
izquierda a derecha
>=
izquierda a derecha
!=
& (bitwise)
izquierda a derecha
^
izquierda a derecha
|
izquierda a derecha
&&
izquierda a derecha
||
izquierda a derecha
? :
derecha a izquierda
=
,
+=
-=
*=
/=
%=
&=
^=
|=
<<=
>>=
derecha a izquierda
izquierda a derecha
Nuevos tipos de datos
• Definición de nuevos tipos de datos mediante typedef.
• Muy útil para tipos complejos: tablas, estructuras,…
typedef <tipo_de_datos> nombre_nuevo_tipo;
typedef unsigned long int ENTERO;
typedef enum {FALSE,TRUE} BOOLEAN;
typedef struct {
float parte_real;
float parte_imaginaria;
} COMPLEJO;
Conversión de tipos
El casting cambia el tipo de la expresión que precede. Los
tipos deben ser compatibles.
int x; double y; … … x = (int) 3.7; y = (double) 5;
¾ La conversión de un tipo con menos bits a otro con más
bits es automática, ya que el tipo mayor puede
almacenar cualquier valor que represente el tipo menor
(de short a long, de long a float).
¾ La conversión de un tipo con más bits a un tipo con
menos bits se realiza de forma explícita con el casting.
Descargar