2do parcial c

96
Programación en C / C+ + http://www.cartagena99.com/ recursos/ recursos_programacion.php Programación en C 1

Upload: cesar-oswaldo-osorio-agualongo

Post on 10-Jan-2017

255 views

Category:

Education


1 download

TRANSCRIPT

Page 1: 2do parcial c

Programación en C / C++

http://www.cartagena99.com/recursos/recursos_programacion.php

Programación en C 1

Page 2: 2do parcial c

EL SOFTWARE (PROGRAMAS)

Las operaciones que debe realizar el hardware son específicas por una lista de instrucciones, llamadas programas o software. El software se divide en dos grandes grupos: software del sistema y de aplicacionesSoftware de sistema Es el conjunto de programas indispensable para que la máquina funcione, se domina también programas del sistema. Estos programas son básicamente el Sistema Operativo, los editores de texto, los compiladores/interpretes (lenguajes de programación) y los programas de utilidad.Uno de los programas masi importantes es el Sistema Operativo que sirve, esencialmente para facilitar la escritura y usos de sus programas. Este dirige las operaciones globales de la computadores e instruye a la computadora para ejecutar otros programas y controla el almacenamiento y recuperación de archivos (programas y datos).Gracias al Sistema Operativo es posible que el programador pueda introducir y grabar nuevos programas así como instruir a la computadora para que los ejecute.

Page 3: 2do parcial c

PROGRAMA

Page 4: 2do parcial c

LENGUAJES DE PROGRAMACIONLos lenguajes de programación sirven para escribir programas que permitan la comunicación usuario maquina. Unos programas especiales llamados traductores (compiladores o interpretes) convierten las instrucciones escritas en lenguajes de programación en instrucciones escritas en lenguajes de maquina que esta pueda entender.Los programas de utilidad facilitan el uso de la computadora. Por ejemplo el editor de textosLos programas que realizan tareas concretas como nominas, contabilidad análisis estadístico, etc de denominan programas de aplicación.

Page 5: 2do parcial c

LENGUAJE DE MAQUINA

Page 6: 2do parcial c

LENGUAJE DE BAJO NIVEL

Page 7: 2do parcial c

LENGUAJE DE BAJO NIVEL

Page 8: 2do parcial c

LENGUAJE DE ALTO NIVEL

Page 9: 2do parcial c

LENGUAJE DE ALTO NIVEL

Page 10: 2do parcial c

TRADUCTORES DE LENGUAJELos traductores de lenguaje son programas que traducen a su vez los programas fuente escritos en lenguajes de alto nivel a código de máquina. Los traductores se dividen en: compiladores e interpretes

Page 11: 2do parcial c

COMPILADOR

Page 12: 2do parcial c
Page 13: 2do parcial c

LA COMPILACION Y SUS FASES

La compilación es el proceso de traducción de programas fuente a programas objeto. El programa objeto obtenido de la compilación ha sido traducido normalmente a código de máquina.Para conseguir el programa máquina real se debe utilizar un programa llamando montador o enlazador (linker). El proceso de montaje conduce a un programa en lenguaje máquina directamente ejecutable.El proceso de ejecución de un programa escrito en un lenguaje de programación y mediante un compilador suele tener los siguientes pasos:1. Escritura del programa fuente y guardarlo en un dispositivo de almacenamiento2. Introducir el programa fuente en memoria3. Compilar el programa con el compilador4. Verificar y corregir errores de compilación5. Obtención del programa objeto6. El enlazador obtiene el programa ejecutable7. Se ejecuta el programa y se tendrá la salida deseada

EJECUCION DE UN PROGRAMA

Page 14: 2do parcial c

FASES DE EJECUCION DE UN PROGRAMA

Page 15: 2do parcial c

PROGRAMACION ESTRUCTURADAVS

PROGRAMACION ORIENTADA A OBJETOS

Programación en C 16

Page 16: 2do parcial c

Programación en C 17

UNA FORMA NUEVA DE PENSAR

Es muy importante destacar que cuando hacemos referencia a la programación orientada a objetos no estamos hablando de unas cuantas características nuevas añadidas a un lenguaje de programación. Estamos hablando de una nueva forma de pensar acerca del proceso de descomposición de problemas y de desarrollo de soluciones de programación.

La programación orientada a objetos surge en la historia como un intento para dominar la complejidad que, de forma innata, posee el software. Tradicionalmente, la forma de enfrentarse a esta complejidad ha sido empleando lo que llamamos programación estructurada, que consiste en descomponer el problema objeto de resolución en subproblemas y más subproblemas hasta llegar a acciones muy simples y fáciles de codificar. Se trata de descomponer el problema en acciones, en verbos. En el ejemplo de un programa que resuelva ecuaciones de segundo grado, descomponíamos el problema en las siguientes acciones: primero, pedir el valor de los coeficientes a, b y c; después, calcular el valor del discriminante; y por último, en función del signo del discriminante, calcular ninguna, una o dos raíces.

Como podemos ver, descomponíamos el problema en acciones, en verbos; por ejemploel verbo pedir, el verbo hallar, el verbo comprobar, el verbo calcular…

