Consultar ensayos de calidad


“Resolución de Problemas” Usando el lenguaje de programación - C



Introducción
• El lenguaje de programación C:
– Es de uso general – Sintaxis compacta – Alta portabilidad (ANSI-C) – Creado por Dennis Ritchie, Laboratorios Bell hacia 1972 – Es un lenguaje compilado
• Utilizar editor de texto para escribir (nombre.c) • Compilar para detectar errores sintacticos • Ejecutar programa resultante (a.out)

Tema 3
“Resolución de Problemas” Usando el lenguaje de programación - C

Primer programa
• #include main() • Explicar sintaxis:
– – – – – – #include main() ; n printf(“ … ”);

Un segundo programa: Jalisco
#include main()

• ¡Usa variables!
– Declaración 1ro. – Uso al imprimir

• Recibe una entrada del usuario


– Scanf – Uso de variables al preguntar

• Hace calculos intermedios

Comentarios en C
• • • • Incluir comentarios en un programa es una practica saludable, ayuda a su comprensión. Para el compilador C, los comentarios son inexistentes, No generan líneas de código. En el lenguaje C se toma como comentario todo caracter interno a los simbolos: /* */ Los comentarios pueden ocupar uno o mas renglones, por ejemplo:
• • /* esto es un comentario */ /* esto también es un comentario; pero ocupa 2 líneas */
– – – – –

Identificadores
• Nombres que identificana los objetos de un programa en C:
Variables Funciones Constantes Estructuras de datos Definiciones de tipos (hechas mediante typedef)

• Los identificadores se construyen con:
– Letras (las del alfabeto mayúsculas y minúsculas, menos la ñ, Ñ y las acentuadas). No es posible emplear acentos o caracteres especiales del alfabeto español. – Dígitos numéricos (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) – Símbolo de subrayado ) – Sin embargo, el primer caracter debe ser una letra.

1


Como escoger buenos identificadores
• Autoexplicativos • Ni muy cortos, ni muy largos • No pueden ser palabras ya definidas en el lenguaje. Son “palabras reservadas”:
auto break case char continue default do double else entry extern float for goto if int long register return sizeof short static struct switch typedef union unsigned while

Como escoger buenos identificadores
• El lenguaje C es case-sensitive
– Maximo y maximo son dos identificadores distintos.

• El símbolo de subrayado (_) se emplea para dar mayor legibilidad a nombres compuestos por varias palabras. • Se acostumbra emplear letras minúsculas para nombrar a las variables y mayúsculas para las constantes simbólicas.

Identificadores en C - ejemplos
• Identificadores validos:
– – – – – – – – – puntero nombre_empleado area TAMANO_STRING EdadEmpleado potencia10 i Nombre nombre

Variables
• Toda variable debe ser declarada antes de usarla • Forma genérica:
[= ] ; donde: puede ser: int, float, char, etc. puede corresponder a una constante deltipo entero, real, caracter, arreglo, etc. ([] significa opcional)

• Identificadores invalidos:
– – – – 1texto nombre-empleado Teléfono while

Variables
• Ejemplos de declaraciones de variables:
– int numero; – char nombre; •

Tipos de datos provistos por C
Enteros
– – – int (-32.768 a 32.767) short (-128 a 127) long (-4.294.967.296 a 4.294.967.295)

• Ejemplos de declaraciones asociados a un dato:
– int numero=10; – char nombre = ’G’;

de

variables



Reales
– – float (con 7 decimales de aproximación) double (con 16 decimales de aproximación)



Caracteres
– char (´a´,´z´,´?´,´$´,´@´,´G´,´7´, etc.; en total los 256 caracteres del código ASCII)

2


Cód

Caracter

Cód

Caracter

Cód

Caracter

Cód

Caracter

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US

32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

SPACE ! ' # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 ; < = > ?

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95

@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _

96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

