Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran...

127
Este trabajo académico tiene el objetivo de facilitar al estudiante un complejo aprendizaje de introducción a la programación, evitando en lo posible la abundancia de teoría; y centrándose en un estilo y lenguaje sencillo, con la ayuda de ejercicios prácticos. El único propósito es llegar a resolver las dificultades que enfrenten los estudiantes en sus vidas universitarias, o por la presunción de complejidad y vayan cumpliendo conflicto en el avance de desarrollo de la materia de introducción a la programacion. La temática presentada cumple a cabalidad con los planes y programas de estudios adaptados a la reforma 1

Transcript of Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran...

Page 1: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Este trabajo académico tiene el objetivo de facilitar al estudiante un complejo aprendizaje de introducción a la programación, evitando en lo posible la abundancia de teoría; y centrándose en un estilo y lenguaje sencillo, con la ayuda de ejercicios prácticos.

El único propósito es llegar a resolver las dificultades que enfrenten los estudiantes en sus vidas universitarias, o por la presunción de complejidad y vayan cumpliendo conflicto en el avance de desarrollo de la materia de introducción a la programacion.

La temática presentada cumple a cabalidad con los planes y programas de estudios adaptados a la reforma educativa vigente que exige el Ministerio de Educación para el nivel universitario.

Como muestra se esperas que esta obra elaborada con mucho esfuerzo por cada uno de ustedes, tenga en el futuro inmediato la acogida que se espera, y cumpliendo de tal manera lo expuesto y aprendido durante este primer nivel universitario, y sirva para cultivar el don mas preciado que es el aprendizaje.

1

Page 2: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Agradecemos principalmente a Dios ya que gracias a el gozamos de vida y salud para lograr todas nuestras metas que nos hemos propuesto o nos han propuesto como fue el caso de este proyecto.

Agradecemos a nuestros padres por que a ellos le debemos el estar estudiando y realizando nuestros sueños; y como no agradecer a la persona que nos incentivo para realizar este proyecto que se ha convertido en un pequeño libro que contiene varios conocimiento de una de las materias fundamentales de nuestra carrera y por que no decirlo es uno de los autores también del libro Ing. Abel Alarcón profesor de la cátedra fundamentos a la programación.

2

Page 3: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

LenguajeC

Capitulo

3

Page 4: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

El código fuente está escrito en un lenguaje de alto nivel comprensible por el ser humano pero no por el ordenador

El código objeto está expresado en un lenguaje que puede ser comprendido por el ordenador pero no por el ser humano

#1Introducción al lenguaje CIntroducción al lenguaje C

EL lenguaje C es el resultado de un proceso de desarrollo que inició con un lenguaje denominado BCPL. Este influenció a otro llamado B (inventado por Ken Thompson). En los años 70; éste lenguaje llevó a la aparición del C. Con la popularidad de las microcomputadoras muchas compañías comenzaron a implementar su propio C por lo cual surgieron discrepancias entre sí. Por esta razón ANSI (American National Standars Institute, por sus siglas en inglés), estableció un comité en 1983 para crear una definición no ambigua del lenguaje C e independiente de la máquina que pudiera utilizarse en todos los tipos de C. C trabaja con tipos de datos que son directamente tratables por el hardware de la mayoría de computadoras actuales, como son los caracteres, números y direcciones. Estos tipos de datos pueden ser manipulados por las operaciones aritméticas que proporcionan las computadoras. No proporciona mecanismos para tratar tipos de datos que no sean los básicos, debiendo

ser el programador el que los desarrolle. Esto permite que el código generado sea

muy eficiente y de ahí el éxito que ha tenido como lenguaje de desarrollo de sistemas. No proporciona otros mecanismos de almacenamiento de datos que no sea el estático y no proporciona mecanismos de

entrada ni salida. Ello permite que el lenguaje sea reducido y los compiladores de fácil implementación en distintos sistemas. Por contra, estas carencias se compensan mediante la inclusión de funciones de librería para realizar todas estas tareas, que normalmente dependen del sistema operativo.

4

Page 5: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Fases de desarrollo de un programa en CFases de desarrollo de un programa en C

El preprocesador Transforma el programa fuente, convirtiéndolo en otro archivo fuente “predigerido”. Las transformaciones incluyen:

Eliminar los comentarios. Incluir en el fuente el contenido de los ficheros

declarados con #include <fichero> (a estos ficheros se les suele llamar cabeceras)

Sustituir en el fuente las macros declaradas con #define (Ej. #define CIEN 100)

El compilador Convierte la fuente entregado por el preprocesador en un archivo en lenguaje máquina: fichero objeto. Algunos compiladores pasan por una fase intermedia en lenguaje ensamblador.

El enlazador Un fichero objeto es código máquina, pero no se puede ejecutar, porque le falta código que se encuentra en otros archivos binarios. El enlazador genera el ejecutable binario, a partir del contenido de los ficheros objetos y de las bibliotecas. Las bibliotecas contienen el código de funciones precompiladas, a las que el archivo fuente llama (por ejemplo printf).

Estructura básica de un programa en CEstructura básica de un programa en C

La mejor forma de aprender un lenguaje es programando con él. El programa más sencillo que se puede escribir en C es el siguiente:main( ){}Como nos podemos imaginar, este programa no hace nada, pero contiene la parte más importante de cualquier programa

5

Page 6: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

C y además, es el más pequeño que se puede escribir y que se compile correctamente. En el se define la función main, que es la que ejecuta el sistema operativo al llamar a un programa C. El nombre de una función C siempre va seguida de paréntesis, tanto si tiene argumentos como si no. La definición de la función está formada por un bloque de sentencias, que esta encerrado entre llaves {}.Hay un grupo de símbolos, que son tratados como caracteres individuales, que especifican algunos caracteres especiales del código ASCII. Los más importantes son:

\a Alerta

\b Espacio atrás

\f Salto de página

\n Salto de línea

\r Retorno de carro

\t Tabulación horizontal

\v Tabulación vertical

\\ Barra invertida

\' Comilla simple

\" Comillas dobles

\OOO Visualiza un carácter cuyo código ASCII es OOO en octal

\xHHH Visualiza un carácter cuyo código ASCII es HHH en hexadecimal

EncabezamientoEncabezamiento

6

Page 7: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Las líneas anteriores a la función main() se denominan ENCABEZAMIENTO (HEADER) y son informaciones que se le suministran al Compilador.La primera línea del programa esta compuesta por una directiva: “ #include “ que implica la orden de leer un archivo de texto especificado en el nombre que sigue a la misma (<stdio.h> ) y reemplazar esta línea por el contenido de dicho archivo.En este archivo están incluidas declaraciones de las funciones luego llamadas por el programa (por ejemplo printf() ) necesarias para que el compilador las procese. Hay dos formas distintas de invocar al archivo, a saber, si el archivo invocado esta delimitado por comillas (por ejemplo “stdio.h”) el compilador lo buscar en el directorio activo en el momento de compilar y si en cambio se lo delimita con los signos <.......> lo buscar en algún otro directorio, cuyo nombre habitualmente se le suministra en el momento de la instalación del compilador en el disco ( por ejemplo C:\TC\INCLUDE). Por lo general estos archivos son guardados en un directorio llamado INCLUDE y el nombre de los mismos esta terminado con la extensión .h.La razón de la existencia de estos archivos es la de evitar la repetición de la escritura de largas definiciones en cada programa.Entonces que la directiva “#include” no es una sentencia de programa sino una orden de que se copie literalmente un archivo de texto en el lugar en que ella esta ubicada, por lo que no es necesario terminarla con “; “

Estructura de un fichero fuenteEstructura de un fichero fuente

Un fichero fuente en lenguaje C tendrá esta estructura típica:

#include <biblioteca1.h>#include <biblioteca2.h>

... declaraciones de funciones...

... definiciones (cuerpos de funciones)...

... declaraciones de variables globales...

main (){

7

Page 8: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

... cuerpo del main... }

... otras definiciones de funciones...

Las declaraciones y definiciones se pueden hacer en cualquier orden, aunque es preferible declarar las funciones al principio del programa (por legibilidad).

main es simplemente una función más del programa, con la particularidad de que es el punto de entrada al programa.

LibreríasLibrerías

El lenguaje C contiene numerosas funciones, cuando se emplean funciones de esta biblioteca estándar, se incrementa la transportabilidad de los programas. Las funciones estándar se dividen en grupos, todas las funciones que pertenecen al mismo grupo están declaradas en el archivo de cabecera (aquel que dice xxx.h).Para incluir algunas funciones perteneciente a estas cabeceras debemos escribirlas como se muestra de ejemplo: #include <stddef.h>; Cada fichero de cabecera se denomina librería. En la siguiente lista mostraremos la Librería junto con la Descripción:

assert.h:Es proporcionar una definición de la macro assert, que imprime un mensaje de error y aborta el programa

alloc.h:Existen funciones para asignar, liberar memoria, u obtener información de bloques de memoria.

Que es el .h La letra "h" significa header en ingles y es lo que se llama cabecera.

8

Page 9: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

ctype.h:Son funciones que nos permiten conocer la naturaleza de un carácter, o bien para convertir de mayúsculas a minúsculas y viceversa; y valores enteros a códigos ASCII.

dir.h:Esto permite ordenar, crear, modificar, mover y eliminar directorios.

errno.h:Representa los números de error, después que ocurre un error se puede consultar el valor de la variable del sistema de errno para obtener mas información sobre ese error.

math.h:Contiene las funciones matemáticas estándar utilizadas en C y C++.

stdarg.h:Define funciones que pueden ser llamadas con diferentes números de argumentos, de modo que se pueda escribir f(a) y f(a,b).

stdef.h:Se definen algunos tipos especiales.

stdio.h:Incorporan las funciones de Entrada - Salida E/S estándar, tipos y macros.

stlib.h:Declara funciones que son útiles para diferentes propósitos, en especial de búsqueda y ordenación.

string.h:Este archivo contiene funciones para manejo de cadenas de caracteres.

string.h: Contiene tipos, macros y funciones para la manipulación de cadenas de caracteres.

limits.h:

9

Page 10: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Contienen varias macros que definen constantes para el tamaño de tipo enteros.

float.h:Contienen varias macros que definen constantes para el tamaño de tipo flotante.

locale.h: Contienen varias macros, funciones y tipos para unidades locales, como unidad monetaria, tiempo, dígitos, etc.

setjmp.h:Contienen declaraciones que proporcionan una forma de evitar la secuencia normal de llamada y regreso de funciones.

signal.h:Contiene un tipo, dos funciones y varias macros para manejar condiciones excepcionales que aparecen durante la ejecución, tal como una señal de interrupción de una fuente externa o un error en la ejecución.

stddef.h:Contiene varios tipos y macros que también están definidas en otras librerías. size_t.

stdlib.h:Contiene tipos, macros y funciones para la conversión numérica, generación de números aleatorios, búsquedas y ordenación, gestión de memoria y tareas similares.

time.h: Contiene tipos, macros y funciones para la manipulación de información sobre fechas y horas.

Funciones Encontradas en las bibliotecasFunciones Encontradas en las bibliotecas

1. Nombre de función font> abs(i)Tipo intBiblioteca a la cual pertenece stdlib.hSintaxis int abs(int i);Descripción font> Devuelve el valor absoluto de i

10

Page 11: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Ejemplox = abs(-7) // x es 7

2. Nombre de función font> acos(d)Tipo doubleBiblioteca a la cual pertenece math.hSintaxis double acos(double d);Descripción font> Devuelve el arco coseno de dEjemploángulo = acos(0.5); // ángulo devuelto es phi/3

3. Nombre de función font> asin(d)Tipo doubleBiblioteca a la cual pertenece math.hSintaxis double asin(double d);Descripción font> Devuelve el arco seno de dEjemploángulo = asin(0.707); // aproximadamente phi/4

4. Nombre de función font> atan(d)Tipo doubleBiblioteca a la cual pertenece math.h Sintaxis double atan(double d); long double tanl(long double d);descripción font> Devuelve la arco tangente de d. Calcula el arco tangente del argumento x. Requiere el llamado de la biblioteca complex.hEjemploángulo atan(1.0); // ángulo es phi/4

5. Nombre de función font> atan(d1, d2)Tipo doubleBiblioteca a la cual pertenece math.hSintaxis double atan(double d1, double d2);Descripción font> Devuelve el arco tangente de d1/d2Ejemploángulo = atan(y, x)

