Buenas, comenzamos el tutorial de C, me voy a dejar mucho en el tintero pero intentare que sea lo mas completo posible para empezar a trabajar desde cero. Si ya sabes de programacion aqui no encontraras nada que puedas necesitar, y si meto mucho la pata antes de degollarme decidmelo, lo corrigo y aqui no ha pasado nada.
Lo primero: C es un lenguaje de programacion complejo, y lo es tanto por sus posibilidades como por sus limitaciones a la hora de poner identificadores(nombres) en sus origenes.
En vez de poner StringCompare en C se llama strcmp puesto que en C ANSI solo son significativos los 6 primeros caracteres, osea que StringCompare y StringContainer seria lo mismo pues son identicas para el.
Esto es una traba al principio pero acostumbrarse no cuesta tanto y menos aun despues de los lenguajes SMS.
Reconoce Mayusculas y minusculas asi que ab,Ab,aB,AB son cuatro cosas diferentes. De esto se derivan muchos fallos al principio hasta acostumbrarse. Existe una cosa llamada notacion. Esta nos da unas reglas para nombrar las variables y funciones de nuestro programa. Cada palo que aguante su vela y que cada cual elija la suya. Si quiereis saber mas de estas cosas buscad leyes de construccion de programas. (Es una mierda al principio pero cuando sepais programar va bien).
Tambien existen palabras que no podemos usar en nuestros nombres pues son palabras reservadas de C y son:
auto double int struct break else long switch case enum
register typedef char extern return union const float short
unsigned continue for signed void default goto sizeof volatile do if static while
Para comentar una linea (poner un texto que no es compilado explicando el codigo fuente) tenemos dos formas
// Una linea
/*
Pudiendo ocupar varias lineas
Se cierra con la secuencia */
Las constantes simbolicas son una serie de datos que se definen y en el preprocesador se sustituyen por su valor.
#define PI 3.14159
En las partes que hayamos escrito PI en la precompilacion se sustituiran por el valor numerico.
Todas las lineas acaban con punto y coma ; excepto:
Instrucciones al preprocesador (el #define #include...)
Funciones ( que no llevan ; ni en su apertura ni en su cierre, pero si dentro de ellas)
La enumeraciones aunque las coloquemos en varias lineas realmente solo ocupan una linea y se cierran con ;
Si no ponemos el ; el compilador cree que la instruccion continua en la linea siguiente creando una serie de errores rarisimos (no dice que falte ; sino cualquier otra cosa)
Bueno espero que esta introduccion os sirva para algo , aunque sin mas conocimientos no sirve para nada. Comenzamos.
Las variables.[size=80]Tipos de datos[/size] En todo programa nosotros necesitamos almacenar datos. Unos seran constantes pero otros de ellos seran variables.
Una variable en programacion es un espacio de memoria definido. Hay diferentes tipos y cada una de ellas ocupa una cantidad fija de bits, a su vez tambien, cada una de ellas es tratada de diferente manera. Las podemos encajar en dos grupos, primitivas y derivadas (de momento esto nada que ver con las matematicas).
Primitivos: son los tipos de datos que se nos proporciona para empezar a trabajar.
Derivados: son aquellos que se forman de uno o mas tipos primitivos y/o modificando su comportamiento.
Primitivos Para poder desarrollar debemos conocer los diferentes tipos para usar el adecuado en cada momento.
Enteros (con paso de 1, asi que no pueden almacenar decimales) 8 bits = 1 byte numericos long(largo,entero): longitud 32 bits, almacena datos en un rango de 0<>2^32 sin signo y 2^16-1 <> -(2^16) con signo.
int (integer,entero): longitud 32 bits, almacena datos en un rango de 0<>2^32 sin signo y 2^16-1 <> -(2^16) con signo.
short(¿corto?,entero): longitud 16 bits, almacena datos en un rango de 0<> 2^16 sin signo y 2^8-1 <> -(2^8) con signo.
enum(enumeracion,entero con claves): la enumeracion es un tipo de dato que contiene valores numericos y claves alfanumericas.
El tipo de datos long es segun que sistemas puede ocupar 64 bits (ps2) ocupando asi en memoria el doble. Gracias a hermes por las correciones. alfanumericos char(caracter,entero): longitud 8*numchar + 8 de final de cadena bits. Almacena el valor de un caracter.Vease literales
numchar=numero de caracteres asignados a la varible Ejemplos
signed long a = 10; //Si el valor que le demos va a ser pequeño, es un gasto innecesario de memoria usar este tipo (mas en concreto el doble)
unsigned long a=123456; //Este si que seria un valor para usar en este tipo
signed short b = -257; //MECC!!!! ERROR acabamos de producir un desbordamiento
unsigned short b = 255 //Perfecto pero si sube uno mas provocara un desbordamiento
signed int c= -32764 //Al limite otra vez, pero fijese que si le cambiamos el signo si que producimos un desbordamiento
unsigned int c = 13 //Lo mismo que el ejemplo
enum Color { rojo,azul,amarillo=0}; //Mas abajo explico la enumeracion
char vocal='a'; //Las comillas simples son para caracteres sueltos, esto es un literal
char vocal=97; //97 es el valor ASCII de la a
char nombre="Carlos"; //Las palabras compuestas de mas de una letra se encierran entre comillas dobles, y esto tambien es un literal
Reales (con capacidad de almacenar decimales, numeros en formato cientifico 123E-05)
float(coma flotante,real): longitud 32 bits destinados a 1 bit signo 23 bits mantisa (123) 8 bits exponente (E-05) Los valores se almacenan con una precision maxima de 7 digitos rango maximo 10^56.
double(doble,real): longitud 64 bits destinados a 1 bit signo 52 bits mantisa y 11 bits exponente. Precision maxima 16 digitos, rango maximo 10^176
Ejemplos:
float a = 1.234F; //La F indica que el numero asignado es Float (obligatorio)
float a = 2.5e+5F; //asignado en notacion cientifica 2.5*10^5
double b = 1.234; //Sin necesidad de una letra para indicar tipo
double b = 2.5e-5 // 2.5 * (1/10)^5 = 0,000025
Enum Voy a hacer un desarrollo sobre las enumeraciones pues es conveniente.
Son tipos de datos enteros creados para acercar la tarea de programar al lenguaje humano. Nosotros definimos unos nombres y de forma explicita o implicita se le asigna un valor numerico a cada uno de ellos. Para entenderlo unos ejemplos
#include
#include
enum Color{
Rojo, /* valor 0*/
Azul,
Verde, /* valor 2*/
Amarillo=0, /*Valor 0 y reseteo el contador*/
Marron, /*valor 1*/
};
void main(){
enum Color color; //Se declara la variable que contendra el valor
printf ("Color preferido: "); //Se muestra en pantalla el mensaje entre ""
scanf ("%d", &color); //Se introduce en color lo que hayamos escrito con el teclado...¿¿¿&??? jejej mas adelante no quieras correr
printf ("%d\n", color); /*Se muestra lo que hemos escrito...pero que pasa...me saca un numero....esto es normal pues el nombre es la clave y el valor el contenido REAL*/
getch(); //Espera a que se pulse una tecla (por si acaso para que no se cierrre el programa sin ver la salida)
}
Char En este tipo tambien hay que detenerse.
Aunque ocupa poca memoria, esto es solo para un caracter. Si introducimos mas de un caracter, se crea una matriz de ellos

dejemoslo en que se declaran tantos char como caracteres hay en el texto introducido(las matrices vendran proximamente). Las cadenas tienen un caracter especial para indicar el final de la cadena: \n. Pero tambien existen modificadores para la cadena:
\n tambien es salto de linea
\t tabulardor horizontal
\v tabulador vertical (solo impresora)
\b Retroceso (backspace)
\r Vuelve al principio de linea
\f Alimentacion de pagina (solo impresora)
\a Alerta,pitido
\' comilla simple
\" comilla doble
\\ barra inversa
\ddd Caracter ASCII. Representacion octal (d es un digito del 0 al 7)
\xdd Caracter ASCII Representacion hexadecimal (d es un digito de 0 a 9 y de A a F. Gracias a JVF por la correcion.
Ejemplo
char a = "Te digo "trigo" por no decirte "Rodrigo"" // La salida sera: Te digo "trigo" por no decirte "Rodrigo"
Derivados Son tipos creados a partir de primitivos, en el capitulo de arrays los veremos y en las sobrecargas les daremos su verdadera importancia.
Sinonimos Se usa para facilitarnos la vida a la hora de entender un programa asi como programarlo. Se usa la palbra reservada tipedef
Ejemplo
typedef int entero;
typedef unsigned long ulong;
Constantes En un programa puede que tengamos algun valor que se repita siempre, entonces podemos declararlo como contante. Sera invariable a lo largo de todo el programa.El mejor ejemplo es pi:
const float pi=31415927E-6F;
Literales
Son tipos de datos de un tipo primitivo 1, 3 ,5 o "hola" son literales.Pueden ser un numero, un caracter o una cadena de caracteres.
Si el literal es decimal y no tiene sufijo, su tipo es el primero de int , long o unsigned long en el que quepa.
Podemos modificalor poniendo los sufijos
L long
UL unsigned long
U unsigned int
F float
Las cadenas de caracteres van encerradas entre comillas para que a la hora de compilarlo se sepa que son caracteres y no variables ni nombre de funciones etc....
Un caracter suelto se puede encerrar entre comillas simples (las de al lado del cero del teclado)
Conversion de tipos
Cuando vamos a asignar valores a una variable habra veces que no tengamos que indicar el tipo de valor, esto se llama conversion implicita (osea que no tenemos que hacer nada) pero habra veces que no se nos permita hacer esto entonces deberemos usar el CAST
Cast
Es una forma de hacer conversiones de un tipo a otro, es muy facil de usar y no deberia dar lugar a errores. Se usa asi
tipo nombre=(tipo)valor;
Ejemplos:
int a = 100;
int b = a;
float c =(float)a;
double d= (double)(a*b);
double d =(double)a * (double)b;
Bueno llegamos al final de este capitulo dedicado a las variables, espero no haber metido mucho la pata (hace mucho que no uso c) y se que este capitulo no tiene utilidad a priori pero es que los comienzos son un poco lentos.