Actualizado el 20 de Mayo del 2018 (Publicado el 10 de Mayo del 2017)
769 visualizaciones desde el 10 de Mayo del 2017
54,5 KB
17 paginas
Creado hace 26a (03/12/1998)
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS
BREVE INTRODUCCIÓN AL LENGUAJE C
UNIVERSIDAD DE MURCIA
1998
ISO. Breve introducción al lenguaje C
EL LENGUAJE DE PROGRAMACIÓN C
ALGUNAS CARACTERÍSTICAS
Es un lenguaje para la programación estructurada.
Es un lenguaje tipificado aunque no tanto como puede ser Pascal.
Un programa en C es una colección de funciones, que pueden devolver un valor o no
(= procedimiento), y que se encuentran distribuidas en varios ficheros o módulos.
Entre todas las funciones, debe existir una llamada “main” que constituye la función
principal.
Permite escribir operaciones relativamente complejas de forma sencilla y concisa
(aunque a veces esto puede ser un inconveniente pues hay programas en C que son
excesivamente crípticos).
Contiene muy pocas palabras reservadas. No contiene órdenes para trabajar con
objetos compuestos (cadenas, arrays o arreglos, registros,...). Tampoco tiene
instrucciones propias para la asignación dinámica de memoria ni instrucciones de
entrada/salida. Todas estas operaciones de alto nivel pueden ser realizadas por
funciones llamadas explícitamente.
Distingue entre mayúsculas y minúsculas.
TIPOS, OPERADORES Y EXPRESIONES
Al declarar una variable debemos especificar su tipo y, opcionalmente, su valor
inicial.
Tipos base del lenguajes: int, float, double y char. Variaciones aplicables a los tipos
base: short, long, unsigned y register. Por ejemplo, short int se puede utilizar para
declarar variables enteras de 2 bytes, int para las de 4 bytes y long int para declarar
variables enteras de 8 bytes (cuidado, esto depende del compilador de C que estemos
utilizando).
Tipos de contantes: int (-345), long (456L), float y double (-1.23E-1), entero
hexadecimal (0x4F6 o 0x4F6L si es además long), entero octal (0457 o 0457L si
además es long), carácter (‘a’), caracteres no imprimibles (\t, \n, \b, \0 (nulo), \\, \’,
\014...)
Cadenas: “hola mundo”. Técnicamente es una array de caracteres cuyo último
elemento es un carácter nulo (\0). Atención, ‘x’ <> “x” ya que “x”” {‘x’,’\0’} por ser
una cadena.
Operadores aritméticos: +, -, *, / y % (no para float o double).
Operadores relacionales y lógicos: >, >=, <, <=, ==, !=, ! (negación), && (AND) y ||
(OR).
Cuando en una expresión aparecen varios tipos mezclados, se producen las siguientes
conversiones automáticas de tipos:
1. char y short se convierten en int, y float en double.
2. Si algún operando es de tipo double, el otro se convierte en double y el
resultado es de tipo double.
3. Si no se aplica la regla anterior, y si algún operando es de tipo long, el otro se
convierte en long y el resultado es long.
1/16
ISO. Breve introducción al lenguaje C
4. Si no se aplica la regla anterior, y si algún operando es de tipo unsigned, el
otro se convierte en unsigned y el resultado es unsigned.
5. Si no se puede aplicar ninguna de las reglas anteriores, los operandos deben
ser de tipo int y el resultado será int.
Conversiones en asignaciones: el valor de la parte derecha se convierte al tipo de la
izquierda, que es el tipo del resultado.
Conversión explícita (casting): sqrt ((double) n). Si n es de tipo int, el resultado de la
expresión (double) n es de tipo double, que es el tipo del parámetro que espera la
función sqrt.
Operadores de incremento y decremento (sólo para enteros): x=n++; x=++n; x=n--;
x=--n;
Operadores para manejo de bits (no para float o double): & (y), | (o), ^(o exclusivo),
<< (rotación o desplazamiento a la derecha), >> (rotación o desplazamiento a la
izquierda) y ˜ (complemento a 1: cambiar unos por ceros y viceversa).
Operadores y expresiones de asignación:
e1 op= e2
e1 = (e1) op (e2), donde op puede ser +, -, *, /, %, <<, >>, &, | y
^.
Ejemplos: i += 2
i = i + 2; x * = y + 1
x = x * (y + 1);
Operador ternario: e1 ? e2: e3. Esta expresión devuelve el resultado de e2 si el valor
de e1 es distinto de 0; en caso contrario, devuelve el resultado de e3.
Todos estos operadores tienen una precedencia y un orden de evaluación. Por eso, en
las expresiones es recomendable utilizar cuantos paréntesis sean necesarios para
expresar sin ambigüedad lo que queremos hacer.
Ejemplos de definición de variables (las definiciones suelen aparecer al principio del
cuerpo de la función o fuera de todas las funciones):
int un_entero, otro_entero = -540;
float un_float=-5.48E-2;
double un_double=-5.48E-2;
long int un_long=456L;
short int un_short=56;
unsigned long int un_unsigned_long=0X4F6L; /*En hexadecimal*/
unsigned short int un_unsigned_short=0117; /*En octal*/
char un_caracter=‘2’, otro_caracter=‘\t’
unsigned char un_byte;
Ejemplos de expresiones aritméticas:
un_entero = un_caracter - ‘0’;
otro_entero = 7/2 + (5%3 - 5)*2;
un_entero = 7/2;
un_float = 7.0/2.0;
un_double=cuadrado((double) un_entero);
2/16
ISO. Breve introducción al lenguaje C
Ejemplos de operadores de incremento y decremento:
un_entero = 5;
otro_entero = ++un_entero; /*otro_entero = 6 y un_entero = 6 */
otro_entero = un_entero++; /*otro_entero = 6 y un_entero = 7 */
Ejemplos de operaciones a nivel de bits:
un_byte = 5;
un_byte = un_byte << 1;
un_byte = un_byte >> 2;
un_byte = un_byte | 1;
un_byte = un_byte & (˜2);
un_byte = un_byte ^ 2;
/*un_byte=10*/
/*un_byte=2*/
/*un_byte=3*/
/*un_byte=1*/
/*un_byte=3*/
Ejemplos de asignaciones y operadores:
un_byte^= 2;
un_entero*=3;
un_entero*=otro_entero+2; /*equivale a
/*equivale a un_byte = un_byte ^ 2;*/
/*equivale a un_entero = un_entero * 3;*/
un_entero = un_entero * (otro_entero + 2);*/
Ejemplo de operador ternario:
otro_entero = (un_entero > 10)?10:un_entero;
CONTROL DE FLUJO
Proposiciones y bloques: las proposiciones (sentencias) en C terminan en “;”. Con las
llaves { y } se agrupan declaraciones y sentencias en una proposición compuesta o
bloque. Una expresión se evalúa como “cierta” si su resultado es distinto de 0 y como
“falsa” si su valor es 0.
If-else:
if (expresión) ‹
¡ Observar paréntesis !
else
proposición_1
proposición_2
Else-if
if (expresión)
proposición_1
else if (expresión)
proposición_2
else if (expresión)
3/16
ISO. Breve introducción al lenguaje C
.........
else
proposición_3
proposición_n
switch (expresión) {
case “etiqueta”:
[proposición]
case “etiqueta”:
[proposición]
default:
[proposición]
}
Cada etiqueta debe ser un entero, constante de carácter o una expresión
constante. default es opcional. Cuidado, cuando expresión coincide con una
etiqueta, se ejecutan todas las instrucciones que hay a partir de ese caso y no
salimos del switch hasta que encontramos una orden break, un return o llegamos
al final del switch.
while (expresión)
proposición
for (expr1; expr2; expr3)
proposición
Esta expresión equivale conceptualmente a
expr1;
while (expr2) {
proposición
expr3;
}
Tanto expr1, expr2 como expr3 pueden contener varias sentencias separadas por
“,”.
do
proposición
while (expresión);
break y continue en bucles: break hace abandonar el bucle mientras que continue
fuerza la siguiente iteración del bucle (saltando a la parte de condición en while y
do_while y a la etapa de actualización (expr3) en el for).
4/16
Ejemplo de if-else:
int factorial (int n) {
if (n < 2)
return 1;
else
return n * factorial(n-1);
}
Ejemplo de while:
int factorial (int n) {
int resultado = 1;
while (n > 1)
resultado = (n--)*resultado;
return resultado;
}
Ejemplo de for:
int factorial (int n) {
int resultado;
for(resultado=1; n > 1; n--)
resultado = n*resultado;
return resultado;
}
Ejemplo de switch:
int es_vocal(char c) {
int resultado;
switch(c) {
case ‘a’:
case ‘e’:
case ‘i’:
case ‘o’:
case ‘u’:
resultado = 1;
break;
default:
resultado = 0;
}
resturn resultado;
}
ISO. Breve introducción al lenguaje C
5/16
ISO. Breve introducción al lenguaje C
FUNCIONES Y MÓDULOS
Todas las funciones devuelve por defecto un valor entero. Si devuelven otro tipo de
valor o no devuelven nada, debemos especificarlo en su definición. Por ejemplo, una
función que devuelve un double se declararía como
double funcion(declaración de argumentos)
{
cuerpo de la función que debe incluir, al menos, un return
}
Para poder utilizar una función dentro de otra, debemos conocer su prototipo. Por
ello, los prototipos de las funciones se suelen escribir al comienzo de un módulo,
para que sean conocidos por todas las funciones de ese módulo. Un prototipo
especifica el número y tipo de los argumentos de una función y el valor devuelto por
dicha función. Ejemplos:
int factorial(int);
void imprime(char *);
Entre todas las funciones que componen un programa (repartidas en varios módulos),
debe existir una (y sólo una) llamada main. Esta es la función principal en la que
comienza la ejecución del programa.
Argumentos de funciones: siempre se realiza paso por valor, nunca por referencia.
Para hacer algo similar al paso por referencia
punteros.
Módulo: es un fichero de texto que contiene la implementación de funciones.
Ámbito de validez de una variable:
* Variables definidas dentro de una función
* Variables definidas fuera de las funciones (variables globales)
Se conocen
en to
Comentarios de: Breve introducción al lenguaje C (0)
No hay comentarios