6. Nombre de función font> atof(s)Tipo doubleBiblioteca a la cual pertenece stdlib.hSintaxis double atof(const char *cadena)Descripción font> Convierte la cadena s a una cantidad de doble precisión Requiere el llamado de la biblioteca math.hEjemplodouble x; char *cad_dbl = "200.85"; ... x=atof(cad_dbl); // convierte la cadena "200.85" a valor real

11

Page 12: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

7. Nombre de función font> atoi(s)Tipo intBiblioteca a la cual pertenece stdlib.hSintaxis int atoi(const char *cadena)Descripción font> Convierte la cadena s a un entero.  La cadena debe tener el siguiente formato: [espacio en blanco][signo][ddd] (siendo obligatorio los dígitos decimales).Ejemploint i; char *cad_ent="123"; ... i=atoi(cad_ent);  //convierte la cadena "123" al entero 123

8. Nombre de función font> atol(s)Tipo longBiblioteca a la cual pertenece stdlib.hSintaxis long atol(const char *cadena);Descripción font> Convierte la cadena s a un entero largo. La cadena debe tener el siguiente formato: [espacio en blanco][signo][ddd] (siendo obligatorio los dígitos decimales).Ejemplolong int i; char cad_ent="9876543"; ... i=atol(cad_ent);  //convierte la cadena "9876543" al entero largo

9. Nombre de función font> calloc(n, s)Tipo void(puntero)Biblioteca a la cual pertenece malloc.h y stdlib.h o bien alloc.h y stdlib.hSintaxis void *calloc (size_t n, size_t s);Descripción font> Reserva memoria para una formación e n elementos, cada uno de s bytes. Devuelve un puntero al principio del espacio reservado. Si no existente bastante espacio para el nuevo bloque o bien n o s es 0, calloc devuelve nulo.Ejemplolong *buffer buffer=(long *) calloc(40, sizeof(long));

10. Nombre de función font> ceil(d)Tipo doubleBiblioteca a la cual pertenece math.hSintaxis double ceil(double d);Descripción font> Devuelve un valor redondeado por exceso al siguiente entero mayorEjemploredondeo=ceil(5.1); //redondeo es 6

11. Nombre de función font> cos(d)Tipo doubleBiblioteca a la cual pertenece math.hSintaxis double cos(double d); complex cos(complex d);Descripción font> Devuelve el coseno de dEjemplocoseno_x=cos(1.6543)

12

Page 13: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

12. Nombre de función font> cosh(d)Tipo doubleBiblioteca a la cual pertenece math.hBiblioteca a la cual pertenece double cos(double d); Sintaxis complex cos(complex d);Descripción font> Devuelve el coseno hiperb쩣o de dd=1.00; Ejemploprintf("d=%f.\n\n,d);

13. Nombre de función font> difftime(11, 12)Tipo doubleBiblioteca a la cual pertenece time.hSintaxis double difftime(time_t hora2, time_t hora1)Descripción font> Devuelve la diferencia de tiempo 11(hora2) - 12(hora1), donde 11 y 12 representan el tiempo transcurrido después de un tiempo base (ver función time)Ejemplotime_t inicio, fin; clrscrl( ); inicio=time(NULL); delay(5000) fin=time(NULL) print("Diferencia en segundos: %f\n", difftime(inicio,fin));

14. Nombre de función font> exit(u)Tipo voidBiblioteca a la cual pertenece stdlib.hSintaxis void exit(int estado)Descripción font> Cierra todos los archivos y buffers y termina el programa. El valor de u es asignado por la función para indicar el estado de terminación/td> Ejemploexit(0);

15. Nombre de función font> exp(d)Tipo doubleBiblioteca a la cual pertenece math.hSintaxis double exp(double d); complex exp(complex d)Descripción font> Eleve e a la potencia d (e=2,7182818... es la base del sistema de logaritmos naturales (neperianos))Ejemplod=100.00; y=exp(d); printf("El exponencial de x=%f.\n\n",y);

ComentariosComentarios

La inclusión de comentarios en un programa es una saludable practica, como lo reconocer cualquiera que haya tratado de leer un listado hecho por otro programador, varios meses atrás. Para el compilador,

13

Page 14: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

¿Qué es variable?Espacio de memoria, referenciado por un identificador, en el que el programador puede almacenar datos de un determinado tipo.

los comentarios son inexistentes, por lo que no generan líneas de código, permitiendo abundar en ellos tanto como se desee.En el lenguaje C se toma como comentario todo carácter interno a los símbolos: /* */ . Los comentarios pueden ocupar uno o más renglones, por ejemplo:COMENTARIOS/* este es un comentario corto */

/* este otroes muchomás largoque el anterior */

Nombres de variables (identificadores)Nombres de variables (identificadores)

Un identificador es un nombre que define a una variable, una función o un tipo de datos. Un identificador válido ha de empezar por una letra o por el carácter de subrayado _, seguido de cualquier cantidad de letras, dígitos o subrayados. Ejemplos válidos: char letra; int Letra;

float CHAR;int __variable__;int cantidad _ envases;double precio123;int __;

Ejemplos no válidos: int 123var; /* Empieza por

dígitos */char int; /* Palabra reservada

*/int una sola; /* Contiene espacios */int US$; /* Contiene $

*/int var.nueva; /* Contiene el punto

/

14

Page 15: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Declarar una variable es indicar al compilador que debe reservar espacio para almacenar valores de un tipo determinado, que serán referenciados por un identificador determinado.

int eñe; /* Puede no funcionar */

DeclaracionesDeclaraciones

La declaración de objetos en C tiene como finalidad dar a conocer el tipo y propiedades de los identificadores.En general la forma de una declaración es: (durabilidad) tipo identificador (=expresión de inicialización);

Por ejemplo, static int n=10;

Todos las variables deben ser declaradas. En las declaraciones es obligado especificar el tipo.De cada objeto en un programa C se puede establecer tres propiedades que le afectan en su relación: el alcance, la visibilidad y la durabilidad.

Alcance El alcance sirve para saber en qué región del código una declaración de un objeto está activa, es decir, el objeto existe.Si la declaración es realizada en un bloque de código entre llaves, el alcance es la región que va entre las llaves. Si se declara en la parte de arriba del fichero (normalmente) o en una parte que no va entre llaves, el alcance se establece en todo el fichero. Los identificadores establecidos con la sentencia #define tienen alcance durante todo el fichero o hasta que lo elimina la sentencia #undef. Las etiquetas de sentencia tienen como alcance el cuerpo de la función donde se han establecido.

Visibilidad La visibilidad nos indica en qué región del código un objeto está activo. La diferencia con el alcance es que en una misma región pueden estar dos objetos con el mismo identificador, ocultando un objeto a otro.

15

Page 16: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

La durabilidad puede ser:Estática: El objeto perdura desde la compilación hasta el final. Esta durabilidad la tienen todas las funciones declaradas, las variables no declaradas en ningún cuerpo de función (incluido main) y las variables declaradas con static.Local: El objeto es creado en la entrada de un bloque y es borrado a la salida. Esta durabilidad la tienen los argumentos formales y las variables declaradas con auto (es la declaración por defecto y no se suele poner). Las variables declaradas en un bloque son (a menos que se especifique) variables locales.

Durabilidad La durabilidad es el tiempo de

ejecución del programa donde el objeto existe en la memoria.

Existen otros dos tipos de durabilidad:Existen otros dos tipos de durabilidad:

Extern : Los objetos especificados tienen durabilidad static e informa al enlazador de programas para que realice las unificaciones pertinentes entre ficheros. Es decir, convierten su alcance al total del programa. La declaración del mismo objeto en otros ficheros se toma como referencia y

debe tener obligatoriamente el especificador extern. Si se pone un valor de inicialización, se debe inicializar en la declaración de la variable que no lleva extern.

Register : Se puede utilizar para variables locales y argumentos de funciones. Establece una durabilidad local pero informa de un uso intensivo de memoria, haciendo que el compilador le asocie un acceso de memoria rápido.

Sintaxis de declaración de variablesSintaxis de declaración de variables

La declaración de una variable es una sentencia simple con la siguiente sintaxis:

tipo variable nombreVariable;

De esta forma declaramos que la variable nombreVariable es de tipo tipo variable. El siguiente ejemplo declara una variable de tipo int (entero):

int contador;

También es posible dar un valor inicial a la variable declarada:

16

Page 17: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Declarar una variable es indicar al compilador que debe reservar espacio para almacenar valores de un tipo determinado, que serán referenciados por un identificador determinado.

int contador = 2;

Como habrás adivinado esta sentencia declara la variable contador y le da un valor inicial de 3. A veces en necesario declarar varias variables de un mismo tipo. Existe una forma abreviada de declaración de variables que permite hacer esto en una sola sentencia:

int x,y,z;

El anterior ejemplo declara tres variables (x, y, z), todas de tipo entero (int). Usando esta forma abreviada también es posible dar un valor inicial a las variables:

int x=0,y=1,z=23;FuncionesFunciones

Tal es el criterio con que están estructurado el lenguaje C, donde una de sus herramientas fundamentales son las funciones. Todo compilador comercial trae una gran cantidad de Librerías de toda tipo, matemáticas, de entrada - salida, de manejo de textos, de manejo de gráficos, etc., que solucionan la mayor parte de los problemas básicos de programación.Sin embargo es inevitable que en algunos documentos tenga que crear sus propias funciones.

DeclaraciónDeclaración dede FuncionesFunciones

Antes de escribir una función es necesario informarle al Compilador los tamaños de los valores que se le enviaron en el stack y el tamaño de los valores que ella retornar al programa invocante.

ejemplo:

float mi_funcion(int i, double j ) ;

17

Page 18: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

double otra _ función(void) ;

otra_mas(long p) ;

void la_ultima(long double z, char y, int x, unsigned long w) ;

Como hemos visto el tipo del dato retornado por la función en caso de obviarse el mismo se toma, por omisión el tipo int. Sin embargo, aunque la función devuelva este tipo de dato.

Funciones de entrada/salida.Funciones de entrada/salida.

Como hemos visto hasta ahora, el lenguaje C no proporciona ningún mecanismo de comunicación ni con el usuario ni con el sistema operativo. Ello es realizado a través de las funciones de librería proporcionadas por el compilador. El fichero de declaraciones que normalmente más se utiliza es el stdio.h. Vamos a ver algunas funciones definidas en él. Una función que ya hemos utilizado y que, ella y sus variantes, es la más utilizadas para la salida de información es printf. Esta permite dar formato y enviar datos a la salida estándar del sistema operativo. El tipo puede ser:

d, i entero decimal con signo

o entero octal sin signo

u entero decimal sin signo

x entero hexadecimal sin signo (en minúsculas)

X entero hexadecimal sin signo (en mayúsculas)

f coma flotante en la forma [-]dddd.dddd

e coma flotante en la forma [-]d.dddd e[+/-]ddd

18

Page 19: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

g coma flotante según el valor

E como e pero en mayúsculas

G como g pero en mayúsculas

c un carácter

s cadena de caracteres terminada en '\0'

% imprime el carácter %

p puntero

 

Los flags pueden ser los caracteres:

+ siempre se imprime el signo, tanto + como -

- justifica a la izquierda el resultado, añadiendo espacios al final

blank si es positivo, imprime un espacio en lugar de un signo +

# especifica la forma alternativa  En el campo width se especifica la anchura mínima de la forma:

n se imprimen al menos n caracteres.

0n se imprimen al menos n caracteres y si la salida es menor, se anteponen ceros

* la lista de parámetros proporciona el valor

 Hay dos modificadores de tamaño, para los tipos enteros:

l imprime un entero long

h imprime un entero

19

Page 20: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Notas:Si no se anteponen los ampersands (&), el resultado puede ser desastroso. En scanf sólo van descripciones de formato, nunca texto normal. Si se quiere escribir antes un texto, hay que utilizar printf.

short

Salida por pantalla: printf Salida por pantalla: printf

La función printf se utiliza según este formato:

printf ( “cadena de formato”, arg1, arg2, ... argN );

En la cadena de formato aparecen: el texto que se desea Imprimir caracteres especiales de secuencias de escape indicaciones del formato de los argumentos

Los argumentos son expresiones cualesquiera. Para usar printf, hay que escribir al principio del programa la directiva #include <stdio.h>

Entrada de datos: scanf

Se pueden recoger datos desde el teclado con la función scanf.Sintaxis:

scanf ( formato, & arg1, & arg2, ... );

En formato se especifica qué tipo de datos se quieren leer. Se utiliza la misma descripción de formato que en printf. También hay que incluir la cabecera <stdio.h>Ejemplo:

int x,y;...scanf ( “%d %d”, &x, &y );

Tipos básicos y variablesTipos básicos y variables

20

Page 21: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Los tipos de datos básicos definidos por C son caracteres, números enteros y números en coma flotante. Los caracteres son representados por char, los enteros por short, int, long y los números en coma flotante por float y double. Los tipos básicos disponibles y su tamaño son:

Char Carácter (normalmente 8 bits)

Short Entero corto con signo

(normalmente 16 bits)

Int Entero con signo (depende de la implementación)

Unsigned

Entero sin signo (depende de la implementación)

Long Entero largo con signo

(normalmente 32 bits)

Float Flotante simple (normalmente 32 bits)

Double Flotante doble (normalmente 64 bits)  La palabra unsigned en realidad es un modificador aplicable a tipos enteros, aunque si no se especifica un tipo se supone int. Un modificador es una palabra clave de C que indica que una variable, o función, no se comporta de la forma normal. Hay también un modificador signed, pero como los tipos son por defecto con signo, casi no se utiliza. Las variables son definidas utilizando un identificador de tipo seguido del nombre de la variable. Veamos el siguiente programa:

#include <stdio.h>main(){float cels, farh;farh = 35.0;cels = 5.0 * ( farh - 32.0 ) / 9.0;printf("-> %f F son %f C\n", farh, cels );

21

Page 22: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Importante: Después de cada asignación o función es imprescindible colocar un punto y coma (;) ya que éste es un terminador de proposiciones. En caso de que no se escriba, se marcará un error a la hora de compilar el programa. En C, los comandos deben ser escritos con letras minúsculas.

El algoritmo se debe poner void o return (ambos un valor) uno de los dos, no ambos por presentaría error.

}

