Está en la página 1de 15

Introduccin

El lenguaje de programacin 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 sintcticos Ejecutar programa resultante (a.out)

Tema 3
Resolucin de Problemas Usando el lenguaje de programacin - C

Primer programa
#include <stdio.h> main() { printf("Hola Mundo!\n"); } Explicar sintaxis:
#include <> main() {} ; \n printf( );

Un segundo programa: Jalisco


#include <stdio.h> main() { /* Declaracin de variables */ int numero; int siguiente; /* Le solicita un nmero entero al usuario */ printf("Dime un numero: "); scanf("%d", &numero); /* Le suma una unidad y lo imprime */ siguiente = numero + 1; printf("%d te gane!\n", siguiente); }

Usa variables!
Declaracin 1ro. Uso al imprimir

Recibe una entrada del usuario


Scanf Uso de variables al preguntar

Hace clculos intermedios

Comentarios en C
Incluir comentarios en un programa es una prctica saludable, ayuda a su comprensin. Para el compilador C, los comentarios son inexistentes, No generan lneas de cdigo. En el lenguaje C se toma como comentario todo caracter interno a los simbolos: /* */ Los comentarios pueden ocupar uno o ms renglones, por ejemplo:
/* esto es un comentario */ /* esto tambin es un comentario; pero ocupa 2 lneas */

Identificadores
Nombres que identifican a 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 maysculas y minsculas, menos la , y las acentuadas). No es posible emplear acentos o caracteres especiales del alfabeto espaol. Dgitos numricos (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) Smbolo de subrayado ( _ ) Sin embargo, el primer caracter debe ser una letra.

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 smbolo de subrayado (_) se emplea para dar mayor legibilidad a nombres compuestos por varias palabras. Se acostumbra emplear letras minsculas para nombrar a las variables y maysculas para las constantes simblicas.

Identificadores en C - ejemplos
Identificadores vlidos:
puntero nombre_empleado area TAMANO_STRING EdadEmpleado potencia10 i Nombre nombre

Variables
Toda variable debe ser declarada antes de usarla Forma genrica:
<tipo> <identificador> [= <valorInicial>] ; donde: <tipo> puede ser: int, float, char, etc. <valor_inicial> puede corresponder a una constante del tipo entero, real, caracter, arreglo, etc. ([] significa opcional)

Identificadores invlidos:
1texto nombre-empleado Telfono 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 aproximacin) double (con 16 decimales de aproximacin)

Caracteres
char (a,z,?,$,@,G,7, etc.; en total los 256 caracteres del cdigo ASCII)

Cd

Carcter

Cd

Carcter

Cd

Carcter

Cd

Carcter

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 9 : ; < = > ?

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

Expresiones Aritmticas
Valores numricos, de tipos enteros o reales. Operadores binarios
+ * / % Suma Resta Multiplicacin Divisin Mdulo (slo para int)

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

Operadores unitarios
++ -Signo negativo Incremento Decremento

Asociatividad
Por la izquierda

Expresiones Aritmticas
Los operandos pueden ser variables o constantes numricas.
Los operadores unarios ++ y -- fueron pensados para aplicarse a variables; y, el operador unario - a constantes.

Ejemplos de expresiones aritmticas


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:

++ -- (notacin pre o postfija)

Expresiones lgicas o booleanas


Este tipo de valores se emplea para dirigir al programa por un determinado flujo de ejecucin dependiendo de si la evaluacin de una expresin lgica da verdadero o falso. A diferencia de otros lenguajes de programacin, 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 lgicos dependen en realidad de un valor entero que se interpreta como:
falso cuando es cero, y verdadero en caso contrario

Expresiones lgicas o booleanas


Operadores binarios && AND || OR Operadores unitarios ! NOT lgico

Operadores relacionales o comparacin == igual != distinto < menor <= menor o igual > mayor >= mayor o igual

de

Expresiones lgicas 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
Mxima
( ) [ ] ! ~ ++ -- - (unitario) * / % + << < <= >= > == != & | && || = += -= /=

Estructura de un programa
directiva #include
Incluye libreras o bibliotecas de funciones predefinidas

Ejemplos
#include #include #include #include <stdio.h> <stdlib.h> <math.h> <string.h> /* /* /* /* funciones de entrada y salida */ funciones bsicas */ funciones matemticas bsicas */ funciones para manejar cadenas de caracteres */

Mnima

Estructura de un programa
directiva #define
Definicin de constantes simblicas Consiste en asignar a un identificador un valor que permanecer constante durante el programa

