1. repaso del lenguaje c - utmzarza/03_otros_cursos/repaso_del_lenguaje_c...introducción el...

49
1. Repaso del Lenguaje C M.C. Luis A. Zarza López Graficación por Computadora Universidad Tecnológica de la Mixteca Julio de 2016

Upload: phungliem

Post on 17-May-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

1. Repaso del Lenguaje CM.C. Luis A. Zarza López

Graficación por Computadora

Universidad Tecnológica de la MixtecaJulio de 2016

Introducción

El lenguaje C fue desarrollado en la década de 1970 en el ambiente UNIX, expandiéndose a universidades e industria.

Es uno de los lenguajes de programación más usados.

Tiene un acceso muy directo a la memoria y recursos del sistema.

1.1 Instrucciones y operadores básicos

Constantes Valores o datos introducidos directamente en

el código Ejemplos: 12, 3.1416, "Hola"

Variables Espacios de almacenamiento de datos,

asociados Ejemplos: edad, fecha, a

Expresiones Conjunto de constantes, variables y

operadores que al ser calculados producen un dato

Proposición Instrucción que determina una acción Un programa es una secuencia de

proposiciones

Hola, Mundo#include <stdio.h>int main(){ printf( "Hola Mundo\n" ); return 0;}

Función main

Es la función de entrada a un programaRespetar mayúsculas y minúsculasDeclararlo comoint mainCuando termina main (o retorna resultado), el

programa termina

Reglas para nombres (variables o funciones)

Usar letras, _ (guión bajo) y dígitos Iniciar con letraRecomendaciones:

Evitar usar puras mayúsculas Evitar iniciar con guión bajo (_) Evitar usar abreviaciones Tipo “delimitadores”

int valor_maximo Tipo “camello”

int valorMaximo;

Palabras reservadas

Son identificadores reservados int, for, return, break, etc.

No se deben usar como nombres de variablesNo es buena idea usar palabras reservadas

cambiando a mayúsculas:int INT;

Consejo para nombres

Usar palabras en español (sin caracteres especiales, acentos o eñes), que describan el valor que contienen.

Usando tipos predefinidos

DeclaraciónAsignaciónAsignación compuestaOperadores comunesIncremento y decrementoPrecedencia de operadores

Tipos de datos

En C, los datos deben especificarse por tipo:Entero int: Sólo enteros, con y sin signoFlotante float: Con punto decimalCarácter char: Una letra

Existen más tipos, como variantes de las anteriores, pero de momento sólo se usarán las anteriores

Declaración

Las variables se declaran en funciones, bloques o al inicio del programa (globales)

int contador;int contador, numeroEmpleado;

Se puede declarar e inicializar a la vez:int contador = 4;char inicial = 'J';

Asignación compuesta, incremento y decremento

Ajustando el valor de una variable:contador = contador + 20;Se puede abreviar así:contador += 20;También es válido para -,*,/,% (módulo) Incrementos y decrementoscontador++;restantes--;Si forman parte de una expresión y se desea el valor previo, se puede aplicar así:a = ++contador;a = --contador;

Operadores

Operadores comunes Ejemplos

Igualdad == !=

Mayor-menor < > <= >=

Condicionales (lógicos) && || ?:

Incremento ++

Decremento --

Aritméticos + - * / %

Asignación = *= /= %= += <<= >>= &= ^= |=

Asignaciones

Las asignaciones y operaciones condicionales se hacen desde la derecha:

a = b = 8;a = ( b = 8 );El resto de las operaciones binarias (con dos

argumentos) se hacen desde la izquierdax + y + z;(x + y) + z;

PrecedenciaUnarios ! ~ ++x --x Multiplicativos * / % Aditivos + - Desplazamientos << >> Comparación < > <= >=Igualdades == != Bits & | ^Condicionales && Condicionales || Condicionales ?: Asignaciones = *= /= %= += -= <<= >>= &= ^= |=

Bloques

Las proposiciones de un programa se agrupan en bloques

Los bloques se rodean entre llaves { y }Los bloques son anidables, ie. un bloque puede

contener otros bloques

