Escolar Documentos
Profissional Documentos
Cultura Documentos
TABLA DE CONTENIDOS..............................................................................................................................1
1.
INTRODUCCIN....................................................................................................................................3
1.1.
HISTORIA DEL C.................................................................................................................................3
1.2.
GENERALIDADES Y CARACTERSTICAS DEL LENGUAJE C..............................................................4
1.3.
VISTA EXTERNA E INTERNA DE UN PROGRAMA EN C.......................................................................6
1.3.1. Vista externa.................................................................................................................................6
1.3.2. Vista interna.................................................................................................................................8
2.
OPERADORES Y EXPRESIONES......................................................................................................10
2.1.
TIPOS FUNDAMENTALES DE DATOS..................................................................................................10
2.1.1. Caracteres (tipo char)................................................................................................................10
2.1.2. Nmeros enteros (tipo int)..........................................................................................................11
2.1.3. Nmeros reales (tipo float).........................................................................................................12
2.1.4. Nmeros reales (tipo double).....................................................................................................12
2.2.
IDENTIFICADORES............................................................................................................................13
2.3.
PALABRAS CLAVES..........................................................................................................................13
2.4.
COMENTARIOS..................................................................................................................................14
2.5.
VARIABLES......................................................................................................................................14
2.6.
CONSTANTES....................................................................................................................................17
2.6.1. Constantes enteras:....................................................................................................................18
2.6.2. Constantes reales:......................................................................................................................18
2.6.3. Constantes alfanumricas..........................................................................................................18
2.7.
INCLUSIN DE ARCHIVOS EN C.......................................................................................................19
2.8.
OPERADORES...................................................................................................................................19
2.8.1. Operadores Aritmticos.............................................................................................................19
2.8.2. Operadores Relacionales...........................................................................................................19
2.8.3. Operadores Lgicos...................................................................................................................19
2.8.4. Operadores Lgicos a Nivel de Bit............................................................................................20
2.8.5. Operadores de Asignacin.........................................................................................................20
2.9.
GRUPO DE PROCEDENCIA DE OPERADORES.....................................................................................20
2.10.
CONVERSIONES DE TIPO...................................................................................................................21
3.
4.
5.
FUNCIONES...........................................................................................................................................57
7.
REFERENCIAS..............................................................................................................................................110
1. Introduccin
_________________________________________________________________________
Programacin II
Pgina 2
1.1.
Historia del C
C fue desarrollado originalmente en los aos setenta por Dennis Ritchie en Bell
Telephone Laboratories, Inc. (ahora una sucursal de AT&T). Es el resultado de dos
lenguajes anteriores, el BCPL y el B, que se desarrollaron tambin en los laboratorios
Bell. C estuvo confinado al uso en los laboratorios Bell hasta 1978, cuando Brian
Kernighan y Ritchie publicaron una descripcin definitiva del lenguaje. La definicin de
Kernighan y Ritchie se denomina frecuentemente K.&R C.
Tras la publicacin de la definicin de K&R, los profesionales de las computadoras,
impresionados por las muchas caractersticas deseables del C, comenzaron a promover
el uso del lenguaje. A mediados de los ochenta la popularidad del C se haba extendido
por todas partes. Se haban escrito numerosos compiladores e intrpretes de C para
computadoras de todos los tamaos y se haban desarrollado numerosas aplicaciones
comerciales. Es ms, muchas aplicaciones que se haban escrito originalmente en otros
lenguajes se reescribieron en C para tomar partido de su eficiencia y portabilidad.
Las primeras implementaciones comerciales de C diferan en parte de la definicin
original de Kernighan y Ritchie, creando pequeas incompatibilidades entre las
diferentes implementaciones del lenguaje. Estas diferencias reducan la portabilidad
que el lenguaje intentaba proporcionar. Consecuentemente, el Instituto Nacional
Americano
de
Estndares**
(comit
ANS
X3J11)
desarroll
una
definicin
1.2.
_________________________________________________________________________
Programacin II
Pgina 4
1.3.
_________________________________________________________________________
Programacin II
Pgina 6
Estructura de un Programa en C
/*
titulo (comentario) */
/*
/*
/*
cabecera de funcin */
/*
declaracin de variables */
/*
/*
/*
instruccin de entrada*/
/*
instruccin de salida*/
_________________________________________________________________________
Programacin II
Pgina 7
Preprocesado.
En esta etapa se interpretan las directivas al preprocesador. Entre otras cosas, las
variables inicializadas con #define son sustituidas en el cdigo por su valor en todos los
lugares donde aparece su nombre.
Usaremos el ejemplo utilizado para demostrar la vista externa de un programa en c,
para explicar la etapa del preprocesado.
/*programa para calcular el area de un circulo */
#include<stdio.h>
#define PI 3.1416
main ()
{
float area, radio;
radio = 10;
area = PI * (radio * radio);
printf ("Circulo.\n");
_________________________________________________________________________
Programacin II
Pgina 8
Compilacin.
La compilacin transforma el cdigo C en el lenguaje ensamblador propio del
procesador de nuestra mquina.
Ensamblado.
El ensamblado transforma el programa escrito en lenguaje ensamblador a cdigo
objeto, un archivo binario en lenguaje de mquina ejecutable por el procesador.
Enlazado
Las funciones de C incluidas en nuestro cdigo, tal como printf () en el ejemplo, se
encuentran ya compiladas y ensambladas en bibliotecas existentes en el sistema. Es
preciso incorporar de algn modo el cdigo binario de estas funciones a nuestro
ejecutable. En esto consiste la etapa de enlace, donde se renen uno o ms mdulos
en cdigo objeto con el cdigo existente en las bibliotecas.
2. Operadores y Expresiones
2.1.
Tipo
Ejemplo
Tamao
Rango de valores
char
1 byte
0 a 255
int
1024
2 bytes
-32768 a 32767
float
10.5
4 bytes
double
0.0025
8 bytes
A partir de ese momento queda definida la variable letra con el valor correspondiente a
la letra a. Recurdese que el valor a utilizado para inicializar la variable letra es una
constante carcter.
_________________________________________________________________________
Programacin II
Pgina 10
Como una variable tipo char es un nmero entero pequeo (entre 0 y 255), se puede
utilizar su contenido de la misma forma que se utiliza un entero, por lo que estn
permitidas operaciones como:
letra = letra + 1;
letra _ minscula = letra _ mayscula + (a - A);
Los enteros son adecuados para aplicaciones que trabajen con datos numricos.
Por ltimo, existe la posibilidad de declarar una variable como long double, estas se
declaran en la forma:
long double real;
Ejemplos:
double h;
long double mayor;
double valor = 0.000056;
2.2.
Identificadores
Indice
Dia_Mes_Ao
elemento_mayor
Cantidad_Total
Fecha_Compra_Casa
Habitacion120
2.3.
Palabras Claves
En C, como en cualquier otro lenguaje, existen una serie de palabras clave (keywords)
que el usuario no puede utilizar como identificadores. Estas palabras sirven para indicar
al computador que realice una tarea muy determinada (desde evaluar una comparacin,
hasta definir el tipo de una variable) y tienen un especial significado para el compilador.
A continuacin vemos algunas de estas palabras clave:
auto
break
case
char
const
double
int
else
long
enum
register
extern
return
struct
switch
typedef
union
float
short
unsigne
2.4.
continu
e
for
signed
void
default
do
goto
sizeof
if
static
volatile
while
Comentarios
_________________________________________________________________________
Programacin II
Pgina 13
2.5.
Variables
Variables en Lenguaje C
Las variables en C pueden ser de varios tipos y sern utilizadas en funcin del tipo de
datos que queramos almacenar en ellas. Las variables NOMBRE, nombre, Nombre son
tres variables totalmente distintas. (Lenguaje Case Sensitive) y el nombre de una
variable no puede comenzar por nmero (pero puede contener varios) ni tener
caracteres especiales (se admite el guin bajo).
Por ejemplo: numero1, j10a, num_alumno, seran variables vlidas y 1abc, numero?,
num/alumnos seran variables invlidas.
Segn dnde estn declaradas, las variables pueden ser globales (declaradas fuera de
todo procedimiento o funcin) o locales (declaradas dentro de un procedimiento o
funcin). Las primeras sern accesibles desde todo el cdigo fuente y las segundas
slo en la funcin donde estn definidas.
Por otra parte, segn el tipo de datos a almacenar, las variables sern de tipo entero
(int), flotante (float), doble (double) o carcter (char).
El tipo int se utiliza para guardar nmeros enteros, es decir, que no tienen decimales. El
rango de valores admitidos vara segn la CPU utilizada. Para mostrar los valores
contenidos en este tipo de variables, nos serviremos de %i o %d.
Ejemplo:
/*Programa para mostrar variable en pantalla*/
#include<stdio.h>
main ()
{
int x=8;
int y=9;
printf("%i\n",x);
/*Podemos escribir varias variables en el mismo printf:*/
printf("%i %i",x,y);
}
_________________________________________________________________________
Programacin II
Pgina 14
Para todos los tipos, podemos definir variables en una sola lnea: int x=8,y=9; tendra
las mismas consecuencias que el cdigo anterior. Pero, debemos tener cuidado, pues:
int x,y=9; no dara lo mismo: "x" no tendra valor e "y" valdra 9.
Si imprimimos una variable a lo que no hemos asignado valor, el compilador no
reconocer ningn error, pero se imprimir un valor cualquiera. Adems, toda variable
puede cambiar su valor durante la ejecucin del programa y ser impresa las veces que
creamos oportunas.
Tras estas pequeas aclaraciones, seguiremos comentando el uso de variables con el
tipo float. Este tipo sirve para almacenar nmeros decimales o reales, as como el
double. El rango de valores admitidos en tan amplio que rara vez se nos quedar
obsoleto.
El modificador para operar con estos datos es %f y lo haremos del mismo modo que
con int. En otros artculos entraremos en detalles de cmo calcular el rango de valores
posibles y el tamao de las variables.
De momento, continuamos el tipo char, capaz de almacenar un nico carcter.
Internamente, un carcter es almacenado como un nmero, comprendido entre 0 y 128,
que hace referencia a su cdigo ascii (ascii standard).
Por ejemplo, declarando:
char letra='A'; /*los caracteres siempre entre comillas simples tendramos el
mismo efecto que: char letra= 65; puesto que el ascii de A es 65.*/
_________________________________________________________________________
Programacin II
Pgina 15
2.6.
Constantes
Al contrario que las variables, las constantes mantienen su valor a lo largo de todo el
programa.
Para
indicar
al
compilador
que
se
trata
de
una
constante,
usaremos
la
directiva
#define
#define <identificador> <valor>
2.7.
Inclusin de Archivos en C
2.8.
Operadores
Son smbolos que indican al compilador que se lleve a cabo especficas manipulaciones
matemticas o lgicas. Hay cinco clases de operadores aritmticos, lgicos y bit,
relacionales y de Asignacin.
Suma
Resta
_________________________________________________________________________
Programacin II
Pgina 18
Multiplicacin
--
Decremento
Divisin
++
Incremento
Divisin Modulo
Mayor
<=
Menor o Igual
>=
Mayor o Igual
==
Igual
<
Menor
!=
Distinto o Diferente
and (y lgico)
||
or (o lgico)
not
Operacin and
<<
Desplazamiento a la Izquierda
Operacin or
>>
Desplazamiento a la Derecha
Operacin xor
Asignacin Simple
*=
+=
/=
-=
%=
2.9.
Operadores
()
-, ++, --, !, sizeof
Asociatividad
Derecha Izquierda
_________________________________________________________________________
Programacin II
Pgina 19
*, /, %
Izquierda Derecha
+, -
Izquierda Derecha
Operadores relacionales
Izquierda Derecha
Operadores de Igualdad
==, !=
Izquierda Derecha
Operadores Lgicos
&&
Izquierda Derecha
Operador condicional
?:
Derecha Izquierda
Operadores de Asignacin
Derecha Izquierda
Divisin Modulo
_________________________________________________________________________
Programacin II
Pgina 20
<nombre de tipo>(<expresin>)
_________________________________________________________________________
Programacin II
Pgina 21
3.1.1. Introduccin:
Las funciones de Entrada y Salida de Datos se encuentran en la librera stdio.h y
bsicamente son getchar, putchar, scanf, printf, gets y puts. Estas son utilizadas para el
flujo o transferencia de datos entre el usuario y la computadora.
_________________________________________________________________________
Programacin II
Pgina 22
a = getchar();
/*Lee
un
carcter
del
teclado
lo
asigna
la
variable a*/
}
Ejemplo:
/*Uso de putchar*/
#include <stdio.h>
void main (void)
{
char b;
/* Declara b
*/
b = getchar();
/* Lee b
*/
_________________________________________________________________________
Programacin II
Pgina 23
en la cual la cadena de control son argumentos formados por el signo de porcentaje (%)
y un carcter de abreviacin el cual representa cada tipo de dato.
Y arg1, arg2, argn son los nombres de las variables que convendrn los datos que los
cuales sern ledos, estos nombres debern ir precedidos por un ampersand (&) cada
uno, excepto los nombres de formaciones como cadenas de caracteres.
Especificadores de formato
%d
%c
Lee un carcter
%s
%f
%e
%u
%x
%g
%h
%o
Ejemplo:
/*Uso de scanf*/
#include <stdio.h>
main()
{
int a, b;
_________________________________________________________________________
Programacin II
Pgina 24
Carcter de conversin
Significado
Carcter
Entero decimal
E, f, g
Entero corto
Entero octal
Entero hexadecimal
[]
_________________________________________________________________________
Programacin II
Pgina 25
/*
Imprime
muestra
en
pantalla
el
array
frase*/
}
_________________________________________________________________________
Programacin II
Pgina 26
3.2.
Sentencias de Control
3.2.1. Introduccin
Estas se utilizan para hacer comprobaciones de condiciones, para realizar
repetidamente determinadas instrucciones, estas son palabras reservadas, por lo tanto
no necesitan de inclusin de libreras para su uso.
Principalmente son if-then-else, for, while, do-while, switch, break, goto y continue.
_________________________________________________________________________
Programacin II
Pgina 27
Otra caracterstica de esta sentencia es que se pueden anidar otros if-else dentro de
otros.
Ejemplo:
#include <stdio.h>
#include <conio.h>
main()
{
int a, b, c;
scanf( "%d %d %d", &a, &b ,&c);
if( a + b > c)
{
printf(" a + b es mayor que c");
}
else
{
if( a + b < c)
printf(" a + b es menor que c");
}
getch();
}
3.2.2.2. switch
Esta se utiliza para realizar una operacin o varias de un grupo de instrucciones.
Su sintaxis es la siguiente:
_________________________________________________________________________
Programacin II
Pgina 28
3.2.2.3. break
Se usa para terminar la ejecucin de bucles o salir de un switch.
Ejemplo:
/*Uso de switch y break:*/
#include <stdio.h>
#include <conio.h>
main()
{
int a;
scanf( "%d" , &a);
switch( a)
{
case 1: printf("Ha introducido un 1");
break;
case 2: printf("Ha introducido un 2");
break;
case 3: printf("Ha introducido un 3");
break;
default: printf("Intente del uno al tres");
}
getch();
}
3.2.2.4. goto
Esta instruccin se utiliza para cambiar el flujo secuencial de un programa, trasladando
el control hacia la parte donde se encuentra la etiqueta.
_________________________________________________________________________
Programacin II
Pgina 29
j, k;
printf("Los
Datos
que
Introduzca
deben
ser
tres
enteros
distintos de cero:\n");
printf("h, i y j: ");
scanf("%d %d %d" , &h, &i, &j);
if( (h!=0) && (i!=0) && (j!=0) )
{
k = h + i - j;
}
else
{
printf("Vuelva a intentarlo:\n");
goto Mensaje;
}
printf("El resultado de h + i - j = %d", k);
getch();
}
_________________________________________________________________________
Programacin II
Pgina 30
#include <conio.h>
main()
{
int i,j;
/*declaracin de variables*/
_________________________________________________________________________
Programacin II
Pgina 31
Este ejemplo declara un bucle for que se repetir desde i=0 hasta i<10 (es decir 10
veces) la oracin Hola!, contara el numero de repeticiones e incrementara el valor de
j en 5 cada ciclo, hasta que la condicin sea falsa.
Como podemos observar en este ejemplo, cada parmetro que recibe el bucle tambin
puede estar seccionado, separados por comas y pudimos haber tenido mas de una
condicin as como tambin pudimos haber omitido cualquier parmetro.
3.2.3.2. Bucle while:
Su sintaxis es la siguiente:
while ( condicin )
{
bloque de instrucciones a ejecutar
}
{
int contador=100; /*declaracin de valor constante a variable*/
while(contador > 0)
{
/*instrucciones a repetir*/
_________________________________________________________________________
Programacin II
Pgina 32
return 0;
}
En este ejemplo se imprime de manera regresiva el nmero de veces que hacen falta
para finalizar el bucle. Empezando desde 100. El orden de las instrucciones es
importante en este bucle ya que si intercambiamos de posicin las instrucciones el
conteo hubiese empezado desde 99. Es muy importante ponerle atencin al orden de
instrucciones en este bucle ya que puede producir errores muy difciles de encontrar.
3.2.3.3. Bucle do while:
Su sintaxis es la siguiente:
do
{
Instrucciones a ejecutar
} while ( condicin );
{
int i=1, j;
do
/*declaracin de variables*/
/*inicio del bucle do-while*/
{
j=i*2;
_________________________________________________________________________
Programacin II
Pgina 33
i++;
getch();
}
Funciona de forma similar a break. Sin embargo, en vez de forzar la terminacin, break.
Sin embargo, en vez de forzar la terminacin, continue fuerza una nueva iteracin del
bucle y salta cualquier cdigo que exista entremedio.
Para el bucle for, continue hace que se ejecuten las partes de prueba condicional y de
incremento del bucle. Para los bucles while y do-while, el control del programa pasa a la
prueba condicional.
3.3.
_________________________________________________________________________
Programacin II
Pgina 34
a = getchar();
tolower(a);
if(a >= 'a' && a <= 'z')
{ printf("El character intorducido fue el: %c\n",a);
else
{ printf("El dato no es valido, intente nueva mente\n");
goto Again;
getch();
_________________________________________________________________________
Programacin II
Pgina 35
Otro ejemplo seria en un programa en donde se quiere abrir un fichero, se tiene que
verificar que el fichero no este vaco y se puede utilizar la siguiente validacin:
/*Uso de validacin 2*/
#include <stdio.h>
main(){
FILE* archivo;
int f[4];
double d[4];
archivo = fopen("fichero.txt","r");
if(archivo!=NULL){
int f[4],i;
double d[4];
fscanf(archivo,"%d %d %d %d\n",
&f[0],&f[1],&f[2],&f[3]);
fscanf(archivo,"%d, %d, %d, %d\n",
&f[0],&f[1],&f[2],&f[3]);
fscanf(archivo,"%lf ; %lf ; %lf ; %lf\n",
&d[0],&d[1],&d[2],&d[3]);
fclose(archivo);
}
}
En ambos ejemplos se nota la importancia de validar los datos con los que se trabajan
en un programa. En el caso de que un valor inesperado sea ledo el programa tomara
un curso apropiado para asegurar que el programa no falle y los datos obtenidos no
sean errneos.
_________________________________________________________________________
Programacin II
Pgina 36
Definicin
Arreglos
Es una variable que maneja una gran cantidad de datos del mismo tipo bajo un mismo
nombre .A cada elemento se le asigna un espacio de memoria, segn el orden o
secuencia, se puede acceder a cada elemento segn el espacio o localidad de memoria
que este elemento tenga.
Un arreglo debe de ir acompaado, del tipo del almacenamiento, este es opcional los
valores por defecto son automtico para arreglos definidos dentro de un funcin, y
externo para arreglos definidos fuera de una funcin, tambin de una especificacin
de tamao (numero de elementos), en este caso seria un digito entero positivo,
encerrado entre corchetes.
El lenguaje C si se accede a un arreglo de n trminos y el usuario se referencia a un
elemento que sobrepase al n-nmeros de elementos, este no provoca ningn mensaje
de error en el caso de que sobrepase el final durante una operacin de asignacin,
entonces se asignarn valores a otra variable o a un trozo del cdigo, esto es, si se
dimensionar. Como programador se es responsable de asegurar que todos los arreglos
sean lo suficientemente grandes para guardar lo que pondr en ellos el programa.
Por ejemplo, para declarar un arreglo de enteros llamado demos con diez elementos se
hace de la siguiente forma:
int demos[10];
En C, todos los arreglos usan cero como ndice para el primer elemento. Por tanto, el
ejemplo anterior declara un arreglo de enteros con diez elementos desde demos[0]
hasta demos[9].
_________________________________________________________________________
Programacin II
Pgina 37
4.2.
Inicializacion De Arreglos
Un arreglo puede ser inicializado es decir asignrseles valores iniciales, los arreglos
automticos no pueden ser inicializados, no obstante las definiciones de arreglos
estticos y externos pueden asignrseles valores iniciales, los valores inicializados
deben de estar encerrados entre corchetes, escritos en el orden en que sern
asignados. Cuando un arreglo es inicializado es opcional nmero de elementos, ya que
los corchetes pueden estar vacos.
Ejemplo:
/*Uso de arreglos*/
#include <stdio.h>
#include <conio.h>
main()
{
double carro[20];
int i, t = 20;
for(i = 0; i < t; i++)
{
printf("Ingrese el valor %d: ", i+1);
scanf("%lf", &carro[i]);
}
for(i = 0; i < t; i++)
{
printf("%f\n", carro[i]);
getch();
}
_________________________________________________________________________
Programacin II
Pgina 38
Ejemplo:
/*Uso de arreglos*/
#include <stdio.h>
#include <conio.h>
main()
{
float v[6] = {1.0f, 2.0f, 3.0f, 3.0f, 2.0f, 1.0f};
int c;
printf("Valores del arreglo*/
for(c = 0; c < 6; c++)
{
printf("%f\n", v[c]);
}
getch();
}
Donde en el primer y segundo ejemplo es necesario poner un punto decimal tras cada
cifra, para que sta sea reconocida como un valor de tipo float o double.
Recurdese que, al igual que las variables escalares correspondientes, los arrays con
modo de almacenamiento external y static se inicializan a cero automticamente en el
momento de la declaracin.
Sin embargo, esto no est garantizado en los arrays auto, y el que se haga o no
depende del compilador.
_________________________________________________________________________
Programacin II
Pgina 39
4.3.
Tipos Arreglos
4.3.1. Unidimensionales:
Tambin llamados vectores llamados as, de una dimensin o lineales; sin embargo no
cambia el mbito de los elementos, todos contendrn un espacio de memoria.
Su sintaxis:
Tipo-datos nombre [tamao];
Si notas el arreglo contiene un par de corchetes que indican que los elementos del
arreglo estarn almacenados de forma lineal en cada espacio de memoria
Ejemplo char Demos [4];
1
Demos [0]
Demos [1]
Demos [2]
Demos [3]
4.3.2. Multidimensionales
_________________________________________________________________________
Programacin II
Pgina 40
A00
A10
A20
A30
A01
A11
A21
A31
A02
A12
A22
A32
Columnas
A03
A13
A23
A33
A04
A14
A24
A34
A05
A15
A25
A35
A06
A16
A26
A36
subndices
4.4.
Generalidades
Ya hemos visto como operan los arreglos a nivel de hardware, ahora, como escribirlo en
C:
He aqu una m lista de declaracin de arreglos bidimensionales:
char frutas[2][3]={manzana, pera , uva, naranja, noni, mango};
int valores[23][45];
static double lista[20][15];
float grupo [45][80];
La primera lnea define un arreglo de frutas de 2 filas y 3 columnas (2*3=6, lo cual
serian 6 elementos) y si notas esta
posicin 0,0, pera 0,1, uva 0,2, naranja 1,0, noni 1,1, mango 1,2,
Si un arreglo bidimensional es inicializado se debe tener cuidado se debe tener cuidado
ya que el orden natura l de los elementos se pueden alterar formando grupo de valores
iniciales encerrados entre llaves ({..}).Los valores dentro de cada par interno de llaves
sern asignados alos pares elementos del arreglo cuyo ultimo ndice vare mas
rpidamente .Por e ejemplo en un arreglo bidimensional los valores
almacenados
dentro de un par de llaves sern asignados alos elementos de una fila , ya que el
segundo ndice (columna) se incrementara ms rpidamente .Si hay pocos elementos
dentro de cada par de llaves , al resto de cada par de filas se le asigna aran 0. Loor
otra parte, el numero de valores dentro de cada par de llaves no p puede exceder del
tamao de fila definido. Es de agrupacin
valores[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
Valores[0][1]=2
valores[0][2]=3
valores[0][3]=4
Valores[1][0]=5
Valores[1][1]=6
valores[1][2]=7
valores[1][3]=8
Valores[2][0]=9
valores[1][2]=10
valores[2][2]=11
valores[2][3]=12
Esto nos lleva alo mismo, los cuatro valores del primer par de llaves internas son
asignados a los elementos de la primera fila del arreglo los valores de segundo par de
llaves son asignados a la segunda fila del arreglo .Ntese que el par de llaves internos
se necesitan para contener las llaves internas. En caso de que en las llaves sean
agrupados ms elementos de los que se especifican en el tamao del arreglo ejemplo:
int valores[][]=
{
{1, 2, 3, 4,5}
{6, 7, 8, 9,10}
{11, 12, 13, 14,15}
}
El elemento ser rellenado con cero en este caso ser de la siguiente manera:
_________________________________________________________________________
Programacin II
Pgina 43
Valores[0][1]=2
valores[0][2]=3
valores[0][3]=4
Valores[1][0]=5
Valores[1][1]=6
valores[1][2]=7
valores[1][3]=8
Valores[2][0]=9
valores[1][2]=10
valores[2][2]=11
valores[2][3]=0
4.5.
Arreglos y Cadenas
en el
compilador de C:
/*Programa de un boleto en c*/
_________________________________________________________________________
Programacin II
Pgina 44
i,bol;
SU
AEROLINEA
DOSSELL\ndigite la cantidad de
boletos: ");
scanf("%d",&bol);
for(i=0; i < bol; i++)
{
printf("\nNombre: ");
scanf("%s", nomb[i]);
printf("\nDestino:\n(1):Bluefields\n(2):San
juan\nDestino
seleccionado ");
scanf("%d", &dest[i]);
printf("Categoria:\n(1):Alta\n(2):Media\n(3):Baja\nCategoria
seleccionada ");
scanf("%d", &cat[i]);
}/*fin del primer for*/
system("cls");
/*Imprime los
_________________________________________________________________________
Programacin II
Pgina 45
Destino:
(1):Bluefields.
(2):San juan.
Destino seleccionado
Categora:
(1):Alta
(2):Media
(3):Baja
Categoria seleccionada: 3
_________________________________________________________________________
Programacin II
Pgina 46
Categora:
(1):Alta
(2):Media
(3):Baja
Categoria seleccionada:
/* despus de un entre*/
Aerolnea Dossell
Numero de
boleto:1
Categoria: Baja
Costo$ 220.
Asiento numero:0
Aerolnea Dossell
Numero de boleto:2
Nombre:jorge Luis Meyer
Destino:Bluefields
Categoria: Mediana
Costo$ 230.
Asiento numero:0
Ntese que el nmero de asiento ser siempre cero ya que la variable i esta inicializada
en cero. Si usted desea que el compilador arroje el nmero de boletos igual como el
nmero de asiento lo
variable i por la variable que almacena el nmero del boleto, de esta manera estamos
diciendo que segn el nmero de boleto es el nmero del asiento del cliente. O bien si
usted desea agregarle un digito de entrada se podra hacer de las siguiente forma.
printf(Asiento numero:2104-0%d,i);
_________________________________________________________________________
Programacin II
Pgina 47
hora de
llegada: 12:00 pm
Categoria: Mediana
Costo$ 230.
Asiento numero: 2104-02.
Ejemplo 1:
El siguiente programa convierte un cadena a double y a una cadena de representacin
entero. Ntese que en la utilizacin de las funciones de biblioteca son incluidas sus
libreras antes declaradas en la cabecera del programa.
/*Uso de atoi y atof*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
main()
{
char n1[20] = "10254.4116";
printf("Cadena \'%s\' convertida a double = %f\n", n1, atof(n1));
printf("Cadena \'%s\' convertida a entero = %d\n", n1, atoi(n1));
getch();
_________________________________________________________________________
Programacin II
Pgina 48
/* declaracin de libreras */
# include<ctype.h>
main()
{
char
caer";
int i;
printf("Cadena antes de convertir:\n%s\n", cadena);
for(i=0;cadena[i];i++)
{
cadena[i]=toupper(cadena[i]);
}
printf("Cadena despues de convertir:\n%s\n", cadena);
}
getch();
Ejemplo 3:
En el siguiente cdigo muestra ms funciones strings como:
sprintf():
imprime un mensaje .
de la secuencia de caracteres
# include<stdio.h>
# include<string.h>
/*declaracin de libreras */
_________________________________________________________________________
Programacin II
Pgina 49
Ejemplo 4:
El siguiente cdigo es acerca de un programa interactivo Para definir la profesin del
usuario.
Se utilizan las funciones, sprintf () y puts (): esta ltima tiene la misma funcin como la
conocemos pone un mensaje existente en el sistema y lo visualiza.
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
char nombre[10],mensaje[200];
unsigned int edad =0, U;
system("cls");
_________________________________________________________________________
Programacin II
Pgina 50
"\n\nHola%s,
tienes%d
aos\n
sers
un
Ejemplo 5:
Este programa utiliza las funciones strcpy (copia dos cadenas), strcat, strcmp (compara
dos cadenas).
/*programa que lee
su longitud**/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
main()
{
char
pn[50]="DORISSELL",
cn[50]="
PEREZ",
tn[50]="NARVAEZ",
_________________________________________________________________________
Programacin II
Pgina 51
cadena pn*/
n=strcat(pn, sn); /* copia "DORISSELL del SOCORRO", aadi */
printf("%s\n",n); /* imprime la cadena r almacenada en la varible n*/
p=strcat(tn,cn);
printf("%s\n",p);
c=strcmp(pn,tn);
"DORISSELL" y "NARVEZ"*/
printf("pn es ");
if (c<0)
printf("menor que");
else if(c == 0)
printf("igual que");
else
printf("mayor que");
printf(" tn\n");
strcat(pn,tn);
printf("pn=%s\n",pn);
printf("la cadena pn contiene: %d caracteres\n", strlen(pn));
getch();
}
4.6.
Procesamiento de arreglos.
4.7.
Un arreglo completo puede ser pasado a una funcin, para tal hecho el nombre del
arreglo debe de aparecer solo, es decir sin: corchetes ni ndices como un argumento
_________________________________________________________________________
Programacin II
Pgina 52
Ejemplo:
/*Programa
modificados
que
los
pasa
un
valores
arreglo
se
de
elementos
escriben
en
tres
programa
principal
una
ocasiones
funcin
para
donde
son
mostrar
los
cambios*/
#include <stdio.h>
#include <conio.h>
#define max 4
void cambiar (int numeros []);
main()
{
int sum, numeros[max];
clrscr();
printf("\t\ndesde
el
antes
de
llamar
la
funcin\n\n");
for(sum=0; sum<=max; ++sum)
{
_________________________________________________________________________
Programacin II
Pgina 53
el
programa
principal
despus
de
llamar
la
funcin:\n\n");
for(sum=0; sum<=max; ++sum)
printf("numeros[%d]=%d\n", sum, numeros[sum]);
getch();
}
void cambiar(int numeros[])
{
int sum;
printf("desde la funcin despus de modificar los elementos\n\n");
for(sum=0;sum<=max;++sum)
{
numeros[sum]=10;
printf("numeros[%d]=%d\n", sum, numeros[sum]);
}
return;
}
En este ejemplo podemos observar que al arreglo se le asigna los valores de a[0]=1,
a[1]=2, a[2]=3 en la funcin main, luego estos valores se trasladan a la funcin
cambiar , donde se le asigna el valor de 10 a cada elemento del arreglo estos valores
se escriben en main, y finalmente arreglo es escrtto una vez que se le pasa el control a
main.
Podemos llegar a la conclusin que los elementos de numeros se modifican dentro
de main despus de hacer una llamada a la funcin cambiar.
_________________________________________________________________________
Programacin II
Pgina 54
5. Funciones
5.1.
Las funciones en el lenguaje C son subprogramas, cuya finalidad es hacer una tarea
especfica y retornar un valor al programa principal, si es requerido. Otra funcin de las
funciones es el de hacer el programa principal no muy extenso.
5.2.
Declaracin de funciones
Las funciones se declaran, se definen, son llamadas desde el programa principal, son
hechas o creadas por el usuario, y estn compuestas por una cabecera y el cuerpo de
la funcin.
_________________________________________________________________________
Programacin II
Pgina 55
La
llamada de las funciones de hacen desde el programan principal, es decir dentro del
main. Con la siguiente sintaxis:
[Variable] = nombre _ funcin ([argumentos actuales o parmetros actuales]);.
/* libreras */
#include <conio.h>
_________________________________________________________________________
Programacin II
Pgina 56
retornos es entero)
*/
int escribir (int y);
main()
{
/* declaracin de variables */
{
return (y *3);
*/
}
Ejemplo:
/* libreras */
#include <stdio.h>
#include <conio.h>
#include <math.h>
/*declaracin explicita (no es necesaria si el valor de
retornos es entero)*/
/* declaracin de variables */
float a, b, h;
clrscr();
/*borra pantalla*/
_________________________________________________________________________
Programacin II
Pgina 57
5.3.
Llamadas a funcin
Se conoce como llamada a funcin cuando se invoca o manda a ejecutar una funcin
previamente creada, ya sea que esta se encuentre el las libreras o sea programada por
el usuario. Una llamada a funcin es una expresin con todo lo que ello implica.
Para llamar a una funcin se escribe el nombre de la funcin y entre parntesis se
especifican los valores que se desean dar a los argumentos.
Ej:
mi_funcion(expr1, expr2, )
5.4.
Existen dos formas mediante las cuales se pueden pasar valores a las funcin, las
formas en que utilicemos una u otra forma depende de la necesidad que se nos
presente, el primero es el paso por valor, los que significa que el realidad nosotros el la
funcin recibimos una copia del dato mandado, no el dato original, por lo tanto cualquier
modificacin sobre este dato no afectar al valor de donde fue llamada la funcin, un
ejemplo practico sera intercambiar los valores de dos variables:
Ejemplo:
#include <stdio.h>
#include <conio.h>
/*Declaracion de la funcion*/
void intercambiar(int a, int b);
main()
/*Programa principal*/
{
/*Declaracion de variables*/
int a = 10, b = 20;
printf("Valores antes de llamar a la funcion:\na=%d\tb=%d\n", a, b);
intercambiar(a, b);
/*Llamada a la funcion*/
Resultado:
Valores antes de llamar a la funcin:
_________________________________________________________________________
Programacin II
Pgina 59
Como podemos ver a pesar de haber modificado los valores recibidos dentro de la
funcin los valores originales no fueron alterados.
5.5.
Se les conoce como parmetros por referencia porque en realidad cuando se llama a la
funcin no se manda una copia del dato como parmetro sino una referencia al dato
original, o en otras palabras donde se encuentra este dato, esto permite a la funcin
modificar el dato original ya que esta tiene la direccin donde se encuentra almacenado
y simplemente precede a modificar el valor de esa direccin, veamos el ejemplo anterior
pero con parmetros por referencia.
#include <stdio.h>
#include <conio.h>
/*Declaracion de la funcion*/
void intercambiar(int *a, int *b);
main()
/*Programa principal*/
{
/*Declaracion de variables*/
int a = 10, b = 20;
printf("Valores antes de llamar a la funcion:\na=%d\tb=%d\n", a, b);
intercambiar(&a, &b);
/*Llamada a la funcion*/
_________________________________________________________________________
Programacin II
Pgina 60
Resultado:
Valores antes de llamar a la funcin: a=10 y b=20
Valores despus de llamar a la funcin: a=20 y b=10
A diferencia del ejemplo anterior ahora los valores de las variables si fueron
modificados, para declarar parmetros por referencia utilizamos el smbolo * antes del
nombre del parmetro, adems de esto para poder acceder al valor del parmetro y no
su direccin se debe anteponer *, esto le indica al compilador que queremos acceder al
dato no a la direccin, tambin
_________________________________________________________________________
Programacin II
Pgina 61
Punteros
donde tipo es cualquier tipo valido de C (tambin llamado tipo base) y nombre es el
nombre de la variable puntero.
_________________________________________________________________________
Programacin II
Pgina 62
Ejemplo:
#include<stdio.h>
#include<conio.h>
/*Funcion principal*/
main()
{
int
x = 10;
/*Declaracion de variable*/
_________________________________________________________________________
Programacin II
Pgina 63
Ejemplo1:
#include<stdio.h>
#include<conio.h>
/*Funcion principal*/
main()
{
int x = 10;
/*Declaracion de x*/
printf("x = %d \n",x);
/*Se
muestra
el
valor
apuntado
por
direccion
&x*/
getch();
}
_________________________________________________________________________
Programacin II
Pgina 64
Ejemplo 2:
#include<stdio.h>
#include<conio.h>
main()
{
int x = 10;
int *px;
px = &x;
printf("x = %d\n",x);
printf("&x = %p\n", &x);
printf("px = %p\n", px);
printf("&px = %p\n", &px);
printf("*px = %d", *px);
getch();
}
Grficamente:
px
8FC4: OFFE
10
8FC4: OFFE
8FC4: OFFE
_________________________________________________________________________
Programacin II
Pgina 65
Nota:
Al ejecutar el siguiente programa los resultados pueden ser inesperados ya que
estamos asignado el valor 10 en una posicin de memoria no reservada.
#include<stdio.h>
#include<conio.h>
main()
{
int *p;
printf("Direccin: %p", p);
printf("Valor antes de asignar: %d", *p);
*p = 10;
printf("Valor asignado: %d", *p);
getch();
}
Seria correcto:
#include<stdio.h>
#include<conio.h>
main()
{
int x; /*se reserva memoria para x*/
int *p; /*se reserva memoria para la variable p, no para la posicin de
memoria a la que apunta p*/
printf("Direccion de:\n&x = %p\np = %p\n", &x, p);
p = &x; /*p apunta a valor de x*/
printf("Direccion despues de asignar:\n&x = %p\np = %p\n", &x, p);
*p = 10; /*equivalente a x = 10*/
printf("Valor de x: %d\nValor apuntado por *p: %d\n", x, *p);
getch();
}
_________________________________________________________________________
Programacin II
Pgina 66
sizeof (*p) = 2
p = 7203:8D53
p = 7203:8D49
_________________________________________________________________________
Programacin II
Pgina 67
int i; /*indice*/
do
{
printf("\nIntroduce nmero de valores a leer (1 - %d): ", NMAX);
scanf ("%d", &n);
} while (n < 1 || n > NMAX);
for (i = 0; i <= n - 1; i++)
{
printf("Introduce valor %d: ", i+1);
scanf("%d", &varaux);
v[i] = varaux;
}
printf("\n\nvalores en orden inverso: \n");
_________________________________________________________________________
Programacin II
Pgina 68
{
for (i = 0; i <= n - 1; i++)
{
printf("Introduce valor %d: ", i+1);
scanf("%d", &varaux); v[i] = varaux;
}
printf("\n\n valores en orden inverso: \n");
_________________________________________________________________________
Programacin II
Pgina 69
La funcin malloc reserva memoria; acepta como argumento los bytes de memoria a
reserva y devuelve un puntero al primer byte de la zona de memoria reservada; los
bytes de memoria solicitados los reserva en un espacio de memoria contiguo. Si no hay
suficiente memoria, devuelve NULL. Un puntero que tiene el valor NULL es un puntero
que no apunta a ningn sitio.
El prototipo de esta funcin se encuentra en el fichero malloc.h (de ah el incluir este
fichero en nuestro ejemplo) y es el siguiente:
void * malloc (unsigned in bytes);
Veamos que devuelve un puntero a void; esto quiere decir que devuelve un puntero que
apunta a cualquier tipo base, o dicho de otro modo, un puntero que apunta a una
direccin de memoria sin tener tipo base.
El c de Kernighan y Ritchie, como no tiene tipo void, el prototipo de esta funcin es:
char * malloc (unsigned int bytes);
_________________________________________________________________________
Programacin II
Pgina 70
Al valor devuelto por la funcin malloc (puntero a void o puntero a char) siempre se le
realiza un moldeado (debemos recordar que esto se hacia con: (tipo)) para adecuarlo al
tipo base de nuestro puntero que va a apuntar a esa zona de memoria reservada. En
nuestro caso el molde es:
(int *x) /*puntero a entero*/
Que suele ser muy corriente. Las dos formas son equivalentes.
La memoria asignada por malloc se desasigna con la funcin free(). Esta memoria
asignada no se desasigna al salir del bloque de cdigo en que fue asignada como
ocurre con las variables locales sino con la funcin free(liberar) o al terminar el
programa. Por lo tanto, siempre que asignemos memoria con malloc, tenemos que
desasignarla con free cuando ya no nos sea necesaria.
El prototipo de la funcin free se encuentra en el fichero malloc.h y es el siguiente:
void free (void *p);
Un
puntero
void
como
parmetro
indica
que
acepta
cualquier
puntero,
independientemente del tipo base al que apunta. El puntero que se le pasa a free como
_________________________________________________________________________
Programacin II
Pgina 71
Esta funcin es igual que malloc con la nica diferencia de sus parmetros.
En turbo C, los prototipos de las funciones malloc(), calloc() y free(), adems de estar
en el fichero alloc.h, tambin estn en el fichero stdlib.h
_________________________________________________________________________
Programacin II
Pgina 73
*x[10];
_________________________________________________________________________
Programacin II
Pgina 74
exit(1);
}
main()
{
int n = 1;
error(n);
}
_________________________________________________________________________
Programacin II
Pgina 75
p = &x;
q = &p;
Salida:
x = 10; *p = 10; **q = 10.
_________________________________________________________________________
Programacin II
Pgina 76
Salida:
resultado_1 = 1
resultado_2 = 0
resultado_3 = 1
resultado_4 = 0
_________________________________________________________________________
Programacin II
Pgina 77
<==>
int *p = &x;
int x = 10;
int *p;
p = &x;
int x, *p, y;
<==>
int x;
int *p;
int y;
<==>
int *p ;
int *q;
int r =10;
_________________________________________________________________________
Programacin II
Pgina 78
Ejemplo:
#include<stdio.h> /*printf ()*/
#include<conio.h>
main()
{
/*escribir es una funcin que acepta un int como argumento y no devuelve
nada*/
void escribir (int);
/*pf es un puntero a una funcin que acepta un int como argumento y no
devuelve nada*/
void (*pf)(int);
pf = escribir;
escribir (1); /*llama a la funcin escribir*/
(*pf)(2); /*llama a la funcin escribir a travs e un puntero*/
getch();
}
void escribir (int numero)
{
printf ("%d", numero);
}
_________________________________________________________________________
Programacin II
Pgina 79
/*puntero*/
/*puntero constante*/
_________________________________________________________________________
Programacin II
Pgina 80
Si ahora hacemos:
*p1 = d;
Estamos
apuntados por p2 y p4; es decir, los valores apuntados por p2 y p4 no pueden ser
modificados por estos punteros pero si pueden ser modificados indirectamente por otro
puntero.
Otro ejemplo de cmo se puede modificar el valor de una constante indirectamente a
travs de un puntero:
Const int x = 10;
x = 20;
*(int*)&x = 20;
_________________________________________________________________________
Programacin II
Pgina 81
Significado
indica puntero
indica una funcin
indica un array
Se pueden usar parntesis para agrupar parte de la expresin otorgndole la mxima prioridad.
Ejemplo:
main ()
{
/*array de arrays de int*/
int x1 [8][8];
/*puntero a puntero a int*/
int **x2;
/*array de 10 punteros a int*/
int *x3[10];
_________________________________________________________________________
Programacin II
Pgina 82
_________________________________________________________________________
Programacin II
Pgina 83
6.2.
Estructuras
6.2.2. Declaracin
La sintaxis de su declaracin es la siguiente:
struct tipo_estructura
{
tipo_variable nombre_variable1;
tipo_variable nombre_variable2;
tipo_variable nombre_variable3;
};
Donde tipo_estructura es el nombre del nuevo tipo de dato que hemos creado. Por
ltimo, tipo_variable y nombre_variable son las variables que forman parte de la
estructura.
Para definir variables del tipo que acabamos de crear lo podemos hacer de varias
maneras, aunque las dos ms utilizadas son stas:
Una forma de definir la estructura:
struct trabajador {
char nombre[20];
char apellidos[40];
int edad;
_________________________________________________________________________
Programacin II
Pgina 84
Otra forma:
struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
char puesto[10];
}fijo, temporal;
En el primer caso declaramos la estructura, y en el momento en que necesitamos las
variables, las declaramos. En el segundo las declaramos al mismo tiempo que la
estructura. El problema del segundo mtodo es que no podremos declarar ms
variables de este tipo a lo largo del programa. Para poder declarar una variable de tipo
estructura, la estructura tiene que estar declarada previamente. Se debe declarar antes
de la funcin main.
El manejo de las estructuras es muy sencillo, as como el acceso a los campos ( o
variables ) de estas estructuras. La forma de acceder a estos campos es la siguiente:
variable.campo;
Al igual que con los otros tipos de datos, tambin es posible inicializar variables de tipo
estructura en el momento de su declaracin:
struct trabajador fijo={"Pedro","Hernndez Surez", 32, "gerente"};
_________________________________________________________________________
Programacin II
Pgina 86
_________________________________________________________________________
Programacin II
Pgina 87
_________________________________________________________________________
Programacin II
Pgina 88
_________________________________________________________________________
Programacin II
Pgina 89
6.2.5. Typedef
El lenguaje 'C' dispone de una declaracin llamada typedef que permite la creacin de
nuevos tipos de datos. Ejemplos:
/* acabamos de crear un tipo de dato llamado entero */
typedef int entero;
entero a, b=3;
_________________________________________________________________________
Programacin II
Pgina 90
6.3.
Ficheros
6.3.1. Apertura
Antes de abrir un fichero necesitamos declarar un puntero de tipo FILE, con el que
trabajaremos durante todo el proceso. Para abrir el fichero utilizaremos la
funcinfopen().
Su sintaxis es:
FILE *puntero;
puntero = fopen ( nombre del fichero, "modo de apertura" );
donde puntero es la variable de tipo FILE, nombre del fichero es el nombre que
daremos al fichero que queremos crear o abrir. Este nombre debe ir encerrado entre
comillas.
Tambin podemos especificar la ruta donde se encuentra o utilizar un array que
contenga el nombre del archivo ( en este caso no se pondrn las comillas ).
Algunos ejemplos:
puntero=fopen("DATOS.DAT","r");
puntero=fopen("C:\\TXT\\SALUDO.TXT","w");
Un archivo puede ser abierto en dos modos diferentes, en modo texto o en modo
binario. A continuacin lo veremos con ms detalle.
_________________________________________________________________________
Programacin II
Pgina 91
a+ abre o crea un fichero para leer y aadir datos al final del mismo.
w+b
a+b
r+b
abre o crea un fichero para leer y aadir datos al final del mismo.
La funcin fopen devuelve, como ya hemos visto, un puntero de tipo FILE. Si al intentar
abrir el fichero se produjese un error ( por ejemplo si no existe y lo estamos abriendo en
modo lectura ), la funcin fopen devolvera NULL. Por esta razn es mejor controlar las
posibles causas de error a la hora de programar. Un ejemplo:
FILE *pf;
pf=fopen("datos.txt","r");
if (pf == NULL) printf("Error al abrir el fichero");
freopen(): Esta funcin cierra el fichero apuntado por el puntero y reasigna este puntero
a un fichero que ser abierto. Su sintaxis es:
freopen(nombre del fichero,"modo de apertura",puntero);
Donde nombre del fichero es el nombre del nuevo fichero que queremos abrir, luego el
modo de apertura, y finalmente el puntero que va a ser reasignado.
_________________________________________________________________________
Programacin II
Pgina 92
6.3.2. Cierre
Una vez que hemos acabado nuestro trabajo con un fichero es recomendable cerrarlo.
Los ficheros se cierran al finalizar el programa pero el nmero de estos que pueden
estar abiertos es limitado.
Para cerrar los ficheros utilizaremos la funcin fclose();. Esta funcin cierra el fichero,
cuyo puntero le indicamos como parmetro. Si el fichero se cierra con xito devuelve 0.
fclose (puntero);
exit(0);
else fputc(letra,pf);
fclose(pf);
char letra;
/*
tambin
podamos
haber
hecho
directamente:
fputw(3,pf); */
fclose(pf);
}
Lee un nmero entero de un fichero, avanzando dos bytes despus de cada lectura. Un
ejemplo:
FILE *pf;
int num;
if (!(pf=fopen("datos.txt","rb"))) /* controlamos si se produce un error
*/
{
printf("Error al abrir el fichero");
exit(0); /* abandonamos el programa */
}
else
{
num=getw(pf);
printf("%d",num);
fclose(pf);
int edad=34;
{
fprintf(pf,"%20s%2d\n",nombre,edad);
fclose(pf);
_________________________________________________________________________
Programacin II
Pgina 96
Lee los argumentos del fichero. Al igual que con un scanf, deberemos indicar la
direccin de memoria de los argumentos con el smbolo & ( ampersand ). Un ejemplo:
FILE *pf;
char nombre[20];
int edad;
if (!(pf=fopen("datos.txt","rb"))) /* controlamos si se produce un error
*/
{
printf("Error al abrir el fichero");
exit(0); /* abandonamos el programa */
}
else
{
fscanf(pf,"%20s%2d\",nombre,&edad);
printf("Nombre: %s
Edad: %d",nombre,edad);
fclose(pf);
}
_________________________________________________________________________
Programacin II
Pgina 97
del
fichero
nombre1
por
un
nuevo
nombre,
nombre2.
_________________________________________________________________________
Programacin II
Pgina 98
7. Grficos en el Leguaje C
_________________________________________________________________________
Programacin II
Pgina 99
7.1.
_________________________________________________________________________
Programacin II
Pgina 100
7.2.
Para poder utilizar el modo grfico, antes que nada debe iniciarse. Primero hay que
detectar el adaptador:
int gdriver=DETECT, gmode;
_________________________________________________________________________
Programacin II
Pgina 101
7.3.
BLACK
BLUE
GREEN
CYAN
4
5
6
7
RED
MAGENTA
BROWN
LIGHTGRAY
8
9
10
11
DARKGRAY
LIGHTBLUE
LIGHTGREEN
LIGHTCYAN
12
13
14
15
LIGHTRED
LIGHTMAGENTA
YELLOW
WHITE
_________________________________________________________________________
Programacin II
Pgina 102
(x,y)
7.4.
ancho);
Lnea Continua
Guiones
Guiones largos y cortos
3
4
Guiones largos
Puntos
7.5.
Funciones de relleno
Rellena a partir del punto (x,y) el rea limitada por el color frontera.
En frontera se indica una constante COLORS o bien el numero del color
correspondiente.
0
1
2
3
BLACK
BLUE
GREEN
CYAN
4
5
6
7
RED
MAGENTA
BROWN
LIGHTGRAY
8
9
10
11
DARKGRAY
LIGHTBLUE
LIGHTGREEN
LIGHTCYAN
12
13
14
15
LIGHTRED
LIGHTMAGENTA
YELLOW
WHITE
Patrn Vaco
Slido
Lneas horizontales gruesas
7
8
9
_________________________________________________________________________
Programacin II
Pgina 104
10
11
12
Puntos separados.
Puntos cercanos
Patrn definido por el usuario
En color se indica una constante COLORS o bien el numero del color correspondiente.
0
1
2
3
BLACK
BLUE
GREEN
CYAN
4
5
6
7
RED
MAGENTA
BROWN
LIGHTGRAY
8
9
10
11
DARKGRAY
LIGHTBLUE
LIGHTGREEN
LIGHTCYAN
12
13
14
15
LIGHTRED
LIGHTMAGENTA
YELLOW
WHITE
7.6.
Normal
Sans Seriff
Triplex
Gtica
Fuente pequea
7.6.5. Otras
Obtener la coordenada mxima horizontal.
Horizontal:
int getmaxx( );
Vertical:
int getmaxy();
int getx( );
Vertical:
int gety( );
_________________________________________________________________________
Programacin II
Pgina 106
Cambiar color de
0
1
2
3
Dibujo y texto:
setcolor(color);
Fondo de pantalla:
setbkcolor(color);
BLACK
BLUE
GREEN
CYAN
4
5
6
7
RED
MAGENTA
BROWN
LIGHTGRAY
8
9
10
11
DARKGRAY
LIGHTBLUE
LIGHTGREEN
LIGHTCYAN
12
13
14
15
LIGHTRED
LIGHTMAGENTA
YELLOW
WHITE
int getcolor( );
Fondo de pantalla:
int getbkcolor( );
Un pixel en particular:
(x,y)
el color
Borrar toda la pantalla
cleardevice( );
_________________________________________________________________________
Programacin II
Pgina 107