Page 17: 2do parcial c

Programación en C 18

La programación orientada a objetos es otra forma de descomponer problemas. Este nuevo método de descomposición es la descomposición en objetos; vamos a fijarnos no en lo que hay que hacer en el problema, sino en cuál es el escenario real del mismo, y vamos a intentar simular ese escenario en nuestro programa.

Los lenguajes de programación tradicionales no orientados a objetos, como C, Pascal, BASIC, o Modula-2, basan su funcionamiento en el concepto de procedimiento o función. Una función es simplemente un conjunto de instrucciones que operan sobre unos argumentos y producen un resultado. De este modo, un programa no es más que una sucesión de llamadas a funciones, ya sean éstas del sistema operativo, proporcionadas por el propio lenguaje, o desarrolladas por el mismo usuario.

PROGRAMACION ESTRUCTURADA VS P.O.O.

Page 18: 2do parcial c

Programación en C 19

PROGRAMACION ESTRUCTURADA VS P.O.O.

En el caso de los lenguajes orientados a objetos, como es el caso de C++ y Java, el elemento básico no es la función, sino un ente denominado precisamente objeto. Un objeto es la representación en un programa de un concepto, y contiene toda la información necesaria para abstraerlo: datos que describen sus atributos y operaciones que pueden realizarse sobre los mismos.

Page 19: 2do parcial c

Programación en C 20

EJEMPLOS DE OBJETOS.

Page 20: 2do parcial c

Índice• Estructura de un programa

C.• Variables básicas.• Operaciones aritméticas.• Sentencias de control.• Arrays y Strings.• Funciones.• Estructuras de datos.• Entrada/Salida básica.• Ejemplos I.

• Modificadores de ámbito de las variables.

• Punteros y memoria dinámica.

• Operadores de bit.• Preprocesador C y

compilación.• Librerías estándar.• Ejemplos II.

Programación en C 21

Page 21: 2do parcial c

Programación en C 22

CONCEPTOS BASICOS DE C

Page 22: 2do parcial c

Estructura de un programa en C

Programación en C 23

Todo programa en C se construye básicamente mediante tres tipos de objetos:

Funciones. Variables. Tipos de datos.

Page 23: 2do parcial c

Programación en C 24

#include <biblioteca1.h>#include <biblioteca2.h>

... declaraciones de funciones ...

... definiciones (cuerpos de funciones) ...

... declaraciones de variables globales ...

main(){... cuerpo del main ...

}... otras definiciones de funciones ...

Definición de Cabecera y/o

Ficheros

Declaración de Datos

Función Principal

Otras Funciones y/o

Procedimientos

/*Variantes de Definición*/ #include<nombre_de_la_biblioteca>#define nombre_de_la_constante

//Función principal void main(){ definición de variables locales; instrucciones del programa;

}

• Estructura de un programa en C

Page 24: 2do parcial c

Estructura de un programa en C

Función main():#include <stdio.h>int main(){printf(“Hola mundo!!\n”);return(0);

}

Programación en C 25

Page 25: 2do parcial c

Estructura de un programa en CFichero hola.c# include <stdio.h>int main(){

printf(“Hola mundo!!\n”);return(0);

}

Programación en C 26

Compilación

Ejecución

Page 26: 2do parcial c

Características de C• Sensible a mayúsculas y minúsculas: sum y Sum• Indentación y espacios en blanco.• Sentencias (terminan con un punto y coma).• Bloques (delimitados entre llaves).• Elementos de un programa:

– Palabras reservadas (muy pocas).– Funciones de librería estándar.– Variables y funciones definidas por el programador.

Programación en C 27

Page 27: 2do parcial c

ESTRUCTURA DE UN PROGRAMA

El inicio del programa debe llevar:

