Programacion en C-capitulo1

35
PROGRAMACION EN C CONTENIDO DEL PRIMER CAPÍTULO Breve Historia de C El lenguaje C lo invento e implemento por primera vez Dennis Ritchie sobre un DEC PDP-11 utilizando el sistema operativo UNIX. C es el resultado de un proceso de desarrollo que empezó con un lenguaje más antiguo llamado BCPL, desarrollado por Martin Richards. BCPL sirvió de base a un lenguaje llamado B, que invento Ken Thompson, y que condujo al desarrollo de C en los años 70. Durante muchos años, el estándar de C fue el que se describía en “ The C programming Language” escrito por Brian Kernighan y Dennis Ritchie. Sin embargo al crecer C en su uso y popularidad se organizo un comité en 1983 un estándar ANSI de C El proceso de estandarización duro 6 años, finalmente el estándar se adopto en 1989 y las primeras copias para el público en general estuvieron disponibles en 1990. Hoy prácticamente todos los compiladores se adaptan al estándar de C que estudiaremos en estos apuntes.(C estándar ANSI) Antes de C existían básicamente dos tipos de lenguajes utilizados para programar computadoras. Uno es el llamado lenguaje ensamblador , que es la representación simbólica de las instrucciones de máquina que ejecuta la computadora. El lenguaje ensamblador es un lenguaje de bajo nivel, ya que el programador está trabajando con las instrucciones reales que ejecutara la computadora. El lenguaje ensamblador no proporciona estructuras de control. Como contraste con el anterior un lenguaje de alto nivel como ayuda al programador, suministra diversas estructuras de control, ordenes de entrada y salía, y además hace la programación más rápida y sencilla.

Transcript of Programacion en C-capitulo1

Page 1: Programacion en C-capitulo1

PROGRAMACION EN C

CONTENIDO DEL PRIMER CAPÍTULO

Breve Historia de C

El lenguaje C lo invento e implemento por primera vez Dennis Ritchie sobre un DEC PDP-11 utilizando el sistema operativo UNIX. C es el resultado de un proceso de desarrollo que empezó con un lenguaje más antiguo llamado BCPL, desarrollado por Martin Richards. BCPL sirvió de base a un lenguaje llamado B, que invento Ken Thompson, y que condujo al desarrollo de C en los años 70.

Durante muchos años, el estándar de C fue el que se describía en “ The C programming Language” escrito por Brian Kernighan y Dennis Ritchie. Sin embargo al crecer C en su uso y popularidad se organizo un comité en 1983 un estándar ANSI de C

El proceso de estandarización duro 6 años, finalmente el estándar se adopto en 1989 y las primeras copias para el público en general estuvieron disponibles en 1990. Hoy prácticamente todos los compiladores se adaptan al estándar de C que estudiaremos en estos apuntes.(C estándar ANSI)

Antes de C existían básicamente dos tipos de lenguajes utilizados para programar computadoras. Uno es el llamado lenguaje ensamblador , que es la representación simbólica de las instrucciones de máquina que ejecuta la computadora. El lenguaje ensamblador es un lenguaje de bajo nivel, ya que el programador está trabajando con las instrucciones reales que ejecutara la computadora. El lenguaje ensamblador no proporciona estructuras de control.

Como contraste con el anterior un lenguaje de alto nivel como ayuda al programador, suministra diversas estructuras de control, ordenes de entrada y salía, y además hace la programación más rápida y sencilla.

Puede que los elementos de un lenguaje de alto nivel no se relacionen de una forma muy directa con el modo en que la computadora ejecuta el programa. Esta separación hace que a menudo los lenguajes escritos en lenguaje de alto nivel sean menos eficientes que los escritos en lenguaje ensamblador. Esta es una de las razones por las que se diseñó inicialmente C. C combina la estructura de un lenguaje de alto nivel con la potencia y eficacia de un lenguaje ensamblador.

Inicialmente, C se principalmente para la creación de software de sistemas, programas que ayudan al funcionamiento del PC. Esto incluye a sistemas operativos, editores, compiladores….etc, posteriormente con el paso del tiempo se empezó a utilizar para realizar programación de uso general.

Page 2: Programacion en C-capitulo1

C++ es una versión ampliada y mejorada de C que soporta programación orientada a objetos ( parecido a Visual Basic 2008).

C frente a C++

Es fácil sentirse confusos entre C y C++ y como se relacionan entre sí. C++ es una versión ampliada de C, y está diseñado para soportar programación orientada a objetos( POO). C++ contiene y soporta todo el lenguaje C, además de un conjunto de extensiones orientada a objetos(C++ es un superconjunto de C).

C++ está edificado sobre los cimiento de C no se puede aprender C++ sin conocer las bases de C.

Funcionamiento de un compilador de C++ con un programa de C

La mayoría de los compiladores pueden gestionar los programas de C y C++, es frecuente ver un compilador anunciado como C/C++, o simplemente como compilador de C++. Todos los compiladores que trabajan en C++ también lo pueden hacer en C.

C soporta el estilo de programación tradicional llamado programación estructurada, que se ha demostrado efectiva desde su creación. C++ está diseñado principalmente para soportar POO que incorpora principios de programación estructurada con el añadido de los objetos. La POO es muy eficaz para determinadas tareas de programación muchos programas no se benefician de su aplicación.

