36
Apuntes de Lenguaje C Ing. Juan Carlos Antón Soto UNIVERSIDAD NACIONAL AUTONOMA DE NICARAGUA, UNAN – LEON DEPARTAMENTO DE COMPUTACION INGENIERIA EN SISTEMA / TELEMATICA

Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

  • Upload
    vokhue

  • View
    217

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

Apuntes de Lenguaje C

Ing. Juan Carlos Antón Soto

UNIVERSIDAD NACIONAL AUTONOMA DE NICARAGUA, UNAN – LEON

DEPARTAMENTO DE COMPUTACION

INGENIERIA EN SISTEMA / TELEMATICA

Page 2: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

1

INTRODUCCION

C es un lenguaje de programación estructurado de pr opósito general. Sus instrucciones constan de términos que se parecen a expresiones algebraicas, además de ciertas palabras clave inglesas como if, else, for, do y while. C tiene también algunas características adicionales que permiten su uso a un nivel más bajo, cubriendo así el vacío entre el lenguaje máquina y los lenguajes de alto nivel más convencionales. Esta fl exibilidad permite el uso de C en la programación de sistemas (por ejempl o, para el diseño sistemas operativos) así como en la programación de aplicaciones (por ejemplo, para redactar un programa que resuelva un complicado sistema de ecuaciones matemáticas o un programa que escriba la s facturas para los clientes). C se caracteriza por hacer posible la redacción de programas fuente muy concisos, debido en parte al gran número de operado res que incluye el lenguaje. Tiene un repertorio de instrucciones rela tivamente pequeño, aunque las implementaciones actuales incluyen numer osas funciones de biblioteca que mejoran las instrucciones básicas. E s más, el lenguaje permite a los usuarios escribir funciones de biblio teca adicionales para su propio uso. De esta forma, las características y capacidades del lenguaje pueden ser ampliadas fácilmente por el usu ario. Otra característica importante de C es que los prog ramas son muy portables, más que los escritos en otros lenguajes de alto nivel. La razón de esto es que C deja en manos de las funciones de biblioteca la mayoría de las características dependientes de la computado ra.

Estructura de un programa en C

Todo programa en C consta de uno o más módulos llam ados funciones . Una de las funciones se llama main . El programa siempre comenzará por la ejecución de la función main, la cual puede acceder a las demás funciones. Las definiciones de las funciones adicionales se de ben realizar aparte, bien precediendo o siguiendo a main. Cada función debe contener: 1. Una cabecera de la función , que consta del nombre de la función, seguido de una lista opcional de argumentos encerra dos entre paréntesis. 2. Una lista de declaración de argumentos , si se incluyen éstos en la cabecera. 3. Una instrucción compuesta , que contiene el resto de la función.

Page 3: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

2

Los argumentos son símbolos que representan información que se le pasa a la función desde otra parte del programa. (También se llama parámetros a los argumentos.) Cada instrucción compuesta se encierra con un par de llaves, { }. Las llaves pueden contener combinaciones de instruccion es elementales (denominadas instrucciones de expresión) y otras instrucciones compuestas. Cada instrucción de expresión debe acabar en punto y coma (;). Los comentarios pueden aparecer en cualquier parte del programa, mi entras estén situados entre los delimitadores /* y */ . Por ejemplo:

/* Esto es un comentario */ . Los comentarios son útiles para identificar los ele mentos principales de un programa o para explicar la lógica subyacente de éstos.

CONCEPTOS BASICOS DE C

EL CONJUNTO DE CARACTERES DE C Para formar los elementos básicos del programa (con stantes, variables, operadores, expresiones, etc.), C utiliza como bloq ues de construcción las letras mayúsculas de la A a la Z, las minúsculas de la a a la z , los dígitos del O al 9 y ciertos caracteres especiales. Se presenta a continuación una lista de estos caracteres especial es:

C utiliza ciertas combinaciones de estos caracteres , como \b, \n y \t, para representar elementos especiales como el retro ceso de un espacio, nueva línea y un tabulador, respectivamente. Estas combinaciones de caracteres se conocen como secuencias de escape .

Page 4: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

3

IDENTIFICADORES Y PALABRAS RESERVADAS Los identificadores son nombres que se les da a varios elementos de un programa, como variables, funciones. Un identificad or está formado por letras y dígitos, en cualquier orden, excepto el primer carácter, que debe ser una letra. Se pueden utilizar mayúsculas y minúsculas, aunque es costumbre utilizar minúsculas para la mayoría de lo s identificadores. No se pueden intercambiar mayúsculas y minúsculas (est o es, una letra mayúscula no es equivalente a la correspondiente mi núscula.) El carácter de subrayado ( _) se puede incluir también, y es considerado como u na letra. Se suele utilizar este carácter en medio de los identificadores. Un identificador también puede comenzar con un carácte r de subrayado, aunque en la práctica no se suele hacer. Los siguientes nombres son identificadores válidos.

Los siguientes nombres no son identificadores válid os por las razones señaladas. 4num el primer carácter debe ser una letra “a” caracteres ilegales (“”) orden-no carácter ilegal (-) indicador error carácter ilegal (espacio en blanco) NO hay límite para la longitud de los identificador es, pero dependiendo del compilador que se utilice solamente los n carac teres primeros son significativos. Hay ciertas palabras reservadas que tienen un significado predefinido estándar. Las palabras reservadas sólo se pueden ut ilizar para su propósito ya establecido; no se pueden utilizar com o identificadores definidos por el programador. Las palabras reservadas son:

Page 5: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

4

Observe que todas las palabras reservadas están en minúsculas. Como los caracteres en minúsculas y mayúsculas no son equiva lentes, se puede utilizar una palabra reservada escrita en mayúscula s como un identificador. Esto no se suele hacer normalmente, y se considera propio de un estilo de programación pobre. TIPOS DE DATOS En C, toda variable, antes de poder ser usada, debe ser declarada, especificando con ello el tipo de dato que almacena rá. Toda variable en C se declara de la forma: <tipo de dato><nombre de variable> [, nombre de var iable]; En C existen cinco tipos de datos según puede verse en la tabla siguiente:

Algunos ejemplos de variables de C serían: float a; int b, c; char caracter, otro_caracter; Cada tipo entero puede ser calificado por las palab ras clave signed o unsigned . Un entero calificado signed es un entero con signo; esto es, un valor entero positivo o negativo. Un valor entero c alificado unsigned es

Page 6: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

5

un valor entero sin signo, el cual es manipulado co mo un valor entero positivo. Esta calificación da lugar a los siguient es tipos extra:

• signed short, unsigned short • signed int, unsigned int • signed long, unsigned long

Si los calificadores signed y unsigned se utilizan sin un tipo entero específico, se asume el tipo int . Por este motivo, las siguientes declaraciones son equivalentes:

signed x; /* es equivalente a */ signed int x;

Tipo enumerado

Crear una enumeración es definir un nuevo tipo de d atos, denominado tipo enumerado y declarar una variable de este tipo. La sintaxis es la siguiente: enum tipo_enumerado { /* definición de nombres de constantes enteras */ }; donde tipo_enumerado es un identificador que nombra al nuevo tipo definido. Después de definir un tipo enumerado, podemos decla rar una o más variables de este tipo, de la forma:

enum tipo_enumerado [variable [,variable] ... ] ; El siguiente ejemplo declara una variable llamada color del tipo enumerado arcoiris , la cual puede tomar cualquier valor de los especi ficados en la lista. enum arcoiris { rojo, amarillo, verde, azul, blanco }; enum arcoiris color; color = azul;

Page 7: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

6

Cada identificador de la lista de constantes en una enumeración, tiene asociado un valor. Por defecto, el primer identifi cador tiene asociado el valor 0, el siguiente el valor 1 y así sucesivament e. Según esto: color = azul; es equivalente a: color = 3;

A cualquier identificador de la lista se le puede a signar un valor

inicial entero por medio de una expresión constante . Los identificadores sucesivos tomarán valores correlativos a partir de éste, por ejemplo: enum arcoiris { rojo, amarillo, verde = 0, azul, blanco } color;

Este ejemplo define un tipo enumerado llamado arcoiris y declara una variable color de ese tipo. Los valores asociados a los identifi cadores son los siguientes:

rojo = 0 , amarillo = 1, verde = 0, azul =1, blanco =2 Otro ejemplo:

enum moneda { penique, niquel, diez_centavos, cuarto=100, medio _dolar, dolar }moneda_actual;

Los valores son: penique 0, niquel 1, diez_centa vos 2, cuarto 100, medio_dolar 101, dolar 102.

CONSTANTES Una constante es, en principio, una variable cuyo v alor no puede ser modificado. Las constantes se definen con la directiva #define . Así: #define CONSTANTE valor Cada línea #define sólo puede contener el valor de una constante. Por ejemplo, podemos definir los valores aproximado s de PI y del número E así: #define PI 3.1415926535897931159979634685442 #define E 2.7182818284590450907955982984276

Page 8: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

7

Intentar asignar un valor a PI o a E en el programa produce un error que detecta el compilador. No hay operador de asignación entre el nombre de la constante y su valor y la línea no acaba con punto y coma. No es obligator io que el nombre de la constante se escriba en mayúsculas, pero si un conv enio ampliamente adoptado. De forma alternativa se puede definir constantes me diante una nueva palabra reservada: const . Puedes usar const delante del tipo de una variable inicializada en la declaración para indica r que su valor no se modificará nunca. Ejemplo con la palabra reservada const #include <stdio.h> int main(void) { const float pi = 3.14; float r, a; printf ("Radio: "); scanf ("%f", &r); a = pi * r * r; printf("Area: %f\n", a); return 0; } Ejemplo con la directriz #define #include <stdio.h> #define pi 3.14 int main(void) { float r, a; printf ("Radio: "); scanf ("%f", &r); a = pi * r * r; printf("Area: %f\n", a);

Page 9: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

8