En el programa anterior se definen dos variables float, se asigna un valor a la primera y se calcula la segunda mediante una expresión aritmética. Las asignaciones en C también son una expresión, por lo que se pueden utilizar como parte de otra expresión, pero según que prácticas de este tipo no son muy recomendables ya que reducen la legibilidad del programa. En la instrucción printf, el símbolo %f indica que se imprime un número en coma flotante. Hay un tipo muy importante que se representa por void que puede significar dos cosas distintas, según su utilización. Puede significar nada, o sea que si una función devuelve un valor de tipo void no devuelve ningún resultado, o puede significar cualquier cosa, como puede ser un puntero a void es un puntero genérico a cualquier tipo de dato. Más adelante veremos su utilización.

AsignacionesAsignaciones

La forma de dar valor a una variable es

variable = expresión ;

Se le llama asignación.También se puede dar valor a una variable en el mismo momento en que se declara (inicialización).

tipo variable = expresión

Una variable que se declara sin inicializar contiene un valor indeterminado. Ejemplo:

int valor1 = 0; /* variable inicializada a cero */

int valor2; /* variable no inicializada */

22

Page 23: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

main(){

valor1 = 4 + 3; /* asignación */valor2 = 5; /* otra asignación */

}

ConstantesConstantes

Las constantes son valores fijos que no pueden ser modificados por el programa. Pueden ser de cualquier tipo de datos básico (punteros incluidos). Para marcar que queremos que una variable sea constante utilizamos la palabra reservada const tal que:

const int dummy = 321; /* declaramos que dummy vale y valdrá siempre 321 */

No tiene demasiado sentido declarar una variable de tipo const sin darle valor inicial, pero algunos compiladores permiten hacerlo.

Constantes numéricasConstantes numéricas

Aparte de constantes enteras tipo 234 y en coma flotante de la forma 10.4, a veces, sobre todo al trabajar a bajo nivel, resulta más cómodo poder introducir la constante en base 8 (octal) o 16 (hexadecimal) que en base 10. Dado que es corriente usar estos sistemas de numeración, C permite especificar constantes enteras en hexadecimal u octal. Una constante hexadecimal empieza por 0x seguido del número esa base. Igualmente una constante octal comienza por 0:

const int hex = 0x80A; /* 2058 en dllecimal */const int oct = 012; /* 10 en decimal */

Constantes de caracteresConstantes de caracteres

23

Page 24: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Las cadenas de caracteres se representan encerrando la cadena entre comillas dobles ("hola caracola" sería un ejemplo). Hay ciertos caracteres que no se puede (o no es cómodo) introducir de esta forma, como son los caracteres de control: tabulador, retorno de carro, etc... Para introducirlos hay que usar unos códigos que consisten en una barra invertida y una letra, estos son los principales:

Tabla 3.1: Constantes de Cadena

Código Significado

\n Retorno de carro

\t Tabulador

\" Comillas dobles

\' Comillas simples

\\ Barra invertida

Ejemplos del capitulo # 1Ejemplos del capitulo # 1Printf y comentarios,

# include <stdio.h># include <conio.h>main ()

24

Page 25: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

{ /*escribe un mensaje*/ printf ("hola, mundo\n");getch ();return (0);}

scanf y comentarios

# include <stdio.h># include <conio.h>main (){ int a,b; printf ("ingrese un números"); printf ("ingrese un numero"); scanf ("%d",&a); scanf ("%d",&b); getch (); return (0);}

Ejemplo con variable y comentario

# include <stdio.h># include <conio.h> int valor1=0; /*variable inicializada en 0*/ int valor2; /*otra variable inicializada*/ main () { valor1=4+3; /*asignación*/ valor2=5; /*otra asignación*/ return (0);}

# include <stdio.h># include <conio.h>main (){

25

Page 26: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

float cels,farch; farch; cels= 5.0*(farch-32.0)/9.0; printf ("->%f F son %f C \n", farch, cels); getch ();return (0);}

# include <stdio.h># include <conio.h>main (){ int a,b; printf ("ingrese dos números"); scanf ("%d%d",a,b); getch (); return (0);}

# include <stdio.h># include <conio.h>main (){ char a,b; printf ("ingrese una letra"); printf ("ingrese una letra2"); scanf ("%d",a); scanf ("%d",b); getch (); return (0);}

26

Page 27: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

LenguajeC

27

Page 28: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Capitulo#2OperadoresOperadores

Un operador es un símbolo (+, -, *, /, etc) que tiene una función predefinida (suma, resta, multiplicación, etc) y que recibe sus argumentos de manera infija, en el caso de tener 2 argumentos (a operador b), o de manera prefija o postfija, en el caso de tener uno solo (operador a, o bien, a operador).

En C existen una gran variedad de operadores, que se pueden agrupar de la siguiente manera:

Operadores aritméticos Operadores relacionales Operadores lógicos Operadores a nivel de bit Operadores especiales

Operadores aritméticosOperadores aritméticos

Tal como era de esperarse los operadores aritméticos, comprenden las cuatro operaciones básicas, suma, resta, multiplicación y división con un agregado, el operador modulo.

28

Page 29: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

SIMBOLO DESCRIPCION

EJEMPLO

+ SUMA a + b- RESTA a - b* MULTIPLICACION a * b/ DIVISION a / b% MODULO a % b- SIGNO -a

Números en coma flotanteNúmeros en coma flotante

Los números en coma flotante son necesarios para trabajar con fracciones o con números de un rango mayor que los enteros.

float x = 123.456;float y = 10000000.0;

Operadores relacionalesOperadores relacionales

Al igual que en matemáticas, estos operadores nos permitirán evaluar las relaciones (igualdad, mayor, menor, etc) entre un par de operandos (en principio, pensemos en números). Los operadores relacionales de los que disponemos en C son:

Tabla 3.3: Operadores relaciónales.

29

El operador modulo (%) se utiliza para calcular el resto del cociente entre dos ENTEROS, y NO puede ser aplicado a variables del tipo float o doble.

Page 30: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Operador

Acción

> Mayor que

>= Mayor o igual que

< Menor que

<= Menor o igual que

== Igual!= Distinto

El resultado de cualquier evaluación de este tipo, es un valor ``cierto'' (true) o ``falso'' (false). La mayoría de lenguajes tienen algún tipo predefinido para representar estos valores (boolean, bool, etc); sin embargo en C, se utilizan valores enteros para representar esto:

falso (false) 0

cierto (true)

cualquier valor distinto de 0, aunque normalmente se usará el 1

Volviendo a los operadores relacionales, el resultado de una evaluación será un valor entre 0 y 1, que indicará como hemos dicho, la falsedad o certeza de esa relación.

Operadores lógicosOperadores lógicos

30

Los operadores relacionales tiene menor precedencia que los aritméticos, de forma que a < b + c se interpreta como a < (b + c), pero aunque sea superfluo recomendamos el uso de paréntesis a fin de aumentar la legibilidad del texto.

Page 31: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Hay tres operadores que realizan las conectividades que son: Y (AND), O (OR) y NEGACION (NOT).

SIMBOLO DESCRIPCION EJEMPLO

&& Y (AND) (a>b) && (c < d)

|| O (OR) (a>b) || (c < d)

! NEGACION (NOT) !(a>b)

Los resultados de las operaciones siempre adoptan los valores CIERTO o FALSO. La evaluación de las operaciones se realiza de izquierda a derecha y se interrumpe cuando se ha asegurado el resultado.

El operador NEGACION invierte el sentido de las operaciones, ejemplos:

!( a >> b ) equivale a ( a < b ) !( a == b ) " " ( a != b ) etc.

OperadoresOperadores dede incrementoincremento yy decrementodecremento

Los operadores de incremento y decremento son dos: SIMBOLO

DESCRIPCION

EJEMPLO

++ incremento ++i a+-- decremento --i a-

Para visualizar rápidamente la función de los operadores antedichos, digamos que las sentencias:

a = a + 1;

a++;

De la misma forma que:

a = a - 1;

31

Page 32: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

a--;

Es decir incrementa y decrementa a la variable en una unidad.

Operadores de asignaciónOperadores de asignación

En principio puede resultar algo fútil gastar papel en describir al operador IGUAL A (=), sin embargo es necesario remarcar ciertas características del mismo.

Por ejemplo:

a += b ; /* equivale : a = a + b */a - = b ; /* equivale : a = a - b */a *= b ; /* equivale : a = a * b */a /= b ; /* equivale : a = a / b */a %= b ; /* equivale : a = a % b */El pseudo operador debe escribirse con los dos símbolos seguidos, por ejemplo +=, y no ser escrito de la siguiente manera: +(espacio) = .

SIMBOLO DESCRIPCION EJEMPLO== igual a a == bop= pseudo código a += b

=?: asig. condicional

a = (c>b)?d:e

Vemos en la tabla que aparece otro operador denominado ASIGNACION CONDICIONAL. El significado del mismo es el siguiente:

Por ejemplo, si quisiéramos asignar a c el menor de los valores a de a y b, basta solo con escribir:

c = ( a < b ) ? a : b ;

OperadoresOperadores dede manejomanejo dede bitbit

Estos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE , es decir bit a bit , las variables .

32

Page 33: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Debemos anticipar que estos operadores se aplican a variables del tipo char, short, int y long y NO pueden ser usados con float o double, Sabemos que las computadoras guardan los datos organizados en forma digital, en bytes, formado por numerosos binarios de 8 bits. Un char ocupara 8 bits, mientras que el short y el int se forman con dos bytes (16 bits) y los long por cuatro bytes (32 bits).

SIMBOLO DESCRIPCION EJEMPL

O& Y D (bit a bit) a & b| O INCLUSIVA a | b^ O EXCLUSIVA a ^ b

<< ROTACION A LA IZQUIER a << b

>> ROTACION A LA DERECHA a >> b

~ COMPLEMENTO A UNO ~a

Prioridades de los operadores en c

Significado operador

Llamada de función ( )

Subíndice de array [ ]

Mayor que >

Menor que <

Menor igual <=

Mayor igual >=igualdad ==desigualdad !=AND bit a bit &

33

Page 34: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

OR exclusivo bit a bit ^OR bit a bit │AND lógico &&OR lógico ││condicional ?asignación =Asignación con multiplicación *=Asignación con modulo %=Asignación con suma +=

Asignación con resta -=

Asignación desplazamiento izquierda <<=Asignación desplazamiento derecha >>=Asignación AND bit a bit &=

Asignación OR bit a bit │=

coma ,multicación *división /modulo %Suma +resta -

Ejemplos del capítulo # 2Ejemplos del capítulo # 2

Ejemplos con operadores

Ingresar dos números y mostrar el resultado de suma, resta, multiplicación, división como en las tablas.

