Curso Basico Sobre C
Curso Basico Sobre C
Curso Basico Sobre C
From an exam
#include <string.h>
int foo(void) {
char bar[128];
char *baz = &bar[0];
baz[127] = 0;
return strlen(baz);
}
//CHECk
/*
¿Cuáles de los siguientes son verdaderos de la memoria devuel
ta a través de la función malloc? Marque todo lo que correspo
nda.
*/
#include <stdio.h>
#include <stdlib.h>
C 1
char *buf = malloc(k); /* 1 */
if(buf == 0) {
return -1;
}
printf("%s\n", buf); /* 3 */
return -1;
}
//CHECK
/*
¿Cuáles de las siguientes son afirmaciones verdaderas sobre e
l program stacks?
*/
//CHECK
/*
Which of the following are true of the X86 call instruction?
¿Cuáles de los siguientes son verdaderos de la instrucción de
llamada X86?
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
C 2
int i, j;
if(special != NULL) {
*special = 7;
}
return 0;
}
Detalles
C es case-sensitive.
C 3
Es buena practica colocar un return al final
Key Words
Palabras clave
double
Data types
-2,147,483,648 to
int a whole number
2,147,483,647
C 4
a number with possible
float 6 decimal places
decimals
sizeof
#include <stdio.h>
void main(){
int a;
char b;
double c;
float d;
char e = 'S';
int f = 10;
😉
// Si no entiende que es %lu baje a formato de datos en la
parte de simbolos to replace.
Type Value
char 1 byte
int 4 byte
double 8 byte
float 4 byte
C 5
Variables
Declarar varibles
#include <stdio.h>
void main(){
int num,minNum,maxNum;
num = 12;
minNum = 1;
maxNum = 100;
}
Char
Incrementar
#include <stdio.h>
void main(){
int number = 0;
int new_number = number + 1; // forma larga
int other_number = ++number; // forma corta
}
#include <stdio.h>
void main(){
C 6
int new_number, other_number;
int number = 0;
new_number += 9;
other_number -= number;
}
Dato sorprendente:
#include <stdio.h>
void main(){
int number = 5;
int other_number = number = number + 10;
}
const
C 7
0.95, lo más probable es que desee mostrar el 95% al
usuario. Tenga en cuenta que no estamos cambiando el tipo de
variable ni el valor almacenado en la variable de origen.
int a;
double b = 3.0;
a = b;
C 8
// Implicitamente
#include <stdio.h>
int main() {
// Explicitamente
#include <stdio.h>
int main() {
C 9
}
Fuente:
| Codecademy
Sometimes it's useful, or even necessary, to
change the value type of a variable and use it
for other purposes. For instance, if you had a
https://www.codecademy.com/courses/learn-c/l
essons/variables-c/exercises/casting-types
Casting Types
Una opción de conversión más interesante es convertir char a en
un tipo de número, o al revés. Al igual que antes, debe tener
cuidado con la configuración de esto. En el back-end, a char no
almacena 'a' , almacena el valor que representa eso: 97 para
minúsculas y 65 para mayúsculas.
int targetInt;
char sourceChar = 'a';
targetInt = (int)sourceChar;
C 10
// Implicitamente
#include <stdio.h>
int main() {
// Explicitamente
#include <stdio.h>
int main() {
C 11
}
Fuente:
| Codecademy
A more interesting casting option is converting
a char to a number type, or the other way
around. Just like before, you have to be
https://www.codecademy.com/courses/learn-c/l
essons/variables-c/exercises/casting-types-cont
inued
Almacenamiento
Exsisten 4 tipos de almacenamientos en C
Automatic ● External ● Static
C 12
función, normalmente al principio del programa, después de la
definición de los archivos de biblioteca (#include), de la
definición de constantes simbólicas y antes de cualquier
función.
C 13
Las direcciones en memoria son relativas.
Declaración de punteros:
#include <stdio.h>
void main(){
C 14
ejemplo: no es lo mismo un puntero de tipo entero que tipo
double. tienen objetivos diferentes.
C 15
#include <stdio.h>
void main(){
int &a; // accedemos a su ubicacion en memoria(direccion)
int *ptro = &a; //almacena la direccion de la variable a
}
Indirección de punteros:
Con la indirección de punteros podemos saber que valor esta
ocupado esa ubicación.
C 16
No es lo mismo declarar una variable de tipo puntero (int
*prt = #) a llamarla en una sentencia e.x en un printf.
Eso es indirección
#include <stdio.h>
void main(){
int num = 12;
int *ptro;
ptro = #
*ptro = *ptro + 5;
C 17
printf("\nValor de direccion %d",*ptro); //**MODIFICAD
O**indireccion (acceder al valor que se guarda en la ubica
cion de memoria que tiene el puntero)
}
Formateo de datos
Formateo de datos
printf("%i",num);
Simbolos to replace
symbol type
%d or %i int
%f double or float
%c char
%lu especificador
%p punteros
C 18
Para indicar cuantos decimales mostrar despues del punto
podemos decir:
Commans to format
symbol effect
\n newline
\r carriage return
\t tab
#include <stdio.h>
void main(){
int a,b;
printf("Ingrese un numero... ");
scanf("%i",&a); // & al lado de la variable es necesar
io
printf("Ingrese un numero... ");
scanf("%i",&b); // porque atrapa los valores y los col
oca en las variable que le signamos
printf("la suma de ambos es: %i ",a+b);
return 0;
}
Why &?
C 19
While scanning the input, scanf needs to store that input
data somewhere. To store this input data, scanf needs to
known the memory location of a variable. And here comes the
ampersand to rescue.
scanf("%d %d",&a,&b);
Output
Estructuras de datos
Definición : Las estructuras de datos en programación son
un modo de representar información en una computadora, aunque
además, cuentan con un comportamiento interno
. ¿Qué significa? Que se rige por determinadas
reglas/restricciones que han sido dadas por la forma en que está
construida internamente.
Condicionales
Las condicionales en C siguen la misma estructura que en
lenguajes como JavaScript.
#include <stdio.h>
void main(){
/*code*/
int a = 9, b = 2;
C 20
if (a < b)
{
/* code */
printf("Este numero es mayor");
}else{
printf("Este numero es mayor");
}
}
printf("\n\n");
// EJERCICIO #2
int nota;
Bucles while
Estructura:
C 21
#include <stdio.h>
void main(){
/*bucle while*/
int i = 10;
Bucle do while
Estructura:
#include <stdio.h>
void main(){
// do while bucle
int num = 1;
do{
printf("%d \n",num);
++num; //accion
}while(num <+= 10); //condicion
Bucle for
Estructura:
#include <stdio.h>
C 22
void main(){
/*code*/
int i, limit = 20;
if ( i % 2 == 0)
{
printf("\t Es un numero par");
}
Ejercicio:
C 23
Ejercicio con continue
#include <stdio.h>
void main()
{
int i;
double suma = 0.0,num;
#include <stdio.h>
void main()
{
int i;
double suma = 0.0,num;
C 24
if(num < 0){
break;
}
suma += num;
}
printf("La suma es = %.2lf",suma);
}
Switch
#include <stdio.h>
void main()
{
char calculadora;
double num1,num2;
switch(calculadora){
case '+':
printf("%.2lf + %.2lf = %.2lf ",num1,num2,num1+num2);
break;
case '-':
printf("%.2lf - %.2lf = %.2lf ",num1,num2,num1-num2);
break;
C 25
case '*':
printf("%.2lf * %.2lf = %.2lf ",num1,num2,num1*num2);
break;
case '/':
printf("%.2lf / %.2lf = %.2lf ",num1,num2,num1/num2);
break;
default:
printf("yo dije (+,-,*,/) no esto '%c' pendejo",calcu
break;
}
Prototipo
Definición:
Prototipo: Prototipo se le denomina a la declaración de una
función o procedimiento (un prototipo seria la forma de la
función)
int main(){
C 26
ombre)
int a = 4,b = 3,sum,mul;
alv(a,b,&sum,&mul);
printf("\nSoy la funcion alv:\nsuma = %d\nmultiplicaci
on = %d",sum,mul);
return 0;
}
#include <stdio.h>
#include <stdarg.h>
void farewell();//prototipo
//este prototipo no necesita parametros formales porque de
clara un procedimiento
C 27
#include <stdio.h>
int main(){
int num1 = 12,num2 = 4,coc,res;
operacion(num1,num2,&coc,&res);
//dentro de la funcion tenemos nuestros punteros y ell
os apunta (mediante indireccion) a las variables locales c
readas dentro del main.
printf("El cosciente es %d\nLa resta es %d",coc,res);
return 0;
}
Funciones
Detalles:
Las funciones retornan un único valor
C 28
Prototipo —> se traduce a declarar la función al estilo C.
llamar la función (esta demás explicar).
Definir y por ultimo retornar.
#include <stdio.h>
void main(){
/*code*/
int num1,num2,resp;
}
int calculadora(int a,int b){ // cuerpo de la funcion
int result;
result = a + b;
#include <stdio.h>
//(funciones para usuarios)
C 29
void primos();
void main(){
int num1,num2,resp;
// esta es otra forma de hacer funciones (funciones para u
suarios)
primos();
}
void primos(){ // las funciones con void se autollaman
int i,n,flag = 0;
#include <stdio.h>
resultado = n1 + n2;
C 30
return resultado;
}
void main(){
int a,b,c;
c = suma(a,b);
#include <stdio.h>
#include <stdarg.h>
void gretting(){
printf("Holaaa, bienvenido a C\n");
}
C 31
int fredo = va_arg(argList, int);//var que recibe
los valores (especificando su tipo de danto en el segundo
parametro)
printf("%d\n", fredo);//imprimir
}
va_end(argList);//finaliza la lista
int main(){
gretting();
valores(3, 1, 2, 9);
return 0;
}
Procedimientos
Un procedimiento es un grupo de sentencias que realizan una
tarea concreta.Puede devolver cero o mas valores en sus
parametros.
C 32
Los procedimientos en C no son funciones ya que pueden o no
retornar nada (porque se declaran con void) o pueden declarar
varios valores…es bueno saber cuando usar una funcion o un
procedimiento ya que no es lo mismo hacer una funcion que
retorne y un procedimiento que no
#include <stdio.h>
void gretting(){
printf("Holaaa, bienvenido a C");
}//procedimiento
int main(){
gretting();
return 0;
}
#include <stdio.h>
}//procedimiento
int main(){
gretting();
return 0;
}
Recursión
C 33
Recursión o recursividad es como se le dice a la técnica de
una función llamándose a si misma.
Este termino es muy utilizado en estructuras de datos y
algoritmos.
#include <stdio.h>
respuesta = suma(numero);
Array
Los arrays son variables estructuradas, donde cada elemento
se almacena de forma consecutiva en memoria
. Las cadenas de caracteres son declaradas en C como arrays
de caracteres y permiten la utilización de un cierto número
de notaciones y de funciones especiales.
Ejemplo de un array de numeros:
C 34
#include <stdio.h>
int main()
{
int numeros [4];
printf("Mostrando numeros");
for(int i = 0; i < 4; i++){
printf("| %d |",numeros[i]);
}
return 0;
}
Ejercicio promedio:
int main()
{
int numeros[8],i,n,sum,pro;
C 35
return 0;
}
#include <stdio.h>
int main()
{
char numeros[] = {1,2,3,4,5};
Matrices
Un array en C
puede tener una, dos o más dimensiones. Por ejmplo, un array
de dos dimensiones también denominado
matriz
, es interpretado como un array (umidimensional) de dimensión
"f" (número de filas), donde cada componente es un array
(unidimensional) de dimensión "
c
" (número de columnas).
C 36
#include <stdio.h>
const int ciudad = 2;
const int semana = 7;
int main()
{
int coronavirus[ciudad][semana];
printf("\nDatos: \n\n");
for(int i = 0; i < ciudad;i++){
for(int j = 0; j < semana; j++){
printf("Ciudad %d, dia %d : %d \n",i+1,j+1,corona
C 37
}
}
return 0;
}
#include <stdio.h>
void main(){
/*code*/
int sum[2][2],a[2][2],b[2][2];
printf("Suma de matrices\n");
for (int i = 0; i < 2; i++)//valores matriz a
{
for (int j = 0; j < 2; j++)
{
printf("Ingrese el numero a%d_%d ",i+1,j+1);
scanf("%d",&a[i][j]);
C 38
//suma de las matrices
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
sum[i][j] = a[i][j] + b[i][j];
//result
printf("La suma de la matriz a y b es: \n");
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
printf("%d ",sum[i][j]);
if (j == 1)
{
printf("\n");
}
Datos Avanzados:
Directivas de procesador
C 39
1. El procesador es el primer programa que se ejecuta al
empezar a compilar.
Include
#include <nombre_archivo>
#include “nombre_archivo”
Define
C 40
Estructuras de control
Existen dos tipos de sentencias:
Modularización
Dividir un codigo extenso en varios modulos
Ámbito
Repaso
Las variables tienen 6 atributos:
Nombre
Valor
Tipo
C 41
Dirección
Tiempo de vida
Ámbito
Ámbito:
todo identificador tiene un campo de acción y solo dentro de
este podrá realizar su trabajo.
1. Ámbito de Programa
2. “” de Archivo
3. “” de Función
4. “” de Bloque
Modificadores de ambito:
Todos estos modificadores se colocan delante de la variable
al declararla.
modificador tipo de dato name variable
C 42
fuera.
C 43
Declaración de variables:
Globales
son variables que se declaran fuera de cualquier función.
#include <stdio.h>
void main(){
printf("ejemplo");
}
Locales
son variables que se declaran dentro de cualquier bloque
(for,if,switch,while..etc).
#include <stdio.h>
void main(){
if (10 > 5){
C 44
char text[] = "True"; // variable local
printf("%s",text);
}else{
char text[] = "Falso"; // variable local
printf("%s",text);
}
}
#include <stdio.h>
#include <stdarg.h>
int main(){
C 45
return 0;
}
#include <stdio.h>
#include <stdarg.h>
int main(){
C 46
printf("El cosciente es %d\nLa resta es %d",coc,re
s);
return 0;
}
Recursos adicionales:
https://youtu.be/7KZ5LCFr6Sw
Facu Darfe
Soy Técnico Universitario en Programación,
apasionado por la informática, la tecnología y el
desarrollo de sistemas en general. Trato de
https://www.youtube.com/@facudarfe
C 47
https://www.youtube.com/watch?v=wk930KiQJU8&list=PLg9145ptu
Aig7vzvLMYBssAzSjhnGaRmQ
From an exam
#include <string.h>
int foo(void) {
char bar[128];
char *baz = &bar[0];
baz[127] = 0;
return strlen(baz);
}
//CHECk
/*
¿Cuáles de los siguientes son verdaderos de la memoria devuel
ta a través de la función malloc? Marque todo lo que correspo
nda.
*/
#include <stdio.h>
#include <stdlib.h>
C 48
return -1;
}
printf("%s\n", buf); /* 3 */
return -1;
}
//CHECK
/*
¿Cuáles de las siguientes son afirmaciones verdaderas sobre e
l program stacks?
*/
//CHECK
/*
Which of the following are true of the X86 call instruction?
¿Cuáles de los siguientes son verdaderos de la instrucción de
llamada X86?
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
C 49
for(i = 0; i < N; i++) {
int *tmp = (int *)malloc(sizeof(int)*M);
memset((void *)tmp, 0, sizeof(int)*M);
if(i > N) {
special = &tmp[3];
}
blah2[i] = tmp;
}
if(special != NULL) {
*special = 7;
}
return 0;
}
C 50