El símbolo de numeral (#) la sentencia “include”, y entre

signos de mayor y menor que (<>) el nombre de la librería o

fichero.

Seguidas de las librerías, para que “Incluya” en el programa la

directiva la cual contiene las funciones para procesar datos.

#include <fichero>

28

Page 28: 2do parcial c

ESTRUCTURA DE UN PROGRAMA

#include <stdio.h>.- Contiene las funciones de entrada y salida de datos.#include <conio.h>.- Declara varias funciones usadas llamando la consola del sistema operativo.#include <string.h>.- Manejo de cadenas.#include <stdlib.h >.- Memoria dinámica. #include <math.h >.- Rutinas matemáticas.

29

Page 29: 2do parcial c

Comentarios• Los comentarios en C pueden ocupar varias

líneas y se encuentran delimitados entre /* y */.

int main(){/* Esto es un comentario de varias lineas.*/return(0);

}

Programación en C 30

Page 30: 2do parcial c

Programación en C

Entrada/salida básica

Programación en C 31

Page 31: 2do parcial c

Funciones de entrada/salida• Las funcionalidades de entrada/salida en C no

pertenecen a las palabras reservadas del lenguaje. Son funciones de librería, por ejemplo:– Entrada: scanf().– Salida: printf().

Programación en C 32

Page 32: 2do parcial c

printf()• El formato de llamada de printf()es:

printf(format, exp1, exp2, exp3,..., expn);

donde:– format : Es el string de formato de salida de los

datos.– expi : Es la expresión a incluir dentro del formato.

Programación en C 33

Page 33: 2do parcial c

printf()

Ejemplo:int a=3;float x=23.0;char c=‘A’;printf(“Hola mundo!!\n”);

printf(“Un entero %d\n”,a);

printf(“Un real %f \ny un char %c\n”,x,c);

Programación en C 34

Page 34: 2do parcial c

printf()

Formato Expresión Resultado%d %i entero entero decimal con signo%u entero entero decimal sin signo%o entero entero octal sin signo%x %X entero entero hexadecimal sin

signo%f real real en notación punto

%e %E %g %G real real en notación científica%c carácter carácter%p puntero dirección de

memoria%s string cadena de caracteres%ld %lu ... entero largo entero largo (distintos

formatos)

Programación en C 35

Page 35: 2do parcial c

printf()• Otras opciones de formato:

– Precisión (número de decimales).– Justificación (izquierda o derecha).– Caracteres especiales (% o \).– ...

Ver página del manual:man printf

Programación en C 36

Page 36: 2do parcial c

scanf()• El formato de llamada de scanf()es:

scanf(format, dir1, dir2, dir3,..., dirn);

donde:– format : Es el string de formato de entrada de los

datos.– diri : Es la dirección donde se almacena el

resultado.

Programación en C 37

Page 37: 2do parcial c

scanf()

Ejemploint a,*pa;float x;char c;

scanf(“%d”,&a); /* Lee un entero y lo

almacena en a */scanf(“%f %c”,&x,&c); /* Lee x y c */scanf(“%d”,pa); /* PELIGROSO */pa=&a; scanf(“%d”,pa); /* OK. Lee a */

Programación en C 38

Page 38: 2do parcial c

scanf() Lectura de strings

Ejemplo:char *pc;char str[82];

scanf(“%s”,pc); /* PELIGROSO */

scanf(“%s”,str); /* Lee hasta un blanco o fin de línea */

scanf(“%[^\n]”,str); /* Lee toda la línea */

Programación en C 39

Page 39: 2do parcial c

ENTRADA Y SALIDA DE DATOS

Se utiliza las funciones de biblioteca:

“scanf” para la entrada de valores.

Sintaxis es la siguiente:

Lee el valor y lo guarda en una variable.

“printf” para la salida de información.

Sintaxis es la siguiente:

Imprime en pantalla el texto y el valor

40

scanf ("%d", &variable);

printf ("El valor es %d", variable);

Page 40: 2do parcial c

La función COUT

Programación en C 41

#include <iostream>int main() {

int x = 5;int y = 7;cout << "\n";cout << x + y << " " << x * y;cout << "\n";return 0;

}

Page 41: 2do parcial c

ENTRADA Y SALIDA DE DATOS

ENTRADA DE TIPO CARÁCTER.

Se declara una variable de tipo carácter y se guarda en: getch() o

getche().

La diferencia es que getche() muestra en pantalla el carácter introducido.

getch() lo mantiene oculto.

Sintaxis:

char opc;

opc=getch();

opc=getche();

42

Page 42: 2do parcial c

Programa que realiza la suma de dos numeros.

#include <stdio.h> int x; main(){ int a,b,suma; a=5; b=12; suma=a+b; suma=suma+b; printf("%d",suma); }

43

Page 43: 2do parcial c

TIPOS DE ARCHIVOS

Programación en C 44

Page 44: 2do parcial c

Programación en C

Variables básicas

Programación en C 45

Page 45: 2do parcial c

CONCEPTOS BASICOS

Programación en C 46

Page 46: 2do parcial c

Ámbito de las variables• La declaración de las variables lleva asociado un

ámbito, dentro del cual la variable es visible:

– Ámbito global: La variable es visible para todas las funciones del programa.

– Ámbito local: La variable es visible sólo dentro de la función. (Tiene prioridad sobre el ámbito global)

Programación en C 47

Page 47: 2do parcial c

Ámbito de las variablesint x,y;int main(){float x,z;/* Aquí x y z son reales e y un entero */

}

/* Aquí x e y son variables enteras *//* La variable z no existe fuera de la función */

Programación en C 48

Page 48: 2do parcial c

AMBITO DE LAS VARIABLES

49

Variable Global Variable Local

#include <stdio.h>int x;int main()

{}

#include <stdio.h>int main()

{int x;}

Page 49: 2do parcial c

Programación en C 50

C++ dispone del operador (::), llamado operador de resolución de visibilidad (scoperesolution operator). Este operador, antepuesto al nombre de una variable global que está oculta por una variable local del mismo nombre, permite acceder al valor de la variable globa l6.Considérese el siguiente ejemplo:int a = 2; // declaración de una variable global avoid main(void){...printf("a = %d", a); // se escribe a = 2int a = 10; // declaración de una variable local aprintf("a = %d", a); // se escribe a = 10printf("a = %d", ::a); // se escribe a = 2}El operador (::) no permite acceder a una variable local definida en un bloque más exterioroculta por otra variable local del mismo nombre. Este operador sólo permite acceder a una variableglobal oculta por una variable local del mismo nombre.

