






























Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Universidad Nacional Experimental del Táchira. Apuntes de Ingeniería Infórmatica. El lenguaje C es uno de los más rápidos y potentes que hay hoy en día el sistema operativo Linux está desarrollado en C en su práctica totalidad.
Tipo: Apuntes
1 / 38
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!































Programación en Lenguaje C 39
Veamos la operación paso a paso. Esta operación equivale a hacer dos desplazamientos a la derecha:
150 -> 10010110 Número original
75 -> 01001011 Primer desplazamiento. Entra un cero por la izquierda,
El cero de la derecha se pierde y los demás se mueven a la derecha.
37 -> 00100101 Segundo desplazamiento.
NOTA: Un desplazamiento a la derecha equivale a dividir por dos. Esto es muy interesante porque el desplazamiento es más rápido que la división. Si queremos optimizar un programa esta es una buena idea. Sólo sirve para dividir entre dos. Si hacemos dos desplazamientos sería dividir por dos dos veces, no por tres.
Operador << (Desplazamiento a la izquierda)
Funciona igual que la anterior pero los bits se desplazan a la izquierda. Esta operación equivale a multiplicar por 2.
Operador Sizeof
Este es un operador muy útil. Nos permite conocer el tamaño en bytes de una variable. De esta manera no tenemos que preocuparnos en recordar o calcular cuanto ocupa. Además el tamaño de una variable cambia de un compilador a otro, es la mejor forma de asegurarse. Se usa poniendo el nombre de la variable después de sizeof y separado de un espacio:
#include <stdio.h>
int main()
{
int variable;
printf( "Tamaño de la variable: %i\n", sizeof variable );
}
También se puede usar con los especificadotes de tipos de datos (char, int, float, double...). Pero en éstos se usa de manera diferente, hay que poner el especificador entre paréntesis:
Universidad Nacional Experimental del Táchira 40
#include <stdio.h>
int main()
{printf( "Las variables tipo int ocupan: %i\n", sizeof(int) );
}
Orden de evaluación de Operadores
Debemos tener cuidado al usar operadores pues a veces podemos tener resultados no esperados si no tenemos en cuenta su orden de evaluación. Vamos a ver la lista de precedencias, cuanto más arriba se evalúa antes:
Precedencia
() [] ->. ! ~ ++ -- (molde) * & sizeof (El * es el de puntero)
<< >> < <= > >=
== != &
^ | &&
|| ?: = += -= *= /=
,
Por ejemplo imaginemos que tenemos la siguiente operación:
10 * 2 + 5
Universidad Nacional Experimental del Táchira 42
}
Este ejemplo en unos compiladores dará a = 6, b = 5 y en otros a = 6 y b = 6.
Para asegurarse lo mejor sería separar la línea donde se usa el ++ y el =:
#include <stdio.h>
int main()
{
int a, b;
a = 5;
a++;
b = a;
printf( "a = %i, b = %i\n", a, b );
}
Ejercicios
Ejercicio 1: En este programa hay un fallo muy habitual en programación.
#include <stdio.h>
int main()
{
int a, c;
a = 5;
c += a +5;
}
Programación en Lenguaje C 43
Solución :
Cuando calculamos el valor de 'c' sumamos a+5 ( =10 ) al valor de 'c'. Pero resulta que 'c' no tenía ningún valor indicado por nosotros. Estamos usando la variable 'c' sin haberle dado valor. En algunos compiladores el resultado será inesperado. Este es un fallo bastante habitual, usar variables a las que no hemos dado ningún valor.
Ejercicio 2: ¿Cual será el resultado del siguiente programa?
#include <conio.h>
#include <stdio.h>
int main()
{
int a, b, c;
a = 5;
b = ++a;
c = ( a + 5 * 2 ) * ( b + 6 / 2 ) + ( a * 2 );
printf( "%i, %i, %i", a, b, c );
}
Solución :
El resultado es 156. En la primera a vale 5. Pero en la segunda se ejecuta b = ++a = ++5 = 6. Tenemos a = b = 6.
Ejercicio 3: Escribir un programa que compruebe si un número es par o impar.
Solución:
#include <stdio.h>
int main() {
char palabra[100];
Programación en Lenguaje C 45
return 0;
}
Primero vamos a ver una nota de estética, para hacer los programas un poco más elegantes. Parece una tontería, pero los pequeños detalles hacen que un programa gane mucho. El scanf no mueve el cursor de su posición actual, así que en nuestro ejemplo queda:
Introduce un número _ /* La barra horizontal indica dónde esta el cursor */
Esto es porque en el printf no hemos puesto al final el símbolo de salto de línea '\n'. Además hemos dejado un espacio al final deIntroduce un número: para que así cuando tecleemos el número no salga pegado al mensaje. Si no hubiésemos dejado el espacio quedaría así al introducir el número 120 (es un ejemplo):
Introduce un número
Veamos cómo funciona el scanf. Primero nos fijamos que hay una cadena entre comillas. Esta es similar a la de printf, nos sirve para indicarle al compilador qué tipo de datos estamos pidiendo. Como en este caso es un integer usamos %i. Después de la coma tenemos la variable donde almacenamos el dato, en este caso 'num'.
Fíjese que en el scanf la variable 'num' lleva delante el símbolo & , este es muy importante, sirve para indicar al compilador cual es la dirección (o posición en la memoria) de la variable.
Podemos preguntar por más de una variable a la vez en un sólo scanf, hay que poner un %i por cada variable:
#include <stdio.h>
int main()
{
int a, b, c;
printf( "Introduce tres números: " );
scanf( "%i %i %i", &a, &b, &c );
printf( "Has tecleado los números %i %i %i\n", a, b, c );
Universidad Nacional Experimental del Táchira 46
return 0;
}
De esta forma cuando el usuario ejecuta el programa debe introducir los tres datos separados por un espacio.
También podemos pedir en un mismo scanf variables de distinto tipo:
#include <stdio.h>
int main()
{
int a;
float b;
printf( "Introduce dos números: " );
scanf( "%i %f", &a, &b );
printf( "Has tecleado los números %i %f\n", a, b );
return 0;
}
A cada modificador (%i, %f) le debe corresponder una variable de su mismo tipo. Es decir, al poner un %i el compilador espera que su variable correspondiente sea de tipo int. Si ponemos %f espera una variable tipo float.
Getch y getche
Si lo que queremos es que el usuario introduzca un caracter por el teclado usamos las funciones getch y getche. Estas esperan a que el usuario introduzca un carácter por el teclado. La diferencia entre getche y getch es que la primera saca por pantalla la tecla que hemos pulsado y la segunda no. Ejemplos:
#include <stdio.h>
int main()
Universidad Nacional Experimental del Táchira 48
Como vemos la única diferencia es que en el primer ejemplo se muestra en pantalla lo que escribimos y en el segundo no.
o For
o While
o Do While
o If
o If else
o If else if
o? (el otro if-else)
o Switch
El bucle For
El formato del bucle for es el siguiente:
for( dar valores iniciales ; condiciones ; incrementos )
{
conjunto de intrucciones a ejecutar en el bucle
}
Vamos a verlo con ejemplo:
...
for ( i=0 ; i<100 ; i++ )
Programación en Lenguaje C 49
En este caso asignamos un valor inicial a la variablei. Ese valor escero. Esa es la parte dedar valores iniciales. Luego tenemosi<100. Esa es la partecondiciones. En ella ponemos la condición es que i sea menor que 100, de modo que el bucle se ejecutará mientras i sea menor que 100. Es decir, mientras se cumpla la condición. Luego tenemos la parte deincrementos, donde indicamos cuánto se incrementa la variable.
Como vemos, el for va delante del grupo de instrucciones a ejecutar, de manera que si la condición es falsa, esas instrucciones no se ejecutan ni una sola vez.
Cuidado: No se debe poner un ";" justo después de la sentencia for, pues entonces sería un bucle vacío y las instrucciones siguientes sólo se ejecutarían una vez. Veámoslo con un ejemplo:
#include <stdio.h>
int main()
{
int i;
for ( i=0 ; i<100 ; i++ ); / Cuidado con este punto y coma /
{
printf( "Hola\n" );
}
}
Este programa sólo escribirá en pantalla
Hola
Una sola vez.
También puede suceder que se quiera ejecutar un cierto número de veces una sola instrucción (como sucede en nuestro ejemplo). Entonces no necesitas las llaves "{}":
#include <stdio.h>
int main()
Programación en Lenguaje C 51
Como vemos en el ejemplo tenemos más de una variable en la sección de inicialización y en la de incrementos. También podíamos haber puesto más de una condición. Los elementos de cada sección se separan por comas. Cada sección se separa por punto y coma.
While
El formato del bucle while es siguiente:
while ( condición )
{
bloque de instrucciones a ejecutar
}
While quiere decirmientras. Aquí se ejecuta el bloque de instrucciones mientras se cumpla la condición impuesta en while.
Vamos a ver un ejemplo:
#include <stdio.h>
int main()
{
int contador = 0;
while ( contador<100 )
{
contador++;
printf( "Ya voy por el %i, pararé enseguida.\n", contador );
}
}
Este programa imprime en pantalla los valores del 1 al 100. Cuando i=100 ya no se cumple la condición. Una cosa importante, si hubiésemos cambiado el orden de las instrucciones a ejecutar:
...
Universidad Nacional Experimental del Táchira 52
printf( "Ya voy por el %i, pararé enseguida.\n", contador );
contador++;
...
En esta ocasión se imprimen los valores del 0 al 99. Cuidado con esto, que a veces produce errores difíciles de encontrar.
Do While
El formato del bucle do-while es:
do
{
instrucciones a ejecutar
} while ( condición );
La diferencia entrewhile ydo-while es que en este último, la condición va después del conjunto de instrucciones a ejecutar. De esta forma, esas instrucciones se ejecutan al menos una vez.
Su uso es similar al de while.
Sentencias de condición
If
La palabraif significasi (condicional). Su formato es el siguiente:
if ( condición )
{
Instrucciones a ejecutar
}
Cuando se cumple la condición entre paréntesis se ejecuta el bloque inmediatamente siguiente al if (bloqueinstrucciones a ejecutar).
Universidad Nacional Experimental del Táchira 54
En el if si no se cumplía la condición no se ejecutaba el bloque siguiente y el programa seguía su curso normal. Con el if else tenemos un bloque adicional que sólo se ejecuta si no se cumple la condición. Veamos un ejemplo:
#include <stdio.h>
int main()
{
int a;
printf( "Introduce un número " );
scanf( "%i", &a );
if ( a==8 )
{
printf ( "El número introducido era un ocho.\n" );
}
else
{
printf ( "Pero si no has escrito un ocho!!!"\n" );
}
}
Al ejecutar el programa si introducimos un 8 se ejecuta el bloque siguiente al if y se muestra el mensaje:
El número introducido era un ocho.
Si escribimos cualquier otro número se ejecuta el bloque siguiente al else mostrándose el mensaje:
Pero si no has escrito un ocho!!!
Programación en Lenguaje C 55
If else if
Se pueden poner if else anidados si se desea:
#include <stdio.h>
int main()
{
int a;
printf( "Introduce un número " );
scanf( "%i", &a );
if ( a<10 )
{
printf ( "El número introducido era menor de 10.\n" );
}
else if ( a>10 && a<100 )
{
printf ( "El número está entre 10 y 100"\n" );
}
else if ( a>100 )
{
printf( "El número es mayor que 100\n" );
}
printf( "Fin del programa\n" );
}
.
Y así todos los if else que queramos. Si la condición del primer if es verdadera se muestra el mensajeEl número introducido era menor de 10 y se saltan todos los
Programación en Lenguaje C 57
Si el valor que tecleamos al ejecutar es menor que 10 entonces b=1, en cambio si tecleamos un número mayor que 10 'b' será igual a 2. Ahora vamos a reescribir el programa usando '?':
#include <stdio.h>
int main()
{
int a;
int b;
printf( "Introduce un número " );
scanf( "%i", &a );
b = ( a<10 )? 1 : 4 ;
printf ( "La variable 'b' toma el valor: %i\n", b );
}
¿Qué es lo que sucede ahora? Se evalúa la condición a<10. Si es verdadera (a menor que 10) se ejecuta la instrucción 1, es decir, que b toma el valor '1'. Si es falsa se ejecuta la instrucción 2, es decir, b toma el valor '4'.
Switch
El formato de la sentencia switch es:
switch ( variable )
{
case opción 1 :
código a ejecutar si la variable tiene el
valor de la opción 1
break;
default:
código que se ejecuta si la variable tiene
Universidad Nacional Experimental del Táchira 58
un valor distinto a los anteriores
break;
}
Vamos a ver cómo funciona. La sentencia switch sirve par elegir una opción entre varias disponibles. Aquí no tenemos una condición que se debe cumplir sino el valor de una variable. Dependiendo del valor se cumplirá un caso u otro.
Vamos a ver un ejemplo de múltiples casos con if-else y luego con switch:
#include <stdio.h>
int main()
{
int num;
printf( "Introduce un número " );
scanf( "%i", &num );
if ( num==1 )
printf ( "Es un 1\n" );
else if ( num==2 )
printf ( "Es un 2\n" );
else if ( num==3 )
printf ( "Es un 3\n" );
else
printf ( "No era ni 1, ni 2, ni 3\n" );
}
Ahora con switch:
#include <stdio.h>
int main()