Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


El Lenguaje C - Apuntes - Programación - Parte2, Apuntes de Ingeniería Infórmatica

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

2012/2013

Subido el 16/05/2013

Mauro_88
Mauro_88 🇻🇪

4.5

(213)

619 documentos

1 / 38

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
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:
docsity.com
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26

Vista previa parcial del texto

¡Descarga El Lenguaje C - Apuntes - Programación - Parte2 y más Apuntes en PDF de Ingeniería Infórmatica solo en Docsity!

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)

  • / % (El * de aquí es el de multiplicación)

<< >> < <= > >=

== != &

^ | &&

|| ?: = += -= *= /=

,

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.

Sentencias de control de flujo

  • Bucles

o For

o While

o Do While

  • Sentencias de condición

o If

o If else

o If else if

o? (el otro if-else)

o Switch

  • Notas sobre las condiciones
  • Ejercicios

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()