el lenguaje de programación c (pt. 1)ags/oc/downloads/apuntes de...organización de computadoras -...

89
Organización de Computadoras Organización de Computadoras Depto. Cs. e Ing. Depto. Cs. e Ing. de de la Comp. la Comp. Universidad Nacional Universidad Nacional del del Sur Sur El Lenguaje de El Lenguaje de Programación C Programación C (Pt. 1) (Pt. 1)

Upload: others

Post on 03-Jul-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de ComputadorasOrganización de ComputadorasDepto. Cs. e Ing. Depto. Cs. e Ing. dede la Comp. la Comp.Universidad NacionalUniversidad Nacional deldel SurSur

El Lenguaje de El Lenguaje de Programación CProgramación C

(Pt. 1)(Pt. 1)

Page 2: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 22

CopyrightCopyrightCopyright © 2011-2018 A. G. Stankevicius

Copyright © 2019 F. Joaquín

Se asegura la libertad para copiar, distribuir y modificar este documento de acuerdo a los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation, sin secciones invariantes ni textos de cubierta delantera o trasera

Una copia de esta licencia está siempre disponible enla página http://www.gnu.org/copyleft/fdl.html

Page 3: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 33

ContenidosContenidosIntroducción al paradigma imperativo

Sentencias de control

Entrada y salida estándar

Gestión de archivos

Pasaje de parámetros

Tipos de datos estructurados

Gestión de la memoria dinámica

Estructuras de datos dinámicas

Page 4: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 44

Paradigmas de programaciónParadigmas de programaciónEl paradigma al cual pertenece un lenguaje nos da indicios acerca de distintas cuestiones:

De qué manera resulta más conveniente encararel proceso de resolución de un problema

Qué abstracciones tenemos a disposición para implementar los distintos componentes dela solución propuesta

Finalmente, la elección del paradigma también determina la manera en que se lleva adelante la computación

Page 5: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 55

Paradigmas de programaciónParadigmas de programaciónA partir de las características fundamentales,los lenguajes de programación se pueden clasificar en distintos paradigmas:

Paradigma imperativo

Paradigma funcional

Paradigma lógico

Paradigma orientado a objetos

El lenguaje de programación C perteneceal primero

Page 6: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 66

Paradigma imperativoParadigma imperativoAnalicemos en particular el caso del paradigma imperativo:

Para resolver un problema debemos postular un algoritmo, esto es, una secuencia de instrucciones simples, que conduzca a la solución del mismo

Podemos hacer uso de variables, asignaciones y contamos con tres poderosos constructores:la secuencia, el condicional y la repetición

Este paradigma sanciona que la computación se lleva adelante a través de la ejecución de instrucciones relativamente simples

Page 7: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 77

Paradigma imperativoParadigma imperativoEste paradigma recibe su nombre por el tipode instrucciones simples que emplea: verbos conjugados en modo imperativo

Por ejemplo:

printf(): imprima con el siguiente formato los datos consignados a continuación

exit(): finalice la ejecución inmediatamente e informe el siguiente nivel de error

Page 8: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 88

Compiladores vs. intérpretesCompiladores vs. intérpretesLenguajes interpretados:

Las instrucciones se transforman en lenguaje máquina a medida que se ejecuta el programa

Los pequeños cambios pueden probarse rápidamente

Lenguajes compilados:

Los programas son traducidos en su totalidad a lenguaje máquina antes de ser ejecutados

Para probar un pequeño cambio se debe compilar todo nuevamente

Hay combinación de ambos métodos

Page 9: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 99

Origen del lenguajeOrigen del lenguajeEl lenguaje C fue diseñado porDennis Ritchie en el año 1972

Deriva de un lenguaje anteriorllamado B

Se usó para implementar granparte del sistema operativo UNIX

Hoy en día se lo sigue utilizandopara implementar todo tipo de sistemas:

Por caso, el sistema operativo GNU/Linux

Page 10: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1010

Filosofía de diseñoFilosofía de diseñoC es un lenguaje de programación minimalista

Intenta satisfacer múltiples objetivos:

Poder ser compilado usando un compilador sencilloy simple

Brindar acceso de bajo nivel al hardware de la computadora

Poder traducir cada instrucción de C en pocas instrucciones de lenguaje máquina

