curso de lenguaje c
DESCRIPTION
curso de lenguaje cTRANSCRIPT
Curso Curso TTéécnicas de programacicnicas de programacióónn
Ciclo Superior de Desarrollo de Productos Electrónicos
Instituto Río DueroDepartamento de Electricidad-Electrónica
Compilador empleado = Estandar C y C++
Santiago J. Martín
LENGUAJES DE PROGRAMACILENGUAJES DE PROGRAMACIÓÓNN
PASCAL - JAVA
UNIX - C
BASIC - FORTRAN
COBOL - DELPHI
SQL - HTML
ORACLE - EIFFEL
RUBY - WAP
HASKELL - APL
ALGO - PROLOG ……………
Principios fundamentales Programación en C
INTRODUCCIÓN
El lenguaje C es actualmente uno de los más utilizados por aquellos programadores que buscan la estructura de un lenguaje de alto nivel con la potencia y eficacia de un lenguaje ensamblador.
Es utilizado para prácticamente cualquier tarea de programación.C
OrOríígenes del Cgenes del C
El lenguaje C fue inventado por Dennis Ritchie en 1972 cuando trabajaba, junto con Ken Thompson, en el diseño del sistema operativo UNIX.
El lenguaje C deriva del lenguaje B de Thompson, el cual, a su vez, deriva del lenguaje BCPL desarrollado por Martin Richards.
Durante muchos años el estándar de C fue la versión proporcionada con el sistema operativo UNIX versión 5. Pero pronto empezaron a surgir muchas implementaciones del C a raíz de la popularidad creciente de los microordenadores.
Por este motivo, se hizo necesario definir un C estándar que está representado hoy por el ANSI C.
CaracterCaracteríísticas del lenguaje Csticas del lenguaje C
- Este lenguaje se ha utilizado para el desarrollo de aplicaciones tan dispares como: hojas de cálculos, gestores de bases de datos, compiladores, sistemas operativos, ...
- Es un lenguaje de medio nivel. Este lenguaje permite programar a alto nivel (pensando a nivel lógico y no en la máquina física) y a bajo nivel (con lo que se puede obtener la máxima eficiencia y un control absoluto de cuanto sucede en el interior del ordenador).
CaracterCaracteríísticas del lenguaje Csticas del lenguaje C
- Es un lenguaje portátil. Los programas escritos en C son fácilmente transportables a otros sistemas.
- Es un lenguaje potente y eficiente. Usando C, un programador puede casi alcanzar la eficiencia del código ensamblador junto con la estructura del Algol o Pascal.
Como desventajas habría que reseñar que es más complicado de aprender que otros lenguajes como Pascal o Basic y que requiere una cierta experiencia para poder aprovecharlo a fondo.
LENGUAJE C LENGUAJE C
Basado en el Sistema Operativo UNIX.C
Parte del lenguaje BCPL (Martin)
Mejorado por Thompson (lenguaje B)
Lo inventó Dennis Ritchie 1972
En 1989 se crea el estándar ANSI de C
Lenguaje de medio nivel
Software de sistemas
Multitud de compiladores :
Turbo C / C++Borland C / C++ Microsoft C / C++Etc……..
COMPONENTES DE UN PROGRAMA EN CTodos los programas en C comparten unas características comunes. Para familiarizarse con estos elementos se propone el siguiente programa:
/* Primer programa en lenguaje C */
#include "stdio.h"
main()
{
printf("Este es el primer programa en C");
}
Una vez compilado y ejecutado, el programa muestra en pantalla el texto:
Este es el primer programa en C
En C estándar de ANSI no se pueden anidar comentarios (uno dentro de otro), como muestra el siguiente comentario dentro de un comentario, que generará un error de compilación:
/* esto es /* un error */ */
Turbo C tiene una opción de anidar, pero haciendo esto se convierte en no transportable (el código fuente no se puede llevar a otro compilador de C o a otro ordenador).
COMENTARIOS
#include "stdio.h"Si se encierra el archivo entre comillas,
se busca el archivo primero en el directorio de trabajo actual.
Si no se encuentra, se busca en cualquier directorio especificado en la línea de órdenes.
Finalmente, si el archivo todavía no se ha encontrado, el compilador busca los directorios estándar.
INCLUSIÓN DE LIBRERIAS
#include <stdio.h>En caso de encerrarse el archivo entre menor mayor, el compilador buscará primero en el archivo en los directorios que se especifican en la línea de órdenes de compilador.
Si no se encuentra el compilador busca en los directorios estándar.
En ningún momento el compilador busca el directorio actual de trabajo.C
INCLUSIÓN DE LIBRERIAS
Todas las sentencias de C terminan en punto y coma (;).
C no reconoce el final de línea como un límite.
Esto significa que no hay restricciones sobre la posición de las sentencias dentro de una línea.
Se pueden situar dos o más sentencias en una línea.
La forma más simple de una función de C:
nombre_de_función()
{
secuencia de sentencias;
}
SENTENCIAS
Aunque un programa en C puede contener diversas funciones, la única función que DEBE tener es main() ("principal"), la función main() es la función en la que comienza la ejecución de un programa.
Es decir, cuando el programa comienza a operar, empiezan ejecutando las sentencias que hay dentro de la función main(), empezando por la primera sentencia que hay después de la llave de apertura.
La ejecución del programa termina cuando se alcanza la llave de cierre.
mainmain ( )( )
IDENTIFICADORESIDENTIFICADORESLos operadores manipulan variables y constantes para formar expresiones. Estos cuatro -variables, constantes, operadores y expresiones- son el abecedario del lenguaje C.
NOMBRES DE IDENTIFICADORES
El lenguaje C define IDENTIFICADORES como los nombres que se utilizan para referenciar variables, funciones, etiquetas y otros objetos definidos por el usuario.
En C un identificador puede tener de uno a varios caracteres.
El primer carácter DEBE ser una letra o un subrayado, los restantes caracteres pueden ser cualquier combinación de caracteres alfabéticos y numéricos (incluido el símbolo de subrayado).
DECLARACIDECLARACIÓÓN DE VARIABLES Y ASIGNACIN DE VARIABLES Y ASIGNACIÓÓN DE N DE VALORESVALORES
Una VARIABLE es una posición de memoria con nombre que puede guardar distintos valores. En C, a diferencia de otros lenguajes de computadora, todas las variables se deben declarar antes de poder utilizarlas.
C soporta 5 tipos diferentes básicos:
char, int, float, double, void.
Para declarar una variable se utiliza esta forma general:
tipo nombre_de_variable;
Por ejemplo a continuación se declara que contador es de tipo int:
int contador;
En C una declaración de variable es una sentencia y debe terminar con un punto y coma.
Se puede declarar más de una variable del mismo tipo utilizando una lista separada por comas. Por ejemplo:
float x, y, z;
En C se pueden dar valores a la mayoría de las variables a la vez que se declaran poniendo un signo igual y una constante después del nombre de la variable, el formato general de la inicialización es:
tipo nombre_de_variable = valor;
Estudio de la sentencia Estudio de la sentencia printfprintf
printf (“%d”, num);
sentencia
especificador de formato
nombre de la variable
Muestra en pantalla los caracteres contenidos entre las comillas dobles de inicio y fin (las comillas dobles no se muestran en pantalla).
printf ("cadena-a-mostrar");
En C uno o más caracteres encerrados entre comillas dobles se llama CADENA.
A la cadena entre comillas que hay entre los paréntesis de printf() se la llama ARGUMENTO.
La función printf()
funcifuncióón n printfprintf()()
Su prototipo es:
int printf(char* cadena de control, lista de argumentos);
Este prototipo de función está en el fichero de cabecera stdio.h.
La CADENA DE CONTROL consta de 2 tipo de elementos:
1º Los caracteres que se imprimirán en la pantalla.
2º Órdenes de formato que definen la manera en que se visualizarán los argumentos
En C, la llamada a una función de biblioteca es una sentencia; por eso debe terminar con un punto y coma.
Para llamar a una función, se especifica su nombre seguido de la lista de argumentos que se va a pasar, entre paréntesis. Si la función no requiere ningún argumento, no se especificarán argumentos -y la lista entre paréntesis aparecerá vacía-. Si hay más de un argumento, los argumentos deben estar separados por comas.
La función printf()
printf - secuencias de escape
Permite escribir por el dispositivo de salida estándar---- Caracteres y secuencias de escape como \n .
Ejemplo = printf (“ Instituto Río Duero \n “);
\b Retroceso \f Alimentador de hojas
\n Nueva línea \r Retorno de carro
\t Tabulador horizontal \" Doble comilla
\’ Comilla simple \0 Nulo (para cadenas)
\\ Barra invertida \v Tabulador vertical
\a Alerta \o Constante octal
\x Constante hexadecimal
---- Especificadores de conversión, empiezan por % .Ejemplo =
printf (“hoy estamos a %d º de temperatura “, temp);
d = decimal o = octal x = hexadecimalf = float e = exponencial c = carácters = cadena de caracteres
especificadores de conversión
Estudio de los Estudio de los especificadoresespecificadores de formatode formato
/* muestra valores de punto flotante en *//* formato regular y exponencial */main(){
float A = 2500.125;float B = 0.0033;float C = -50.99;float D = 0.6664655555555555456;float E = 666;printf("\n%f\t %e\n\n", A,A);printf("%f\t %e\n\n", B,B);printf("%f\t %e\n\n", C,C);printf("%f\t %e\n\n", D,D);printf("Marca mi numero es el %f \n\n",E);
}
Ejemplos Ejemplos con con printf
main()
{
char hola='h',adios=104;
int i=97;
unsigned long l=12345678;
float f=9876.54321;
double d=66.6e+088;
unsigned int acedo=65432;
unsigned int suave=55434;
printf("%c tipo char en caracter\n",hola);
printf("%d tipo char en decimal\n",hola);
printf("%c tipo char en caracter\n",adios);
printf("%d tipo char en decimal\n",adios);
printf("%c tipo int como caracter\n",i);
printf("%d tipo int en decimal\n",i);
printf("%x tipo int como hexadecimal\n",i);
printf("%lc tipo long como caracter\n",l);
printf("%ld tipo long como decimal\n",l);
printf("%lx tipo long como hexadecimal\n",l);
printf("%lc tipo float como caracter\n",f);
printf("%f tipo float como decimal\n",f);
printf("%e tipo float como exponencial\n",f);
printf("%f tipo double como decimal\n",d);
printf("%e tipo double como exponencial\n",d);
}
Estudio de variables tipo Estudio de variables tipo charchar
/* muestra algunas variables de tipo */
/* char como caracteres y como enteros. */
main()
{
char plus = 'A' , ultra = 99;
char b=98;
char c=99,e=101,d=100,o=111;
printf("El caracter %c tiene el codigo ASCII %d\n", plus,plus);
printf("si se opera (A+10)-10 obtendra %c\n",(plus+10)-10);
printf("El caracter %c tiene el codigo ASCII %d\n", ultra, ultra);
printf("el caracter %c tiene el codigo ASCII = %d\n" ,b,b);
printf("El caracter %c tiene el codigo ASCII = %d\n" ,c,c);
printf("mi nombre es = %c%c%c%c%c\n",plus, c, e, d, o);
}
Formas de imprimir con Formas de imprimir con printfprintf
main()
{
/* Muestra como printf() sigue en la misma linea. */
printf("\nEn realidad");
printf(" esta linea ");
printf(" sale de tres distintas.\n");
printf("Esta linea es como es.\n");
printf("Esta introduce mi nombre que es %s.",“Jose Luis");
/* Estudio y utilizacion del \a \n \t */
printf (" \n\n \a\a\a \n\nLos programadores \t%s ","\somos todos\nsolo tienes\
\t\
que aplicarte\n\
\
adios \
");
}
Distintos formatos de Distintos formatos de floatfloat
main()
{
int i = 12;
long l = 1234;
float f = 123.45;
printf(" Entero: %d \n", i);
printf(" Entero de tipo long: %ld\n\n", i); /* cuidado */
printf(" Entero: %d \n", l); /* ojo */
printf(" Entero de tipo long: %d\n", l);
printf(" Exponencial: %e\n", l);
printf(" Float: %f \n\n", l);
printf("%12.6f\n", f);
printf("%8.4f\n", f);
printf("%8.3f\n", f);
printf("%8.2f\n", f);
printf("%1.0f\n", f);
} PROGRAMA 4
EjemplosEjemplos
n = 65; b = d; hola = 2000;
printf (“ el número %d es impar. \n”,n);
printf (“ el número %c es impar. \n”,95);
printf (“ el número %f es impar. \n”, n);
printf (“ la resultante es =%d \n”,5+5);
printf (“ el número %d es impar.\n”,a);
printf (“ el número %c es impar. \n”,b);
printf (“ el número %ld es impar.\n”,n);
printf (“ si se suma 2+2 = %d \n”,2+6);
printf (“ %d %c %d %d \n”,n,b,n,b,j);
printf (“ %c %d %d %c \n”,n,b,hola,adiós);
Son conocidas a lo largo de todo el programa y las puede utilizar cualquier trozo de código del programa. Además, mantendrán su valor durante toda la ejecución del programa. Por ejemplo:
# include "stdio.h"
int max; /* Esta es una variable global */
main()
{
max = 10;
f1();
}
f1()
{
int i; /* Variable local */
for(i = 0; i < max; i++)
printf("%d",i);
}
Variables
globales
VARIABLES GLOBALES Y LOCALESVARIABLES GLOBALES Y LOCALESHay dos lugares básicos donde se declara una variable: dentro de una función y fuera de todas las funciones. Estas variables se llaman variables LOCALES y variables GLOBALES, respectivamente.
Las variables locales (declaradas dentro de una función) sólo las pueden referenciar las sentencias que estén dentro de esa función.
No son conocidas fuera de su propia función.
Una de las cosas más importantes que hay que entender sobre las variables locales es que solamente existen mientras se está ejecutando la función en la que están declaradas.
Es decir, una variable local se crea al llamar a su función y se destruye cuando se sale por lo que no pueden mantener sus valores entre llamadas.
ÁÁmbito de las variablesmbito de las variables
La declaración de las variables lleva asociado un ámbito, dentro del cual la variable es visible:
– Ámbito global: La variable es visible para todas las funciones del programa.
– Ámbito local: La variable es visible sólo dentro de la función. (Tiene prioridad sobre el ámbito global)
En C, una variable local y una variable global pueden tener el mismo nombre. Por ejemplo:
# include "stdio.h"
int contador; /* contador como variable global */
main()
{
contador = 10 ;
f1() ;
printf ("contador en main(): %d\n", contador") ;
}
f1()
{
int contador; /* contador como variable local */
contador = 100;
printf("contador en f1() : %d", contador);
}
El programa muestra esta salida de pantalla: contador en f1() : 100 contador en main() : 10
Las variables globales son muy útiles cuando muchas funciones del programa utilizan los mismos datos.
Sin embargo, se deberían utilizan variables locales donde se pueda, ya que un uso excesivo de variables globales tiene algunas consecuencias negativas:
Primero, las variables globales utilizan memoria todo el tiempo que el programa está en ejecución, no sólo cuando se necesitan. En situaciones en las que la memoria es un recurso escaso, esto podría suponer un problema.
Segundo, la utilización de una variable global donde serviría una variable local hace a una función menos general, ya que confía en algo que se debe definir fuera de sí misma.
TIPOS DE DATOSTodas las variables en C se deben declarar antes de usarlas. Es necesario porque el compilador debe saber qué tipo de datos es una variable antes de poder compilar cualquier sentencia en la que se use. En C hay cinco tipos básicos:
carácter (character)
entero (integer)
punto flotante (floating-point)
doble punto flotante (double-floating-point)
sin valor (valueless)
Las palabras claves para declarar variables de estos tipos son :
char, int, float, double y void
DeclaraciDeclaracióón de variablesn de variables
Declaración simple:– char c;
– unsigned int i;
Declaración múltiple:– char c,d;
– unsigned int i,j,k;
Declaración y asignación:– char c=’A’;– unsigned int i=133,j=1229;
Tipo bit Rango
char 8 - 128 a 127
int 16 - 32768 a 32767
float 32 - 3.4E-38 a 3.4E+38
double 64 - 1.7E-308 a 1.7E+308
void 0 - sin valor
Los tipos de datos básicos excepto el tipo void se pueden modificar utilizando modificadores de tipo de C para que se ajusten más adecuadamente a las necesidades específicas surgidas en un programa.
Estos modificadores de tipo son:
Signed unsigned long short
Tipo bits Rango
char 8 -128 a 127
unsigned char 8 0 a 255
Signed char 8 -128 a 127
int 16 -32.768 a 32.767
unsigned int 16 0 a 65.535
signed int 16 -32.768 a 32.767
short int 16 -32.768 a 32.767
unsigned short int 16 0 a 65.535
signed short int 16 -32.768 a 32767
long int 32 -2147483648 a 2147483647
signed long int 32 -2147483648 a 2147483647
float 32 3,4 E -38 a 3,4 E +38
double 64 1,7 E -308 a 1,7 E +308
long double 64 1,7 E -308 a 1,7 E +308
CCÓÓDIGO FORMATODIGO FORMATO
%c Un sólo carácter %d Entero decimal con signo%f Punto flotante %i Idem%e Notación científica (minúscula) %E Notación científica (mayúscula)%o Octal sin signo %s Cadena de caracteres%u Entero decimal sin signo %x Hexadecimal sin signo (letra minúscula)
%p Muestra un puntero %X Hexadecimal sin signo (letra mayúscula)
%ld Muestra un long %lo Muestra un long%lx Muestra un long %lf Muestra un double%le Muestra un double %lg Muestra un double%Ld Muestra un long double %Lf Muestra un long double%Le Muestra un long double
Lo primero es conocer el tamaño en bytes de ese tipo de dato.Vamos a ver un ejemplo con el tipo INT.
#include <stdio.h>int main() { Int num1;printf( "El tipo int ocupa %i bytes\n", sizeof(int) ); }
En mi ordenador el resultado es: El tipo int ocupa 4 bytes. Ahora para calcular el máximo número debemos elevar 2 al número de bits obtenido.
En nuestro ejemplo: 2^32=4.294.967.296.
Cálculo del máximo valor que admite un tipo
Operador Operador SizeofSizeofTambién nos permite conocer el tamaño en bytes de una variable. De esta manera no tenemos que preocuparnos en recordar o calcular cuanto ocupa. Además el tamaño de una variable cambia de un compilador a otro, es la mejor forma de asegurarse. Se usa poniendo el nombre de la variable después de sizeof y separado de un espacio:
#include <stdio.h>
int main()
{
int variable;
printf( "Tamaño de la variable: %i\n", sizeof variable );
}
overflowoverflowEl overflow es lo que se produce cuando
intentamos almacenar en una variable un número mayor del máximo permitido.
El comportamiento es distinto para variables de números enteros y para variables de números en coma flotante.
-- Direcciones de las variables Direcciones de las variables --
Para ello utilizamos el carácter “&” seguido del nombre de la variable.
El valor se imprimirá normalmente en hexadecimal.
El especificador que emplearemos no depende del tipo de variable de la cual obtendremos la dirección .
El valor numérico de la dirección de las variables siempre será de la misma longitud ( puede variar de un sistema a otro ).
Ejemplos =
printf (“ variable cuya dirección es = %d \n”, &ciclo);
printf (“ variable cuyo valor es = %d \n”, ciclo);
OPERADORES ARITMOPERADORES ARITMÉÉTICOSTICOS
Los operadores aritméticos son:
- Resta y menos
+ Suma
* Multiplicación
/ División
% Módulo división (no float o double)
++ Incremento
-- Decremento
INCREMENTOS Y DECREMENTOS DE INCREMENTOS Y DECREMENTOS DE FORMA COMPACTAFORMA COMPACTA
main()
{
int a=50;
printf("a ES %d\n",a);
printf("++a ES %d\n",++a);
printf("--a ES %d\n",--a);
printf("a++ Es %d\n",a++);
printf("a ES %d\n",a);
printf("a-- Es %d\n",a--);
printf("a ES %d\n\n",a);
}
PROGRAMA 6
++
--
x++ ; /* equivale a x = x + 1 */
x-- ; /* equivale a x = x - 1 */
Estos operadores pueden preceder o seguir su operando:
x++ ; o ++x ; x-- ; o --x ;
Hay diferencia cuando se usa en una operación. Cuando un operador incremento o decremento precede a su operando, C realiza la operación de incremento o de decremento antes de usar el valor del operando. Cuando el operador sigue al operando, C usa el valor del operando antes de incrementar o decrementarlo. Ejemplo:
x = 10 ; y = ++x ;
y = x++ ;
En ambos casos el valor final de x es 11, la diferencia es cuando lo hace.
Operador mOperador móódulo : %dulo : %
Proporciona el resto de una división
Ejemplo 13 % 5 es 3
Utilizando este operador realiza un programa que nos pida que introduzcamos segundos y nos informe los minutos que son y los segundos que sobran.
Precedencia de operadores en las Precedencia de operadores en las expresionesexpresiones
main()
{
int a = 15, b = 21, c = 7, d = 43;
printf("87 + 13 = %d\n",87 + 13); /* Enteros. */
printf("65 + 12 - 9 = %d\n",65 + 12 - 9);
printf("8.9 + 5.3 - 7 = %f\n",8.9 + 5.3 - 7); /* Flotantes. */
printf("1 + 2 * 3 = %d\n", 1 + 2 * 3);
printf("5 * (8 - 5) = %d\n", 5 * (8 - 5));
printf("a * a - c + b = %d\n", a * a - c + b);
printf("a * (a - (c + b)) = %d\n", a * (a - (c + b)));
printf("Tipo entero: 10 / 3 = %d\n", 10 / 3);
printf("Tipo float: 10 / 3 = %2.12f\n", 10.0 / 3.0);
}
OPERADORES ARITMOPERADORES ARITMÉÉTICOS DE ASIGNACITICOS DE ASIGNACIÓÓNN
main() {
float b=4,l=5;
int a=20,n=10;
printf("VALORES INICIALES a=%d n=%d l=%f b=%f\n",a,n,l,b);
/*DISTINTAS OPERACIONES MATEMATICAS*/
printf("a+=5 HACE QUE a SEA %d\n",a+=5);
printf("a-=n HACE QUE a SEA %d\n",a-=n);
printf("l*=2 HACE QUE a SEA %f\n",l*=2);
printf("l/=n HACE QUE a SEA %f\n",l/=n);
printf("b+=5 HACE QUE a SEA %f\n",b+=5);
printf("l+=l HACE QUE a SEA %f\n",l+=l);
printf("l+=5 HACE QUE a SEA %f\n",l+=5);
printf("n+=b HACE QUE a SEA %d\n",n+=b);
printf("n+=l*b HACE QUE a SEA %d\n",n+=l*b);
/*DISTINTAS FORMAS DE INCREMENTAR*/
printf("a=a+3 HACE QUE a SEA %d\n",a=a+3);
printf("a+=1 HACE QUE a SEA %d\n",a+=1);
printf("a=a*2 HACE QUE a SEA %d\n",a=a*2);
printf("a=a*2 HACE QUE a SEA %d\n",a=a*2);
printf("b=b*2+l/n HACE QUE a SEA %f\n",b=b*2+l/n);
printf("l=l/3 HACE QUE a SEA %f\n",l=l/3);
printf("n=n*5 HACE QUE a SEA %d\n",n=n*5);
}
+=
-=
*=
/=
%=
Valor de retorno de Valor de retorno de printfprintf ()()
1. #include <stdio.h>2. main()3. {4. int n = 100;5. int rv;6. rv = printf("El punto de ebullici¢n del agua es %d grados.\n", n);7. printf("La función printf() ha impreso %d caracteres.\n", rv);8. }
Anchura de los camposAnchura de los campos
#include <stdio.h>#define PAGINAS 336main(){printf("/%d/\n", PAGINAS);printf("/%2d/\n", PAGINAS);printf("/%10d/\n", PAGINAS);printf("/%-10d/\n", PAGINAS);
}
#define RENTA 1234.56
main()
{
printf("/%f/\n", RENTA);
printf("/%e/\n", RENTA);
printf("/%4.2f/\n", RENTA);
printf("/%3.1f/\n", RENTA);
printf("/%10.3f/\n", RENTA);
printf("/%10.3e/\n", RENTA);
printf("/%+4.2f/\n", RENTA);
printf("/%010.2f/\n", RENTA);
}
estudio de la sentencia estudio de la sentencia scanfscanf
scanf (“%d”,&num);
dirección de “nombre de la variable”
Sentencia
especificador de formato
PROGRAMA 5
Ejemplos Ejemplos con con
scanfscanf
main()
{
int partidos, ganados, empatados, perdidos;
int ptos_ganar, ptos_empatar, ptos_perder,ptos_total,puntosg,puntose,puntost;
ptos_ganar= 3;
ptos_empatar=1;
ptos_perder=0;
printf("\n\n\n\t Zamora CF \n");
printf("Partidos que ha ganado: ");
scanf("%d", &ganados);
printf("Partidos que ha empatado: ");
scanf("%d", &empatados);
printf("Partidos que ha perdido: ");
scanf("%d", &perdidos);
partidos= ganados + empatados + perdidos;
puntosg=ptos_ganar * ganados;
puntose=ptos_empatar * empatados;
puntost=puntosg + puntose;
printf("\n\n\n");
printf("\t\tRelaci¢n al equipo de futbol Zamora CF\n\n\n ");
printf("\t\t\t\t Partidos\t Puntos\n");
printf("\t Partidos ganados =\t\t %2d\t\t%2d\n",ganados,puntosg);
printf("\t Partidos empatados =\t\t %2d\t\t%2d\n",empatados,puntose);
printf("\t Partidos perdidos =\t\t %2d\t\t___\n\n",perdidos);
printf("\t Total =\t\t %2d\t\t%2d\n\n",partidos, puntost);
}
PROGRAMA 5
OPERADORES RELACIONES Y LOPERADORES RELACIONES Y LÓÓGICOSGICOSLos operadores relacionales comparan 2 valores y devuelven un resultado verdadero o falso, basado en la comparación.
Los operadores lógicos agrupan valores de verdadero/falso.
En C, verdad es cualquier valor distinto de cero, mientras que falso es cero.
Los operadores relacionales y lógicos son:
RELACIONALES LRELACIONALES LÓÓGICOSGICOS
> Mayor que && AND
>= Mayor o igual que || OR
< Menor que ! NOT
<= Menor o igual que
== igual que
!= Distinto que
OPERADORES DE RELACIOPERADORES DE RELACIÓÓNN
main ()
{
int a=20, b=15, c=10;
printf("Es a>b %d\n",a>b);
printf("Es a= =b %d\n",a= =b);
printf("Es a<b %d\n",a<=b);
printf("Es a=b %d\n",a=b);
printf("Es a= =b %d\n",a= =b);
}
>
<
>=
<=
!=
= =Programa 7
Los operadores lógicos se usan para soportar las operaciones básicas lógicas AND, OR y NOT de acuerdo con la siguiente tabla de verdad que usa "1"para verdad y "0" para falso.
OPERADOR &&.-
El resultado es verdadero si los dos operandos son verdadero.
OPERADOR ||.-
El resultado es verdadero si al menos uno de los operandos es verdadero.
OPERADOR !.-
El resultado es verdadero si el operando el falso y viceversa.
Operadores lógicos
Operadores lOperadores lóógicosgicos
main()
{
printf("1 AND 1 es %d\n", 1 && 1);
printf("1 AND 0 es %d\n", 1 && 0);
printf("0 AND 1 es %d\n", 0 && 1);
printf("0 AND 0 es %d\n\n", 0 && 0);
printf("1 OR 1 es %d\n", 1 || 1);
printf("1 OR 0 es %d\n", 1 || 0);
printf("0 OR 1 es %d\n", 0 || 1);
printf("0 OR 0 es %d\n", 0 || 0);
}
&& = AND
| | = OR
! = NOT
PROGRAMA 8PROGRAMA 8
Diagramas de flujoDiagramas de flujo
operación en generaloperación de entrada / salidainicio - finalmodificación/inicializaciónoperación auxiliarsubprograma o subrutina
comentarios
OPERADORES A NIVEL DE BITOPERADORES A NIVEL DE BITC contiene diversos operadores especiales que incrementan enormemente su poder y flexibilidad especialmente para su programación a nivel del sistema que realizan sus operaciones bit a bit.
Como C fué diseñado para reemplazar el lenguaje ensamblador en la mayoría de las tareas de programación, tenía que poseer la habilidad de soportar todas (o al menos muchas) operaciones que pueden realizarse en lenguaje ensamblador.
Las operaciones sobre bits se refieren a la comprobación, configuración o desplazamiento de los bits reales contenidos en un byte o una palabra.
Estos operadores trabajan con los tipos caracter y entero.
La lista de estos operadores es:La lista de estos operadores es:
& AND
| OR
^ OR EXCLUSIVA (XOR)
~ Complemento a 1 (NOT) (unario)
>> Desplazamiento a la derecha
<< Desplazamiento a la izquierda
FUNCIONES CON ARGUMENTOSFUNCIONES CON ARGUMENTOSUn argumento de una función es un valor que se pasa a la función en el momento que se realiza la llamada. Se pueden crear funciones que toman argumentos. Por ejemplo:
/* Ejemplo de los argumentos de una función */
# include <stdio.h>
main()
{
mul(10,11);
}
mul(a, b)
int a, b;
{
printf("%d", a * b);
}
FUNCIONES QUE DEVUELVEN VALORESFUNCIONES QUE DEVUELVEN VALORES
En C, una función devuelve un valor a la rutina que la llama usando la clave return.
# include <stdio.h>
main()
{
int respuesta;
respuesta = mul(10 , 11);
printf("la respuesta es %d \n", respuesta);
}
/* Esta función devuelve un valor */
mul(int a , int b)
{
return a * b ;
}
buclesbuclesfor
whilewhile
do .............do .............whilewhile
Bucle Bucle forfor
El formato del bucle for es el siguiente:
valores iniciales condiciones incrementos
{
conjunto de intrucciones
a ejecutar en el bucle
.
.
.
.
.}
Bucle Bucle
FORFOR
VALORES INICIALES
CONDICIÓN
ACTUACIONES
SENTENCIAS DEL BUCLE
RESTO DEL PROGRAMA
SENTENCIAS
SI
NO
Ejemplo de bucle Ejemplo de bucle forformain() { int
i;
for
( i=0 ; i<100 ; i++ ) {
printf( “instituto " ); printf( “río " ); printf( “duero
\n" );
} }
/* cuidado con ;*/
PROGRAMA 9PROGRAMA 9
Cuando solo hay una sentencia Cuando solo hay una sentencia se puede poner de forma se puede poner de forma compactacompacta
mainmain() () {{
forfor
( i=0 ; i<100 ; i++ )( i=0 ; i<100 ; i++ )printf( "Holaprintf( "Hola\\n" ); n" );
}}
Bucle Bucle
WHILEWHILE
CONDICIÓN
ACTUACIONES
RESTO DEL PROGRAMA
SENTENCIAS
SINO
Ejemplos del bucle Ejemplos del bucle whilewhile• main()
• {
• int contador = 1;
• while (contador <51)
• {
• printf("%d\n", contador);
• contador++ ;
• }
• printf("-Hecho!\n");
• }
BucleBucle
DO DO
WHILEWHILE
CONDICIÓN
ACTUACIONES
RESTO DEL PROGRAMA
SENTENCIAS
SI NO
Ejemplo del bucle Ejemplo del bucle do do ............whilewhile
1. main()2. {3. int i=1;4. do5. {6. printf("%d\n",i);
i++;
7. }8. while (i<11);9. printf ("-Hecho!\n");10. }
PROGRAMA 11PROGRAMA 11
1. main()
2. {
3. int contador =100;
4. printf("\n\n ¿qué hace este bucle ? \n\n");
5. while (contador >50)
6. {
7. printf("\t\t%d\t\t\t ",contador);
8. contador=contador-3;
9. }
10. printf("\n\n\n");
11. }
ejemplos de contadores
1. main()
2. {
3. int i=1;
4. do
5. {
6. printf("%d\n",i);
7. i++;
8. }
9. while (i<11);
10. printf ("-Hecho!\n");
11. }
ejemplos de contadores
1. #include <stdio.h>
2. #define PI 3.14159
3. main()
4. {
5. float area, circun, radio;
6. printf("¨Cuál es el radio de su pizza?\n");
7. scanf("%f", &radio);
8. area = PI * radio * radio;
9. circun = 2.0 * PI * radio;
10. printf("Los par metros b sicos de su pizza son:\n");
11. printf("circunferencia = %1.2f, rea = %1.2f\n",circun, area);
12. }
Preprocesador
definiendo
constantes
Campos de salida de ancho variableCampos de salida de ancho variable1. #include <stdio.h>2. main()3. {4. unsigned anchura, precision;5. int numero = 256;6. double peso = 242.5;7. printf("¨Cuál es el ancho?\n");8. scanf("%d", &anchura);9. printf("El número es :%*d:\n", anchura, numero);10. printf("Ahora introduzca el ancho y la precisión:\n");11. scanf("%d %d", &anchura, &precision);12. printf("Peso = %*.*f\n", anchura, precision, peso);13. }
Ejemplo de Ejemplo de preprocesadorpreprocesador con con
buclesbucles
#include <stdio.h>#define TOPE 0.933#define ESCALA 0.6167main(){float zapato, pie;printf("Número zapato en centímetros pie\n");zapato = 30.0;while (zapato < 48.5) /* empieza bucle while */
{ /* comienzo del bloque */pie = ESCALA*zapato + TOPE;printf("%10.1f %16.2f cm.\n", zapato, pie);zapato = zapato + 1.0;
} /* final del bloque */printf("Usted sabe dónde le aprieta el zapato.\n");
}
#include <stdio.h>
main()
{
int num = 1;
while (num < 21)
{
printf("%10d %10d\n", num, num*num);
num = num + 1;
}
}
Tipo de DatosTipo de DatosTipo de dato Bits Rango
(con signo)Rango
(sin signo)char 8 ‐128 a +127 0 a 255
int 16 ‐32768 a +32767 0 a 65535
float 32 ‐3.2x10+38 a +3.2x10+38
double 64 ‐1.7x10+308
a +1.7x10+308
void 0 sin valor sin valor
operadoresoperadores
Operador Significado
+ Suma
‐ Resta
* Multiplicación
/ División
% Resto de la división
++ Incremento
‐‐ Decremento
Operadores aritméticosOperador Significado
> Mayor
>= Mayor o igual
< Menor
<= Menor o igual
== Igual
¡= Distinto
Operadores relacionales
operadoresoperadores
Operador Significado
&& AND
| | OR
¡ NOT
Operadores lógicos Operadores a nivel de bitOperador Significado
& AND
| OR
^ OR Exclusive
~ Complemento a 1
>> Desplazamiento a la derecha
<< Desplazamiento a la izquierda
Diagrama de flujoDiagrama de flujo
Desarrolla un diagrama de flujo para el siguiente problema:– Programa que pida al usuario un número de cinco dígitos, dicho
número se dividirá entre el resto de la división del número entre 2000 y se multiplicará por 8, al final al número resultante le sumaremos 2345.
– Al usuario le pediremos que introduzca el número resultante de las operaciones realizadas en el programa, informándole si el número introducido es mayor o menor que el número resultante, también contará los intentos realizados.
– Dejará realizar un máximo de 20 intentos.– Si se localiza el número resultante antes de 10 intentos, imprimirá
en pantalla el progrma “ es usted un buen matemático”– Si se localiza entre 10 y 20 intentos imprimirá el mensaje “es usted
un torpe”,– Más de 20 imprimirá “no hay más intentos”.
Estructura SWITCHEstructura SWITCH
Esta estructura se suele utilizar en los menús, de
manera que según la opción seleccionada se ejecuten una serie de sentencias.
switch (variable)
{
case contenido_variable1:
sentencias;
break;
case contenido_variable2:
sentencias;
break;
default:
sentencias;
}
/* Uso de la sentencia condicional SWITCH. */
#include <stdio.h>
main() /* Escribe el día de la semana */
{
int dia;
printf("Introduce el día: ");
scanf("%d",&dia);
switch(dia){
case 1: printf("Lunes");
break;
case 2: printf("Martes");
break;
case 3: printf("Miércoles");
break;
.
.
.
}
#define LIMITE 15
main()
{
int cont;
float suma, x;
for (suma=0.0, x=1.0, cont=1; cont <= LIMITE; cont++, x *= 2.0)
{
suma += 1.0/x;
printf("suma = %f en la etapa %d.\n", suma, cont);
}
}
/* Uso de la sentencia condicional IF. */
#include <stdio.h>
main() /* Simula una clave de acceso */
{
int usuario,clave=18276;
printf("Introduce tu clave: ");
scanf("%d",&usuario);
if (usuario==clave)
printf("Acceso permitido");
else
printf("Acceso denegado");
}
Dibuja
el
diagrama
de
flujo
/* Uso de la sentencia condicional ELSE...IF. */
#include <stdio.h>
main() /* Escribe bebé, niño o adulto */
{
int edad;
printf("Introduce tu edad: "); scanf("%d",&edad);
if (edad<1)
printf("Lo siento, te has equivocado.");
else
if (edad<3)
printf("Eres un bebé");
else
if (edad<13)
printf("Eres un niño");
else
printf("Eres adulto");
}
Dibuja el diagrama de flujo
1. main()
2. {
3. int n = 3;
4. while (n)
5. printf("%d\n", n--);
6. n = -3;
7. while (n)
8. printf("%2d\n", n++);
9. }
1. #include <stdio.h>
2. main()
3. {
4. char ch;
5. do
6. {
7. scanf("%c", &ch);
8. printf("%c", ch);
9. } while (ch != '#');
10. }
#define FILAS 6
#define CARS 6
main()
{
int fila;
char ch;
for (fila = 0; fila < FILAS; fila++)
{
for (ch = 'A'; ch < ('A' + CARS); ch++)
printf("%c", ch);
printf("\n");
}
}
1. #define FILAS 6
2. #define CARS 6
3. main()
4. {
5. int fila;
6. char ch;
7. for (fila = 0; fila < FILAS; fila++)
8. {
9. for (ch = ('A' + fila); ch < ('A' + CARS); ch++)
10. printf("%c", ch);
11. printf("\n");
12. }
13. }
#include <stdio.h>
main()
{
printf("El tipo int ocupa %d bytes.\n", sizeof(int));
printf("El tipo char ocupa %d bytes.\n", sizeof(char));
printf("El tipo long ocupa %d bytes.\n", sizeof(long));
printf("El tipo double ocupa %d bytes.\n", sizeof(double));
}
Operador sizeof
PROGRAMA 13PROGRAMA 13
LECTURA de un carLECTURA de un caráácter desde tecladocter desde tecladogetchar()
Acepta un carácter y lo imprime por pantalla.Su prototipo es: int getchar (void);Tiene el inconveniente de esperar a que se pulse la tecla de retorno para que el dato sea enviado a la computadora.
getche()Espera a pulsar una tecla y después devolver su valor. La función también hace "eco" de la tecla pulsada automáticamente en la pantalla. Su prototipo es: int getche (void);
getch()Es una variación de getche(); funciona de la misma maneraexcepto que getch() no hace "eco" de los caracteres tecleados.
LECTURA de un carLECTURA de un caráácter desde tecladocter desde teclado
kbhit()Esta función se utiliza para determinar si se ha pulsado unatecla o no. Si el usuario ha pulsado una tecla, esta función devuelve"verdadero" (distinto de 0), pero no lee el carácter. Si hay una pulsación de tecla esperando se puede utilizar una de las funciones vistas anteriormente.Si no hay pendiente ninguna pulsación de tecla,kbhit() devuelve "falso". Su prototipo es: int kbhit(void);
LECTURA de un carLECTURA de un caráácter desde tecladocter desde teclado
Un ejemplo para la utilización de kbhit() es:# include <conio.h>int tecla_pulsada, ch;main(){tecla_pulsada = kbhit();if(tecla_pulsada = =0)ch = getch;}Es muy útil cuando se quiere permitir que el usuario interrumpa unarutina sin forzar realmente al usuario a responder continuamente a unindicador como "¿continuar?".
VISUALIZACIVISUALIZACIÓÓN de un carN de un carááctercter
putchar()Esta función muestra un sólo carácter en lapantalla. Su prototipo de función es: int putchar(int ch);
clrscr()Limpia la pantalla en modo texto. Su prototipo de función es: void clrscr(void);
#include <stdio.h>
#include "jerga.h“
programa
begin
entero tuyo, mio vale
suelta("Escribe un entero\n") vale
traga("%d", &tuyo) vale
mio = tuyo por DOS vale
suelta("-%d es el doble de tu número!", mio) vale
end
/* jerga.h -- una forma estúpida de usar el preprocesador */
#define programa main()
#define begin {
#define end }
#define vale ;
#define traga scanf
#define suelta printf
#define DOS 2
#define por *
#define entero int
Se suelen utilizar como llaves de programa, enmascaramientos, criptación……..
#define NL 10
#define CR 13
#define BLANCO 32
#define ARRIBAIZQ 201
#define ARRIBADER 187
#define ABAJOIZQ 200
#define ABAJODER 188
#define LINEA 205
#define LADO 186
main()
{
int i, j, altura, anchura;
printf("Que altura de caja quiere = ");
scanf("%d", &altura);
printf("Como la quiere de ancha? =);
scanf("%d", &anchura);
putch(ARRIBAIZQ);
for (i = 0; i < (anchura - 2); i++)
putch(LINEA);
putch(ARRIBADER);
putch(NL);
putch(CR);
for (i = 0; i < altura - 2; i++)
{
putch(LADO);
for (j = 0; j < (anchura - 2); j++) {
putch(BLANCO);
} putch(LADO); putch(NL); putch(CR);
}
putch (ABAJOIZQ);
for (i = 0; i < (anchura - 2); i++)
putch(LINEA);
putch(ABAJODER);
putch(NL);
putch(CR);
}
#define ESPACIO ' '
int main(void)
{
char ch;
ch = getchar();
while (ch != '\n')
{
if (ch == ESPACIO)
putchar(ch);
else
putchar(ch + 1);
ch = getchar();
}
return 0;
}
/* convierte segundos en minutos y segundos */
#include <stdio.h>
#define SM 60 /* segundos en un minuto */
main()
{
int seg, min, resto;
printf("Convierte segundos en minutos y segundos.\n");
printf("Introduzca segundos a convertir.\n");
scanf("%d", &seg); /* se lee el numero de segundos */
min = seg / SM; /* número truncado de minutos */
resto = seg % SM; /* número de segundos de resto */
printf("%d segundos son %d minutos, %d segundos.\n", seg, min, resto);
}
#define ESCALA "Centigrados"
#define CONGELA 0
int main(void)
{
float temperatura;
int congelado = 0;
int dias = 0;
printf("Introduzca la lista de temperaturas minimas diarias.\n");
printf("Use grados %s, y pulse s para terminar.\n", ESCALA);
while (scanf("%f", &temperatura) == 1)
{
dias++;
if (temperatura < CONGELA)
congelado++;
}
if (dias != 0)
printf("%d d¡as en total: %.1f%% bajo cero.\n", dias, 100.0 * (float) congelado / dias);
if (dias == 0)
printf("-No se han introducido datos!\n");
return 0; /* programa terminado correctamente */
}
Sentencia
if
#include <stdio.h>
#define ESPACIO ' '
int main(void)
{
char ch;
while ((ch = getchar()) != '\n')
{
if (ch == ESPACIO) /* deja car cter espacio */
putchar(ch); /* sin modificar */
else
putchar(ch + 1); /* cambia los dem s caracteres */
}
return 0;
}
#define TARIFA1 5.418 /* tarifa de los primeros 240 kwh */
#define TARIFA2 7.047 /* tarifa de los siguientes 300 kwh */
#define TARIFA3 9.164 /* tarifa por encima de 540 kwh */
#define LIMITE1 240.0 /* primer bloque de tarifa */
#define LIMITE2 540.0 /* segundo bloque de tarifa */
#define BASE1 (TARIFA1 * LIMITE1)
#define BASE2 (BASE1 + (TARIFA2 * (LIMITE2 - LIMITE1)))
int main(void)
{
float kwh;
float recibo;
printf("Introduzca el gasto en kwh.\n");
scanf("%f", &kwh);
if (kwh <= LIMITE1)
recibo = TARIFA1 * kwh;
else if (kwh <= LIMITE2) /* kwh entre 240 y 540 */
recibo = BASE1 + (TARIFA2 * (kwh - LIMITE1));
else
recibo = BASE2 + (TARIFA3 * (kwh - LIMITE2));
printf("La cuenta total por %.1f kwh es %.0f pts.\n", kwh, recibo);
return 0;
}
#define NO 0
#define SI 1
main()
{
long num, div; int primo;
printf("Introduzca el numero deseado; ");
printf("pulse s para salir.\n");
while (scanf("%ld", &num) == 1)
{
for (div = 2, primo = SI; (div * div) <= num; div++)
{
if (num % div == 0)
{
if ((div * div) != num)
printf("%ld es divisible por %ld y %ld.\n", num, div,num/div);
else
printf("%ld es divisible pro %ld.\n", num, div);
primo = NO;
}
}
if (primo == SI)
printf("%ld es primo.\n", num);
printf("Introduzca otro n£mero para analizar; ");
printf("pulse s para salir.\n");
} }
Programa de aplicaciPrograma de aplicacióónn
Programa que cuente caracteres, palabras de un texto.
Se entenderá que el texto se ha terminado cuando se introduzca el carácter |
#define STOP '|'
#define SI 1
#define NO 0
main()
{
char c;
long nc = 0L;
int nl = 0, np = 0,palabra = NO;
while ((c = getchar()) != STOP)
{
nc++;
if (c == '\n')
nl++;
if (c != ' ' && c != '\n' && c != '\t' && palabra == NO)
{
palabra = SI;
np++;
}
if ((c == ' ' || c == '\n' || c == '\t') && palabra == SI)
palabra = NO;
}
printf("caracteres = %ld, palabras = %d, l¡neas = %d\n",
nc, np, nl);
}
#include <stdio.h>
#define PROFESOR “pesado y aburrido!"
main()
{
char nombre[50];
printf(“¿Cómo se llama tu profesor?\n");
scanf("%s", nombre);
printf(“%s es un tanto %s\n", nombre, PROFESOR);
}
#include <stdio.h>
#define ELOGIO "-Por Júpiter, qué gran nombre!"
main()
{
char nombre[50];
printf("¨Cómo te llamas?\n");
scanf("%s", nombre);
printf("Hola, %s. %s\n", nombre, ELOGIO);
printf("Tu nombre de %d letras ocupa %d celdas de memoria.\n", \
strlen(nombre), sizeof nombre);
printf("La frase de elogio tiene %d letras ", strlen(ELOGIO));
printf("y ocupa %d celdas de memoria.\n", sizeof ELOGIO);
}
Función strlen
PROGRAMA 14PROGRAMA 14