//ingresar 2 # la salida se como las tablas# include <stdio.h># include <conio.h>main(){int a,b,s,r,m;float d;clrscr ();printf ("ingrese un numero");

34

Page 35: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

printf ("ingrese un numero");scanf ("%d",&a);scanf ("%d",&b);s=a+b;r=a-b;m=a*b;d=a/b;printf ("%d+%d=%d\n",a,b,s);printf ("%d-%d=%d\n",a,b,r);printf ("%d*%d=%d\n",a,b,m);printf ("%d/%d=%d\n",a,b,d);getch ();return (0);}

# include <stdio.h># include <conio.h>main (){ float cels,farch; farch; cels= 5.0*(farch-32.0)/9.0; printf ("->%f F son %f C \n", farch, cels); getch ();return (0);}

Ingrese un número y diga si es par o impar.

/*mostrar si un numero es par o impar*/# include <stdio.h># include <conio.h>main (){ int n; printf ("ingrese un numero"); scanf ("%d", &n); n%2==0 ? printf ("par"):printf ("impar"); getch ();

35

Page 36: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

return (0);}

36

Page 37: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

LenguajeC

37

Page 38: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Capitulo#3Control de flujoControl de flujo

Sentencias condicionalesSentencias condicionales

Sentencia condicional ?Sentencia condicional ?

Esta sentencia puede sustituir a una sentencia equivalente if-else.Sintaxis:Expresión ¿ acción verdadera: acción falsaEste operador ¿ precisa de tres operadores por lo cual se lo conoce también como el operador ternario.Ejemplo: Valor = (valor >=0) ? 5 : 1+ y;

Sentencia if Sentencia if

38

Page 39: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

La construcción if sirve para ejecutar código sólo si una condición es cierta:

if ( condición ) sentencia

La condición es una expresión de cualquier clase. Si el resultado de la expresión es CERO,

se considera una condición FALSA. Si el resultado de la expresión NO ES CERO,

se considera una condición CIERTA.

Ejemplo:

int x = 1;main(){ if ( x == 1 )

printf (“la variable x vale uno\n”); if ( x>=2 && x<=10 )

printf (“x está entre 2 y 10\n”);}

Construcción else Construcción else

Con la construcción else se pueden definir acciones para cuando la condición del if sea falsa. La sintaxis es

if ( condición ) sentenciaelse sentencia

Ejemplo:

if ( x==1 )printf (“la variable x vale uno\n”);

elseprintf (“x es distinta de uno\n”);

39

Para las sentencia if se utiliza paréntesis para bloques de sentencias ejecutables

Page 40: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Sentencia If- else anidadosSentencia If- else anidados

La aplicación de mas de un if consecutivo se lo conoce como anidados.

If (expresión_1) If (expresión_2) Acción verdadera; Else Accion falsa;

Sentencia If - else – ifSentencia If - else – if If (expresión_1) Accion verdadera; Else If (expresion_2) Accion verdadera; Else If (expresion_3) Accion verdadera;

Construcción switch Construcción switch Se utiliza para ejecutar acciones diferentes según el valor de una expresión.

Ejemplo de sintaxis:

switch ( expresión ){

case valor1: ... sentenciasA...break;

case valor2: ... sentenciasB ...break;

case valor3:case valor4:

40

La sentencia switch es similar a la sentencia if, if-else

Page 41: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

... sentenciasC ...break;

default: ... sentenciasD ...

}

Las sentenciasA se ejecutarán si expresión adquiere el valor1. Las sentenciasB se ejecutarán si adquiere el valor2.Las sentenciasC se ejecutarán si adquiere el valor3 o el valor4, indistintamente. Cualquier otro valor de expresión conduce a la ejecución de las sentenciasD; eso viene indicado por la palabra reservada default.

Sentencias repetitivasSentencias repetitivasSentencia while Sentencia while

Para ejecutar el mismo código varias veces, se puede utilizar:

while ( condición )sentencia

La sentencia se ejecuta una y otra vez mientras la condición sea cierta. Ejemplos:

main(){

int x=1;while ( x < 100 ){

printf(“Línea número %d\n”,x);x++;

}}Ejemplo usando el operador de predecremento: main(){

41

Page 42: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

int x=10;while ( --x ){

printf(“una línea\n”);}

}

En cada iteración se decrementa la variable x y se comprueba el valor devuelto por --x. Cuando esta expresión devuelva un cero, se abandonará el bucle. Esto ocurre después de la iteración en la que x vale uno.

Sentencia DO WHILESentencia DO WHILE

Su sintaxis será :do {

proposición 1 ;

proposición 2 ;

...............

} while (expresión) ;

Expresado en palabras, esto significa: ejecute las proposiciones, luego repita la ejecución mientras la expresión dé un resultado cierto. La diferencia fundamental entre esta iteración y la anterior es que el do-while se ejecuta siempre al menos una vez, sea cual sea el resultado de expresión.

Sentencia FOR Sentencia FOR

El FOR es simplemente una manera abreviada de expresar un WHILE, veamos su sintaxis:

for ( expresión1 ; expresión2 ; expresion3 ) {

proposición1 ;

42

Se recomienda no utilizar esta construcción, porque las construcciones while y for bastan para diseñar cualquier clase de bucles. Muy pocos programas hoy día usan esta construcción.

Todas estas expresiones, contenidas en el paréntesis del for deben estar separadas por punto y coma y no por comas simples.

Page 43: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

proposición2 ;

..............

}

Esto es equivalente a:

expresión1;

while ( expresión2 ) {

proposición1;

proposición2;

..............

expresion3 ;

}

La expresión1 es una asignación de una ó más variables, (equivale a una inicialización de las mismas), la expresión2 es una relación de algún tipo que, mientras dé un valor cierto , permite la iteración de la ejecución y expresión3 es otra asignación , que comúnmente varía alguna de las variables contenida en expresión2.

No es imprescindible que existan todas las expresiones dentro del paréntesis del for, pudiéndose dejar en blanco algunas de ellas, por ejemplo:

for ( ; exp2 ; exp3) ó

for (exp1 ; ; ) ó

for ( ; ; )

Estas dos últimas expresiones son interesantes desde el punto de vista de su falta de término relacional, lo

43

Page 44: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

que implica que el programador deberá haber previsto alguna manera alternativa de salir del lazo (probablemente mediante BREAK ó RETURN como veremos más adelante) ya que sino, la ejecución del mismo es infinita (ó tan larga como se mantenga encendida la computadora).

La Sentencia BreakLa Sentencia Break

El BREAK, ya brevemente descrito con el SWITCH, sirve también para terminar loops producidos por WHILE, DO-WHILE y FOR antes que se cumpla la condición normal de terminación.

Ejemplos del capitulo # 3Ejemplos del capitulo # 3

Ejemplo de control de flujo

I f

Ingrese dos números y diga si es mayor.

# include <stdio.h># include <conio.h>main (){ int a,b; printf ("ingrese dos números"); scanf ("%d%d", &a,&b);

44

Page 45: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

if (a>b) printf ("el numero mayor es:%d", a); getch (); return (0);}

Ingrese dos números y diga si es mayor, menor o iguales.

# include <stdio.h># include <conio.h>main (){ int a,b; printf ("ingrese dos números"); scanf ("%d%d", &a,&b); if (a>b) { printf("el mayor es: %d",a); printf ("el menor es: %d",b); } if (b>a) { printf("el mayor es: %d",b); printf("el menor es: %d",a); } if (a==b) printf ("los números son iguales: %d", a); getch (); return (0);}

if-else

Ingrese dos números y diga si es mayor o menor.

# include <stdio.h># include <conio.h>main (){

45

Page 46: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

int a,b; printf ("ingrese dos números"); scanf ("%d%d", &a,&b); if (a>b) { printf("el mayor es: %d",a); printf ("el menor es: %d",b); } else { printf("el mayor es: %d",b); printf("el menor es: %d",a); } getch (); return (0);}

if-else-if

Ingrese dos números y diga si es mayor, menor o iguales.

# include <stdio.h># include <conio.h>main (){ int a,b; printf ("ingrese dos números"); scanf ("%d%d", &a,&b); if (a>b) { printf("el mayor es: %d",a); printf ("el menor es: %d",b); } else { printf("el mayor es: %d",b); printf("el menor es: %d",a); } if (a==b) printf ("los números son iguales: %d", a); getch ();

46

Page 47: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

return (0);}

switch

Ingrese un número correspondiente a un mes del año y visualice cuantos dias tiene dicho mes.

# include <stdio.h># include <conio.h>main (){ int m; printf ("ingres el # de un mes"); scanf ("%d", m); switch (m) {

case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf ("el mes tiene 31 dias"); break; case 4: case 6: case 9: case 11: printf ("el mes tiene 30 dias"); break; case 2: printf ("el mes tiene 28 dias");

} getch (); return (0);}

47

Page 48: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

# include <stdio.h># include <conio.h> main (){ int opción; printf ("escriba 1 si desea continuar; 2 si desea terminar:"); scanf ("%d", &opcion);

switch (opcion) { case 1:

printf ("vale, continuar \n"); break; case 2: printf ("salir"); break; default:

printf ("opción no reconocida \n"); }

getch (); return (0);}

while

muestre 1000 veces hola.

# include <stdio.h># include <conio.h>main (){int c=1; while (c<=1000) { printf ("hola"); c=c+1; }getch ();return(0);

48

Page 49: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

}

# include <stdio.h># include <conio.h>main (){clrscr ();int n, cg=0, a=-1, b=1, c=0;printf ("ingrese la cantidad de números que quiere visualizar\n");scanf ("%d", &n); while (cg<=n)

{ c=a+b; a=b ; b=c; printf ("%d",c); getch (); cg++;

}return(0);}

49

Page 50: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

LenguajeC

50

Page 51: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Capitulo

#4¿Que es el void y el return ( ); ?

voidvoid

La manera de traducir en C la diferencia entre acciones y funciones pasa por la introducción de un nuevo tipo elemental de información llamado void.

51

Recordar:Si se escribe un void ya no se pondría return ( ); o viceversa, por que en programa le saldría un mensaje de error

Page 52: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Esta palabra, que en inglés significa vacío, designa un tipo sin contenido, o sea que un elemento de tipo void no tendrá valor alguno y, por lo tanto, no ocupará memoria.

void main( )

return return expresión;expresión;

Cabe destacar que C no permite retornar valores de cualquier tipo, como por ejemplo vectores. Hay otro tipo de valor que una función puede retornar en C, llamado puntero, que permite un ‘apaño’ para retornar los tipos en principio no permitidos.

El cuerpo del procedimiento consta de una declaración de variables (que serán locales, o sea, visibles únicamente desde el mismo procedimiento) y de una secuencia de instrucciones ejecutables. De hecho, el cuerpo de un procedimiento tiene la misma estructura que un programa cualquiera.

return (0);

InstruccionesInstrucciones ..

Las instrucciones scanf, printf y putchar no forman parte del núcleo de C. Para hacer uso de ellas hace

falta importarlas del módulo stdio con la instrucción.

Análogamente, para escribir un mensaje en la pantalla, utilizaremos

printf. Para imprimir un carácter, se puede utilizar también la instrucción putchar() que imprime su argumento en la pantalla.

52

Para leer secuencias en C

se utiliza la instrucción scanf.

Para la escritura de secuencias, utilizaremos el printf (o el putchar si se trata de una secuencia de caracteres) para imprimir la cadena de caracteres.

Page 53: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Un byte es la menor unidad de información 'natural' para la maquina.

Para leer caracteres hay un grupo de instrucciones más sintéticas y ventajosas. Se trata de las instrucciones getch y getche que con el formato.

variable = getch ();

variable = getche ();

Leen un carácter desde el teclado (sin necesidad de pulsar la tecla retorno) y la almacenan en variable.

La diferencia entre ambas es que getch no escribe el carácter leído en la

pantalla mientras que getche sí lo hace.

Análogamente, las instrucciones getch y getche se deben importar del módulo conio.

Que es una cadena de caracteres en C/C++?Que es una cadena de caracteres en C/C++?En cualquier lenguaje de programación las cadenas de caracteres tienen una importancia especial, no solo porque es el tipo mediante el cual se almacenan los mensajes a pantalla o entradas del teclado, sino porque un carácter (char) es del tamaño de un byte. Una cadena de caracteres es una colección ordenada de bytes. Un fichero (archivo), la información de pantalla en el sector de memoria de video, las entradas de bytes por los puertos y muchas otras entidades se pueden conceptualizar cómodamente como esto: una colección ordenada de bytes. Es cierto que en muchos casos se adoptan tipos definidos o clases, para una mejor administración de datos, pero aun en estos

