Transcript Clase3

CI2125 TEORIA
semana 3
• Mi Primer Programa en C: “Hola Mundo”
• Variables, literales.
• Instrucciones básicas: Entrada, Salida, Asignación.
• Expresiones aritméticas.
• Expresiones lógicas.
• Salida: Imprimir datos con printf
• Entrada: Leer datos con scanf
Como es Programar en el Lenguaje C ??
El lenguaje de programación C, tiene una
sintaxis particular para definir variables,
literales, instrucciones básicas de
entrada, salida y asignación, y
operaciones aritméticas y lógicas
Esta sintaxis debe ser correcta, de otra
manera el compilador del lenguaje no
creara el código binario ejecutable para el
computador.
Lenguaje C - Cuerpo principal
El primer programa:
#include <stdio.h>
void main()
{
/* Aquí va el cuerpo del programa */
printf(“ Hola Mundo “);
}
Este programa lo único que hace es sacar por “Consola” el mensaje:
Hola Mundo
Lenguaje C
Imprimir en pantalla
Para imprimir se usa la función
printf(“ Hola Mundo “);
Entre las comillas es lo que vamos a sacar por
pantalla.
Para utilizar la función printf en nuestros
programas debemos incluir la directiva:
#include <stdio.h>
Al principio del programa
Lenguaje C - Cuerpo principal
Explicación
#include es una directiva. Sirve para indicar al compilador que incluya
otro archivo (stdio.h, standard input-output). Este archivo contiene
declaraciones de funciones, como la función printf.
Todos los programas de C deben tener una función llamada main
Las llaves
{ }
indican el Inicio y el Fin de la función main
/* xxx */, es un comentario, no se ejecuta
La función printf muestra un mensaje por la pantalla.
C requiere un punto y coma al final de cada sentencia (;)
Lenguaje C - Cuerpo principal
Librerías o bibliotecas:
En el estándar C se definen un conjunto de librerías de
funciones, que satisfacen servicios elementales.
Las interfaces a estos servicios se definen en unos archivos
cabeceras ( header files ) que terminan en .h
Algunos de los servicios proporcionados por las bibliotecas
estándares son:
•
•
•
•
entrada y salida de datos (stdio.h)
manejo de cadenas (string.h)
memoria dinámica (stdlib.h)
rutinas matemáticas (math.h)
Ejemplo:
#include <stdio.h>
Lenguaje C - Cuerpo principal
Comentarios
• En el C original, tienen la forma /* cualquier texto */
• Los comentarios se pueden extender varias líneas
• No se pueden anidar comentarios (comentarios dentro de otros)
Ejemplos:
{
/* Esto es un comentario
que ocupa varias líneas */
/* esto es otro comentario */
/* este no es /* valido */ en C */
}
Lenguaje C - Cuerpo principal
Ejercicio:
Busca los errores en este programa:
void main()
{
/* Aquí va el cuerpo del programa */
Printf( "Hola mundo\n" );
}
…C es “case sensitive”,
… archivo cabecera “stdio.h”
Lenguaje C - Cuerpo principal
Al compilar:
ERROR: que nos indicará que no hemos definido la
función Printf
SOLUCION: incluir la librería stdio.h
#include <stdio.h>
ERROR: nos dice que desconoce Printf.
SOLUCION: C es “case sensitive”, debe ser en minúscula,
osea, printf
Palabras claves y códigos especiales en C
Lista de palabras claves de C
auto
else
long
switch
break
enum
register
typedef
case
extern
return
union
char continue default
float for
goto
short signed
sizeof
void unsigned volatile
Códigos de barra invertida
\b
\f
\n
\r
\t
\”
\´
\0
\\
\v
\a
\N
\*N
Espacio atrás
Salto de página
Salto de línea
Salto de carro
Tabulación horizontal
Comillas dobles
Comillas simples
Nulo
Barra invertida
Tabulador vertical
Alerta
Constante octal
Constante hexadecimal
do
double
if
int
static struct
while
Bloques de un programa en C
/* programa.c
Lee dos numeros enteros y los imprime */
#include <stdio.h>
Comentarios
Archivos cabeceras
La función main
void main()
Cuerpo
{
int n1, n2;
/* Pre Cond: numeros tipo entero */
printf(“Introducir dos enteros: \n”);
scanf(“%d %d \n”, &n1, &n2);
/* Post: imprime en pantalla dos numeros */
printf(“Numeros enteros: %d y %d\n”,n1,n2);
}
Encabezamiento
Declaración
variables locales
Sentencias
Variables
Una variable es una localización o casillero en la memoria
principal que almacena un valor
Para almacenar un dato, se necesita una variable.
Partes de una variable: nombre, tipo y valor.
Las variables deben ser declaradas antes de asignarles un valor.
Declaración de una variable:
tipo nombre
Declaración de varias variables con el mismo tipo de dato:
tipo nombre1, nombre2, nombre3, ..., nombren
Tipo puede ser: ENTERO, REAL, CARÁCTER,
CADENA o LOGICO
Variables – nombres validos
Nombres:
No se pueden poner más que letras de la 'a' a la 'z' (la ñ no
vale), números y el símbolo '_'. No se pueden poner signos de
admiración, ni de interrogación...
El nombre de una variable comienza con letra.
Camiones camiones
Numero
NUMERO
buffer
BuffeR
a1
J10hola29
num_alumnos
1ab
nombre?
num/alumnos
main
VALIDOS
minúsculas y mayúsculas
son diferentes en C
‘ case sensitive ‘
INVALIDOS
No se pueden usar las
palabras reservadas de C
Variables - Declaración de variables
EJEMPLOS:
ENTERO
REAL
edad
descuento
Esto crea los casilleros de memoria edad y descuento.
edad
descuento
ENTERO nota_1, nota_2, nota_3
Esto crea los casilleros de memoria nota_1, nota_2 y nota_3.
nota_1
nota_2
nota_3
Lenguaje C - Tipos de datos
C provee 4 tipos de datos básicos para almacenar
caracteres, números reales y números enteros.
Tipo
Bytes de
almacenamiento
Rango
char
1
-128 a 127
int
2
32768 a 32767
float
4
3'4 E-38 a 3'4 E+38
double
8
1'7 E-308 a 1'7 E+308
Lenguaje C - Variables
Declaración de variables:
Variable Global
#include <stdio.h>
int x;
void main()
{
printf(“Hola mundo \n”);
}
Variable Local
#include <stdio.h>
void main()
{
int x;
x = 2;
printf(“Valor %i \n”,x);
}
%i no se muestra por pantalla, se sustituye por el valor
de la variable que va después de la coma, después de las
comillas.
( %i, i de integer ).
Lenguaje C - Tipos de datos
C permite asignar un valor a las variables al momento de su declaración.
char Para almacenar caracteres.
char InicialN = 'J';
char inicialAp;
int Para almacenar números enteros.
int contador;
int num_de_estudiantes = 30;
float y double Para almacenar números reales.
Los números reales contienen una parte entera y una decimal.
Double permite valores mas grandes que float.
float num_real = 0.0;
double num_grande = 2.9979e+45, num_peq = 1.3456e-45;
Literales - Constantes
Son todos aquellos valores fijos, y pueden ser:
Literales enteros
12, 20300, 15, etc.
Literales reales
3.1416, 2345.456, etc.
Literales de carácter
'a', 'B', ';', '<', '+', etc.
Literales de cadena
"Hola", "Algoritmos Computacionales", etc.
Literales lógicos
verdadero, falso
Literales Definir constantes en ‘C’ con #define
Se crean constantes usando la instrucción #define, que se declara después
del #include, antes del cuerpo principal main de C
#define NOMBRE VALOR
Ejemplos:
#define
PI
3.141516
#define
MAXIMO 100
/* MAXIMO valor del rango de una variable */
#define
MINIMO
/* MINIMO valor del rango de una variable */
0
/* constante PI, nombre en mayúscula */
A una constante no se le puede dar un valor mientras se ejecuta,
No podemos usar el scanf para dar valores a una constante
PI = 20;
/* ERROR */
scanf(“ %i ”, PI); /* ERROR GRAVE */
Instrucciones Algorítmicas Básicas
1. Asignación:
Asignar a una variable el valor de una expresión. La expresión
puede ser una simple variable, un simple literal o una
combinación de variables, literales y operadores
variable = expresión
La variable y el valor de expresión deben tener el mismo tipo de
dato.
Cuando se asigna un valor ENTERO a una variable REAL,
entonces el valor ENTERO se convertirá en REAL antes de
almacenarse.
Ej: REAL metro, centimetro
LEER metro
centimetro = metro * 100
// asignación, Valor de la variable
Lenguaje C - Asignación con =
Se usa el símbolo = para asignar el valor de una expresión
a una variable.
variable = expresion
Ej:
/* declaración de las variables */
int
n, m; /* n y m son de tipo entero */
float x, y; /* x y y son de tipo real */
/* distintos ejemplos de asignación */
n = 3 * m + 2;
x = 20.4;
y = (x+1)*20 / (18.9 – x);
Instrucciones Algorítmicas Básicas
2. Entrada:
Obtener un dato de un dispositivo de entrada, y almacenarlo
en una variable.
LEER variable
Ej: ENTERO edad
LEER edad
3. Salida:
Mostrar el valor de una variable en un dispositivo de salida
IMPRIMIR variable
Ej: REAL descuento
IMPRIMIR descuento
Lenguaje C - Salida de datos
Salida de Datos: Imprimir valores de variables:
La rutina printf permite la aparición de valores numéricos, caracteres y
cadenas de texto por pantalla.
printf( control, arg1, arg2... );
Cuando se usan argumentos debe indicarse en la cadena de control
tantos modificadores como argumentos se quieran presentar.
Los modificadores más utilizados son:
%c
%i
%d
%u
%e
%f
%s
Un único carácter,
Un entero
Un entero con signo, en base decimal
Un entero sin signo, en base decimal,
Un número real en coma flotante, con exponente
Un número real en coma flotante, sin exponente
Una cadena de caracteres
Lenguaje C - Salida de datos
printf( "Cadena\n" );
printf( "Segunda\n" );
printf( "Primera cadena" "Segunda cadena" );
printf( "Primera texto en medio Segunda \n" );
printf( "Esto es \"importante\"\n" );
printf( "Hola\\Adios\n" );
"\n". Es el indicador de retorno de carro. Lo que hace es saltar
el cursor de escritura a la línea siguiente.
la contrabarra '\' sirve para indicarle al compilador que escriba
caracteres que de otra forma no podríamos, como “, como la
misma \, y caracteres especiales como ‘n’ (newcarrie),
Ej: \n \\ \”
Lenguaje C - Salida de datos
Imprimir valores de variables con ‘printf’
Ejemplo:
#include <stdio.h>
void main()
{
char InicialAp = ‘J’;
int m = 2;
float x = 2.3;
double num_grande;
num_grande = 2.9979e+120;
printf(“Mi Inicial es %c \n”,InicialAp);
printf(“Entero m es %i \n”,m);
printf(“Real x es %f y double es %e \n”,x, num_grande);
}
Lenguaje C - Entrada de datos
Entrada de Datos: Leer valores de variables:
La rutina scanf permite leer valores numéricos, caracteres y cadenas
de texto del teclado. El prototipo de la función scanf es:
scanf( control, arg1, arg2... );
Ej:
int Edad;
printf("Introduzca la Edad:");
scanf("%d", &Edad);
Los modificadores del control estarán formados por el caracter %
seguido de un caracter de conversión. Los argumentos indicados
serán, nuevamente, las variables.
La principal característica de la instrucción scanf es que necesita
saber la dirección de memoria en que se encuentra la variable para
poder almacenar la información obtenida. Para indicarle esta posición
utilizaremos el símbolo ampersand ( & ), que colocaremos delante del
nombre de cada variable.
Lenguaje C - Entrada, Salida
Leer valores de variables:
Cuando se usan varios argumentos o variables, debe indicarse en la
cadena de control tantos modificadores como argumentos se quieran
leer.
Ej:
int Edad, sexo;
float salario;
printf("Introduzca la Edad, sexo y salario \n");
scanf("%d %c %f", &Edad, &sexo, &salario);
Los modificadores más utilizados son:
%c
%i
%d
%u
%e
%f
%s
Un único carácter,
Un entero
Un entero con signo, en base decimal
Un entero sin signo, en base decimal,
Un número real en coma flotante, con exponente
Un número real en coma flotante, sin exponente
Una cadena de caracteres
Expresiones aritméticas
Una expresión aritmética es una combinación de
variables, literales y operadores aritméticos.
Ej: x *20 + 2 * (x+1)
OPERADORES ARITMETICOS
Operador
Significado
Ejemplo
+
Suma
a+b
-
Resta
a-b
*
Multiplicación
a*b
/
División
a/b
%
Residuo
a%b
Los operadores
aritméticos pueden
utilizarse con tipos enteros
y reales.
Ej:
ENTERO a
REAL b
a= 7 / 5
// a = 1
b= 7.0 / 5 // b = 1,4
Expresiones aritméticas
Reglas de jerarquía de los operadores aritméticos
Cuando una expresión aritmética tiene más de un operador
aritmético, el orden de aplicación de los operadores sigue un
orden.
Operador
(
*
Se evalúan en
primer lugar
)
/
+
Orden de
evaluación
%
-
Se evalúan en
segundo lugar
Se evalúan en
tercer lugar
Si existen paréntesis
anidados, se evalúa primero
la expresión en el par más
interno.
Si varios operadores o
paréntesis tienen la misma
jerarquía, la evaluación será
de izquierda a derecha.
Expresiones aritméticas
Reglas de jerarquía de los operadores aritméticos
¿Cuál es el equivalente en pseudocódigo de la siguiente
expresión algebraica? Usando las reglas de jerarquía:
.
e = 4/((a+b)/(c/d)) + v/w/p + 5*m*n*q
Operadores Aritméticos Simplificados
Operador
Simplicado Ejemplo
+
+=
/
/=
x=x+5;
x=x+y;
x=x-2;
x=x-y;
x=x*2;
x=x*y;
…
-
-=
*
*=
%
%=
…
Equivale
x += 5;
x += y;
x -= 2;
x -= y;
x *= 2;
x *= y;
Operadores Unarios:
Operador (++) : Incremento
Este operador equivale a sumar uno a la variable:
int x = 5;
x++;
/* x = 5 */
/* x = 6 */
Operador (-) : Resta/Negativo
Este operador tiene dos usos, uno es la resta y el otro es cambiar de signo.
- delante de una variable o constante equivale a multiplicarla por -1.
int a, b;
a = 1;
b = -a; /* b = -1 */
Operador (--) : Decremento
Es equivalente a ++ pero en vez de incrementar disminuye el valor de la variable.
Equivale a restar uno a la variable.
int x = 5;
x--;
/* x = 4 */
Exp. Aritméticas en C
/* Aplicación de Operadores en C */
#include <stdio.h>
void main()
{
int i= 5, j= 7, k= 3, m1;
float x= 2.5, z= 1,8, t;
m1 = (( j % k) / 2) + 1;
m1 += i;
m1 %= --i;
printf(“\nEl valor de m1 es: %d”, m1);
t = ((float) (j % k) / 2 );
t++;
x *= ++z;
t -= ( x += ++i);
printf(“\nEl valor de t es: %.2f”, t);
}
Que imprime
Este programa ??
Expresiones lógicas
Una expresión lógica combina variables, literales,
operadores aritméticos, operadores relacionales y
operadores lógicos. Se evalúa como Verdadera o Falsa.
Operador
Significado
Ejemplo
>
mayor que
a > b
>=
<
mayor o
igual que
menor que
a >= b
a < b
<=
menor o
igual que
a <= b
==
igual a
a == b
!=
diferente de
a != b
Operador
Significado
Ejemplo
!
no
!a
&&
y
a && b
||
ó
a || b
Operadores
Relacionales
Operadores
Lógicos
Operadores lógicos – Tablas de Verdad
P
Q
!P
!Q
P || Q
P && Q
1
1
0
0
1
1
1
0
0
1
1
0
0
1
1
0
1
0
0
0
1
1
0
0
Expresiones lógicas
ENTERO numero
LOGICO valorlog
// TRUE (1) , FALSE (0)
valorlog = numero > 0
// TRUE si numero es positivo
valorlog = ( (numero<=100) && (numero>=25) )
// TRUE si 25 <= numero <= 100
valorlog = ( (numero<25) || (numero>100) )
// TRUE si numero > 25, o, numero > 100
Expresiones LOGICAS en C
#include <stdio.h>
#define TRUE 1
#define FALSE 0
void main()
{
int a,b,x,y; /* se declaran de tipo entero */
x =5; y = 10;
a = TRUE;
b = a && x;
Resultado:
printf(“b= %d\n”, b );
b = a && y;
b=1
printf(“b= %d\n”, b );
b=1
b = x == y;
b=0
printf(“b= %d\n”, b );
b = a && x != y;
}
Exp. Lógicas en C
/* Aplicación de Operadores en C */
#include <stdio.h>
void main()
{
int i= 15, j, k, l;
j = ( 15 > i--) > ( 14 < ++i );
printf(“\nEl valor de j es: %d”, j);
k = ! ( ‘b’ != ‘d’ ) > ( !i – 1 );
printf(“\nEl valor de k es: %d”, k);
l = ( ! ( 34 > ( 70 % 2 )) || 0 );
printf(“\nEl valor de l es: %d”, l);
}
Que imprime
Este programa ??
Operadores en C
Precedencia de Operadores en C
()
++ -* / %
+ < <= >
== !=
&&
||
= +=
>=
-= *= /=