OPERADOR DE VISIBILIDAD

Page 50: 2do parcial c

Tipos de variables

Programación en C 51

1. Texto (tipo de dato char ) está constituido por caracteres simples, como a, Z, ¿, 3 y cadenas, como “Esto es una prueba” (normalmente, de 8 bits o un byte por carácter, con un rango de 0 a 255).2.  Los valores enteros (tipo de dato int ) son aquellos números que se aprendieron a contar (1, 4, -2, 1354);normalmente, tienen un tamaño de 16 bits, 2 bytes o una palabra, con rango de -32768 a 32767. En Windows 98 yWindows NT, los valores enteros tienen un tamaño de 32 bits con un rango de -2147483648 a 2147483647.3. Los valores en coma flotante (tipo de dato float ) son números que tienen una parte fraccional, como por ejemplo pi(3,14159), y exponentes. También se conocen como números reales (normalmente, son de 32 bits, 4 byteso 2 palabras, con un rango de +/-3,4E-38 a 3,4E+38).4.  Los valores en coma flotante de doble precisión (tipo de dato double ) tienen un rango superior (normalmente de 64 bits, 8 bytes ó 4 palabras, con un rango de 1, 7E-308 a 1, 7E+308). Los valores en coma flotante long double (doble precisión largos) son incluso más precisos (normalmente, tamaño de 80 bits ó 5 palabras, con un rango de+/-1,18E-4932 a 1,18E-4932).5. Los tipos de datos enumerados (tipo de dato enum ) permiten al usuario definir tipos de datos.6.  El tipo void se utiliza para especificar valores que ocupan cero bits y no tienen valor (este tipo también se puede utilizar para la creación de punteros genéricos.7. El tipo de dato puntero no contiene información en el mismo sentido que el resto de los tipos de datos; en su lugar, cada puntero contiene la dirección de la posición de memoria que almacena el dato actual.8.  El tipo de dato bool , al que se le puede asignar las constantes true (verdadero) y false (falso

Page 51: 2do parcial c

Tipos de variables

Programación en C 52

long double 96 18 3.3621e-4932 1.18973e+493

Page 52: 2do parcial c
Page 53: 2do parcial c

Modificadores de tipos• Ciertos tipos básicos admiten diversos

modificadores:– unsigned :Sólo valores positivos (sin signo).– signed : Valores positivos y negativos (por omisión).– long : Formato largo (para enteros únicamente).

Ejemplos:unsigned intsigned charlong int (usualmente representado como long)unsigned long int

Programación en C 54

Page 54: 2do parcial c

Llamada sizeof()• La llamada sizeof() se utiliza para determinar el

número de bytes que ocupa una variable o un tipo:

int a;sizeof(a);sizeof(unsigned int);

Programación en C 55

Page 55: 2do parcial c

Uso de los tipos de datos en C++

Programación en C 56

Page 56: 2do parcial c

Expresiones constantes• Para definir las constantes de tipo carácter

asociadas a caracteres especiales se usan secuencias de escape:– ‘\n’: Retorno de carro.– ‘\t’: Tabulador. – ‘\b’: Bell.– ‘\0’: Carácter nulo.– ...

Programación en C 57

Page 57: 2do parcial c

La función printf

Programación en C 58

/* ejemplo .- Ilustra formatos con reales y enteros */#include <stdio.h>#define va_int 805#define va_float 332.41e-1int main () {

printf(" %f ", va_float); /* imprime 33.241*/printf(" %.1f ", va_float); /* imprime 33.2*/printf(" %.4f ", va_float); /* imprime 33.2410*/printf(" %1.4e ", va_float); /* imprime 3.3241e+01*/printf(" %d ", va_int); /* imprime 805*/printf(" %10f", va_float); /* imprime 33.241*/return 0;

}

Page 58: 2do parcial c

Variable tipo Caracter

Programación en C 59

Page 59: 2do parcial c

Secuencias de Escape

Programación en C 60

Existe una serie de caracteres no imprimibles que el editor los toma como comandos, por lo que la manera de acceder a ellos es mediante una secuenciade escape.

Page 60: 2do parcial c

#include <stdio.h>int main(void) { int x=45; double y=23.354; char z[]="Esto es vida";

/* utilizamos barras inclinadas (/) para ver claramente la anchura del campo de caracteres */ printf("Voy a escribir /45/ utilizando el formato %%d: /%d/\n", x); printf("Voy a escribir /45/ utilizando el formato %%1d: /%1d/\n", x); printf("Voy a escribir /45/ utilizando el formato %%10d: /%10d/\n\n", x); printf("Voy a escribir /23.354/ utilizando el formato %%f:/%f/\n", y); printf("Voy a escribir /23.354/ utilizando el formato %%.3f: /%.3f/\n", y); printf("Voy a escribir /23.354/ utilizando el formato %%5.1f: /%5.1f/\n", y); printf("Voy a escribir /23.354/ utilizando el formato %%-10.3f:/%-10.3f/\n", y); printf("Voy a escribir /23.354/ utilizando el formato %%5f: /%5f/\n\n", y); printf("Voy a escribir /Esto es vida/ utilizando el formato %%s: /%s/\n", z); printf("Voy a escribir /Esto es vida/ utilizando el formato %%.7s:/%.7s/\n", z); printf("Voy a escribir /Esto es vida/ utilizando el formato %%-15.10s: /%-15.10s/\n", z); printf("Voy a escribir /Esto es vida/ utilizando el formato %%15s: /%15s/\n", z);}