` a b c d e f g h i j k l m n o p q r s t u v w x y z ~ DEL

ExpresionesAritméticas
• Valores numéricos, de tipos enteros o reales. • Operadores binarios
+ * / % Suma Resta Multiplicación División Módulo (sólo para int

• Precedencia
++ -- - (unitario) * / % + -

• Operadores unitarios
++ -Signo negativo Incremento Decremento

• Asociatividad
Por la izquierda

Expresiones Aritméticas
• Los operandos pueden ser variables o constantes numéricas.
– Los operadores unarios ++ y -- fueron pensados para aplicarse a variables; y, – el operador unario - a constantes.

Ejemplos de expresiones aritméticas
• • • • • • • • • • • 2 + 3 * 2 (2 + 3) * 2 -2 / x x++ ++x 2 - 1 + 3 15 % 6 -x 3 * 4 % 5 3 * (4 % 5 ) 1 + 15 % 6

• Syntaxis
– operando operador-binario operando – operador-unario operando – Caso particular:

++ -- (notación pre o postfija)

Expresiones lógicas o booleanas
• Este tipo de valores se emplea para dirigir al programa por un determinado flujo de ejecución dependiendo de si la evaluación de una expresión lógica da verdadero o falso. • A diferencia de otros lenguajes de programación, C no cuenta con un tipo de datos que permita manipular valores booleanos, o valores de verdad. • En C, las instrucciones que dependen de valores lógicos dependen en realidad de un valor entero que se interpreta como
– falso cuando es cero, y – verdadero en caso contrario


Expresiones lógicas o booleanas
Operadores binarios && AND || OR Operadores unitarios ! NOT lógico



• Operadores relacionales o comparación == igual != distinto < menor mayor >= mayor o igualde

3


Expresiones lógicas o booleanas
• Sintaxis
– operando operador-logico-binario operando – operador-logico-unario operando

Ejemplos de expresiones booleanas
• • • • • • • • • • • x !x 1 1 || x 0 0 && x (x > 5) && !y (x==1) 5 == 6 4 >= 2 (4 % 2 == 0) || (4 % 3 == 0) && 0

• Precedencia < = > == != && || • Asociatividad
– Se aplica de izquierda a derecha, para operadores con igual precedencia.

Expresiones
• La precedencia de todos los operadores de C
Maxima
( ) [ ] ! ~ ++ -- - (unitario) * / % + == != & | && || = += -= /=

Estructura de un programa
• directiva #include
– Incluye librerías o bibliotecas de funciones predefinidas

• Ejemplos
#include #include #include #include /* /* /* /* funciones de entrada y salida */ funciones basicas */ funciones matematicas basicas */ funciones para manejar cadenas de caracteres */

Mínima

Estructura de un programa
• directiva #define
– Definición de constantes simbólicas – Consiste en asignar a un identificador un valor que permanecera constante durante el programa

Estructura de un programa (resumen)
1.
#include #define

2. 3.

Inclusión de librerías Constantes Programa principal

• Ejemplo
#define PI 3.1415

main()

4


Algunas recomendaciones
• Hacer código ordenado:
– 1 instrucción por línea – Utilizar nombres de variables autoexplicativos – Identar el código – Comentar el código

Entrada y Salida
• Las de mayor uso son las orientadas a la entrada y salida de datos con formato(biblioteca stdio.h) • printf
– Salida con formato

• scanf
– Entrada de datos con formato

• Basadas en una serie de caracteres de conversión

Salida con formato: printf
• Sintaxis
printf( 'cadena-de-formato', );

Especificaciones de Conversión
• Los caracteres de conversión de mayor uso son:
número entero en notación decimal (base 10) caracter cadena de caracteres (string) número con decimales, expresado en notación exponencial o de punto flotante (mantisa y exponente) f número con decimales, expresado en notación de punto fijo (parte entera, punto, parte decimal) d c s e

• Cadena de formato
– Debe ir delimitada por comillas dobles – Debe incluir una especificación de conversión por cada argumento en la lista de argumentos. – Texto aparecera durante el despliegue, y cada especificación de conversión sera reemplazada por el correspondiente argumento.

• La lista de argumentos consiste de una secuencia de expresiones que se desean desplegar.

Especificaciones de Conversión
• Pueden incluir
– Un signo menos, que indica que el campo debe ajustarse a la izquierda. – Un número entero, que indica el tamaño mínimo que debera ocupar el campo al desplegarse. – Un punto seguido de un número entero, que indica las posiciones decimales que deben desplegarse. De ser necesario, se agregan ceros al final.

Ejemplos
printf('El valor de la variable x es: %dn', x); El valor de la variable x es: 100 Si x contenía un valor igual a 100. Avanzara a la siguiente línea luego del despliegue printf('Elvalor de dos + cinco es: %dn', 2+5); El valor de dos + cinco es: 7 Avanzara a la siguiente línea luego del despliegue printf('El area de %.2fn', radio, area); un circulo con radio %.2f es

• Secuencias especiales:
%% n t ASCII para imprimir un símbolo de % para provocar que el cursor cambie de línea para producir una tabulación en el despliegue despliega el caracter con el código ASCII suministrado

El area de un circulo con radio 1.00 es 3.14 Suponiendo los valores indicados para las variables. Avanzara a la siguiente línea luego del despliegue

5


Ejemplos
printf('Este es el numero 2 con formato %%5d: %5d', 2); Este es el numero 2 con formato %5d: 2

Ejemplo: Diversos Formatos de Conversión
/* Impresion de los valores de la variable x con distintos formatos. */ #include main()

printf('Numero 2 con formatos %%-5d y %%d: %-5d %d', 2, 2); Numero 2 con formatos %-5d y %d: 2 2

printf('Este es el caracter %c cuyo codigo ASCII es %d', 'A', 'A'); Este es el caracter A cuyo codigo ASCII es 65

Entrada con formato: scanf
• Sintaxisscanf ( 'cadena_de_control', );

Contenido de cadena de control
• Espacios en blanco, tabuladores o finales de línea, los cuales no se tomaran en cuenta. • Caracteres ordinarios (distintos de %), los cuales se espera que coincidan con el próximo caracter %, distinto de blanco del flujo de entrada. • Especificaciones de conversión • Un campo de entrada se define como una cadena de caracteres delimitada por espacios en blanco (incluyendo tabulador y fin de línea).

• La lista de argumentos consiste de una secuencia de punteros a variables, en las cuales se almacenaran las entradas dadas por el usuario.

Caracteres de conversión
d número entero; argumento debe ser puntero a int. h número entero; argumento debe ser puntero a short int. lx número entero; argumento debe ser puntero a long int. c caracter; argumento debe ser puntero a char. Para leer el primer caracter distinto de blanco debe emplearse %1s. s cadena de caracteres; argumento debe ser un puntero a caracter, o el nombre de un vector de caracteres. f número con decimales; argumento debe ser puntero a float. Entrada puede ser en notación de punto fijo (parte entera, punto, decimales), o de punto flotante (mantisa, E, exponente). lf número con decimales; argumento debe ser puntero a double.

Ejemplos
scanf('%d', &edad); Espera entero que sera almacenado en la variable edad. scanf('%4d', &agno); Espera el año actual (4 dígitos). Si se ingresan mas de 4 dígitos, los restantes se descartaran, o se dejaran para la siguiente llamada a scanf.scanf('%d %f', &edad, &salario); Espera un número entero y uno con decimales. scanf('%s', nombre); Espera una cadena de caracteres (string). Entrada se almacenara en el vector nombre, y se delimitara con un ASCII(0) al final.

6


Ejemplo: lectura de números enteros
#include main()

Algunos detalles sobre el lenguaje C
• Conversiones de tipos • Problema de intercambiar dos variables • Operadores ++ y --

Conversiones de tipos
• Conversiones automaticas
– De entero a flotante:
• a = 4 + 4.0 • b = 3.5 + 3 4.0 + 4.0 3.5 + 3.0 8.0 6.5 6
Para los ejemplos: float a; int b;

El problema de intercambiar dos variables
• En C:
tmp=A A=B B=tmp

– De flotante a entero:

• Conversiones manuales (casting de tipos)
– (float)1 – (int)1.5 1.0 1.0

El problema de intercambiar dos variables
#include main()

/* Imprime el valor antes del intercambio */ printf('var1 contiene %d y var2 contiene %dn', var1, var2); aux= var1; var1 = var2; var2 = aux; /* Imprime el valor luego del intercambio */ printf('var1 contiene %d y var2 contiene %dn', var1, var2); }

b es indefinido y x es %dn', x); x++;n'); x es %dn', b, x); ++x;n'); x es %dn', b, x);

7


Operadores ++ y -• Interpretación correcta
b = x++; – notación postfija (asigna a b el valor antes del incremento) b = ++x; – notación prefija (asigna a b el valor después del incremento)

El comando “if”
if ( condición )

• Si ocurre la expresión, se lleva a cabo el bloque de instrucciones

Variación if/else
if ( condición ) else /* (X) */

Variación if/else if/else
if ( condición ) else if ( expresión-booleana ) else

/* (Y) */

• Permite escoger entre varias ramas • Ej.: programa que imprime etapa de la vida dependiendo de la edad (niño 0-12, adolescente 13-19, joven 20-30, adulto 31-50, mayor 51-…)

• Si ocurre algo, hacer X, si no ocurre hacer Y

Ejemplos if
• Crédito autorizado
int salario, credito; if (salario > 1000000) credito = 5000000; else if (salario > 500000) credito = 2000000; else if (salario > 100000) credito = 1000000; else credito = 0;

Ejemplo: ¿Qué hago el sabado por la noche?
main() else } /* continua en pagina siguiente */

8


Ejemplo: ¿Qué hago el sabado por la noche?
else else }

Instrucción switch
switch ( expresión ) case constante2 : case constanteN : default : } 1

2

N

N+1

• Similar a if / else if / else • Es mas claro, es similar a un menú dealternativas. • “break” hace que el programa salte al final del switch. • “default” es un “atrapa todo”.



Ejemplos switch
/* Tipico switch para un menu de una aplicacion. En la variable entera opcion el usuario ingreso su eleccion dentro del menu */ switch (opcion) case 2 : case 3 : default : printf('Opcion invalidan'); }

Ejemplos switch
/* Dado un mes, identifica el trimestre */ switch (mes) case 4 : ; case 5 : ; case 6 : case 7 : ; case 8 : ; case 9 : case 10 : ; case 11 : ; case 12 : default : }

Ejemplo: Calculo de 2n
• Programa que calcula 2n, para n entre 1 y 10. Para la implementación se emplea un switch sin breaks, lo cual puede ser una técnica de programación peligrosa.
main() } x x x x x x x x x = = = = = = = = = x x x x x x x x x * * * * * * * * * 2; 2; 2; 2; 2; 2; 2; 2; 2;

printf('Resultado: %dn', x);

9


Instrucción while
while ( condición )

Instrucción while
• Al ejecutarse la instrucción while, se evaluara la condición en losparéntesis, y si su valor es verdadero (distinto de cero), se ejecutaran las instrucciones entre . • Una vez hecho esto, la condición se vuelve a evaluar y se procede de la misma manera. • Cuando la condición se vuelve falsa (es decir, cero), se dara la instrucción while por terminada cuando se evalúe. • Las instrucciones subordinadas al while pueden ser compuestas, es decir, otras instrucciones while, if, etc.

• Realiza una tarea mientras ocurre una cierta condición

• ¡Ahora podemos hacer un programa que itere! • Se abren muchas posibilidades…

Ejemplo: Contar desde 1 a N
#include main() }

Ejemplo: Tabla de conversión de temperaturas
#include main()

Ejemplo de for
#include int main()
#include main() { double base, pot; int exponente, i;

Calculo de xn
/* Base empleada para el calculo */ /* Exponente empleado para el calculo */

printf('nIngrese el valor de la base: '); scanf('%lf', &base); printf('Ingrese el valor del exponente: '); scanf('%d', &exponente); /* Ciclo que realiza el calculo: i variara de 2 a exponente */ pot = base; for (i=2; i


Política de privacidad