Sie sind auf Seite 1von 19

Introduccin a la

programacin en C
Sistemas Operativos :: UTN FRBA

introC

http://faq.utn.so/

2C2015

Qu es un programa en C?
nica funcin main que recibe una
lnea de comandos y devuelve un
entero

Funcin es un conjunto de
sentencias ordenadas
Imperativo, procedural, tipado
estatico, tipado debil

Tipo qu?!
Imperativo y Procedural: Cmo? no Qu?
Tipado esttico: Compilador ejerce reglas
Tipado dbil: un cacho de memoria

Tipos de datos
short
(2b) Existen tipos de datos
int
(2/4/8b)
de tamao fijo
long
(4b)
(u_int32)
long long(8b)
Puede ser unsigned
char
(1b)
o signed
float
(4b)
double
(8b)
structs
punteros (int)

Estructuras
typedef

struct persona{
char* Nombre
int
DNI
t_est Estado
} t_persona

Primer ejemplo en C
1 int main(void) {
2 int a = 1; short b = 2; t_persona c;
3 if (a == b) {
4
c.dni = a + b;
5
printf(a y b son iguales. a+b=%d\n", c.
6 dni);
7 } else{
printf(a es distinto (!=) de b\n);
8
9 }
0 return 0;

Operadores & y *
1 int main(void) {
2 int a = 1;
3 char b = L;
4 int *c;
Puntero a un entero
5
6 c = &a;
c y a referencian la misma variable
7 a = a+1;
8 printf("La variable 'a' vale: %d y la variable 'c
lo mismo: %d y la variable b: %c\n", a, *c, b);
9}

Punteros
Proceso Mario

int* b =
malloc( 50 );
short a = 39;
a

39

B0CACACA

B0CACACA
???????????????????
???????????????????
???????????????????

Cdigo
(ejecucin)
Stack

Heap
(memoria
dinmica)

Operadores & y * en memoria


Proceso Mario

Cdigo
int main(void) {
int a = 1;
char b = L;
int *c;
c = &a;
a = a+1;
printf("...
}

Stack
B0CACACA

1
2

B0CACACC

B0CACACA

+1

Arrays estaticos
1 int main(void) {
2 char numeros[20];
3 int i, c = 5;
4 for(i=0; i<20; i++) {
numeros[i] = c;
5
c++;
6
7 }
8 printf("El tamao de numeros es: %lu\n",
sizeof(numeros));
9
0}

Memoria dinmica
1 int main(void) {
2 t_persona* jose;
3
4 jose = malloc( sizeof(t_persona));
5 if( !jose )
printf("Fall el malloc");
6
7 jose->dni = 36725812;
8 free( jose );
9}

Memoria dinmica en memoria


Proceso Mario Verde

Heap

Cdigo
t_persona*
jose;
jose = malloc
(...);
jose->dni =
36725812;

B00B1E55

FEOFE45
36725812
3

FE05FE45

Jos
Stack

B0CACACA
jose

B00B1E55

Arrays dinmicos

typedef struct{
char* nombre
int
dni
t_est estado
}t_persona

1 int main(void) {
2 t_persona* facultad;
3 int i;
4 facultad = malloc( 50*sizeof(t_persona));
5 for(i=0; i<70; i++) {
6
(*(facultad+i)).dni = 50;
7
(facultad+i)->dni = 50;
facultad[i].dni
= 50;
8
9 }
0}

Strings un array especial


1 int main(void) {
2 char* nombre;
3
4 nombre = strdup("Maria");
5 nombre[4] = 'o';
6
7 printf ("El valor de nombre es %s y su
8 longitud: %lu\n", nombre, strlen(nombre));
9 free( nombre );
0}

Strings en memoria
Proceso Koopa

Heap

Cdigo
B00B1E55

Mario\0

char* nombre;
nombre =
strdup("Maria")
nombre[4]='o';
Stack
nombre

B00B1E55

Funciones
1
2
3
4
5
6
7
8
9
0

int elevarAlCuadrado (int);


int main(void) {
int aCuadrado, a = 2;
aCuadrado = elevarAlCuadrado(a);
printf("el cuadrado es: %d\n", aCuadrado
);
}
int elevarAlCuadrado (int x) {
return x * x;

Pasar como referencia


1
2
3
4
5
6
7
8
9
0

void elevarAlCuadrado (int*);


int main(void) {
int a = 2;
elevarAlCuadrado(&a);
printf("el cuadrado es: %d\n", a);
}
void elevarAlCuadrado (int *x) {
*x = *x * *x;
}

Nada de lo que vimos anda


#include <stdio.h>

1
2
3
4
5
6
7
8

#include <stdlib.h>
#include <string.h>
int main(void) {
char* nombre;
nombre = strdup("Maria");
nombre[4] = 'o';
printf ("El valor de nombre es %s y su
longitud: %lu\n", nombre, strlen(nombre));
free( nombre );
}

Biblioteca estandar
<assert.h>
Contiene la macro assert (asercin), utilizada para detectar errores lgicos y otros tipos de
fallos en la depuracin de un programa.
<complex.h> Conjunto de funciones para manipular nmeros complejos (nuevo en C99).
<ctype.h>
Contiene funciones para clasificar caracteres segn sus tipos o para convertir entre maysculas y
minsculas independientemente del conjunto de caracteres (tpicamente ASCII o alguna de sus
extensiones).
<errno.h>
Para testar los cdigos de error devueltos por las funciones de biblioteca.
<fenv.h>
Para controlar entornos en coma flotante (nuevo en C99).
<float.h>
Contiene la definicin de constantes que especifican ciertas propiedades de la biblioteca de coma flotante,
como la diferencia mnima entre dos nmeros en coma flotante (_EPSOLON), el nmero mximo de dgitos
de precisin (_DIG), o el rango de valores que se pueden representar (_MIN, _MAX).
<inttypes.h>
Para operaciones de conversin con precisin entre tipos enteros (nuevo en C99).
<iso646.h>
Para utilizar los conjuntos de caracteres ISO 646 (nuevo en NA1).
<limits.h>
Contiene la definicin de constantes que especifican ciertas propiedades de los tipos enteros, como rango de valores que se
pueden representar (_MIN, _MAX).
<locale.h>
Para la funcin setlocale() y las constantes relacionadas. Se utiliza para seleccionar el entorno local apropiado
(configuracin regional).
<math.h>
Contiene las funciones matemticas comunes.
<setjmp.h>
Declara las macros setjmp y longjmp para proporcionar saltos de flujo de control de programa no locales.
<signal.h>
Para controlar algunas situaciones excepcionales como la divisin por cero.
<stdarg.h>
posibilita el acceso a una cantidad variable de argumentos pasados a una funcin.
<stdbool.h>
Para el tipo booleano (nuevo en C99).
<stdint.h>
Para definir varios tipos enteros (nuevo en C99).
<stddef.h>
Para definir varios tipos de macros de utilidad.
<stdio.h>
Proporciona el ncleo de las capacidades de entrada/salida del lenguaje C (incluye la venerable funcin printf).
<stdlib.h>
Para realizar ciertas operaciones como conversin de tipos, generacin de nmeros pseudo-aleatorios, gestin de
memoria dinmica, control de procesos, funciones de entorno, de sealizacin (??), de ordenacin y bsqueda.
<string.h>
Para manipulacin de cadenas de caracteres.
<tgmath.h>
Contiene funcionalidades matemticas de tipo genrico (type-generic) (nuevo en C99).
<time.h>
Para tratamiento y conversin entre formatos de fecha y hora.

http://es.wikipedia.org/wiki/Biblioteca_est%C3%A1ndar_de_C

Das könnte Ihnen auch gefallen