Upload
others
View
12
Download
0
Embed Size (px)
Citation preview
17 de Septiembre de 2019
Curso básico de Lenguaje C
Germán Ignacio Cervantes GonzálezUNAM - Facultad de contaduría y administración
ContenidoIntroducción_________________________________________________________________________2
Bibliotecas___________________________________________________________________________2
Características Relevantes______________________________________________________________2
1. Mi primer programa en Lenguaje C (Baby Steps)__________________________________2
2. Ventajas y Desventajas de programar en Lenguaje C (¿Para qué lo uso?)______________3
Ventajas____________________________________________________________________________3
Desventajas__________________________________________________________________________4
Uso de lenguaje C_____________________________________________________________________4
3. IDE (El bonito ambiente de desarrollo)__________________________________________4
Notepad ++__________________________________________________________________________5
Dev C ++____________________________________________________________________________5
Linux (vim)__________________________________________________________________________5
4. Sintaxis y estructura de un programa en C (Si quieres que te entienda, escribe bien)_____5
¿Cómo se organiza un programa?________________________________________________________5
Mi primer programa en Lenguaje C_______________________________________________________5
Identificadores_______________________________________________________________________7
Palabras reservadas___________________________________________________________________7
Tipos de datos________________________________________________________________________8
Variables____________________________________________________________________________9
Constantes__________________________________________________________________________9
Bibliotecas__________________________________________________________________________10
Operadores_________________________________________________________________________12
Estructuras de control condicionales_____________________________________________________15
Estructuras Cíclicas___________________________________________________________________18
Funciones__________________________________________________________________________19
IntroducciónC es un lenguaje de programación de propósito general originalmente desarrollado por
Dennis Ritchie entre 1969 y 1972, está orientado a la implementación de sistemas
operativos, concretamente para UNIX.
Se trata de un lenguaje de tipos de datos estáticos, débilmente tipificado, de “medio nivel”
(alto nivel). El lenguaje que define este estándar fue conocido como ANSI C (1989),
después con el ISO (1990) se hizo más popular por la portabilidad entre plataformas.
(Wikipedia: Lenguaje C, s.f.)
Bibliotecas Una biblioteca de C es una colección de funciones utilizadas en el lenguaje de
programación C. La más común es la biblioteca estándar (stdio.h), que incluye funciones
para la entrada y salida de archivos, alojamiento de memoria y operaciones con datos
comunes: funciones matemáticas, funciones de manejo de cadenas de texto y funciones
de hora y fecha. Muchas bibliotecas de otros lenguajes de programación están escritas en
C. (Wikipedia: Lenguaje C, s.f.)
Características Relevantes Fácil de aprender Lenguaje estructurado Produce programas eficientes Puede manejar actividades de “bajo nivel” Se puede compilar en gran variedad de arquitecturas de computadoras
1. Mi primer programa en Lenguaje C (Baby Steps)
Un programa en C consiste en:
Comandos del preprocesador Funciones Variables Instrucciones y Expresiones Comentarios
En el programa anterior:
La primera línea del programa #include <stdio.h> es un comando del preprocesador, que le dice a un compilador de C que incluya el archivo stdio.h antes de ir a la compilación real.
La siguiente línea int main () es la función principal donde comienza la ejecución del programa e indica que la función devolverá un entero y que no recibe ningún parámetro.
La siguiente línea /*...*/ será ignorada por el compilador y se ha agregado para poner un bloque de comentarios al programa.
La siguiente línea printf (...) es otra función disponible en C que causa el mensaje "¡Hola, mundo!" para ser exhibido en la pantalla.
La siguiente línea, return 0; termina la función main () y devuelve el valor 0.
2. Ventajas y Desventajas de programar en Lenguaje C (¿Para qué lo uso?)
Ventajas Es altamente portable. Es relativamente sencillo de programar y fácil de aprender. Un sistema de tipos, lo que hace más claro el uso de las variables y el que no se
usen operaciones extrañas. Se utilizan apuntadores para realizar acceso a la memoria. Se pueden llamar funciones que sirven del enlace con el núcleo del sistema
operativo. Se pueden pasar parámetros a las funciones por valor o por referencia.
El hecho de que se puedan hacer llamadas de bajo nivel ayuda a optimizar los programas.
El compilador de C se ha portado a casi todos los sistemas operativos conocidos. Permite la programación modular ya que se pueden incluir programas compilados
separadamente.
Desventajas No es un lenguaje visual por lo que no puede ser deducido de forma intuitiva como
Visual Basic. Las variables no pueden utilizarse con diferentes tipos de datos, sólo se les puede
asignar el tipo con el que fueron declaradas. De forma nativa carece de funciones que permitan la programación multihilo, hay
que utilizar bibliotecas adicionales. No cuenta con instrucciones que permitan la programación orientada a objetos.
Uso de lenguaje C
Muchos de los programas de software libre más populares están escritos en éste
lenguaje, como el sistema operativo Linux (kernel) o manejadores de bases de datos
como MariaDB.
Los programadores principiantes deben de tener cuidado con la gestión de memoria, ya
que se puede reservar y liberar memoria explícitamente, pero características como ésta
que tiene Lenguaje C, es muy útil para escribir controladores de hardware.
C es un lenguaje muy común para programar sistemas embebidos. El código ligero que
un compilador C genera, combinado con la capacidad de acceso a capas del software
cercanas al hardware son la causa de su popularidad en estas aplicaciones.
Otros usos:
Compiladores para otros lenguajes. Intérpretes para otros lenguajes. Editores de Texto Diferentes tipos de programas que tienen buen desempeño Utilidades del sistema operativo
3. IDE (El bonito ambiente de desarrollo)
En inglés Integrated Development Environment (IDE), es una aplicación informática que
proporciona servicios integrales para facilitarle al desarrollador o programador el
desarrollo de software.
Normalmente, un IDE consiste de un editor de código fuente, herramientas de
construcción automáticas y un depurador. La mayoría de los IDE tienen auto-completado
inteligente de código (IntelliSense). Algunos IDE contienen un compilador, un intérprete, o
ambos, tales como NetBeans y Eclipse; otros no, tales como SharpDevelop y Lazarus.
(Wikipedia: IDE, s.f.)
Notepad ++Es solamente un editor de texto, para compilar necesitamos otra herramienta.
Dev C ++Es un entorno de programación, cuenta con editor, compilador y otras herramientas como
depurador.
Linux (vim)En Linux generalmente se utilizan una serie de programas que se ejecutan en una
terminal por medio de comandos.
4. Sintaxis y estructura de un programa en C (Si quieres que te entienda, escribe bien)
¿Cómo se organiza un programa?1. Declaraciones para el preprocesador.2. Declaración de variables Globales.3. Declaración de funciones.4. Declaración de programa principal.5. En cualquier parte del programa pueden ir uno o más comentarios.
Mi primer programa en Lenguaje C
IdentificadoresVariables: las variables son espacios reservados en la memoria que, como su nombre
indica, pueden cambiar de contenido a lo largo de la ejecución de un programa, es decir,
pueden ser manipuladas en el programa.
Funciones: Las funciones se crearon para evitar tener que repetir constantemente
fragmentos de código. Se presenta como una subrutina (procedimiento) que forma parte
del programa principal, el cual permite resolver una tarea específica; además nos permite
organizar mejor nuestro programa.
Es un nombre utilizado para identificar una variable, función o cualquier otro elemento
definido por el usuario. Un identificador comienza con una letra A a la Z, una a la z, o un
guion bajo '_' seguido de cero o más letras, guiones bajos y dígitos (0 a 9).
C no permite caracteres de puntuación como @, $ y% dentro de los identificadores. C es
un lenguaje de programación sensible a mayúsculas y minúsculas. Ejemplos:
mohd zara abc move_name a_123myname50 _temp j a23b9 retVal
El punto y coma se utiliza para terminar una instrucción.
Palabras reservadasauto else long switch
break enum register typedef
case extern return union
char float short unsigned
const for signed void
continue goto sizeof volatile
default if static while
do int struct _Packed
double
Tipos de datosTipo Entero
Tipo Espacio Rango de valores
char 1 byte -128 to 127 or 0 to 255
unsigned char 1 byte 0 to 255
signed char 1 byte -128 to 127
int 2 or 4 bytes -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647
unsigned int 2 or 4 bytes 0 to 65,535 or 0 to 4,294,967,295
short 2 bytes -32,768 to 32,767
unsigned short 2 bytes 0 to 65,535
long 8 bytes -9223372036854775808 to 9223372036854775807
unsigned long 8 bytes 0 to 18446744073709551615
Tipo flotante
Tipo Espacio Rango de Valores Precisión
float 4 byte 1.2E-38 to 3.4E+38 6 decimales
double 8 byte 2.3E-308 to 1.7E+308 15 decimales
long double 10 byte 3.4E-4932 to 1.1E+4932 19 decimales
Tipo Void
Especifica que ningún valor está disponible (ausencia de valor)
Se usa en 3 situaciones:
1. Una función que regresa void.2. Como argumento de función.3. Un apuntador a una dirección de memoria que no tiene un tipo de dato en
específico.
Los tipos de datos que más se usan son: char, int, float, double, void.int i, j, k;char c, ch;float f, salary;double d;
Asignaciones enteras212 /* Entero */0x4b /* Hexadecimal */
Delcaración flotante3.14159 /* Legal */314159E-5L /* Legal */
Caracteres especiales\t /* Tabulador */
\n /* Salto de línea */
Cadenas“Soy el rayo que no cesa”;
Variablesint d = 3, f = 5;byte z = 22; char x = 'x';
Constantes#define TAM 10
const int TAM = 10;
BibliotecasBiblioteca Descripción
<assert.h> Contiene la macro assert (aserción), utilizada para detectar errores
lógicos y otros tipos de fallos en la depuración de un programa.
<complex.h> Conjunto de funciones para manipular números complejos (nuevo en
C99).
<ctype.h> Contiene funciones para clasificar caracteres según sus tipos o para
convertir entre mayúsculas y minúsculas independientemente
del conjunto de caracteres (típicamente ASCII o alguna de sus
extensiones).
<errno.h> Para analizar los códigos de error devueltos por las funciones de
biblioteca.
<fenv.h> Para controlar entornos en coma flotante (nuevo en C99).
<float.h> Contiene la definición de constantes que especifican ciertas
propiedades de la biblioteca de coma flotante, como la diferencia
mínima entre dos números en coma flotante (_EPSOLON), el número
máximo de dígitos de precisión (_DIG), o el rango de valores que se
pueden representar (_MIN, _MAX).
<inttypes.h> Para operaciones de conversión con precisión entre tipos enteros
(nuevo en C99).
<iso646.h> Para utilizar los conjuntos de caracteres ISO 646 (nuevo en NA1).
<limits.h> Contiene la definición de constantes que especifican ciertas
propiedades de los tipos enteros, como rango de valores que se
pueden representar (_MIN, _MAX).
<locale.h> Para la función setlocale() y las constantes relacionadas. Se utiliza para
seleccionar el entorno local apropiado (configuración regional).
<math.h> Contiene las funciones matemáticas comunes.
<setjmp.h> Declara las macros setjmp y longjmp para proporcionar saltos de flujo
de control de programa no locales.
<signal.h> Para controlar algunas situaciones excepcionales como la división por
cero.
<stdarg.h> Posibilita el acceso a una cantidad variable de argumentos pasados a
una función.
<stdbool.h> Para el tipo booleano (nuevo en C99).
<stdint.h> Para definir varios tipos enteros (nuevo en C99).
<stddef.h> Para definir varios tipos de macros de utilidad.
<stdio.h> Proporciona el núcleo de las capacidades de entrada/salida del
lenguaje C (incluye la venerable función printf).
<stdlib.h> Para realizar ciertas operaciones como conversión de tipos, generación
de números pseudo-aleatorios, gestión de memoria dinámica, control
de procesos, funciones de entorno, de señalización, de ordenación y
búsqueda.
<string.h> Para manipulación de cadenas de caracteres.
<tgmath.h> Contiene funcionalidades matemáticas de tipo genérico (type-generic)
(nuevo en C99).
<time.h> Para tratamiento y conversión entre formatos de fecha y hora.
<wchar.h> Para manipular flujos de datos anchos y varias clases de cadenas de
caracteres anchos (2 o más bytes por carácter), necesario para
soportar caracteres de diferentes idiomas (nuevo en NA1).
<wctype.h> Para clasificar caracteres anchos (nuevo en NA1).
(Wikipedia: Archivos de cabeceras de la biblioteca ANSI C, s.f.)
OperadoresAritméticos
En los ejemplos A=10 y B=20.
Operadores
Descripción Ejemplo
+ Suma dos operandos. A + B = 30
− Resta el segundo operando del primero. A − B = -10
* Multiplica dos operandos. A * B = 200
/ Divide el numerador por el denominador. B / A = 2
% Módulo de una división entera. B % A = 0
++ Aumenta un valor entero en 1. A++ = 11
-- Disminuye un valore entero en 1. A-- = 9
Imagen que nos representa la operación módulo de 12
RelacionalesEn los ejemplos A=10 y B=20.
Operadores Descripción Ejemplo
== Comprueba si los valores de dos operandos son iguales o
no. Si es así, entonces la condición es vuelve verdadera.
(A == B)
Verdadero
!= Comprueba si los valores de los dos operandos son
iguales o no. Si los valores no son iguales, entonces la
condición es verdadera..
(A != B)
Falso
> Comprueba si el valor del operando izquierdo es mayor
que el valor del operando derecho. Si es así, entonces la
condición es verdadera.
(A > B)
Falso
< Comprueba si el valor del operando izquierdo es menor que
el valor del operando derecho. Si es así, entonces la
condición es verdadera.
(A < B)
Verdadero
>= Comprueba si el valor del operando izquierdo es mayor o
igual que el valor del operando derecho. Si es así, entonces
la condición es verdadera.
(A >= B)
Falso
<= Comprueba si el valor del operando izquierdo es menor o
igual que el valor del operando derecho. Si es así, entonces
la condición es verdadera.
(A <= B)
Verdadero
LógicosEn los ejemplos A=1 y B=0. (0 en Lenguaje C significa falso, cualquier número diferente a
0 significa verdadero).
Operador Descripción Ejemplo&& Llama al operador lógico AND. Si ambos operandos son distintos de cero,
la condición se vuelve verdadera.(A && B) es falso.
|| Llama al operador lógico OR. Si alguno de los dos operandos es distinto de cero, la condición se vuelve verdadera.
(A || B) es verdadero.
! Llama al operador lógico NOT. Se utiliza para revertir el estado lógico de su operando. Si una condición es verdadera, entonces el operador lógico
! (A && B) es
NOT la vuelve falsa. verdadero.
Se usan paréntesis para agrupar operadores.
Operadores de bits
Operador
Descripción Ejemplo
& El operador binario AND copia un bit al resultado si existe en ambos operandos.
(A & B) = 12, i.e., 0000 1100
| El operador binario OR copia un bit al resultado si existe en alguno de los operandos.
(A | B) = 61, i.e., 0011 1101
^ El operador binario XOR copia el bit si se establece en un operando pero no en ambos.
(A ^ B) = 49, i.e., 0011 0001
~ El operador complemento intercambia los bits; es decir de 0 a 1 o de 1 a 0.
(~A ) = ~(60), i.e,. -0111101
<< Operador binario de desplazamiento a la izquierda. El valor de los operandos de la izquierda se mueve hacia la izquierda por la cantidad de bits especificados por el operando de la derecha.
A << 2 = 240 i.e., 1111 0000
>> Operador binario de desplazamiento a la derecha. El valor de los operandos de la izquierda se mueve hacia la derecha por la cantidad de bits especificados por el operando de la derecha.
A >> 2 = 15 i.e., 0000 1111
Operador Descripción Ejemplo
= Operador de asignación simple. Asigna valores de operandos del lado derecho al operando del lado izquierdo
C = A + B asignará el valor de A + B a C
+= Agrega el operando derecho al operando izquierdo y asigna el resultado al operando izquierdo.
C + = A es equivalente a C = C + A
- = Resta el operando derecho del operando izquierdo y asigna el resultado al operando izquierdo.
C - = A es equivalente a C = C - A
* = Multiplica el operando derecho con el operando C * = A es equivalente a C = C * A
izquierdo y asigna el resultado al operando izquierdo.
/ = Divide el operando izquierdo con el operando derecho y asigna el resultado al operando izquierdo.
C / = A es equivalente a C = C / A
%= Calcula el módulo usando dos operandos y asigna el resultado al operando izquierdo.
C% = A es equivalente a C = C% A
<< = Operador de asignación, desplazamiento a la izquierda.
C << = 2 es lo mismo que C = C << 2
>> = operador de asignación, desplazamiento a la derecha.
C >> = 2 es lo mismo que C = C >> 2
& = Operador de asignación AND. C & = 2 es lo mismo que C = C & 2
^= Operador de asignación XOR. C ^ = 2 es lo mismo que C = C ^ 2
|= Operador de asignación OR C | = 2 es lo mismo que C = C | 2
Cambiar el programa de la calculadora, utilizando éstos operadores.
Estructuras de control condicionalesIf
Sintaxis:
if( expresión_lógica ) { /* Bloque de instrucciones que se ejecutarán si la expresión es verdadera */}
Completar Ejemplo.
If …else
Sintaxis:
if( expresión_lógica ) { /* Bloque de instrucciones que se ejecutarán si la expresión es verdadera */} else { /* Bloque de instrucciones que se ejecutarán si la expresión es falsa */}
Completar Ejemplo.
If… else… if
Sintaxis
if( expresión_condicional_1 ) {
/* Si la expresión 1 es verdadera */
}else{ /* Si la expresión 1 es falsa */ if( expresión_condicional_2 ) {
/* Si la expresión 2 es verdadera */ }else{
. . .
}
}
De acuerdo a la siguiente línea, define las etapas del desarrollo humano, revisa el
programa EstructuraSiNoSi.c.
https://www.etapasdesarrollohumano.com/
Operador Ternario “? ..:”
Switch
Estructuras CíclicasWhile
while(condición_Lógica_y/o_relacional) { Intrucciones;
}
Mientras se cumpla la condición realizara las instrucciones.
For
for ( inicialización; condición; Incremento ) { Instrucciones;}
Meintras de compla la condición se incrementa la variable
Do while
do { Instrucciones;} while( condición );
Modifica la calculadora para que utilice un do while.
Ciclos Anidados
for ( inicialización; condición; Incremento ) { Instrucciones; for ( inicialización; condición; Incremento ) { Instrucciones; }
}
Funcionestipo_devuelto NombreFunción( lista_parámetros ) { cuerpo_función}
Creando una biblioteca.
Creamos un nuevo proyecto
Vamos a crear 3 archivos
MiCalculadora.c
mibib.c
mibib.h
Paso de valores por referencia
Intercambio de variables
#include <stdio.h>
void intercambio(float *x, float *y) {
float temp=0;
temp = *x; printf("TEMP vale: %f\n",temp); *x = *y; *y = temp; return;} int main () {
float a = 100; float b = 200; printf("Antes del intercambio,valor de a: %f\n", a ); printf("Antes del intercambio, valor de b: %f\n", b ); intercambio(&a, &b); printf("Después del intercambio, valor de a: %f\n", a ); printf("Después del intercambio, valor de b: %f\n", b ); return 0;}
Alcance de Variables Globales Locales
Arreglos
tipo nombre_arreglo [ tamaño ];
double precios[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
precio[4] = 50.0;
#include <stdio.h> int main () {
int n[ 10 ]; int i,j;
for ( i = 0; i < 10; i++ ) { n[ i ] = i + 100; } for (j = 0; j < 10; j++ ) { printf("Element[%d] = %d\n", j, n[j] ); } return 0;}
#include <stdio.h> int main () {
int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}}; int i, j;
for ( i = 0; i < 5; i++ ) {
for ( j = 0; j < 2; j++ ) { printf("a[%d][%d] = %d\n", i,j, a[i][j] ); } } return 0;}
Cadenas
Formas de declarar
char saludo[5] = {'H', 'o', 'l', 'a', '\0'};
char saludo[] = "Hola";
#include <stdio.h>
int main () {
char saludo[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; printf("Saludo: %s\n", greeting ); return 0;}
ApuntadoresUn apuntador es una dirección en memoria que hace referencia a un espacio de
almacenamiento (variable, arreglo o estructura) o hace referencia a NULO; es decir, no
apunta a ningún espacio.
Declaraciones
int *ip; /* Apuntador a un entero */double *dp; /* Apuntador a un flotante doble */float *fp; /* Apuntador a flotante */char *ch /* Apuntador a a caracter */
#include <stdio.h>
int main () {
int var = 20; /* Declaración de una variable */ int *ip; /* Apuntador a una variable entera */
ip = &var; /* Guardamos la dirección de memoria en donde se almacena la variable var*/
printf("La dirección de memoria de la variable var es: %x\n", &var );
/* La dirección guardada en el apuntador es */ printf("Dirección de memoria guardada en la variable de apuntador: %x\n", ip );
/* Accedemos a lo que está almacenado en var por medio del apuntador */ printf("Valor de es espacio al que apunta *ip: %d\n", *ip );
return 0;}
#include <stdio.h>
int main () {
int *ptr = NULL;
printf("Apuntador a Nada : %x\n", ptr ); return 0;}
RecursiónFunción que se llama a sí misma.
#include <stdio.h>
int factorial(int i) {
if(i <= 1) { return 1; } return i * factorial(i - 1);}
int main() { int i = 12; printf("Factorial de %d is %d\n", i, factorial(i)); return 0;}
#include <stdio.h>
int fibonacci(int i) {
if(i == 0) { return 0; }
if(i == 1) { return 1; } return fibonacci(i-1) + fibonacci(i-2);}
int main() {
int i; printf("Serie de Fibonacci:\n"); for (i = 0; i < 10; i++) { printf("%d\t\n", fibonacci(i)); }
return 0;}