53

En el caso de secuencias de caracteres es conveniente utilizar en lugar de scanf la instrucción getchar con el formato.

Cual es la diferencia.

Page 54: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

casos tales estructuras de datos complejas suelen utilizar arrays de tipo char en su nivel mas elemental.

FuncionesFuncionesHasta el momento hemos utilizado ya numerosas funciones, como printf o scanf, las cuales forman parte de la librería estándar de entrada/salida (stdio.h). Sin embargo el lenguaje C nos permite definir nuestras propias funciones, es decir, podemos añadir al lenguaje tantos comandos como deseemos.

Las funciones son básicas en el desarrollo de un programa cuyo tamaño sea considerable, puesto que en este tipo de programas es común que se repitan fragmentos de código, los cuales se pueden incluir en una función con el consiguiente ahorro de memoria. Por otra parte el uso de funciones divide un programa de gran tamaño en subprogramas más pequeños (las funciones), facilitando su comprensión, así como la corrección de errores.

Cuando llamamos a una función desde nuestra función principal main() o desde otra función lo que estamos haciendo realmente es un salto o bifurcación al código que le hayamos asignado, en cierto modo es una forma de modificar el flujo de control del programa como lo hacíamos con los comandos while y for.

DefiniciónDefinición

La forma general de definición de una función es:

tipo nombre (lista de parámetros){

54

La def inición de una función especif ica lo s iguiente:

nombre de la función

número de argumentos que l leva y t ipo de cada uno de el los

t ipo de datos que devuelve

Cuerpo de la función (el código que ejecuta)

Page 55: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

NOTA: no confundir definición con llamada; una función puede llamar a tantas otras como desee.

cuerpo de la función}

El tipo especifica el tipo de valor que devuelve la sentencia return de la función. El valor puede ser cualquier tipo válido; si no se especifica ninguno, se asume un resultado entero.

La lista de parámetros es la lista de nombres de variables separados por comas con sus tipos asociados que reciben los valores de los argumentos cuando se llama a la función.

Una función puede no tener parámetros, en cuyo caso la lista de parámetros está vacía; sin embargo, los paréntesis son necesarios.

DeclaraciónDeclaración

Cada función debe ser declarada. Su forma general es: tipo nombre _ función (lista de tipos (y nombres) de los argumentos); Si una función va usar argumentos, debe declarar variables que acepten los valores de los argumentos. Estas variables se llaman parámetros formales de la función y se comportan como variables locales dentro de la función, creándose al entrar en la función y destruyéndose al salir. La declaración de parámetros aparece después del nombre de la función al definirla.

  tipo del valor de retorno   nombre_de_la_función (lista de tipos de parámetros)

Definición de las Funciones Definición de las Funciones La definición de una función puede ubicarse en

cualquier lugar del programa, con sólo dos restricciones: debe hallarse luego de

dar su prototipo, y no puede estar dentro de la definición de otra función

(incluida main ()).

La definición debe comenzar con un encabezamiento, que debe coincidir

55

Page 56: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

totalmente con el prototipo declarado para la misma, y a continuación del mismo, encerradas por llaves se escribirán las sentencias que la componen.

Llamadas a funcionesLlamadas a funciones

La llamada de una función se produce mediante el uso de su nombre en una sentencia, pasando una lista de argumentos que deben coincidir en número y tipo con los especificados en la declaración (en otro caso se produciría una conversión de tipos o resultados inesperados). Llamadas por valor y por referencia En general, se pueden pasar argumentos a las funciones de dos formas, por valor y por referencia.

¿Qué son los argumentos de una función?¿Qué son los argumentos de una función?

Se distingue entre argumentos formales y argumentos actuales. Los argumentos formales son los que aparecen en la definición de la función, mientras que los actuales son los que aparecen en la llamada a la función. Se podría también decir que los argumentos formales son los argumentos vistos desde dentro de la función, y los argumentos actuales son los argumentos vistos desde el programa que llama a la función, esto es desde fuera de la función. Los argumentos formales son siempre variables de la función que recogen los valores que se les pasan desde el exterior; los argumentos actuales pueden ser variables o expresiones cuyos valores se pasan a los argumentos formales.

Cuando una función tiene valor de retorno puede ser utilizada en una sentencia aritmética (por ejemplo, la función seno en la expresión: y=sin(x)*x-1.0;). En este caso el valor de retorno se sustituye en el lugar ocupado por la llamada a la función en dicha sentencia aritmética. Cuándo una función no tiene valor de retorno, se llama simplemente colocando la

56

Page 57: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

llamada en una línea del programa seguida de punto y coma (por ejemplo: permutar (&x, &y) ;).

Función gotoxyFunción gotoxy

void gotoxy(int x, int y);

Mueve el cursor de la ventana de texto a la posición según las coordenadas especificadas por los argumentos x e y. Si las coordenadas no son válidas entonces la llamada a la función gotoxy es ignorada. Los argumentos no pueden ser 0.

Valor de retorno:

La función gotoxy no retorna ningún valor.

Ejemplo:

#include <conio.h>int main() { clrscr(); cprintf( "Ejemplo de \"gotoxy\"\r\n\r\n" ); cprintf( "1ª línea" ); cprintf( "2ª línea" ); gotoxy( 5, 20 ); cprintf( "3ª línea" ); gotoxy( 20, 1 ); cprintf( "4ª línea" ); gotoxy( 1, 15 ); cprintf( "Pulsa una tecla para continuar...\r\n" ); getch(); return 0;}

57

Page 58: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Ejemplos del capitulo # 4

Funciones

Realizar una función que muestre si un año es bisiesto o no lo es.

#include<stdio.h>#include <conio.h>int aobis(int x);main(){clrscr();int b,r;printf ("ingrese el numero:");scanf ("%d",&b);r=aobis(b);

58

Page 59: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

if (r==1)printf ("es bisiesto");elseprintf ("no es bisiesto");getch();return (0);}int aobis(int x){int z;if(x%4==0)if(x%100!=0||x%400==0)z=1;elsez=0;return(z);}

Realice una función que haga lo mismo que str.

#include<stdio.h>#include <conio.h>int potencia(int x,int y);main(){int b,e,r;printf ("ingrese la base:");scanf ("%d",&b);printf ("ingrese el exponente");scanf ("%d",&e);//r=pow(b,e);r=potencia(b,e);printf ("el resultado es: %d",r);getch();return (0);}int potencia (int x, int y){int i,z=1;for (i=1;i<=y;i++)z=z*x;

59

Page 60: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

return(z);}

Hacer una función que realice los mismos pasos del mod.

#include<stdio.h>#include <conio.h>#include<math.h>float modulo(int x,int y);main(){clrscr();float b,e,r;printf ("ingrese la dividendo:");scanf ("%f",&b);printf ("ingrese el divisor:");scanf ("%f",&e);r=modulo(b,e);printf ("el resultado es: %f",r);getch();return (0);}float modulo(int x, int y){float i,r,z=x;r=x/y;for (i=1;i<=r;i++)z=z-y;return(z);}

Realice una función que muestre si un número es primo o no lo es.

#include<stdio.h>#include <conio.h>int primo(int x);

60

Page 61: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

main(){clrscr();int b,r;printf ("ingrese el numero:");scanf ("%d",&b);r=primo(b);if (r==1)printf ("es primo");elseprintf ("no es primo");getch();return (0);}int primo(int x){int d=0, z;for (int i=1;i<=x;i++)if(x%i==0)d++;if(d<=2)z=1;elsez=0;return(z);}

61

Page 62: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

LenguajeC

62

Page 63: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Capitulo

#5Manejo de cadenas Manejo de cadenas <string.h><string.h>

Recordando la presentación de arreglos hecha en donde las cadenas están definidas como un arreglo de caracteres o un apuntador a una porción de memoria conteniendo caracteres ASCII. Una cadena en C es una secuencia de cero o más caracteres seguidas por un carácter NULL o \0:

Representación de un arreglo.

63

Page 64: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Es importante preservar el carácter de terminación NULL, ya que con éste es como C define y maneja las longitudes de las cadenas. Todas las funciones de la biblioteca estándar de C lo requieren para una operación satisfactoria.

En general, aparte de algunas funciones restringidas en longitud (strncat(), strncmp() y strncpy()), al menos que se creen cadenas a mano, no se deberán encontrar problemas. Se deberán usar las funciones para manejo de cadenas y no tratar de manipular las cadenas en forma manual desmantelando y ensamblando cadenas.

Funciones básicas para el manejo de cadenasFunciones básicas para el manejo de cadenas

Todas las funciones para manejo de cadenas tienen su prototipo en:

#include <string.h>

Función memchr ANSI CFunción memchr ANSI C

void *memchr(const void *s, int c, size_t n);

Localiza la primera aparición del carácter c (convertido a unsigned char) en los primeros n caracteres (cada uno interpretado como un unsigned char) del objeto apuntado por s.

Valor de retorno:La función retorna un puntero al carácter localizado, o un puntero nulo si el carácter no apareció en el objeto.

Ejemplo:

#include <stdio.h>#include <string.h> int main(){

64

Page 65: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

char cadena[] = "Erase una vez..."; char *puntero; puntero = (char *)memchr( cadena, 'a', 5 ); printf( "%s\n", cadena); printf( "%s\n", puntero ); getch(); return (0);}

Función memcmp ANSI CFunción memcmp ANSI C

int memcmp(const void *s1, const void *s2, size_t n);

Compara los primeros n caracteres del objeto apuntado por s1 (interpretado como unsigned char) con los primeros n caracteres del objeto apuntado por s2 (interpretado como unsigned char).

Valor de retorno:La función retorna un número entero mayor, igual, o menor que cero, apropiadamente según el objeto apuntado por s1 es mayor, igual, o menor que el objeto apuntado por s2.

Ejemplo:

#include <stdio.h>#include <string.h> int main(){ char a[3] = { 82, 81, 84 }; char b[3] = { 85, 83, 86 }; int i; for( i=0; i<3; i++ ) printf( "a[%d]=%c ", i, a[i] ); printf( "\n" ); for( i=0; i<3; i++ ) printf( "b[%d]=%c ", i, b[i] ); printf( "\n" ); i = memcmp( a, b, 4 ); printf( "a es " ); if( i < 0 ) printf( "menor que" );

65

Page 66: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

else if( i > 0 ) printf( "mayor que" ); else printf( "igual a" ); printf( " b\n" ); getch(); return (0);}

Función memcpy ANSI CFunción memcpy ANSI C

void *memcpy(void *s1, const void *s2, size_t n);

Copia los primeros n caracteres del objeto apuntado por s2 al objeto apuntado por s1.

Valor de retorno:La función retorna el valor de s1. Si al copiar un objeto al otro se superponen, entonces el comportamiento no está definido.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char a[7] = "abcdefg"; char *ptr; int i; memcpy( ptr, a, 5 ); for( i=0; i<7; i++ ) printf( "a[%d]=%c ", i, a[i] ); printf( "\n" ); for( i=0; i<5; i++ ) printf( "ptr[%d]=%c ", i, ptr[i] ); printf( "\n" ); getch(); return (0);}

Función memmove ANSI CFunción memmove ANSI C

void *memmove(void *s1, const void *s2, size_t n);

66

Page 67: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Copia los primeros n caracteres del objeto apuntado por s2 al objeto apuntado por s1.Sin embargo, se asegura de que no estén superpuestos. Por esta razón, copia los caracteres a un array/arreglo temporalmente. Después vuelve a copiar del array temporal al objeto en cuestión.

Valor de retorno:La función retorna el valor de s1.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char a[7] = "abcdefg"; char *ptr; int i; memmove( ptr, a, 5 ); for( i=0; i<7; i++ ) printf( "a[%d]=%c ", i, a[i] ); printf( "\n" ); for( i=0; i<5; i++ ) printf( "ptr[%d]=%c ", i, ptr[i] ); printf( "\n" ); getch(); return (0);}

Función memset ANSI CFunción memset ANSI C

void *memset(void *s, int c, size_t n);

Copia el valor de c (convertido a unsigned char) en cada uno de los primeros n caracteres en el objeto apuntado por s.

Valor de retorno:La función retorna el valor de s.

Ejemplo:

67

Page 68: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

#include <stdio.h>#include <string.h>int main(){ char c = 'F'; char *s; int i; s = (char*)malloc(5*sizeof(char)); memset( s, c, 5 ); for( i=0; i<5; i++ ) printf( "c[%d]=%c ", i, c ); printf( "\n" ); free(s); getch(); return (0);}

