Unidad Curricular: Estructuras Dinmicas Gua !:Introduccin a "en#ua$e C Lenguaje C: Principios %n este captulo se ofrece una &reve 'istoria del desarrollo del len#ua$e C ( se consideran tam&i)n sus caractersticas* %n el resto del captulo se ven los aspectos &sicos de los pro#ramas de C+ tales como su estructura+ la declaracin de varia&les+ tipos de datos ( operadores* Lenguaje C: Orgenes %l proceso de desarrollo del len#ua$e C se ori#ina con la creacin de un len#ua$e llamado BCP"+ ,ue fue desarrollado por -artin .ic'ards* %l BCP" tuvo influencia en un len#ua$e llamado B+ el cual se us en !/01 ( fue inventado por 2en 3'ompson ( ,ue permiti el desarrollo de C en !/0!+ el cual lo invent e implement 4ennis .itc'ie* Para !/05 el sistema operativo U6I7 esta&a casi totalmente escrito en C* 4urante muc'os a8os el estndar para C fue la versin 9 del sistema operativo U6I7+ documentada en ::3'e C Pro#rammin# "an#ua#e;; escrito por Brian <* 2erni#'an and 4ennis -* .itc'ie in !/0= com>nmente referido como 2?.* Posteriormente se 'icieron varias implementaciones las cuales mostra&an las si#uientes tendencias: 6uevas caractersticas 4iferencias de m,uinas 4iferencias de productos %rrores en los compiladores -alas implementaciones %sto ori#in ,ue en el verano de !/=5 se esta&leciera un comit) para resolver estas discrepancias+ el cual empez a tra&a$ar en un estndar @6SI C+ la cual fue completada en !/==* Lenguaje C: Caractersticas @l#unas de las caractersticas ms importantes ,ue definen el len#ua$e ( ,ue 'an permitido ,ue sea tan popular+ como len#ua$e de pro#ramacin son: 3ama8o pe,ue8o* Uso eAtensivo de llamadas a funciones* Comandos &reves Bpoco tecleoC* "en#ua$e estructurado* Pro#ramacin de &a$o nivel Bnivel &itC Implementacin de apuntadores D uso eAtensivo de apuntadores para la memoria+ arre#los+ estructuras ( funciones "as diversas razones por la cual se 'a convertido en un len#ua$e de uso profesional son: %l uso de constructores de alto nivel* %l poder mane$ar actividades de &a$oDnivel*
Universidad Bolivariana de Venezuela PFG Informtica para la Gestin Social Unidad Curricular: Estructuras Dinmicas Gua !:Introduccin a "en#ua$e C %l #enerar pro#ramas eficientes* "a posi&ilidad de poder ser compilado en una variedad de computadoras+ con pocos cam&ios Bporta&ilidadC* Un punto en contra es ,ue tiene una deteccin po&re de errores+ lo cual en ocasiones es pro&lemtico para los principiantes* Lenguaje C: Estructura de un programa en C Un pro#rama de C tiene &sicamente la si#uiente forma: Comandos del preprocesador* 4efiniciones de tipos* Prototipos de funciones D declara el tipo de funcin ( las varia&les pasadas a la misma* Varia&les Funciones Para un pro#rama se de&e tener una funcin main()* Una funcin tiene la forma: Si la definicin del tipo es omitida+ C asume ,ue la funcin re#resa un tipo entero* Nota: "o anterior puede ser una fuente de pro&lemas en un pro#rama* @ continuacin se muestra un primer pro#rama: 6E3@S: C re,uiere un punto ( coma al final de cada sentencia* printf es una funcin estndar de C+ la cual es llamada en la funcin main()* \n si#nifica salto de lnea* Salida formateada* tipo nombre_de_la_funcion (parmetros) { variables locales
sentencias de C
} /* Programa ejemplo */ main() {
printf( "ienvenido al primer taller de !enguaje C"n" )# e$it (%)#
}
Universidad Bolivariana de Venezuela PFG Informtica para la Gestin Social Unidad Curricular: Estructuras Dinmicas Gua !:Introduccin a "en#ua$e C exit() es tam&i)n una funcin estndar ,ue 'ace ,ue el pro#rama termine* %n el sentido estricto no es necesario (a ,ue es la >ltima lnea de main() ( de cual,uier forma terminar el pro#rama* %n caso de ,ue se 'u&iera llamado a la funcin printf de la si#uiente forma: printfBF*Gn*!Gn**HGn***5GnFCI "a salida tendra la si#uiente forma: *! **H ***5 Lenguaje C: Variables C tiene los si#uientes tipos de datos simples: Tabla 2.1: 3ipos de C Tipo Tamao (bytes) Lmite inferior Lmite superior c'ar ! DD DD unsi#ned c'ar ! s'ort int H unsi#ned s'ort int H Blon#C int J float J dou&le = "os tipos de datos &sicos tienen varios modificadores ,ue les preceden* Se usa un modificador para alterar el si#nificado de un tipo &ase para ,ue enca$e con las diversas necesidades o situaciones* "os modificadores son: signed+ unsigned+ long ( short* %n los sistemas U6I7 todos los tipos int son long int+ a menos ,ue se especifi,ue eAplcitamente short int* Nota: no 'a( un tipo &ooleano en C DD se de&er usar char+ int o a>n me$or unsigned char* signed+ unsigned+ long ( short pueden ser usados con los tipos char e int* @un,ue es permitido el uso de signed en enteros+ es redundante por,ue la declaracin de entero por defecto asume un n>mero con si#no*
Universidad Bolivariana de Venezuela PFG Informtica para la Gestin Social Unidad Curricular: Estructuras Dinmicas Gua !:Introduccin a "en#ua$e C Para declarar una varia&le en C+ se de&e se#uir el si#uiente formato: tipo lista_variables; tipo es un tipo vlido de C ( lista_variables puede consistir en uno o ms indentificadores separados por una coma* Un identificador de&e comenzar con una letra o un #uin &a$o* %$emplo: Lenguaje C: Variables !e"inici#n de Variables $lobales Una vari&le #lo&al se declara fuera de todas las funciones+ inclu(endo a la funcin main()* Una varia&le #lo&al puede ser utilizada en cual,uier parte del pro#rama* Por e$emplo: %s tam&i)n posi&le preinicializar varia&les #lo&ales usando el operador de asi#nacin + por e$emplo: Kue es lo mismo ,ue: int i& j& '# float $&(&)# c*ar c*# s*ort numero& suma# int numerogr& sumagr# c*ar letra# main() { +++ } float suma, %+%# int sumagr, %# c*ar letra, -.-# main() { +++ } float suma# int sumagr# c*ar letra# main() { suma , %+%# sumagr, %# letra , -.-# +++ }
Universidad Bolivariana de Venezuela PFG Informtica para la Gestin Social Unidad Curricular: Estructuras Dinmicas Gua !:Introduccin a "en#ua$e C 4entro de C tam&i)n se permite la asi#nacin m>ltiple usando el operador + por e$emplo: a L & L c L d L 5I ***,ue es lo mismo+ pero ms eficiente ,ue: a L 5I & L 5I c L 5I d L 5I "a asi#nacin m>ltiple se puede llevar a ca&o+ si todos los tipos de las varia&les son i#uales* Se pueden redefinir los tipos de C usando typedef* Como un e$emplo de un simple uso se considera como se crean dos nuevos tipos real ( letra* %stos nuevos tipos pueden ser usados de i#ual forma como los tipos predefinidos de C* Lenguaje C: Variables Lectura % Escritura de &ariables %l len#ua$e C usa salida formateada* "a funcin printf tiene un caracter especial para formatear BMC DD un caracter ense#uida define un cierto tipo de formato para una varia&le* !c caracteres !s cadena de aracteres !d enteros !f flotantes Por e$emplo: printfBFMc Md MfF+c'+i+ACI "a sentencia de formato se encierra entre " "+ ( ense#uida las varia&les* @se#urarse ,ue el orden de formateo ( los tipos de datos de las varia&les coincidan* scanf() es la funcin para entrar valores a varia&les* Su formato es similar a printf* Por e$emplo: scanfBFMc Md Mf MsF+?c'+ ?i+ ?A+ cadCI t(pedef float real# t(pedef c*ar letra# /* /eclaracion de variables usando el nuevo tipo */ real suma,%+%# letra sig_letra#
Universidad Bolivariana de Venezuela PFG Informtica para la Gestin Social Unidad Curricular: Estructuras Dinmicas Gua !:Introduccin a "en#ua$e C E&servar ,ue se antepone # a los nom&res de las vari&les+ eAcepto a la cadena de caracteres* %n la proAima prctica ,ue trata so&re apuntadores se revisar ms a fondo el uso de este operador* Lenguaje C: Constantes @6SI C permite declarar constantes* Cuando se declara una constante es un poco parecido a declarar una varia&le+ eAcepto ,ue el valor no puede ser cam&iado* "a pala&ra clave const se usa para declarar una constante+ como se muestra a continuacin: const a L !I int a L HI Notas: Se puede usar const antes o despu)s del tipo* %s usual inicializar una constante con un valor+ (a ,ue no puede ser cam&iada de alguna otra forma* "a directiva del preprocesador $define es un m)todo ms fleAi&le para definir constantes en un pro#rama* Frecuentemente se ve la declaracin const en los parmetros de la funcin* "o anterior simplemente indica ,ue la funcin no cam&iara el valor del parmetro* Por e$emplo+ la si#uiente funcin usa este concepto: char %strcpy(char %dest& const char %orig); %l se#undo ar#umento orig es una cadena de C ,ue no ser alterada+ cuando se use la funcin de la &i&lioteca para copiar cadenas* Lenguaje C: Operadores 'ritm(ticos "o mismo ,ue en otros len#ua$es de pro#ramacin+ en C se tienen los operadores aritm)ticos ms usuales B' suma+ ( resta+ % multiplicacin+ ) divisin ( ! mduloC* %l operador de asi#nacin es + por e$emplo: i*; ch+y+; Incremento '' ( decremento (( unario* "os cuales son ms eficientes ,ue las respectivas asi#naciones* Por e$emplo: x'' es ms rpido ,ue xx',* "os operadores '' ( (( pueden ser prefi$os o postfi$os* Cuando son prefi$os+ el valor es calculado antes de ,ue la eApresin sea evaluada+ ( cuando es postfi$o el valor es calculado despu)s ,ue la eApresin es evaluada* %n el si#uiente e$emplo+ ''- es prefi$o ( (( es postfi$o: int A+(+zI
Universidad Bolivariana de Venezuela PFG Informtica para la Gestin Social Unidad Curricular: Estructuras Dinmicas Gua !:Introduccin a "en#ua$e C mainBC N ALB B OOz C D B (DD C C M !11I P Kue es e,uivalente a: int A+(+zI mainBC N zOOI A L B zD( C M !11I (DDI P %l operador ! Bmdulo o residuoC solamente tra&a$a con enteros+ aun,ue eAiste una funcin para flotantes B!9*! fmod() C de la &i&lioteca matemtica* %l operador divisin ) es para divisin entera ( flotantes* Por lo tanto 'a( ,ue tener cuidado* %l resultado de x . ) /; es uno+ a>n si x es declarado como float* "a re#la es: si am&os ar#umentos en una divisin son enteros+ entoces el resultado es entero* Si se desea o&tener la divisin con la fraccin+ entonces escri&irlo como: x .01 ) /; o x . ) /01 ( a>n me$or x .01 ) /01* Por otra parte+ eAiste una forma ms corta para eApresar clculos en C* Por e$emplo+ si se tienen eApresiones como: i i ' .; o x x % (y ' /); + pueden ser reescritas como: "o cual es e,uivalente+ pero menos eficiente ,ue: Por lo ,ue podemos reescri&ir las eApresiones anteriores como: i ' .; ( x % y ' /; respectivamente* Lenguaje C: Operadores de Comparaci#n %l operador para pro&ar la i#ualdad es + por lo ,ue se de&er tener cuidado de no escri&ir accidentalmente slo + (a ,ue: if ( i 2 ) 000 %s una sentencia le#al de C Bsintcticamente 'a&lando aun,ue el compilador avisa cuando se empleaC+ la cual copia el valor de ::2;; en ::i;;+ lo cual ser interpretado como V%.4@4%.E+ si 2 es diferente de cero*
Universidad Bolivariana de Venezuela PFG Informtica para la Gestin Social Unidad Curricular: Estructuras Dinmicas Gua !:Introduccin a "en#ua$e C 4iferente es 3+ otros operadores son: 4 menor ,ue+ 5 ma(or ,ue+ 4 menor ,ue o i#ual a ( 5 Bma(or ,ue o i#ual aC* Lenguaje C: Operadores L#gicos "os operadores l#icos son usualmente usados con sentencias condicionales o relacionales+ los operadores &scios l#icos son: ## Q l#ico+ 66 E l#ico ( 3 ne#acin* Lenguaje C: Orden de Precedencia %s necesario ser cuidadosos con el si#nificado de eApresiones tales como a ' b % c+ dependiendo de lo ,ue se desee 'acer (a ' b) % c o a ' (b % c) 3odos los operadores tienen una prioridad+ los operadores de ma(or prioridad son evaluados antes ,ue los ,ue tienen menor prioridad* "os operadores ,ue tienen la misma prioridad son evaluados de iz,uierda a derec'a+ por lo ,ue: a ( b ( c es evaluado como (a ( b) ( c 7rioridad 8perador(es) -s alta ( ) 9 : (5 3 ; '' (( ( BtipoC % # sizeof % ) ! ' ( 44 55 4 4 5 5 3 # < 6 ## 66 = ' ( % ) -s &a$a & 4e acuerdo a lo anterior+ la si#uiente eApresin: a 4 ,1 ## / % b 4 c
Universidad Bolivariana de Venezuela PFG Informtica para la Gestin Social Unidad Curricular: Estructuras Dinmicas Gua !:Introduccin a "en#ua$e C %s interpretada como: (a 4 ,1) ## ( (/ % b) 4 c ) ( a L & L !1 R 9 O HI como a L B & L B !1 R 9 C O H CI Ejercicios Proupuestos. %scri&ir pro#ramas en C para 'acer las si#uientes tareas: !*"eer la entrada de dos n>meros ( mostrar el do&le producto del primero menos la mitad del se#undo* H*"ea ( escri&a su nom&re+ apellido paterno+ apellido materno ( matricula en un formato adecuado* 5*%scri&ir un pro#rama para leer un ::flotante;; ,ue representa un n>mero de #rados Celsius+ e imprime como un ::flotante;; la temperatura e,uivalente en #rados Fa'ren'eit* "a salida puede ser de la si#uiente forma: ,1101 grados >elsius son /,/01 grados ?ahrenheit0 J*%scri&ir un pro#rama para imprimir varias veces el e$ercicio H* Puede usar varias instrucciones printf+ con un caracter de nueva lnea en cada una+ o una instruccin con varios caracteres nueva lnea en la cadena de formateo* 9*%scri&ir un pro#rama ,ue lea el radio de un crculo como un n>mero flotante ( muestre el rea ( el permetro del crculo* S*4ados ciertos centmetros como entrada de tipo flotante+ imprimir su e,uivalencia a pies BenterosC ( pul#adas Bflotante+ ! decimalC+ dando las pul#adas con una precisin de un lu#ar decimal Suponer 2.54 centmetros por pul#ada+ ( 12 pul#adas por pie* Si la entrada es 555*5+ el formato de la salida de&er ser: 555*5 centmetros son !1 pies !!*H pul#adas*
Universidad Bolivariana de Venezuela PFG Informtica para la Gestin Social Unidad Curricular: Estructuras Dinmicas Gua !:Introduccin a "en#ua$e C