Lenguaje C
Lenguaje C
Lenguaje C
Una constante entera octal puede estar formada por cualquier combinación de
dígitos tomados del conjunto de 0 a 7. el primer dígito deber ser
obligatoriamente 0, con el fin de identificar la constante como un número octal.
Ejemplo
0 01 0743 077777
Una constante entera hexadecimal debe comenzar por 0x ó 0X. Puede aparecer
después cualquier combinación de dígitos tomados del conjunto de 0 a 9 y de “a” a “f”
(tanto minúsculas como mayúsculas).
Ejemplo:
0x 0X1 0X7FFF 0Xabcd
Constantes de carácter
Es un solo carácter encerrado con comillas simples
Ejemplo:
‘A’ ‘x’ ‘3’ ‘$’ ‘ ‘
Secuencias de escape
Una secuencia de escape siempre comienza con una barra \ y es seguida por uno o
más caracteres especiales.
VARIABLES Y ARRAYS
Una variable es un identificador que se utiliza para representar cierto tipo de
información dentro de una determinada parte del programa. En su forma más
sencilla, una variable contendrá un dato simple, esto es, una cantidad numérica o
una constante de carácter. En algún punto del programa se le asiginará a la variable
un determinado valor. Este valor se puede recuperar después en el programa con
simplemente hacer referencia al nombre de la variable.
A una variable se le pueden asignar diferentes valores en distintas partes del
programa, de esta forma la información representada por la variable puede cambiar
durante la ejecución del programa. Sin embargo, el tipo de datos asociado a la
variable no puede cambiar.
Ejemplo:
int a, b, c;
char d;
.
.
.
a = 3;
b = 5;
c = a + b;
d = ‘a’;
.
.
.
a = 4;
b = 2;
c = a - b;
d = ‘W’;
.
Conversiones explícita de tipos utilizando el operador de
conversión de tipos (cast)
Ejemplo:
int i=3, j k=0;
a+b 13
a–b 7
a*b 30
a/b 3
a%b 1
a = a + 5 ----- a+= 5
b = b - c ----- b-= c
d = d*6 ---- d*=6
e = e/f ---- > e/= f
Operadores relacionales
Operador Significado
== Igualdad (No asignación)
!= Desigualdad
> Mayor que
< Menor que
<= Menor o igual que
>= Mayor o igual que
Ejemplo.- Supongamos i = 1, j = 2 y k = 3
expresión_izquierda , expresión_derecha
Normalmente, el operador coma se utiliza en los bucles for en que se itera más
de una variable. Por ejemplo:
#include "stdio.h“
int _tmain(int argc, _TCHAR* argv[])
{
char c = 'A',
ptam1[] = "Quien a buen árbol se arrima ",
ptam2[] = "buena sombra le cobija.";
int iln = 0,
ivalor = 1234;
double dpi = 3.14159265;
Biblioteca a
Nombre de
# Tipo la cual Sintaxis Descripción Ejemplo
función
pertenece
Devuelve el valor
1 abs(i) int stdlib.h int abs(int i); x = abs(-7) // x es 7
absoluto de i
Devuelve el arco angulo = acos(0.5); // angulo
2 acos(d) double math.h double acos(double d);
coseno de d devuelto es phi/3
Devuelve el arco angulo = asin(0.707); //
3 asin(d) double math.h double asin(double d);
seno de d aproximadamente phi/4
Devuelve la arco
tangente de d.
Calcula el arco
double atan(double d); tangente del angulo atan(1.0); // angulo es
4 atan(d) double math.h
long double tanl(long double d); argumento x. phi/4
Requiere el llamado
de la biblioteca
complex.h
double atan(double d1, double Devuelve el arco
5 atan(d1, d2) double math.h angulo = atan(y, x)
d2); tangente de d1/d2
Convierte la cadena
s a una cantidad de double x;
doble precisión. char *cad_dbl = "200.85"; ...
6 atof(s) double stdlib.h double atof(const char *cadena)
Requiere el llamdo x=atof(cad_dbl); // convierte la
de la biblioteca cadena "200.85" a valor real
math.h
Convierte la cadena s
int i;
a un entero.
char
La cadena debe tener
*cad_ent="123";
int atoi(const char el siguiente formato:
7 atoi(s) int stdlib.h ...
*cadena) [espacio en blanco]
i=atoi(cad_ent);
[signo][ddd] (siendo
//convierte la cadena
obligatorio los digitos
"123" al entero 123
decimales).
Reserva memoria
para una formación
de n elementos , cada
uno de s bytes.
malloc.h y stdlib.h Devuelve un puntero long *buffer
o bien void *calloc(size_t n, al principio del buffer=(long *)
9 calloc(n, s) void(puntero)
alloc.h y size_t s); espacio reservado. calloc(40,
stdlib.h Si no existente sizeof(long));
bastante espacio para
el nuevo bloque o
bien n o s es 0, calloc
devuelve nulo.
Devuelve un valor
double ceil(double redondeado por redondeo=ceil(5.1);
10 ceil(d) double math.h
d); exceso al siguiente //redondeo es 6
entero mayor
double cos(double
d); Devuelve el coseno coseno_x=cos(1.65
11 cos(d) double math.h
complex de d 43)
cos(complex d);
double cos(double
d=1.00;
d); Devuelve el coseno
12 cosh(d) double math.h printf("d=
complex hiperbólico de d
%f.\n\n,d);
cos(complex d);
Eleve e a la
potencia d d=100.00;
double exp(double
(e=2,7182818... es y=exp(d);
d);
15 exp(d) double math.h la base del sistema printf("El
complex
de logaritmos exponencial de x=
exp(complex d)
naturales %f.\n\n",y);
(neperianos))
Si Arcilla No
> 30
Si Arcilla No
> 20
Si limo
Si limo
> 50 Si Limo > 50
No > 50
No
arena No No
< 50
Si arena
≤ 50
Si Arena No No
≤ 50
arena No
Si ≤ 80
Si
1 2 3 4 5 6 7 8 9 10
Sentencia WHILE:
La sentencia while (MIENTRAS,en español) es una sentencia usada en los
lenguajes de programación para repeticiones. Con esta sentencia se evalúa una
condición y se repite un determinado proceso hasta que la condición deje de ser
verdadera.
Estructura:
while(condición)
{
// proceso
}
int nro;
main()
{
scanf("%d",&nro);
while(nro<0) //Se ejecuta el proceso mientras el número sea menor a
0.
{
printf("El número debe ser positivo"); //Corrige al usuario.
scanf("%d",&nro); //Pide ingresar de nuevo el número.
}
}
Sentencia DO WHILE:
La sentencia Do While (HACER MIENTRAS, en español) funciona igual que el While
con una pequeña diferencia que radica en que el While común, el proceso, a menos
que se cumpla la condición puede nunca ejecutarse. En el Do While, en cambio,
siempre se ejecutará la primera vez y luego se seguirá repitiendo si se cumple la
condición.
Estructura:
do
{
// Proceso
}
while(condición);
#include<conio.h>
#include<stdio.h>
int nro,i;
main()
{
for(i=0;i<5;i++)
{
scanf("%d",&nro);
printf("Numero %d: %d",i,nro);
}
}
Sentencia IF:
La sentencia if (SI,en español) es una sentencia muy usada en los lenguajes de
programación. Su funcionamiento es simple. Se evalúa una condición, si es
verdadera se ejecuta un proceso y si es falsa se ejecuta otro.
Estructura:
if(condición)
{
// proceso 1
}
else
{
// proceso 2
}
int nro;
main()
{
scanf("%d",&nro);
if(nro>0)
{
printf("El número es positivo");
}
else
{
printf("El número es negativo");
}
}
SUBPROGRAMAS O FUNCIONES
• FUNCIONES DE BIBLIOTECA STANDARD
• FUNCIONES DEFINIDAS POR EL USUARIO
Nombre de la función
Tipo de dato que
devuelve la función
Declaración de parámetros.- Se tiene que declarar los tipos de los parámetros que
deben coincidir con los de los argumentos (los que se usan en la llamada a la
función). Los identificadores usados en los parámetros son “locales” porque no son
reconocidos fuera de la función.
Cuerpo de la función .- Es una sentencia compuesta que define las acciones que debe
realizar ésta.
#include "stdafx.h"
#include "stdio.h“
#include “conio.h”
char minuscula(char c)
{
return(('A' <= c && c <= 'Z') ? ('a' + c - 'A') : c);
}
return 0;
}
Recursividad
La recursividad tiene lugar en un programa cuando una función se llama a sí misma.
Inicialmente, puede parecer un bucle infinito, pero no es así. Tanto C omo C++
admiten la recursividad. Los algoritmo recursivos permiten resolver problemas de
forma creativa, legible y concisa.
dresult = dfactorial(dnumero);
printf(“El factorial de %15.0lf es: %15.0lf\n”, dnumero, dresult);
return (0);
}
ARRAYS
• Los elementos individuales de datos de un array se denominan elementos
• Todos los elementos deben ser del mismo tipo de dato.
• Todos los elementos se almacenan en posiciones contiguas de la memoria de
la computadora y el subíndice del primer elemento es cero
• El nombre de un array es un valor constante que representa la dirección del
primer elemento del array
DECLARACIÓN DE ARRAYS
int iarray[12]; //un array de 12 enteros
char carray[20]; // un array de 20 caracteres
#define iARRAY_MAX 20
#define fARRAY_MAX 15
Int iarray[iARRAY_MAX]
float farray[fARRAY_MAX]
Ejemplo.- Debajo se muestran varias definiciones de arrays que incluyen la
asignación de valores iniciales:
Ejemplo:
int digitos[10] = {3, 3, 3};
float x[6] = {-0.3, 0, 0.25};
Ejemplo
int digitos[] = {1, 2, 3, 4, 5, 6};
float x[] = {0, 0.25, 0, -0.5};
digitos[0] = 1 x[0] = 0
digitos[1] = 2 x[1] = 0.25
digitos[2] = 3 x[2] = 0
digitos[3] = 4 x[3] = -0.5
digitos[4] = 5
digitos[5] = 6
Procesamiento de un Array
Se rrealiza mediante bucles y en cada paso del bucle se procesa un elemento del
array
Ejemplo: Se desea obtener el promedio ponderado de un alumno
1
Inicio
Para i=1 hasta
Pedir ncursos
ncursos
SumNxC+=nota(i)*cred(i)
Para i=1 hasta SumaCred+=cred(i)
ncursos
Pedir curso(i) Prox. i
nota(i),
cred(I)
Pp=SumNxC/SumaCred
Prox. i
Mostrar
Pp
1
Fin
main()
{
char curso[20];
int ncursos, nota[10], cred[10], i, SumNxC, SumCred;
float Pp;
printf(“Ingresar numero de cursos: “); scanf(“%d”,&ncursos);
for(i = 0; i < ncursos; i++) {
printf(“Nombre curso: “); scanf(“%s”,curso);
printf(“Nota = “); scanf(“%d”, ¬a[i]);
printf(“Crreditos = “); scanf(“%d”,&cred[i]);
}
for(i = 0; i < ncursos; i++) {
SumNxC += nota[i] * cred[i];
SumCred += cred[i];
}
Pp = (float) SumaNxC/SumCred;
printf(“El Prom. Ponderado es %4.2f”,Pp);
}
Donde ptvar es el nombre de la variable puntero y tipo-dato se
refiere al tipo de dato apuntado por el puntero. Recordar que un
asterisco debe preceder a ptvar.
PUNTEROS Y ARRAYS UNIDIMENSIONALES
El nombre de un array es realmente un puntero al primer elemento de ese array.
Sin embargo, si x es un array unidimensional, entonces la dirección al primer
elemento del array puede ser expresada tanto como &x[0] o simplemente como x.
Además, la dirección del segundo elemento del array se puede escribir tanto como
&x[1] o como (x + 1), y así sucesiivamente. En general, la dirección del elemento
(i+1) del array se puede expresar o bien como &x[i] o como (x + i)
#include <stdio.h>
main()
{
static int x[10] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
int i;
Generalizando:
Tipo-dato (*ptvar)[expresion2][expresion3]…[expresion n];
En vez de:
Tipo-dato array[expresion1][expresion2]…[expresion n];
Suponer que x es un array bidimensional de enteros con 10 filas y 20
columnas. Podermos declarar x como
Int (*x)[20]; en vez de int x[10][20];
En la primera declaración x se define como un puntero a un grupo contiguo
de arrays unidimensionales de 20 elementos enteros. Así x apunta al
primero de los arrays de 20 elementos, que es en realidad la primera fila
(fila 0) del array bidimensional original. Similarmente (x+1) apunta al
segundo array de 20 elementos, que es la segunda fila del array
bidimensional original, y así sucesivamente, como se ilustra en la Fig.
x
(x+1)
(x+9)
(x + 1)
*(x + 2) *(x + 2) + 5
(x + 2)
*(*(x + 2) + 5)
Suma de Matrices con punteros
#include “stdio.h”
#define MAXCOL 30
main()
{
int nfilas, ncols;
// definición de punteros
int (*a)[MAXCOL], (*b)[MAXCOL], (*c)[maxcol];
// prototipo de funcion
void leerentrada(int (*a)[MAXCOL], int nfilas, int ncols);
void calcularsuma(int (*a)[MAXCOL], int (*b)[MAXCOL], int (*c)[MAXCOL],
int nfilas, int ncols);
void sacarsalida(int (*c)[MAXCOL], int nfilas, int ncols);
en vez de
x [1 ]
S e g u n d o a r r a y u n id im e n s io n a l
(x [2 ] + 5 )
x [2 ]
T e r c e r a r r a y u n id im e n s io n a l
*(x [ 2 ] + 5 )