INTRODUCCIÓN  AL LENGUAJE C

 

EL lenguaje C es el resultado de un proceso de desarrollo que inició con un lenguaje denominado BCPL. Este influenció a otro llamado B (inventado por Ken Thompson). En los años 70; éste lenguaje llevó a la aparición del C.

Con la popularidad de las microcomputadoras muchas compañías comenzaron a implementar su propio C por lo cual surgieron discrepancias entre sí.

Por esta razón ANSI (American National Standars Institute, por sus siglas en inglés), estableció un comité en 1983 para crear una definición no ambigua del lenguaje C e independiente de la máquina que pudiera utilizarse en todos los tipos de C.

Algunos de las C existentes son:

-Quick C

-C++

-Turbo C

-Turbo C ++

-Borland C

-Borland C++

-Microsoft C

-etc.

Este manual se basa en el C estándar el cual puede utilizarse en todos los tipos de C.

C es un lenguaje de programación de nivel medio ya que combina los elementos del lenguaje de alto nivel con la funcionalidad del ensamblador.

Su característica principal es ser pórtale, es decir, es posible adaptar los programas escritos para un tipo de computadora en otra.

Otra de sus características principales es el ser estructurado, es decir, el programa se divide en módulos (funciones) independientes entre sí.

El lenguaje C inicialmente fue creado para la programación de

-Sistemas operativos

-Intérpretes

-Editores

-Ensambladores

-Compiladores

-Administradores de bases de datos.

Actualmente, debido a sus características, puede ser utilizado para todo tipo de programas.

 

 

 

ELEMENTOS GENERALES DE UN PROGRAMA EN C

 

Aunque cada uno de los programas son distintos, todos tienen características comunes. Los elementos de un programa en C son los siguientes:

Comentarios

Inclusión de archivos

main()

{

variables locales

flujo de sentencias

}

Definición de funciones creadas por el programador utilizadas en main()

Veamos en que consiste cada uno:

Comentarios: se identifican porque van entre diagonales y asterisco. Nos sirve para escribir información que nos referencia al programa pero que no forme parte de él. Por ejemplo especificar que hace el programa, quien lo elaboró, en que fecha, que versión es, etc.

 

Inclusión de archivos: Consiste en mandar llamar a la o las bibliotecas donde se encuentran definidas las funciones de C (instrucciones) que estamos utilizando en el programa.

En realidad, la inclusión de archivos no forma parte de la estructura propia de un programa sino que pertenece al desarrollo integrado de C. Se incluye aquí para que el alumno no olvide que debe mandar llamar a los archivos donde se encuentran definidas las funciones estandar que va a utilizar.

 

main(): En C, todo está constituido a base de funciones. El programa principal no es la excepción. main() indica el comienzo de la función principal del programa la cual se delimita con llaves.

Variables locales: Antes de realizar alguna operación en el programa, se deben declarar la(s) variable(s) que se utilizarán en el programa.

 

Flujo de sentencias: Es la declaración de todas las instrucciones que conforman el programa.

Definición de funciones creadas por el programador utilizadas enmain(): Finalmente,se procede a definir el contenido de las funciones utilizadas dentro de main(). Estas contienen los mismos elementos que la función principal.

Para ejecutarlo, realice los siguientes pasos:

* Oprima la tecla F10 y seleccione la opción File.Posicionese en Open y pulse enter.

* Escriba el nombre del archivo donde va a guardar su programa,que no exceda de ocho letras. Automáticamente se le agregará la terminación .c .Digite<ENTER>.

*Transcriba el programa.

 

Importante:

Después de cada asignación o función es imprescindible colocar un punto y coma (;) ya que éste es un terminador de proposiciones. En caso de que no se escriba, se marcará un error a la hora de compilar el programa.

 

En C, los comandos deben ser escritos con letras minúsculas, tal como se ha hecho en este programa ejemplo. En el caso de las variables o la funciones definidas por el usuario la situación es similar:

no es lo mismo

Apellido que

apellido que

APELLIDO

 

Aunque para nosotros es lo mismo, el compilador de C, los toma como tres nombres distintos. Por tanto, asegúrese de mandar llamar las variables o funciones exactamente de la misma forma en que las declaró.

Después de que el programa se encuentra en la ventana activa de edición, procedamos a compilarlo:

 

*Presione la tecla F10, escoja el submenú Compile. Escoja la opción Compile.

Si su programa presenta errores, puede presionar la tecla F1

