C

Proceso de compilación

Compila → Enlaza → Programa.exe


Algoritmo

Siempre el algoritmo tiene que estar en dentro de:

int main(){

}

Printf(”Hello world”);

Sirve para que el programa escriba en la terminal “Hello world”

Necesitas la librería #include <stdio.h>

Salto de linea

\n

Tabular

\t

Representar variables

printf("%d", a);

imprime decimal y se almacena en a

Que no se cierre una pantalla hasta que pulses una tecla

getchar();

Que se puedan representar ñ y tildes

#include <windows.h>
int main ()
{
    SetConsoleCP(1252);
    SetConsoleOutputCP(1252);
    return 0;
}

Scanf(”%d”,&a)

Scanf("%d",&a)

Dice que será decimal y se almacena en a

Limpiar el buffer

while(getchar() != '\n');

Comprobar que lo que estas metiendo es valido

do{
printf("Escriba su velocidad en Km/h: ");
    resul=scanf("%f", &velocidad);
    
    while(getchar() != '\n');

}while (resul != 1 || velocidad > 0);


Punteros

El puntero es una variable que apunta al valor de otra

*

Cuando pones el asterisco haces que la variable sea un puntero

&

En vez de dar la variable da su dirección de memoria

Variables

Hacer variables globales

Declarar la variable fuera de cualquier función o acción

Hacer variables ocultas

Cuando vuelves a crear una variable la cual era global dentro de una acción o función

= …;

Al usar un igual a la d derecha de una variable haces que lo que esté a su derecha sea su nuevo valor

int

Es para usar números enteros , ocupa 4 bytes

No puede empezar con números

Para octal prefijo 0 y hex prefijo 0x

int a;

Para llamarlo: %d o %i

%o para octal y %x para hexadecimal

float

Es para usar números decimales

Un número no es decimal si no tiene 2.0

float a;

Para llamarlo: %f

double

Para llamarlo: %lf o %g para notación científica

IEEE 754 de doble precisión

Short

Hace que la variable sea de 2 bytes

long

Para llamar a un long double %Lf

Los bytes serán 4*n, n es la cantidad de veces que repites el long

string

Es para usar caracteres

Necesitas la librería #include <string.h>

Y con la librería y strcpy(palabra1,palabra2); Copia uno a otro

Hay que tener cuidado pues al declararla tiene una longitud determinada que hay que tener cuidado con no sobrepasarla.

Se llama con %s

char

Se usa entre ‘____’

Para decir cuantos caracteres quieres tienes que poner [x] al final char nombre[10]; , puedes escribir letras y al final te pone 0

char a;

Para llamarlo: %c y %s para cadenas de caracteres

Variables Dinámicas

malloc

calloc

realloc

Liberarlas free(variable);44

Constantes (ejs)

const int N = 10;

const int Distancia = int('a') -int('A');

Cambiar tipo de variable

Hacerla mas compleja se llama Promocionar

int → float → double

Hacerla más sencilla se llama Reducir

double → float → int

Conversión implícita

int a;
int c;
float b;
b=a; //conversión implícita
float a = 2; //conversión implícita
a=3.5;   //conversión implícita

Conversión explícita

Especificas a que se transforma

int a;
int c;
float b;
b= (int) a; //conversión explícita
a= (int) 3.5;   //conversión explícita
float a = 2; //conversión implícita

Tipos de Variables

Struct

Es una variable que dentro de ella hay varias, en este caso hemos hecho la variable punto que tiene abscisas y ordenadas, definimos como se va a llamar este tipo de productos y como lo vamos a llamar (con P)

#include <stdio.h>

struct Punto {
    float x;
    float y;
};

int main() {
    struct Punto punto1 = {3.5, 7.2};
    
    printf("Coordenadas del punto: (%.1f, %.1f)\n", punto1.x, punto1.y);

    return 0;
}

Typedef

#include <stdio.h>

typedef struct Punto{ //pongo aqui punto para poder hacer struct punto;
    float x;
    float y;
} Punto; //que no se te olvide el final

int main() {
    Punto punto1 = {3.5, 7.2};
    
    printf("Coordenadas del punto: (%.1f, %.1f)\n", punto1.x, punto1.y);

    return 0;
}

Con este lo haces lo mismo pero a la hora de poner la variable no tienes que poner el struct

Variables dinamicas

Como se declaran??

#include <stdlib.h>
int main(){
char *l = malloc(sizeof(char))
}

Tablas

Una dimensión

typedef float Vector[NColumnas];

Puedes también crear variables las cuales son Arrays

#include <stdio.h>

int main() {
    // Declaración e inicialización de un array de enteros
    int numeros[5] = {10, 20, 30, 40, 50};

    // Imprimir los valores del array
    printf("Los valores del array son:\n");
    for (int i = 0; i < 5; i++) {
        printf("numeros[%d] = %d\n", i, numeros[i]);
    }

    return 0;
}

Para hacer una llamada a la tabla tienes que poner la columna que deseas entre corchetes y a la izquierda el nombre de la tabla, t[i] , aquí definimos una variable para que elijamos la columna

Multidimensional

typedef int Matriz[NFilas][NColumnas];

Es igual pero para llamar usamos tabla[i][j]