Algunas características del lenguaje C son las siguientes:

Es un lenguaje de propósito general. Este lenguaje se ha utilizado para el desarrollo de aplicaciones tan dispares como: hojas de cálculos, gestores de bases de datos, compiladores, sistemas operativos,

Es un lenguaje de medio nivel. Este lenguaje permite programar a alto nivel (pensando a nivel lógico y no en la máquina física) y a bajo nivel (con lo que se puede obtener la máxima eficiencia y un control absoluto de cuanto sucede en el interior del ordenador).

Es un lenguaje portátil. Los programas escritos en C son fácilmente transportables a otros sistemas.

Es un lenguaje potente y eficiente. Usando C, un programador puede casi alcanzar la eficiencia del código ensamblador junto con la estructura del Algol o Pascal.

2

Page 3: Programacion en C-capitulo1

Como desventajas habría que reseñar que es más complicado de aprender que otros lenguajes como Pascal o Basic.

1ºFUNDAMENTOS DE C

1.1.- Compresión de los componentes de un programa de C

1.2.- Creación y compilación de un programa de C

1.3.- Declaración de variables y asignación de valores

1.4.- Introducción de números desde el teclado

1.5.- Realización de cálculos utilizando expresiones aritméticas

1.6.- Cómo añadir comentarios a un programa

1.7.- Escriba sus propias funciones

1.8.- Utilización de funciones para devolver valores

1.9.- Utilización de argumentos de función

1.10.- Repaso a las palabras clave de C

RESUMEN

Los elementos individuales de un lenguaje de ordenador como C no permanecen aislados, sino en conjunción unos con otros. Por eso, es necesario entender diversos aspectos importantes de C antes de examinar cada elemento del lenguaje C. Su objetivo es proporcionar un conocimiento suficiente de C para que se puedan entender los ejemplos que aparecen en los capítulos siguientes.

No debe preocupar si al avanzar a lo largo de este capítulo algunos puntos no aparecen completamente claros. lo principal que hay que entender es cómo y por qué los programas de los ejemplos se ejecutan del modo en que lo hacen. En este capítulo se aprenderá sobre la estructura básica de un programa de C; sentencias, variables, constantes, funciones…etc.

1.1.- Compresión de los componentes de un programa de C

Todos los programas de C comparten ciertos componentes y rasgos esenciales:

-contienen una o más funciones que a su vez contienen una o más sentencias.

-una función es una subrutina a la que pueden llamar otras partes del programa(son bloques constituyentes de C)

3

Page 4: Programacion en C-capitulo1

-Sentencia, son las partes del programa que realizan las operaciones, se encuentran dentro de las funciones.

Las sentencias terminan con ;

Se pueden situar dos o más sentencias en una línea.

Aquí se muestra la forma más simple de una función de C:

Nombre-de-función(){Secuencia de sentencias}

Funciones:

Se puede llamar a una función con el nombre que se quiera, el nombre se debe componer de:

Letras mayúsculas o minúsculas, C es sensible al tipo de letra ( Mifunc ….. mifunc)

Dígitos del 0 al 9 , y el carácter subrayado

Función importante:

Aunque C puede tener varias funciones la más importante es main()

main() comienza la ejecución del programa

Cuando el programa empieza a ejecutarse, comienza por las sentencias que hay dentro de la función main(), empezando por la primera sentencia que hay después de la llave de apertura. La ejecución del programa termina cuando se alcanza la llave de cierre. En estos apuntes de C siempre se hará referencia a esta función poniéndola en negrita seguida de paréntesis.

Funciones de biblioteca

El C del estándar ANSI dispone de un número mínimo de funciones de biblioteca que deben tener los programas de compilación. Estas funciones desarrollan diversas tareas:

-control de entradas y salidas E/S

-Manejo de cadenas de datos

-Operaciones matemáticas…..etc

printf(), es una de las más utilizadas, es una función de salida de uso general en C.

printf(“cadena-a-mostrar”);

Muestra en pantalla los caracteres contenidos entre comillas dobles “------“ , (no las comillas).

4

Page 5: Programacion en C-capitulo1

Cadena , es el contenido entre las comillas, pueden ser uno o más caracteres. El conjunto de esta cadena recibe también el nombre de argumento

En C la llamada a una función de biblioteca es en realidad una sentencia por lo que termina en

punto y coma (;)

Archivo de cabecera

En C la información sobre las funciones de biblioteca se encuentran en varios archivos que se suministran con el compilador.

Estos archivos terminan con la extensión .h,

Estos archivos se añaden al programa utilizando la directiva del procesador , del compilador:

# include no pertenecen a C, son instrucciones que pone el programador en el ordenador.

Include le dice al procesador que lea en otro archivo y lo incluya con el programa.

Archivo muy frecuente: #include <stdio.h>

El nombre del archivo se puede poner en minúsculas

Contiene entre otras cosas información sobre las funciones biblioteca printf()

C ignora los espacios, no importa donde aparece una sentencia, una llave, o un nombre de función en una línea.

Ejemplos sencillos