Estructura de un programa (resumen)


1.
#include <libreras> #define <identificador> <constante>

2. 3.

Inclusin de libreras Constantes Programa principal

Ejemplo
#define PI 3.1415

<tipo> main() { <cuerpo_de_la_funcin_principal> }

Algunas recomendaciones
Hacer cdigo ordenado:
1 instruccin por lnea Utilizar nombres de variables autoexplicativos Identar el cdigo Comentar el cdigo

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 conversin

Salida con formato: printf


Sintaxis
printf( "cadena-de-formato", <lista_de_argumentos> );

Especificaciones de Conversin
Los caracteres de conversin de mayor uso son:
nmero entero en notacin decimal (base 10) caracter cadena de caracteres (string) nmero con decimales, expresado en notacin exponencial o de punto flotante (mantisa y exponente) f nmero con decimales, expresado en notacin de punto fijo (parte entera, punto, parte decimal) d c s e

Cadena de formato
Debe ir delimitada por comillas dobles Debe incluir una especificacin de conversin por cada argumento en la lista de argumentos. Texto aparecer durante el despliegue, y cada especificacin de conversin ser reemplazada por el correspondiente argumento.

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

Especificaciones de Conversin
Pueden incluir:
Un signo menos, que indica que el campo debe ajustarse a la izquierda. Un nmero entero, que indica el tamao mnimo que deber ocupar el campo al desplegarse. Un punto seguido de un nmero 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: %d\n", x); El valor de la variable x es: 100 Si x contena un valor igual a 100. Avanzar a la siguiente lnea luego del despliegue printf("El valor de dos + cinco es: %d\n", 2+5); El valor de dos + cinco es: 7 Avanzar a la siguiente lnea luego del despliegue printf("El area de %.2f\n", radio, area); un circulo con radio %.2f es

Secuencias especiales:
%% \n \t \ASCII para imprimir un smbolo de % para provocar que el cursor cambie de lnea para producir una tabulacin en el despliegue despliega el caracter con el cdigo ASCII suministrado

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

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 Conversin


/* Impresion de los valores de la variable x con distintos formatos. */ #include <stdio.h> main() { float x = 0.001234; /* 1: Notacion exponencial */ printf("x formateado como %%e: ....... %e\n", x); /* 2: Notacion con punto decimal */ printf("x formateado como %%f: ....... %f\n", x); /* 3: Notacion con punto decimal, empleando 10 espacios */ printf("x formateado como %%10f: ..... %10f\n", x); /* 4: Notacion con punto decimal, empleando 10 espacios de los cuales 3 estan despues del punto. */ printf("x formateado como %%10.3f: ... %10.3f\n", x); }

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


Sintaxis
scanf ( "cadena_de_control", <lista_de_argumentos> );

Contenido de cadena de control


Espacios en blanco, tabuladores o finales de lnea, los cuales no se tomarn en cuenta. Caracteres ordinarios (distintos de %), los cuales se espera que coincidan con el prximo caracter %, distinto de blanco del flujo de entrada. Especificaciones de conversin Un campo de entrada se define como una cadena de caracteres delimitada por espacios en blanco (incluyendo tabulador y fin de lnea).

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

Caracteres de conversin
d nmero entero; argumento debe ser puntero a int. h nmero entero; argumento debe ser puntero a short int. lx nmero entero; argumento debe ser puntero a long int. c carcter; 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 nmero con decimales; argumento debe ser puntero a float. Entrada puede ser en notacin de punto fijo (parte entera, punto, decimales), o de punto flotante (mantisa, E, exponente). lf nmero con decimales; argumento debe ser puntero a double.

Ejemplos
scanf("%d", &edad); Espera entero que ser almacenado en la variable edad. scanf("%4d", &agno); Espera el ao actual (4 dgitos). Si se ingresan ms de 4 dgitos, los restantes se descartarn, o se dejarn para la siguiente llamada a scanf. scanf("%d %f", &edad, &salario); Espera un nmero entero y uno con decimales. scanf("%s", nombre); Espera una cadena de caracteres (string). Entrada se almacenar en el vector nombre, y se delimitar con un ASCII(0) al final.

Ejemplo: lectura de nmeros enteros


#include <stdio.h> main() { int a, b, c; printf("Ingrese los valores de a b c: "); scanf("%d %d %d", &a, &b, &c); printf("Los valores de a, b y c son: %d %d %d\n", a, b, c); }