//inicializar la tabla
Tipo_Tabla miTabla = {
{12, 20, 16, 18, 21, 22, 18, 11, 12, 15},
{14, 13, 9, 8, 20, 92, 13, 10, 21, 17},
{15, 20, 26, 28, 21, 23, 28, 31, 26, 25},
{22, 25, 36, 38, 41, 49, 58, 61, 62, 75},
{13, 83, 26, 88, 23, 32, 81, 51, 42, 83},
{11, 02, 16, 48, 31, 95, 58, 41, 33, 22},
{14, 24, 46, 14, 41, 24, 48, 51, 15, 55},
{15, 50, 66, 78, 11, 92, 8, 13, 22, 25},
}; // ponemos cada fila entre llaves y unas llaves para toda la tabla

Randomizar una tabla

int main() {
Temperaturas t;
int i,j;
for(i=0;i<NANYO;i++){
for(j=0;j<NDIA;j++){
t[i][j] = rand()%21+20;
cout << t[i][j] << " | ";
}
cout << endl;
}

Contar


Operadores

Suma y Resta ( +,  - )

Si los números son enteros el resultado será entero, alguno es real será real el resultado.

Multiplicación ( * )

Si los números son enteros el resultado será entero, alguno es real será real el resultado.

DIV ( / )

Devuelve el resultado de la división sin decimales de una división

MOD ( % )

Devuelve el resto de la división

División normal ( / )

Te devuelve números reales

<> = ≤ ≥ ≠

Devuelve booleanos es decir verdadero o falso

Sucesor y Predecesor

Sucesor (+1) i++

Predecesor (-1) i--

Operadores complejos

Redondeo

Hay que poner al principio: #include <cmath>

floor(4.7) = 4.0

Pow (elevar a algo)

Hay que poner al principio: #include <cmath>

Despues pones: pow(base, a_lo_que_elevas);

Sqr (elevar al cuadrado)

Hay que poner al principio: #include <cmath>

Despues pones: sqr(base, a_lo_que_elevas);

Sqrt (raiz cuadrada)

Hay que poner al principio: #include <cmath>

Despues pones: sqrt(base, a_lo_que_elevas);


Análisis de casos

Operadores lógicos

Y = “&&”

Igual = “==”

O = “||”

If

Sirve para que cuando pase algo la maquina haga otra cosa

if (cond) {
S
}

Else

Es complementario del if, cuando no se produce el if se reproduce el else

if (cond) {
S	
}	 else {
R	
}	

Switch

El switch sirve para elegir entre muchos casos

No se puede usar operadores lógicos

El default es muy importante pues es lo que hará si no le damos ningún input que requiera para darnos algo en especifico

Si no pones el break se ejecutarán todos los de debajo del caso que tu elijas, es decir si digo “B” me dirá lo que dice del B del C y el dafault

switch (PermisoConducir) {
case 'A':
cout << "Motocicletas y triciclos de motor";
break;
case 'B' :
cout << "Automóviles masa máxima autorizada <= 3500 kg";
break;
case 'C' :
cout << " Automóviles masa máxima autorizada > 3500 kg ";
break;
default :
cout << "No contemplado";
break;
}


Bucles

Si solo tienen una orden no hace falta poner llaves

Break

Se usa para para un bucle

Se puede usar

If (cond) break;

o

Break;

While

Se produce mientras la condición se cumpla, la condición se actualiza al principio, no al final

while (cond) {
S;
}

Do while

Hacer mientras: la comprobación se hace al final

int numero;
do
{

    ...

} while(numero <= 100); //comprueba al final

for

Esto es realmente un while donde al principio decimos cuanto vale i, despues le decimos que mientras i sea menos o igual que b se siga ejecutando y por ultimo le decimos cuanto va a ir subiedo que va a ser uno por uno

for (i = a; i<=b; i++){
	S;
}

Esto es lo mismo que:

i=a;
while (i<= b){
S;
i++;
}


Funciones

Hay variables de entrada y uno de salida

Lo que quieres que salga es lo que va después del return

Las funciones pueden devolver solo una variable y no la devuelven de vuelta como tal, simplemente haces que se produzca una operación entonces si quieres guardarte el resultado de una función en una variable tendrás que poner: max = Max2(500,200);

Si ponemos * en la función en vez de que sea solo un nombre y despues al llamarla tambien le ponemos un & al lado de la variable(&) la variable cambia dentro de la funcion y fuera

int sumar(int a, int b) {
    return a + b;
}
resultado = sumar(num1, num2);

Crear variables que se inicializan una vez

static int cuenta = 0;


Acciones

Se representan con un void "nombre"(variables){… }

Se declara encima de main

Si pones * puedes que hacer que sea de entrada y salida o solo salida. Tiene que llevarlo durante toda la acción

En la variable donde sale tiene que llevar &

void BinDec (int b1, int b2, int b3, int b4, int *dec)
{
*dec = b1*1 + b2*2 + b3*4 + b4*8;
}
BinDec (a1, a2, a1, a2, &decimal1);

Si pones void en vez de variables lo que haces es que solo sea un procedimiento y ya

void despejarEntrada(void){
    while(getchar() != '\n');
}
despejarEntrada();


Comandos Varios

Rand

primero inicializamos con srand();

Puedes ponen dentro de srand la funcion time para lo que necesitamos la librería #include <time.h>

Quedaría srand(time(NULL));

#include <stdio.h>
#include <windows.h>
#include <time.h>
int main ()
{
    SetConsoleCP(1252);
    SetConsoleOutputCP(1252);
    srand(time(NULL));   //creamos una clave para randomizar
    int numeroSecreto;
    numeroSecreto=rand()%9+1;   //Randomizamos

    printf("Tu número secreto es %d\n",numeroSecreto);

    printf("Pulse una tecla para contínuar...\n");
    getchar();
    return 0;
}

randomizamos

x=rand()%21+20;