#include <stdio.h> Hace que el compilador lea archivo stdio.h y que lo incluya en el programa, contiene información sobre printf()

main() Aquí es donde empieza la ejecución del programa

{ Llave de apertura, principio de las sentencias

printf(“este es un breve programa de C.”); Sentencia, llama a la función de biblioteca estándar

} Llave de cierre, fin de programa

Una vez compilado y ejecutado el programa aparecerá en pantalla

Este es un breve programa de C

Variante del programa anterior: comentado por el alumno

#include <stdio.h> compilar

main()

5

Page 6: Programacion en C-capitulo1

{

printf(“Este es”);

printf(“otro”);

printf(“programa en C.”);

}

Variante del programa anterior, comentario por el alumno de las novedades.

compilar

#include “stdio.h” --------------------------------------------main() --------------------------------------------{printf(“Mi segundo programa en C.\n”);

printf(“Pulsa la tecla return para terminar”);

Getchar()

} -----------------------------------------------

1.2.-CREACION Y COMPILACION DE UN PROGRAMA

El modo de creación y compilación de un programa viene determinado en gran medida por el compilador que se esté utilizando y por el sistema operativo, en nuestro caso será Borland C 4.5 o Borland C 5.0 y XP como sistema operativo.

En estos programas se pueden editar, compilar y ejecutar los programas directamente.

El alumno estudiara la instalación en el entorno de XP de BC 45 así como la ayuda de que dispone el programa.

Consideraciones generales:

Cuando se da nombre a un archivo de programa, se le debe dar la extensión .C. El compilador Borland C 4.5 asigna automáticamente a cada fichero una extensión por defecto .ccp

El archivo que contiene el programa en C se llama archivo fuente.

6

Page 7: Programacion en C-capitulo1

El archivo que contiene la versión compilada del programa se llama archivo objeto, también ejecutable.

Si se introduce algo de forma incorrecta en el programa, el compilador informará de los mensajes de error de sintaxis cuando trate de compilarlo. La mayoría de los compiladores de C trataran de encontrar sentido al código fuente sin importar lo que se haya escrito, por esta razón no siempre el error que se comunica refleja la propia causa.

Además de los errores reales el compilador comunica mensajes de advertencia, están diseñados para ser muy tolerantes y permitir prácticamente la compilación de cualquier cosa que sea correcta sintácticamente. Sin embargo, algunas cosas, aun siendo correctas sintácticamente, son altamente sospechosas. Ante esta situaciones el compilador imprime una advertencia. (Warning). El programador, decidirá entonces si la advertencia es justificada o no.

USO DEL C

Los pasos a seguir desde el momento en que se comienza a escribir el programa C hasta que se ejecuta son los siguientes:1.- Escribirlo en un editor.2.- Compilarlo en un compilador.3.- Enlazarlo en un enlazador.4.- Ejecutarlo.El programa se puede escribir en cualquier editor que genere ficheros de texto estándar, esto es, que los ficheros generados no incluyan códigos de control y caracteres no imprimibles.Estos ficheros que contienen código C se llaman ficheros fuentes. Los ficheros fuentes son aquellos que contienen código fuente, es decir, ficheros con texto que el usuario puede leer y que son utilizados como entrada al compilador de C."El compilador produce ficheros objetos a partir de los ficheros fuentes. Los ficheros objetos son los ficheros que contienen código objeto, es decir, ficheros con código máquina (número binarios que tiene significado para el microprocesador) y que son utilizados como entrada al enlazador.La extensión de estos ficheros es OBJ, aunque también les hay con extensión LIB. A estos últimos se les llama también ficheros de librería o biblioteca; contienen código máquina perteneciente a código compilado suministrado por el compilador.

El enlazador produce un fichero ejecutable a partir de los ficheros objetos. Los ficheros ejecutables son aquellos que contienen código máquina y se pueden ejecutar directamente por el sistema operativo. La extensión estos ficheros es EXE o COM.

Al proceso de enlazado también se le suele llamar el proceso de linkado.El programa se puede ejecutar simplemente tecleando su nombre desde la línea de comandos del sistema operativo.Hoy día los compiladores de C son muy sofisticados e incluyen entornos integrados desde los cuales editamos, compilamos, y enlazamos.A modo de introducción vamos a dar unas definiciones muy breves:

7

Page 8: Programacion en C-capitulo1

- Las variables y constantes son los objetos básicos que se manipulan en un programa.- Las declaraciones indican las variables que se van a utilizar y establecen su tipo y, quizá, su valor inicial.- Los operadores especifican lo que se va a hacer con ellas.- Las expresiones combinan variables y constantes para producir nuevos valores.

1.3.- DECLARACIÓN DE VARIABLES Y ASIGNACIÓN DE VALORES

Variable, es una posición de memoria con nombre que puede guardar distintos valores, solo los programas de C más sencillos no tienen variables.

En programación C todas las variables se deben declarar antes de ser utilizadas.

En la declaración se le dice al compilador el tipo de variable que está utilizando

Hay cinco tipos de datos básicos:

Tipo,palabra clave Descripción Longitud(bytes) Rango

char Dato de Carácter 1 0 a 255

int Número Entero con signo 2 -32.768 a 32.768