return 0; } Secuencias de escape Ciertos caracteres no imprimibles, así como la barr a inclinada hacia atrás (\) y la comilla simple ('), se pueden expresar en términos de secuencias de escape . Una secuencia de escape siempre comienza con una ba rra inclinada hacia atrás y es seguida por uno o más ca racteres especiales. Por ejemplo, un salto de línea (LF), que se denomin a carácter de nueva línea en C, se puede representar como \n . Una secuencia de escape siempre representa un solo carácter, aun cuando se escriba con dos o más caracteres. A continuación se listan las secuencias de escape u tilizadas con mayor frecuencia.

La secuencia de escape \0 es de especial interés. R epresenta el carácter nulo , que se utiliza para indicar el final de una cadena de caracteres. La constante de carácter nulo '\0' no es equivalent e a la constante de carácter '0'. Constantes de cadena de caracteres Una constante de cadena de caracteres consta de cualquier número de caracteres consecutivos(o ninguno), encerrados entr e comillas (dobles).

Page 10: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

9

Ejemplo: A continuación se muestran varias constantes de cad ena de caracteres. “verde” “Washinton D.C. 2005” “270-34-3256” “$19.95” “La respuesta correcta es:” “2* (1+3) /J” La siguiente constante de cadena de caracteres incl uye tres caracteres especiales que se representan por sus correspondien tes secuencias de escape. "\tPara continuar, pulsar la tecla \"RETURN\"\n" Los caracteres especiales son \t (tabulador horizon tal), \" (comillas, que aparece dos veces) y \n (nueva línea).

Expresiones numéricas

Una expresión es una secuencia de operadores y ope randos que especifican una operación determinada. Por ejemplo:

a++

suma + = c

cantidad * precio

Operadores

Los operadores son símbolos que indican cómo son ma nipulados los datos. Se clasifican en los siguientes grupos: aritmético s, lógicos, relacionales, de asignación, operador condicional y otros.

Operadores aritméticos

Se utilizan para realizar operaciones matemáticas y son los siguientes:

Page 11: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

10

Operador Operación

+ Suma. Los operandos pueden ser enteros o reales.

- Resta. Los operandos pueden ser enteros o reales .

* Multiplicación. Los operandos pueden ser enteros o reales.

/ División. Los operandos pueden ser enteros o reales. Si ambos operandos son enteros, el resultado es entero. En el resto de los casos el resultado es real.

% Módulo o resto de una división entera. Los operandos tienen que ser enteros.

Ejemplo: void main(void ) { int a = 10, b = 3, c; float x = 2.0, y; y = x + a; /* el resultado es 12.0 de tipo float */ c = a / b; /* el resultado es 3 de tipo int */ c = a % b; /* el resultado es 1 de tipo int */ y = a / b; /* el resultado es 3 de tipo int . Se convierte a

float para asignarlo a y */ c = x / y; /* el resultado es 0.666667 de tipo float . Se

convierte a int para asignarlo a c ( c = 0)*/ }

Cuando en una operación aritmética los operandos so n de diferentes tipos, ambos son convertidos al tipo del operando de preci sión más alta; por ejemplo, para realizar la suma x+a el valor del entero a es convertido a float , tipo de x . No se modifica a, sino que su valor es convertido a float sólo para realizar la suma.

El resultado obtenido en una operación aritmética e s convertido al tipo de la variable que almacena dicho resultado. Por ejem plo, del resultado de x/y sólo la parte entera es asignada a c , ya que c es de tipo int . Esto

Page 12: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

11

indica que los reales son convertidos a enteros, tr uncando la parte fraccionaria.

Un resultado real es redondeado. Observe la operac ión x/y para x igual a 2 e y igual a 3. El resultado es 0.666667 en lugar de 0 .666666 porque la primera cifra decimal suprimida es 6. Cuando la pr imera cifra decimal suprimida es 5 ó mayor de 5, la última cifra decima l conservada se incrementa en una unidad.

Operadores lógicos

El resultado de una operación lógica (AND, OR y NOT ) es un valor verdadero o falso(1 ó 0). Por definición, un valor distinto de cero es siempre verdadero y un valor cero es siempre falso. Los op eradores lógicos de C son los siguientes:

Operador Operación

&& AND. Da como resultado el valor lógico 1 si amb os operandos son distintos de cero. Si uno de ellos e s cero el resultado es el valor lógico 0.

|| OR. El resultado es 0 si ambos operandos son 0. Si uno de los operandos tiene un valor distinto de cero, el resultado es 1.

! NOT. El resultado es 0 si el operando tiene un valor distinto de cero, y 1 en caso contrario.

El resultado de una operación lógica es de tipo int . Los operandos pueden ser enteros o reales. Por ejemplo:

void main(void ) { int p = 10, q = 0, r = 0; r = p && q; /* da como resultado 0 */ r = p || q; /* da como resultado 1 */ r = !p ; /* da como resultado 0 */ }

Page 13: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

12

Operadores de relación

El resultado de una operación de relación es un val or verdadero o falso (1 ó 0). Los operadores de relación son los siguien tes:

Operador Operación

< Primer operando menor que el segundo.

> Primer operando mayor que el segundo.

<= Primer operando menor o igual que el segundo.

>= Primer operando mayor o igual que el segundo

!= Primer operando distinto que el segundo

= = Primer operando igual que el segundo

Los operandos pueden ser de tipo entero o real. Por ejemplo:

void main(void) { int x = 10, y = 0, r = 0; r = x = = y; /* da como resultado 0 */ r = x > y; /* da como resultado 1 */ r = x != y ; /* da como resultado 1 */ }

Expresiones de Boole

Una expresión de Boole da como resultado 1 (verdade ro) ó 0 (falso). El resultado de una comparación puede utilizarse como operando en una expresión de Boole. Los operadores que intervienen en una expresión de Boole pueden ser de relación y lógicos.

Page 14: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

13

Ejemplo:

void main(void ) { int r = 0, s = 0; float x = 15, y = 18, z = 20; r = (x < y) && (y <= z) || s; /* resultado r = 1 */ }

Operadores de asignación El resultado de una operación de asignación es el v alor almacenado en el operando izquierdo, después que la asignación se ha realizado. El valor que se asigna es convertido al tipo del operando de la izquierda.

Operador Operación

++ Incremento.

-- Decremento.

= Asignación simple.

*= Multiplicación más asignación.

/= División más asignación.

%= Módulo más asignación.

+= Suma más asignación.

-= Resta más asignación.

A continuación se muestran algunos ejemplos con est os operadores:

void main(void ) { int x = 0, n = 10, i = 1; x++; /* incrementa el valor de x en 1 */ ++x; /* incrementa el valor de x en 1 */ x = --n; /* decremento n en 1 y asigna el res ultado a x */ x = n--; /* asigna el valor de n a x y después decrementa n

en 1 */

Page 15: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

14

i += 2; /* realiza la operación i = i +2; x *= n - 3; /* realiza la operación x = x * ( n - 3) y no

x = x * n - 3 */ } Operador condicional C tiene un operador ternario ( ?: ) que se utiliza en expresiones condicionales, las cuales tienen la forma:

operando1 ? operando2 : operando3

El valor resultante de la expresión operando1 debe ser de tipo entero o real. La ejecución se realiza de la siguiente form a:

� Si el resultado de la evaluación de operando1 es di stinta de 0, el resultado de la expresión condicional es operando2.

� Si el resultado de la evaluación de operando1 es 0, el resultado de la expresión condicional es operando3.

El siguiente ejemplo asigna a mayor el resultado (a > b) ? a : b, que será a si a es mayor que b y b si a no es mayor que b.

void main(void) { float a = 10.2, b = 20.5, mayor = 0; mayor = (a > b) ? a : b; /* mayor de a y b * / }

Operador sizeof El operador sizeof da como resultado el tamaño en bytes de su operand o. El operando puede ser el identificador de un objeto o el tipo del objeto. Por ejemplo: //tamanostipos.c #include <stdio.h> void main(void) { //Declarar las variables char c; int i,tam; long l; tam = sizeof(c);

Page 16: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

15

//Mostrar los tamaños de las tipos de datos printf("El tamano del char c es %d byte\n",tam); printf("El tamano del int i es %d bytes\n",sizeof( i)); tam = sizeof(l); printf("El tamano del long l es %d bytes\n",tam); printf("El tamano del float es %d bytes\n",sizeof( float)); printf("El tamano del double es %d bytes\n",sizeof (double)); }

Los paréntesis son opcionales, excepto cuando el op erando se corresponde con un tipo de datos.

Prioridad y orden de evaluación La tabla que se presenta a continuación, resume las reglas de prioridad y asociatividad de todos los operadores. Los operado res escritos sobre una misma línea tienen la misma prioridad. Las líneas se han colocado de mayor a menor prioridad. Una expresión entre paréntesis, siempre se evalúa p rimero. Los paréntesis tienen mayor prioridad y son evaluados de más inter nos a más externos.

Operador Asociatividad

( ) [ ] . -> sizeof Izquierda a derecha

- ~ ! * & ++ -- (tipo) Derecha a izq uierda

* / % Izquierda a derecha

+ - Izquierda a derecha

<< >> Izquierda a derecha

< <= > >= Izquierda a derecha

Page 17: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

16

== != Izquierda a derecha

& Izquierda a derecha

^ Izquierda a derecha

| Izquierda a derecha

&& Izquierda a derecha

|| Izquierda a derecha

?: Derecha a izquierda

= *= /= %= += - = <<= >>= &= |= ^=

Derecha a izquierda

, Izquierda a derecha

En el siguiente ejemplo, primero se asigna z a y , a continuación y a x .

Esto es así porque la asociatividad para este opera dor es de derecha a izquierda.

void main(void ) { int x = 0, y = 0, z = 15; x = y = z; /* resultado x = y = z = 15 */ } Conversión de tipos Cuando los operandos que intervienen en una operaci ón son de tipos diferentes, antes de realizar la operación especifi cada, se convierten a un tipo común, de acuerdo con las reglas que se exp onen a continuación, las cuales se aplican en el orden indicado y además , siguiendo el orden de evaluación:

1. Si un operando es de tipo long double , el otro operando es convertido a tipo long double . 2. Si un operando es de tipo double , el otro operando es convertido a

tipo double . 3. Si un operando es de tipo float , el otro operando es convertido a tipo

float .

Page 18: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

17

4. Un char se convertirá a un int , si el tipo int puede representar todos los valores del tipo original. 5. Si un operando es de tipo long , el otro operando es convertido a tipo

long .

Por ejemplo: long a; char b; int c; float d; int f; f = a + b * c / d;

En la expresión anterior se realiza primero la mult iplicación, después la división y por último la suma. Según esto, el proc eso de evaluación será de la forma siguiente:

1. b es convertido a int (paso 4). 2. b y c son de tipo int . Se ejecuta la multiplicación y se obtiene un

resultado de tipo int . 3. Como d es de tipo float , el resultado de b * c, es convertido a float

(paso 3). Se ejecuta la división y se obtiene el r esultado de tipo float . 4. a es convertido a float (paso 3). Se ejecuta la suma y se obtiene un

resultado de tipo float . 5. El resultado de a + b * c / d , para ser asignado a f , es pasado a

entero por truncamiento, esto, es, eliminando la pa rte fraccionaria.

Conversión explícita del tipo de una expresión

En C, está permitida una conversión explícita del t ipo de una expresión mediante una construcción denominada cast , que tiene la forma:

(nombre-de-tipo)expresión

La expresión es convertida al tipo especificado si esa conversión está permitida; en otro caso, se obtendrá un error. La conversión cast, siempre que se pueda, es mejor evitarla ya que supr ime la verificación de tipo proporcionada por el compilador y puede conduc ir a resultados inesperados.

Page 19: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

18

Por ejemplo, la función raíz cuadrada ( sqrt ), espera como argumento un tipo double . Para evitar resultados inesperados en el caso de pasar un argumento de otro tipo, podemos escribir:

sqrt(( double ) (n+2))

Su utilidad queda claramente expresada en el ejempl o siguiente: int a=3,b=2; float c; c=a/b; La operación asigna a c el valor 1.0 en vez del valor 1.5 , ello se debe a que alser a y b variables de tipo entero, se realiza una división e ntre enteros, y el resultado de 3/2 es 1. A continuación ese valor 1 se convierte a un valor en coma flotante para realizar la asignación (valor 1.0 ), y se asigna a c . Si lo que se desea es que la división se realice en punto flotante, debe escribirse la operación de la siguiente forma: c = (float)a/b; Esta conversión forzada obliga a convertir la varia ble a en float , y entonces, aplicando las reglas de conversión automá tica de tipos, se realiza la división en coma flotante. Este proceso da lugar a que el resultado de la operación sea 1.5 , y dicho valor sea el asignado a la variable c . DECLARACIONES Una declaración asocia un tipo de dato especificado a un grupo de variables. Se deben declarar todas las variables an tes de que aparezcan en las instrucciones ejecutables. Una declaración consta de un tipo de datos, seguido de uno o más nombres de variables, finalizando con un punto y coma. Ejemplo: Un programa en e contiene las siguientes declaracio nes de tipos: int a, b, c; float raizl, raiz2; char indicador, texto[80];

Page 20: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

19

De esta forma se declaran a, b y c como variables enteras, raiz1 y raiz2 son variables en coma flotante, indicador una variable de tipo carácter y texto un array de tipo carácter de 80 elementos. Se puede asignar valores iniciales a las variables dentro de la declaración de tipo. Para hacer esto, la declaració n debe consistir en un tipo de dato, seguido por un nombre de variable, un signo igual (=) y una constante del tipo apropiado. Al final se debe pone r, como de costumbre, un punto y coma (;). Ejemplo: int c = 12; char estrella = ‘*’; float suma = 0.0; double factor = 0.21023e-6; FUNCIONES DE BIBLIOTECA El lenguaje C se acompaña de un cierto número de funciones de biblioteca que realizan varias operaciones y cálculos de uso f recuente. Estas funciones de biblioteca no son parte del lenguaje e n sí, pero las incluyen todas las implementaciones del lenguaje C. Algunas funciones devuelven un dato en su llamada; otras indican cuándo una determ inada condición es verdadera o falsa, devolviendo un valor de 1 ó 0 re spectivamente; y otras efectúan operaciones específicas sobre los datos y no devuelven nada. Suelen existir funciones de biblioteca para efectua r las operaciones que son dependientes de la computadora. Por ejemplo, hay funciones de biblioteca que efectú an las operaciones estándar de entrada y salida (leer y escribir carac teres, leer y escribir números, abrir y cerrar archivos, comprobar la cond ición de fin de archivo, etc.), funciones que realizan operaciones sobre caracteres (convertir minúsculas en mayúsculas, determinar si un carácter es una letra mayúscula, etc.), funciones que realizan oper aciones en cadenas de caracteres (copiar una cadena de caracteres en otra , comparar dos cadenas, concatenar dos cadenas, etc.), y funciones que real izan diversos cálculos matemáticos (evaluación de funciones trigonométrica s, logarítmica y exponencial, cálculo de valores absolutos, raíces c uadradas, etc.).

Page 21: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

20

Algunas funciones de biblioteca de uso común

Se muestra a continuación un fragmento de un progra ma en el que calcula las raíces de la ecuación cuadrática ax 2 + bx + c = O

Page 22: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

21

Utilizando la fórmula

Este programa utiliza la función de biblioteca sqrt para evaluar la raíz cuadrada. void main() /* solución de una ecuación cuadrática */ Para utilizar una función de biblioteca puede ser n ecesario incluir cierta información dentro de la parte principal del progra ma. Por ejemplo, las declaraciones de funciones y definiciones de consta ntes simbólicas suelen necesitarse cuando se utilizan funciones de bibliot eca. Esta información suele encontrarse almacenada en ciertos archivos qu e se proporcionan con el compilador. Por tanto, la información requerida se puede obtener simplemente accediendo a estos archivos. Esto se ll eva a cabo mediante la instrucción del preprocesador #include , que es #include<nombre-archivo> nombre_archivo representa el nombre de un determinado archivo. Los nombres de estos archivos especiales son especí ficos de cada implementación de C, aunque hay ciertos nombres de archivos comúnmente usados, como stdio.h y math.h. El sufijo «h» genera lmente designa un archivo de «cabecera», que indica que se debe inclu ir al comienzo del programa.

Page 23: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

22

ENTRADA Y SALIDA DE DATOS

La mayoría de las versiones de C incluyen una colec ción de archivos de cabecera que proporcionan la información necesaria para las distintas funciones de biblioteca. Cada archivo contiene gene ralmente la información necesaria para la utilización de un determinado gru po de funciones de biblioteca. Estos archivos se incluyen en un progra ma mediante la instrucción #include al comienzo del programa. Como norma general, el archivo de cabecera requerido para la entrada/salid a estándar se llama stdio.h Ejemplo: El siguiente esquema representa un programa en C tí pico que hace uso de varias rutinas de entrada/salida de la biblioteca e stándar de C. /* ejemplo del uso de funciones de biblioteca de en trada/salida */ #include <stdio.h> void main() { char c, d; /*declaraciones*/ float x, y; int i, j, k; c = getchar(); /*entrada de un caracter*/ scanf(“%f”,&x); /*entrada de numero en coma flotan te*/ scanf(“%d %d”,&i, &j); /*entrada de enteros*/ ... putchar(d); /*salida de un carácter*/ printf(“%3d %7.4f”, k, y); /*salida de números*/ } El programa comienza con la instrucción del preproc esador #include <stdio. h>. Esta instrucción hace que se incluya en el progra ma el contenido del archivo de cabecera stdio.h . Este archivo proporciona la información referente a las funciones de biblioteca scanf y printf . A continuación de la instrucción del preprocesador se encuentra el encabezamiento del programa main() y algunas declaraciones de variables. Aparecen varias instrucciones de entrada/salida en las líneas que siguen a las declaraciones. En concreto, la instrucción de a signación c=getchar(); hace que se lea un solo carácter del teclado y se l e asigne a la variable c . La primera referencia a scanf hace que se lea por teclado un valor en coma flotante y se le asigne a la variable x , mientras que la segunda llamada a scanf hace que se lean del teclado dos cantidades entera s y se les asignen a las variables i y j , respectivamente.

Page 24: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

23

Las instrucciones de salida se comportan de forma a náloga. La llamada a putchar hace que se visualice el valor de la variable de c arácter d. Análogamente, la referencia a printf hace que se visualicen el valor de la variable, entera k y el de la variable en coma flotante y . ENTRADA DE UN CARÁCTER, LA FUNCION getchar() La función getchar es parte de la biblioteca de C d e entrada/salida estándar. Devuelve un carácter leído del dispositiv o de entrada estándar (típicamente un teclado). La función no requiere ar gumentos, aunque es necesario que un par de paréntesis vacíos sigan a l a palabra getchar. En forma general, una referencia a la función getch ar se escribe así: Variable de carácter = getchar(); Donde variable de carácter es alguna variable de carácter previamente declarada. Ejemplo: Un programa en C contiene las siguientes instruccio nes: char C; ... C = getchar(); En la primera instrucción se declara la variable C de tipo carácter. La segunda instrucción hace que se lea del dispositivo de entrada estándar un carácter y entonces se le asigne a C. Ejemplo: //getchar.c #include <stdio.h> void main(void) { char car; printf("Introducir un caracter: "); car = getchar(); //lee un caracter y lo almacena e n la variable car printf("Caracter: %c, valor ASCII: %d\n\n",car, ca r); }

Page 25: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

24

La función getchar() también se puede utilizar para leer cadenas de varios caracteres, leyendo en un bucle la cadena carácter a carácter. SALIDA DE UN CARÁCTER, LA FUNCION putchar Se puede visualizar un carácter utilizando la funci ón de biblioteca putchar. Esta función es complementaria a la de ent rada de un carácter getchar(). La función putchar, así como getchar(), es parte de la biblioteca de entrada/salida estándar. Transmite un carácter al dispositivo de salida estándar (típicamente un moni tor). El carácter que se transmite estará representado normalmente por un a variable de tipo carácter. Se debe proporcionar como argumento de la función, encerrado entre paréntesis, siguiendo a la palabra putchar. En general, una referencia a la función putchar se escribe como sigue: putchar(variable de carácter) Donde variable de carácter hace referencia a una variable de tipo carácter previamente declarada. Ejemplo: Un programa en C contiene las siguientes instruccio nes: //putchar.c #include <stdio.h> void main(void) { char car; printf("Introducir un caracter: "); car = getchar(); //lee un caracter y lo almacena e n la variable car printf("El caracter leido es:"); putchar(car); printf("\n\n"); }

Page 26: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

25

En la primera instrucción se declara la variable ca r de tipo carácter. La quinta instrucción hace que se transmita el valor a ctual de car al dispositivo de salida estándar (por ejemplo un moni tor) en donde se visualizará. INTRODUCCION DE DATOS, LA FUNCION SCANF Se pueden introducir datos en la computadora proced entes del dispositivo de entrada estándar mediante la función de la bibli oteca de C scanf. Esta función se puede utilizar para introducir cualquier combinación de valores numéricos, caracteres individuales y cadenas de car acteres. La función devuelve el número de datos que se han c onseguido introducir correctamente. En términos generales, la función scanf se escribe: scanf(cadena de control, argl, arg2, ... , argn) Donde cadena de control hace referencia a una cadena de caracteres que contiene cierta información sobre el formato de los datos y argl,arg2,..., argn son argumentos que representan los datos. En la cadena de control se incluyen grupos individu ales de caracteres, con un grupo de caracteres por cada dato de entrada. Ca da grupo de caracteres debe comenzar con el signo de porcentaje (%). En su forma más sencilla, un grupo de caracteres estará formado por el signo de porcentaje, seguido de un carácter de conversión que indica el tipo de dato correspondiente.

Caracteres de conversión de los datos de entrada de uso común

Page 27: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

26

Ejemplo: La siguiente es una aplicación típica de la función scanf. #include <stdio.h> void main() { char concepto[20]; int num_partida; float coste; ... scanf(“%s %d %f”,concepto, &num_partida, &coste) ; ... } Dentro de la función scanf(), la cadena de control es "%s %d %f". Contiene tres grupos de caracteres. El primer grupo de carac teres, %s, indica que el primer argumento (concepto) representa a una cad ena de caracteres. El segundo grupo de caracteres, %d, indica que el segu ndo argumento &num_partida) representa un valor entero decimal, y el tercer grupo de caracteres, %f, indica que el tercer argumento(&cos te) representa un valor en coma flotante. Observe que las variable numéricas num_partida y co ste van precedidas por ampersands dentro de la función scanf. Sin embargo, delante de concepto no hay ampersand, ya que concepto es el nombre de un a rray. ESCRITURA DE DATOS, LA FUNCION printf Se pueden escribir datos en el dispositivo de salid a estándar utilizando la función de biblioteca printf(). Se puede utiliza r esta función para escribir cualquier combinación de valores numéricos , caracteres sueltos y cadenas de caracteres. Es análoga a la función de e ntrada scanf, con la diferencia de que su propósito es visualizar datos en lugar de introducirlos en la computadora. Esto es, la función printf se ocupa de transferir d atos de la memoria de la computadora al dispositivo de salida estándar, m ientras que la función scanf introduce datos del dispositivo de entrada es tándar y los almacena en la memoria de la computadora. En términos generales, la función printf se escribe printf(cadena de control, argl, arg2,. argn)

Page 28: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

27

En donde cadena de control hace referencia a una cadena de caracteres que contiene información sobre el formato de la salida y argl, arg2, ..., argn son argumentos que representan los datos de salida. Los argumentos pueden ser constantes, variables simples o nombres de arra ys o expresiones más complicadas. En contraste con la función scanf tratada en la sec ción anterior, los argumentos de la función printf no representan direcciones de memoria y por tanto no son precedidos de ampersands. La cadena de control está compuesta por grupos de c aracteres, con un grupo de caracteres por cada dato de salida. Cada grupo d e caracteres debe comenzar por un signo de porcentaje(%). En su forma más sencilla, un grupo de caracteres consistirá en el signo de porcentaje seguido de un carácter de conversión que indica el tipo del dato correspondiente. Ejemplo: Se presenta un programa sencillo en el que se utili za la función printf. #include<stdio.h> #include<math.h> void main() { float i = 2.0, j = 3.0; printf(“%f %f %f %f”, i, j, i+j, sqrt(i+j)); } Observe que los dos primeros argumentos dentro de l a función printf son variables simples, el tercer argumento es una expre sión aritmética y el último argumento una referencia a una función que t iene una expresión numérica como argumento. La ejecución del programa produce la siguiente sali da: 2.000000 3.000000 5.000000 2.236068 LAS FUNCIONES gets Y puts Facilitan la transferencia de cadenas de caracteres entre la computadora y los dispositivos de entrada/salida estándar. Cada una de estas funciones acepta un solo argument o. El argumento debe ser un dato que represente una cadena de caracteres (una formación de caracteres). La cadena de caracteres puede incluir caracteres de espaciado. En el caso de gets, la cadena se introdu cirá por el teclado y

Page 29: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

28

terminará con un carácter de nueva línea (por ejemp lo la cadena terminará cuando el usuario pulse la tecla Intro). Las funciones gets y puts ofrecen alternativas senc illas al uso de scanf y printf para la lectura y escritura de cadenas de ca racteres, como se muestra en el siguiente ejemplo. Ejemplo: Lectura y escritura de una línea de texto. #include <stdio.h> int main(int argc, char *argv[]) { char linea[80]; printf("Escriba una oracion cualquiera:"); gets(linea); puts(linea); return 0; }

Este programa utiliza gets y puts en lugar de scanf y printf para transferir texto hacia dentro y hacia fuera de la c omputadora. CARÁCTER NUEVA LINEA Cuando introducimos datos por el teclado, y pulsamo s la tecla ENTER, se introduce también el carácter \n, lo que podría oca sionar problemas si a continuación ejecutamos una sentencia que admita un carácter, ya que el carácter nueva línea es considerado como tal. Otro problema se crea cuando tenemos dos sentencias consecutivas que leen datos de tipos diferentes. Para evitar estos errores se aconseja, limpiar el b uffer asociado con la entrada estándar (stdin), usando la función de bibl ioteca fflush()

Page 30: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

29

Sintaxis: #include<stdio.h> int fflush(FILE *flujo); La función retorna un cero si se ejecuta satisfacto riamente o EOF si ocurre un error. Ejemplo: //nuevalinea.c #include <stdio.h> void main(void) { float precio = 0; char car = 0; printf("Precio: "); scanf("%g",&precio); printf("Pulse <Entrar> para continuar "); scanf("%c",&car); printf("Precio = %g\n\n",precio); }

Solución: Limpiar el buffer. //nuevalinea.c #include <stdio.h> void main(void) { float precio = 0; char car = 0; printf("Precio: "); scanf("%g",&precio); fflush(stdin);

Page 31: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

30

printf("Pulse <Entrar> para continuar "); scanf("%c",&car); printf("Precio = %g\n\n",precio); }