Algunos detalles sobre el lenguaje C


Conversiones de tipos Problema de intercambiar dos variables Operadores ++ y --

Conversiones de tipos
Conversiones automticas
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 <stdio.h> main() { int var1, var2; int aux; var1 = 10; var2 = 30; /* Variables enteras que seran intercambiadas */ /* Variable auxiliar necesaria para hacer el intercambio */ /* Asigna valores a las variables */

Operadores ++ y - Veamos cual es el resultado del siguiente programa:


#include <stdio.h> int main() { int b, x; x = 5; printf("Inicialmente printf("Probemos b = b = x++; printf("-> b es %d y printf("Probemos b = b = ++x; printf("-> b es %d y }

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

b es indefinido y x es %d\n", x); x++;\n"); x es %d\n", b, x); ++x;\n"); x es %d\n", b, x);

Operadores ++ y - Interpretacin correcta


b = x++; notacin postfija (asigna a b el valor antes del incremento) b = ++x; notacin prefija (asigna a b el valor despus del incremento)

El comando if
if ( condicin ) { ... Bloque de instrucciones ... }

Si ocurre la expresin, se lleva a cabo el bloque de instrucciones

Variacin if/else
if ( condicin ) { ... instrucciones ... } else { ... instrucciones ... } /* (X) */

Variacin if/else if/else


if ( condicin ) { ... instrucciones ... } else if ( expresin-booleana ) { ... instrucciones ... } else { ... instrucciones ... }

/* (Y) */