float Coma flotante, números en punto flotante

43.4E-38 a 3.4E38

double Coma flotante de doble precisión

81.7E-308 a 1.7E308

void Sin valor 0 Sin valor

Variable tipo char, tiene 8 bits de longitud, se utiliza para guardar un solo carácter. Esta variable también se puede utilizar como un entero pequeño.

Tipo carácter

En C, los caracteres se definen con apóstrofos

Ejemplos válidos de constantes tipo carácter: 'T', 'l', '1'.

El valor de una constante carácter es el valor numérico del carácter en el conjunto de caracteres del sistema. Por ejemplo, en el conjunto ASCII, el carácter cero, o '0', es 48.

Variable entera tipo int, pueden contener números enteros con signo(números sin parte fraccionaria). Estos valores se encuentran el el rango de -32.768 a 32.768.

Tipo entero

Las constantes enteras se pueden escribir de uno de los tres modos siguientes:

8

Page 9: Programacion en C-capitulo1

- En decimal: escribiendo el número sin empezar por 0 (a excepción de que sea el propio 0). Ejemplos: 1, 0, -2.

- En hexadecimal: empezando el número por 0x. Ejemplos: 0xE, 0x1d, 0x8.

- En octal: empezando el número por 0. Ejemplos: 02, 010.

Variables tipo float, double, contienen valores en punto flotante con signo, que pueden tener componentes fraccionarios.

Diferencias, double proporciona el doble de precisión en el número de dígitos significativos. En ambos casos estas variable pueden contener valores muy grandes.

Las constantes de este tipo tienen parte real y parte fraccionaria . El tipo double tiene doble precisión que el tipo float. Por lo demás, los dos tipos son iguales. La sintaxis correcta de las constantes(variables) de estos dos tipos es:

[signo] [dígitos] [.] [dígitos] [exponente [signo] dígitos]

Variable Tipo void

Significa sin valor, sin tipo.

Al poner void entre los paréntesis de la definición de una función, se define a ésta como función que no tiene argumentos. No confundir con llamada a función, en cuyo caso no se puede utilizar el void. Del mismo modo, al poner void antes del nombre de la función en la definición de ésta, se está declarando como función que no devuelve nada. La segunda versión es preferible y es la que se utilizará.

Forma general de declaración de variable

Tipo nombre-var

Int contador; ( la declaración de variable es una sentencia, debe terminar con ;)

TABLA DEL CÓDIGO ASCII

9

Page 10: Programacion en C-capitulo1

Modificadores de tipos de datos(SE UTILIZARÁ MÁS TARDE)

Con la excepción del tipo void, los tipos básicos de datos pueden tener varios modificadores que les precedan:

Signed: variable con signo, tipo int, char Unsigned: Variable sin signo, tipo int, char Long: Variable de tipo largo, tipo int, char, double Short: Variable de tipo corto, tipo int, char

Tipo Longitud(bytes) Rango

unsigned char 1 0 a 255

signed char 1 -128 a 127

unsigned int 2 65535

signed int 2 Igual que int

short int 1 -128 a 127

unsigned short int 1 0 a 255

10

Page 11: Programacion en C-capitulo1

signed short int 1 Igual que short int

long int 4 -2147483648 a 2147483649

signed long int 4 -2147483648 a 2147483649

unsigned long int 4 0 a 4294967296

long double 10 1.1E-4932 a 1.1E+4932

LUGAR DE DECLARACIÓN DE LAS VARIABLES DENTRO DEL PROGRAMA DE C

Dentro de una función,

- son variables llamadas locales- solo es conocida por la función donde está declarada- es habitual su declaración al principio de la función detrás de la llave de apertura-las variables locales de una función no tienen relación con las variables locales de otra función, la misma variable puede estar en dos funciones y no conocerse.-se puede declarar más de una variable del mismo tipo mediante una lista separada por comas.

Ejemplo float x, y, z;

Fuera de todas las funciones, -a estas se las llama variables globales, -cualquier función del programa puede acceder a ellas, -existen durante todo el tiempo que se está ejecutando el programaASIGNACION DE UN VALOR A UNA VARIABLESe pone su nombre a la izquierda de un signo igual, a la derecha del signo = se pone el valor de la variable, esta operación es una sentencia por lo tanto lleva ;

Nombre-de-variable=valorNum=100

CONSTANTESHay distintos tipos de constantes, cte. Es un valor fijo utilizado por el programa.-una constante se suele utilizar para iniciar las variables al comienzo de la iniciación del programa-el carácter cte. se especifica colocado entre comillas simples, ‘A’-los enteros se especifican como números enteros-los valores en punto flotante deben incluir un punto decimal ej. 100,0 ----100.0-si el valor en punto flotante que se quiere especificar no tiene ningún dígito a la derecha del punto decimal se debe utilizar el 0, ej. 100 ---------100.0

USO DE printf

11

Page 12: Programacion en C-capitulo1

-printf también se puede utilizar para mostrar valores de caracteres enteros y valores en punto flotante.

Ejemplo:

Printf(“esto imprime el número %d”,99);

Comentario: se mostrará en pantalla esto imprime el número 99