Page 61: 2do parcial c

Declaración de variables• Declaración simple:

– char c;– unsigned int i;

• Declaración múltiple:– char c,d;– unsigned int i,j,k;

• Declaración y asignación:– char c=’A’;– unsigned int i=133,j=1229;

Programación en C 62

Page 62: 2do parcial c

Expresiones constantes• El formato de las expresiones constantes es;

– Un expresión real se puede dar tanto en notación decimal (2.56) como científica (2.45E-4).

– A una expresión de tipo long se le añade un L al final (200L).

– Una expresión de tipo carácter se define entre comillas simples (‘A’).

Programación en C 63

Page 63: 2do parcial c

Constantes y E/S simple

Programación en C 64

#include <stdio.h>#define PI 3.1416 /* definición de constante */int main (){

float perim, radio; int dos=2;printf(" Calcula el perímetro de una circunferencia");printf(" Indique el tamaño de radio de la circunferencia");scanf("%f", &radio);perim= dos*PI*radio;printf(" El perímetro de la circunferencia es %f", perim);printf(”Valores utilizados para calcular el perímetro:");printf(" Constante PI=%f, valor de dos = %d, radio=%f ",PI, dos,radio);return 0;

}

Page 64: 2do parcial c

Declaracion de una constante

Programación en C 65

Page 65: 2do parcial c

Casting• Casting: mecanismo usado para cambiar de tipo

expresiones y variables:int a;float b;char c;

b=65.0;a=(int)b; /* a vale 65 */c=(char)a; /* c vale 65 (Código ASCII de ‘A’) */

Programación en C 66

Page 66: 2do parcial c

Casting

Programación en C 67

/* ejemplo 4.- realizamos conversiones de tipos implícitas y explícitas */#include <stdio.h>int main() {

double d , e , f = 2.33 ;int i = 6 ;e = f * i ; /* e es un double de valor 13.98*/printf( "Resultado = %f", e);d = (int) ( f * i ) ; /* d es un double de valor 13.00*/printf( "Resultado = %f", d);d = (int) f * i ; /* f se ha convertido a un entero truncando

sus*//*decimales, d es un double de valor 13.00*/printf( "Resultado = %f", d);return 0;

}

Page 67: 2do parcial c

Programación en C

Operaciones aritméticas

Programación en C 68

Page 68: 2do parcial c

Operaciones aritméticas• El operador de asignación es el igual (=).• Los operadores aritméticos son:

– Suma (+)– Resta (-)– Multiplicación (*)– División (/)– Módulo o resto (%)

Programación en C 69

Page 69: 2do parcial c

Operaciones aritméticas• División entera vs división real:

– Depende de los operandos:4 / 3 --> 1 entero 4.0 / 3 --> 1.333 real4 / 3.0 --> 1.333 real4.0 / 3.0 --> 1.333 real

Programación en C 70

Page 70: 2do parcial c

Pre/post-incrementos

Los operadores unarios (++) y (--) representan operaciones de incremento y decremento, respectivamente.a++; /* similar a a=a+1 */

Ejemplos:a=3; b=a++; /* a=4, b=3 */a=3; b=++a; /* a=4, b=4 */a=3; b=a--; /* a=2, b=3 */

Programación en C 71

Page 71: 2do parcial c

Operaciones de asignación

El operador de asignación en C es el igual(=)a=b+3;

Existen otras variantes de asignación:a+=3; /* Equivalente a a=a+3 */a*=c+d; /* Equivalente a a=a*(c+d) */a/=a+1; /* Equivalente a a=a/(a+1) */

Para las asignaciones entre variables o expresiones de tipos diferentes se recomienda hacer casting:a=(int)(x/2.34);

Programación en C 72

Page 72: 2do parcial c

OPERADORES

Programación en C 73

Dentro de c++ tenemos los típicos operadores matemáticos + - * / y también los operadores unarios (++ --) En este primer ejemplo vemos operadores unarios y la asignación múltiple.

#include <iostream>int main () {

// Sacamos por salida standar un mensajecout << "Vamos a probar los peradores\n";unsigned int test = 0;unsigned int a = 0, b = 0, c;// Sacamos el valor por pantalla de testcout << "Valor de test: " << test << endl;// Sacamos el valor por pantalla de test++cout << "Valor de test++: " << (test++) << endl;