para saber las posibles causas del error. Corríjalos y vuélvalo a compilar hasta que hasta que la compilación sea exitosa.

Los warnings (advertencias) indican posibles errores en la estructura del programa. Si usted está seguro de que su programa está correcto, ignórelos. No le causarán problemas a la hora de correrlo aunque lo ideal sería que no las hubiera.

 

Si no se encontraron errores, proceda a ejecutarlo:

- Escoja el submenú Run.

-Presione <ENTER> en la opción RUN

 

a)

 

/*Programa que despliega un mensaje de bienvenida en la pantalla*/

#include<stdio.h>

#include<conio.h>

void main()

{

clrscr();

gotoxy(20,10);

printf("BIENVENIDO AL CURSO DE C ESTANDAR");

delay(2500);

}

 

b)

 

 /*Programa que calcula el número de dias vividos*/

#include<stdio.h>

#include<conio.h>

void main()

{

char nombre[50];

int edad;

clrscr();

printf("¿Cómo te llamas?\n ");

scanf("%s",nombre);

printf("¿Cuántos años tienes?\n");

scanf("%i",&edad);

edad=edad*365;

gotoxy(5,10);

printf("%s, has vivido %i dias",nombre,edad);

gotoxy(40,22);

printf("Pulsa cualquier tecla para terminar...");

getch();

}

 

c)

 

 /*Programa que saca el promedio de 3 números*/

#include<stdio.h>

#include<conio.h>

void main()

{

float numero;

float promedio=0;

clrscr();

printf("Dame el primer número: ");

scanf("%f",&numero);

promedio+=numero;

printf("Dame el segundo número: ");

scanf("%f",&numero);

promedio+=numero;

printf("Dame el tercer número: ");

scanf("%f",&numero);

promedio+=numero;

promedio=promedio/3;

printf("El promedio es %f",promedio);

gotoxy(40,22);

printf("Presione cualquier tecla para terminar...");

getch();

}

 

 

d)

 

/*Programa que convierte un número decimal entero a octal*/

#include<stdio.h>

#include<conio.h>

void main()

{

int numero;

clrscr();

printf("Numero entero en decimal: ");

scanf("%i", &numero);

printf("\n\nSu representacion en octal es %o");

gotoxy(40,22);

printf("Presione cualquier tecla para terminar...");

getch();

}

 

 

e)

 

/*Programa que manda un mensaje de advertencia*/

#include <dos.h>

#include<conio.h>

int main(void)

{

clrscr();

gotoxy(28,11);

printf("¡ P E L I G R O ! ");

sound(250);

delay(600);

sound(80);

delay(600);

delay(600);

nosound();

return 0;

}

 

 

 

TIPOS DE DATOS

 

Los tipos de datos son identificadores que usa cada lenguaje para saber la clase de información que va a tomar una variable. Por ejemplo: si quiero utilizar la variable "cantidad" para almacenar un número entero, declararé "cantidad" como una variable de tipo int lo que significa sólo aceptará valores de tipo entero.

Los tipos de datos básicos que maneja C son:

char identifica el contenido de la variable que se declare como caracter. Su longitud es de 1 byte.

int se refiere a valores de tipo entero. Ocupa 2 bytes.

float indica que la variable recibe datos de tipo real con aproximadamente 6 digitos de precisión. Su longitud en bytes es de 4.

double define variables que aceptan datos de tipo real con 12dígitos de precisión. Cada variable ocupa 8 bytes de memoria.

void Este tipo de dato sirve para declarar funciones que no devuelven valores. Su cantidad de bytes es cero.

Además de los anteriores, podemos crear otros tipos de datos alcombinarlos con modificadores de tipo como signed, unsigned,long y short.

También existen los modificadores de acceso que sirven para controlar las formas en que se acceden o se modifican las variables. Estos modificadores son const y volatile

Una variable de tipo const trabaja como una constante ya que recibe sus valores por una inicialización explícita o bien por algún medio dependiente del hardware. Por ejemplo:

const int x;

crea la variable entera x que no puede ser modificada por el programa pero si inicializada.

 

El modificador volatile se usa para indicar al compilador que el valor de una variable se puede cambiar por medios externos (no especificados) al programa. Por ejemplo la dirección de una variable global puede ser pasada a la rutina del reloj del sistema operativo y usada para mantener el tiempo real del sistema. En este caso, el contenido de la variable es cambiado sin que haya una sentencia que así lo indique.

Es importante que respetemos estos tipos de modificadores ya que ayudan a la optimización de las funciones del compilador.