CARÁCTER DE FIN DE FICHERO Un dispositivo de entrada o de salida estándar en C es manipulado como si se tratara de un fichero de datos. Un fichero de datos, es una colección de información. Los datos introducidos por el teclado y los datos v isualizados, son una colección de información. Todo fichero tiene un principio y un final. La marc a fin de fichero se consigue presionando ctrl + z, lo que genera la con stante EOF definida en el fichero stdio.h. EOF tiene asignado el valor -1. En algunos programas se utiliza la marca fin de fichero para indicar la finalización de la entrada de datos. Ejemplo: //eof.c #include <stdio.h> void main(void) { int r = 0; float precio = 0; printf("Precio: "); r = scanf("%g",&precio);

Page 32: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

31

(r == EOF) ? printf("Fin de la entrada de datos\n\n"):printf("%g\n\n",precio); }

EJERCICIOS RESUELTOS

1. Dada las horas trabajadas de una persona y el valor por hora. Calcular su salario e imprimirlo. #include <stdio.h> int main(int argc, char *argv[]) { int horas, valor, salario; printf("\nIngrese las horas trabajadas y el valor por hora: "); scanf("%d %d", &horas, &valor); salario = horas * valor; printf("Salario de la persona: C$ %d\n", salario); return 0; }

Page 33: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