cout <<“El valor de test es”<<test<<endl;// Sacamos el valor por pantalla de ++testcout << "Valor de ++test: " << (++test) << endl;cout << "Valor de test actual: " << test << endl;// asignacion multiplec = b = a = test;// Veamos el resto de valorescout << "Y los demas: " << c << " " << b << " " << a << endl;

return 0;}

Page 73: 2do parcial c

Operadores de comparación

Los operadores de comparación en C son:– Igual (==) – Distinto (!=)– Mayor (>) y Mayor o igual (>=)– Menor (<) y Menor o igual (<=)

El resultado de un operador de comparación es un valor entero (0 es falso) y (distinto de 0 verdadero).a=3>7 /* a vale 0 (falso) */

Programación en C 74

Page 74: 2do parcial c

Operadores lógicos

Sobre expresiones booleanas (enteros) se definen los siguientes operadores lógicos:– And lógico (&&)– Or lógico (||)– Negación lógica (!)

Ejemploa=(3>2 || 5==4) && !1 /* Falso */

C tiene un modelo de evaluación perezoso.a=3>2 || w==4 /* w==4 no se evalúa */

Programación en C 75

Page 75: 2do parcial c

Operador ?El operador condicional es el único operador ternario de la gramática C++ y sirve para tomar decisiones. Proporciona un resultado entre dos posibilidades en función de una condición.Sintaxisexpresion-relacional ? expr1 : expr2

El operador condicional ? : produce un resultado. En la expresión E1 ? E2 : E3, E1 es una expresión relacional ( 4.9.12) que se evalúa primero. Si el resultado es cierto, entonces se evalúa E2 y este es el resultado. En caso contrario (si E1 resulta falso), entonces se evalúa E3 y este es el resultado. Observe que si la premisa E1 es cierta, entonces no llega a evaluarse la expresión E3.

El operador ? : puede usarse para sustituir ciertas sentencias del tipo if-then-else, aunque puede conducir a expresiones más compactas que las correspondientes if...else. En el ejemplo que sigue, a y se le asigna el valor 100:x = 10;y = x > 9 ? 100 : 200;

Page 76: 2do parcial c