No requerir mucha ayuda adicional en tiempode ejecución

Page 11: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1111

C hoy – Mitos de CC hoy – Mitos de C“C no se usa” ¿Por qué programar en C?

Sistemas Operativos (casi todos, GNU/Linux, OS X, Windows, Android, QNX, Solaris)

Java Virtual Machine (si, está escrita en C)

Sistemas Embebidos (Arduino, Galileo, Raspberry)

Controladores de dispositivos (drivers)

Motores de bases de datos (MySQL, PostgreSQL, etc.)

Cualquier sistema de alto desempeño

Page 12: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1212

C hoy – Mitos de CC hoy – Mitos de C“No hay trabajo en C”- Según Spectrum IEEE:

https://spectrum.ieee.org/at-work/innovation/the-2018-top-programming-languages

Page 13: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1313

Características de CCaracterísticas de CCuenta con excelentes compiladores optimizantes, por caso el gcc

El código escrito en este lenguaje es altamente portable

Ninguna característica del sistema operativose ve reflejada en el lenguaje

Page 14: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1414

Características de CCaracterísticas de CElementos de un programa:

Palabras reservadas (muy pocas)

Variables y funciones definidas por el programador

Funciones de librería estándar

Los bloques de código se delimitan entre llaves

Al igual que UNIX, el lenguaje C es sensible amayúsculas y minúsculas (case sensitive)

Por ejemplo, fact() y Fact() denotan a dos funciones diferentes

Page 15: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1515

Características de CCaracterísticas de CEl lenguaje C es un lenguaje compilado

Ejemplos: Pascal o Modula2

Otros lenguajes de programación son en cambio interpretados

Ejemplos: Prolog o Haskell

Por último, también existen lenguajes compilados e interpretados a la vez:

Ejemplo: Java

Page 16: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1616

Características de CCaracterísticas de CTodas las sentencias terminan en punto y coma

Los espacios en blanco y los tabuladores son ignorados

Podemos (¡debemos!) indentar adecuadamenteel código

C cuenta con un preprocesador, que realiza alteraciones en el código (indicadas por el programador) antes de la compilación

Page 17: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1717

Código fuente CCódigo fuente CEl código fuente en C tiene tres tiposde contenido:

Comentarios

Código de programa (escrito en C)

Directivas al preprocesador

Page 18: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1818

Nuestro primer programaNuestro primer programa/* Clásico hola mundo escrito en C para comprensión de los alumnos de OC */

#include <stdio.h>

int main() {

// Una llamada a función

printf(“¡Hola mundo!\n”);

return 0;

}

Page 19: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 1919

ComentariosComentarios/* Clásico hola mundo escrito en C para comprensión de los alumnos de OC */

#include <stdio.h>

int main() {

// Una llamada a función

printf(“¡Hola mundo!\n”);

return 0;

}

Page 20: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2020

Código de programaCódigo de programa/* Clásico hola mundo escrito en C para comprensión de los alumnos de OC */

#include <stdio.h>

int main() {

// Una llamada a función

printf(“¡Hola mundo!\n”);

return 0;

}

Page 21: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2121

Directivas al preprocesadorDirectivas al preprocesador/* Clásico hola mundo escrito en C para comprensión de los alumnos de OC */

#include <stdio.h>

int main() {

// Una llamada a función

printf(“¡Hola mundo!\n”);

return 0;

}

Page 22: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2222

SentenciasSentenciasCada sentencia finaliza con ;

Las sentencias pueden encerrarse entre { }

Una sentencia es una expresión

/* La sentencia a continuación compila,

pero su resultado no tiene efectos */

2 + 2;

Page 23: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2323

AsignaciónAsignaciónLa asignación es una expresión y puede ser parte de una expresión mas compleja

Su operador es el “=”El primer elemento a izquierda debe ser el nombrede una variable

Tiene asociatividad a derecha

El resultado de la evaluación de una asignación, además del cambio en la variable, es el valor asignado a la variable

Page 24: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2424

AsignaciónAsignaciónLa asignación como operador da una gran flexibilidad, si bien es a su vez es fuente de problemas (para nosotros los programadores):

a = b = 2; // a y b terminan con el valor 2

a = (b = 2) + 2; /* b obtiene el valor 2 y

a el valor 4 */