Se pueden usar ambos modificadores juntos.

 

 

DECLARACION DE VARIABLES

 

Después de conocer los tipos de datos existentes en C, veamos como se declaran las variables:

Forma general:

Tipo_de_dato Variable:

Donde tipo_de_dato puede ser cualquiera que esté permitido en C y Variable una palabra que designemos para recibir datos.

No hay cantidad máxima de caracteres (letras o palabras) que podamos utilizar para crear variables pero si hay dos que tengan los primeros 6 caracteres significativos iguales, C las tomará como si fuesen la misma.

Tampoco podemos utilizar como variables aquellos términos que ya han sido definidos previamente por el propio C o por el usuario como variables de otro tipo.

Las variables de tipo cadena se declaran como un conjunto de caracteres. Por ejemplo:

char nombre[30];

Donde 30 es el número de caracteres máximo que puede tener la cadena.

De acuerdo al lugar donde se declaran, las variables pueden ser globales, formales o locales.

Variables locales:

Son aquellas que se declaran dentro de un conjunto de código relacionado lógicamente entre si (sentencias de control o funciones) Por ejemplo:

 

funcion_A()

{

int x;

.

.

.

}

funcion_b()

{

int x;

.

.

.

}

En las funciones anteriores, declaramos dos variables llamadas "x" con el mismo tipo. Si tratas de utilizar alguna de las variables fuera de las funciones a las que pertenecen, se marcará un error porque el tipo sólo ha sido definido para utilizarse dentro de las llaves donde fue declarada.

El que ambas variables se llamen "x" no quiere decir que sean la misma o que ocupen el mismo lugar en la memoria dado que las variables locales se crean y se destruyen cada vez que se sale del bloque en el que son declaradas por tanto, también su contenido se pierde al salir del él.

Parámetros formales:

Muchas de las funciones necesitan argumentos. Los argumentos son datos que recibe la función desde el exterior. A las variables en que sirven para transmitir estos datos se les llama parámetros formales dela función. Su comportamiento es el mismo al de cualquier otra variable local.

 

Veamos el siguiente ejemplo:

 

/*Devuelve la suma de dos números dados */

 

suma(int a,int b)

{

a+=b; /*A a toma el valor de a+b*/

return(a);

}

 

Esta función realiza la suma de dos números. Utiliza dos parámetros formales: a y b los cuales deben ser declarados en la llamada a suma() para luego poder utilizarlas dentro de la función como variables locales. También se destruyen al salir de la función.

Se debe tener mucho cuidado de que los parámetros formales que se declaran sean del mismo tipo que los valores que se introducen cuando se manda llamar la función porque podría obtener resultados inesperados.

 

Variables globales:

 

Este tipo de variables se conocen a través de todo el programa por lo cual se pueden usar en cualquier parte de la ejecución de éste. Se declararan antes de utilizar la variable por primera vez. Se recomienda que sea al principio del programa para mantener un orden.

Consideremos el ejemplo que se presenta a continuación, donde utilizamos los diferentes tipos de variables:

 

             /* Programa que eleva al cuadrado  un número real */ 

            #include<math.h> 

           main() 

          { 

               float x; 

              printf("Dame el número  que quieres elevar al cuadrado: "); 

              scanf("%f",&x); 

              x=cuadrado(x); 

              printf("El cuadrado  es%f",x); 

           } 

 

           cuadrado(float n) 

           { 

                 n=n*n; 

                return(n); 

            }

 

Si analizamos las sentencias, vemos que x es una variable global mientras que n es un parámetro formal que nos sirve como variable local para efectuar la función.

 

 

ESTRUCTURAS

Las estructura es un tipo de datos compuesto que permite el C. Se define como un conjunto de variables relacionadas lógicamente entre sí que se referencia bajo un mismo nombre.

Su forma general de definición es

 

struct nombre_de_la_estructura{

tipo nombre_variable;

tipo nombre_variable;

tipo nombre_variable;

.

.

.

}variables_tipo_nombre_de_la_estructura;

 

donde nombre_de_la_estructura o bien variables_tipo_nombre_de_la_variables_estructura pueden omitirse pero no ambos.

 

Veamos un ejemplo:

struct agenda{

char nombre[30];

char direccion[20];

char ciudad[15];

int edad;

} actor;

 

agenda es el nombre de la estructura; nombre, dirección, ciudad y edad son los campos o elementos de la estructura y actor es la variable declarada de ese tipo.

Los elementos individuales de la estructura se referencia utilizando el operador punto. Por ejemplo:

