Páginas: [1] 2 3 4
|
 |
|
Autor
|
Tema: Curso de Programacion C (ACTUALIZADO EL 18/06/04) (Leído 17110 veces)
|
cokeing
Desconectado
Mensajes: 1.039
SôNïC r0oLz
|
PREFACIO He estado mirando por la red y hay pocos manuales o mejor dicho Cursos de C que valgan la pena y puedas sacar provecho hasta al final, la mayoria sólo te enseñan los inicios y te dejan cuando llegas a una fase en que ya puedes hacer tus programitas basicos. El objetivo de este Curso es hacer disfrutar al usuario educandole la mente y enseñandole mientras crea sus propios programas. Ademas de que quiero que se lleguen hasta temas dificiles o avanzados. Soy de los usuarios que les gusta poner nombre a los "textos", "articulos", "manuales", o cualquier cosa hecha, pero tambien me gusta que la gente colabore conmigo y asi hacer un mejor manual comprendido, asi que no me vendria mal si me propones algo, o si añadir tu propio texto. Ya sabes si alguna parte del curso te pierdes o crees que se debe explicar mas detalladamente hazmelo saber y lo extenderé. INDICE CAPITULO 1- ¿QUÉ ES LA PROGRAMACIÓN Y EL C?
- ¿ME CONVIENE UTILIZAR C?
- REQUISITOS
- UN PROGRAMA Y SU ESTRUCTURA
- INTRODUCCIÓN A LAS VARIABLES
- ¿QUE SÓN?
- TIPOS DE VARIABLES
- SINTAXIS Y EJEMPLOS
- INTRODUCCIÓN DE VALORES DESDE EL TECLADO
- OPERACIONES ARITMÉTICAS
- LAS FUNCIONES
- PRIMERA OJEADA
- PASANDO PARÁMETROS
CAPITULO 2 - AÑADIR SENTENCIA ELSE (construcción)
CAPITULO 1 - ¿QUÉ ES LA PROGRAMACIÓN Y EL C
La programación es un arte en que se ejercita la mente para cumplir unos objetivos, en los cuales, aparte de nosotros -los humanos- también lo interpretan las máquinas. La programación se basa en códigos. Un código es una serie de instrucciones que aprovecharemos para hacer nuestros programas.
- UN PROGRAMA Y SU ESTRUCTURA
Un programa es el resultado de la compilación del código anteriormente programado. Esto quiere decir lo siguiente: Primero nosotros con un editor de texto programamos el programa, escribiendo códigos, y después, el compilador lo que hace es crear un ejecutable (.exe, en caso de windows) listo para ser ejecutado (valga la redundancia xD).
La estructura de un programa hecho en lenguaje C, básicamente será esta:
*Cabezera *Declaración de funciones *Declaracion de variables globales *Main *Funciones
¿Qué es la Cabezera?
En C, la información sobre las funciones que vamos a utilizar se encuentran en varios archivos que suministra el compilador. Estos archivos terminan con una extensión .H cuya sintaxis es la siguiente:
#include <archivo.h> Las demas partes del programa ya las iremos viendo a medida que progresamos en el curso.
Vamos a crear un programa con lo que hemos aprendido hasta ahora:
#include <stdio.h> main() { printf("Hola Mundo!"); } Como ya te abras dado cuenta, printf() imprime en pantalla la cadena de caracteres que le ponemos entre " ". Antes de eso hemos visto este segmento que quizás está sonado un poco raro:
main() { Esta es la parte principal de nuestro programa, donde nosotros podremos interaccionar con la máquina escribiendo nuestras funciones, etc. Cuando hayamos acabado, cerramos el main con un:
}
- INTRODUCCIÓN A LAS VARIABLES
- ¿QUÉ SON?
Las variables son posiciones en la memoria donde se guarda un dato, pero para que no te líes imagina una variable como una cajita ^.^ Si por ejemplo queremos que esa cajita contenga un 5 haremos lo siguiente:
variable = 5;
- TIPOS DE VARIABLES
Antes de empezar, hace falta definir y matizar entre dos clases de variables: globales cuando sirven para todo el programa, o locales cuando están dentro de una función, por ejemplo: main() Hay varios tipos de variables y cada uno sirve para una cosa distinta. Por ejemplo: no podemos poner una A en una variable numérica.
CHAR tiene 8 bits (1 byte) de longitud y se utiliza normalmente para guardar un sólo carácter. Ejemplo:
variable = "a"; INT puede contener números enteros. Una variable entera puede contener rangos desde -32.768 a 32.767. Ejemplo:
variable = -5; FLOAT contiene valores con punto flotante, que pueden tener componentes fraccionarios. Ejemplo:
variable = 175.32 DOUBLE es como el Float pero con mucha mayor capacidad. Ejemplo:
variable = 1544175871871871547.2454145641841 ....
- SINTAXIS Y EJEMPLOS
Para que el programa sepa que una variable existe y además, para que sepa de qué tipo es, se tiene que declarar. Ejemplo:
tipo nombre_de_la_variable; Hagamos un programa con una variable:
#include <stdio.h> main(){ int var; var = 5;
printf("%d",var); } Aquí tenemos otra función nueva, el printf(); Está "raro", vamos a explicarlo: si queremos imprimir en pantalla una variable, en el printf() tendremos que poner lo siguiente:
%d <--- para los enteros (INT) %c <--- para los caracteres (CHAR) %f <--- para los puntos flotantes (FLOAD) %f <--- para los puntos flotantes dobles (DOUBLE)
todo esto entre: “ “, seguido del nombre de la variable. En caso de querer imprimir más de una variable, sus nombres se separan por coma (esto también sirve en la declaración de variables). Ejemplo:
#include <stdio.h> main() { int var; float var2, var3;
var = 5; var2 = 3.2; var3 = var + var2; printf("La suma es: %d + %f = %f",var, var2, var3); }
Esto imprimirá en pantalla: La suma es: 5 + 3.2 = 8.2
- INTRODUCCIÓN DE VALORES DESDE EL TECLADO
Los humanos tenemos necesidad de interaccionar con el mundo mediante (basicamente) los ojos, las orejas, y la boca. Un programa tambien. Hasta ahora solo le hemos dejado hablar, despues de la lección ya podrá mirar ^.^
scanf(); es una funcion que permite recojer datos del exterior del programa, que el usuario introducirá, esos datos iran a parar a una variable, veamos un ejemplo:
main() { int num; printf("Porfavor Introduce un numero del 1 al 10"); scanf("%d",&num); printf("\n El numero elejido es: %d",num); }
Aqui vemos como declaramos una variable de contenido entero (integer), y despues viene el scanf(): El & es el operador de indirección. Eso significa que si tienes la variable var, &var es la direccion de memoria donde está alojada la variable.
El caso es que scanf recibe punteros (direcciones de memoria) como parámetro, así que eso es lo que tiene que recibir, por lo que se usa el operador &, excepto,claro está, en variables que ya sean direcciones de memoria, com punteros o arrays (el nombre de un array es la dirección de memoria de su primer elemento) Por eso se hace esto:
int var1; char * var2 [10];
scanf ("%d", &var1); scanf ("%s", var2); Esto se hace porque C no admite llamadas por referencia, son todas por valor, por lo que se simulan usando punteros.
Como vemos utilizamos %d, eso es porque lo que queremos extraer es un numero, si hubiesemos querido introducir un caracterer, hubiesemos tenido que poner %c.
Tambien nos fijamos que el printf() tenemos una cosa nueva, el \n es un retorno de carro, asi el programa no nos queda todo junto.
Veamos un ejemplo:
#include <stdio.h>
main() { int num; float f;
printf("Introduzca un entero: "); scanf("%d",&num);
printf("Introduzca un numero en punto flotante: "); scanf("%f",&f);
printf("%d y %f",num,f); }
- OPERACIONES ARITMÉTICAS
C utiliza unas expresiones que siguen las reglas del álgebra, por lo que la mayoria les serán familiares. En esta sección sólo se verán las expresiones aritméticas.
+ ... suma - ... resta * ... multiplicación / ... división % ... módulo Los operadores +,-,*,/ se pueden utilizar con cualquier tipo de datos, sin embargo % solo se podrá usar con tipos enteros. Recordamos que el módulo devuelve el resto de una división entera. Ejemplo:
#include <stdio.h> main() { printf("%d", 5/2); printf(" %d, 5%2); printf(" %d, 4*2); printf(" %d, 4%2); }
Esto mostrará en pantalla: 2 1 8 0
- LAS FUNCIONES
- PRIMERA OJEADA
Cuando estamos aprendiendo C es normal que hagamos pequeños programas en que la estructura es muy clara, pero a medida que vayamos aprendiendo las cosas se van complicando y el programa se va haciendo mas largo, si soltamos todo el codigo de una parrafada nos puede ser algo costoso se entender.
Por eso se han creado las funciones, para ayudar al programador a hacer los programas. Podemos imaginarnos las funciones como pequeños subprogramas dentro del programa principal (main). Dentro de las funciones se declaran sus propias variables, que solo se podrán utilizar dentro de esa función.
Tenemos un ejemplo:
#include <stdio.h>
void prueba(void);
void main(void) { int variable1; char variable2;
printf("Esto es la funcion main(), el 'programa principal'\n"); prueba(); }
void prueba(void) { int x=5; printf("El numero asignado a la variable x es: %d",x); }
Como ya os habreis fijado, las funciones que creamos nosotros se tienen que declarar antes de que se ejecute el main(). Es inportante llamar la función desde el programa principal (main) ya que si no el programa no entraria en nuestra funcion.
Tambien podemos llamar a una tercera (y cuarta, y quinta...) funcion desde dentro de las funciones o desde el main, vamos a dar un ejemplo:
#include <stdio.h>
void funcion1(void); void funcion2(void);
void main(void) { int x=1; printf("Aquí se imprime la %da parte del programa\n",x); funcion1(); }
void funcion1(void) { int x=2; printf("Aqui se imprime la %da parte del programa\n",x);
funcion2(); }
void funcion2(void) { int x=3; printf("Aqui se imprime la %da parte del programa",x); }
- PASANDO PARÁMETROS
Hemos visto ya como trabajan las funciones, más o menos como programas independientes cada una, pero nos puede ser de utilidad (mas de lo que ahora os penseis) intercambiar variables de funciones, tenemos dos maneras de conseguir esto:
* Usando Variables Globales para que nos sirvan para todas las funciones. * Pasando Parámetros entre funciones y así poder compartirlas.
No es nada dificil hacer esto, pero antes tengo que dar un poco de teoria. Cuando declaramos una función estamos acostumbrados a poner:
void nombre_funcion(void) pero no sabemos para que sirven los "void"s verdad? La declaración básica de una funcion es asi:
parámetros_de_salida nombre_funcion(parámetros_de_entrada) más o menos estais atando cabos? sigo... los parámetros de salida pondré la (solo una) variable que quiero que se retorne cuando use return(). y los parámetros de entrada pondremos la/las variables que quiero usar y que me envian desde otras funciones:
#include <stdio.h>
int funcion1(int x); int main(void) { int x=5; int y; printf("Ahora en 'x' tengo el numero: %d.\n",x);
y=funcion1(x); printf("Ahora en 'y' tengo el numero: %d.",y);
return 0; }
int funcion1(int x) { x=x+3; return x; }
Las cosas se complican poco a poco. Analizemos el codigo:
y=funcion1(x); lo que hace esto es llamar a la funcion1 y pasarle la variable x, y que el valor de retorno se almacene en y.
return 0; debemos de saber que la funcion main() al final del programa se tiene que devolver un 0, para decirle que todo ha ido bien, sin problemas, aunque no es obligatorio hacerlo, es recomendado.
int funcion1(int x) { x=x+3; return x; } Recojo x de la otra funcion, por tanto ni lo declaro en esta.. Le sumo 3 a su valor inicial y envio el valor de return.
CAPITULO 2 - SENTENCIA IF
La funcion IF es un condicionante, eso quiere decir que nos permite una eleccion. Por ejemplo:
* Si la variable a < 5, printa la variable a.
esto en codigo C seria:
if (a<5) printf("%d\n",a); Una vez visto lo sencillo que es utilizar el if, veremos como anidarlos, eso quiere decir que es una serie de if enlazados, veamos un ejemplo:
if ( x>1 ) { if ( x<10 ) printf(" 'x' esta entre el 2 y el 9\n"); if ( x>9 ) printf(" 'x' es mas grande que 9\n"); } Podemos ver que si el primer IF no se cumple, los demas no van a ser ejecutados, en cambio si el segundo IF no se cumple se ejecutara el tercer IF.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Feliz Programación saludos.cokeing
Colaboradores del curso -Bullhack -[ZiRuS] -
[EDIT 11/06/04] He decidido retomar el curso de programación, espero que pueda hacer un buen trozo más ^^.
|
|
|
|
« Última modificación: 18 Junio 2004, 18:40 por cokeing »
|
En línea
|
|
|
|
m4rc14n0sk4t3
Desconectado
Mensajes: 5
|
con scanf siempre se manda la variable por referencia???
|
|
|
|
|
En línea
|
SKATE ALL DAY ................................... ...........................DRINK ALL NIGHT!!!!!!
|
|
|
cokeing
Desconectado
Mensajes: 1.039
SôNïC r0oLz
|
como?
|
|
|
|
|
En línea
|
|
|
|
zheo
Desconectado
Mensajes: 707
|
El & no significa referencia, es el operador de dirección. Eso significa que si tienes la variable var, &var es la direccion de memoria donde está alojada la variable. El caso es que scanf recibe punteros (direcciones de memoria) como parámetro, así que eso es lo que tiene que recibir, por lo que se usa el operador &, excepto,claro está, en variables que ya sean direcciones de memoria, com punteros o arrays (el nombre de un array es la dirección de memoria de su primer elemento) Por eso se hace esto: int var1; char * var2 [10];
scanf ("%d", &var1); scanf ("%s", var2); Esto se hace porque C no admite llamadas por referencia, son todas por valor, por lo que se simulan usando punteros. Lo explico mejor aqui: http://www.hispabyte.com/foro/index.php?act=ST&f=23&t=13174&s=9595ed3973460506c82c261042ce0c27Un saludo. Editado: el & es el operador de dirección y no de indirección como decia (ya está corregido)
|
|
|
|
« Última modificación: 09 Diciembre 2003, 13:49 por zheo »
|
En línea
|
|
|
|
|
Ragnarok
|
es la primera vez que oigo hablar del medio nivel, ¿podrías decirme algún ejemplo de lenguaje de medio nivel? variable = "a"; creo que esto no es un caracter sino un string, si no me equivoco para que sea un carácter tendría que ser: variable = 'a';
|
|
|
|
|
En línea
|
|
|
|
cokeing
Desconectado
Mensajes: 1.039
SôNïC r0oLz
|
digo medio nivel porque mucha gente piensa que es de "alto nivel" y tiene razon, y mucha gente dice "bajo nivel" y sigue teniendo razon, por eso lo pongo como medio nivel.
|
|
|
|
|
En línea
|
|
|
|
zheo
Desconectado
Mensajes: 707
|
Ragnarok, estas en lo correcto, no es lo mismo "a" que 'a' 'a' es el número asociado al carácter "a" es una cadena de caracteres (que incluye un '\0' al final)
Un saludo.
|
|
|
|
« Última modificación: 02 Junio 2004, 02:21 por zheo »
|
En línea
|
|
|
|
ToXiC
Desconectado
Mensajes: 122
Biohazard
|
porq el curso no sige asta terminar?? cokeing: dices k ai cursos q te dejan por la mitad y mira este..weno esta bien pero sigan asta terminarlo asta yegar a sockets..un salu2
|
|
|
|
|
En línea
|
Firma
|
|
|
buentipo_cc
Desconectado
Mensajes: 97
¡Amo YaBB SE!
|
Por que en este ejemplo : #include <stdio.h>
main() { int num; float f;
printf("Introduzca un entero: "); scanf("%d",&num);
printf("Introduzca un numero en punto flotante: "); scanf("%f",&f);
printf("%d y %f",num,f); }
Me pide que coloque un nº entero y despues uno flotante pero en el flotante en vez de aparecer por ejemplo:
1 y 2.4
Me aparece asi 1 y 2.400000
Por que es?
Salu2!
|
|
|
|
|
En línea
|
|
|
|
ToXiC
Desconectado
Mensajes: 122
Biohazard
|
eso tb me paso ami, creo k mi respuesta sera correcta pero sino es asi pos corrijan. te sale 2,40000.. porq en decimales dspeus d la coma puede yevar to2 los ceros k sean da igual vale lo mismo, es lo mismo 1,1 q 1,1000 || un salu2
|
|
|
|
|
En línea
|
Firma
|
|
|
buentipo_cc
Desconectado
Mensajes: 97
¡Amo YaBB SE!
|
Ok gracias por la respuesta, pero aunque sea lo mismo por lo que he eschudo tambien se puede dejar como tiene que ser sin los "0" pero como se hace no se y por eso como alguien no va a saber por fa.
Salu2! ???
|
|
|
|
|
En línea
|
|
|
|
AnKeR
Desconectado
Mensajes: 123
printk("\n%s\n","Kernel Panic");
|
Buenas... Eso es porque el printf saca por defecto 6 decimales cuando saca un float. Para modificar esto, lo que hay que hacerle es pasarle un argumento para que sólamente saque los decimales que queramos al printf: printf("%d y %.1f",num,f); de esta manera siempre sacará solamente 1 decimal (aunque tenga más --cuidado--) El printf también tiene muchas más posibilidades: http://www.cplusplus.com/ref/cstdio/printf.htmlSalu2o3
|
|
|
|
|
En línea
|
|
|
|
¤ Nerviozzo ¤
Desconectado
Mensajes: 3.960
[*_*]RAP SOLO[*_*]
|
No me he enterado de nada  haber si con unos añitos aprendo mas y mejor 
|
|
|
|
|
En línea
|
|
|
|
midnight
Desconectado
Mensajes: 25
|
Yo tambien opino que le falta demasiado al curso pero esta bien explicado y creo que eso es bueno pero mi pregunta es: Que hay con las funciones que se definen antes del main () si me podrian explicar (por que van antes del main (), se que hay de tipo void que no regresan ningun valor y y las otras que ocupan un return por que regresan un valor. Pero a decir verdad no le entiendo). Si me lo puedes explicar o alguna otra persona se los agradezco. :::::::saludos::::::: 
|
|
|
|
|
En línea
|
|
|
|
Ossisaverni
Desconectado
Mensajes: 55
|
El codigo de un programa en C se ejecuta de forma secuencial, esto es, desde arriba hasta abajo. Si creas una funcion pero la colocas debajo del main, ocurrira que cuando desde el main intenta ejecutarla pensara que no existe (ya que hasta que no llegase hasta abajo no se daria cuenta de su existencia) Por esto, en la parte superior y antes de utilizar el main declaramos las funciones, decimos de que tipo son y que devuelven. Asi el compilador cuando llega a la parte de declaraciones importa el codigo que esta mas abajo y al usar el main ya tiene constancia y puede usar dichas funciones. Otro punto. Funciones que devuelven y akellas que no retornan valor. Pondre un ejemplo de como usarias cada una de ellas: Tenemos un programa que va a sumar dos numeros y usara una funcion que devolvera el resultado de la suma: #include <stdio.h>
int suma(int a,int b);
main() { int num1,num2,resultado;
printf("Introduzca numero1: "); scanf("%d",&num1);
printf("Introduzca numero2: "); scanf("%f",&num2);
resultado=suma(num1,num2);
printf("%d",resultado); }
int suma(int a,int b){ return a + b; }
En este ejemplo usamos una funcion suma que devuelve un valor de tipo entero y cuyos parametros son dos enteros. Como se puede ver tenemos que declarar la funcion poniendo que tipo de valor retorna y usar el return para devolver el valor. Tb es importante observar que necesitamos una variable para recoger el valor devuelto por la funcion. Veamos el mismo ejemplo utilizando una funcion que no retorna ningun valor: #include <stdio.h>
void suma(int a,int b);
main() { int num1,num2;
printf("Introduzca numero1: "); scanf("%d",&num1);
printf("Introduzca numero2: "); scanf("%f",&num2);
suma(num1,num2); }
void suma(int a,int b){ int resultado; resultado = a + b; printf("%d",resultado); }
En esta ocasion declaramos la funcion de tipo void, ya que no va a retornar ningun valor. Vemos como en el main ya no necesitamos una variable que recoja el valor, ya que dicha funcion no retorna nada. La diferencia entre ambas seria su ejecucion: Funcion que retorna: main -> funcion suma -> main -> fin Funcion que no retorna: main -> funcion suma -> fin Espero haber aclarado alguna duda Un saludo
|
|
|
|
|
En línea
|
Im from Norrath but sometimes travel around the Real Land
|
|
|
|
Páginas: [1] 2 3 4
|
|
|
|