tema_3

Anuncio
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
Descargar