Operador ?int main(){

int a,b=4,c=5; a=b>0 ? c : c+1;

/* Equivalente aif(b>0)

a=c;else

a=c+1; }cin>>n;paginas=(16*240*(n*2))/(12*n);marineros=n-((n*60)/70);

Programación en C 77

#include <iostream>#include <stdio.h>using namespace std;main(){ int b=10,c=5; b>=1 && b<=5 ? printf ("hola"):printf ("Buenos dias");

}

Page 77: 2do parcial c

if ... elseint main(){

int a=3,b;

if(a>2){

b=100+a;printf(“parte

if”);}else printf(“parte else”);

}

Programación en C 78

a>2

<if> <else>

Page 78: 2do parcial c

Programación en C 79

#include <iostream>int main () {

// Sacamos por salida standar un mensajecout << "Vamos a probar los operadores\n";unsigned int test = 0;unsigned int a = 0, b = 0, c;// asignacion multiplec = b = a = ++test;b += 3;c++;a -= 1;// Veamos el resto de valorescout << "Son estos: c=" << c << " b=" << b << " a=" << a << endl;a += b + c;cout << "Y ahora son estos: c=" << c << " b=" << b << " a=" << a << endl;// Tomamos el valor acout << "Dame valores. \na=";cin >> a;// Tomamos el valor bcout << "b=";cin >> b;// Tomamos el valor ccout << "c=";cin >> c;cout << "Y ahora son estos: c=" << c << " b=" << b << " a=" << a << endl;//Probamos el ifif (a > b) {

cout << "A es mayor que B" << endl;}

//Probamos el ifif (a >= b) {

cout << "A es mayor o igual que B" << endl;}

//Probamos el ifif (a <= b) {

cout << "A es menor o igual que B" << endl;}

return 0;}

Page 79: 2do parcial c

Programación en C 80

#include <iostream>int main () {

// Sacamos por salida standar un mensajecout << "Vamos a probar los operadores\n";unsigned int test = 0;int a = 23, b = 21, c = 34;// Veamos el resto de valorescout << "Valores: " << c << " " << b << " " << a << endl;// Tomamos el valor acout << "Dame valores. \na=";cin >> a;// Tomamos el valor bcout << "b=";cin >> b;// Tomamos el valor ccout << "c=";cin >> c;cout << "Y ahora son estos: c=" << c << " b=" << b << " a=" << a << endl;// Veamos una sentencia if-else sencillaif (!(a == b)) cout << "a y b no son iguales" << endl;else cout << "a y b son iguales" << endl;// Veamos otra sentencia if-else sencillaif ((a == b) || (b == c)) cout << "A y B son iguales o B y C son iguales" << endl;else cout << "ni A y B son iguales ni B y C son iguales" << endl;// Nota. Ley de De Morgan// !(A && B) == !A || !B// !(A || B) == !A && !Breturn 0;}

Operadores lógicos. A continuación vemos algunos ejemplos de operadores lógicos (comparaciones) y la combinación de estos.

Page 80: 2do parcial c

Programación en C 81

Programa para probar operadores Lógicosusing namespace std;#include <iostream>int main () {// Sacamos por salida standar un mensajecout << "Vamos a probar los operadores\n";unsigned int test = 0;int a = 23, b = 21, c = 34;// Veamos el resto de valorescout << "Valores: " << c << " " << b << " " << a << endl;// Tomamos el valor acout << "Dame valores. \na=";cin >> a;// Tomamos el valor bcout << "b=";cin >> b;// Tomamos el valor ccout << "c=";cin >> c;cout << "Y ahora son estos: c=" << c << " b=" << b << " a=" << a << endl;// Veamos una sentencia if-else sencillaif (!a)cout << "A es false (igual 0)" << endl;elsecout << "A es true (distinto de 0)" << endl;// Veamos una sentencia if-else sencillaif (!b)cout << "B es false (igual 0)" << endl;elsecout << "B es true (distinto de 0)" << endl;// Veamos una sentencia if-else sencillaif (!c)cout << "C es false (igual 0)" << endl;elsecout << "C es true (distinto de 0)" << endl;// Sentencia con operador logico o TERNARIO ()?:c = (a == b)?0:1;cout << "C es : " << c << endl;return 0;}

Page 81: 2do parcial c

Switch switch(ch){case ‘A’: printf(“A”);

break;case ‘B’: case ‘C’: printf(“B o C”);case ‘D’: printf(“B, C o D”);

break;default: printf(“Otra letra”);

}

Programación en C 82

Page 82: 2do parcial c

PROPOSICIÓN WHILE

Primero se evalúa expresión; si es falso (o es el valor cero), el control pasa directamente a proposición siguiente (proposición que no se repite), pero si es verdadero (o el valor es distinto de cero), entonces se ejecuta (proposición a repetir), y el control se devuelve al principio del ciclo while. De este modo, proposición se ejecuta cero (la expresión es falsa en la primera evaluación) o varias veces hasta que expresión sea falsa, en ese momento, el control pasará a la proposición que no se repite. El efecto de esto es que la proposición puede ejecutarse cero, una o más veces.Es posible que, sin advertirlo, se especifique una expresión que nunca se convierta en falsa (o cero), y con esto el programa quedará en un ciclo infinito a menos que se introduzcan medios para escapar del ciclo while; para evitar tal situación debe tenerse cuidado.

Page 83: 2do parcial c

whileint main(){

int i=0,ac=0;

while(i<100){

printf(“%d”,i*i);ac+=i;i++;

}}

Programación en C 84

i<100

i=0

<while>

i++

Page 84: 2do parcial c

Programación en C 85

Crear un programa que calcule el factorial de un número que sea un entero mayor o igual que cero teniendo como condición que el bucle termina cuando su valor llega a 0.Entrada : xSalida : 1*2*3*4*5…..*x (si x>0)

1 (si x=0)Restricciones: x ≥ 0#include<stdio.h>main(){

int contador,numero,fact=1;printf(“Ingrese el número para calcular el factorial \”);scanf(“%d”,&numero);if(numero >0){ contador=numero ; while(contador) { fact=fact*contador; contador--; } printf(“El factorial de %d es %d \n”,numero,contador);}else if(numero==0) printf(“El factorial de 0 es 1 \n”); else printf(“los factoriales de números negativos no existen \n”);

}

Page 85: 2do parcial c

Programación en C 86

Cree un programa que calcule a^b, donde a >0 y b>0

Entrada : a,bSalida : a^bRestricciones: a>0 y b>0

Genere un programa que Calcule el inverso de un numero. ej. 541 su inverso es 145.

main(){ int a=0,b=0,pot,n,con=1; while (a<=0 || b<=0) { system("cls"); printf ("Ingresse a\t"); scanf("%d",&a); printf ("Ingresse b\t"); scanf("%d",&b); } pot=a; n=b-1; while (con<=n) { pot=pot*a; con++; } printf("%d",pot);}

Page 86: 2do parcial c

do ... while

int main(){

int i=0,ac=0;

do{

printf(“%d”,i*i);ac+=i;i++;

}while(i<10);

} Programación en C

i<100

i=0

<do>

i++

Este es un ciclo o estructura cíclica, pero la principal diferencia es que este se ejecuta al menos una vez.

Page 87: 2do parcial c

Programación en C 88

Ej. 1 Escribir un programa donde se puedan leer tantos números como se quiera hasta que llegue un cero. El resultado es la suma de todos los números leídos.

Ej. 2 Leer una serie de números por teclado hasta llegar a 0 e indique cual es el mayor.

Ej 3 Mostrar los múltiplos de 3 a partir del número 15 hasta el 30.

Ej 4 Mostrar la suma de numeros impares mientras el dato ingresado sea distinto de cero

do ... while

Page 88: 2do parcial c

Programación en C 89

PROPOSICIÓN FORSintaxis:for (expresión1 ; expresión2 ; expresión3) proposición verdadera;proposición siguiente;ofor (expresión1 ; expresión2 ; expresión3){ proposición verdadera1; proposición verdadera2; …. proposición verdaderaN;}proposición siguiente;

Primero se evalúa expresión1 (lo usual es que expresión1 inicie el ciclo); después, se evalúa expresión2, si la expresión 2 es verdadera (o posee un valor distinto de 0) entonces se ejecuta la proposición verdadera o el conjunto de expresiones verdaderas. Note que el conjunto de expresiones verdaderas está compuesto por más de una expresión verdadera y por lo tanto debe de llevar las llaves { }. Posterior al ejecutar la proposición o proposiciones verdades, entonces se ejecuta la expresión 3, la cual generalmente aumenta o disminuye la variable, o variables que condicionan el ciclo. Posteriormente se vuelve a evaluar la expresión2, si esto es verdadero se vuelve a ejecutar la proposición o conjunto de proposiciones verdaderas, donde posteriormente se evalua la expresión3. Note que la expresión1, sólo se ejecuta la primera vez, luego la expresión2 y expresión3 se pueden ejecutar muchas veces mientras la expresión 2 sea verdadera.Finalmente, si la expresión2 es falsa (o posee un valor 0), entonces se ejecuta la proposición siguiente.

Page 89: 2do parcial c

forint main(){

int i,ac=0;

for(i=0;i<100;i++){

printf(“%d”,i*i);ac+=i;

}}

Programación en C 90

i<100

i=0

<for>

i++

Sintaxis: for(inicialización,condición_permanencia,incremento

)

1

23

321

Page 90: 2do parcial c

Programación en C 91

Crear un programa que calcule el factorial de un número que sea un entero mayor que cero.

#include<stdio.h>main(){ int contador,numero,fact=1; printf(“Ingrese el número para calcular el factorial \n”); scanf(“%d”,&numero); if (numero >0) { for( contador=numero ; contador ; contador--) fact=fact*contador; printf(“El factorial de %d es %d \n”,numero,fact); } else if (numero==0) printf(“El factorial de 0 es 1 \n”); else printf(“los factoriales de números negativos no existen \n”);}

Page 91: 2do parcial c

Ejercicio

Programación en C 92

Genere un programa para realizar la siguiente figura

Page 92: 2do parcial c

Programación en C 93

main(){ int i,j,N,b,pot,suma=0; printf("Ingrese N\n"); scanf("%d",&N); if(N>0 ) { for(i=1;i<=N;i++) { pot=1; for(j=1; j<=i ; j++) { pot=i*pot; } suma=suma+pot;

} printf("El resultado es. %d \n",suma); } else printf("el número ingresado no es mayor que 0 \n");}

Page 93: 2do parcial c

EJERCICIOS

Programación en C 94

Page 94: 2do parcial c

break y continueint main(){int i;for(i=0;i<100;i++){

if(i%2==0)continue;/*Comienza la

iteración*/if(i%17==0)

break; /*Sale del bucle*/printf(“%d”,i);

}}