Tipos de proposiciones

Los bloques nos permiten agrupar código que será ejecutado dependiendo de ciertas condicionesProposiciones de selección

if switch

Proposiciones de iteración while do for

Proposiciones de salto goto break continue

1.2 Estructuras de decisión

Existen estructuras para tomar decisiones, es decir, ejecutar código dependiendo de algunas condiciones

if

Hace una selección de código a ejecutar dependiendo del valor de una expresión

Sintaxis:if ( expresión_condicional )

proposicion_o_bloque else

proposicion_o_bloque

Ejemplos de if Proposición if simple: if (number % 2 == 0) printf("par"); Pueden ir en la misma línea, pero es poco recomendable: if (number % 2 == 0) printf( "even" ); Cuando sólo hay una proposición integrada, no hacen falta las llaves (bloque), pero

suele recomendarse para evitar errores: if (number % 2 == 0){ Printf( "even" ); } Si son varias las proposiciones a ejecutar, se deben usar bloques: if (minute == 60) { minute = 0; hour++; } Siempre se deberá indentar apropiadamente. No hacerlo es imperdonable.

Proposiciones if en cascada

edad = 89;if(edad <= 12 )

printf( "Infancia" );else if( edad <= 18 )

printf( Adolescencia" );else if( edad <= 35 )

printf( "Juventud" );else

printf( "Madurez" );

Proposiciones if anidadas

nota = 8;if( nota >= 0 && nota <= 10 ) {

if( nota >= 6 )printf( "Pasa" );

} else { printf( "Error rango" );

}

Proposición case

El valor de una variable es comparado con constantes, y ejecuta el código asociado en caso de coincidencia

Se pueden agrupar varios casosSe debe suspender el case cuando ya se cumplió la condición

Se puede definir código a ejecutar cuando no se cumplió ninguna condición

Proposición caseswitch( opcion ){

case 1:case 2:

operacion = 1;break;

case 3:case 4:

operacion = 2;break;

default:printf( "opción no válida" );break;

}

1.3 Estructuras de repetición

Son estructuras que permiten repetir instrucciones de acuerdo a condiciones existenteswhiledo-while for

Proposición while

Ejecuta proposiciones integradas basándose en un valor booleano

Evalúa valor booleano al principio del cicloEjecuta proposiciones mientras valor booleano es

verdaderoint i = 0; while (i < 10) {

printf(i); i++;

}

Proposición do

Ejecuta proposiciones integradas basándose en un valor booleano

Evalúa valor booleano al final del cicloEjecuta proposiciones mientras valor booleano es

verdaderoLas proposiciones se ejecutan al menos una vezint i = 0; do {

printf(i); i++;

} while( i < 10 );

¡indispensable!

Proposición for

Establece condiciones de ciclo y variable de control al principio

for( i = 0; i < 10; i++ ) { printf(i); }

El ciclo puede iterar con varios valoresint i = 0; for( int i=0, j=0; i < 10; i++, j++ ){

printf(i+j);}

Proposiciones break y continue break salta hacia fuera de una iteración continue salta a la siguiente iteraciónint i = 0; while (true) {

printf(i); i++; if (i < 10)

continue; else

break; }

Ejercicios

Haga un programa que pregunte por su edad. Dependiendo de la edad dirá: "Vete a tu casa, niño" "Estás en la edad de la punzada" "Vamos al bar de Moe"

Lo mismo pero que considere también el género (masculino/femenino). Sea creativo con las frases.

Lo mismo, pero validar datos: Edad o género imposible Edad vacía Valor erróneo

Ejercicios

Hacer programa que despliegue las tablas de multiplicar que en el rango que el usuario indique

Hacer programa que despliegue calendario del mes actual (pidiendo datos necesarios al usuario)

1.4 Funciones

En casi todos los programas el código se divide en módulos funcionales

Permiten: Estructurar el código Facilitar el entendimiento Facilitar la ubicación y corrección de errores Reutilización de código

En C la aplicación se estructura en funcionesUna función es un bloque de código que efectúa una

accion o calcula un valorLos parámetros son datos que se entregan a las

funciones

Uso de funciones

Definiendo funcionesInvocando funcionesSaliendo de funcionesUso de variables localesRetornando valor

Definiendo una función

main es una función, se debe usar la misma sintaxis

int suma ( int a, int b ){ return ( a + b );}Si las funciones se definen antes de main, serán

reconocidas. Si se definen después, hará falta crear protipos. Para el ejemplo anterior, su prototipo sería:

int suma ( int, int );

Prototipo, invocación, declaración de función#include <stdio.h>int suma( int, int );int main( ){ int r; r = suma ( 4, 5 ); printf ( "resultado: %d\n", r ); return 0;}int suma( int a, int b ){ return( a + b );}

Definiendo una función

Cada función debe indicar: Tipo de valor que devuelve Nombre (único, no debe coincidir ni con variables,

constantes o funciones) Paréntesis para parámetros Lista de parámetros (puede ser una lista vacía) Cuerpo de la función, siempre con llaves de bloque,

aún cuando sólo contenga una proposición

Llamando (invocando) una función

nombreFunción( parámetros );a = promedio( 1, b );Se puede invocar una función:Desde el mismo documentoDe otro documento, si la función es pública

(public)Una función, a su vez, puede invocar otras

funciones (invocación anidada)No todos las funciones devuelven valores

Saliendo de función con return

Al término del código de una función, ésta termina, pero con return se puede anticipar la salida, si es necesario: Salida inmediata Salida si se cumple una condición

void procesa( ) { int frijoles; //... if( frijoles < 10 ) return; printf( "todo bien" );}

Uso de variables locales

Variables locales Creadas cuando la función inicia Exclusivas de la función Se destruyen al salir de la función

Variables globales Disponibles en todo el programa Ocupan espacio todo el tiempo

Conflictos El compilador no avisará si hay coincidencias en los

nombres entre variables locales y globales

Retornando valor

Si una función debe devolver un valorSe debe declarar su tipoDeberá utilizar la proposición returnreturn debe ir acompañado por la expresión o

variable que contenga el dato a devolverLas funciones que no son de tipo void siempre

deberán devolver un valor (del tipo indicado)

Retornando valor (ejemplo)

int twoPlusTwo( ){ int a,b; a = 2; b = 2; return a + b; } int main( ){ int x; x = TwoPlusTwo( ); printf( x ); } }

devolverá el resultadode la expresión

el resultado devueltoserá asignado a x

Uso de parámetros

Declarando y pasando parámetrosMecanismos para pasar parámetrosPaso por valorPaso por referenciaParámetros de salida

Declarando y llamando con parámetros

Declaración Se ubican dentro de los paréntesis después del

nombre de la función Definen tipo y nombre

void funcion(int n, float y)

{ ... }Llamando funciones con parámetros

Suministrar un valor para cada parámetro

funcion( 2, 4.5 );

Mecanismos para pasar parámetros

Dos maneras de pasar parámetros

entrada Paso por valor

entrada/salida

Paso por referencia

Paso por valor

Es el mecanismo básico y el más usadoEl valor del parámetro se copiaLa variable puede cambiar dentro de la función

El cambio no tiene efecto afueraEl parámetro debe ser del mismo tipo

Paso por valor

void sumaUno( int x ) {

x++; // Incrementar x } int main( ) {

int k = 6; sumaUno( k );

}

Paso por referencia

¿Qué son los parámetros por referencia? Son referencias a una posición en memoria

Uso de parámetros por referencia Usar '*' en la declaración de la función Usar '&' en la llamada El espacio (variable) debe estar asignado antes de llamar

void SumaUno( int *x ) { *x = *x + 1; } int main( ) { int k = 6; SumaUno( &k ); printf( "%d", k ); // Muestra el valor 7 }

mismo espacio dealmacenamiento que

tiene la variable k

Ejercicio

Hacer un programa con un dos funciones que recibirán 2 enteros, y que devolverán 1, 0 o -1, dependiendo si el primero es mayor, igual o menor que el segundo. La primera función pasará parámetros por valor, la segunda por referencia.