32

2. Una tienda ofrece un descuento del 15% sobre el tot al de la compra y

un cliente desea saber cuánto deberá pagar finalmen te por su compra. #include <stdio.h> int main(int argc, char *argv[]) { float totalc, descuento, totalpagar; printf("Ingrese el total de la compra de la person a: "); scanf("%f", &totalc); descuento = totalc * 0.15; totalpagar = totalc - descuento; printf("Total de la compra despues del descuento: C$ %.2f\n",totalpagar); return 0; } 3. Escriba un programa que, dados los dos lados difere ntes de un

rectángulo, encuentre el perímetro y el área del mi smo. Perimetro = 2L1 + 2L2 Area = L1 * L2 #include <stdio.h> int main(int argc, char *argv[]) { double L1, L2, per, area; printf("Ingrese la base y la altura del rectangulo : "); scanf("%lf %lf",&L1,&L2); per = 2*L1 + 2*L2; area = L1 * L2; printf("\nPerimetro = %g\n", per); printf("Area = %g\n", area); return 0; }

Page 34: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

33

4. Realice un programa que, lea las variables Ay B y p ase el valor de A a B y de B a A. #include<stdio.h> void maín() { int A, B, aux; printf(“\nValor de A: ”); scanf(“%d”, &A); printf(“\nValor de B: ”); scanf(“%d”, &B); aux = A; A = B; B = aux; printf(“\n\nvalores Intercambiados\n”); printf(“A = %d\n”, A); printf(“B = %d\n”, B); }

