Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CursoC PDF
CursoC PDF
Sistemas Operativos
Universidade da Coru
na
Sistemas Operativos
El Lenguaje de programaci
on C
1 / 218
El Lenguaje de programacion C I
Introduccion
Caractersticas del lenguaje C
Estructura de un programa C
Primeros ejemplos
Compilacion de un programa
Directivas del precompilador
Depuracion
make
Ejercicios
Tipos, operadores y expresiones
Nombres de variables
Tipos y tama
nos de datos
Constantes
Declaraciones de variables
Operadores aritmeticos
Operadores de relaci
on y l
ogicos
Sistemas Operativos
El Lenguaje de programaci
on C
2 / 218
El Lenguaje de programacion C II
Conversiones de tipo
Operadores de bit
Incremento y decremento, asignaci
on y expresiones
Expresion condicional
Precedencia y orden e evaluaci
on
Ejercicios
Control de flujo
Sentencias y bloques
if else
else-if
switch
bucleswhile, for y do..while
break y continue
goto y etiquetas
Ejercicios
Funciones y estructura de un programa
Sistemas Operativos
El Lenguaje de programaci
on C
3 / 218
El Lenguaje de programaci
on C
4 / 218
El Lenguaje de programacion C IV
Punteros y arrays multidimensionales
Argumentos en la lnea de comando
Punteros a funciones
Ejercicios
Estructuras
Estructuras
Operaciones sobre estructuras
Punteros a estructuras
Arrays de estructuras
Estructuras autoreferenciadas
Uniones
Campos de bits
typedef
Ejercicios
Biblioteca C
Biblioteca C
Sistemas Operativos
El Lenguaje de programaci
on C
5 / 218
El Lenguaje de programacion C V
Documentacion en lnea
Asignacion de memoria
Funciones de caracteres
Cadenas de caracteres
Entrada/salida con formato
Entrada/salida con formato a fichero
Entrada/salida con formato a memoria
Entrada/salida sin formato
Ejercicios
Herramientas
Valgrind
Sistemas Operativos
El Lenguaje de programaci
on C
6 / 218
Introduccion
Tipos, operadores y expresiones
Control de flujo
Funciones y estructura de un programa
Arrays y punteros
Estructuras
Biblioteca C
Herramientas
Sistemas Operativos
El Lenguaje de programaci
on C
7 / 218
Introduccion
Sistemas Operativos
El Lenguaje de programaci
on C
8 / 218
Es el lenguaje de programaci
on de prop
osito general asociado
al sistema operativo UNIX
Sistemas Operativos
El Lenguaje de programaci
on C
9 / 218
El lenguaje C consta de
I
Sistemas Operativos
El Lenguaje de programaci
on C
10 / 218
Introduccion
Sistemas Operativos
El Lenguaje de programaci
on C
11 / 218
Estructura de un programa C
I
I
I
I
Sistemas Operativos
El Lenguaje de programaci
on C
12 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
13 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
14 / 218
Introduccion
Sistemas Operativos
El Lenguaje de programaci
on C
15 / 218
Primeros ejemplos
#include <stdio.h>
main()
{
printf("hola, primer programa en C\n");
}
Sistemas Operativos
El Lenguaje de programaci
on C
16 / 218
#include <stdio.h>
main()
{
int fahr, celsius;
int lower, upper, step;
lower=0;
upper=300;
step=20;
fahr=lower;
while(fahr<=upper)
{
celsius=5*(fahr-32)/9;
printf("%d\t%d\n",fahr,celsius);
fahr=fahr+step;
}
}
Sistemas Operativos
El Lenguaje de programaci
on C
17 / 218
Introduccion
Sistemas Operativos
El Lenguaje de programaci
on C
18 / 218
Compilacion de un programa
Sistemas Operativos
El Lenguaje de programaci
on C
19 / 218
Introduccion
Sistemas Operativos
El Lenguaje de programaci
on C
20 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
21 / 218
I
I
Sistemas Operativos
El Lenguaje de programaci
on C
22 / 218
#include <stdio.h>
#define UPPER 300
#define LOWER 0
#define STEP 20
main()
{
int fahr, celsius;
fahr=LOWER;
while(fahr<=UPPER)
{
celsius=5*(fahr-32)/9;
printf("%d\t%d\n",fahr,celsius);
fahr=fahr+STEP;
}
}
Sistemas Operativos
El Lenguaje de programaci
on C
23 / 218
Introduccion
Sistemas Operativos
El Lenguaje de programaci
on C
24 / 218
Depuracion
I
Sistemas Operativos
El Lenguaje de programaci
on C
25 / 218
Introduccion
Sistemas Operativos
El Lenguaje de programaci
on C
26 / 218
make
Sistemas Operativos
El Lenguaje de programaci
on C
27 / 218
I
I
Sistemas Operativos
El Lenguaje de programaci
on C
28 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
29 / 218
Ademas, funcion1.c es
#include "funcion1.h"
void funcion1(void)
{
int i=MAX1;
return;
}
y funcion2.c es
#include "funcion2.h"
void funcion2(void)
{
int j=MAX2;
return;
}
Sistemas Operativos
El Lenguaje de programaci
on C
30 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
31 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
32 / 218
El Lenguaje de programaci
on C
33 / 218
Introduccion
Sistemas Operativos
El Lenguaje de programaci
on C
34 / 218
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
35 / 218
Introduccion
Tipos, operadores y expresiones
Control de flujo
Funciones y estructura de un programa
Arrays y punteros
Estructuras
Biblioteca C
Herramientas
Sistemas Operativos
El Lenguaje de programaci
on C
36 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
37 / 218
Nombres de variables
Sistemas Operativos
El Lenguaje de programaci
on C
38 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
39 / 218
char
int
float
double
I
Un
Un
Un
Un
Ademas int puede ser short o long y tanto int como char
pueden ser signed o unsigned
I
El tama
no depende del compilador pero int no es menor que
short ni mayor que long
Sistemas Operativos
El Lenguaje de programaci
on C
40 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
41 / 218
Constantes
Sistemas Operativos
El Lenguaje de programaci
on C
42 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
43 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
44 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
45 / 218
Declaraciones de variables
I
Sistemas Operativos
El Lenguaje de programaci
on C
46 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
47 / 218
Operadores aritmeticos
+ suma
- resta
* multiplicacion
/ division. Si los operandos son enteros la division es entera
% resto entero. No admite operandos float o double
Sistemas Operativos
El Lenguaje de programaci
on C
48 / 218
#include <stdio.h>
#define UPPER 300
#define LOWER 0
#define STEP 20
main()
{
float fahr, celsius;
fahr=LOWER;
while(fahr<=UPPER)
{
celsius=5.0/9.0*(fahr-32)
printf("%f\t%f\n",fahr,celsius);
fahr=fahr+STEP;
}
}
Sistemas Operativos
El Lenguaje de programaci
on C
49 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
50 / 218
Operadores de relaci
on
<
<=
>
>=
==
!=
menor que
menor o igual que
mayor que
mayor o igual que
igual a
distinto
Sistemas Operativos
El Lenguaje de programaci
on C
51 / 218
Operadores logicos
&& AND
|| OR
! NOT
Sistemas Operativos
El Lenguaje de programaci
on C
52 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
53 / 218
Conversiones de tipo
I
Sistemas Operativos
n);
fahrenheit=55.3;
(fahrenheit - 32); //77F = 25C
* (fahrenheit - 32);
El Lenguaje de programaci
on C
54 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
55 / 218
Operadores de bit
<<
>>
Sistemas Operativos
El Lenguaje de programaci
on C
56 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
57 / 218
xOPERADOR =expresi
on; equivale a x=x OPERADOR
(expresion);
Sistemas Operativos
El Lenguaje de programaci
on C
58 / 218
x+=expresi
on;
x-=expresi
on;
x*=expresi
on;
...
x>> =expresi
on;
x&=expresi
on;
...
equivale a x=x+expresi
on;
equivale a x=x-expresi
on;
equivale a x=x*expresi
on;
equivale a x=x>>expresi
on;
equivale a x=x&expresi
on;
x+=2; /*x=x+2*/
x*=4+y; /*x=x*(4+y)*/
Sistemas Operativos
El Lenguaje de programaci
on C
59 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
60 / 218
Expresion condicional
I
Se eval
uan expre1 , si es cierta (distinta de 0) el resultado es lo
que valga expre2
Ejemplos
char * a;
a= (p==NULL)? "cadena1": gets(p);
int n;
n= i*j*k ? 2567: (int) sqrt (pi);
printf ("Resultado: %s\n" (p!=NULL)? p:" error");
Sistemas Operativos
El Lenguaje de programaci
on C
61 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
62 / 218
Las operaciones l
ogicas se eval
uan de izquierda a derecha y se
detiene la evaluaci
on tan pronto como se conozca el resultado
Sistemas Operativos
El Lenguaje de programaci
on C
63 / 218
OPERADORES
() [] -> .
! ~ ++ -- - * & (tipo) sizeof
*/
+<< >>
< <= > >=
== !=
&
^
|
&&
||
?:
= += -= *= /= %= &= |= etc
,
Sistemas Operativos
asociatividad
izquierda a derecha
derecha a izquierda
izquierda a derecha
izquierda a derecha
izquierda a derecha
izquierda a derecha
izquierda a derecha
izquierda a derecha
izquierda a derecha
izquierda a derecha
izquierda a derecha
izquierda a derecha
derecha a izquierda
derecha a izquierda
izquierda a derecha
El Lenguaje de programaci
on C
64 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
65 / 218
Ejercicios
I
Considerando los n
umeros del 0 al 100 como caracteres sin
signo
Considerando los n
umeros del 0 al 100 como enteros cortos sin
signo
Considerando los n
umeros del 0 al 100 como enteros largos sin
signo
Sistemas Operativos
El Lenguaje de programaci
on C
66 / 218
Introduccion
Tipos, operadores y expresiones
Control de flujo
Funciones y estructura de un programa
Arrays y punteros
Estructuras
Biblioteca C
Herramientas
Sistemas Operativos
El Lenguaje de programaci
on C
67 / 218
Control de flujo
Sentencias y bloques
if else
else-if
switch
bucleswhile, for y do..while
break y continue
goto y etiquetas
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
68 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
69 / 218
Control de flujo
Sentencias y bloques
if else
else-if
switch
bucleswhile, for y do..while
break y continue
goto y etiquetas
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
70 / 218
if else
if (expresion)
sentencia1
else
sentencia2
I
Se eval
ua expresion. Si es distinta de 0 (cierta) se ejecuta
sentencia1 , si es 0 se ejecuta sentencia2
El else es opcional
Sistemas Operativos
El Lenguaje de programaci
on C
71 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
72 / 218
Control de flujo
Sentencias y bloques
if else
else-if
switch
bucleswhile, for y do..while
break y continue
goto y etiquetas
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
73 / 218
else-if
if (expresion1 )
sentencia1
else if(expresion2 )
sentencia2
else if(expresion3 )
sentencia3
...
else
sentencian
I
Se eval
uan en orden
Sistemas Operativos
El Lenguaje de programaci
on C
74 / 218
Control de flujo
Sentencias y bloques
if else
else-if
switch
bucleswhile, for y do..while
break y continue
goto y etiquetas
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
75 / 218
switch
switch (expresion) {
case constante1 : sentencias
case constante2 : sentencias
case constante3 : sentencias
...
default: sentencias
}
I Permite tomar una decisi
on m
ultiple basada en una expresion
que puede tomar un n
umero de valores constantes enteros (los
char son un tipo de entero)
I El valor de expresi
on se va comparando con las constantes por
orden y una vez que coincide con una de ellas se ejecutan
todas las sentencias (incluidas las de los cases siguientes)
hasta que se encuentra la sentencia break
I
Sistemas Operativos
El Lenguaje de programaci
on C
76 / 218
#include <stdio.h>
main() /* count digits, white space, others */
{
int c, i, nwhite, nother, ndigit[10];
nwhite = nother = 0;
for (i = 0; i < 10; i++)
ndigit[i] = 0;
while ((c = getchar()) != EOF) {
switch (c) {
case 0: case 1: case 2: case 3: case 4:
case 5: case 6: case 7: case 8: case 9:
ndigit[c-0]++;
break;
case :
case \n:
case \t:
nwhite++;
break;
default:
nother++;
break;
}
}
printf("digits =");
for (i = 0; i < 10; i++)
printf(" %d", ndigit[i]);
printf(", white space = %d, other = %d\n", nwhite, nother);
return 0;
}
Sistemas Operativos
El Lenguaje de programaci
on C
77 / 218
Control de flujo
Sentencias y bloques
if else
else-if
switch
bucleswhile, for y do..while
break y continue
goto y etiquetas
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
78 / 218
while (expresion)
sentencia
I
Se eval
ua expresion, y si es distinta de 0 se ejecuta sentencia
Sistemas Operativos
El Lenguaje de programaci
on C
79 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
80 / 218
Equivale exactamente a
expr1 ;
while (expr2 ){
sentencia
expr3 ;
}
I
Sistemas Operativos
El Lenguaje de programaci
on C
81 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
82 / 218
do
sentencia
while (expresion)
I
Sistemas Operativos
El Lenguaje de programaci
on C
83 / 218
Control de flujo
Sentencias y bloques
if else
else-if
switch
bucleswhile, for y do..while
break y continue
goto y etiquetas
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
84 / 218
break y continue
I
Sistemas Operativos
El Lenguaje de programaci
on C
85 / 218
Control de flujo
Sentencias y bloques
if else
else-if
switch
bucleswhile, for y do..while
break y continue
goto y etiquetas
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
86 / 218
goto y etiquetas
I
for ( ... )
for ( ... ) {
for ( ... ) {
...
if (disaster)
goto error;
}
...
error:
/* clean up the mess */
Sistemas Operativos
El Lenguaje de programaci
on C
87 / 218
Control de flujo
Sentencias y bloques
if else
else-if
switch
bucleswhile, for y do..while
break y continue
goto y etiquetas
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
88 / 218
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
89 / 218
Introduccion
Tipos, operadores y expresiones
Control de flujo
Funciones y estructura de un programa
Arrays y punteros
Estructuras
Biblioteca C
Herramientas
Sistemas Operativos
El Lenguaje de programaci
on C
90 / 218
funciones
funciones que no devuelven enteros
Variables externas
Variables estaticas
Variables registro
Inicializacion
Recursividad
EL preprocesador C
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
91 / 218
funciones
Sistemas Operativos
El Lenguaje de programaci
on C
92 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
93 / 218
#include <stdio.h>
#define MAXLINE 1000 /* maximum input line length */
int getline(char line[], int max)
int strindex(char source[], char searchfor[]);
char pattern[] = "ould"; /* pattern to search for */
/* find all lines matching pattern */
main()
{
char line[MAXLINE];
int found = 0;
while (getline(line, MAXLINE) > 0)
if (strindex(line, pattern) >= 0) {
Sistemas Operativos
El Lenguaje de programaci
on C
94 / 218
printf("%s", line);
found++;
}
return found;
}
/* getline: get line into s, return length */
int getline(char s[], int lim)
{
int c, i;
i = 0;
while (--lim > 0 && (c=getchar()) != EOF && c != \n)
s[i++] = c;
if (c == \n)
s[i++] = c;
s[i] = \0;
return i;
Sistemas Operativos
El Lenguaje de programaci
on C
95 / 218
}
/* strindex: return index of t in s, -1 if none */
int strindex(char s[], char t[])
{
int i, j, k;
for (i = 0; s[i] != \0; i++) {
for (j=i, k=0; t[k]!=\0 && s[j]==t[k]; j++, k++)
;
if (k > 0 && t[k] == \0)
return i;
}
return -1;
}
Sistemas Operativos
El Lenguaje de programaci
on C
96 / 218
I
I
El formato es
return expresi
on;
o
return (expresi
on);
expresi
on se convierte al tipo de dato que devuelve la funcion
Puede aparecer en cualquier parte de una funcion y provoca la
inmediata salida de ella
Si dicha sentencia aparece dentro de un bucle provoca la salida
de la funci
on y por tanto del bucle
Sistemas Operativos
El Lenguaje de programaci
on C
97 / 218
funciones
funciones que no devuelven enteros
Variables externas
Variables estaticas
Variables registro
Inicializacion
Recursividad
EL preprocesador C
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
98 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
99 / 218
#include <stdio.h>
#include <ctype.h>
#define MAXLINE 100
/* rudimentary calculator */
main()
{
double sum, atof(char []); //<-- Declaraci
on funci
on
char line[MAXLINE];
int getline(char line[], int max);
sum = 0;
while (getline(line, MAXLINE) > 0)
printf("\t%g\n", sum += atof(line));
return 0;
}
Sistemas Operativos
El Lenguaje de programaci
on C
100 / 218
int i, sign;
El Lenguaje de programaci
on C
101 / 218
funciones
funciones que no devuelven enteros
Variables externas
Variables estaticas
Variables registro
Inicializacion
Recursividad
EL preprocesador C
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
102 / 218
Variables externas
Variables externas son las que estan definidas fuera del cuerpo
de cualquier funci
on
Sistemas Operativos
El Lenguaje de programaci
on C
103 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
104 / 218
funciones
funciones que no devuelven enteros
Variables externas
Variables estaticas
Variables registro
Inicializacion
Recursividad
EL preprocesador C
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
105 / 218
Variables estaticas
I
Sistemas Operativos
El Lenguaje de programaci
on C
106 / 218
funciones
funciones que no devuelven enteros
Variables externas
Variables estaticas
Variables registro
Inicializacion
Recursividad
EL preprocesador C
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
107 / 218
Variables registro
Sistemas Operativos
El Lenguaje de programaci
on C
108 / 218
funciones
funciones que no devuelven enteros
Variables externas
Variables estaticas
Variables registro
Inicializacion
Recursividad
EL preprocesador C
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
109 / 218
Inicializacion
I
Sistemas Operativos
El Lenguaje de programaci
on C
110 / 218
funciones
funciones que no devuelven enteros
Variables externas
Variables estaticas
Variables registro
Inicializacion
Recursividad
EL preprocesador C
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
111 / 218
Recursividad
I
Sistemas Operativos
El Lenguaje de programaci
on C
112 / 218
funciones
funciones que no devuelven enteros
Variables externas
Variables estaticas
Variables registro
Inicializacion
Recursividad
EL preprocesador C
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
113 / 218
EL preprocesador C
I
CUBO(x) x*x*x
/*incorrecto CUBO (x+2)
CUBO(x) (x)*(x)*(x)
MAX(a,b) ((a>b)?a:b)
MAX(a,b,R) if (a > b) R=a; else R=b;
Sistemas Operativos
El Lenguaje de programaci
on C
114 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
115 / 218
funciones
funciones que no devuelven enteros
Variables externas
Variables estaticas
Variables registro
Inicializacion
Recursividad
EL preprocesador C
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
116 / 218
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
117 / 218
Introduccion
Tipos, operadores y expresiones
Control de flujo
Funciones y estructura de un programa
Arrays y punteros
Estructuras
Biblioteca C
Herramientas
Sistemas Operativos
El Lenguaje de programaci
on C
118 / 218
Arrays y punteros
Punteros y direcciones
Punteros y argumentos a funciones
Operaciones sobre punteros
Arrays y punteros
Arrays de punteros
Arrays multidimensionales
Punteros y arrays multidimensionales
Argumentos en la lnea de comando
Punteros a funciones
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
119 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
120 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
121 / 218
Asignandole la direcci
on de una variable. Por ejemplo
p=&i;
Asignandole el valor que devuelva una funci
on que reserve
memoria para el. Por ejemplo
p=(int *) malloc (sizeof (int));
Tras utilizar el puntero, siempre se debe liberar la memoria
reservada con malloc utilizando la funci
on free
free(p);
Sistemas Operativos
El Lenguaje de programaci
on C
122 / 218
Arrays y punteros
Punteros y direcciones
Punteros y argumentos a funciones
Operaciones sobre punteros
Arrays y punteros
Arrays de punteros
Arrays multidimensionales
Punteros y arrays multidimensionales
Argumentos en la lnea de comando
Punteros a funciones
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
123 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
124 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
125 / 218
Arrays y punteros
Punteros y direcciones
Punteros y argumentos a funciones
Operaciones sobre punteros
Arrays y punteros
Arrays de punteros
Arrays multidimensionales
Punteros y arrays multidimensionales
Argumentos en la lnea de comando
Punteros a funciones
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
126 / 218
I
I
I
I
I
I
Sistemas Operativos
El Lenguaje de programaci
on C
127 / 218
Arrays y punteros
Punteros y direcciones
Punteros y argumentos a funciones
Operaciones sobre punteros
Arrays y punteros
Arrays de punteros
Arrays multidimensionales
Punteros y arrays multidimensionales
Argumentos en la lnea de comando
Punteros a funciones
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
128 / 218
Arrays y punteros
I
La declaracion en C de un array es
tipo nombre array[dimension]
La siguiente declaraci
on declara un array de 10 enteros
int a [10];
Sistemas Operativos
El Lenguaje de programaci
on C
129 / 218
,
I
Sistemas Operativos
El Lenguaje de programaci
on C
130 / 218
,
I
pa[9]
Sistemas Operativos
El Lenguaje de programaci
on C
131 / 218
,
I
Sistemas Operativos
El Lenguaje de programaci
on C
132 / 218
#include <stdio.h>
char a[2][5] = {{11,12,13,14,15},
{21,22,23,24,25}};
main()
char
char
char
{
*p;
// puntero a char
(*q)[5]; // puntero a un array de 5 chars
*r[5];
// array de 5 punteros a char
p = &(a[0][0]);
printf("%d\n", p[0]);
p++;
printf("%d\n", p[0]);
q = &(a[0]);
printf("%d == %d \n", q[0][0], (*q)[0]);
// equivalentes
q++;
printf("%d\n", q[0][0]);
p = *a;
printf("a = %ld \t *a = %ld \t **a = %ld \n", a, *a, **a);
printf("p = %ld \t *p = %ld \n", p, *p);
}
Sistemas Operativos
El Lenguaje de programaci
on C
133 / 218
Arrays y punteros
Punteros y direcciones
Punteros y argumentos a funciones
Operaciones sobre punteros
Arrays y punteros
Arrays de punteros
Arrays multidimensionales
Punteros y arrays multidimensionales
Argumentos en la lnea de comando
Punteros a funciones
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
134 / 218
Arrays de punteros
I
La declaracion
int * ar[MAX]
declara que ar es un array de MAX punteros a enteros. Los
elementos ar[i] son punteros. El acceso a *ar[i], mientras
no inicialicemos adecuadamente los ar[i] produce un
resultado indefinido
Sistemas Operativos
El Lenguaje de programaci
on C
135 / 218
Arrays y punteros
Punteros y direcciones
Punteros y argumentos a funciones
Operaciones sobre punteros
Arrays y punteros
Arrays de punteros
Arrays multidimensionales
Punteros y arrays multidimensionales
Argumentos en la lnea de comando
Punteros a funciones
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
136 / 218
Arrays multidimensionales
Sistemas Operativos
El Lenguaje de programaci
on C
137 / 218
El Lenguaje de programaci
on C
138 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
139 / 218
Arrays y punteros
Punteros y direcciones
Punteros y argumentos a funciones
Operaciones sobre punteros
Arrays y punteros
Arrays de punteros
Arrays multidimensionales
Punteros y arrays multidimensionales
Argumentos en la lnea de comando
Punteros a funciones
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
140 / 218
a es la direcci
on de un bloque donde hay 200 enteros. Para
acceder al elemento a[1][3] tengo que saber que cada fila tiene
20 columnas
Si quiero pasar dicho array a una funci
on tendra que pasarle la
segunda dimensi
on ara que pudiese acceder correctamente a
los enteros
int func (int arr[][20])
Sistemas Operativos
El Lenguaje de programaci
on C
141 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
142 / 218
Array de punteros
Array multidimensional
Sistemas Operativos
El Lenguaje de programaci
on C
143 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
144 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
145 / 218
Arrays y punteros
Punteros y direcciones
Punteros y argumentos a funciones
Operaciones sobre punteros
Arrays y punteros
Arrays de punteros
Arrays multidimensionales
Punteros y arrays multidimensionales
Argumentos en la lnea de comando
Punteros a funciones
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
146 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
147 / 218
#include <stdio.h>
/* echo command-line arguments; 1st version */
int main(int argc, char *argv[])
{
int i;
for (i = 1; i < argc; i++)
printf("%s%s", argv[i], (i < argc-1) ? " " : "");
printf("\n");
return 0;
}
Sistemas Operativos
El Lenguaje de programaci
on C
148 / 218
Arrays y punteros
Punteros y direcciones
Punteros y argumentos a funciones
Operaciones sobre punteros
Arrays y punteros
Arrays de punteros
Arrays multidimensionales
Punteros y arrays multidimensionales
Argumentos en la lnea de comando
Punteros a funciones
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
149 / 218
Punteros a funciones
I
La siguiente declaraci
on
double (*pfunc)(int,double)
declara que pfunc es un puntero a una funci
on que devuelve
un double y que recibe dos parametros; un int y un double
char * (*pfunc)(char **)
ahora pfunc es un puntero a una funci
on funcion que devuelve
un puntero a caracter y que recibe como argumento un array
de punteros a caracter
Sistemas Operativos
El Lenguaje de programaci
on C
150 / 218
El Lenguaje de programaci
on C
151 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
152 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
153 / 218
Arrays y punteros
Punteros y direcciones
Punteros y argumentos a funciones
Operaciones sobre punteros
Arrays y punteros
Arrays de punteros
Arrays multidimensionales
Punteros y arrays multidimensionales
Argumentos en la lnea de comando
Punteros a funciones
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
154 / 218
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
155 / 218
Introduccion
Tipos, operadores y expresiones
Control de flujo
Funciones y estructura de un programa
Arrays y punteros
Estructuras
Biblioteca C
Herramientas
Sistemas Operativos
El Lenguaje de programaci
on C
156 / 218
Estructuras
Estructuras
Operaciones sobre estructuras
Punteros a estructuras
Arrays de estructuras
Estructuras autoreferenciadas
Uniones
Campos de bits
typedef
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
157 / 218
Estructuras
I
La declaracion es de la forma
struct nombre estructura {lista variables} nombre variable ;
I El nombre de la estructura puede omitirse. Las siguientes
declaraciones son (casi) equivalentes: todas declaran dos
estructuras (p1 y p2) cada una de las cuales contiene dos
enteros
a struct COORDENADAS {
int x;
int y;
} p1, p2;
b struct COORDENADAS {
int x;
int y;
};
struct COORDENADAS p1, p2;
Sistemas Operativos
El Lenguaje de programaci
on C
158 / 218
c struct {
int x;
int y;
} p1 , p2;
I
Sistemas Operativos
El Lenguaje de programaci
on C
159 / 218
Estructuras
Estructuras
Operaciones sobre estructuras
Punteros a estructuras
Arrays de estructuras
Estructuras autoreferenciadas
Uniones
Campos de bits
typedef
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
160 / 218
copia o asignaci
on
acceso a sus miembros
obtener su direcci
on con &
Pasarlas como argumentos a funciones
Ser devueltas por funciones
Sistemas Operativos
El Lenguaje de programaci
on C
161 / 218
Estructuras
Estructuras
Operaciones sobre estructuras
Punteros a estructuras
Arrays de estructuras
Estructuras autoreferenciadas
Uniones
Campos de bits
typedef
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
162 / 218
Punteros a estructuras
I
a struct COORDENADAS {
int x;
int y;
} *p1, *p2;
b struct
int
int
};
struct
Sistemas Operativos
COORDENADAS {
x;
y;
COORDENADAS *p1, *p2;
El Lenguaje de programaci
on C
163 / 218
c struct {
int x;
int y;
} *p1 , *p2;
I Podemos acceder a los miembros de una estructura a trav
es
del puntero de dos maneras
I
Accediendo a la estructura
(*p1).x
Los parentesis () son necesarios pues el operador . tiene
precedencia sobre la indirecci
on *
Directamente desde el puntero mediante el operador ->
p1->x
En general este sistema es el preferido, sobre todo cuando
usamos variables tipo struct para crear estructuras de datos
(listas, pilas, arboles . . . )
p->siguiente->siguiente->siguiente
(*(*(*p).siguiente).siguiente).siguiente
Sistemas Operativos
El Lenguaje de programaci
on C
164 / 218
Asignandole la direcci
on de una variable
Reservandole memoria con alguna funci
on (p.e. malloc)
El tama
no de una estructura no es necesariamente la suma del
tama
no de sus miembros
Sistemas Operativos
El Lenguaje de programaci
on C
165 / 218
Estructuras
Estructuras
Operaciones sobre estructuras
Punteros a estructuras
Arrays de estructuras
Estructuras autoreferenciadas
Uniones
Campos de bits
typedef
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
166 / 218
Arrays de estructuras
I
I
Sistemas Operativos
El Lenguaje de programaci
on C
167 / 218
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAXWORD 100
struct key {
char *word;
int count;
} keytab[] = {
"auto", 0,
"break", 0,
"case", 0,
"char", 0,
"const", 0,
"continue", 0,
"default", 0,
/* ... */
"unsigned", 0,
"void", 0,
"volatile", 0,
"while", 0
};
int getword(char *, int);
int binsearch(char *, struct key *, int);
Sistemas Operativos
El Lenguaje de programaci
on C
168 / 218
/* count C keywords */
main()
{
int n;
char word[MAXWORD];
while (getword(word, MAXWORD) != EOF)
if (isalpha(word[0]))
if ((n = binsearch(word, keytab, NKEYS)) >= 0)
keytab[n].count++;
for (n = 0; n < NKEYS; n++)
if (keytab[n].count > 0)
printf("%4d %s\n", keytab[n].count, keytab[n].word);
return 0;
}
Sistemas Operativos
El Lenguaje de programaci
on C
169 / 218
El Lenguaje de programaci
on C
170 / 218
Estructuras
Estructuras
Operaciones sobre estructuras
Punteros a estructuras
Arrays de estructuras
Estructuras autoreferenciadas
Uniones
Campos de bits
typedef
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
171 / 218
Estructuras autoreferenciadas
Sistemas Operativos
El Lenguaje de programaci
on C
172 / 218
Estructuras
Estructuras
Operaciones sobre estructuras
Punteros a estructuras
Arrays de estructuras
Estructuras autoreferenciadas
Uniones
Campos de bits
typedef
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
173 / 218
Uniones
I
Sistemas Operativos
El Lenguaje de programaci
on C
174 / 218
Estructuras
Estructuras
Operaciones sobre estructuras
Punteros a estructuras
Arrays de estructuras
Estructuras autoreferenciadas
Uniones
Campos de bits
typedef
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
175 / 218
Campos de bits
I
Sistemas Operativos
El Lenguaje de programaci
on C
176 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
177 / 218
Estructuras
Estructuras
Operaciones sobre estructuras
Punteros a estructuras
Arrays de estructuras
Estructuras autoreferenciadas
Uniones
Campos de bits
typedef
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
178 / 218
typedef
Sistemas Operativos
El Lenguaje de programaci
on C
179 / 218
Estructuras
Estructuras
Operaciones sobre estructuras
Punteros a estructuras
Arrays de estructuras
Estructuras autoreferenciadas
Uniones
Campos de bits
typedef
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
180 / 218
Ejercicios
Con un array
Con un array de punteros
De manera dinamica
Sistemas Operativos
El Lenguaje de programaci
on C
181 / 218
Introduccion
Tipos, operadores y expresiones
Control de flujo
Funciones y estructura de un programa
Arrays y punteros
Estructuras
Biblioteca C
Herramientas
Sistemas Operativos
El Lenguaje de programaci
on C
182 / 218
Biblioteca C
Biblioteca C
Documentacion en lnea
Asignacion de memoria
Funciones de caracteres
Cadenas de caracteres
Entrada/salida con formato
Entrada/salida con formato a fichero
Entrada/salida con formato a memoria
Entrada/salida sin formato
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
183 / 218
Biblioteca C
I
Sistemas Operativos
El Lenguaje de programaci
on C
184 / 218
Biblioteca C
Biblioteca C
Documentacion en lnea
Asignacion de memoria
Funciones de caracteres
Cadenas de caracteres
Entrada/salida con formato
Entrada/salida con formato a fichero
Entrada/salida con formato a memoria
Entrada/salida sin formato
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
185 / 218
Documentacion en lnea
I
NAME
sqrt, sqrtf, sqrtl - square root function
SYNOPSIS
#include <math.h>
double sqrt(double x);
float sqrtf(float x);
long double sqrtl(long double x);
Link with -lm.
.....
Sistemas Operativos
El Lenguaje de programaci
on C
186 / 218
Biblioteca C
Biblioteca C
Documentacion en lnea
Asignacion de memoria
Funciones de caracteres
Cadenas de caracteres
Entrada/salida con formato
Entrada/salida con formato a fichero
Entrada/salida con formato a memoria
Entrada/salida sin formato
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
187 / 218
Asignacion de memoria
I
Sistemas Operativos
El Lenguaje de programaci
on C
188 / 218
Biblioteca C
Biblioteca C
Documentacion en lnea
Asignacion de memoria
Funciones de caracteres
Cadenas de caracteres
Entrada/salida con formato
Entrada/salida con formato a fichero
Entrada/salida con formato a memoria
Entrada/salida sin formato
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
189 / 218
Funciones de caracteres
I
Sistemas Operativos
isalnum(int c);
isalpha(int c);
isascii(int c);
isblank(int c);
iscntrl(int c);
isdigit(int c);
isgraph(int c);
islower(int c);
isprint(int c);
ispunct(int c);
isspace(int c);
isupper(int c);
isxdigit(int c);
El Lenguaje de programaci
on C
190 / 218
Biblioteca C
Biblioteca C
Documentacion en lnea
Asignacion de memoria
Funciones de caracteres
Cadenas de caracteres
Entrada/salida con formato
Entrada/salida con formato a fichero
Entrada/salida con formato a memoria
Entrada/salida sin formato
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
191 / 218
Cadenas de caracteres
I
arrays de caracteres
punteros a caracter
Sistemas Operativos
El Lenguaje de programaci
on C
192 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
193 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
194 / 218
La sentencias
strcpy(a,"esto es una cadena");
strcpy(a,"la cadena ha cambiado de valor");
son perfectamente correctas siempre y cuando MAX sea
mayor que la longitud de la cadena ha cambiado de
valor +1
Sistemas Operativos
El Lenguaje de programaci
on C
195 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
196 / 218
El Lenguaje de programaci
on C
197 / 218
strstr, strchr,...
Sistemas Operativos
El Lenguaje de programaci
on C
198 / 218
Biblioteca C
Biblioteca C
Documentacion en lnea
Asignacion de memoria
Funciones de caracteres
Cadenas de caracteres
Entrada/salida con formato
Entrada/salida con formato a fichero
Entrada/salida con formato a memoria
Entrada/salida sin formato
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
199 / 218
El formato de printf es
int printf(const char *format, ...)
Sistemas Operativos
El Lenguaje de programaci
on C
200 / 218
La primera especificaci
on de conversi
on se refiere al primer
argumento despues del format, la segunda al siguiente . . . .
El significado de los caracteres en una especificacion de
conversi
on es:
I
I
I
I
Sistemas Operativos
- El ajuste es a la izquierda
N.M N ancho mnimo (para float dgitos antes del . decimal).
M n
umero mnimo de dgitos que se imprimir
an para un entero
(para float n
umero de dgitos a la derecha del . decimal)
h para entero corto l para entero largo
Caracter de conversi
on
El Lenguaje de programaci
on C
201 / 218
El caracter de conversi
on especifica que hay que imprimir
Especificaciones de
car
acter
argumento
d,i
entero
u
entero
o
entero
x, X
entero
f
real
e,E
real
g, G
c
car
acter
s
cad. Chars
%
p
void
ld, lu, lx, lo entero
conversi
on (%u, %d,...)
salida
entero con signo
entero sin signo
entero en octal sin signo
entero en hexadecimal sin signo
real con punto y signo
notaci
on exponencial con signo
car
acter
cadena de caracteres
imprime un %
depende implementaci
on
entero largo
C
odigos de escape
C
odigo salida
\n
nueva lnea
\t
tabulador
\b
backspace
\r
retorno carro
\
comillas
\
ap
ostrofo
\\
\
\?
?
Por ejemplo:
printf (real: %2.4f; entero: %X\n", x,n);
imprimira algo como:
real: 3.1516; entero: FF09465
Sistemas Operativos
El Lenguaje de programaci
on C
202 / 218
Ejemplo
int n; char caracter;
scanf ("%d",&n);
printf ("\n El cuadrado de %d es : %d",n, n*n);
scanf ("%c",&caracter);
printf ("\n He le
do el car
acter: %c", caracter);
Sistemas Operativos
El Lenguaje de programaci
on C
203 / 218
Biblioteca C
Biblioteca C
Documentacion en lnea
Asignacion de memoria
Funciones de caracteres
Cadenas de caracteres
Entrada/salida con formato
Entrada/salida con formato a fichero
Entrada/salida con formato a memoria
Entrada/salida sin formato
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
204 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
205 / 218
Biblioteca C
Biblioteca C
Documentacion en lnea
Asignacion de memoria
Funciones de caracteres
Cadenas de caracteres
Entrada/salida con formato
Entrada/salida con formato a fichero
Entrada/salida con formato a memoria
Entrada/salida sin formato
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
206 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
207 / 218
Biblioteca C
Biblioteca C
Documentacion en lnea
Asignacion de memoria
Funciones de caracteres
Cadenas de caracteres
Entrada/salida con formato
Entrada/salida con formato a fichero
Entrada/salida con formato a memoria
Entrada/salida sin formato
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
208 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
209 / 218
Devuelven en n
umero de bytes que se han transferido
para cerrar el fichero
int close(int fd);
Sistemas Operativos
El Lenguaje de programaci
on C
210 / 218
Biblioteca C
Biblioteca C
Documentacion en lnea
Asignacion de memoria
Funciones de caracteres
Cadenas de caracteres
Entrada/salida con formato
Entrada/salida con formato a fichero
Entrada/salida con formato a memoria
Entrada/salida sin formato
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
211 / 218
Ejercicios
Sistemas Operativos
El Lenguaje de programaci
on C
212 / 218
Introduccion
Tipos, operadores y expresiones
Control de flujo
Funciones y estructura de un programa
Arrays y punteros
Estructuras
Biblioteca C
Herramientas
Sistemas Operativos
El Lenguaje de programaci
on C
213 / 218
Herramientas
Valgrind
Sistemas Operativos
El Lenguaje de programaci
on C
214 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
215 / 218
// aqu
hay un acceso no valido!
for(i=0;i<10;i++) printf("%d",v[i]);
// free(v);
// no se libera memoria!!!
Sistemas Operativos
El Lenguaje de programaci
on C
216 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
217 / 218
Sistemas Operativos
El Lenguaje de programaci
on C
218 / 218