Función strchr ANSI CFunción strchr ANSI C

char *strchr(char *s, int c);

Localiza la primera aparición de c (convertido a unsigned char) en la cadena apuntada por s (incluyendo el carácter nulo).

Valor de retorno:La función retorna un puntero a partir del carácter encontrado. Si no se ha encontrado el carácter, c, entonces retorna un puntero null.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s[11] = "Hola amigos"; char c = 'a'; printf( "s=%s\t", s );

68

Page 69: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

printf( "c=%c\n", c ); printf( "strchr=%s\n", strchr( s, c ) ); getch(); return (0);}

Función strcat ANSI CFunción strcat ANSI C

char *strcat(char*s1, const char *s2);

Añade una copia de la cadena apuntada por s2 (incluyendo el carácter nulo) al final de la cadena apuntada por s1. El carácter inicial de s2 sobrescribe el carácter nulo al final de s1.

Valor de retorno:La función retorna el valor de s1. Si la copia hace que los objetos se superpongan, entonces el comportamiento no está definido.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s1[11] = "Hola "; char s2[6] = "amigos"; printf( "s1=%s\t", s1 ); printf( "s2=%s\n", s2 ); strcat( s1, s2 ); printf( "s1=%s\n", s1 ); getch(); return (0);}

Función strcmp ANSI CFunción strcmp ANSI C

int strcmp(const char *s1, const char *s2);

69

Page 70: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Compara la cadena apuntada por s1 con la cadena apuntada por s2.

Valor de retorno:La función retorna un número entero mayor, igual, o menor que cero, apropiadamente según la cadena apuntada por s1 es mayor, igual, o menor que la cadena apuntada por s2.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s1[5] = "Abeja"; char s2[5] = "abeja"; int i; printf( "s1=%s\t", s1 ); printf( "s2=%s\n", s2 ); i = strcmp( s1, s2 ); printf( "s1 es " ); if( i < 0 ) printf( "menor que" ); else if( i > 0 ) printf( "mayor que" ); else printf( "igual a" ); printf( " s2\n" ); getch(); return (0);}

Función strcoll ANSI CFunción strcoll ANSI C

int strcoll(const char *s1, const char *s2);

Compara la cadena apuntada por s1 con la cadena apuntada por s2, ambas interpretadas acordes a la categoría LC_COLLATE de la localidad actual.

Valor de retorno:La función retorna un número entero mayor, igual, o menor que cero, apropiadamente según la cadena apuntada por s1 es mayor, igual, o menor que la cadena apuntada por s2, cuando ambas son

70

Page 71: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

interpretadas apropiadamente según la localidad actual.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s1[5] = "Abeja"; char s2[5] = "abeja"; int i; printf( "s1=%s\t", s1 ); printf( "s2=%s\n", s2 ); i = strcoll( s1, s2 ); printf( "s1 es " ); if( i < 0 ) printf( "menor que" ); else if( i > 0 ) printf( "mayor que" ); else printf( "igual a" ); printf( " s2\n" ); getch(); return (0);}

Función strcpy ANSI CFunción strcpy ANSI C

char *strcpy(char *s1, const char *s2);

Copia la cadena apuntada por s2 (incluyendo el carácter nulo) a la cadena apuntada por s1.

Valor de retorno:La función retorna el valor de s1. Si al copiar una cadena a la otra se superponen, entonces el comportamiento no está definido.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s2[8] = "abcdefg";

71

Page 72: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

char s1[8]; strcpy( s1, s2 ); printf( "s2=%s\n", s2 ); printf( "s1=%s\n", s1 ); getch(); return (0);}

Función strcspn ANSI C

size_t strcspn(const char *s1, const char *s2);

Cuenta el número de caracteres de una subcadena inicial apuntada por s1 que no contenga ninguno de los caracteres en la cadena apuntada por s2.

Valor de retorno:La función retorna el número de caracteres leídos de la subcadena hasta que halla alguno de los caracteres de s2. El carácter nulo no se cuenta.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s1[13] = "Hola a todos"; char s2[5] = "abcd"; printf( "s1=%s\n", s1 ); printf( "s2=%s\n", s2 ); printf( "strcspn(s1,s2) = %d\n", strcspn( s1, s2 ) ); getch(); return (0);}

Función strerror ANSI CFunción strerror ANSI C

char *strerror(int errnum);

Convierte el número de error en errnum a un mensaje de error (una cadena de caracteres).

72

Page 73: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Valor de retorno:La función retorna la cadena de caracteres conteniendo el mensaje asociado con el número de error. Esta conversión y el contenido del mensaje dependen de la implementación. La cadena no será modificada por el programa, pero sí puede ser sobrescrito con otra llamada a la misma función.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ int errnum; for( errnum=0; errnum<39; errnum++ ) printf( "strerror(%d) = %s\n", errnum, strerror( errnum ) ); getch(); return (0);}

Función strcspn ANSI CFunción strcspn ANSI C

size_t strcspn(const char *s1, const char *s2);

Cuenta el número de caracteres de una subcadena inicial apuntada por s1 que no contenga ninguno de los caracteres en la cadena apuntada por s2.

Valor de retorno:La función retorna el número de caracteres leídos de la subcadena hasta que halla alguno de los caracteres de s2. El carácter nulo no se cuenta.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s1[13] = "Hola a todos"; char s2[5] = "abcd";

73

Page 74: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

printf( "s1=%s\n", s1 ); printf( "s2=%s\n", s2 ); printf( "strcspn(s1,s2) = %d\n", strcspn( s1, s2 ) ); getch(); return (0);}

Función strrchr ANSI CFunción strrchr ANSI C

char *strrchr(char *s, int c);

Localiza la última aparición de c (convertido a unsigned char) en la cadena apuntada por s (incluyendo el carácter nulo).

Valor de retorno:La función retorna un puntero a partir del carácter encontrado. Si no se ha encontrado el carácter, c, entonces retorna un puntero nulo.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s[11] = "Hola amigos"; char c = 'a'; printf( "s=%s\t", s ); printf( "c=%c\n", c ); printf( "strrchr=%s\n", strrchr( s, c ) ); getch(); return (0);}

Función strlen ANSI CFunción strlen ANSI C

size_t strlen(const char *s);

Calcula el número de caracteres de la cadena apuntada por s.

Valor de retorno:

74

Page 75: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

La función retorna el número de caracteres hasta el carácter nulo, que no se incluye.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s[13] = "Hola a todos"; printf( "s=%s\n", s ); printf( "strlen(s) = %d\n", strlen( s ) ); getch(); return (0);}

Función strncat ANSI CFunción strncat ANSI C

char *strncat(char*s1, const char *s2, size_t n);

Añade no más de n caracteres (un carácter nulo y los demás caracteres siguientes no son añadidos) de la cadena apuntada por s2 al final de la cadena apuntada por s1. El carácter inicial de s2 sobrescribe el carácter nulo al final de s1. El carácter nulo siempre es añadido al resultado.

Valor de retorno:La función retorna el valor de s1. Si la copia hace que los objetos se superpongan, entonces el comportamiento no está definido.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s1[11] = "Hola "; char s2[6] = "amigos"; printf( "s1=%s\t", s1 ); printf( "s2=%s\n", s2 ); strncat( s1, s2, 3 ); printf( "s1=%s\n", s1 );

75

Page 76: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

getch(); return (0);}

Función strncmp ANSI CFunción strncmp ANSI C

int strncmp(const char *s1, const char *s2, size_t n);

Compara no más de n caracteres (caracteres posteriores al carácter nulo no se tienen en cuenta) de la cadena apuntada por s1 con la cadena apuntada por s2.

Valor de retorno:La función retorna un número entero mayor, igual, o menor que cero, apropiadamente según la cadena apuntada por s1 es mayor, igual, o menor que la cadena apuntada por s2.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s1[9] = "artesano"; char s2[8] = "artista"; int i; printf( "s1=%s\t", s1 ); printf( "s2=%s\n", s2 ); i = strncmp( s1, s2, 3 ); printf( "Las 3 primeras letras de s1 son " ); if( i < 0 ) printf( "menores que" ); else if( i > 0 ) printf( "mayores que" ); else printf( "iguales a" ); printf( " s2\n" ); getch(): return (0);}

76

Page 77: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Función strncpy ANSI CFunción strncpy ANSI C

char *strncpy(char *s1, const char *s2, size_t n);

Copia no más de n caracteres (caracteres posteriores al carácter nulo no son copiados) de la cadena apuntada por s2 a la cadena apuntada por s1.

Valor de retorno:La función retorna el valor de s1. Si al copiar una cadena a la otra se superponen, entonces el comportamiento no está definido. Si el array/arreglo apuntado por s2 es una cadena que es más corta que n caracteres, entonces caracteres nulos son añadidos a la copia en el array apuntado por s1.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s2[8] = "abcdefg"; char s1[8];

strncpy( s1, s2, 3 ); printf( "s2=%s\n", s2 ); printf( "s1=%s\n", s1 ); getch(); return (0);}

Función strpbrk ANSI CFunción strpbrk ANSI C

char *strpbrk(const char *s1, const char *s2);

Localiza la primera aparición de la cadena apuntada por s1 de cualquier carácter de la cadena apuntada por s2.

Valor de retorno:La función retorna un puntero al carácter, o un puntero nulo si ningún carácter de s2 apareció en s1.

77

Page 78: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s1[13] = "Hola a todos"; char s2[5] = "deip"; printf( "s1=%s\n", s1 ); printf( "s2=%s\n", s2 ); printf( "strpbrk(s1,s2) = %s\n", strpbrk( s1, s2 ) ); getch(); return (0);}

Función strxfrm ANSI CFunción strxfrm ANSI C

size_t strxfrm(char *s1, const char *s2, size_t n);

Transforma la cadena apuntada por s2 y coloca la cadena resultante en el array/arreglo apuntado por s1. La transformación es tal que, si la función strcmp es aplicada a las dos cadenas transformadas, el valor de retorno corresponderá a los valores de retorno de la función strcoll. No más de n caracteres son colocados en el array resultante apuntado por s1, incluyendo el carácter nulo. Si n es cero, s1 puede ser un puntero nulo.

Valor de retorno:La función retorna la longitud del array transformado (sin incluir el carácter nulo). Si el valor es n o más, el contenido del array apuntado por s1 es indeterminado. Si se copian objetos que son superpuestos, el comportamiento no está definido.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s2[7] = "abcdefg"; char s1[7];

78

Page 79: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

int i; i = strxfrm( s1, s2, 4 ); printf( "s2=%s\n", s2 ); printf( "s1=%s\tlonguitud=%d\n", s1, i ); getch(); return (0);}

Función strspn ANSI CFunción strspn ANSI C

size_t strspn(const char *s1, const char *s2);

Calcula el número de caracteres de una subcadena inicial apuntada por s1 que consiste en todos los caracteres formados en la cadena apuntada por s2.

Valor de retorno:La función retorna la longitud de esta subcadena.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s1[13] = "Hola a todos"; char s2[5] = "Hola";

printf( "s1=%s\n", s1 ); printf( "s2=%s\n", s2 ); printf( "strspn(s1,s2) = %d\n", strspn( s1, s2 ) ); getch(); return (0);}

Función strstr ANSI CFunción strstr ANSI C

char *strstr(const char *s1, const char *s2);

Localiza la primera aparición en la cadena apuntada por s1 de la secuencia de caracteres (excluyendo el carácter nulo) en la cadena apuntada por s2.

79

Page 80: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Valor de retorno:La función retorna un puntero a la cadena encontrada, o un puntero nulo si no se encontró la cadena. Si s2 apunta a una cadena de longitud cero, la función retorna s1.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s1[13] = "Hola a todos"; char s2[3] = "la"; printf( "s1=%s\n", s1 ); printf( "s2=%s\n", s2 ); printf( "strstr(s1,s2) = %s\n", strstr( s1, s2 ) ); getch(); return (0);}

Función strtok ANSI CFunción strtok ANSI C

char *strtok(char *s1, const char *s2);

Rompe la cadena s1 en segmentos o tókens. Esta ruptura destruye s1, en el proceso. La forma de romper la cadena depende de la secuencia de caracteres de la cadena s2. Estos caracteres se denominan [caracteres] delimitadores. La función recorrerá la cadena en busca de alguno de los delimitadores de la cadena s2. Cuando lo encuentre, el proceso se detiene, ya que tiene un token. Posteriores llamadas a strtok romperán la cadena s1 en otros tókens. Estas llamadas pueden tener otra secuencia de delimitadores.