Programación en C 95

Page 95: 2do parcial c

Programación en C 96

#include <stdio.h>

int main(){   int n, a;

   a = 0;   do   {     printf( "Introduzca un numero entero: " );     scanf( "%d", &n );

     if ( n == 0 )     {      printf( "ERROR: El cero no tiene opuesto.\n" );      continue;      /* En el caso de que n sea un cero,         la iteración en curso del bucle         se interrumpe aquí. */     }     printf( "El opuesto es: %d\n", -n );     a += n;   } while ( n >= -10 && n <= 10 );

   printf( "Suma: %d", a );   return 0;}

La instrucción de salto continue siempre se usa para interrumpir (romper) la ejecución normal de un bucle. Sin embargo, el control del programa no se transfiere a la primera instrucción después del bucle (como sí hace la instrucción break, es decir, el bucle no finaliza, sino que, finaliza la iteración en curso, transfiriéndose el control del programa a la condición de salida del bucle, para decidir si se debe realizar una nueva iteración o no.

Por tanto, la instrucción continue finaliza (termina) la ejecución de una iteración de un bucle, pero, no la ejecución del bucle en sí. De forma que, la instrucción continue salta (no ejecuta) las instrucciones que existan después de ella, en la iteración de un bucle.

LA INSTRUCCION CONTINUE

Page 96: 2do parcial c

Programación en C 97

LA INSTRUCCION BREAK

#include <stdio.h>int main(){   int n, a;   a = 0;   do   {      printf( "Introduzca un numero entero: " );      scanf( "%d", &n );

      if ( n == 0 )      {         printf( "ERROR: El cero no tiene opuesto.\n" );         break;         /* En el caso de que n sea un cero,            el bucle se interrumpe. */      }      printf( "El opuesto es: %d\n", -n );      a += n;   } while ( n >= -10 && n <= 10 );

   printf( "Suma: %d", a );   return 0;}

La instrucción de salto break se usa para interrumpir (romper) la ejecución normal de un bucle, es decir, la instrucción break finaliza (termina) la ejecución de un bucle y, por tanto, el control del programa se transfiere (salta) a la primera instrucción después del bucle.