Programación en C

Lenguajes. Tipos datos. Secuencias escape. Operadores aritméticos, bits, asignación, relacionados, lógicos, paréntesis, estructuras, punteros. Bucles

  • Enviado por: Vicente
  • Idioma: castellano
  • País: España España
  • 9 páginas
publicidad

PROGRAMACIÓN EN C

TIPOS DE DATOS EN C

Nombre

Aplicación

Bits

Rango

unsigned char

Nº pequeños positivos, caracteres y bucles cortos

8

0 a 255

char

Nº pequeños, caracteres y bucles cortos

8

-128 a 127

signed char

Nº pequeños, caracteres y bucles cortos

8

-128 a 127

short int

Amplía el rango de los anteriores

8

-128 a 127

unsigned int

Nº positivos grandes y bucles largos

16

0 a 65535

int

Nº grandes y bucles largos

32

-32768 a 32767

signed int

Nº grandes y bucles largos

32

-32768 a 32767

unsigned long

Nº positivos grandes y bucles largos

32

0 a 4294967295

long

Nº grandes y bucles largos

32

-21474836 a 2147483647

float

Notación científica (7 dígitos precisión)

32

3.4e-38 a 3.4e+38

double

Notación científica (15 dígitos precisión)

64

1.7e-308 a 1.7e+308

long double

Notación científica (18 dígitos precisión)

80

3.4e-4932 a 1.1e+4932

SECUENCIAS DE ESCAPE

Secuencia

Función

\a

Aviso sonoro

\b

Backspace

\f

Paso de página

\n

Nueva línea

\r

Retorno de carro

\t

Tabulación horizontal

\v

Tabulación vertical

\\

\

\'

Comillas simples

\”

Comillas dobles

\?

Signo de interrogación

\0

Numero octal O

\xH

Número hexadecimal H

\XH

Número hexadecimal H

OPERADORES ARITMÉTICOS

Operador

Descripción

+

Suma

-

Resta

*

Multiplicación

/

División. Si los operadores son enteros, trunca el resultado

%

Resto. Devuelve el resto de la división entera

++A

Preincremento. Incrementa el valor de A

A++

Postincremento. Decrementa el valor de A.

--A

Predecimiento. Decrementa el valor de A

A--

Postdecremento. Evalúa el valor de A y a continuación lo decrementa

OPERADORES DE BITS

Destinados a trabajar directamente sobre los bits:

Operador

Descripción

&

AND binario. Devuelve 1 si los bits valen 1

|

OR binario. Devuelve 1 si alguno de los bits vale 1

^

EXOR binario. Devuelve 1 si hay un número impar de 1

"

NOT binario. Cambia 1 por 0 y viceversa

>>

Desplazamiento binario a la dcha. Desplaza los bits un lugar a la derecha

<<

Desplazamiento binario a la izda. Desplaza los bits un lugar a la izquierda

OPERADORES DE ASIGNACIÓN

Se utilizan para pasar resultados a variables

Operador

Descripción

=

Asignación (simple o múltiple)

*=

Multiplicación seguida de asignación

/=

División seguida de asignación

%=

Resto seguido de asignación

+=

Suma seguida de asignación

-=

Resta seguida de asignación

<<=

Desplazamiento binario a la dcha. seguido de asignación

>>=

Desplazamiento binario a la izda. seguido de asignación

$=

AND binario seguido de asignación

^=

EXOR binario seguido de asignación

|=

OR binario seguido de asignación

OPERADORES RELACIONADOS

Operador

Descripción

==

Igual

¡=

Distinto

>

Mayor

<

Menor

>=

Mayor o igual

<=

Menor o igual

OPERADORES LÓGICOS

Se encargan de realizar operaciones del tipo verdadero o falso. NO CONFUNDIR con los operadores de bits.

Operador

Descripción

&&

AND lógico

||

OR lógico

¡

NOT lógico

EL OPERADOR COMA

Se utiliza para separar elementos en una lista de argumentos a una función, o concatenar varias expresiones en una misma sentencia. No se usa mucho por que puede llegar a confundir.

OPERADORES DE PARÉNTESIS

Operador

Descripción

( )

Se utiliza para agrupar expresiones, indicar llamadas a función, o agrupar una lista de parámetros.

{ }

Se utiliza para indicar principio y final de una sentencia compuesta

[ ]

Se utiliza para encerrar los límites de una matriz

OPERADORES DE ESTRUCTURAS

Operador

Descripción

.

Se utiliza para acceder a miembros de estructuras y uniones

_>

Se utiliza para acceder a miembros de estructuras y uniones referenciadas como punteros