La llamada a printf contiene dos argumentos, el primero es la cadena entrecomillada y el otro la cte. 99.Los argumentos deben ir separados por comas (cuando hay más de un argumento por función.)El primer argumento que puede contener tanto caracteres normales(los que se muestran en pantalla) como especificadores de formato que comiencen con el signo de %Especificador de formato: informa a printf que se va a mostrar un elemento de distinto tipo, en este caso %d se va a mostrar un entero en forma decimal, el valor está en el segundo argumento.

Ejemplo:

printf(“Esto muestra %d,también”,99);

Se mostrara en pantalla – Esto muestra 99, también---

Comentario: el valor asociado con un código de formato se muestra en el lugar donde se encuentra el código de formato dentro de la cadena.

OTROS CÓDIGOS U ORDENES DE FORMATO(se verán más adelante)

Los códigos u órdenes de formato son las siguientes:

Código Formato

%c Simple carácter

%d Entero decimal con signo

%i Entero decimal con signo

%e Punto flotante en notación científica: [-]d.ddd e [+/-]ddd

%f Punto flotante en notación no científica: [-]dddd.ddd

%g Usa %e o %f, el que sea más corto en longitud

%o Entero octal sin signo

Ejemplo nº 1,

12

Page 13: Programacion en C-capitulo1

1º el problema declara una variable llamada num, 2º asigna el valor 100 a la variable 3º muestra mediante printf el valor de 100 por pantalla #include <stdio.h>main(){Int num; La sentencia int num declara que num es

una variable entera

Num=100;

Printf(“el valor es %d”,num);

}Ejemplo nº 2

#include <stdio.h>main(){char c;float f;double d;c=’x’;f=100.123;d=123.009;printf(“c es %c,”,c);printf(“f es %f,”,f);printf(“d es %d,”,d);}

Realizar por el alumno.384

Escribir un programa que declare una variable entera llamada num. Asigne a esta variable el valor de 1000 y después muestre el valor en pantalla de esta manera: 1000 es el valor de num

EJEMPLO Nº 3 , APUNTES

#include <stdio.h>main() /*TERCER EJEMPLO*/ En C todo lo que vaya entre /*…..*/

Se ignora,

{int horas, minutos; Es una sentencia de declaración:

1ºen algún sitio de la función se utilizaran las variables horas, minutos.2ºlas 2 variables son de tipo entero

13

Page 14: Programacion en C-capitulo1

horas=3; Las variables deben ser declaradas antes del uso.Son sentencias de asignación

minutos=60*horas; =es el operador de asignación y * es el operador de multiplicación.

Printf(“Hay %d minutos en %d horas.”minutos,horas);

Getchar();}Los dos %d no se han escrito y sin embargo se ha escrito un su logar los valores de las variables minutos y horas.El símbolo % avisa a la función printf que se va ha imprimir una variable en esta posiciónLa letra d informa a que la variable a imprimir es entera.

El programa escribirá: Hay 180 minutos en 3 horas

En C, todo aquello que vaya entre un /* y un */ es ignorado. Las secuencias /* y */ denotan el principio y el final de un comentario en C.

La línea: int horas, minutos; es una sentencia de declaración. En este caso se declaran dos cosas:

1) En algún sitio de la función se utilizarán las "variables" hora y minutos.2) Estas dos variables son de tipo entero.

En C, todas las variables utilizadas han de ser declaradas antes de su uso.Las líneas horas = 3; y minutos = 60 * horas; son sentencias de asignación (= es el operador

de asignación y * es el operador de multiplicación).

La línea printf ("Hay %d minutos en %d horas.", minutos, horas);

escribe: Hay 180 minutos en 2 horas. Como se ve los dos %d no se han escrito y sin embargo se ha escrito en su lugar los valores de las variables minutos y horas.

El símbolo % avisa a la función printf que se va a imprimir una variable en esta posición.La letra d informa que la variable a imprimir es entera.

Hacer programas por el alumno:

Programa que imprima por pantalla los siguientes datos: 1,c,1.0,1e-1, en datos tipo entero, carácter, coma flotante y doble precisión, respectivamente.

Programa que imprima por pantalla el número 100, en decimal, octal y hexadecimal.

Programa que imprima por pantalla el resultado, en entero, coma flotante y doble precisión, de 1000 pts en euros. 1€=166.386 pts

1.4.- INTRODUCCIÓN DE NÚMEROS DESDE EL TECLADO

14

Page 15: Programacion en C-capitulo1

Hay varias formas de introducir valores numéricos desde el teclado.

scanf, es una función de biblioteca estándar, es capaz de leer números enteros y números en punto decimal e introducirlos por el teclado.

Ejemplo: sintaxis---- scanf(“%d”,&nombre-var-ent);

Comentarios:

nombre-var-ent es el nombre de la variable en la que se quiere recibir el valor

scanf () es una cadena que determina el tratamiento del segundo segmento

%d especifica que el segundo argumento va a recibir un valor entero en formato decimal

Ejemplo: int num;

Scanf(“%d”,&num); & permite que una función coloque un valor en uno de sus argumentos

(cuando se introduce un número por el teclado simplemente se está escribiendo una cadena de dígitos, la función scanf espera que se pulse intro antes de convertir la cadenaal formato binario interno )

