Tema 3 Introducción al C Fundamentos de Informática Índice • • • • • • Conceptos básicos Tipos de datos Constantes Variables Expresiones Funciones básicas de entrada/salida Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 2 1 Conceptos básicos Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 3 El primer programa en C /* Programa: prog1.c * El resultado del programa sería: * Descripción: Pedir un valor y * mostrarlo por pantalla Este es mi primer programa * Indique el numero de alumnos del curso: 36 * Revisión: 0.0; 5/10/02 * Somos 36 alumnos * Autor: Luis Pérez * */ #include <stdio.h> /* Incluye las funciones de E/S estándar */ int main (void) { int contador; /* Función principal */ /* Declaración de variables */ /* Instrucciones del programa principal */ printf(“\n Este es mi primer programa “); printf(“\n Indique el numero de alumnos del curso: “); scanf(“%d”, &contador); printf(“\n Somos %d alumnos”, contador); return 0; } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 4 El primer programa en C • Las partes de que consta un programa en C: – Comentarios: están delimitados por /* y */ • En este ejemplo, se utilizan comentarios para realizar la ficha del programa y para poner comentarios explicativos • Son ignorados por el compilador – Directivas del preprocesador: comienzan por el carácter ‘#’ • El preprocesador es una parte del compilador que se encarga de realizar el proceso de traducción. • Las directivas se encargan de dar instrucciones al preprocesador para realizar algún tipo de proceso. • En particular: # include <stdio.h>, indica que se incluyan en este fichero los prototipos de las funciones de entrada / salida estándar. • La directiva # define PI 3.1416 indica que en todos los sitios del fichero donde se encuentre PI se sustituya por el valor indicado. – Función principal: int main(void) • Marca el punto donde el programa comienza la ejecución. • Es obligatorio en todos los programas. (Una y sólo una) – Llaves: {....} • Las llaves son necesarias en todos los programas en C. • Indican el principio y el final de las instrucciones de una función. En este ejemplo, principio y final del programa. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 5 El primer programa en C • Las partes de que consta un programa en C: – Parte de declaraciones • • • • – En esta primera parte de una función se van a declarar las variables (los almacenes que se van a usar en el programa). En C se declaran todas las variables al comienzo de la función La manera de declarar variables: tipo_dato nombre_variable; En el ejemplo, se crea una variable de tipo entero (int) que se llama “contador”. Instrucciones: siempre finalizan con el carácter ‘;’ • • Son órdenes de realización de alguna acción Función de salida: printf() – Se utiliza para escribir información por la salida estándar (habitualmente, la pantalla) – En el ejemplo: printf(“\n Este es mi primer programa “); Consigue que aparezca en pantalla el mensaje Este es mi primer programa Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 6 El primer programa en C • • Función de salida: printf() – En el ejemplo: printf(“\n Somos %d alumnos”, contador); Consigue que aparezca en pantalla ese mensaje sustituyendo en la cadena de caracteres el %d por el valor que esté almacenado en contador. Por ejemplo, si somos 36 alumnos y es el valor que ha introducido el usuario, aparecerá el mensaje: Somos 36 alumnos Función de entrada: scanf() – Es una función que permite a los programas leer la entrada del usuario desde el teclado. – Se puede pensar en ella como la opuesta al printf(). – En el ejemplo: scanf(“%d”, &contador); El especificador de formato “%d” indica que se va a leer un número entero del teclado. El nombre de la variable junto con el carácter ‘&’, es decir, &contador, indica que la información que se lea de teclado se va a almacenar en la variable contador. Si el usuario introduce el valor 36 cuando se le solicita el número de alumnos de la clase, dicho valor se almacenará en la variable contador. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 7 El primer programa en C ¿Cómo conseguimos desde este programa crear un código ejecutable? Utilizando el compilador. Errores de Compilación (léxicos, sintácticos y semánticos) Programa Fuente (texto) Compilador Archivos incluídos Archivos de Biblioteca Programa Objeto Enlazador Otros programas objetos Programa Ejecutable Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 8 El primer programa en C Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 9 El primer programa en C La importancia de la estructura – A nivel de compilador, el programa anterior podría escribirse: #include <stdio.h> /* Incluye las funciones de E/S estándar */int main(void) /* Función principal */{ int i;/* Declaración de variables */ /* Instrucciones del programa principal */ printf(“\nEste es mi primer programa “); printf(“\n¿Cuántos alumnos hay en este curso: “);scanf(“%d”, &i); printf(“\nSomos %d alumnos”, i);} – Normas de estilo • • • • • Escribir al principio de cada programa un comentario con la ficha del programa Cada instrucción (incluidas las declaraciones de variables) debe estar en una línea separada Las instrucciones pertenecientes a un bloque han de estar sangradas con respecto a las llaves que lo delimitan Hay que comentar todos lo aspectos importantes del código escrito Siempre debe ser prioritario el escribir un programa fácil de entender Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 10 El conjunto de caracteres en C • Programas construidos con bloques básicos: Letras A‐Z, a‐z, 0‐9 y caracteres especiales – + ‐ * / = % & # ! ¿ ^ “ ‘ ~ \ | \ < > ( ) [ ] { } : ; . , _ Spc – Representación de elementos especiales con caracteres especiales \n, \t, \b • Secuencias de escape – Cada secuencia de escape representa un único carácter – Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 11 Identificadores y palabras reservadas en C • Identificador: Nombre que se le da a un elemento de un programa • variables, funciones, vectores. – Formados por letras y dígitos en cualquier orden – Primer carácter debe ser siempre una letra – C distingue entre identificadores en mayúsculas y minúsculas • No es igual el identificador variable1 que el identificador VARIABLE1 – Como regla estándar definiremos los identificadores siempre en minúsculas – Es posible utilizar el carácter “_” en los identificadores – No son válidos los caracteres acentuados – Definir los identificadores con caracteres suficientes como para que den una idea clara de la información que contienen – Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 12 Identificadores y palabras reservadas en C Ejemplo: Identificadores validos x Y45 Producto_1 area CONJUNTO Apellidos Imp_IVA _temp Ejemplo: Identificadores no validos 5suma El primer carácter es un número “juan” “ carácter no válido,(solo letras y Resultado-1 - carácter no válido. Solucion prob El espacio en blanco no está permitido área Los identificadores no se acentúan. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 13 ). Identificadores y palabras reservadas en C • Exiten en C un conjunto de palabras reservadas que tienen un significado estándar predefinido. – Estas palabras se corresponden con instrucciones de C. – Las palabras reservadas se escriben en minúsculas no siendo equivalentes a sus correspondientes mayúsculas. auto case char const continue double enum Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI extern float for goto if int long register return signed Tema 3: Introducción al C sizeof break static struct switch typedef union default unsigned do void volatile 14 2 Tipo de datos Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 15 Tipos de datos ‐ Codificación de la información • • Dígito binario, Bit: unidad elemental de almacenamiento (Valor 0 o 1) Byte: unidad básica de almacenamiento (8 bits) 0 • 1 0 1 0 0 1 0 Codificación: correspondencia entre las magnitudes binarios con las que trabaja el ordenador y las magnitudes que existen en el mundo real MEMORIA PRINCIPAL E L PERRO FEROZ (Texto) -127.2 (Real) 1011000101001010 1001101010001111 0100101000101001 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI +457 (Entero) Instrucciones Tema 3: Introducción al C 16 Tipos de datos ‐ Codificación de la información • Sistema de numeración posicional: Cada número está formado por una serie de dígitos de forma que cada dígito tiene un peso en función de su posición. Sistema decimal: 348 = 3 * 102 + 4 * 101 + 8 * 100 Sistema binario: 1110 = 1 * 23 + 1 * 22 + 1 * 21 + 0 * 20 Dígito más significativo: Dígito más a la izquierda • Dígito menos significativo: Dígito más a la derecha • Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 17 Tipos de datos ‐ Codificación de la información Codificación de números enteros: Se utilizan todos los dígitos para representar el número. Con n dígitos: Número entero: Rango de valores de ‐2n‐1 a 2n‐1‐1 Número natural: Rango de valores de 0 a 2n‐1 Por ejemplo, con 8 bits se puede representar Naturales: 0 a 28‐1, un número entre 0 a 255 Enteros: ‐28‐1 a 28‐1‐1, un número entre ‐128 y 127 • Codificación de números reales: se representa con una mantisa y un exponente Por ejemplo, el número 3.701 será 0.3701 x 101 • Codificación de caracteres alfanuméricos: se le asigna a cada carácter una valor numérico, correspondiente al código ASCII • Codificación del programa: el juego de instrucciones del procesador está codificado en binario • Por facilidad, a cada instrucción se le asigna un mnemónico fácil de recordar (instrucciones del lenguaje ensamblador) Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 18 Tipos de datos C permite la posibilidad de trabajar con distintos tipos de datos • Existen cuatro tipos de datos básicos: • – – – • Carácter: char Número entero: int Números reales: representación en coma flotante: float ó double Representados de diferente manera en la memoria del computador TIPOS BÁSICOS: Tipo de dato Descripción int char float double • Requisito de memoria Cantidad entera 2-4 bytes o una palabra Carácter 1 byte Nª en coma flotante 1 palabra (4 bytes) (punto decimal y/o exponente) Nº en coma flotante 2 palabras (8 bytes) de doble precisión. Según la cantidad de memoria que utilicen dan una idea del RANGO de valores permitido – La cantidad de memoria varía según el tipo de ordenador y el compilador – El operador sizeof() indica el número de bytes de memoria que se utiliza para almacenar un tipo de dato o una variable Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 19 Tipos de datos • Por ejemplo, con el compilador MinGW: • Entero(int): 4 bytes • Carácter (char): 1 byte • Real (float): 4 bytes • Real (double): 8 bytes Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 20 Tipos de datos • Posibilidad de ampliar el tipo de datos Cualificadores de tipos de datos: indican la cantidad de memoria que se quiere utilizar para representarlos • Aplicables a int – short, long, signed (con signo), unsigned (sin signo) • Aplicables a double – long – Ejemplos: int: si ocupara 2 bytes, rango: ‐215..215‐1, ‐32768 a 32767 (el bit más significativo codifica el signo, 0 es positivo y 1 es negativo) int: si ocupara 4 bytes, rango: ‐231..231‐1, ‐ 2147483648 a 2147483647 – unsigned int (con 2 bytes): 0 a 216‐1, por tanto, 0 a 65535 unsigned int (con 4 bytes): 0 a 232‐1, por tanto, 0 a 4294967296 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 21 Tipos de datos Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 22 Tipos de datos COMBINACIONES DE TIPOS BÁSICOS Y MODIFICADORES PARA TAMAÑOS DE PALABRA DE 16 BITS Tipo Tamaño en bits Rango char unsigned char signed char 8 8 8 -128 a 127 0 a 255 -128 a 127 int unsigned int signed int short int unsigned short int signed short int long int unsigned long int signed long int float double long double 16 16 16 16 16 16 32 32 32 32 64 80 -32768 a 32767 0 a 65535 -32768 a 32767 -32768 a 32767 0 a 65635 -32768 a 32767 -2147483648 a 2147483647 0 a 4294967295 -2147483648 a 2147483647 3.4E-38 a 3.4E+38 1.7e-3.08 a 1.7E+308 3.4E-4932 a 1.1E+4932 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 23 Tipos de datos COMBINACIONES DE TIPOS BÁSICOS Y MODIFICADORES PARA TAMAÑOS DE PALABRA DE 16 BITS • La diferencia entre enteros con signo y sin signo está en la interpretación del bit más significativo. Si es 0 es positivo y si es 1 es negativo. Ejemplo 127 en binario es 0000000001111111 -127 en binario es 1000000001111111 Bit de signo Ejemplos: int: si ocupara 2 bytes, rango: -2^15..2^15-1, -32768 a 32767 int: si ocupara 4 bytes, rango: -2^31..2^31-1, - 2147483648 a 2147483647 unsigned int (con 2 bytes): 0 a 2^16-1, por tanto, 0 a 65535 unsigned int (con 4 bytes): 0 a 2^32-1, por tanto, 0 a 4294967296 24 Departamento de Sistemas Informáticos Tema 3: Introducción al C Escuela Técnica Superior de Ingeniería ICAI 24 3 Constantes Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 25 Constantes • Existen cuatro tipos de constantes en C: Constantes enteras Constantes numéricas – Constantes en coma flotante – Constantes de carácter – Constantes de cadena de caracteres – • Constantes enteras y de coma flotante Representan números (constantes numéricas) – No se pueden incluir comas ni espacios en blanco en la constante. – Si se desea la constante puede ir precedida de un signo menos. – El valor de la constante no puede exceder de un límite máximo y mínimo especificados. Estos límites varían de un compilador de C a otro. – Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 26 Constantes enteras Número con valor entero • Se pueden representar en tres sistemas numéricos: • – • Decimal, octal, hexadecimal Constantes enteras decimales – – – – Representan enteros en base 10 Combinación de dígitos de 0‐9 Si la constante tiene más de 1 dígito, el primer dígito debe ser distinto de 0 Ejemplos: • • Constantes enteras válidas: – 15, 27, 147, 2000 Constantes enteras no válidas: – 12,245 Carácter ilegal (,). – 36.0 Carácter ilegal (.). – 10 20 30 Carácter ilegal (espacio en blanco). – 123‐3 Carácter ilegal (‐). – 0534 El primer dígito no puede ser cero. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 27 Constantes enteras • Constantes enteras octales: Representa enteros en base 8 – Combinación de dígitos de 0‐7 – El primer dígito debe ser siempre 0. – Ejemplos: • Constantes enteras válidas: – 0, 01, 036, 022 • Constantes enteras no válidas: – 123 Una constante octal siempre debe comenzar por 0. – 012492 Dígito ilegal (9). – 023.14 Dígito ilegal (.). – Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 28 Constantes enteras • Constantes enteras hexadecimales: Representan enteros en base 16 – Combinación de dígitos de 0‐9 y A‐F (a‐f) A ‐ 10, B ‐ 11, C ‐ 12, D ‐ 13, E ‐ 14, F ‐ 15 – Los primeros dígitos deben ser siempre 0x o 0X – Cada dígito hexadecimal necesita 4 bits para representarlo. – Ejemplos: • Constantes enteras válidas: – 0x, 0x12, 0xFFA • Constantes enteras no válidas: – 0X12.34 Carácter ilegal (.). – 0BE38 El dato no comienza por 0x o por 0X. – 0xGaAa Carácter ilegal (G). – Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 29 Constantes enteras • Memoria ocupada por una constante entera: – – Rango normal (enteros de 2 bytes): [–32768 32767]. Rangos ampliados: • • • – Constantes enteras largas – Se especifican añadiendo L o l al final de la constante. Constantes enteras sin signo – Se especifican añadiendo U o u al final de la constante. Constantes enteras largas sin signo – Se especifican añadiendo UL o ul al final de la constante. Ejemplos: • • • • • • • 50000U 123456789L 123456789UL 0123456L 0777777U 0x50000U 0XFFFFFUL Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Decimal sin signo. Decimal larga. Decimal larga sin signo. Octal larga. Octal sin signo. hexadecimal sin signo. hexadecimal larga sin signo. Tema 3: Introducción al C 30 Constantes en coma flotante • • • • Numero en base decimal con un punto decimal y/o un exponente El punto decimal se representa en C con (.) El exponente se representa en C con (E o e) Ejemplos: Constantes en coma flotante válidas: • 0. / 1. / 0.2 / 50000. / 1.6667E+8 / 2E‐8 / 0.006e‐3 / .1234e12 / 9.3 – Constantes en coma flotante no válidas: – • • • • 1 Debe aparecer o bien un punto decimal o bien un exponente. 1,000.0 Carácter ilegal (,). 2e+10.2 El exponente debe ser una cantidad entera. 3E 10 Carácter ilegal (espacio en blanco en el exponente). Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 31 Constantes de carácter • • Un único carácter encerrado entre comillas simples (‘) Representación de los caracteres en memoria mediante código ASCII extendido (que es un valor entero equivalente) Utilizo 8 bits para codificar 256 caracteres diferentes, incluyendo caracteres de control. – Esta organización define un “orden” entre los caracteres que permite realizar comparaciones – • Ejemplos: – ‘A’ ‘4’ ‘g’ ‘’ Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 32 Constantes de carácter Valor ASCII Carácter Valor ASCII Carácter Valor ASCII Carácter Valor ASCII 0 NUL 32 blanco 64 @ 96 ` 1 SOH 33 ! 65 A 97 a 2 STX 34 “ 66 B 98 b 3 ETX 35 # 67 C 99 c 4 EOT 36 $ 68 D 100 d 5 ENQ 37 % 69 E 101 e 6 ACK 38 & 70 F 102 f 7 BEL 39 ‘ 71 G 103 g 8 BS 40 ( 72 H 104 h 9 HT 41 ) 73 I 105 i 10 LF 42 * 74 J 106 j 11 VT 43 + 75 K 107 k 12 FF 44 , 76 L 108 l 13 CR 45 - 77 M 109 m 14 SO 46 . 78 N 110 n 15 SI 47 / 79 O 111 o 16 DEL 48 0 80 P 112 p 17 DC1 49 1 81 Q 113 q 18 DC2 50 2 82 R 114 r 19 DC3 51 3 83 S 115 s 20 DC4 52 4 84 T 116 t 21 NAK 53 5 85 U 117 u 22 SYN 54 6 86 V 118 v 23 ETB 55 7 87 W 119 w 24 CAN 56 8 88 X 120 x 25 EM 57 9 89 Y 121 y 26 SUB 58 : 90 Z 122 z 27 ESC 59 ; 91 [ 123 { 28 GSFS 60 < 92 \ 124 | 29 RSGS 61 = 93 ] 125 } 30 USRS 62 > 94 ^ 126 ~ 31 US 63 ? 95 _ 127 DEL Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 33 Carácter Constantes de carácter • Secuencias de escape – Representan caracteres no imprimibles • ‘ / o bien caracteres de control como saltos de línea, tabulaciones, etc. • Comienzan siempre con una barra inclinada (\) • Aunque se escriban con dos caracteres, internamente representan un único carácter. Carácter sonido (alerta) retroceso tabulador horizontal tabulador vertical nueva línea avance de página retorno de carro comillas comillas simples signo interrogación barra invertida nulo Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Sec. Escape \a \b \t \v \n \f \r \” \’ \? \\ \0 Tema 3: Introducción al C Valor ASCII 7 8 9 11 10 12 13 34 39 63 92 0 34 Constantes de cadena de caracteres • • • • Una cadena de caracteres es una es una colección de datos de tipo carácter Una constante de cadena de caracteres consta de una secuencia de caracteres encerrados entre comillas dobles (“) Pueden incluir secuencias de escape Debemos distinguir entre: – • ‘A’ y “A” NO ES LO MISMO ‘A’: representa un sólo carácter “A”: representa una cadena de caracteres que tiene dos caracteres ( A y \0) Ejemplos: “juan” – “al final salto de línea \n” – Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 35 Constantes simbólicas • Se define como un identificador que sustituye a una secuencia de caracteres – – Los caracteres pueden representar una constante numérica, una constante de carácter o una constante de cadena de caracteres Se suelen definir al comienzo del programa #define NOMBRE_CONSTANTE valor – • No lleva ; al final pues no es una instrucción de C, sino una directiva para el preprocesador Ejemplos: # define INTERES 0.23 # # # # define define define define Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI PI 3.141593 TRUE 1 FALSE 0 NOMBRE “juan” Tema 3: Introducción al C 36 4 Variables Variables • Variable: Identificador utilizado para representar cierto tipo de información dentro de una determinada parte del programa. • Pensamos en variables como etiquetas colocadas en determinadas posiciones de memoria. – Una variable siempre debe tener asociado un tipo de datos – El tipo de datos de una variable se determina al declarar la variable – El tipo de datos con que se declare una variable marcará el tipo de valores que va a poder almacenar – Si no le asignamos un valor a una variable, puede tener cualquier valor – Puede cambiar el contenido de una variable pero no su tipo asociado – Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 38 Variables • Ejemplo: int a; int b; int c; char d; ............. a = 3; b = 5; c = a + b; d = ’a’; ........... a = 4; c = 19; b = a - c; d = ’w’; Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Declaración de variables Instrucciones Tema 3: Introducción al C 39 Variables y vectores • Se pueden declarar una variable que contenga un sólo elemento: – – • int x; char c; Se pueden declarar una variable que contenga varios elementos: – – – – – – A esta colección de elementos se le llama “vector” Identificador asociado a una colección de datos La referencia a cada uno de los datos de un vector se hace utilizando el identificador del vector y un índice. Los datos contenidos en un vector deben ser del mismo tipo. Unidimensionales, bidimensionales, etc. En C, el primer elemento de un vector en SIEMPRE el índice 0 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 40 Variables y vectores • Ejemplo: int lista_de_enteros[6]; lista_de_enteros 12 0 143 1 22 2 1 3 54 4 122 5 lista_de_enteros[3] Æ 1 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 41 Variables y vectores • Cadena de caracteres: Se declara como: char mensaje[5]; – El último elemento de una cadena de caracteres es siempre el carácter \0 que indica el fin de la cadena – Por tanto, una cadena de caracteres de n caracteres necesita un vector de n+1 posiciones – • Ejemplo: – Representación en esa variable de la cadena de caracteres “Hola” mensaje H 0 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI o 1 Tema 3: Introducción al C l 2 a \0 3 4 42 Declaraciones • • • • Asociación de un tipo de datos con una variable concreta Obligatorio declarar las variables para poder ser utilizadas dentro de un programa En C, las declaraciones se realizan al principio de las funciones Formato: tipo_de_dato variable1; tipo_de_dato nombre_del_vector[tamaño]; • • Se pueden declarar varias variables del mismo tipo en la misma línea pero NO es aconsejable. En la declaración de la variable se le puede asignar un valor, pero NO es aconsejable. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 43 Declaraciones • Ejemplos: – – – – – – Declaración de una variable de tipo int que se llama a: int a; Declaración de una variable de tipo float que se llama raiz1: float raiz1; Declaración de una variable que es un vector de 12 posiciones de elementos de tipo float y que se llama raiz2: float raiz2[12]; Declaración de una variable de tipo carácter (char) de nombre indicador: char indicador; Declaración de una variable que es un vector de 80 caracteres y que se llama texto: char texto[80]; Declaración de una variable de tipo double y que se llama factor: double factor; Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 44 5 Expresiones Expresiones Una EXPRESIÓN es la representación de un cálculo necesario para la obtención de un resultado, es decir las expresiones son combinaciones de constantes, variables, funciones, símbolos de operación y paréntesis. • Representa: • – – – – – Un dato simple Una entidad simple (constante, variable, elemento de un vector, referencia a una función) Combinación de entidades interconectadas por uno o más operadores Condiciones lógicas Ejemplos: • Suma de la variable a y la variable b: a+b • Asignación del valor de la variable y a la variable x: x = y Asignación de la suma de los valores de las variables a y b a la variable c: c = a+b Expresión lógica de comparación de si el valor de la variable x es menor o igual que el valor de la variable y: x <= y Expresión de comparación del valor de x y el valor de y: x == y Incremento en 1 del valor de la variable i: i++ (equivalente a i= i +1) • • • • Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 46 Expresiones • Numéricas: Son las expresiones que dan como resultado un número. Se construyen mediante los operadores aritméticos. Ejp: PI * SQR(X) operandoOperador aritméticooperando • Alfanuméricas: Son las que producen resultados de tipo alfanumérico Se construyen mediante los operadores alfanuméricos. Ejp: “HOLA” + “PEPE” operandoOperador alfanumérico operando • Booleanas/lógicas: Expresiones que producen un resultado Cierto o Falso. Se construyen mediante los operadores lógicos y relacionales. Operadores relacionales Ejp: A>0 y <=5 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Operador lógico Tema 3: Introducción al C 47 Instrucciones • • Hacen que la computadora realice alguna acción Hay tres tipos diferentes de instrucciones en C: Instrucciones de expresión • Expresión seguida de un punto y coma – Instrucciones compuestas o Bloque de instrucciones • Formada por varias instrucciones individuales encerradas con un par de llaves { } – Instrucciones de control • Realizan acciones especiales en los programas tales como comprobaciones lógicas, bucles y bifurcaciones – Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 48 Instrucciones • Ejemplos: a = 3; c = a + b; i++; printf (“El Area es igual a %f”,area); Instrucciones de expresión { pi = 3.141593; circunferencia = 2 * pi * radio; area = pi * radio * radio; Bloque de instrucciones } while (cont <= n) { printf (“x = “); scanf (“%f”, &x); suma = suma + x; cont++; } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Instrucciones de Control (mientras) Tema 3: Introducción al C 49 6 Funciones básicas de Entrada Salida Entrada y salida de datos • • • • Entrada y salida de caracteres: getchar() y putchar() Función scanf() Función printf() Funciones gets() y puts() Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 51 Entrada y salida de caracteres • Función getchar(): Permite la entrada de caracteres uno a uno desde teclado. – Función de stdio.h – No requiere parámetros de entrada – Si hay un error en la lectura, devuelve un valor EOF – Modo de uso: – char tecla; tecla=getchar(); Si se desean leer varios caracteres, es necesario incluir la función getchar() dentro de un bucle. – Prototipo de la función: – int putchar( int ch ); Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 52 Entrada y salida de caracteres • Función putchar(): – – Envía un carácter al dispositivo de salida estándar El carácter a transmitir deberá suministrarse a la función putchar() como argumento de la función • • En forma de variable de tipo char Como constante de tipo carácter putchar(variable_tipo_carácter); – Si hay un error en la escritura, devuelve un valor EOF – Ejemplo de uso: char letra; letra=‘h’; putchar(letra); putchar(‘j’); – Prototipo: int printf( const char *format, ... ); Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 53 Función scanf() • Permite la introducción de información desde el dispositivo de entrada estándar Permite cualquier combinación de valores numéricos, caracteres y cadenas de caracteres. – La función devuelve el número de caracteres que se han conseguido introducir correctamente. – • Formato: scanf (cadena de control, arg1, arg2, .... , argn); – Cadena de control: • Cadena de caracteres que contiene información acerca del formato de los datos que van a ser introducidos. – Los argumentos (arg) son punteros a las direcciones de memoria donde se encuentran los datos. • Variables de un solo elemento: se indica la dirección con & • Variables de varios elementos de tipo carácter (cadena de caracteres): no hace falta el & Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 54 Función scanf() – Es posible poner varios argumentos en la misma sentencia scanf(), pero NO es aconsejable por claridad, mejor hacerlo de uno en uno int a; int b; printf(“Introducir el valor de a y b “); /* Es posible usar */ scanf(“%d %d”, &a, &b); /* Pero mejor */ printf(“Introduzca el valor de a: “); scanf(“%d”, &a); printf(“Introduzca el valor de b: “); scanf(“%d”, &b); Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 55 Función scanf() • Cadena de control: – Incluye grupos de caracteres individuales. – Cada grupo de caracteres debe ir precedido por %. – El número de grupos de caracteres individuales en la cadena de control debe coincidir con el número de argumentos definidos en la función scanf(). – Los grupos de caracteres pueden estar separados por espacios en blanco, tabuladores, saltos de línea ... • Los espacios en blanco entre los datos de entrada serán leídos pero scanf() los ignorará Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 56 Función scanf() Carácter de Conversión c Significado Dato tipo carácter d Dato entero decimal e Dato valor en coma flotante f Dato valor en coma flotante (tipo float) lf Dato valor en coma flotante (tipo double) g Dato valor en coma flotante h Dato entero corto i Dato entero decimal, octal o hexadecimal o Dato entero octal s Dato cadena de caracteres (el carácter nulo \0 se añade automáticamente al final) u Dato entero decimal sin signo x Dato entero hexadecimal [...] Dato cadena de caracteres que puede incluir caracteres de Tema 3: Introducción al C espaciado 57 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Función scanf() #include <stdio.h> int main (void) { char concepto[20]; int no_partida; float coste; double porc; .............................. scanf (“%s”, concepto); scanf(“%d”, &no_partida); scanf(“%f”, &coste); scanf(“%lf”, &porc); } El tipo de los argumentos debe ser coherente con los grupos de caracteres de la cadena de control Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 58 Función scanf() • • • Los datos introducidos deben corresponder con los argumentos de la función scanf en número, tipo y orden, (los datos octales y hexadecimales no llevan 0 ni 0x). Los datos de entrada pueden ser valores numéricos, caracteres sueltos, cadenas de caracteres o cualquier combinación de estos. Datos numéricos deben estar escritos como se han definido las constantes numéricas. – • Constantes octales y hexadecimales no necesitan ser precedidos de 0 y 0x al introducir dicho valor. Si se introducen dos o más datos, estos deberán estar separados por caracteres en blanco. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 59 Función scanf() Ejemplo Función scanf: Separación de grupos de caracteres. #include <stdio.h> int main(void) { char concep; int part; ... {No separamos los grupos de caracteres con blancos} scanf(“%i%c“,&part,&concep); printf(“%i %c”,part,concep); ... } Una ejecución del programa: Si introducimos 10, dos blancos y el carácter ‘e’, tenemos: 10 10 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI e ↵ Tema 3: Introducción al C 60 Función scanf() Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 61 Función scanf() Ejemplo Función scanf :Separación de grupos de caracteres. #include <stdio.h> int main(void){ char concep; int part; ... {Separamos los grupos de caracteres con blancos} scanf(“%i %c“,&part,&concep); printf(“%i %c”,part,concep); ... } Una ejecución del programa: Si introducimos 10, dos blancos y el carácter ‘e’, tenemos: 10 e ↵ 10 e - La salida es el entero introducido en part, un blanco y el carácter ‘e’ introducido en concep. Por tanto, si la cadena de control empieza con un char, es bueno preceder el primer % de un blanco y así eliminar caracteres extraños. scanf (“ %c..”,.....) Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 62 Función scanf() Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 63 63 Función scanf() #include <stdio.h> int main (void) { int entero; /* Petición de los datos */ printf("Introduce un valor en octal: "); scanf("%o", &entero); printf("\nEn octal: %o", entero); printf("\nEn decimal: %d", entero); printf("\nEn hexadecimal: %x", entero); printf("\n\nIntroduce valor en hexadecimal: "); scanf("%x", &entero); printf("\nEn octal: %o", entero); printf("\nEn decimal: %d", entero); printf("\nEn hexadecimal: %x", entero); printf("\n\nIntroduce un valor en decimal: "); scanf("%d", &entero); printf("\nEn octal: %o", entero); printf("\nEn decimal: %d", entero); printf("\nEn hexadecimal: %x", entero); } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 64 Función scanf() Primera ejecución: Segunda ejecución: Introduce un valor en octal: 66 Introduce un valor en octal: 066 En octal: 66 En decimal: 54 En hexadecimal: 36 En octal: 66 En decimal: 54 En hexadecimal: 36 Introduce valor en hexadecimal: 66 Introduce valor en hexadecimal: 0x66 En octal: 146 En decimal: 102 En hexadecimal: 66 En octal: 146 En decimal: 102 En hexadecimal: 66 Introduce un valor en decimal: 66 Introduce un valor en decimal: 66 En octal: 102 En decimal: 66 En hexadecimal: 42 En octal: 102 En decimal: 66 En hexadecimal: 42 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 65 Función scanf() Entrada de datos tipo cadena y carácter: – Para leer un carácter se utiliza el especificador de formato: %c – Para leer una cadena de caracteres se utiliza el especificador de formato: %s • • Hay que tener en cuenta que si se utiliza únicamente %s para leer una cadena, sólo leerá una palabra. Por ejemplo: printf(“Introduce una cadena:”); scanf(“%s”, cadena); Si el usuario introduce: Hola amigos El resultado será que en la variable cadena sólo se habrá almacenado la cadena “Hola” Métodos alternativos para evitar este problema: Utilizar la función gets(): gets(cadena); – Uso de scanf() con el especificador: %[.....] • Los corchetes incluyen los caracteres permitidos para la cadena. • El uso de ^ sobre el grupo de caracteres [ ] permite la lectura de los caracteres opuestos a los encerrados entre corchetes. – Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 66 Función scanf() La conversión de caracteres de tipo s se aplica a una cadena de caracteres que acaba en un carácter de espaciado. Si deseamos que una cadena de caracteres pueda incluir blancos utilizar [...] e incluir en los corchetes los caracteres permitidos en la cadena. Ejemplo Función scanf: Lectura de cadenas de caracteres. #include <stdio.h> main() { char linea[80]; ... {Podemos guardar una cadena de máximo 80 caracteres} ... scanf(“ %[ ABCDEFGHIJKLMNÑOP]”,linea); ... } Podemos guardar en línea una cadena de caracteres con los caracteres blanco y ‘A’..’P’ Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 67 Función scanf() Si colocamos ^ antes de los caracteres de dentro de los corchetes, el sentido es el opuesto. Podemos leer cualquier cadena que no incluya esos caracteres. Ejemplo Función scanf: Lectura de cadenas de caracteres. #include <stdio.h> main() { char linea[80]; ... {Podemos guardar una cadena de máximo 80 caracteres} ... scanf(“ %[^\n]”,linea); ... } Podemos guardar en línea una cadena de caracteres con cualquier carácter excepto ‘ n’. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 68 Función scanf() CÓDIGO EJECUCIÓN printf("Introduce una cadena:"); scanf("%s", linea); printf("La cadena es: %s", linea); Introduce una cadena:HOLA AMIGOS mios La cadena es: HOLA printf("Introduce una cadena:"); scanf("%[ Introduce una cadena:HOLA AMIGOS mios La cadena es: HOLA AMIGOS ABCDEFGHIJKLMNOPQRSTUVVXYZ]“,linea); printf("La cadena es: %s", linea); printf("\nIntroduce segunda cadena:"); scanf("%[^\n]",linea); printf("La cadena es: %s", linea); Introduce una cadena:HOLA AMIGOS mios La cadena es: HOLA AMIGOS míos printf("\nIntroduce una cadena:"); gets(linea); printf("La cadena es: %s", linea); Introduce una tercera cadena: HOLA AMIGOS mios La cadena es: HOLA AMIGOS míos Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 69 Función scanf() • Longitud de campo máxima: – Número de caracteres máximo para un determinado campo. – Se incluye un número entero entre el % y el carácter de conversión. – El dato podrá estar compuesto por menos caracteres de los indicados por la longitud de campo máxima pero nunca por más. • Los datos sobrantes son interpretados como parte del siguiente dato Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 70 Función scanf() Ejecución 1 Ejemplo: • 123456789 El entero es: 123 #include <stdio.h> int main(void) { int i; CÓDIGO float x; char c; } El float es: 45678.000000 El caracter es: 9 Ejecución 2 scanf("%3d",&i); printf("El entero es: %d \n", i); scanf("%5f", &x); printf("\nEl float es: %f", x); scanf("%c", &c); printf("\nEl caracter es: %c", c); Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI 12 El entero es: 12 15634.8897 El float es: 15634.000000 El caracter es: . Tema 3: Introducción al C 71 Función scanf() Ejemplo Función scanf: Longitud de campo máxima. #include <stdio.h> int main(void) { int a,b,c; ... {Colocamos como longitud 3} scanf(“%3d %3d %3d“,&a,&b,&c); ... } Una ejecución del programa: Si tenemos en el input ‘123456789’ : 123456789 ↵ a = 123 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI b=456 c=789 Tema 3: Introducción al C 72 Función scanf() Es posible saltarse un dato del input colocando * tras %, (supresión de asignación). Ejemplo Función scanf: Supresión de asignación. #include <stdio.h> int main(void) { char concepto[20]; int no_partida; float coste; ... {Colocamos * antes de d} scanf(“ %s %*d %f“, concepto,&no_partidab,&coste); ... } Una ejecución del programa: Si tenemos en el input ‘hola 2 34 4.5’ : hola 2 34 4.5 ↵ concepto = “hola” no partida=34 coste=4.5 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 73 Función scanf() Podemos saltarnos caracteres de espaciado de input con el carácter de conversión “%1s” en lugar de “ %c” .( NO utilizar). Ejemplo Función scanf. Omisión de espaciado. #include <stdio.h> int main(void) { char c1,c2,c3; ... {Colocamos “%1s”} scanf(“ %c%1s%1s“,&c1,&c2,&c3); ... } Un programa equivalente: #include <stdio.h> void main(void) { char c1,c2,c3; ... {Colocamos “ %c”} scanf(“ %c %c %c“,&c1,&c2,&c3); ... } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 74 Función scanf() Si aparecen caracteres no reconocidos en la cadena de control, se espera que aparezcan en el input. - Si no aparecen scanf terminará su ejecución. Ejemplo Función scanf. #include <stdio.h> int main(void) { int i; float x; ... {Colocamos una a} scanf(“%d a %f“,&i,&x); ... } Una ejecución del programa: Si tenemos en el input ‘ 2 34’ : 2 34 ↵ TERMINA LA EJECUCIÓN DE scanf Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 75 Función printf() • Escribe datos en el dispositivo de salida estándar. Válida para cualquier combinación de valores numéricos, carácter o de cadena de caracteres – Formato: printfprintf (cadena de control, arg1,arg2,...., argn); (cadena de control, arg1, arg2, ..., arg); – Cadena de control: • Cadena que hace referencia al formato de los datos a escribir • Las reglas aplicables a los grupos de caracteres en scanf() también son aplicables a printf() • Dentro de la cadena de control pueden aparecer caracteres que no sean necesariamente caracteres de conversión – Estos se muestran directamente a la pantalla – Los argumentos pueden ser cualquier tipo de variable y no es necesario precederlos del & – Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 76 Función printf() Carácter de Conversión Significado c Dato tipo carácter d Dato entero decimal e Dato valor en coma flotante con exponente f Dato valor en coma flotante sin exponente g i Dato valor en coma flotante utilizando la conversión de tipo e o la conversión de tipo f según sea el caso. No se visualizan ni los ceros finales ni el punto decimal cuando no es necesario. Dato entero decimal con signo o Dato entero octal, sin el cero inicial s Dato cadena de caracteres u Dato entero decimal sin signo x Dato entero hexadecimal sin el prefijo 0x Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 77 Función printf() Ejemplo: #include <stdio.h> #include <math.h> int main(void) { float i; float j; /* Inicializaciones */ i = 2.0; j=3.0; printf(“%f %f %f %f”, i, j, i+j, sqrt(i+j)); } Resultado: 2.000000 3.000000 5.000000 2.236068 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 78 Función printf() Ejemplo: #include <stdio.h> int main(void) { double x; double y; /* Inicializaciones */ x=5000.0; y=0.0025; printf(“%f %f %f %f \n\n”, x, y, x*y, x/y); printf(“%e %e %e %e”, x, y, x*y, x/y); } Resultado: 5000.000000 0.002500 12.500000 2000000.000000 5.000000e+03 2.500000e-03 1.250000e+01 2.000000e+06 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 79 Función printf() Se utiliza la conversión de tipo s para visualizar una cadena de caracteres, que puede incluir caracteres blancos y que termina en 0. - Nótese la diferencia con scanf. Ejemplo Función printf. Programa que lee una línea de texto y la muestra. #include <stdio.h> int main(void){ char linea[80]; ... {Leemos la linea} scanf(“ %[^\n]“,linea); printf(“%s”,linea); ... } Una ejecución del programa: Si tenemos en el input ‘Clase de Informática’ : Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Clase de Informática ↵ Clase de Informática Tema 3: Introducción al C 80 Función printf() • LONGITUD DE CAMPO MÍNIMA: – – – Especifica la longitud mínima del campo poniendo una cifra justo a continuación del %. (Por ejemplo, “%2d”) Si el campo tuviera una longitud menor a la de la longitud de campo mínima se rellena con espacios en blanco a la izquierda del campo. Si el campo tuviera longitud mayor se conserva esa longitud. PRECISION MÁXIMA: Especifica el máximo número de cifras decimales con que se representará un valor en coma flotante. Es un entero sin signo que siempre es precedido por un punto decimal. (Por ejemplo, “%.3f”) Si se especifica la longitud de campo mínima además de la precisión, entonces la especificación de la precisión seguirá a la especificación de la longitud de campo. (Por ejemplo, “%2.3f”) Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 81 Función printf() Ejemplo de longitud de campo mínima: Resultado: 12345 12345 #include <stdio.h> int main(void) { int i; float x; 12345 345.678009 345.678009 /* Inicializaciones */ i=12345; x=345.678; 3.456780e+02 3.456780e+02 3.456780e+02 printf(“%3d %5d %8d \n\n”, i, i, i); printf(“%3f %10f %13f \n\n”, x, x, x); printf(“%3e %13e %16e”, x, x, x); } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI 345.678009 Tema 3: Introducción al C 82 Función printf() Ejemplo 1 de longitud de campo mínima y precisión máxima: #include <stdio.h> int main(void) { float x; /* Inicialización */ x=123.456; printf(“%7f %7.3f %7.1f\n\n”, x, x, x); printf(“%12e %12.5e %12.3e”, x, x, x); } Resultado: 123.456001 123.456 123.5 1.234560e+02 1.23456e+02 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI 1.235e+02 Tema 3: Introducción al C 83 Función printf() Ejemplo 2 de longitud de campo mínima y precisión máxima: #include <stdio.h> int main(void) { float x; /* Inicialización */ x=123.456; printf(“%f %.3f %.1f \n\n”, x, x, x); printf(“%e %.5e %.3e”, x, x, x); } Resultado: 123.456001 123.456 123.5 (Ejemplo 2) 123.456001 123.456 123.5 (Ejemplo 1, página anterior) 1.234560e+02 1.23456e+02 1.235e+02 (Ejemplo 2) 1.234560e+02 1.23456e+02 1.235e+02 (Ejemplo 1) Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 84 Función printf() Se puede utilizar una longitud de campo mínima y precisión en cadenas de caracteres . - La precisión en una cadena de caracteres indica el número máximo de caracteres se pueden visualizar. Ejemplo Función printf. Longitud de campo y precisión en cadenas de caracteres. #include <stdio.h> int main(void) { char linea[12]; ... printf(“%10s %15s %15.5s %.5s”,linea,linea,linea,linea); ... } Una ejecución del programa: Si tenemos en el input ‘Informatica’ : Informatica Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Informatica Tema 3: Introducción al C Infor Infor 85 Función printf() • Es posible incluir prefijos para especificar: – – • Entero largo con o sin signo o doble precisión (l) Entero corto con o sin signo (h) Valido también con scanf() #include <stdio.h> int main(void) Ejemplo1 { short int a; short int b; long int c; long int d; /* Inicializaciones */ a = 3456; b = 0xFFe4; c = 034703321L; d = 789654234L; printf("%5hd %6hx %8lo %ld", a, b, c, d); } Resultado1: 3456 ffe4 34703321 789654234 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI #include <stdio.h> Ejemplo2 int main(void) { short int a; short int b; long int c; long int d; /* Inicializaciones */ a = 345678; b = 0xFFe423; c = 03470332100632L; d = 7896542342232L; printf("%5hd %6hx %8lo %ld", a, b, c, d); } Resultado2: 17998 e423 30332100632 -1902515112 Tema 3: Introducción al C 86 Función printf() • Posibilidad de incluir indicadores: Indicador Significado - El dato se ajusta a la izquierda dentro del campo (si se requieren espacios en blanco para conseguir la longitud de campo mínima, se añaden después del dato en lugar de antes). + Cada dato numérico es precedido por un signo (+ o -). Sin este indicador, sólo los datos negativos son precedidos del signo menos. 0 Hace que se presenten ceros en lugar de espacios en blanco. Se aplica sólo a datos que estén ajustados a la derecha dentro de campos de longitud mayor que la del dato. (NOTA: algunos compiladores consideran el indicador cero como parte de la especificación de la longitud de campo en lugar de cómo indicador real. Esto asegura que el 0 es procesado el último si hay varios indicadores presentes) ‘‘ Cada dato numérico positivo es precedido por un espacio en blanco. Este indicador se ignora si se encuentra presente también el indicador +. # Con las conversiones de tipo o y tipo x: Hace que los datos octales y hexadecimales sean precedidos por 0 y 0x. # Con las conversiones de tipo e, tipo f y tipo g: Hace que se presenten todos los números en coma flotante con un punto, aunque tengan un valor entero. Impide el truncamiento de los ceros de la derecha realizada por la conversión de tipo g. Departamento de Sistemas Informáticos Tema 3: Introducción al C 87 Escuela Técnica Superior de Ingeniería ICAI Función printf() Resultado: #include <stdio.h> int main(void) { int i ; float x; float y; 123 123 12 -3.3e+00 12 +123 /* Inicializaciones */ i= 123; x=12.0; y=-3.3; -3.3e+00 +12 -3.3e+00 +123 +12 12 12. 3.30000 -3.3e+00 -3.3 - printf(“%6d %7.0f %10.1e \n\n”,i ,x, y); printf(“%-6d %-7.0f %-10.1e \n\n”,i ,x, y); printf(“%+6d %+7.0f %+10.1e \n\n”,i ,x, y); printf(“%-+6d %-+7.0f %-+10.1e \n\n”,i ,x, y); printf(“%7.0f %#7.0f %7g %#7g \n\n”,x ,x ,y ,y); } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 3: Introducción al C 88 Funciones gets() y puts() Permiten entrada y salida de cadenas de caracteres • gets(cadena): • – – – • El argumento debe ser una variable de varios elementos (vector de caracteres o cadena de caracteres) de tipo carácter. Lee de la entrada estándar una cadena de caracteres Si ha habido error, gets() devuelve NULL puts(cadena): – – El argumento debe ser una variable de varios elementos (array) de tipo carácter Escribe en la salida estándar la cadena de caracteres seguida de una nueva línea Ejemplo de uso: Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI #include <stdio.h> int main(void) { char linea[80]; gets(linea); puts(linea); Tema 3: Introducción al C } 89 Escuela Técnica Superior de Ingeniería ICAI Alberto Aguilera 25 28015 Madrid Tel +34 91 542 28 00 Fax + 34 91 542 31 76 Iwww.icai.upcomillas.es www.upcomillas.es