Permite escoger entre varias ramas Ej.: programa que imprime etapa de la vida dependiendo de la edad (nio 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
Crdito 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 sbado por la noche?


main() { char respuesta; printf("Veamos que hacer el sabado por la noche...\n"); printf("Desea quedarse en casa? (s/n): "); scanf("%s", &respuesta); if (respuesta=='s') { printf("Le gusta ver TV? (s/n): "); scanf("%s", &respuesta); if (respuesta=='s') { printf("Hay algun programa bueno esta noche? (s/n): "); scanf("%s", &respuesta); if (respuesta=='s') printf("Sugerencia: Coma cabritas y vea el programa que pasan\n"); else printf("Sugerencia: Arriende una pelicula\n"); } else { printf("Le gusta leer? (s/n): "); scanf("%s", &respuesta); if (respuesta=='s) printf("Sugerencia: Tome un vaso de leche y lea un buen libro\n"); else printf("Sugerencia: Vaya a dormir! ...Buenas noches\n"); } } /* ... continua en pagina siguiente */

Ejemplo: Qu hago el sbado por la noche?


else { printf("Le gusta bailar? (s/n): "); scanf("%s", &respuesta); if (respuesta=='s') { printf("Le gusta la musica tropical? (s/n): "); scanf("%s", &respuesta); if (respuesta=='s') printf("Sugerencia: Vaya a la discotheque ElMerengazo\n"); else printf("Sugerencia: Vaya a la discotheque Los Tarros\n"); } else { printf("Le gusta ir al cine? (s/n): "); scanf("%s", &respuesta); if (respuesta=='s') printf("Sugerencia: Vaya a ver una pelicula\n"); else printf("Sugerencia: Vaya a un pub y tomese unas chelas\n"); } }

Instruccin switch
switch ( expresin ) { case constante1 : { ... Bloque de instrucciones ... break; } case constante2 : { ... Bloque de instrucciones ... break; } ... case constanteN : { ... Bloque de instrucciones ... break; } default : { /* Opcional */ ... Bloque de instrucciones ... } } 1

N+1

Similar a if / else if / else Es ms claro, es similar a un men de alternativas. 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 1 : { opcion1(); break; } case 2 : { opcion2(); break; } case 3 : { opcion3(); break; } default : printf("Opcion invalida\n"); }

Ejemplos switch
/* Dado un mes, identifica el trimestre */ switch (mes) { case 1 : ; case 2 : ; case 3 : { printf("Primer trimestre\n"); break; } case 4 : ; case 5 : ; case 6 : { printf("Segundo trimestre\n"); break; } case 7 : ; case 8 : ; case 9 : { printf("Tercer trimestre\n"); break; } case 10 : ; case 11 : ; case 12 : { printf(Cuarto trimestre\n"); break; } default : { printf("Mes invalido\n"); } }

Ejemplo: Clculo de 2n
Programa que calcula 2n, para n entre 1 y 10. Para la implementacin se emplea un switch sin breaks, lo cual puede ser una tcnica de programacin peligrosa.
main() { int n; int x = 2;

Ejemplo: Clculo de 2n

printf("Calculo de 2**n. Ingrese n entre 1 y 10: "); scanf("%d", &n); switch(n) { case 10: case 9: case 8: case 7: case 6: case 5: case 4: case 3: case 2: } } 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: %d\n", x);

Instruccin while
while ( condicin ) { ... Bloque de instrucciones ... }

Instruccin while
Al ejecutarse la instruccin while, se evaluar la condicin en los parntesis, y si su valor es verdadero (distinto de cero), se ejecutarn las instrucciones entre { } . Una vez hecho esto, la condicin se vuelve a evaluar y se procede de la misma manera. Cuando la condicin se vuelve falsa (es decir, cero), se dar la instruccin while por terminada cuando se evale. Las instrucciones subordinadas al while pueden ser compuestas, es decir, otras instrucciones while, if, etc.

Realiza una tarea mientras ocurre una cierta condicin

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

Ejemplo: Contar desde 1 a N


#include <stdio.h> main() { int n, max; printf("Hasta que numero quiere contar? "); scanf("%i", &max); n=1; while ( n < max ) { printf("%i\n", n); n=n+1; } }

Ejemplo: Tabla de conversin de temperaturas


#include <stdio.h> main() { float centigrados = -15.0; printf("%15s %15s\n", "Celsius", "Fahrenheit"); while (centigrados <= 50.0) { /* Imprime la fila de la tabla: Centigrados-Fahrenheit */ printf("%15.2f %15.2f\n", centigrados,((centigrados*1.8)+32)); /* Incrementa centigrados para la siguiente iteracion */ centigrados = centigrados + 5; } }

Recordar que F= C*1.8 + 32

Instruccin do-while
do { ... Bloque de instrucciones ... } while ( condicin );

Ejemplo do-while
char respuesta; do {
/* Esto se ejecuta en cada iteracion del ciclo */

Diferencia con while?


Verifica la condicin al final Por lo tanto el bloque de instrucciones se ejecuta al menos una vez

Cuando puede ser til?


Cualquier iteracin en que se verifique al final si se desea continuar Ejemplo:
Calculadora de promedios

... printf("Desea continuar? (s/n): "); scanf("%1s", &respuesta); } while (respuesta != 'n');

10

Instruccin for
for ( inicializacin ; condicin ; actualizacin ) { ... Bloque de instrucciones ... }

Uso tpico de for


Ciclos en que se conoce de antemano el nmero de iteraciones a realizar Contar de 0 a 99:
for (i = 0 ; i < 100 ; i++) printf("%d\n", i);

Realiza un ciclo en que:


Ocurre algo al inicio (inicializacin) Mientras ocurre algo (condicin) Ejecuta el bloque de instrucciones Al final de cada ciclo realiza una accin (actualizacin) Contar de 100 a 1? Ciclo infinito:
for (i = 100 ; i > 0 ; i--) printf("%d\n", i); for (;;) { ... instrucciones ... }

Ejemplo de for
#include <stdio.h> int main() { int rep; /* repite valores de 5 en 5 en forma ascendente */ for (rep=1;rep<=20;rep=rep+5) printf("Valor ascendente de rep: %d\n",rep); /* repite valores de 5 en 5 en forma descendente */ for (rep=20;rep>=1;rep=rep-5) printf("Valor descendente de rep: %d\n",rep); }
#include <stdio.h> main() { double base, pot; int exponente, i;

Clculo 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<=exponente; i++) pot = pot * base; printf("Resultado de %.2f elevado a %d es %.2f\n", base, exponente, pot);

Equivalencia Lgica entre Instrucciones de Iteracin


Las tres instrucciones con que cuenta el lenguaje de programacin C para la especificacin de iteracin son lgicamente equivalentes. Para ilustrar este hecho, se muestra a continuacin un ciclo escrito con la instruccin for, y la forma en que se rescribira empleando las otras dos instrucciones de iteracin.

Equivalencia Lgica entre Instrucciones de Iteracin


Empleando for
for (bloque1; condicin; bloque2) { bloque3 } Instrucciones de bloque1 y bloque2 separadas por coma Instrucciones de bloque3 separadas por punto y coma

Empleando while
bloque1 while (condicin) { bloque3 bloque2 } Instrucciones de los bloques separadas por punto y coma

11

Equivalencia Lgica entre Instrucciones de Iteracin


Empleando for
for (bloque1; condicin; bloque2) { bloque3 } Instrucciones de bloque1 y bloque2 separadas por coma Instrucciones de bloque3 separadas por punto y coma

Equivalencia Lgica entre Instrucciones de Iteracin


A continuacin se presenta un ciclo escrito mediante do-while, y la forma como se rescribira empleando while.

Empleando do-while
bloque1 if (condicin) { do { bloque3 bloque2 } while (condicin) } Instrucciones de los bloques separadas por punto y coma Por qu es necesario el if?

Equivalencia Lgica entre Instrucciones de Iteracin


Empleando do-while
do { bloque } while (condicin) Instrucciones del bloque separadas por punto y coma

Ciclos anidados
Hay un ciclo dentro de otro Por ejemplo, se requiere para recorrer una matriz:

Empleando while
bloque while (condicin) { bloque } Instrucciones del bloque separadas por punto y coma Por qu se debe repetir el bloque (afuera y adentro)? for (i=1; i<=3; i++) for (j=1; j<=5; j++) printf("%d %d\n", i, j);

1 1 1 1 1 2 2 2 2 2 3 3 3 3 3

1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

Funciones
Conjunto de instrucciones (posiblemente acompaadas de algunos datos temporales) que llevan a cabo una subtarea dentro de un programa ms complejo. Reciben datos de entrada Generan datos de salida.

Funciones
Un programa C se estructura en funciones. La ejecucin comienza a partir de la funcin main. Parmetros de entrada y valor de retorno parmetros de entrada: materia prima con la que trabajar la funcin valor de retorno: resultado del procesamiento llevado a cabo por la funcin Tanto los argumentos de entrada como el valor de retorno tienen un tipo de datos asociado.

Funcin Entrada x Factorial Salida x!

tipoRetorno nombreFuncion (parametros) { instrucciones; }

12

Funcin Suma
#include <stdio.h> #include <stdlib.h>

Funcin Factorial
int fact (int x) { int i, f = 1; for (i= 2; i<= x; i++) f = f * i; return(f); }

#include <stdio.h> #include <stdlib.h> int suma (int a, int b) { return(a + b); } int main() { int x = 5, y = 6, resultado; resultado = suma(x,y); printf("la suma es: %d \n",resultado); return(EXIT_SUCCESS); }

int main() { int x, resultado; printf( "ingrese valor: " ); scanf( "%d", &x); resultado = fact(x); printf( "el factorial es: %d", resultado); return(EXIT_SUCCESS); }

Prototipos
#include <stdio.h> #include <stdlib.h> int fact(int); int main() { int x, resultado; printf( "ingrese valor: " ); scanf( "%d", &x); } resultado = fact(x); printf( "el factorial es: %d", resultado); return(EXIT_SUCCESS); } int fact (int x) { int i, f = 1; for (i= 2; i<= x; i++) f = f * i; return(f); } int main() { int x; printf( "ingrese valor: " ); scanf( "%d", &x); void fact (int x) { int i, f = 1; for (i= 2; i<= x; i++) f = f * i; #include <stdio.h> #include <stdlib.h>

Funciones VOID

printf( "el factorial es: %d", f);

fact(x); return(EXIT_SUCCESS); }

Parmetros por VALOR


#include <stdio.h> void intercambio(int var1,int var2) { int aux; aux = var1; var1 = var2; var2 = aux; printf("var1 contiene %d y var2 en la funcion %d\n", var1, var2); } main() { int var1, var2; var1 = 10; var2 = 30; printf("var1 contiene %d y var2 antes de la funcion %d\n", var1, var2); intercambio(var1,var2); printf("var1 contiene %d y var2 despues de la funcion %d\n", var1, var2); }

Qu es un arreglo?
Los arreglos son estructuras de datos complejas (en el sentido de que no son atmicas) Agrupan datos de un mismo tipo en particular, llamado el tipo base del arreglo.
El tipo base de un arreglo puede ser cualquiera de los tipos bsicos de C, o incluso algunos tipos complejos como las estructuras.

Un arreglo puede considerarse como ejemplo de un variable compuesta, capaz de almacenar uno o ms datos al mismo tiempo.

13

Arreglos
Arreglo
valores posicin

Declaracin de Arreglos Unidimensionales (Vectores)


Declaracin
23
n-1

10
0

21
1

32
2

83
3

<tipo-base> <identificador>[<NumElementos>]; Ej:

int vec[20];
La cantidad de elementos del tipo base que contiene el arreglo es fijo
Debe especificarse al declararlo.

La sintaxis del lenguaje permite referirse a cada uno de los elementos que constituyen el arreglo empleando ndices. Esto es posible pues los elementos del arreglo estn numerados en forma jerrquica y consecutiva, empezando en 0 en cada dimensin. Detalle de programacin: El lenguaje C no controla la validez de los ndices que se emplean para referenciar un arreglo.

Declaracin con asignacin


<tipo-base> <identificador>[<NumElementos>] = {valor1, valor2, ...}; Ej:

int edades[5] = {17,19,21,20,18};

Ejemplos de uso
1. Declaracin de un arreglo de 50 enteros: int A[50]; 2. Declaracin de un arreglo de 100 caracteres: char A[100]; 3. Declaracin e inicializacin de un arreglo de 10 enteros: int A[10] = { 2, 5, 8, 100, 1, 2, 100, 5, 5, 5 }; 4. Inicializacin parcial: El resto se inicializa en cero: int A[100] = { 25, 5, 100, 25, 5 }; 5. Declaracin e inicializacin de un arreglo de 10 caracteres:
char A[10] = {'a','z','E','e',65,'\65','@','U','*','\n'};

Ms ejemplos de uso
7. Asignando un valor a la sexta posicin de un arreglo de enteros: A[5] = 200; 8. Imprimiendo un arreglo de 100 enteros mediante un ciclo for: int i; for (i=0; i<100; i++) printf("%d\n", A[i]); 9. Leyendo del usuario el contenido de un arreglo de 20 enteros, mediante un ciclo for: int i; for (i=0; i<20; i++) scanf("%d", &A[i]); 10. Calcula el promedio de un arreglo de enteros: int prom = 0; int i, num_elementos=10; for (i=0; i<num_elementos; i++) prom = prom + A[i]; printf(el promedio es: %d \n, prom/num_elementos);

6. Determinacin en forma implcita del tamao de un arreglo: int A[] = { 5, 10, 2, 15, 20 };

Uso de Arreglos Importante


Puesto que los arreglos son estructuras complejas, no es posible asignar un arreglo a otro mediante una simple asignacin (=).
Para hacer esto es necesario escribir un ciclo y asignar elemento a elemento.

Uso de Arreglos Importante


El lenguaje C no controla la validez de los ndices que se emplean para referenciar un arreglo.
La siguiente porcin de cdigo compila sin problemas (es decir, sin errores sintcticos), pero se producir un error en tiempo de ejecucin al referenciar posiciones inexistentes del arreglo.
/* Ejemplo de error por acceso fuera de rango a un arreglo */ /* Posiciones con ndices del 20 al 29 son invlidas. */ int i, arreglo[20]; for (i=0; i<30; i++) arreglo[i] = 0;

El nombre de un arreglo tambin puede emplearse sin ndice, por ejemplo, para pasar el arreglo completo como parmetro a una funcin.

Es comn cometer estos errores olvidando que las posiciones de los arreglos estn numeradas a partir del ndice cero.
Es decir, en un arreglo de tamao N, las posiciones estn numeradas de 0 a N-1.

14

Ejemplo: Clculo de notas


Se desea calcular el promedio, mnimo y mximo de una lista de notas correspondientes a un curso. Se recibir el nmero de alumnos y la nota correspondiente a cada uno, y se entregan los resultados en la pantalla.

Ejemplo: Clculo de notas


#include <stdio.h> #include <stdlib.h> #define MAX_NUM_ALUMNOS 100 #define MAX_NOTA 7.0 #define MIN_NOTA 1.0 int main() { int numAlumnos,i; float notas[MAX_NUM_ALUMNOS], suma = 0.0, min = MAX_NOTA, max = MIN_NOTA, prom; printf("Ingrese el numero de alumnos en la seccion: "); scanf("%d", &numAlumnos); printf("Ingrese las notas de los %d alumnos: ", numAlumnos); for (i=0; i<numAlumnos; i++) scanf("%f", &notas[i]);

Ejemplo: Clculo de notas


for (i=0; i<numAlumnos; i++) { suma += notas[i]; if (notas[i] < min) min = notas[i]; if (notas[i] > max) max = notas[i]; } prom = suma/numAlumnos; printf("\tPromedio: %1.1f\n", prom); printf("\tMinimo: %1.1f\n", min); printf("\tMaximo: %1.1f\n", max); }

15

También podría gustarte