Valor de retorno:La primera llamada a strtok determina la cadena a romper, retornando el puntero al comienzo del primer token. Si se recorrió la cadena s1 sin haber encontrado un delimitador, y aún no se ha obtenido el primer token, entonces la función retornará un puntero nulo.

80

Page 81: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Posteriores llamadas retornarán más tókens. Si ya no encuentra más delimitadores, entonces retornará todos los caracteres desde el último delimitador para ser el último token. Si ya se retornó el último token, entonces retornará un puntero nulo con demás llamadas a la función.

Ejemplo:

#include <stdio.h>#include <string.h>int main(){ char s1[49] = "Esto es un ejemplo para usar la funcion strtok()"; char s2[4] = " \n\t"; char *ptr; printf( "s1=%s\n", s1 ); ptr = strtok( s1, s2 ); // Primera llamada => Primer token printf( "%s\n", ptr ); while( (ptr = strtok( NULL, s2 )) != NULL ) // Posteriores llamadas printf( "%s\n", ptr ); getch(); return (0);}

strcasecmp(const char *s1, const char *s2) Versión que ignora si son mayúsculas o minúsculas de strcmp().

strncasecmp(const char *s1, const char *s2, size_t n) Versión insensible a mayúsculas o minúsculas de strncmp() que compara los primeros n caracteres de s1.

char *strchr(const char *s, int c)

81

Page 82: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Devuelve un puntero a la primera ocurrencia del carácter c en la cadena de caracteres s.

Conjunto Ordenado de Caracteres (Strings)Conjunto Ordenado de Caracteres (Strings)

Los strings son simplemente arrays de caracteres, tal como los vimos hasta ahora, con el agregado de un último elemento constante: el carácter NULL (ASCII == 0 , simbolizado por la secuencia de escape \0) . Este agregado permite a las funciones que procesan a los mismos, determinar fácilmente la finalización de los datos. Podemos generar un string, declarando: char car_str [] = { 'A' , 'B' , 'C' , 'D' , 0 } ;

char car_str[] = { 'A' , 'B' , 'C' , 'D' , '\0' } ;Ambas maneras son equivalentes. Sin embargo hay , en el lenguaje C , una forma más compacta de declararlos : char car_str[] = "ABCD" ;

char car_str[5] = "ABCD" ;

int texto[] =  "renglon 1  \n renglon 2  \n " ;    /* ERROR */

Unsigned char texto [] =”renglon 1 \n renglon 2 \n “;

Simplemente en la declaración del mismo se encierran los caracteres que lo componen entre comillas. Obsérvese que en la segunda declaración, se ha explicitado (no es necesario), la cantidad de elementos que tiene el string, y es uno más que la cantidad de caracteres con que se lo inicializa, para dejar lugar al NULL. Todas estas declaraciones agregan automáticamente el NULL como último elemento del array.

82

Page 83: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Lenguajec

83

Page 84: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Capitulo

# 6ArraysArrays

Los arrays quizás sean la forma más simple de tipos de datos compuestos.

Definición: Definición:

Array: Un array es una colección ordenada de elementos de un mismo tipo de datos, agrupados de forma consecutiva en memoria. Cada elemento del array tiene asociado un índice, que no es más que un número natural que lo identifica inequívocamente y permite al programador acceder a él. La dirección más baja corresponde al primer elemento y la más alta al

84

C no comprueba los límites de los arrays. Se puede pasar cualquier extremo de un array y escribir en alguna otra variable de datos e incluso en el código del programa.

Page 85: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

último. Los arrays pueden tener una o varias dimensiones. El array más común en C es la cadena, que simplemente es un array de caracteres terminado por uno nulo.

Uso de tablasUso de tablasTablas o vectoresTablas o vectores

La declaración de vectores en C se hace mediante el siguiente formato:

tipo nombre_vector [dim]

Donde dim ha de ser un número entero y denota la dimensión o longitud del vector. Así, las instrucciones siguientes:

int datos[10]:

char nombre[12], apellido[12];

Declaran un vector de enteros de 10 elementos y dos vectores de caracteres de 12 elementos cada uno.

Una vez declarado un vector de n elementos, se puede leer y escribir en sus componentes teniendo en cuenta que éstas se numeran de la 0 a la n-1. Por ejemplo, para referenciar la primera letra de apellido se ha de escribir apellido[0] y para referenciar el último elemento de datos se ha de escribir datos[9].

Para declarar variables indexadas con más de un índice, el formato es

Tipo nombre_variable[dim_1][dim_2]...[dim_k]

Usualmente se llama vector una variable con un índice y matriz una variable con dos índices. Además, el primer índice se llama fila, el segundo columna y el tercero página. A partir del cuarto índice no se utilizan nombres específicos.

Cadenas de caracteresCadenas de caracteres

85

Page 86: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Es frecuente emplear vectores para la manipulación de cadenas de caracteres, como nombres de personas, de calles, etc. En estos casos, hemos de declarar la variable con una longitud capaz de alojar el nombre más largo de entre los valores posibles. Así, para almacenar nombres de personas, podemos declarar el vector

char nombre[15]

Si se sabe que 15 es una cota para el tamaño de los nombres que aparecerán durante la ejecución. Para facilitar el tratamiento de estos vectores de caracteres con longitud variable, C tiene un tipo predefinido que resulta muy conveniente: el tipo string (cadena de caracteres). Su declaración es la normal de un vector de caracteres. Lo que cambia es su lectura y escritura. En el momento de leer una cadena de caracteres, el computador los leerá uno a uno hasta encontrar un cambio de línea. Cuando esto suceda, añadirá al final de la secuencia leída un carácter nulo (el carácter con código ASCII igual a 0). Esta marca le permitiría saber posteriormente donde se encuentra el fin de la cadena. Huelga decir que si sabemos que la longitud máxima de las cadenas a tratar es k, hace falta declarar el vector de dimensión k+1 para poder alojar también esta marca. Así, en el ejemplo anterior se debería declarar

char nombre[16]

La lectura de una cadena de caracteres se realiza poniendo en el control el formato %s y quitando del nombre de la variable el prefijo & en la instrucción scanf. Existe otra manera de leer una cadena desde el teclado, usando la instrucción gets con el formato

gets (nombre_cadena);

Que lee todos los caracteres tecleados hasta pulsar la tecla retorno. Para la escritura, también hace falta utilizar el formato %s en la parte de control del printf.

86

Page 87: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Arrays unidimensionalesArrays unidimensionales

Los arrays unidimensionales son listas de información del mismo tipo que se guardan en posiciones contiguas de memoria según el orden del índice. La forma general de declaración es: tipo nombre _ variable [tamaño];Los arrays tienen que declararse implícitamente para que el compilador reserve espacio en memoria para ellos.Para declarar un array de 10 elementos denominado p y de tipo carácter, se escribe: p y de tipo carácter, se escribe: char p [10]; En este caso hemos declarado un array que tiene diez elementos, desde p [0] hasta p [9].En C todos los arrays tienen el 0 como índice de su primer elemento.

CadenasCadenas

El uso más común de los arrays unidimensionales es como cadenas de caracteres. En C una cadena se define como un array de caracteres que termina en un carácter nulo (¿\0¿).Para declarar un array de caracteres es necesario un carácter más que la cadena más larga que pueda contener, para dejar sitio para el carácter nulo del final de la cadena.Una constante de cadena es una lista de caracteres encerrada entre dobles comillas. Por ejemplo: "hola, que tal"No es necesario añadir explícitamente el carácter nulo al final de las constantes de cadena, el compilador lo hace automáticamente.

Arrays multidimensionalesArrays multidimensionales

C permite arrays de más de una dimensión. La forma general de declaración de un array multidimensional es:

87

Los arrays multidimensionales se inicializan del mismo modo que los unidimensionales.

Page 88: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Tipo nombre [a] [b] [c] ¿... [z];

Los arrays de tres o más dimensiones no se utilizan a menudo por la cantidad de memoria que se requiere para almacenarlos, ya que el almacenamiento requerido aumenta exponencialmente con el número de dimensiones. La forma general es: tipo nombre [tamaño1] ¿ [tamaño n]={lista de valores}; la lista de valores es una lista de constantes separadas por comas cuyo tipo es compatible con el tipo especificado en la declaración del array. Por ejemplo: int i[10] = {1,2,3,4,5,6,7,8,9,10};

Con las cadenas o arrays de caracteres se hace igual, aunque permite una inicialización abreviada.Estas dos sentencias producen el mismo resultado:char cad[11] = "Me gusta C";char cad[11] = {¿M¿,¿e¿,¿ ¿,¿g¿,¿u¿,¿s¿,¿t¿,¿a¿,¿ ¿,¿C¿,¿\0¿};

Conjunto Ordenado de Variables (Arrays)Conjunto Ordenado de Variables (Arrays)

Los arreglos ó conjuntos de datos ordenados (arrays) recolectan variables del MISMO tipo, guardándolas en forma secuencial en la memoria. La cantidad máxima de variables que pueden albergar está sólo limitada por la cantidad de memoria disponible. El tipo de las variables involucradas puede ser cualquiera de los ya vistos, con la única restricción de que todos los componentes de un array deben ser del mismo tipo. La declaración de un array se realiza según la siguiente sintaxis:

tipo de las variables   nombre[ cantidad de elementos] ;

Ejemplos del capitulo # 5Ejemplos del capitulo # 5

Ejercicios con array

88

Page 89: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Array con números.

Presentar la tabla de multiplicar

# include <stdio.h># include <conio.h>main (){clrscr();int c,x=1, d, r,y=1;for (c=1;c<=12;c++) { if (c==7) { x=1; y=14; } if (c<7) y=1; else y=14; for (d=1;d<=12;d++) { r=d*c; gotoxy(x,y);printf("%dx%d=%d\n", c, d, r); y++; } //y=1; x=x+11; }getch ();return (0);}

Ingresar 10 números y presentar de forma ascendente.

# include <stdio.h># include <conio.h>

89

Page 90: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

main (){clrscr();int a[10],i,j,temp ;for (i=0;i<=9;i++) { printf("ingresar un numero %d:\n", i); scanf ("%d",&a[i]); } for (i=0;i<=9;i++) { for (j=0;j<=9;j++) { if (a[j]>a[i]) { temp =a[i]; a[i]=a[j]; a[j]=temp ; } } } for (j=0;j<=9;j++)printf ("el orden correcto es: %d\n",a[j]);getch ();return (0);}

Ingrese 10 números y presentarlos por pantalla en forma descentente.

# include <stdio.h># include <conio.h>main (){clrscr();int a[10],i,j,temp ;for (i=0;i<=9;i++) { printf("ingresar un numero %d:\n", i); scanf ("%d",&a[i]); }

90

Page 91: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

for (i=0;i<=9;i++) { for (j=0;j<=9;j++) { if (a[j]<a[i]) { temp =a[i]; a[i]=a[j]; a[j]=temp ; } } }for (j=0;j<=9;j++)printf ("el orden correcto es: %d\n",a[j]);getch ();return (0);}

Ingrese los números de la matriz y súmelos.

# include <stdio.h># include <conio.h>main (){clrscr();int n[4][4],s=0,i,j;for (i=0;i<4;i++) for (j=0;j<4;j++) { gotoxy (3*j+3,i+5); scanf ("%d",&n[i][j]); } s=0; for (i=0;i<4;i++) for (j=0;j<4;j++) { s=s+n[i][j]; }printf ("la suma es:%d",s);getch();

91

Page 92: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

return(0);}

Ingrese los números de la matriz y sume de la diagonal principal y secundaria.

# include <stdio.h># include <conio.h>main (){clrscr();int y,n[4][4],s=0,s2=0,i,j;

for (i=0;i<3;i++)for (j=0;j<3;j++){ gotoxy (3*j+3,i+5); scanf ("%d",&n[i][j]);}

for (i=0;i<3;i++) s=s+n[i][i]; s2=0; y=2;

for (i=0;i<=2;i++) { s2=s2+n[i][y]; y--; }

printf ("diagonal %d",s);printf ("\ndiagonal %d",s2);getch();return(0);}

Ingrese los números y sume los valores que están debajo de la diagonal principal.

#include<stdio.h>#include<conio.h>

92

Page 93: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

#include<string.h>main(){int a[3][3],s1=0,s2=0,i,j,y;clrscr();

for (i=0;i<=2;i++)for (j=0;j<=2;j++) { gotoxy (3*j+3,i+5); scanf("%d",&a[i][j]); }

