Академический Документы
Профессиональный Документы
Культура Документы
Declaraciones
Waldo E. Valenzuela P.
Declaracin bsica.
Tipo lista_de_nombres.
Ejemplos:
int i; char letra1, letra2, letra3; unsigned short direccion;
waldovalenzuela@udec.cl
Nombres
Se pueden incluir maysculas, minsculas, nmeros, _
No pueden comenzar con un digito.
Inicializacin de variables
Asignacin de valor inicial.
int I = 15; char letra1 = A, letra2, letra3; unsigned short direccion = 0x3F65; unsigned numero = 034;
Longitud ilimitada.
Estndar permite ignorar caracteres > 31
Inicializacin de variables
Un byte Dir. 0 Dir. 1 Dir. 2 15230
Variables en memoria
I: entero (4 bytes)
Valor inicial: 00000015
Un byte
Dir. 23
6958
numero
00 00 00 15 A ?? ?? 3F 65 00 00 00 034 Memoria6
(2n bytes)
Declaracin de Vectores
Vectores unidimensionales.
int vector[20]; Vector de 20 elementos (vector[0] a vector[19])
Numeracin de vectores siempre comienza en 0.
typedef
Mecanismo que permite definir nuevos nombres para tipos de datos.
typedef ushort unsigned short; ushort corto, mascorto;
Simplifica el cdigo.
Facilita los cambios de tipos de datos.
Alcances en el cdigo
int a; { int f; { int f, g, i; } { int i; } }
9 2011 Waldo Valenzuela
Alcances de bloques
Bloque: secuencia de cdigo delimitada por llaves { }.
Variable definida al comienzo de un bloque es visible en todo el bloque. Bloques pueden ser anidados. Variable declarada en un bloque interno domina sobre la variable del mismo nombre en el bloque externo.
Alcance de archivo
Identificadores declarados fuera de todo bloque son visibles en todo el archivo
Variables globales Las dos primeras lneas del ejemplo
11
12
Ejemplo de declaraciones
#include <stdio.h> int main(void) { int entero = 100; float flotante = 331.79; double doble = 8.44e+11; char caracter = W; _Bool verdad = 0; printf(entero = %d\nflotante = %f\ndoble = %lf\ncaracter = %c\nverdad = %i\n, entero, flotante, doble, caracter, verdad); }
Resultado de la ejecucin
entero = 100 flotante = 331.790009 doble = 844000000000.000000 caracter = W verdad = 0
Ntese que los nmeros de punto flotante se imprimen con 6 decimales Error en flotante?
Representacin interna genera un error
13
14
C One Liners
Una sola lnea de texto se introduce a la lnea de comandos o shell del sistema operativo para realizar alguna funcin en una sola lnea de entrada. Esto puede ser:
Una expresin escrita en lenguaje de comandos La invocacin de un interprete, junto con la fuente del programa para que este lo ejecute La invocacin del compilador para que este compile y ejecute el programa compilado
C One Liners
Qu hace el siguiente programa de una lnea?
int i;main(){for(;i["] < i;++i){-i;}"];read('-'-'-',i+++"hello, world!\n",'/'/'/'));}read(j,i,p){wri te(j/p+p,i---j,i/i);} Imprime hello, world!
15 2011 Waldo Valenzuela 16
Algunos lenguajes de programacin dinmicos como AWK, sed, y Perl tradicionalmente han sido expertos expresiones mediante One-liners.
2011 Waldo Valenzuela
C One Liners
Qu hace el siguiente programa de una lnea?
#define P(X)j=write(1,X,1) #define C 39 int M[5000]={2},*u=M,N[5000],R=22,a[4],l[]={0,-1,C-1,1},m[]={1,-C,1,C},*b=N,*d=N,c,e,f,g,i,j,k,s;main(){for(M[i=C*R1]=24;f|d>=b;){c=M[g=i];i=e;for(s=f=0;s<4;s++)if((k=m[s]+g)>= 0&&k<C*R&&l[s]!=k%C&&(!M[k]||!j&&c>=16!=M[k]>=16))a[f++]=s;if (f){f=M[e=m[s=a[rand()/(1+2147483647/f)]]+g];j=j<f?f:j;f+=c&16*!j;M[g]=c|1<<s;M[*d++=e]=f|1<<(s+2)%4;}else e=d>b++?b[1]:e;}P(" ");for(s=C;--s;P("_"))P(" ");for(;P("\n"),R-;P("|"))for(e=C;e--;P("_ "+(*u++/8)%2))P("| "+(*u/4)%2);}
C One Liners
17
18