Page 25: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2525

Declaración de variablesDeclaración de variablesLas variables se declaran indicando su tipo seguido de su nombre:

char letra;

int contador;

Page 26: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2626

Declaración de variablesDeclaración de variablesDeclaración múltiple es posible separando las distintas variables con “,”:

char letra, inicial;

int i, j, k;

Declaración e inicialización se pueden combinar usando el operador de asignación:

char letra = ’A’;

int i = 1, j = 10;

Page 27: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2727

Tipos elementalesTipos elementalesLos tipos elementales son:

Enteros (int)

Reales en precisión simple (float)

Reales en precisión doble (double)

Caracteres y enteros de 1 byte (char)

Punteros (*)

Nótese que no existen los booleanos ni las cadenas de caracteres como tipos elementales

Page 28: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2828

ModificadoresModificadoresLos tipos elementales admiten distintos modificadores:

unsigned: para representar sólo valores positivos

Ej: unsigned int contador;

signed: para representar valores positivos y negativos (este es el modificador activo por defecto)

Ej: signed char letra;

long: para representar enteros largos (sólo puede aplicarse al tipo int)

Ej: long int balance;

Page 29: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 2929

Alcance de una declaraciónAlcance de una declaraciónEn el lenguaje C no es posible anidar funciones

En consecuencia, sólo hay dos alcances posibles para una declaración:

Alcance global: La declaración es visible desde todas las funciones del programa

Alcance local: La declaración sólo es visible dentro de la función en la que aparece y tiene precedencia por sobre las declaraciones globales

Page 30: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3030

Alcance de una declaraciónAlcance de una declaraciónint x, y;

int main() {

float x, z;

/* Aquí y sigue siendo entero, pero x y z

ahora son reales */

}

/* x e y vuelven a ser enteros, y además z

no existe por fuera de la función main() */

Page 31: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3131

Expresiones constantesExpresiones constantesFormulación de expresiones constantes:

Una constante real (float) se puede expresar tanto en notación decimal (2.56) como en notación científica (2.45E-4)

Una constante de tipo doble precisión (long) se denota agregando una L al final (200L)

Una constante de tipo carácter (char) se define directamente usando comillas simples (‘a’)

Una constante de tipo cadena de caracteres se define usando comillas dobles (“hola!”)

Page 32: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3232

Expresiones constantesExpresiones constantesUna constante entera puede expresarse en las bases:

Decimal, por ejemplo: 15

Hexadecimal, anteponiento 0x a la declaración:0xF o 0xf (esta declaración es case insensitive)

Octal, anteponiendo 0 a la declaración: 017

Binario, anteponiendo 0b a la declaración: 0b1111

Page 33: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3333

Expresiones constantesExpresiones constantesLas constantes de tipo carácter especial se definen usando secuencias de escape:

‘\n’: línea nueva

‘\r’: retorno de carro

‘\t’: tabulador

‘\\’: barra invertida

‘\0’: carácter nulo

‘\nnn’: carácter ASCII nnn (en octal)

‘\xnn’: carácter ASCII nn (en hexadecimal)

Page 34: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3434

Conversión explícita de tiposConversión explícita de tiposLa conversión explícita de tipos (type casting) de expresiones y variables se denota de la siguiente forma:

int a; float b; char c;

b = 65.0; /* probar qué pasa si acá

ponemos directamente 65 */

a = (int) b; // a ahora vale 65

c = (char) a; /* c ahora vale ‘A’

(esto es, el ASCII 65) */

Page 35: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3535

Operadores aritméticosOperadores aritméticosLos operadores aritméticos básicos disponibles son los usuales:

Suma (+)

Resta (–)

Multiplicación (*)

División (/)

Módulo o resto (%)

Page 36: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3636

División entera vs. realDivisión entera vs. realEl tipo del resultado de la operación de división depende enteramente del tipo de los operandos involucrados en la expresión

Por ejemplo:

4 / 3 da 1 (entero)

4.0 / 3 da 1.333 (real)

4 / 3.0 da 1.333 (real)

4.0 / 3.0 da 1.333 (real)

Page 37: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3737

Pre y post incrementoPre y post incrementoLos operadores unarios (++) y (--) representan las operaciones de incremento y decremento respectivamente