for (i=0;i<=2;i++) for (j=0;j<=2;j++) { if (i>j) s1=s1+a[i][j]; }

printf("La suma es:%d",s1);getch();return(0); }

ingrese los numeros de la matriz y diga cules son los primos.

# include <stdio.h># include <conio.h>main (){clrscr();int n[4][4],s=0,i,j,d=0,p=0;

for (i=1;i<4;i++)for (j=1;j<4;j++){ gotoxy(3*j+15,i+5); scanf ("%d",&n[i][j]);}

for (i=1;i<4;i++)for (j=1;j<4;j++) { d=0; for (s=1;s<=n[i][j];s++)

93

Page 94: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

if (n[i][j]%s==0) d++; if (d<=2) p=p+n[i][j]; }

printf ("el primo es:%d",p);getch();return(0);}

ingrese dos matrices y súmelas.

#include <stdio.h> #include <conio.h> #include <string.h> main() { clrscr(); int a[3][3],b[3][3],c[3][3], i,j,k; printf ("ingrese los valores de la primera matriz");

for (i=0;i<=2;i++) for (j=0;j<=2;j++) { gotoxy(3*j+3,i+5); scanf("%d",&a[i][j]); }

for (i=0;i<=2;i++) for (j=0;j<=2;j++) { gotoxy(3*j+15,i+5); scanf("%d",&b[i][j]); }

for (i=0;i<=2;i++) for (j=0;j<=2;j++) c[i][j]=0 ;

for(i=0;i<=2;i++) for(j=0;j<=2;j++) { c[i][j]=(a[i][j]+b[i][j]) ; gotoxy(4*j+25,i+5) ;

94

Page 95: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

printf ("%d",c[i][j]); }

getch(); return(0); }

Array con cadena de caracteres

Array ingrese una palabra.

#include<stdio.h>#include<conio.h>#include<string.h>main (){clrscr();char f [5];printf("ingrese una palabra");gets(f);printf("la nueva cadena es%s:",f);getch();return(0);}

Ingresar una palabra y presentar por pantalla la palabra de forma inversa.

#include<stdio.h>#include<conio.h>#include<string.h>main (){clrscr();int i,j=0;char f [4] ,f1[4] ;

95

Page 96: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

printf("ingrese una palabra");gets(f);for(i=4;i>=0;i--) { f1[j]=f[i]; j++; }printf("la nueva cadena es:%s",f1);getch();return(0);}

Cuantas vocales tiene una frase.

#include<stdio.h>#include<conio.h>#include<string.h>#include<ctype.h>#include<stdlib.h>main(){clrscr();char a[50];int v=0,i;printf ("ingrese la frase: ");gets(a);for(i=0;i<=50;i++) { switch (tolower(a[i])) { case 'a': case 'e': case 'i': case 'o': case 'u': v++; } }printf("el numero de vocales es %d",v);

96

Page 97: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

getch();return(0); }

97

Page 98: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

98

Page 99: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

Que ☺rebote por la pantalla.

# include <stdio.h># include <conio.h># include <dos.h>main(){int c=1,q=76,cr=30,qr=46,s=6,r=1;

while (c<=q){clrscr();gotoxy (q,c); printf (" ☺ ");delay (150);c++;q--;}

while (cr<=qr){clrscr();gotoxy (cr,qr); printf (" ☺ ");delay (150);cr--;qr--;

if (qr==14){c=1;q=14;

while (c<=q){gotoxy (c,q); printf (" ☺ ");delay (150);c++;q--;}

while (s>=r)

99

Page 100: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

{clrscr();gotoxy (s,r); printf (" ☺ ");delay (150);s++;r++;

if (r==49)s=49 ;r=49;{while (s>=r)clrscr();gotoxy (s,r)s++;r--;}

} }getch();return (0);}

Ejercicios propuestos

1. Escribir un programa que lea tres enteros y emita un mensaje que indique si están o no en orden numérico.

2. Escribir un programa que introduzca el número de un mes y visualice el número de días de ese mes.

3. Encontrar el número mayor de una serie de números.

4. Escribir un programa que calcule la suma de los 50 primeros números enteros.

100

Page 101: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

5. encontrar el numero natural N mas pequeño tal que la suma de los N primeros números exceda de una cantidad introducida por teclado.

6. Escribir y ejecutar un programa que invierta los dígitos de un entero dado.

7. El valor de ex se puede aproximar por la suma x 2 x3 xn 1 + x + 2 ! + 3! + ………… + n!

8. Escribir un programa que calcule y visualice el más grande, el más pequeño y la media de N números. El valor de N se solicitara al principio del programa y los números serán introducidos por el usuario.

Ejercicios resueltos

1. para encontrar el máximo común divisor de dos números se emplea el algoritmo de Euclides, que se puede describir así: dividir a entre b y se obtiene el cociente q y el residuo r si es 0 b es mcd, sino divide b para r y así sucesivamente hasta encontrar un residuo 0, el ultimo divisor es el mcd.

# include <stdio.h># include <conio.h>main (){clrscr ();int a=0, b=0,r=0;while (a<=b)

101

Page 102: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

{printf ("ingrese el valor de a");scanf ("%d",&a);printf ("ingrese el valor de b");scanf ("%d",&b);}r=a%b; while (r!=0) { a=b; b=r; r=a%b; } printf ("el mcd es %d",b);getch ();return (0);}

2. Un número perfecto es aquel número que es igual a la suma de todas sus divisiones excepto el mismo. El primer número perfecto es 6, ya que 1+2+3=6. escribir un programa que muestra todos los números perfectos hasta un número dado leído del teclado.

# include <stdio.h># include <conio.h>main (){int c=1,n,r,s=0;printf ("ingrese un numero");scanf ("%d",&n);while (c<n){r=n%c;if (r==0)s=s+c;

c=c+1;}if (s==n)printf ("el numero perfecto es");

102

Page 103: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

elseprintf ("el numero no es perfecto"); getch() ;return(0);}

3. realizar un programa donde se ingrese los valores de dos matrices y su multiplicación sea otra matriz diferente.

#include <stdio.h> #include <conio.h> #include <string.h> main() { clrscr(); int a[3][3],b[3][3],c[3][3], i,j,k; printf ("ingrese los valores de la primera matriz");

for (i=0;i<=2;i++) for (j=0;j<=2;j++) { gotoxy(3*j+3,i+5); scanf("%d",&a[i][j]); }

for (i=0;i<=2;i++) for (j=0;j<=2;j++) { gotoxy(3*j+15,i+5); scanf("%d",&b[i][j]); }

for (i=0;i<=2;i++) for (j=0;j<=2;j++) c[i][j]=0 ;

for(i=0;i<=2;i++) for(j=0;j<=2;j++) for(k=0;k<=2;k++) { c[i][j]=c[i][j]+(a[i][k]*b[k][j]) ; gotoxy(4*j+25,i+5) ; printf ("%d",c[i][j]); }

getch();

103

Page 104: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

return(0); }

4. ingresar un numero y presentar por pantalla las funciones matematicas.

#include <math.h> /* Para poder utilizar las funciones matemáticas */# include <conio.h>main (){ long double numero; /* 10 dígitos decimales de precisión, a veces más */ long double parte_entera, parte_decimal; printf ("\n\nUSO DE FUNCIONES MATEMÁTICAS (long double -- 10 dígitos de precisión)\n"); printf ("=====================================================================\n\n");

/* Algunas constantes útiles */printf ("\nCONSTANTES ÚTILES");printf ("\ne = %.10Lf", (long double)M_E); /*

e */ printf ("\npi = %.10Lf", (long double)M_PI); /* pi */

printf ("\npi/2 = %.10Lf", (long double)M_PI_2); /* pi/2 */

printf ("\npi/4 = %.10Lf", (long double)M_PI_4); /* pi/4 */

printf ("\n1/pi = %.10Lf", (long double)M_1_PI); /* 1/pi */

printf ("\nsqrt(2) = %.10Lf", (long double)M_SQRT2); /* sqrt(2) */

printf ("\n\n"); while (1) { /* Bucle infinito */

printf ("\nIntroduce un número con decimales (p. ej. -3.02) (Ctrl+C para salir) \n: ");

104

Page 105: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

scanf ("%Lf", &numero);/* Se almacena decimales en parte_decimal

y parte entera en parte_entera */parte_decimal = modfl (numero,

&parte_entera); printf ("\nNúmero : %.10Lf", numero); /* Muestra 10 decimales */

printf ("\nParte entera : %.0Lf", parte_entera); /* Muestra 0 decimales */

printf ("\nParte decimal : %.10Lf", parte_decimal);

printf ("\nValor absoluto : %.10Lf", fabsl(numero));

printf ("\nRedondeo hacia abajo : %.0Lf", floorl(numero));

printf ("\nRedondeo hacia arriba : %.0Lf", ceill(numero));

printf ("\nRaiz cuadrada : %.10Lf^1/2 = %.10Lf", numero, sqrtl(numero));

printf ("\nLogaritmo neperiano : ln(%.10Lf) = %.10Lf", numero, logl(numero));

printf ("\nLogaritmo en base 10 : log(%.10Lf) = %.10Lf", numero, log10l(numero));

printf ("\nPotencia 3 : %.10Lf^3 = %.10Lf", numero, powl(numero, 3));

/* numero se toma como radianes para seno, coseno y tangente */

printf ("\nSeno(radianes) : sen(%.10Lf) = %.10Lf", numero, sinl(numero));

printf ("\nCoseno(radianes) : cos(%.10Lf) = %.10Lf", numero, cosl(numero));

printf ("\nTangente(radianes) : tan(%.10Lf) = %.10Lf", numero, tanl(numero));

/* Calculamos el arcoseno, arcocoseno y arcotangente de la parte decimal del numero */

printf ("\nArcoseno(parte decimal) : asen(%.10Lf) = %.10Lf radianes",

parte_decimal, asinl(parte_decimal));

printf ("\nArcocoseno(parte decimal) : acos(%.10Lf) = %.10Lf radianes",

parte_decimal, acosl(parte_decimal));

105

Page 106: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

printf ("\nArcotangente(parte decimal): atan(%.10Lf) = %.10Lf radianes",

parte_decimal, atanl(parte_decimal));

printf ("\n\n\n");}getch();return 0;

}

5. mostra por pantalla el abecedario en forma ordenada.

#include <stdio.h> /* Para poder utilizar la función printf */#include <conio.h>

char letra;

main (){

letra = 'A';/* Mostramos los letras de la tabla ASCII

desde 'A' .. 'Z'*/while (letra <= 'Z')

{printf ("\nLetra = %c", letra);letra = letra + 1;

}printf ("\n\n");

getch();return(0);

}

6. presentar por pantalla los multiplo del 11 al 230.

#include <stdio.h> /* Para poder utilizar la función printf */#include <conio.h>

int numero;

main ()

106

Page 107: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

{printf("Mostramos los múltiplos de 11

menores de 230");numero = 11;while (numero < 230)

{printf ("\nNúmero = %d", numero);numero = numero + 11;

}printf ("\n\n");

getch();return(0);

}

7. presentar por pantalla las potencias cuadradas, cubicas y cuarta de los numeros del 1 al 10.

#include <stdio.h> /* Para poder utilizar la función printf */#include <conio.h>

/* Definimos las funciones */int cuadrado (int numero); /* Estas funciones

devuelven un entero, y les pasamos un entero */int cubo (int numero);int cuarta (int numero);int num;

int main () /* Esta función devuelve un entero al Sistema Operativo */

{clrscr();

/* Mostramos los diez primeros potencias (2,3,4) */

printf ("\n\nNúmero Número^2Número^3 Número^4\n");

printf ("===============================================================\n");

for (num=1; num<11; num ++)printf ("\n%d\t\t%d\t\t%d\t\t%d", num,

cuadrado(num), cubo(num), cuarta(num)); /* Utilizamos las funciones */

107

Page 108: Introducción al lenguaje C - Soluciones Rapidas | Just ... · Web viewEstos operadores muestran una de las armas mas potentes del lenguaje C , la de poder manipulear INTERNAMENTE

printf ("\n\n"); getch();

return 0; /* La última sentencia de una función debe ser esta */ /* Aunque, si no la ponemos, se supone */ }

/* Escribimos el código de las funciones */int cuadrado (int numero){

return numero*numero;}

int cubo (int numero){

return numero*numero*numero;}

int cuarta (int numero){

return numero*numero*numero*numero;}

108