Para leer un número de punto flotante desde el teclado, se llama a scanf en la forma siguiente:

scanf(“%f”,&nombre-var-float);

nombre-var-float es el nombre de la variable declarada de tipo float

si se utiliza la variable doube el especificador debe ser %lf

ejemplo:este programa pide que se introduzca un entero y un número en punto flotante y que se muestren los valores.

#include <stdio.h>main(){int num;float f;printf(“Introduzca un entero:”);scanf(“%d”,&num);printf(“Introduzca un número en punto flotante:”);

15

Page 16: Programacion en C-capitulo1

scanf(“%f”,&f);printf(“%d”,num);printf(“%f”,f);}

Ejercicio para los alumnos:

1ºEscribir un programa que lea por teclado dos números en punto flotante (utilizando float) y después muestre la suma.

1.5.-REALIZACION DE CÁLCULOS UTILIZANDO OPERACIONES ARITMÉTICAS

Lenguaje C define muchos operadores(más que otros programas), las expresiones de C siguen las mismas reglas del álgebra(una expresión es una combinación de operadores y operandos). Un operador es un símbolo que indica al compilador que ha de realizar ciertas operaciones matemáticas o lógicas

Expresiones aritméticas:

OPERADORES ARITMÉTICOS

Operador Acción,significado

+ Suma

- Resta

/ Divide

* Multiplica

++ Incremento

-- Decremento

% Módulo( resto de una división)

Los operadores +, -, *, / se pueden utilizar con cualquier tipo de dato básico.

% solo se puede utilizar con números enteros. Devuelve el resto de una división entera, no tiene significado con tipos de punto flotante.

El - , tiene dos significados

1º es un operador de resta

2º invierte el signo de un número de un solo operando( - monario)

16

Page 17: Programacion en C-capitulo1

Una expresión muy común junto a una sentencia de asignación es la siguiente:

Int answer;

Answer =100*31;

Los operadores *,/,% tienen mayor prioridad que + y -.

Esta condición se puede variar utilizando paréntesis .

Ejemplo: 10 – 2 * 5 ------- 0

(10 - 2) * 5 ------- 40

Una expresión de C puede contener variables, constantes o ambas, por ejemplo, suponiendo que answer y count son variables , esta expresión es perfectamente válida:

Answer = count – 100;

Se pueden utilizar libremente los espacios dentro de una expresión..

Como se ha visto antes, el operador módulo devuelve el resto de una división entera. Por ejemplo, el resto de 10 % 3 es 1.Este programa muestra el resultado de algunas divisiones enteras y sus restos.Ejemplo, el programa muestra 2120#include <stdio.h>Main(){Printf(“%d”,5/2);Printf(“%d”,5%2);Printf(“%d”,4/2);Printf(“%d”,4&2);}El operador módulo devuelve el resto de una división entera.El resto de 10 % 3 es 1.

2º En expresiones largas los paréntesis y espacios pueden añadir claridad aunque no sean necesarios.

Count *num+88/val-19 % count

otra expresión produce el mismo resultado , pero es más fácil de leer:

(count * num) + ( 88 / val ) – ( 19 % count )

2º programa

Calcula el área de un rectángulo, dadas sus dimensiones.Primero solicita al usuario el largo y el ancho del rectángulo y luego muestra el área#include <stdio.h>

17

Page 18: Programacion en C-capitulo1

Main(){Int len,width; Length “largura

“width” anchuraPrintf(“introduzca el largo: “);Scanf(“%d” , &len);Printf(“introduzca el ancho: “);Scanf(“%d” , &width);Printf(“el area es %d”,len*width);}

Ejercicios para los alumnos:384,385

1ºEscribir un programa que calcule el volumen de un cubo, el programa debe pedir al usuario cada dimensión.

2ºEscribir un programa que calcule el número de segundos que tiene un año.

1.6.- COMO AÑADIR COMENTARIOS A UN PROGRAMA

Un comentario es un texto escrito en el programa fuente para aclaración del usuario y que el compilador no lee.

Ejemplo: /*---------------------------*/

/* esto es un comentario*/

Los comentarios se pueden extender varias líneas:

/* Este es un comentario más largoque ocupacinco líneas*/En C, un comentario puede ir en cualquier lugar excepto en medio de alguna palabra clave de C, nombre de función o nombre de variable.En C, no se puede tener un comentario dentro de otro comentario. No se pueden anidar comentarios./*esto es un comentario/* esto es otro comentario anidado en el primero - - que causará un error de sintaxis*/ con un comentario anidado*/

Ejemplo:

/*este programa convierte días terrestres en años jovianos*/

Jupiter,Saturno, urano………

#include <stdio.h>

18

Page 19: Programacion en C-capitulo1

Main(){Float días_t;/*numero de días terrestres*/Float años_ j;/*numero equivalente de años jovianos*/ /*obtiene el numero de días terrestres*/

En C los comentarios pueden aparecer en la misma línea que otras sentencias del programa

Printf/”introducca el numero de días terrestres.”);Scanf(“%f”; &días_t);/*ahora, calcula los años jovianos*/Años_ j = días _ t /(365.0 * 12.0);/*muestra el resultado*/Printf(“equivalente en años jovianos: %f”,años_ j);}Los comentarios ayudan a entender los que hace el programa.No se puede hacer:Colocar un comentario dentro del nombre de una función o variableEj. Pri/*equivocado*/ ntf(“esto no funcionara”);