x++; y ++x; equivalen a la asignación x = x + 1;

y--; y --y; equivalen a la asignación y = y – 1;

Por caso, las notaciones sufijas y prefijas:

a=3; b=a++; // a vale 4, b vale 3

a=3; b=++a; // a vale 4, b vale 4

No cualquier cosa es válida: --b=a++;

Page 38: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3838

Variantes de asignaciónVariantes de asignaciónExisten diversas variantes del operador de asignación:

x += y; es equivalente a x = x + y;

x –= y; es equivalente a x = x – y;

x *= y; es equivalente a x = x * y;

x /= y; es equivalente a x = x / y;

El lado izquierdo de una asignación debe necesariamente ser del tipo adecuado

Caso contrario, usar una conversión explícita de tipo

Page 39: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 3939

Operaciones a nivel de bitOperaciones a nivel de bitEl lenguaje C brinda un conjunto de operadores numéricos a nivel de bit:

Negación: ~x;

Conjunción: x & y;

Disyunción: x | y;

Disyunción exclusiva: x ^ y;

Desplazamiento a izquierda: x << n;

Desplazamiento a derecha: x >> n;

Page 40: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4040

Operaciones a nivel de bitOperaciones a nivel de bitint x = 26;

int y = 61;

x & y;

x | y;

~x;

x >> 2;

00011010 = 26

00111101 = 61

00011000 = 24

00111111 = 63

11100101 = -27

00000110 = 6

Page 41: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4141

Operaciones a nivel de bitOperaciones a nivel de bitExisten diversas variantes del operador de asignación a nivel de bits:

x &= y; es equivalente a x = x & y;

x |= y; es equivalente a x = x | y;

x <<= y; es equivalente a x = x << y;

x >>= y; es equivalente a x = x >> y;

Page 42: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4242

Operadores relacionalesOperadores relacionalesLos operadores relacionales disponibles son:

Igual (==)

Distinto (!=)

Mayor (>) y mayor o igual (>=)

Menor (<) y menor o igual (<=)

El resultado de una comparación es un entero, el cual se interpreta de la siguiente manera:

El cero denotará el valor falso

Cualquier otro valor denotará el valor verdadero

Page 43: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4343

Operadores lógicosOperadores lógicosSobre los datos de tipo booleano (es decir, los enteros), se definen los siguientes operadores:

La conjunción lógica (&&)

La disyunción lógica (||)

La negación lógica (!)

Por caso:

/* ¿a cuánto evalúa la siguiente expresión?*/

rsta = (3 > 2 || 5 == 4) && !1;

Page 44: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4444

Expresiones en corto-circuitoExpresiones en corto-circuitoEl lenguaje C implementa un modelo de evaluación perezosa para las expresiones booleanas

Por caso:

a = (3 > 2 || w == 4);

/* la subexpresión w == 4

nunca llega a evaluarse */

// ¿por qué razón?

Page 45: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4545

Sentencia condicionalSentencia condicionalLa sentencia condicional tiene la siguiente sintaxis:

if (condición) {

// código a ejecutarse si

// la condición se satisface

} else {

// código a ejecutarse en

// caso contrario.

}

Page 46: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4646

Sentencia condicionalSentencia condicional#include <stdio.h>

main() {

int a = 2;

if (a % 2) {

printf(“dos es impar\n”);

} else {

printf(“dos es par\n”);

}

}

Page 47: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4747

Sentencia condicionalSentencia condicional#include <stdio.h>

main() {

int a = 2;

if (a % 2)

printf(“dos es impar\n”);

else

printf(“dos es par\n”);

}

Page 48: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4848

Expresiones condicionalesExpresiones condicionalesLas construcciones del siguiente tipo

if (condición)

rsta = exp-1;

else

rsta = exp-2;

se pueden abreviar en el lenguaje C empleando expresiones condicionales.

Sintaxis:

rsta = condición ? exp-1 : exp-2;

Page 49: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 4949

Expresiones condicionalesExpresiones condicionales#include <stdio.h>

main() {

int a = 2;

printf(“dos es %s\n”,

a % 2 ? “impar” : “par”);

}

Page 50: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5050

Sentencias de repeticiónSentencias de repeticiónLa sentencia de repetición for es muy flexible:

for (cont = 0; cont < tope; cont++) {

/* bloque de sentencias que se

repiten mientras se cumpla la

condición de permanencia */

}

Page 51: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5151

Sentencias de repeticiónSentencias de repetición#include <stdio.h>

main() {

int cont;

for (cont = 0; cont < 10; cont++) {

printf("%i al cuadrado es %i\n",

cont, cont * cont);

} // ¿llegará hasta 10 * 10?

}

Page 52: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5252

Sentencias de repeticiónSentencias de repeticiónTambién es posible repetir un fragmentode código mientras se cumpla una cierta condición:

while (condición) {

/* bloque de sentencias que se repiten

cero o más veces mientras se cumpla la

condición de permanencia */

}

Page 53: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5353

Sentencias de repeticiónSentencias de repetición#include <stdio.h>

main() {

int cont = 0;

while (cont < 10) {

printf("%i al cuadrado es %i\n",

cont, cont * cont);

cont++;

} // ahora ¿llegará hasta 10 * 10?

}

Page 54: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5454

Sentencias de repeticiónSentencias de repeticiónPor último, existe una segunda variante parala sentencia de repetición basada en la satisfacción de una condición:

do {

/* bloque de sentencias que se repinte

al menos una vez mientras se cumpla la

condición de permanencia */

} while (condición);

Page 55: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5555

Sentencias de repeticiónSentencias de repetición#include <stdio.h>

main() {

int cont = 0;

do {

printf("%i al cuadrado es %i\n",

cont, cont * cont);

cont++;

} while (cont < 10); // ¿y ahora?

}

Page 56: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5656

Sentencias break y continueSentencias break y continueAl estar dentro del ámbito de una sentenciade repetición, se puede hacer uso de dos sentencias de control especiales:

break: esta sentencia permite romper una repetición, retomando la ejecución en la instrucción inmediata siguiente

continue: esta sentencia permite indicar que la iteración actual ya fue completada y que se desea considerar la siguiente iteración

Page 57: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5757

Sentencias break y continueSentencias break y continue#include <stdio.h>

main() {

int cont = 0;

do {

printf("%i visitado\n", cont);

cont++;

if (cont > 10)

break;

} while (1); // ¿cuándo corta?

}

Page 58: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5858

Sentencias break y continueSentencias break y continue#include <stdio.h>

main() {

int cont = 0;

do {

cont++;

if ((cont % 2) == 0)

continue;

printf("%i visitado\n", cont);

} while (cont < 10); // ¿qué imprime?

}

Page 59: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 5959