OPERADORES PUNTEROS

Operador

Descripción

*

Se utiliza para acceder a los elementos referenciados por los punteros

&

Se utiliza para obtener la dirección de la memoria del elemento al que se hace referencia

Signo

Descripción

,

Elemento separador

;

Fin de sentencia

:

Indicador de etiqueta

...

Nº de parámetros desconocido

*

Indicador de puntero

#

Directiva del procesador

EL OPERADOR SIZEOF

Se utiliza para conocer el tamaño en bytes de cierta variable o tipo de dato. La sintaxis es:

sizeof operando

sizeof(operando)

ENTRADA SALIDA POR CONSOLA

  • Funciones de salida sin formato:

    • putchar: Envía un carácter a la consola. Si tiene éxito devuelve ese mismo carácter, si no devuelve EOF.

    • puts: Envía una cadena a la salida estándar. Si tiene éxito devuelve un valor positivo, en caso contrario devuelve EOF.

  • Funciones de salida con formato:

    • printf: Envía ciertos elementos a la salida estándar, con formato. Puede aparecer simplemente la cadena o especificadores de formato:

      • int printf(const char *formato[,argumento,...];

      • printf(“%d”,Numero);

    • flags: Controlan el tipo de especificación a emplear en la escritura en pantalla, y para los nº indican si aparecerán los signos y de qué manera. Estos son:

Flag

Función

-

Justifica a la izquierda

+

Siempre aparece el signo

Espacio en blanco

Aparece sólo el signo -

    • Especificador de anchura: Controla la cantidad de espacios que debe ocupar el elemento en pantalla, de forma que si no tiene suficientes, rellena por espacios en blanco, y si sobran hace caso omiso de este especificador. Existen dos variantes:

Flag

Función

N

Cantidad de espacios (n) que debe ocupar

0n

Cantidad de espacios a ocupar, si no tiene suficiente rellena con 0's a la izquierda.

    • Especificador de precisión: Controla varios aspectos según el tipo de datos al que se aplique. Normalmente está relacionado con la cantidad de cifras decimales de un dato float. Estos son:

Flag

Función

Ninguno

Se utiliza la precisión por defecto

.0

En float no aparecen cifras decimales

.n

En float aparecen n cifras decimales redondeando si sobran. En el resto aparecen n caracteres eliminando los que sobran

    • Conversión de tipo:

Carácter

Entrada

Dirección

D

Entero decimal

(int*)

D

Entero decimal

(long*)

E, e

Número en coma flotante

(float*)

F

Número en coma flotante

(float*)

G, g

Número en coma flotante

(float*)

O

Entero octal

(int*)

O

Entero octal

(long*)

I

Entero decimal, octal o hexadecimal

(int*)

I

Entero decimal, octal o hexadecimal

(long*)

U

Entero decimal sin signo

(unsigned int*)

U

Entero decimal sin signo

(unsigned long*)

X

Entero hexadecimal

(int*)

X

Entero hexadecimal

(int*)

S

Cadena

(char*)

C

Carácter

(char*)

%

Carácter %

N

Puntero

(int*) Almacena el nº de caracteres leídos

P

Puntero hexadecimal

(far*) ó (near*)

  • Funciones de entrada sin formato:

    • getch: Lee un carácter directamente del teclado, sin mostrarlo en la pantalla. Devuelve dicho carácter. Sirve para almacenara por ejemplo una tecla pulsada.

      • #include <conio.h>

      • int getch(void);

    • getchar: Lee un carácter de teclado. Si tiene éxito devuelve dicho carácter, si no devuelve EOF. La diferencia con el anterior es que éste si que lo muestra en la pantalla.

      • #include <stdio.h>

      • int getchar(void);

    • getche: Lee un carácter de teclado y lo muestra en pantalla. Devuelve dicho carácter. Su funcionamiento es como el anterior.

      • #include <conio.h>

      • int getche(void);

    • gets: Lee una cadena de teclado, siendo el indicador de fin el retorno de carro. Coloca la cadena leída en *s.

      • #include <stdio.h>

      • char gets(chars);

    • kbhit: Comprueba si se ha pulsado alguna tecla. La cual será leída con alguna de las funciones anteriores. Si se puede leer alguna tecla devuelve un valor distinto de 0.

  • Funciones de entrada con formato: Controlan la entrada de datos en sentido opuesto al de las funciones de salida con formato.

    • scanf: Es la inversa de printf, pero donde va el argumento, ahora irá la dirección de la variable donde se va a almacenar lo leído del teclado.

      • #include <stdio.h>

      • int scanf(const char*formato[,dirección];

      • Si tiene éxito devuelve el nº de elementos leídos y almacenado, los cuales son guardados en la dirección especificada.

      • La cadena formato tiene una estructura similar a la utilizada en printf: comienza por % seguido de:

        • %[*][Anchura]tipo

      • Donde lo únicos elementos son % y el tipo.

      • Donde está * irá el elemento que será leído pero no asignado a ninguna dirección.

      • La anchura indica la cantidad de caracteres a ser leídos.

      • Los tipos de datos se encuentran en la tabla anterior Conversiones de tipo.

    • Modificaciones de la cadena formato: En las funciones de entrada con formato se pueden añadir ciertas modificaciones adicionales para controlar mejor la entrada.

      • También se puede utilizar la conversión de matriz de caracteres (%[W]c)

      • El juego de inspección se utiliza para especificar los únicos caracteres válidos de entrada. Sustituye al tipo %s. La sintaxis es:

Tipo

Función

%[Caracteres]

Sólo son válidas las entradas Caracteres

%[^Caracteres]

Sólo son inválidas las entradas Caracteres

%[Principio-Final]

Sólo son válidas las entradas de Principio a Final

  • Función gotoxy: Es una instrucción para controlar la posición de la escritura, ye que el lenguaje C permite como si dijéramos dividir la pantalla en celdas (quedando dividida en filas y columnas). La instrucción sería

    • gotoxy(x,y);

      • Siendo x e y las coordenadas.

FUNCIONES MATEMÁTICAS

Para usarlas es necesario incluir el fichero <math.h>.

No pueden ir sola, es decir, deben de haberse asignado antes o en una función printf

Función

Descripción

double acos(double arg);

Devuelve el arcocoseno del argumento

double asin(double arg);

Devuelve el arcoseno del argumento

double atan(double arg);

Devuelve el arcotangente del argumento

double atan2(double y, double x);

Devuelve el arcotangente del argumento

double cos(double arg);

Devuelve el coseno del argumento

double cosh(double arg);

Devuelve el coseno hiperbólico del argumento

double exp(double arg);

Devuelve el nº e elevado al argumento

double fabs(double num);

Devuelve el valor absoluto del argumento

double log(double num);

Devuelve el logaritmo neperiano del argumento

double log10(double num);

Devuelve el logaritmo en base 10 del argumento

double pow(double base, double exp);

Devuelve la base elevada el exponente

double sin(double arg);

Devuelve el seno del argumento

double sinh(double arg);

Devuelve el seno hiperbólico del argumento

double sqrt(double num);

Devuelve la raíz cuadrada del argumento

double tan(double arg);

Devuelve la tangente del argumento

double tanh(double arg);

Devuelve la tangente hiperbólica del argumento

FUNCIONES DE CARACTERES

Para trabajar con ellas se debe introducir la unidad necesaria ctype.h

#include <ctype.h>

Función

Descripción

int isalnum(int ch);

Devuelve 0 si el carácter no es alfanumérico

int isalpha(int ch);

Devuelve 0 si el carácter no es una letra

int isdigit(int ch);

Devuelve 0 si el carácter no es un nº

int isgraph(int ch)

Devuelve 0 si el carácter no es imprimible

int islower(int ch);

Devuelve 0 si el carácter no está en mayúsculas

int ispunct(int ch);

Devuelve 0 si el carácter no es de puntuación

int isspace(int ch);

Devuelve 0 si el carácter no es de espaciado

int issupper(int ch);

Devuelve 0 si el carácter esté en minúsculas

int isxdigit(int ch);

Devuelve 0 si el carácter no es un dígito hexadecimal

int tolower(int ch);

Convierte el carácter en minúsculas

int toupper(int ch);

Convierte el carácter en mayúsculas

ESTRUCTURA “IF”

  • Esta estructura se utiliza de la siguiente forma:

    • Si condición sentencia1; en caso contrario sentencia2.

    • if(condición) sentencia1; else sentencia 2.

  • También se pueden anidar (colocar una condición dentro de otra):

    • if(condición1) sentencia1; else if(condición2); sentencia2; else if(condición3) sentencia3...

  • También lo podemos hacer para que se tengan que cumplir dos condiciones a la vez para que realice la sentencia, lo que seria la función AND:

    • Si condición1 y condición2 sentencia1 en caso contrario sentencia2.

    • if((condición1)&&(condición2))sentencia1; else sentencia2.

  • Otra forma puede ser que se tenga que cumplir como mínimo una de las condiciones:

    • Si condición1 o condición2 sentencia1; en caso contrario sentencia2.

    • if((condición1)||(condición2))sentencia1; else sentencia2.

  • Por último veamos una negación de la anterior:

    • Si no condición entonces sentencia1; en caso contrario sentencia2.

    • if!(condición)sentencia1; else sentencia2.

ESTRUCTURA “SWITCH”

  • Se utiliza cuando se tiene muchas condiciones anidadas.

  • Su estructura normal es:

    • switch(variable)

{

case Valor1: sentencia1;

break;

case valor2: sentencia(s)2;

break;

...

case ValorN: sentencia(s)N;

break;

default: sentencia(s) finales(es);

}

  • Si no se cumpliera ninguno de los valores, entonces se realizaría la sentencia correspondiente al default.

  • El break es necesario para que realice la sentencia, si no pasaría a la siguiente.

EL “OPERADOR TERNARIO?”:

  • Se utiliza para sustituir expresiones como:

    • if(condición) sentencia1; else sentencia 2.

  • De la forma siguiente, con el único fin de conseguir un código más conciso.

    • (condición)? Sentencia1; sentencia2;

EL “BUCLE FOR”:

  • Se utiliza cuando necesitamos realizar una tarea un det. nº de veces:

  • Su estructura es de la siguiente forma:

    • Desde principio hasta condición de finalización repetir...

    • for(indice=ValorInicial;condición;incremento)sentencia;

      • Donde índice es la variable que va a ir tomando valores a partir del ValorInicial con un increnmento mientras la condición sea verdadera.

  • La parte a repetir puede estar formada por varias sentencias, lo que se pondría {...}.

  • También podemos realizar repeticiones desde el final hasta el principio, como una cuenta atrás:

    • for (indice=ValorFinal;índice>=ValorInicial;Indice--)

EL BUCLE “DO ... WHILE”

  • Ahora el nº de repeticiones no es fijo.

  • Su estructura:

    • Repetir acción mientras condición.

    • do sentencia while condición;

  • La última parte, es decir donde va el while se debe introducir una expresión booleana como en la estructura if.

EL BUCLE “WHILE”

  • La diferencia con el anterior es que ahora se realiza primero la comprobación y luego la acción que se ha de repetir.

  • Su estructura es:

    • Mientras condición repetir acción

    • while (condición) sentencia;

  • Se ve que se compruébala condición antes de la repetición y en caso de que no se cumpla la primera vez, no se ejecuta la sentencia.

BUCLES ANIDADOS:

  • Se utiliza para introducir un bucle dentro de otro.

    • for (indice=ValorInicial1;indice1<ValorFinal1;indice++)...

FUNCIONES

  • Se utilizan para simplificar los programas, agrupando tareas que se han de repetir varias veces en una sola función, ahorrando memoria.

  • Las funciones no devuelven ningún resultado y tienen la misma estructura que el programa principal (se pueden definir variable, constantes, etc..) y su forma sería:

    • TipoDevuelto NombreFunción(ListaParámetros)

{

//...sentencias en C

return Resultado;

}

      • Donde TipoDevuelto corresponde al tipo de datos que debe devolver la función si fuera necesario. NombreFunción es el identificador válido en C que hace referencia a la función y ListaParámetros corresponde ala información que se envía desde la llamada. Por último return devuelve el resultado.

  • El ejemplo más simple es:

    • void NombreFunción(void)

{

...

//sentencias en C que forman el cuerpo de la función

...

}

      • Donde void significa que no tiene que devolver ningún tipo de dato y que no necesita ningún parámetro.

  • En C se deben de citar las funciones antes de su utilización antes de su utilización (en este paso se debe de poner al final ; (punto y coma), esto es lo que se llama Prototipo.

  • Para que un programa que utilice funciones funcione correctamente se debe definir la función y por norma general se realizará al final del programa principal (declaración del cuerpo) esta parte se realiza sin ;(punto y coma).

PASO DE PARÁMETROS

  • El paso de parámetros se utiliza cuando en un mismo programa se quiere utilizar una misma función en dos situaciones diferentes, es decir que el proyecto final sea el mismo, pero con l salvedad de cambiar solo un matiz

    • Un ejemplo de esto sería una función que llamamos InicializarPantalla y lo que pretendemos hacer es que en cada parte de le programa tenga un color de fondo y de letras distinto.

  • El cambio que debemos introducir es, por ejemplo:

    • Void NombreFunción(TipoParámetro1 Nombreparámetro1, TipoParámetro2 NombreParámetro2,...)

      • Lo que se aprecia es que en la declaración del procedimiento se han colocado los parámetros que en cualquier caso podemos cambiar.