Programación en C 1 • Creación de un proyecto • Variables y constantes • Funciones • Entrada/Salida • Definidas por el programador • Operadores • Control de flujo de ejecución 2 Creación de un proyecto #include <stdio.h> #include<stdlib.h> # define constantes ZONA DONDE DECLARAMOS LAS FUNCIONES int main (int argc, char *argv[]) { ZONA DONDE ESCRIBIREMOS NUESTRO PROGRAMA } system (“PAUSE”); return 0; 3 VARIABLES Y CONSTANTES • En C es necesario declarar todas las variables y constantes que se vayan a utilizar. • Una U variable i bl o constante t t no declarada d l d produce d un mensaje de error en la compilación. • Cuando una variable o constante es declarada se le reserva memoria de acuerdo con su tipo. • Hemos visto diferentes tipos: • int • float • char • string (o palabra) • array (vector o matriz) 4 CONSTANTES A diferencia de las variables, su valor no se modifica durante la ejecución del algoritmo. Se pueden definir de diferentes formas pero nosotros vamos a utilizar sólo el define. #include <stdio.h> #include<stdlib.h> #define PI 3.141592 3 141592 int main (int argc, char *argv[]) { ZONA DONDE ESCRIBIREMOS NUESTRO PROGRAMA } system (“PAUSE”); return 0; 5 DEFINICIÓN Ó DE VARIABLES Se ha de hacer siempre al principio del programa #include <stdio.h> #include<stdlib.h> int main (int argc, char *argv[]) { int a; float b; char c; char d[50]; char *e; e; int f[5]; int g[5][3]; entero real carácter string o palabra string o palabra vector de enteros matriz de enteros Cuerpo del Programa } system (“PAUSE”); return 0; 6 ASIGNACIÓN DE VALORES A LAS VARIABLES • Leer de teclado Mediante función scanf scanf(“%d”,&a); Lectura de un entero scanf(“%f”,&b); Lectura de un real scanf(“%c”,&c); a ( ,& ); Lectura u a de d un u carácter a á scanf(“%s”,d); Lectura de un string scanf(“%s”,e); f(“% ” ) L t Lectura de d un string t i for (i=0;i<=4;i++) scanf(“%d”,&f[i]); Lectura de un vector for (i=0;i<=4;i++) Lectura de una matriz for (j=0;i<=2;j++) scanf(“%d”,&g[i][j]); 7 ASIGNACIÓN Ó DE VALORES A LAS VARIABLES • Asignación interna Mediante el operador = a=1; a=a+1; b=2.5; b=b/3; c=´a´; strcpy(d, nombre1 ); strcpy(d,”nombre1”); strcpy(e,”nombre2”); f[3]=5; f[4]=a+f[3]; g[3][2]=5; g[4][2]=a+f[3]; 8 Funciones • Son subalgoritmos que luego pueden ser reutilizados en diferentes algoritmos g como si fuesen operaciones p primitivas. • En otras palabras, las funciones son trozos de código que van a ser utilizados muchas veces. Para no tener que escribirlos cada vez, lo que hacemos es una llamada a la función que ejecuta ese código. • Existe la posibilidad de anidamiento (definir un subalgoritmo dentro de otro. • Pueden estar: • Definidas en la librería de C. • Definidas por el programador 9 Funciones • Definidas en la librería de C. • Necesitamos incluir la librería correspondiente • Entrada/Salida: #include <stdio.h> scanf, printf, … • Matemáticas: á #include <math.h> sqrt,… • Tratamiento de cadenas #include <stdlib.h> strcpy,… strcpy • etc. 10 Funciones de Entrada/Salida • Para su utilización es necesario incluir el archivo stdio.h #include <stdio.h> • Entrada: lee datos de la entrada estándar (normalmente el teclado). • scanf(“%tipo”,&variable); Si la variable es de tipo string, no hay que ponerle & delante. scanff scanf scanf scanf scanf (“%d”,&a); (“%d” & ) (“%f”,&b); (“%c”,&c); (“%s” (“%s”,d); d); (“%s”,e); iintt a; float b; char c; char d[20]; char *e; 11 Funciones de Entrada/Salida • Salida: escribe texto y el valor de las variables por la salida estándar (normalmente la pantalla). pantalla) Podemos escribir: Texto printf (“texto que queremos que salga por la pantalla”); El valor de las variables que le indiquemos printf(“%tipo”,variable); No hace falta poner & delante de la variable Combinar texto y variables printf(“texto1 %tipo1 texto2 %tipo2”,variable1,variable2); Caracteres especiales printf(“\n”); Salto de línea printf(“\t”); Tabulador 12 Funciones de Entrada/Salida a=3; b=2.5; printf (“El valor de a es %d \n\t El valor de b es %f”,a,b); El valor de a es 3 El valor de b es 2.5 13 Funciones • Definidas por el programador. • Resultado: devuelven un valor tipo int, float,… o nada void. • Parámetros: se les pueden pasar parámetros. • Formales: aparecen en la definición de la función • Actuales: aparecen en la llamada a la función • Declaración: se han de declarar antes de main. • Referencia: dentro del algoritmo, algoritmo se referencia a la función con su nombre y con sus parámetros. • Variables locales: declaradas en la función y sólo existen dentro de ella. 14 #include #i l d <stdio.h> tdi h #include<stdlib.h> Funciones int factorial (int n) { int ret; ret=1; while (n>1) { ret=ret*n; n--;; }; return ret; }; int main (int argc, char *argv[]) { int x,y; x y; x=5; y=factorial (x); printf (“%d!=%d\n” ( %d!=%d\n ,x,y); x y); } Declaración de la función n, p parámetro formal de tipo p int ret, variable local Devuelve como resultado el valor int de ret Referencia Se le pasa x como parámetro actual El resultado se almacena en y 15 OPERADORES • Aritméticos • De asignación • Incrementales • Relacionales • Lógicos 16 OPERADORES ARITMÉTICOS • Suma + • Resta - • Multiplicación * • División / • Resto % 17 OPERADORES DE ASIGNACIÓN variable = expresión; Una variable puede aparecer a la izquierda y a la derecha del operador = Sin embargo, a la izquierda de dicho operador NUNCA puede haber una expresión. p p a+b = c es incorrecto. Existen otros 4 operadores de asignación: += -= *= /= x x x x +=1; -=1; *=3; /=2; equivale equivale equivale equivale a a a a x x x x = = = = x+1; x-1; x*3; x/2; 18 OPERADORES INCREMENTALES ++ -- • Incrementan o disminuyen en una unidad el valor de la variable. • Si preceden a la variable, ésta é es modificada antes de que el valor de la variable sea utilizado en la expresión en la que aparece. • Si es la l variable i bl la l que precede d all operador, d ésta é t es modificada después de que el valor de la variable sea utilizado en la expresión en la que aparece. i = 2; j = 2; m = i++; n = --j; //después de ejecutarse esta sentencia, sentencia m vale 2 e i vale 3 //después de ejecutarse esta sentencia, n vale 1 y j vale 1 19 OPERADORES INCREMENTALES ++ -- i = 3; j = 10; x = i-i + ++j; j // (x ( = 14, 14 i = 2, 2 j = 11) printf(“x = --i + j++ => %d\n”, (--i + j++)); // x = --i + j++ => 12 20 OPERADORES RELACIONALES • Permiten evaluar condiciones mediante la comparación de dos expresiones. • El resultado es 0 (falso) si la condición no se cumple y 1 (verdadero) en caso contrario. • Igual que expresión1 == expresión2 • Menor que expresión1 < expresión2 • Mayor que expresión1 > expresión2 • Menor o igual que expresión1 <= expresión2 • Mayor o igual que expresión1 >= expresión2 • Distinto que expresión1 != expresión2 21 OPERADORES LÓGICOS • Permiten combinar los resultados de los operadores relacionales. • El resultado es 0 (falso) si la condición no se cumple y 1 (verdadero) en caso contrario. •Y expresión1 && expresión2 (a< b) && (b (a<=b) (b==c) c) •O expresión1 || expresión2 (a > b) || (b==c) 22 SENTENCIAS Terminan todas con ; •Simples: • Declaración: • Instrucción: I t ió int a; a = 1; 1 • Vacía: No hace nada •; • Compuesta o bloque: • Tratar varias sentencias simples como un bloque • { … }; 23 CONTROL DE FLUJO DE EJECUCIÓN • Las sentencias de un programa C, se ejecutan de manera secuencial. • Sin embargo, podemos modificar este flujo secuencial utilizando tili d sentencias t i d de • Bifurcación • if..else if else • switch • Bucles • while • do..while • for 24 Bifurcación s1; if (p) { s2; Si se cumple p, la secuencia es: s1, s2, s3 }; Si no se cumple p, la secuencia es: s1, s3 s3; s1 si p s2 no s3 25 s1; if (p) { s2; } else { s3; }; s4; Bifurcación Si se cumple p, la secuencia es: s1, s2, s4 Si no se cumple p, la secuencia es: s1, s3, s4 s1 s3 no p si s2 s4 26 Bif Bifurcación ió s1; switch(n) { case v1: s2; break; case v2: s3; break; case v3: s4; break; … default: sn; break; }; s; 27 Bucles • while • do while while hil ((p)) { s; }; do { s; } while (p); •for for (i=vi; i!=vf; i=i+inc) { s; }; 28 Bucles • while • do •for while int n,i; n = 10;; i = 0;; while (i <= n) { printf(“%d\n”,i); i++; }; int n,i; n = 10; i = 0; do { printf(“%d\n”,i); i++; } while (i <= n); int n,i; ,; n = 10; for (i = 0; i <=n; i++) { printf(“%d\n”,i); }; 29