5. Un vendedor recibe un sueldo base más un 10% extra por comisión de sus ventas, el vendedor desea saber cuánto dinero o btendrá por concepto de comisiones por las tres ventas que real iza en el mes y el total que recibirá en el mes tomando en cuenta su s ueldo base y comisiones.

#include <stdio.h> int main(int argc, char *argv[]) { float sueldob, v1, v2, v3, totvta, com, tpag; printf("\nIntroduzca el sueldo base y las 3 ventas del mes:\n"); scanf("%f %f %f %f", &sueldob, &v1, &v2, &v3); totvta = v1 + v2 + v3; com = totvta * 0.10; tpag = sueldob + com; printf("\nPago total: %.2f\n", tpag); printf("\nComision: %.2f\n", com); return 0; }

Page 35: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

34

6. A la mamá de Juan le preguntan su edad, y contesta: tengo 3 hijos, pregúntele a Juan su edad. Alberto tiene 2/3 de la edad de Juan, Ana tiene 4/3 de la edad de Juan y mi edad es la suma d e las tres. Hacer un programa que muestre la edad de los cuatro. #include <stdio.h> int main(int argc, char *argv[]) { int EdadJ, EdadAl, EdadA, Edadm; printf("\nIngrese la edad de Juan: "); scanf("%d", &EdadJ); EdadAl = 2*EdadJ/3; EdadA = 4*EdadJ/3; Edadm = EdadJ + EdadAl + EdadA; printf("Las edades son:\n"); printf("Alberto: %d\n", EdadAl); printf("Juan: %d\n", EdadJ); printf("Ana: %d\n", EdadA); printf("Madre: %d\n", Edadm); return 0; }