actor.nombre="Harrison Ford";

Aquí se está asignando la cadena "Harrison Ford" al campo nombre de la variable actor.

El nombre de la variable tipo estructura seguido del punto y del nombre del campo, referencia ese campo individual de la estructura. a todos los elementos de la estructura se accede del mismo modo. La forma general es:

 

variable_estructura.nombre_elemento

Así, para imprimir en pantalla el campo edad de la variable actor, escribimos:

printf("%d",actor.edad);

 

De la misma forma podemos utilizar gets (función que lee una cadena desde el teclado) para obtener un valor para actor, domicilio como se muestra aquí.

gets(actor.domicilio);

Las variables tipo estructura son útiles para crear unidades de información de diferentes tipos lógicamente relacionada entre sí. Tal es el ejemplo de los datos de una agenda( en una variable guardas su nombre, dirección, número telefónico, etc) o de los datos de un elemento de la tabla periódica (en cada variable guardas su nombre, símbolo, número atómico, etc).

 

Sentencias de asignación

 

La forma general de asignar valores a una variable es:

 

nombre_variable=expresión

 

Expresión puede ser desde una constante hasta una combinación de variables, operadores y constantes.

Si se mezclaran variables de un tipo con las de otro, se aplica la regla de conversión de tipos que consiste en que el valor del lado derecho de la asignación se convierte al tipo de dato de la variable del lado izquierdo (que es la que recibirá el dato) siempre y cuando ésta última tenga mayor longitud en bytes. Por ejemplo, una variable int podemos asignarla a otra variable de tipo float pero no viceversa.

 

 

INICIALIZACIÓN DE VARIABLES

 

Inicializar una variable es el darle un valor después que se ha declarado pero antes de que se ejecuten las sentencias en las que se emplea.

En C, se les puede dar un valor a la vez que se declaran. Únicamente se coloca el signo igual y una constante después del nombre de la variable. La forma general de inicialización es:

tipo nombre_variable = constante;

int uno=1;

float pi=3.1416;

char respuesta='s';

Regularmente, las variables locales se inicializan cada vez que se entra en el bloque en el que están definidas mientras que las globales son inicializadas al principio del programa.

 

Constantes

 

Constantes son los valores que no pueden ser modificados. En C, pueden ser de cualquier tipo de datos.

Además de los ejemplificados anteriormente, Podemos crear constantes de caracteres con barra invertida. Estos corresponden a los caracteres que son imposibles introducir desde el teclado.

Se usan de la misma forma que los caracteres normales

 por ejemplo:

 

