Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Todas las lneas que comienzan con el smbolo # indican una directiva del
precompilador. Antes de realizar la compilacin en C se llama a un precompilador
cuya misin es procesar el texto y realizar ciertas sustituciones textuales. Hemos
visto que la directiva #include incluye el texto contenido en un fichero en el fuente
que estamos compilando. De forma parecida #define nombre texto, sustituye todas
las apariciones de nombre por texto. As, en el fuente, la palabra VALOR se
sustituye por el nmero 5.
El valor que debe devolver una funcin se indica con la palabra return.
La evaluacin de la expresin debe dar una valor del mismo tipo de dato que el
que se ha definido como resultado. La declaracin de una variable puede incluir
una inicializacin en la misma declaracin.
Se debe tener muy en cuenta que en C todos los argumentos son pasados 'por
valor'. No existe el concepto de paso de parmetros 'por variable' o 'por
referencia'. Veamos un ejemplo:
int incr ( int v ) { return v + 1; }
main()
{
int a, b;
b = 3;
a = incr(b);
/* a = 4 mientras que b = 3. No ha cambiado despus de la llamada. */
}
En el ejemplo anterior el valor del parmetro de la funcin incr, aunque se
modifique dentro de la funcin, no cambia el valor de la variable b de la funcin
main. Todo el texto comprendido entre los caracteres /* y */ son comentarios al
programa y son ignorados por el compilador. En un fuente C los comentarios no se
pueden anidar.
ct 3 : Reconocimiento Unidad I
ara con un nombre, precedido del tipo de valor que retorna y una lista de argumentos encerrados entre parntesis. El anterior con
Su respuesta :
Funcin
Respuesta correcta
ct 3 : Reconocimiento Unidad I
ct 3 : Reconocimiento Unidad I
Su respuesta :
/* y */, //
Correcta
Control de flujo
Sentencia if
La sentencia de control bsica es if (<e>) then <s> else <t>. En ella se evala una
expresin condicional y si se cumple, se ejecuta la sentencia s; si no, se ejecuta la
sentencia t. La segunda parte de la condicin, else <t>, es opcional.
int cero ( double a )
{
if ( a == 0.0 )
return (TRUE);
else
return (FALSE);
}
En el caso que <e> no sea una expresin condicional y sea aritmtica, se
considera falso si vale 0; y si no, verdadero.
Hay casos en que se evala una sola condicin y otros en que se deben evaluar
mltiples condiciones.
Setencia switch
Se puede programar con un grupo de sentencias if then else anidadas, aunque
ello puede ser engorroso y de complicada lectura. Para evitarlo nos puede ayudar
la sentencia switch.
Su utilizacin es:
switch (valor)
return r;
}
ct 3 : Reconocimiento Unidad I
Su respuesta :
El numero es par
Respuesta correcta
ct 3 : Reconocimiento Unidad I
En el anterior programa cuando no encuentra el valor de igualdad entonces se ejecutan las instrucciones
asociadas a ?
Su respuesta :
default
Respuesta correcta
ct 3 : Reconocimiento Unidad I
void main()
clrscr();
// declaracion variables
int x=1;
// instruccion while
while(x<=10)
{ gotoxy(10, x+3); printf("%d PATO",x); x++; };
getchar();
Su respuesta :
10 veces
Correcta
Recursividad
Una funcin recursiva no necesita llamarse a s misma de manera directa. En su lugar, puede
hacerlo de manera indirecta como en el siguiente ejemplo:
a (formal parameters) b (formal parameters)
{{
..
b (arguments); a (arguments);
..
} /*fin de a*/ } /*fin de b*/
En este ejemplo la funcin a llama a b, la cual puede a su vez llamar a a, que puede llamar de
nuevo a b. As, ambas funciones a y b, son recursivas, dado que se llaman a s mismas de manera
indirecta. Sin embargo, el que lo sean no es obvio a partir del examen del cuerpo de una de las
rutinas en forma individual. La rutina a, parece llamar a otra rutina b y es imposible determinar que
se puede llamar as misma de manera indirecta al examinar slo a a.
Pueden incluirse mas de dos rutinas en una cadena recursiva. As, una rutina a puede llamar a b,
que llama a c, ..., que llama a z, que llama a a. Cada rutina de la cadena puede potencialmente
llamarse a s misma y, por lo tanto es recursiva. Por supuesto, el programador debe asegurarse de
que un programa de este tipo no genere una secuencia infinita de llamadas recursivas.
Definicin recursiva de expresiones algebraicas:
Como ejemplo de cadena recursiva consideremos el siguiente grupo de definiciones:
a. una expresin es un trmino seguido por un signo mas seguido por un trmino, o un
trmino solo
b. un trmino es un factor seguido por un asterisco seguido por un factor, o un factor solo.
Un factor es una letra o una expresin encerrada entre parntesis.
A continuacin se codificar una funcin para un programa que lea e imprima una cadena de
caracteres y luego imprime "valida" si la expresin lo es y "no valida" de no serlo. Se usan tres
funciones para reconocer expresiones, trminos y factores, respectivamente. Aqu se presenta una
funcin auxiliar getsymb que opera con tres parmetros: str, length y ppos. Str contiene la entrada
de la cadena de cadena de caracteres; length representa el nmero de caracteres
en str. Ppos apunta a un puntero pos cuyo valor es la posicin str de la que obtuvimos un caracter
la ltima vez. Si pos < length, getsymb regresa el caracter cadena str [pos] e incrementa posen 1.
Si pos > = length, getsymb regresa un espacio en blanco.
getsymb (str, length, ppos)
char str[];
int length, *ppos;
{ char c;
if (*ppos < length)
c = str [*ppos];
else
c=;
(*ppos) ++;
return ( c );
} /* fin de getsymb*/
Para definir una funcin en forma recursiva es necesario especificar:
ct 3 : Reconocimiento Unidad I
Su respuesta :
cuando una funcion se llama a si misma
Respuesta correcta
ct 3 : Reconocimiento Unidad I
Su respuesta :
24
Correcta
Punteros
Cada variable de un programa tiene una direccin en la memoria del ordenador. Esta direccin
indica la posicin del primer byte que la variable ocupa. En el caso de una estructura es la
direccin del primer campo. En los ordenadores actuales la direccin de inicio se considera la
direccin baja de memoria. Como en cualquier caso las variables son almacenadas
ordenadamente y de una forma predecible, es posible acceder a estas y manipularlas mediante
otra variables que contenga su direccin. A este tipo de variables se les denomina punteros.
Los punteros C son el tipo ms potente y seguramente la otra clave del xito del lenguaje. La
primera ventaja que obtenemos de los punteros es la posibilidad que nos dan de poder tratar con
datos de un tamao arbitrario sin tener que moverlos por la memoria. Esto puede ahorrar un tiempo
de computacin muy importante en algunos tipos de aplicaciones. Tambin permiten que una
funcin reciba y cambie el valor de una variable. Recordemos que todas las funciones C
nicamente aceptan parmetros por valor. Mediante un puntero a una variable podemos
modificarla indirectamente desde una funcin cualquiera.
Un puntero se declara de la forma: tipo *nombre;
float *pf;
PLANETA *pp;
char *pc;
Para manipular un puntero, como variable que es, se utiliza su nombre; pero para acceder a la
variable a la que apunta se le debe preceder de *. A este proceso se le llama indireccin.
Accedemos indirectamente a una variable. Para trabajar con punteros existe un operador, &, que
indica 'direccin de'. Con l se puede asignar a un puntero la direccin de una variable, o pasar
como parmetro a una funcin.
void prueba_puntero ( void )
{ long edad;
long *p;
p = &edad;
edad = 50;
printf("La edad es %ld\n", edad );
*p = *p / 2;
printf("La edad es %ld\n", edad );
}
void imprimir_string ( char string[] )
{ char *p;
for ( p = string; *p != '\0'; p++ )
imprimir_char(*p);
}
ct 3 : Reconocimiento Unidad I
Su respuesta :
(&)operador de direccion
Respuesta correcta
ct 3 : Reconocimiento Unidad I
int X =15;int*ptrX; ptrX =&X;
ptrX es:
Su respuesta :
un puntero a X
Correcta