INTRODUCCIÓN AL LENGUAJE C Fundamentos de Informática EUP ULPGC Jose Torres 1 de 36 Historia de C Precursores: muchas ideas provienen de BCPL (Martin Richards, 1967) y de B (Ken Thompson, 1970) C fue diseñado originalmente en 1972 para el SO UNIX en el DEC PDP-11 por Dennis Ritchie en los Laboratorios Bell Primer libro de referencia de C: The C Programming Language (1978) de Brian Kernighan y Dennis Ritchie En 1989 aparece el estándar ANSI C En 1990 aparece el estándar ISO C (actual estándar de C) WG14 se convierte en el comité oficial del estándar ISO C En 1994 WG14 crea las primeras extensiones a ISO C En 1983 aparece C++ (orientado a objetos) Fundamentos de Informática EUP ULPGC Jose Torres 2 de 36 Fundamentos de Informática EUP ULPGC Jose Torres 3 de 36 Características de C Lenguaje de propósito general ampliamente utilizado Presenta características de bajo nivel: trabaja con direcciones de memoria (punteros) Estrechamente asociado con el sistema operativo UNIX: UNIX y su software fueron escritos en C Lenguaje pequeño: sólo ofrece sentencias de control sencillas y funciones No ofrece mecanismos de E/S (entrada/salida) Fuera del lenguaje, se ofrecen como funciones de biblioteca Fundamentos de Informática EUP ULPGC Jose Torres 4 de 36 Programas portables: pueden ejecutarse sin cambios en multitud de computadores Permite programación estructurada y diseño modular Inconvenientes de C Es bastante permisivo con la conversión de datos Sin una programación metódica puede ser propenso a errores difíciles de encontrar La versatilidad de C permite crear programas difíciles de leer Fundamentos de Informática EUP ULPGC Jose Torres 5 de 36 Primer programa en C #include <stdio.h> Directiva para usar funciones de E/S main() Cabecera del programa principal { Empiezan las instrucciones del pp Todas terminan en “;” printf ("Hola\n"); ‘Instrucción’ para escribir por pantalla printf (“Adios\n”); ‘Instrucción’ para escribir por pantalla } Termina el programa principal Fundamentos de Informática EUP ULPGC Jose Torres 6 de 36 ¿Cómo crear el programa? Con un editor de texto Guardar el programa en un archivo ‘programa1.cpp’ ¿Cómo compilar y ejecutar el programa? Un compilador de C permite: - Analizar y detectar errores en el código fuente - Convertir un programa escrito en C en código ejecutable por el computador (archivo ‘programa1.exe) Fundamentos de Informática EUP ULPGC Jose Torres 7 de 36 Fundamentos de Informática EUP ULPGC Jose Torres 8 de 36 Pasos para crear y ejecutar un programa en C con DevC++ Ejecuta ‘Dev-C++’. 1) Escribir el programa: Comando ‘Archivo / Nuevo / Código fuente’ Editor de texto específico 2) Compilarlo: para generar un programa ejecutable (‘.exe’) Comando ‘Ejecutar / Compilar’ Primero guardar el programa en un archivo ‘.cpp’ Fundamentos de Informática EUP ULPGC Jose Torres 9 de 36 3) Corregir errores sintácticos: En la parte inferior del área de edición aparecerán Indican número de línea y mensaje Habrá que corregirlos (con el editor de texto) y volver a compilarlo hasta que ya no los haya. 4) Ejecutar el programa: Comando ‘Ejecutar / Ejecutar’ Se abre una ventana MS-DOS donde se ´verá´ la ejecución del programa Habrá que añadir como última instrucción “while (1)” Si no funciona correctamente: determinar los fallos, modificar el programa (editor de texto), compilarlo y ejecutarlo, hasta que funcione correctamente Fundamentos de Informática EUP ULPGC Jose Torres 10 de 36 Fundamentos de C Comentarios Comienzan con /* y finalizan con */ #include <stdio.h> /* Funciones de entrada/salida */ /* Este programa muestra un saludo por pantalla */ main() { /* Muestra un saludo por pantalla */ printf("Hola y adios\n"); } Fundamentos de Informática EUP ULPGC Jose Torres 11 de 36 Identificadores y palabras reservadas Identificador: nombre definido por el programador que se asigna a los datos (variables) y funciones dentro de un programa Puede incluir los dígitos(del 0 al 9), las letras(mayúsculas y minúsculas son distintas) y el guión bajo (`_`) No puede empezar por un dígito Ejemplos: x, y1, nombres, area, suma_1, valor_medio, TABLA Fundamentos de Informática EUP ULPGC Jose Torres 12 de 36 Palabras reservadas Identificadores con significado predefinido estándar No pueden ser usadas como identificadores del programador auto do for return typedef break double goto short union case else if sizeof unsigned char enum int static void const extern long struct volatile continue oat register switch while Fundamentos de Informática EUP ULPGC default Jose Torres 13 de 36 Variables Identificador utilizado para representar un cierto tipo de información En su forma más sencilla para representar un dato individual: - una cantidad númerica - un carácter alfanumérico Hace referencia a unas posiciones de memoria que contendrán un dato de un tipo determinado A cada variable se le asigna un tipo de dato Fundamentos de Informática EUP ULPGC Jose Torres 14 de 36 Una variable puede almacenar diferentes valores en distintas partes del programa (sentencias de asignación) No cambia el tipo de dato almacenado Ejemplos de variables válidas: numero _color identificador_1 Las siguientes variables son todas distintas: pi PI Pi pI Fundamentos de Informática EUP ULPGC Jose Torres 15 de 36 Declaración de variables Una declaración asocia un tipo de datos determinado a una variable Reserva las posiciones de memoria que contendrá el valor que tenga la variable en cada momento Toda variable usada en un programa debe ser declarada al principio del mismo (después de ‘{’) El formato de una declaración es: tipo_de_datos var1, var2, ..., varN; Ejemplos: int x; int num1, num2; char letra; Fundamentos de Informática EUP ULPGC Jose Torres 16 de 36 Tipos de datos elementales (carácter o número) Tipo Significado char int short long unsigned int unsigned short carácter 1 entero 4 entero corto 2 entero largo 4 entero sin signo 2-4 entero corto sin signo 2 entero largo sin signo 4 coma flotante(real) 4 coma flotante largo 8 unsigned long float double Tamaño en bytes Fundamentos de Informática EUP ULPGC Jose Torres 17 de 36 Ejemplos de declaración de variables: int a, b, c; float numero_1, numero_2; char letra; unsigned long entero; Deben asignarse a las variables nombres significativos: Ejemplo: int temperatura; int contador; Se les puede asignar un valor inicial tipo_de_datos var1 = valor; Ejemplo: int num1=63; Fundamentos de Informática EUP ULPGC Jose Torres 18 de 36 Literales: representan valores constantes que se pueden asignar a las variables (1) Caracteres: entre comillas simples: 'a', 'b', ‘A’, ‘B’… Ejemplos: char letra1 = ‘a’, letra2 = ‘B’; (2) Valores enteros: - Notación decimal: 987 - Notación hexadecimal: 0x25 (37 en decimal) ó 0X25 - Notación octal: 034 (28 en decimal) - Enteros decimal sin signo: 485U - Enteros decimal largo: 485L - Enteros decimal largo sin signo : 485UL - Valores negativos (signo menos): -987 Ejemplo: int num1 = 987, num2 = 0x25, num3 = 034; Fundamentos de Informática EUP ULPGC Jose Torres 19 de 36 (3) Valores reales: - Punto fijo: 12, 14, 8., .34, 16.583 - Notación exponencial: .2e+9, 1.04E-12 - Valores negativos (signo menos): -12, -2e+9 p.e.: float numero = 1.04E-12; Variables, tipos y literales: Importante tener clara la diferencia Una variable es un identificador que almacena un valor de un cierto tipo de datos Un literal representa un valor concreto de un determinado tipo de datos Ejemplo: int temperaturaHorno = 234; Fundamentos de Informática EUP ULPGC Jose Torres 20 de 36 La función printf Permite imprimir información por la pantalla printf (formato, lista_de_argumentos); formato: cadena de caracteres a imprimir (texto informativo) y especificadores de formato (cómo se imprimirán) para los argumentos (valores) lista_de_argumentos: tantos como especificadores de formato Pueden ser literales, variables o expresiones Ejemplo: printf (“El valor es %d”, num); Fundamentos de Informática EUP ULPGC Jose Torres 21 de 36 Especificadores de formato en que se imprime un valor: Especificador %c %d %u %o %ou %x,%X %xu,%Xu %f %e, %E Significado Imprime un carácter individual Imprime un entero decimal con signo Imprime un entero decimal sin signo Imprime un entero octal con signo Imprime un entero octal sin signo Imprime un entero hexadecimal con signo Imprime un entero hexadecimal sin signo Imprime un real con punto decimal Imprime un real con notación exponencial Fundamentos de Informática EUP ULPGC Jose Torres 22 de 36 Ejemplos: printf("Hola Lola"); Hola Lola printf("El valor del numero es %d", 28); El valor del numero es 28 printf(“El valor del caracter es %c”, ‘f’); El valor del caracter es f int numero= 28; printf("El valor del numero es %d", numero); El valor del numero es 28 Fundamentos de Informática EUP ULPGC Jose Torres 23 de 36 char letra=’f’; printf(“El valor del caracter es %c”, letra); El valor del caracter es f printf("El entero es %d y el real es %f", 28, 3.75); El entero es 28 y el real es 3.75000 int num1=37; float num2=43.567; printf (“Los valores son %d y %f”, num1, num2); Los valores son 37 y 43.56700 Se podría especificar el número de decimales: printf (“Los valores son %d y %.3f”, num1, num2); Los valores son 37 y 43.567 Fundamentos de Informática EUP ULPGC Jose Torres 24 de 36 Secuencias de escape: Secuencia \n \t \b \r \" \' \\ \? Significado nueva línea tabulador backspace retorno de carro comillas apóstrofe backslash signo de interrogación Pe: printf (“Esta es una linea,\n”); printf (“y esta es otra.”) Esta es una linea, y esta es otra. Fundamentos de Informática EUP ULPGC Jose Torres 25 de 36 Expresiones Una expresión es una combinación de identificadores (variables), literales (valores constantes) y operadores, que representan un valor (número o carácter) Ejemplos: 345, 87.456 a + b, a + 3 num1 * (num2 + 7) siendo a, b, num1, num2 variables numéricas ‘+’ y ‘*’ son operadores aritméticos para la suma y el producto respectivamente Habrá que evaluar la expresión, aplicando las reglas de los operadores, para conocer su valor Fundamentos de Informática EUP ULPGC Jose Torres 26 de 36 Instrucción de asignación Asigna un valor a una variable nombre_variable = expresión; Ejemplo: #include <stdio.h> main() { int a = 1; float b = 4.5; int c, d; char letra; Fundamentos de Informática EUP ULPGC Jose Torres 27 de 36 c = 10; letra = ‘a'; d = a + c; printf("La variable a tiene el valor %d\n", a); printf("La variable b tiene el valor %f\n", b); printf("La variable c tiene el valor %d\n", c); printf("La variable d tiene el valor %d\n", d); printf("La variable letra tiene el valor %c", letra); } La variable a tiene el valor 1 La variable b tiene el valor 4.5 La variable c tiene el valor 10 La variable d tiene el valor 11 La variable letra tiene el valor a Fundamentos de Informática EUP ULPGC Jose Torres 28 de 36 Reglas de asignación Si los dos operandos en una instrucción de asignación son de tipos distintos, entonces el valor del operando de la derecha será automáticamente convertido al tipo del operando de la izquierda. Además: 1. Un valor en coma flotante se puede truncar si se asigna a una variable de tipo entero 2. Un valor de doble precisión puede redondearse si se asigna a una variable de coma flotante de simple precisión 3. Una cantidad entera puede alterarse si se asigna a una variable de tipo entero más corto o a una variable de tipo carácter. Es importante en C utilizar de forma correcta la conversión de tipos Fundamentos de Informática EUP ULPGC Jose Torres 29 de 36 Jose Torres 30 de 36 #include <stdio.h> main () { int a; float b=75.6; char m; a=b; printf("El valor de a es %d\n", a); m=a; printf("El valor de m es %c", m); } El valor de a es 75 El valor de m es K Fundamentos de Informática EUP ULPGC Función scanf() Permite leer datos del usuario introducidos por teclado scanf(formato, argumentos); formato: especificadores del formato con el que se van a leer los valores tecleados Los mismos que para printf() argumentos: especifico las variables a las que asigno los valores tecleados Fundamentos de Informática EUP ULPGC Jose Torres 31 de 36 Esta función lee desde teclado la secuencia de caracteres hasta la tecla de ‘intro’, y asigna ese valor a la variable correspondiente. Ejemplos: scanf("%d”, &numero); scanf("%c", &letra); scanf("%f %d %c", &real, &entero, &letra); # Importante el símbolo & Fundamentos de Informática EUP ULPGC Jose Torres 32 de 36 Ejemplo: programa que lee un número entero y lo eleva al cuadrado #include <stdio.h> /* Para poder usar las funciones */ /* printf y scanf. */ main() { int numero, cuadrado; printf("Introduzca un numero: "); scanf("%d", &numero); cuadrado = numero * numero; printf("El cuadrado de %d es %d\n", numero, cuadrado); } Fundamentos de Informática EUP ULPGC Jose Torres 33 de 36 Introducción a la directiva #define Permite definir constantes simbólicas en el programa #define nombre texto nombre representa un nombre simbólico que suele escribirse en mayúsculas texto no acaba en ; nombre es sustituido por texto en cualquier lugar del programa Ejemplo: #define PI 3.141593 Fundamentos de Informática EUP ULPGC Jose Torres 34 de 36 Ejemplo: programa que lee el radio de un círculo y calcula su área #include <stdio.h> #define PI 3.141593 void main() { float radio; float area; printf("Introduzca el radio: "); scanf("%f", &radio); area = PI * radio * radio; printf("El area del circulo es %5.4f \n", area); } Fundamentos de Informática EUP ULPGC Jose Torres 35 de 36 Jose Torres 36 de 36 Errores de programación comunes Problemas con las mayúsculas y minúsculas Omisión del punto y coma Uso del punto y coma en una directiva Comentarios incompletos Uso de variables no declaradas Cadenas de caracteres sin dobles comillas No usar el ‘&’ con en el scanf Olvido de paréntesis o llaves Fundamentos de Informática EUP ULPGC