printf('Esta es una prueba\n");

ch='\0';

 

 

OPERADORES

Un operador es un símbolo que indica al compilador que realice manipulaciones lógicas o matemáticas específicas.

Operadores Aritméticos

Cuando se aplica el símbolo / a un entero o a un carácter, cualquier residuo se trunca. Por ejemplo 5/3 será 1 en división entera.

El menos monario hace el efecto de multiplicar su único operando por-1 es decir, cualquier número precedido por un signo menos cambia de signo.

Incremento y decremento

Dos operadores característicos de C son el incremento y el decremento.++ aumenta en uno a su operando y -- le resta 1. Es decir,

x=x+1 es equivalente a ++x;

x=x-1 equivale a --x

Los operandos de incremento y decremento pueden ir antes o después del operador sin embargo existe una diferencia. Veamos el siguiente ejemplo:

x=10;

y=x++; Aquí y tomará el valor de 10.

y=++x; En este caso, y tomará el valor de 11.

 

Los operadores del mismo nivel de precedencia son evaluados por el compilador de izquierda a derecha. Por supuesto, se puede utilizar paréntesis para ordenar la evaluación.

Los paréntesis en C son tratados igualmente que en otro tipo de lenguajes de computadora; se forza a que una operación o un conjunto de operaciones tengan un nivel de precedencia mayor.

El lenguaje C admite abreviaturas que simplifican la escritura de ciertos tipos de sentencias de asignación. Por ejemplo:

 

x=x+10; es igual a x+=10;

 

También, conviene utilizar paréntesis para hacer más claro el orden en que se producen las evaluaciones, tanto para la persona que lo elabora o para los que después tengan que seguir el programa.

Operadores relacionales y lógicos

Los operadores relacionales son los que determinan la forma de vinculación entre dos valores. A su vez, los lógicos evalúan la forma de relacionarse dos valores.

 

 

Ciclo de vida de un programa

 

Al igual que en la resolución de problemas, existen ciertos pasos que debemos seguir para la creación de programas. Estos son:

1. Análisis del programa:
Consiste en estudiar minuciosamente el programa que queremos elaborar, que características debe de tener, con que elementos contamos para realizarlo, etc.

2. Elaborar el pseudo código:
El pseudo código es cualquier lenguaje que nosotros entendamos y que nos sirva para elaborar algoritmos.

Un algoritmo es el conjunto de manipulaciones matemáticas y de estructuras funcionales que nos permitan realizar un programa que ejecute una o varias actividades específicas. Para elaborarlo, debe pensarse detallada y ordenadamente todos los pasos que realizará el programa.

En caso de que el programa sea muy extenso, podemos determinar un pseudocódigo donde se determinen las funciones principales del programa y acto seguido elaborar el pseudocódigo de esas funciones.

3.Codificar el pseudocódigo:
Después de tener el pseudocódigo del programa, el siguiente paso es codificarlo en el lenguaje que escojamos.En este caso, C.

La ventaja de tener el pseudocódigo del programa es que podemos codificarlo en él o los lenguajes que deseemos.

4.Depuración:
Después de codificar el programa, generalmente quedan pequeños detalles a corregir por tanto, el siguiente paso es la depuración del programa.

Depurar es pulir el programa para que todo funcione como nosotros deseamos. Para esto, es necesario probar el programa cuantas veces sea necesario para asegurarnos de que funcione correctamente.

5.Mantenimiento del programa:
Este es el último paso del ciclo de vida de un programa. Se realiza después de que el programa ya ha tenido vida útil y, debido a las nuevas necesidades de los usuarios, es necesario hacer modificaciones al programa.

Cuando estos cambios se hacen muy grandes, se debe elaborar un nuevo programa.

 

A partir de estos pasos, elaboremos un programa que encuentre las raíces de un polinomio de segundo grado.

1. Este programa encontrará las raíces de un polinomio de segundo grado. Necesitamos:

-El polinomio al cual se le va a encontrar la raíz. Como todos los polinomios tendrán la misma forma, sólo se pedirán los coeficientes los cuales serán de tipo real. Por lo cual, necesitaremos dos variables de este tipo.

-El resultado se almacenará en dos variables de tipo real y se desplegará en pantalla.

-Especificar en pantalla lo que hace el programa.

2.

comienza

variables: a,b,c:real;

escribe('Este programa encuentra las raíces reales de un polinomio de segundo grado de la forma

axÆ+bx+c

donde a,by c pueden ser cualquier valor real.

Acontinuación, escribe los coeficientes de la ecuación: ');

escribe('a= ');

lee(a);

escribe('b= ');

lee(b);

escribe('c= ');

lee(c);

x1=(-b-Ö(bÆ-4ac))/2a;

x2=(-b+Ö(bÆ-4ac))/2a;

escribe(' Las raíces de la ecuacion : ');

primera=x1

segunda=x2 ');

3.Ahora veamos como se codifica en C:

/*Programa que encuentra las raíces de una ecuación cuadrada, de acuerdo a las fórmulas: (-b±Ö(bÆ-4ac))/2a */

#include<math.h>

main()

{

float a,b,c,x1,x2;

printf("Este programa encuentra las raíces reales\n");

printf("de la ecuación de la forma\n");

printf(" axÆ+bx+c=0 \n");

printf("A continuación, escriba los coeficientes\n");

printf("de la ecuación:\n");

printf("a= ");

scanf("%f",&a);

printf("b= ");

scanf("%f",&b);

printf("c= ");

scanf("%f",&c);

x1=pow(b,2);

x1=x1-(4*a*c);

x1=-b+sqrt(fabs(x1));

x1=x1/(2*a);

x2=pow(b,2);

x2=x2-(4*a*c);

x2=-b-sqrt(fabs(x2));

x2=x2/(2*a);

printf("x1= %f\n");

printf("x2= %f\n);

getch();

}

En el programa anterior, utilizamos \n para indicar que el cursor se posicione en el siguiente renglón de la pantalla.

scanf() nos permite leer información desde el teclado.

La fórmula la ejecutamos por pasos, para que pueda ser más legible.

Si observas, aunque la fórmula es la misma, alteramos su orden.¿Qué pasaría si lo hubiéramos seguido?

 

Continuación de Programación en C

Regresar  < Back >

Regresar a la  Pagina Principal

 

By “Hackers Mexico”

 


STARMEDIA        CERRAR