1.7.- ESCRIBIR FUNCIONES PROPIAS

Las funciones son los bloques que constituyen C, en lo visto hasta ahora solo se ha incluido la función main(). Sin embargo, la mayoría de los programas que se escribirán en el mundo real contendrán muchas funciones.

Ejemplo:

/*programa con multiples funciones*//*aquí se incluyes los archivos de cabecera*/Main(){...{F1(){...{F2(){..

19

Page 20: Programacion en C-capitulo1

.{Fn(){...{-se llamará a cada función con un nombre diferente-cuando una función, excepto main(), encuentre la llave de cierre, regresa a la línea inmediatamente posterior a la línea en que se le había llamado.-cualquier función dentro del programa puede llamar a cualquier otra función en cualquier momento ( tradicionalmente a main() no la puede llamar ninguna otra función, aunque no haya restricción técnica a tal efecto)

Ejemplo: el programa contiene dos funciones, main() y func1()

Antes de leer las aclaraciones intentar determinar lo que muestra en pantalla el programa.

/*un programa con dos funciones*/ compilar#include <stdio.h>main(){printf(“me”);func1();printf(“C:”);}func1(){printf(“gusta”);}

Me gusta C-En main(), se ejecuta la primera llamada a printf(), imprimiendo Me, después se llama a func1() y se ejecuta la sentencia printf() que hay dentro de la función 1, func1, se regresa de la función reanudándose de nuevo dentro de main() y se imprime C-excepto para main()cuando se alcanza la llave de cierre se regresa de la función, y la ejecución se reanuda una línea después del punto en que se llamó a la función.

Ejemplo con tres funciones, imprime mediante tres funciones los números 1,2,3.

/*este programa tiene tres funciones*/ compilar#include <stdio.h>main(){func2();

20

Page 21: Programacion en C-capitulo1

prinft(“3”);}func2(){func1();printf(“2”);}func1(){printf(“1”);}En este programa main() llama primero a func2(), después llama a func1(). Después func1() muestra 1 y posteriormente vuelve a func2(), que imprime 2, y después vuelve a main() e imprime 3.

Realizar por los alumnos:

1º Escribir un programa que contenga al menos dos funciones e imprima el mensaje –El soldado de verano , el patriota a la luz del sol-

1.8.- UTILIZACION DE FUNCIONES PARA DEVOLVER VALORES

En C una función puede devolver un valor a una rutina de llamada. Por ejemplo, otra de las funciones de la biblioteca estándar de C es Sqrt(), función de biblioteca estándar….. devuelve la raíz cuadrada de su argumento.

Para que el programa obtenga valor de retorno se debe poner la función en el lado derecho de una sentencia de asignación.

Ejemplo:programa imprime raíz cuadrada de 10#include <stdio.h> #include <math.h> /*sqrt() lo necesita*/main(){doublé answer;answer= sqrt(10.0);printf(“%f”, answer);}El programa llama a sqrt() y asigna el valor de retorno a answer, sqrt() utiliza el archivo de cabecera math.h.En realidad, la sentencia de asignación del programa precedente no es técnicamente necesaria ya que stqr() se podría utilizar simplemente como un argumento para printf()

21

Page 22: Programacion en C-capitulo1

Sqrt() requiere un valor en punto flotante para su argumento y el valor que devuelve es del tipo doublé. Es importante que se ajuste el tipo de valor que devuelve una función con la variable a la que se asignará el valor.

Ejemplo:variante del anterior, programa imprime raíz cuadrada de 10#include <stdio.h> #include <math.h> /*sqrt() lo necesita*/main(){Printf(“%f”, sqrt(10,0);}C llamará automáticamente a sqrt() y obtendrá su valor de retorno antes de llamar a printf(), el valor de retorno se convierte en un segundo argumento de printf(),¡¡¡¡ cosas de C!!!!!

En la escritura de funciones se podrá devolver un valor a la rutina de llamada utilizando la sentencia return. La sentencia return sigue este formato: return valor;

Ejemplo: imprime 10 en pantalla#include <stdio.h>main(){Int num;num=func();printf(“%d”, num);}func(){return 10;} Func() devuelve un valor entero, por omisión las funciones devuelven valores de tipo int,

Importante:Cuando se encuentra la sentencia return, la funció regresa inmediatamente, no se ejecutará ninguna sentencia después de return. El valor asociado a la sentencia return no tiene por qué ser constante, puede ser cualquier expresión válida de C. Además puede haber más de un return en una función.

Aunque una función devuelve un valor, no se tiene que asignar ese valor necesariamente a algo. Si el valor de retorno de una función no se utiliza, se pierde, pero no se produce ningún fallo.

Ejemplo: programa muestra el cuadrado de un número introducido desde el teclado.El cuadrado se calcula con get_sqrt()# include <stdio.h> compilarmain(){Int sqrt;

22

Page 23: Programacion en C-capitulo1

sqrt=get_sqrt();printf(“cuadrado:%d”, sqrt);}Get_sqrt{Int num;Printf(“introduzca el número: “);Scanf(“%d”, &num);Return num*num; /*cuadrado del número*/}

Ejemplo: se puede utilizar return sin especificar un valor, lo que permite volver a una función antes de que se alcance la llave de cierre, la línea “esto nunca se imprime” no se mostrará# include <stdio.h> compilarMain(){Func1();}Func1(){Printf(“esto se imprime”);Return;Printf(“esto nunca se imprime”);}

Ejercicios para los alumnos:

1ºEscribir un programa que utilice una función llamada convert(), que solicite una cantidad de dólares al usuario y devuelva su valor convertido en libras.(1 libra = 2 dólares)

1.9.- UTILIZACION DE ARGUMENTOS DE FUNCIÓN

- un argumento de función es un valor que se pasa a una función cuando se llama a dicha función.

-una función, en C, puede tener 0 o varios argumentos(LIMITE DETERMINADO POR EL COMPILADOR) ANSI al menos 31 argumentos.

-para que una función pueda tomar argumentos, se deben declarar variables especiales que reciban valores de argumento, son los PARAMETROS FORMALES de la función.

Los parámetros se declaran entre los paréntesis que sigue al nombre de la función,

Ejemplo: la función listada en este programa imprime la suma de los dos argumentos enteros utilizados para llamarla:

sum( int x, int y){

23

Page 24: Programacion en C-capitulo1

printf(“%d”, x+y );}Cada vez que se llame a sum(), sumará el valor que se ha pasado a x con el valor pasado a y, X e y son simplemente variables operacionales de la función que reciben los valores que se utilizan cuando se llama a la función.

/*un programa simple que prueba sum().*/ Este programa ilustra cómo llamar a sum()

# include <stdio.h>Main(){Sum(1 , 20);Sum(9, 6);Sum(81, 9);}Sum(int x, int y);{Printf(“%d”, x + y);}Este programa imprimirá 21,15,90, Cuando se llama a sum()el compilador copia el valor de cada argumento en el parámetro correspondiente , en la primera llamada sum(), se copia 1 en x y 20 en y, en la segunda llamada se copia 9 en x y 6 en y, en la tercera llamada se copia 81 en x y 9 en y.

IMPORTANTE:

1º-argumento se refiere al valor que se pasa a una función. La variable que recibe los valores de los argumentos utilizados en la llamada a la función es un parámetro formal de la función. Las funciones que toman argumentos se llaman funciones parametrizadas. Si se utiliza una variable como argumento de una función , no tiene nada que ver con el parámetro que recibe su valor.

Los argumentos siempre se separan con comas. ejemplo sum() es x,y

EJEMPLOS:1ºEste programa utiliza la función outchar(), para mostrar los caracteres en la pantalla. El programa imprime ABC#include <stdio.h>main(){outchar(‘A’);outchar(‘B’);}outcharchar ch){printf(“%c”, ch);}

24

Page 25: Programacion en C-capitulo1

Ejercicio para los alumnos:

1º Escribir un programa que utilice una función outnum() que tome un argumento entero y lo muestre en pantalla.

32 Palabras clave de C según las define el estándar ANSI

auto double int structbreak else long switchcase enum register typedefchar extern return unionconst float short unsignedcontinue for signed voiddefault goto sizeof volatiledo if static while

REFUERZO DE EJERCICIOS DE OPERACIONES

PROGRAMA QUE IMPRIMA POR PANTALLA EL NÚMERO 100, EN DECIMAL, OCTAL Y HEXADECIMAL#include <stdio.h>Main(){Int a=100;Printf(“representa el nº 100 en decimal, octal y hexadecimal.\n”);Printf(“decimal:%i\n octal:o\n hexadecimal:%x”,a,a,a);}

PROGRAMA QUE IMPRIMA LOS NÚMEROS: 40000,2000000000, 4000000000,200 UTILIZANDO LOS MODIFICADORES SIN SIGNO, LARGO, LARGO SIN SIGNO, CORTO, RESPETIVAMENTE.

#include <stdio.h>Main(){Int a=40000,b=2000000000,c=4000000000,d=200;Printf(“*****************************\n\n”);Printf(“sin signo:u\n largo:%lid\n largo sin signo:%\ ln corto:%hd”,a,b,c,d);}

25

Page 26: Programacion en C-capitulo1

Programa que imprima el resultado de los números 10, 3 al aplicar las operaciones aritméticas de suma, resta, producto, división y módulo.#include <stdio.h>/*interesante*/Main(){Int a=10,b=3,suma,resta,produ,divi;Float divis, c=10,d=3;Suma =a+b;Resta=a-b;Produ=a*bDivi=a/b;Divis=c/dPrintf(“\t==========================================\n”);Printf(“\tmuestra las operaciones aritméticas con los números 10 y 3\n”);Printf(“\t==========================================\n\n”);Printf(“suma:%i\n resta:%i\n producto:%i\n división:%i\n division float:%f”,suma, resta,produ,divi,divis); }

FIN

26

Page 27: Programacion en C-capitulo1

27