Alternativas múltiplesAlternativas múltiples switch (alternativa) {

case caso-1: { // bloque-1 }

case caso-2: { // bloque-2 }

...

case caso-n: { // bloque-n }

default: { // bloque por defecto }

}

Page 60: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 6060

Alternativas múltiplesAlternativas múltiples#include <stdio.h>

main() {

char letra = '\x42';

switch (letra) {

case 'A': { printf("A\n"); }

case 'B': { printf("A o B\n");

break; }

case 'C': { printf("C\n"); }

}

}

Page 61: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 6161

Alternativas múltiplesAlternativas múltiplesSólo acepta tipos simples

switch (alternativa) {

case “caso 1”: // No compila!

...

}

Page 62: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 6262

Continuamos la próxima claseContinuamos la próxima clase

¿¿Preguntas?Preguntas?

Page 63: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 6363

Llamada a funcionesLlamada a funcionesUna función es llamada dentro de una expresión, con sus parámetros definidos de forma posicional, separados por “,”:

c = suma(a, b);

Como las sentencias son expresiones sin limitaciones, las funciones pueden ser llamadas descartando el resultado. En esencia esto equivale a contar con un procedimiento

suma(a, b);

Page 64: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 6464

Pasaje de parámetrosPasaje de parámetrosPasaje por valor o por copia:

Al pasar un parámetro por valor estamos pasando una copia del contenido, por lo que las modificaciones que haga la rutina en esa copia no se verán reflejadas en el original

Pasaje por referencia:

Al pasar un parámetro por referencia estamos mostrando como acceder a ese argumento pues estamos pasando la dirección en memoria del mismo. Naturalmente, las modificaciones que haga la rutina se ven inmediatamente reflejadas en el original

Page 65: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 6565

Pasaje de parámetrosPasaje de parámetrosSi bien C no cuenta con pasaje de parámetros por referencia, cuenta con un operador que permite simular ese pasaje de parámetros

El operador & determina la dirección en memoriade la expresión a su derecha

Por caso:

int a = 5;

printf("a vale %i\n", a); // ¿por qué %i se

printf("&a vale %p\n", &a); // cambia por %p?

Page 66: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 6666

Definición de funcionesDefinición de funcionesLa definición de una función guarda la siguiente estructura:

tipo nombre (parámetros) {

// cuerpo de la función

}

Page 67: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 6767

Definición de funcionesDefinición de funcionesUna función se invoca al suministrar valores actuales a sus parámetros formales

Recordemos, los parámetros formales son los que figuran en la definición de una función y los actuales son los usados en una invocación en concreto

Los parámetros siempre se pasan por valor

El resultado de la invocación a una función se especifica por medio de la sentencia return

Page 68: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 6868

Definición de funcionesDefinición de funcionesLos procedimientos, si bien no contemplados en el lenguaje, se pueden definir indicando que una cierta función no retorna resultado

Para esto se debe hacer uso del tipo especial void

El control del número y tipo de los parámetros es mínimo

Se puede definir una cosa y luego hacer otra a la hora de la invocación

Las funciones admiten llamadas recursivas

Page 69: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 6969

Definición de funcionesDefinición de funcionesint fact(int n) {

int rsta = 1;

while (n > 1)

rsta *= n--;

return(rsta);

}

int main() {

printf(“%d! = %d\n”, 5, fact(5));

}

Page 70: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 7070

Definición de funcionesDefinición de funcionesvoid f(int* a, int b) { *a = b;}int main() { int x = 5; int y = 1; printf("x = %d\n", x); f(&x, y); printf("x = %d", x); return 0;}

Page 71: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 7171

Definición vs. declaraciónDefinición vs. declaraciónC sólo permite invocar a funciones previamente definidas

¿cómo hacer para definir programas que hagan uso de una recursión cruzada?

Es posible separar espacialmente la declaración de una función de su definición:

La definición explicita el código asociado a la función

La declaración sólo explicita la cabecera o prototipo de la misma

Page 72: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 7272

Definición vs. declaraciónDefinición vs. declaraciónint impar(int n); // prototipo de impar()

int par(int n) { // definición de par()

return !n ? 1 : impar(--n);

}

int impar(int n) { // definición de impar()

return !n ? 0 : par(--n);

}

Page 73: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 7373

Entrada y salida estándarEntrada y salida estándarLas funciones de entrada/salida estándar en C no pertenecen al lenguaje en sí, sino que son provistas por diversas funciones de librería

Recordemos que uno de los objetivo diseño es lograr una alta portabilidad, por lo que el lenguaje debe ser absolutamente independiente del sistema operativo

Por caso,

Funciones de entrada: getchar(), scanf(), etc.

Funciones de salida: putchar(), printf(), etc.

Page 74: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 7474

La función printf()La función printf()La invocación a la función printf() guardala siguiente sintaxis:

printf(

formato-a-utilizar,

exp-1, exp-2, ..., exp-n);

donde:

El formato a utilizar es una cadena que describe cómo mostrar la información

Las expresiones son los datos que se desean mostrar

Page 75: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 7575

La función printf()La función printf()int x = 3; float y = 23.0; char z = ‘A’;

printf(“Hola mundo!!\n”);

printf(“x vale %d\n”, x);

printf(

“y vale %f,\n...y z vale %c.\n”,

y, z);

Page 76: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 7676

Expresiones de formatoExpresiones de formatoEn la E/S estándar, se puede hacer uso de las siguientes expresiones de formato (entre otras):

%c: carácter

%i: entero

%d: entero decimal

%x: entero hexadecimal

%f: real

%p: puntero

%s: cadena de caracteres

Page 77: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 7777

Expresiones de formatoExpresiones de formatoExisten muchas otras expresiones que controlan otros aspectos del formato:

La precisión (número de decimales)

La justificación (a izquierda o a derecha)

Poder escribir ciertos caracteres especiales (por ejemplo, el carácter %)

Consultar la referencia de esta función enla bibliografía recomendada:

“The C Programming Language”, escrito porB. Kernighan y D. Ritchie

Page 78: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 7878

La función scanf()La función scanf()La invocación a la función scanf() guarda la siguiente sintaxis:

scanf(

formato-a-utilizar,

dest-1, dest-2, ..., dest-n);

donde:

El formato a utilizar es una cadena que describe cómo recibir la información

Los destinos son las variables donde se almacenan los datos ingresados

Page 79: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 7979

La función scanf()La función scanf()int x; float y; char z;

printf(“Ingrese un número entero: ”);

scanf(“%d”, &x); // ¡x se modifica!

printf(“\nOtro entero y un real: ”);

scanf(“%u %f”, &x, &y);

printf(“\nAhora un caracter: ”);

scanf(“%c”, &z);

Page 80: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 8080

Gestión de archivosGestión de archivosC comparte la filosofía UNIX en el sentidode considerar prácticamente todo comosi fuera un archivo:

La lectura de información desde un archivo convencional no difiere del ingreso de datosa través del teclado

La escritura de información hacia un archivo convencional no difiere de la salida de datospor pantalla

Page 81: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 8181

Funciones de libreríaFunciones de libreríaC cuenta con diversas funciones de librería sobre archivos:

FILE* fopen(char*, char*): apertura de un archivo para lectura o escritura

int fclose(FILE*): cierre de un archivo

int fprintf(FILE*, ...): escritura con formato

int fscanf(FILE*, ...): lectura con formato

int feof(FILE*): determina si se ha alcanzadoel final de un archivo

Page 82: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 8282

Archivos especialesArchivos especialesTodo programa asocia tres constantes de tipo FILE* por defecto a los siguientes archivos:

stdin: entrada estándar (descriptor 0)

stdout: salida estándar (descriptor 1)

stderr: error estándar (descriptor 2)

Por caso:

fprintf(1, “Usuario: ”);

fscanf(0, “%s”, usuario);

fprintf(stderr, “Error: No válido”);

Page 83: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 8383

Conversión de tiposConversión de tiposC cuenta con diversas funciones de libreríapara asistir al programador en la conversión entre tipos de datos:

int atoi(char*): traduce de strings a enteros

long atol(char*): traduce de strings a enteros largos

double atof(char*): traduce de strings a reales

char* itoa(char*, int): traduce de enterosa strings

Page 84: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 8484

Finalización de un programaFinalización de un programaUn programa finaliza:

Al llegar al final de la función main()

Cuando la función main() invoca un return

Al ejecutar la función exit()(la cual reside en la librería estándar stdlib)

#include <stdlib.h>

int main() {

exit(0);

return 1; // Esto no se ejecutará

}

Page 85: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 8585

Inconvenientes de CInconvenientes de CError en las condiciones

if (a = 1)

printf(“a es verdadero\n”);

else

printf(“a es falso\n”);

Page 86: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 8686

Inconvenientes de CInconvenientes de CEs posible escribir código un tanto críptico:

int **********x; // Puntero a puntero a...

// Copia un arreglo terminado en null a otro

while (*n++=*i++) ;

// Invierte dígitos hexadecimales

i=((n&0x0F)<<4 | (n&0xF0)>>4);

Competencia de quién puede escribir el código más ilegible en C:

http://www.ioccc.org

Page 87: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 8787

Buenas prácticasBuenas prácticasDefinir las constantes como macros

Macros en mayúsculas separados por guiones

#define PI 3.1416

Variables y funciones en minúsculas separadas por guiones

void funcion_de_nombre_largo();

int variable_entera;

Page 88: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 8888

Buenas prácticasBuenas prácticasLargo de las líneas de código: un máximode entre 79 y 100 caracteres

¡¡Que compile sin warnings!!

No realizar asignaciones dentro de expresiones:

a = (b = 2) + 2;

Elegir una convención y respetarla a lo largode todo el código

Page 89: El Lenguaje de Programación C (Pt. 1)ags/OC/downloads/APUNTES DE...Organización de Computadoras - Mg. A. G. Stankevicius 5 Paradigmas de programación A partir de las características

Organización de Computadoras - Mg. A. G. StankeviciusOrganización de Computadoras - Mg. A. G. Stankevicius 8989

¿¿Preguntas?Preguntas?