7. Elabore un programa que lea un número entero negati vo e imprima el número y el positivo del mismo. #include <stdio.h> int main(int argc, char *argv[]) { int numero, npos; printf("\nIngrese el numero negativo: "); scanf("%d", &numero); npos = -1 * numero; printf("\n\nNumero ingresado es: %d", numero); printf("\nEl numero positivo es: %d\n\n", npos); return 0; }

Page 36: Apuntes de Lenguaje C - ING.KARINA ESQUIVEL ... INTRODUCCION C es un lenguaje de programación estructurado de propósito general. Sus instrucciones constan de términos que se parecen

35

8. Elabore un algoritmo que lea un número y obtenga su cuadrado, su cubo y su raíz cuadrada. #include <stdio.h> #include <math.h> int main(int argc, char *argv[]) { int num, cuad, cubo; double raiz; printf("\n\nIngrese un numero: "); scanf("%d",&num); cuad = pow (num,2); cubo = pow (num,3); raiz = sqrt(num); printf("El cuadrado de %d es: %d\n", num, cuad); printf("El cubo de %d es: %d\n", num, cubo); printf("La raiz cuadrada de %d es: %g\n", num, rai z); return 0; }

Bibliografía

� Programación en C. Byron Gottfried. 2da Edición Rev isada. Editorial McGraw Hill.

� Introducción a la programación con C. Andrés Marzal , Isabel Gracia. Edición Internet. 2003