Programación estructurada (carmen zamudio)

Page 1

Manual de programación en C Aprende a programar en Lenguaje C en 21 días María del Carmen Zamudio 01/01/2014


El lenguaje de Programación

Historia El lenguaje C es un lenguaje de programación desarrollado en laboratorios Bell por Dennis M. Ritchie en 1972, sus antecesores fueron los lenguajes B y BCPL. El lenguaje C fue desarrollado para crear software de sistemas con este lenguaje se desarrolló el sistema operativo UNIX, por su eficiencia es usado para crear diferentes aplicaciones (industriales, científicas, simuladores). Se le clasifica como lenguaje de medio nivel con características de bajo nivel; pero contiene estructuras de lenguajes de alto nivel, por lo tanto es un COMPILADOR. Por su popularidad se generaron varias versiones por lo que el lenguaje C se tuvo que estandarizar, siendo la primera en estándares de ANSI, conocido comúnmente como ANSI C, obteniendo más tarde la certificación de la estandarización en ISO/IEC 9899:1990. Es decir; si creamos un programa bajo este estándar el código será portátil y puede compilarse en diferentes computadoras.

El lenguaje C ha tenido gran evolución misma que han permitido generar otros lenguajes como el C++ , Objetive C. También ha sido ejemplo para crear otros lenguajes que no son compatibles con C como el Java, JavaScript, C#. El lenguaje C es uno de los lenguajes de programación estructurada más utilizados en nuestros días. El principal componente estructural de C es la función. En C, las funciones son bloques en los cuales ocurren las actividades de un programa. Esto nos permite separar los programas en tareas, lo que nos conduce a la programación modular.

Características del lenguaje C C es un lenguaje de programación de propósito general, cuyas principales características son: Es un lenguaje flexible que permite la programación estructurada Es un lenguaje compilado Las palabras claves que se utilizan son pocas Se pueden utilizar pocas expresiones Uso de gran cantidad de tipo de datos y operadores Contiene bibliotecas (rutinas utilizadas en el lenguaje de programación C) que permiten utilizar funciones, tales como las matemáticas y el manejo de archivos Se puede accesar a la memoria a través de apuntadores Facilidades de aprendizaje Permite realizar programas modulares Produce código objeto optimizado Reemplaza a la programación en ensamblador por su codificación de alto y bajo nivel


Compilación de un programa en C Para compilar un programa escrito en C se deben de seguir los pasos que se describen a continuación: Primero se debe editar (capturar) el programa directamente en el editor del lenguaje o bien en cualquier editor de textos, teniendo siempre el cuidado de que al guardar el archivo se le tendrá que colocar la extensión ".c". El programa una vez editado se debe de Compilar, este proceso se divide en tres fases: el preprocesador, la compilación, y el enlazamiento. El preprocesador en esta fase se realizan actividades como cambiar los nombres de las constantes por el valor real que tomará en el programa. El compilador convierte el programa en lenguaje C, a lenguaje máquina por lo que se genera programa objeto con extensión ".obj". El enlazamiento agrega al programa objeto las funciones o módulos que forman parte del programa pero que se encuentran en archivos separados incluyendo las librerías, para finalmente genera un programa ejecutable con extensión ".exe".

Esquema de proceso de compilado de un programa en C.


Programación Básica

Etapas para la creación de un programa a) Definición del problema En dicha fase se proporciona el enunciado del problema el cual debe ser claro ya que de esto depende lo que queremos que realice la computadora; es de suma importancia tener un entendimiento claro del problema, por lo tanto en esta fase se entiende el problema.

b) Análisis del problema En esta fase se identifican tres rubros importantes Datos de entrada.- consiste en qué información se requiere para obtener el resultado Datos de salida.- es la información que se desea como resultado Procesamiento.- métodos o fórmulas que se necesitan para procesar o transformar los datos y que se obtengan los datos de salida deseados.

c) Diseño Esta etapa se centra en el diseño de la solución del problema tomando como base lo que se obtuvo en el análisis. Algunos autores indican que en esta etapa se debe de representar el problema a través de un algoritmo, un pseudocódigo y un diagrama de flujo. Otros autores tienen algunas modificaciones para esta etapa; es decir, sugieren que el algoritmo se represente solo a través de un diagrama de flujo o pseudocódigo pero no realizar los tres.

Bloque de código en C Una forma de estructurar en C es usando bloques de códigos. Un bloque de código es un grupo de instrucciones conectadas lógicamente el cual es tratado como una unidad. Un bloque está construido por un conjunto de instrucciones colocadas entre llaves { }. Por ejemplo: if (a>3) { printf("hola"); printf("%d",a); //código }

// bloque // de getch();

Partes de un programa en C. La estructura básica de un programa en C, es la siguiente: #include<conio.h> #include<stdio.h> tipo nombre (parámetros) Declaración de variables globales y constantes

Archivos de Cabecera: C viene con librerías estándar las cuales proveen a los programas de las funciones que requieren para la realizar las tareas del programa. Prototipos de Funciones del Programador

void main() { // instrucciones }

Función Principal. Es la función desde donde todo programa se empieza a ejecutar, por lo que siempre debe estar presente.

funcion1( ) { // instrucciones} Código de las funciones del programador funcion2( ) { // instrucciones} … funcionN( ) { // instrucciones}

Ing. María del Carmen Zamudio Espinosa

pág.3


Programación Básica

La estructura de un programa en C muy fácil si se ha realizado un buen pseudocódigo, ya que el lenguaje C está estructurado de forma similar. Observemos el cuadro comparativo entre un pseudocódigo y la estructura que utiliza C conjuntamente en la parte inferior se describen los elementos que se describen la estructura de un programa en C.

Pseudocódigo

Lenguaje C /*Comentarios*/ Declaración (librerías)

Prototipos de funciones Declaración de variables globales y constantes

archivos

de

cabecera

Prototipos de funciones Declaración de variables globales y constantes main( ) // Programa principal {

Programa principal() Inicio Declaración de constantes (locales) Declaración de variables (locales) Cuerpo del programa (estructuras de control)

de

Declaración de constantes (locales) Declaración de variables (locales) Cuerpo del programa (estructuras de control) } Declaración de funciones { Declaración de constantes (locales) Declaración de variables (locales) Instrucciones que conforman la función }

Fin Declaración de funciones Inicio Declaración de constantes (locales) Declaración de variables (locales) Instrucciones que conforman la función Fin

Comentarios Es común que en las primeras líneas se inserten comentarios que describen que hace el programa, quién lo realizó, la fecha de creación, etc. Para lo cual se utilizan los caracteres /* y */ al inicio y fin del comentario. También se pueden utilizar en el transcurso del programa para identificar algún punto en particular.

Declaración de archivos de cabecera En el encabezamiento de los programas encontraremos instrucciones para el compilador de las que hablaremos ampliamente más adelante. Por ahora, nos fijaremos sólo en la directiva #include. Por ejemplo, la línea

#include <stdio.h>

Ing. María del Carmen Zamudio Espinosa

pág.4


Programación Básica

le indica al compilador que incluya en el programa datos del archivo stdio.h el cual se suministra como parte del compilador y aporta información sobre aspectos relacionados con la E/S de datos : funciones como printf(), scanf(), getchar(), ... Es conveniente añadir siempre dicha línea pues no hay regla segura de cuando se necesitará esa información; además, el compilador sólo tomará del mencionado archivo la información que necesite y cualquier otra que no sea de utilidad no formará parte del programa y, por tanto, no hará que sea más largo innecesariamente.

La siguiente lista son los archivos de cabecera (librería) más utilizados en C: Libreria stdio.h

contiene declaraciones de rutinas de entrada/salida

math.h

contiene declaraciones de funciones matemáticas

conio.h

contiene declaraciones para el manejo de los puertos de entrada/salida y consola contiene declaraciones para manejo de cadenas

string.h ctype.h

Función

contiene declaraciones para clasificador de caracteres

Prototipos de funciones En esta parte del programa se declaran las funciones que el usuario va a generar para su uso, declarando los tipos de datos que va a utilizar así como los parámetros. Declaración de variables globales y constantes En este lugar se declararán los tipos de datos que se utilizaran en todo el programa y si son variables, constantes, arreglos, etc.

main( ) // Programa principal Dentro del main() se indica todas las instrucciones que conforman el programa y que sirven para solicitar datos, almacenarlos en la memoria, realizar operaciones aritméticas, manejo de estructuras de control,etc. Antes de la primera instrucción se debe colocar la llave { que indica el inicio de las instrucciones y al final } que indica que se han terminado las instrucciones. Como pudimos apreciar en el cuadro anterior también podemos volver a declarar constantes y variables pero están serán locales; es decir, solo son ocupadas por las instrucciones que se encuentran dentro del programa principal.

Declaración de funciones En esta sección se colocará el conjunto de instrucciones que utiliza el programa y que no están definidas en las librerías ya que realizan tareas que le permitirán al programa principal cumplir con su cometido. Como primera

Ing. María del Carmen Zamudio Espinosa

pág.5


Programación Básica

línea debe contener la instrucción que se colocó en el prototipo de la función pero sin el punto y coma “;”, también utiliza las llaves { } para indicar que inician las instrucciones de la función y que finalizan; además podemos declarar variables y constantes locales. Más adelante veremos este tema con mayor detalle (ver modularidad).

A continuación colocaremos un pequeño programa en C para identificar con mayor claridad sus elementos: /* programa que calcula el cubo de los 10 primeros números naturales con la ayuda de una función */ #include <stdio.h> int cubo (void): int i; main() { int cub; for (I = 1; I >= 10; I ++) { cub = cubo(); printf (“\n El cubo de %d es : } } int cubo (void) { return (i*i*i*); }

Ing. María del Carmen Zamudio Espinosa

Comentarios Declaración de archivos de cabecera (librerías)

Prototipos de funciones Declaración de variables globales y constantes main( ) // Programa principal { Declaración de constantes (locales) Declaración de variables (locales) Cuerpo del programa (estructuras de control)

%d”, i, cub);

}

Declaración de funciones { Declaración de constantes (locales) Declaración de variables (locales) Instrucciones que conforman la función }

pág.6


Programación Básica

Identificadores Un identificador es el nombre que se le da a una variable, constante, función, etiqueta u otro objeto utilizado en C. Un identificador en C puede variar entre 1 y 32 caracteres. El primer carácter debe ser una letra o un subrayado ( _ ) seguido de una secuencia de caracteres siendo letras, numero o subrayados. Ejemplo de identificadores: correcto incorrecto Mexicali 3f32 cont pot*10 sueldo Fact! f_32 Num 3 Fila12s Dia..9

Tipos de datos Existen 5 tipos de datos importantes en C: Tipo char int float double void

Descripción carácter Números enteros Números Reales Números Reales Nulo

Tamaño en bytes 1 byte 2 bytes 4 bytes 8 bytes 0 bytes

Rango 0 al 255 -32768 al 32767 3.4E-38 al 3.4E+38 1.7E-308 al 1.7E+308 sin valores

Ejemplos de datos que se guardan en las variables: char : 'a', 'B', '7', '*', '/n'; int: 89, 0, -78 float: 1.67, 9.0, -89.67E-9; double: 789.97E300, 1.5 Existen igualmente algunos modificadores que en unión con los tipos de datos básicos aumentan la cantidad de ellos, estos son: signed, unsigned, long y short. Tipo unsigned char signed char unsigned int signed int short int unsigned short int signed short int long int unsigned long int signed long int long double

Ing. María del Carmen Zamudio Espinosa

Rango 0 al 255 -128 al 127 0 al 65535 -32768 al 32767 -32768 al 32767 0 al 65535 -32768 al 32767 -2147483648 al 2147483647 0 al 4294967295 -2147483648 al 2147483647 1.7E-308 al 1.7E+308

Tamaño en bytes 1 1 2 2 2 2 2 4 4 4 8

pág.7


Programación Básica

El lenguaje C tiene 43 palabras reservadas que en combinación con la sintaxis formal de C forman el Lenguaje de programación C. Lista que a continuación se muestra:

En C las mayúsculas y minúsculas se consideran diferentes, esto es, case es diferente de Case y CASE Las palabras reservadas no puede ser utilizadas como nombres de variable o nombre de función.

Declaración de las variables Todas las variables deben ser declaradas antes de ser utilizadas de la siguiente manera: <tipo de dato> <nombre de variable>; ejemplo:

int numero;

donde int es el tipo de dato y numero es el nombre que se le dio a la variable que guarda un dato de tipo entero. Toda variable local debe ser declarada dentro de la función en la cual va a operar y son declaradas siempre inmediatamente después de una llave que abre '{'.

Asignación en C La instrucción básica en C es la asignación. Tiene la forma:

variable = expresión; en donde la expresión puede ser desde una constante hasta operaciones mas complejas. ejemplos: numero = 38 numero = b* 24 n mero = pow(5, 4);

Operadores Aritméticos + * / % -++

suma multiplicación resta división división modular decremento en una unidad incremento en una unidad

Jerarquía de los operadores aritméticos El orden en se realizan las operaciones aritméticas o jerarquía de los operadores aritméticos es: ( ) ++, -*, /, % +, -

Ing. María del Carmen Zamudio Espinosa

mayor jerarquía

menor jerarquía

pág.8


Programación Básica

Por ejemplo en la siguiente ecuación la expresión se evaluará de la forma siguiente: a = 5 + 4 / 2 - 3 % 5; primero se realiza la operación 4 / 2, después 3 % 5 y por último se realiza 5 + resultado de la división 4/2 resultado de la división modular 3%5 : a=5+2-3%5a=5+2 -3 a=7-3a=4 Ahora bien también se utilizan los paréntesis como símbolos de agrupación y los cuales tienen la mayor jerarquía, esto es, primero se realiza lo que se encuentre encerrado entre ellos y si existen paréntesis dentro de paréntesis primero se realizan los internos y posteriormente los externos a = ( 5 + 4 ) / 3; primero se realiza la suma y después la división.

Operadores relacionales y lógicos A diferencia de otros lenguajes, una expresión de relación o una expresión lógica, si es cierta toma el valor 1, y si es falsa toma el valor 0. Por ejemplo, la expresión var_entera = ( 'b' > 'a' ); le está asignando 1 a la variable var_entera. La clave de los conceptos de operadores relacionales y lógicos es la idea de verdadero y falso. En C, verdadero es cualquier valor distinto de 0. Falso es 0. Las expresiones que utilizan los operadores relacionales y lógicos devolverán 0 para falso y 1 para verdadero.

Operador

Operadores relacionales Acción

> >= < <= == != Operador

Mayor que Mayor o igual que. Menor que. Menor o igual que. Igual. Distinto. Operadores lógicos Acción

&& || !

AND (Y) OR (O) NOT (NO)

Salida y entrada de datos Las operaciones de entrada y salida de datos se realizan mediante funciones, funciones que deben ser llamadas de alguna parte, la cual es conocida como librerías o bibliotecas: en C las funciones de salida y entrada son: printf(), para salida y scanf(), para entrada. Ambas están definidas en la librería stdio.h, por lo que hay que incluirla en el programa.

Ing. María del Carmen Zamudio Espinosa

pág.9


Programación Básica

Salida de Datos El comando más utilizado para salida de datos en modo texto es

printf printf tiene varias formas de uso: 1) Solo mostrar texto. En este caso la sintaxis es la siguiente: printf ("Mensaje que desea enviar a la pantalla"); 2) Si el mensaje incluye valores provenientes de variables o expresiones, entonces es necesario usar uno o más especificadores de formato. La sintaxis es printf("Mensaje %<especificador>", variable o expresión); donde <especificador> se sustituye por un especificador de formato apropiado para el tipo de variable que se desee incluir en el mensaje. La siguiente tabla muestra los especificadores de formato más comunes: Especificado r %c %d %f %e

Descripción un solo carácter un valor entero decimal un valor fraccionario un valor fraccionario expresado en notación científica con e minúscula.

%E %g %G %o %s %u %x

un valor fraccionario expresado en notación científica con E mayúscula. escoge entre %e y %f el que sea mas corto escoge entre %e y %f el que sea mas corto en mayúscula un número en octal (base ocho) una cadena de caracteres un entero decimal sin signo un número en hexadecimal (base 16) con las letras en minúsculas. un número en hexadecimal (base 16) con la letras en mayúsculas

Ejemplos: %X impresión de un mensaje: impresión del contenido de la variable float resultado: impresión de una constante carácter: impresión de una variable carácter: impresión de una expresión (operación):

printf("Como te llamas?:"); printf("El resultado es: %f" , r); printf("El resultado es: %c", 164); printf("El resultado es: %c", letra); printf("El resultado es: %d", 5*3);

Existen algunos caracteres que no pueden mandarse a pantalla directamente, para esto se usa la secuencia escape

Secuencia Descripción \b Backscape. \n brinco de línea. \r Retorno de carro

Ing. María del Carmen Zamudio Espinosa

pág.10


Programación Básica

\t \" \’ \\ \a \f

realiza una tabulación Imprime comillas Imprime el apostrófe Imprime diagonal bocina Avance de página

Por ejemplo: printf("la dirección es http:\\\\fcqi.uabc.mx\\docentes\\palacios"); Con la línea anterior lo que se observa en la pantalla es: http:\\fcqi.uabc.mx\docentes\palacios

Entrada de datos La captura de datos desde teclado se efectúa con el comando scanf, el cual tiene el siguiente formato:

scanf( "Especificador de formato", &variable ); el & (ampersand) representa la dirección en memoria de la variable por lo que siempre debe incluirse, excepto cuando se va a capturar una variable de tipo caracteres. Ejemplo: scanf("%d",&alumnos); scanf("%s", nombre); Especificado r %c %d %f %ld

Tipo de Dato char int float long int

%lf

double

de igual manera que el printf(), debe haber correspondencia de tipo y cantidad entre las variables y los comandos de formato y las variables. Nota: dentro del formato de entrada NO se pueden incluir mensajes.....solo comandos de formato, si se requiere enviar mensajes se tiene que utilizar el printf para enviar dichos mensajes.

CONTADORES Y ACUMULADORES Lenguaje C

Pseudocódigo Ejemplos: cont ← cont + 1 total ← total + y a ← a*2 J ← J–1 x ← x+5

cont = cont + 1; total = total + 1; a = a * 2; J = J – 1; x = x + 5;

Ing. María del Carmen Zamudio Espinosa

pág.11


Programación Básica

INSTRUCCIONES DE

CONTROL DE

FLUJO DEL PROGRAMA

Los programas que se suelen redactar en la práctica incluyen algún tipo de elementos de control lógico, es decir, aparecen comprobaciones de condiciones que se sean ciertas o falsas (selección o decisión), las cuales le indican al programa el flujo que seguirán las mismas. Además, los programas pueden requerir que un grupo de instrucciones se ejecute repetidamente un determinado número de veces o hasta que satisfaga alguna condición lógica (ciclo de repetición). C define tres categorías específicas de instrucciones de control de flujo de programa: selección (if y switch), iteración (while, for y do/while) y salto (break, continue y goto). Además, hay que considerar instrucciones de salto a la instrucción return y a la función exit() ya que afectan al control del programa.

Estructura secuencial En la estructura secuencial, el flujo fluye de sentencia a sentencia. Los ejemplos realizados en la unidad anterior, han sido desarrollados empleando un flujo secuencial. Cabe señalar que una sentencia compuesta es un conjunto de sentencias encerradas entre llaves ({ }) empleadas para indicar un flujo secuencial.

{ sentencia1; sentencia ; 2

sentencia ; 3

: sentencia ; n

}

Ing. María del Carmen Zamudio Espinosa

pág.12


Programación Básica

Ejemplo.- Elaborar un pseudocódigo y programa en C que solicite como entrada 2 números, calcule la suma y devuelva el respectivo resultado. pseudocódigo

Diagrama de Flujo

principal() inicia a,b,c: entero

Inicia

“número”

escribir (“Dame número”) leer (a)

Lenguaje C #include<stdio.h> #include<conio.h> main() { int a,b,c;

a escribir (“Dame número”) leer (b)

printf(“Dame número”); scanf(“%d”,&a); “número”

c

←a+b

escribir (“La suma es: ”,c ) termina

printf(“Dame número”); scanf(“%d”,&a);

b

c= a + b; c← a+b

printf(“La suma es %d”,c); getch(); return 0;

“La suma es”, c

} Termina

Por otra parte, una expresión cualquiera (combinación de operadores, constantes y/o variables) se considera cierta si tiene un valor distinto de 0, y se considera falsa sólo si toma el valor 0. La sintaxis de la sentencia if es if (expresión) sentencia La expresión podrá ser:  de relación: if ( x > y )... 

de lógica: if (sw)...

de aritmética: if ( x + y )...

En caso de que la expresión sea verdadera (en general, si es distinta de 0) se ejecuta la sentencia; en caso contrario, se pasa a ejecutar la siguiente sentencia a if.

Ing. María del Carmen Zamudio Espinosa

pág.13


Programación Básica

INSTRUCCIONES DE CONTROL SELECTIVAS. La sentencia o instrucción puede ser simple o compuesta. Si es simple, consistirá en una sola sentencia terminada en punto y coma. Si es compuesta, contendrá varias sentencias terminadas en punto y coma que están delimitadas por llaves, lo que se conoce como bloque. De una forma más general, la sintaxis de la sentencia if es:

if (expresion) sentencia_1 else sentencia_2 donde la cláusula else es opcional. En esta sintaxis, si expresion es distinta de 0 (cierta), se ejecuta sentencia_1; pero si es 0 (falsa), se ejecuta sentencia_2. Análogamente, sentencia_1 y sentencia_2 pueden ser simples o compuestas. Recuérdese que sólo se ejecuta el código asociado con if o el código asociado con else, pero nunca ambos. El formato general de la sentencia if con bloques de instrucciones es:

if (expresion) { secuencia de sentencias_1 } else { secuencia de sentencias_2 }

Ejemplo: pseudocódigo

Ejemplo: Diagrama de Flujo

Principal() Inicia vNum: entero escribir (“Dame número”) leer vNum Si (vNum > 0) entonces escribir (vNum,“ es positivo”) Fin si Termina

#include<stdio.h> #include<conio.h>

Inicia

main() { int vNum; printf(“Dame número”); scanf(“%d”,&vNum); if (vNum > 0) printf (“%d es positivo”,vNum );

“número”

vNum

vNum>0

F

Ejemplo: Lenguaje C

V

getch(); return 0; vNum, “ es positivo”

}

Termina

Ing. María del Carmen Zamudio Espinosa

pág.14


Programación Básica

Ifs anidados. Un if anidado es una instrucción if que forma parte del cuerpo de un if o un else. La razón de que los ifs anidados sean tan problemáticos es que puede resultar difícil saber con qué if se asocia cada else. Afortunadamente, C proporciona una regla muy simple: cada else está asociado con el if precedente más cercano (en el mismo nivel de ámbito) que no tenga ya asociado una instrucción else. Para anidar sentencias if hay que tener en cuenta: La sentencia if...else cuenta como una única sentencia, y por tanto, no es necesario encerrarla entre llaves. Ejemplo.- Elabore un programa que solicite un número entero y determine si éste es: negativo, cero o positivo. Pseudocódigo

Diagrama de flujo

Principal() inicia

#include<stdio.h> #include<conio.h>

inicia

vNum: entero escribir (“Dame número”) lee vNum; si (vNum < 0) entonces escribir (“El número es negativo”) otro si (vNum = 0) entonces escribir (“El número es cero”) otro escribir (“Número positivo”) fin si fin Si termina

Lenguaje C

main() { int vnum; printf(“Dame número”); scanf(“%d”,&vnum); if (vnum < 0) printf (“%d es negativo”,vnum ); else if (vnum==0) printf (“%d es = que cero”,vnum ); else printf (“%d es positivo”,vnum );

“Número”

vNum

V

vNum, “es negativo”

F

vNum<0

getch(); return 0; V

vNum = 0

vNum, “es cero”

F

}

vNum, “es positivo”

termina

El operador condicional ? El operador ? recibe el nombre de ternario porque requiere tres operandos. condicion ? expresion_1 : expresion_2 Se puede utilizar para reemplazar a las instrucciones if/else que contengan sólo sentencias simples. Si la condición es cierta, la expresión condicional (todo el conjunto) toma el valor de expresión_1; si es falsa (o sea, 0), toma el valor de expresión_2. Ejemplos: A > B ? mayor = A : mayor = B ; mayor = A > B ? A : B ;

Ing. María del Carmen Zamudio Espinosa

pág.15


Programación Básica

Switch Aunque el if-else-if escalonado puede realizar evaluaciones múltiples, no es excesivamente elegante. El código puede ser difícil de seguir y puede incluso confundir a su autor pasado un tiempo. Por estas razones, C incorpora una instrucción de decisión de bifurcación múltiple llamada switch, que compara sucesivamente un valor entero frente a una lista de constantes enteras o de carácter; cuando se encuentra una coincidencia, se ejecuta la instrucción o instrucciones asociadas con ese valor. El formato general de la instrucción switch es

switch (expresión_entera) { case constante_1: sentencias; [ break ]; case constante _2: sentencias; [ break ]; ...... [ default : sentencias ; ] }

El funcionamiento es como sigue: -Se evalúa la expresión entera y se rastrea la lista de constante o etiquetas hasta encontrar un valor de una constante con el que coincida. - Si se encuentra dicho valor, se ejecutan las sentencias que haya desde esa etiqueta hasta el primer break. Tales sentencias no hay que escribirlas encerradas entre llaves, es decir, las sentencias asociadas a cada etiqueta no son bloques sino secuencias de instrucciones. De todos modos, es posible utilizar un bloque como una sentencia de la secuencia, e incluso, declarar una o más variables dentro de él. - Si no coincide el valor de la expresión entera con ninguna de las constantes de las etiquetas no se ejecuta ninguna acción, excepto si existe la etiqueta default (es opcional incluirla o no) en cuyo caso se ejecutan las sentencias asociadas a ella. - La sentencia break es opcional. Si no se coloca ninguna, una vez que la sentencia switch bifurque a una etiqueta, se ejecutarán todas las sentencias que haya desde dicha etiqueta hasta el final del switch. - Las etiquetas del switch deben ser constantes de tipo entero (incluyendo el tipo char). En ningún caso se pueden emplear variables en las etiquetas, ni tampoco colocar comparaciones. - Si queremos que dos etiquetas distintas den el mismo resultado se pueden poner juntas: case x: case y: <instrucciones> ;

Ejemplo.- Desarrolle un programa que pida el número de día de la semana y regrese el nombre, utilizando la estructura switch.

Ing. María del Carmen Zamudio Espinosa

pág.16


Programación Básica

Pseudocódigo

Diagrama de flujo

Principal() Inicia numdia: entero escribir(“Programa lee numero de la semana y regresa el nombre”) escribir(“Dame número de día: 1-7”)

Lenguaje C #include<stdio.h> #include<conio.h>

Inicia

main() { int numdia; printf(“Programa lee numero de la semana y regresa el nombre”);

“Lee número y regresa día de la semana”

“Dame número de

leer (numdia); segun_sea (numdia) caso 1: escribir(“lunes”)

Día: 1-7” numdia

caso 2: escribir(“martes”) caso 3: escribir(“miércoles”) ……

numdia opcion=1

“lunes”

Opcion=2

“martes”

“miércoles”

otro: escribir (“Incorrecto”) fin segun_sea termina

otro

Opcion=3

“incorrecto”

printf(“Dame número de día: 17”); scanf("%d",&numdia); switch(numdia) { case 1: printf("lunes\n"); break; case 2: printf("martes\n"); break; case 3: printf("miercoles\n"); break; default: printf("número Incorrecto\n"); } getch(); return 0;

Termina }

Ing. María del Carmen Zamudio Espinosa

pág.17


Programación Básica

INSTRUCCIONES DE CONTROL REPETITIVAS. while La sintaxis es:

while (condición) sentencia Un bucle es un conjunto de sentencias que se repetirán cíclicamente al ejecutar el programa. En el lenguaje C, dentro del bucle se acepta una sentencia simple, una sentencia compuesta o una sentencia vacía: Si es una sentencia compuesta estará delimitada por llaves. Cuando la sentencia es simple no son necesarias las llaves. Cuando el programa llegue por primera vez a la sentencia while, comprueba si la condición expresada entre paréntesis se cumple o no; en caso afirmativo (en general, si toma un valor distinto de 0) se ejecutan las sentencias del bucle y se vuelve a comprobar la condición. Así sucesivamente, hasta que la condición se vuelva falsa (o toma el valor 0), y entonces el programa prosigue su tarea ejecutando la sentencia siguiente al bucle (si el cuerpo del bucle era una sentencia compuesta, se ejecutará la que está a continuación de la llave de cierre). Ejemplo.- Desarrolle un programa que imprima los números del 1 al 10, utilizando la estructura repetitiva while. Pseudocódigo

Diagrama de Flujo

principal() inicia i ← 1: entero escribir (“Programa imprime números del 1 -10) mientras (i <=10) escribir (i) i ← i +1 fin mientras termina

Diagrama de Flujo #include<stdio.h> #include<conio.h>

Inicia

i←1

i<=10

F

V

i i←i+1

main() { int i =1; printf (“Programa imprime números del 1 -10\n”); while (i <=10) { printf (“\n%d” , i); i = i +1; } getch(); return 0; }

Termina

Ing. María del Carmen Zamudio Espinosa

pág.18


Programación Básica

do while do

La sintaxis es:

sentencia while (expresion); La sentencia se ejecuta al menos una vez, aunque ya en ese momento la expresión fuera falsa (o cero). Cada vez que se ejecuta la sentencia se evalúa la expresión y si es cierta (distinta de cero) vuelve a ejecutarse otra vez la sentencia. Es decir, la sentencia se ejecuta MIENTRAS la expresión sea distinta de 0 o cierta. Dicho de otra forma, la sentencia se ejecuta hasta que la expresión sea falsa o 0. La sintaxis para una sentencia compuesta sería la siguiente:

do { sentencia_A; sentencia_B; ........... }while (expresion); Nótese cómo las llaves sólo son necesarias cuando la sentencia es compuesta. De todos modos, las llaves se pueden utilizar siempre para mejorar la legibilidad. Es frecuente usar esta estructura cuando, por ejemplo, se pide un dato por teclado o una opción válida de un menú, ya que el bucle se ejecutará al menos una vez y si los datos introducidos no son correctos, se volverán a pedir. Ejemplo.-Elabore un programa que pida un número y regrese su raíz cuadrada, valide que el número sea positivo. Pseudocódigo

Diagrama de Flujo Inicia “Raíz de un número”

Principal() Inicio raiz, x: real

“Dame número > 0”

Lenguaje C

#include<stdio.h> #include<conio.h> #include<math.h> /*incluye biblioteca para hacer uso de la función para calcular la raíz cuadrada*/ main() { float raiz, x; printf ("Lee número y regresa su raíz cuadrada");

escribir (“Lee número y regresa su

V

x

do //repite el ciclo mientras sea un número < cero { printf ("\nDame número > cero: "); scanf ("%f",&x); }while (x<0);

raíz cuadrada“)

hacer escribir (“Dame número >

X<0

F

cero“)

leer (x) mientras (x<0) raiz ← raiz_cuadrada(x) escribir (“La raíz cuadrada de ”, x , ”es: “, raiz)

raiz←raiz_cuadrada(x)

raiz = sqrt(x);

“La raíz es: “, raiz

printf ("\nLa raíz cuadrada de %f es %f", x, raiz); getch(); return 0;

Termina Termina

Ing. María del Carmen Zamudio Espinosa

}

pág.19


Programación Básica

for for (expresion_1 ; expresion_2 ; expresion_ 3) sentencia

- expresion_1 se realiza una sola vez, al comenzar el bucle for. Suele ser una inicialización. - expresion_2 es una condición que se evalúa antes de cada ejecución potencial del bucle; si es cierta (distinta de cero) se ejecuta una vez el bucle completo. - expresion_3 se evalúa al final de cada bucle; suele ser la actualización de las variables implicadas en la condición.

- La sentencia que se ejecuta puede ser simple (terminada en punto y coma) o compuesta (conjunto de sentencias simples delimitadas por llaves). - Una o más expresiones se pueden dejar en blanco, por ejemplo:   

La expresion_1, si la variable que controla el bucle ya viene inicializada. Si la expresion_2 no existe dará lugar a un bucle infinito puesto que un test vacío se considera cierto. La expresion_3 no hace falta si la actualización de la variable que controla el bucle se produce dentro del cuerpo del bucle.

En todo caso, aunque una expresión se deje en blanco siempre hay que colocar los dos punto y coma. - bucle. Los parámetros de las expresiones 2 y 3 se pueden alterar dentro del cuerpo Se puede utilizar el operador coma (,) que enlaza las expresiones, por ejemplo, para realizar más de una inicialización o más de una actualización. No tiene sentido utilizarlo en la expresion_2, pues no equivale ni al operador && (and) ni al operador || (or) . El operador coma evalúa las expresiones de izquierda a derecha. El operador coma no está restringido al bucle for, pero es donde se utiliza con mayor frecuencia. Por otra parte, no hay que confundirlo con el “separador coma” que se usa por ejemplo en sentencias printf para distinguir argumentos. Si la condición es inicialmente falsa, no se ejecutará nunca el cuerpo del bucle.

Ing. María del Carmen Zamudio Espinosa

pág.20


Programación Básica

Ejemplo.- Elaborar un programa que imprima los números múltiplos de 10 del 1 al 100 pseudocódigo

Diagrama de Flujo

Ejemplo: Lenguaje C

principal()

#include<stdio.h> #include<conio.h>

Inicia

Inicia

main()

i:entero para (i←10; i<=100; i←i+5) escribir (i) fin para

{

Acción 1

int i; for (i←10; i<=100; i←i+5)

i←10

Termina

printf (“%d”,i); i<=100

F

getch(); return 0;

V

}

i

i←i+5

Termina

break Se usa en la sentencia switch, y en los bucles for , while y do while para salir de dicho bucle y ejecutar la siguiente sentencia. Cuando se encuentra en una estructura anidada, la liberación afecta a la estructura más interna que la contenga.

#include <stdio.h> #include <conio.h> main() { int i; for (i=0; i<=10; i++) { if (i==5) break; printf("%d ", i); } getch(); return 0; }

Ing. María del Carmen Zamudio Espinosa

pág.21


Programación Básica

continue Es utilizable en todos los bucles y no se pude usar en switch. Interrumpe el flujo del programa, evitando el resto de la iteración, y se dirige de nuevo a evaluar la expresión que condiciona la ejecución del bucle; si ésta es cierta comienza una nueva iteración. Ejemplo:

/* “for” interrumpido con */ /* “continue” */ #include <stdio.h> #include <conio.h> main() { int i; for (i=0; i<=10; i++) { if (i==5) continue; printf("%d ", i); } getch(); return 0; }

Ing. María del Carmen Zamudio Espinosa

pág.22


Programación Básica

ARREGLOS UNIDIMENSIONALES Son estructuras de datos que permiten almacenar en posiciones de memoria continuas los diferentes datos. La particularidad de los arreglos en lenguaje C es que su puntero comienza desde cero.

Elemento s Nombre de la variable

Lista

9

5

6

2

4

8

3

Posición: 0 Contenido: Lista [0] = 9

OPERACIONES ELEMENTALES EN UN ARREGLO 1. 2. 3. 4. 5.

Declararlo Iniciarlo Leer Impresión (Escritura) Modificar algún valor

1.- FORMATO PARA DECLARAR UN ARREGLO

Pseudocódigo

Lenguaje C

Ejemplo en C

Identificador[tamaño]: Tipo_dato

Tipo_dato Identificador[tamaño];

float X[8];

donde: tamaño es un entero e indica el tamaño del arreglo

donde: tamaño es un entero e indica el tamaño del arreglo

declara un arreglo de nombre: X de 8 elementos de tipo flotante

2.- FORMATO PARA INICIALIZAR UN ARREGLO Pseudocódigo

Lenguaje C

Ejemplo

Identificador[tamaño]← {valor1, valor2, … valorn}

Identificador[tamaño]= {valor1, valor2, … valorn}

Lista[5] ←{10, 15, 85, 44, 1}

Ing. María del Carmen Zamudio Espinosa

/*Inicia un arreglo de 5 elementos*/

pág.23


Programación Básica

3 y 4 .- LECTURA E IMPRESIÓN DE UN ARREGLO UNIDIMENSIONAL main() { int lista[10], i; /*leer elemento por elemento, iniciando desde el índice 0 (Cero)*/ printf (“\n Dame los valores del vector: ”); for (i=0; i<10; i++) { printf (“\ndame elemento ”,i+1); scanf (“%d”,&lista[i]); } printf (“\nEl vector tiene los valores: ”); /*impresión elemento por elemento*/ for (i=0; i< 10; i++) printf (“%d ”,lista[i]); } 5.- MODIFICAR UN ELEMENTO DEL ARREGLO Podemos modificar los elementos de un vector en cualquier momento, solo es necesario especificar el nombre del arreglo unidimensional, la posición y e l nuevo valor.

Pseudocódigo

Lenguaje C

Ejemplos en C

Identificador[posición]← valor

Identificador[posición]= valor

1) lista[3] =10 /*Inicia lista en la posición 3 */

donde: posición puede ser:

donde: posición puede ser:

1. Una constante 2. Una variable O una expresión, todas siempre de tipo entero

3. Una constante 4. Una variable 5. O una expresión, todas siempre de tipo entero

2) i =0; lista[i]=10; 3) i =1; lista[i+2]=0;

Donde valor es un dato, el resultado de una llamada a una función o alguna operación lógica o aritmética, etc. En 1) se le asigna el valor 10 al tercer elemento del arreglo.

Ing. María del Carmen Zamudio Espinosa

pág.24


Programación Básica

EJEMPLO 1.Almacene en un arreglo de n elementos (máximo 30) e imprimir. a) La suma de los elementos que ocupan posiciones pares b) La suma de los elementos que ocupan posiciones impares c) La suma de todos los elementos main() { int arr[30]; /*declara un vector unidimensional de nombre arr*/ int i, tam, sum_par=0, sum_impar=0, sum_todos=0; printf(“\nDame tamaño del vector máximo de 30 elementos: ”); scanf(“%d”,&tam); while (tam < 2 || tam > 30) { printf (“\nError en el tamaño”); printf (“\nDame tamaño del vector máximo de 30 elementos: ”); scanf(“%d”,&tam); } /*Lee los datos del vector y realiza las sumas correspondientes*/ for (i = 0 ; i < tam ; i++) { printf (“Dame valor del vector[%d]:”,i); scanf(“%d”,arr[i]); /*cada valor se lee en una posicion*/ if ( i % 2 == 0) sum_par =sum_par + arr[i]; /*acumula el valor de los elementos de posiciones pares*/ else sum_impar=sum_impar + arr[i]; /*acumula el valor de los elementos de posiciones impares*/

sum_todos = sum_todos + arr[i] ; /*acumula los valores de todos los elementos del vector*/

} printf(“\nLa suma de los elementos pares es : %d”, sum_par); printf(“\nLa suma de los elementos impares es : %d”, sum_impar); printf(“\nLa suma de todos los elementos del arreglo es : %d”, sum_todos); }

Ing. María del Carmen Zamudio Espinosa

pág.25


Programación Básica

ARREGLOS BIDIMENSIONALES

Un arreglo bidimensional es un conjunto de n elementos del mismo tipo almacenados en memoria contigua en una matriz o tabla. Para acceder a cada elemento del arreglo se requieren de dos índices declarados en dos pares de corchetes.

Arreglo bidimensional: Dimension2 = columnas

Dimension1

Fila 1

Columna 1

Columna 2

Columna 3

Matriz(0,0)

Matriz(0,1)

Matriz(0,2)

Matriz(1,0)

Matriz(1,1)

Matriz(1,2)

= Fila 2 Filas

Matriz debe ser declarada como: tipo_dato Matriz[2][3] :;

  

La primera dimensión establece la cantidad de filas (renglones) La segunda dimensión establece la cantidad de columnas Al igual que en los arreglos unidimensionales, todos los datos deben ser del mismo tipo Nombre de la variable

mi_matriz[3][7]

2

5

6

2

4

8

3

3

8

2

2

5

7

3

9

5

6

2

4

8

6

Posición : 3,1 Contenido : mi_matriz[2][0] = 9

Ing. María del Carmen Zamudio Espinosa

pág.26


Programación Básica

Como recorrer un arreglo de dos dimensiones –matriz Utilizar iteraciones anidadas (una dentro de la otra), El primer ciclo se mueve a través de las filas y el segundo se mueve a través de las columnas.

Columna 1 Columna 2 Columna 3

Fila 1

Fila 2

for (i =0 ; i<2,i++) { for (j =1; j<3; j ++) { printf(“dame valor”) ; scanf(“%d”,&A[i,j]) ; } }

Ejemplo de manejo de matrices Inicializar la matriz A de 10 filas y 4 columnas con un valor constante dado k. Ejemplo de manejo de matrices Inicializar la matrizA de 10 renglones y 4 columnas con un valor constante dado k. main() { cons ren=10, col=4 ; int i, j, k, matrizA[ren][ col] ; printf(“dame el valor con el que quieres iniciar la matriz”); scanf(“%d”,&k); for (ren = 0 ; ren < 10; ren++) { for (col =1; col< 4; col++) matrizA[ren][col] =k;

} getch(); return 0; }

Ing. María del Carmen Zamudio Espinosa

pág.27


Programación Básica

OPERACIONES ELEMENTALES EN UN ARREGLO 6. Declararlo 7. Iniciarlo 8. Leer 9. Impresión (Escritura) 10. Modificar algún valor 1.- FORMATO PARA DECLARAR UN ARREGLO Pseudocódigo Lenguaje C

Ejemplo en C

Identificador[tamaño_renglon] [tamaño_columna]: TipoDato

int X[3][7]; /*declara un arreglo de 3x7*/

TipoDato Identificador[tamaño_renglon] [tamaño_columna];

2.- FORMATO PARA INICIALIZAR UN ARREGLO Pseudocódigo Lenguaje C Identificador [tamaño_renglon][tamaño_columna] ←{ista de valores}

Ejemplo en C

TipoDato Identificador [tamaño_renglon][tamaño_columna]={lista de valores};

lista[2][3] ={10, 15, 85, 44, 1,8} /*Inicia un arreglo de 2 x 3 */

El ejemplo es equivalente a: Columna 1

Fila 1

lista[0][0] =10;

Fila 2

lista[1][0] =44;

Columna 2

lista[0][1] =15;

lista[1][1] =1;

Columna 3

lista[0][2] =85;

lista[1][2] =8;

3 y 4.- LECTURA E IMPRESIÓN DE UN ARREGLO BIDIMENSIONAL main() { /*declara una matriz de 2 filas, 3 columnas*/ int MiArreglo[2][3],ren,col; /*pide al usuario elemento por elemento (lectura)*/ printf (“\nEste ejercicio LEE Y ALMACENA valores de una matriz:\n”) for (ren=0; ren<2; ren++) { for (col=0; col<3; col++) { printf (“\ndame elemento MiArreglo[%d][%d]: ”,&ren+1,&col+1);

scanf (“%d”,&MiArreglo[ren][col]); } } escribir (“\nLos valores de la matriz completa son:\n ”) /*imprimir elemento por elemento*/ for (ren=0; ren< 2; ren++) } for (col=0; col<3; col++) printf (“%d ”,MiArreglo[ren][col]); printf(“\n”); }}

Termina Ing. María del Carmen Zamudio Espinosa

pág.28


Programación Básica

El ejemplo quedaría abierto si manejamos un tamaño n x m main() { cons MAX = 15; int Matriz [MAX][MAX],i,j,n,m; printf(“dame tamano renglón <16”); scanf(“%d”,&n); printf(“dame tamano columna < 16”); scanf(“%d”,&m);

/*leer elemento por elemento*/ for (i=0; i< n; i++) { for (j=0; j< m; j++) { printf(“dame element Matriz[%d][%d]:”,i+1,j+1); scanf(“%d”,&Matriz[i][j]); } } printf(“\nLa matriz tiene los valores: \n”);

/*imprimir elemento x elemento a pantalla*/ for (i=0; i < n ; i++) { for (j=0; j <m; j++) printf(“%d ”, Matriz[i][j]); printf(“\n”); } }

5.- MODIFICAR UN ELEMENTO DEL ARREGLO BIDIMENSIONAL Podemos modificar los elementos de una matriz en cualquier momento, solo es necesario especificar el nombre de la matriz (arreglo bidimensional), la posición y e l nuevo valor.

Arreglo

Lenguaje C

Ejemplo

Bidimensional

Identificador[posición_renglón][posición_columna] = valor

MatrizA [3][4] =10.0 /*Inicia la matrizA en la posición 3,4 con 10.0*/

Ing. María del Carmen Zamudio Espinosa

pág.29


Programación Básica

Funciones INCLUIR Programación Modular Una función es un segmento de programa que realiza funciones bien definidas. La función procesará la información que le es pasada desde el punto del programa en donde se accede a ella y devolverá un solo valor. Este es el claro ejemplo de la programación modular en lenguaje C: un problema puede dividirse en problemas mas pequeños que se resolverán independientemente; al final se conjuna la solución general. Declaración de las funciones La definición de una función tiene dos componentes esenciales: la primera línea y el cuerpo de la función . En la primera línea se establecen el tipo de valor devuelto por la función, seguido del nomnbre de la función y (opionalmente) un conjunto de argumentos. El formato general de una función de C es: tipo nombre(lista de parámetros) { cuerpo de la función }

Las funciones son simulares a las de cualquier otro lenguaje, pero, tal y como citamos en la introducción, al no ser un lenguaje estructurado por bloques, no es posible declarar funciones dentro de otras funciones.

La sentencia return. Antes de continuar la explicación de las funciones, conviene explicar la sentencia return. La sentencia return permite, en primer lugar, salir de la función desde cualquier punto de la misma, y en segundo lugar, devolver un valor del tipo de la función, si ello es necesario (no se devuelve ningún valor si la función es de tipo void). Veamos un ejemplo: int Comparacion(int a,int b) { if (a>b) return 1; /* a es mayor que b */ if (a<b) return -1; /* a es menor que b */ return 0; /* a y b son iguales */ }

Llamada de una función Se puede acceder a una función especificando su nombre, seguido de la lista de argumentos necesitados para que pueda accionar. La llamada a la función puede formar parte de una exoresión simple o puede ser un operando de una expresión más compleja. Los argumentos de una función pueden ser constantes, variables simples, o expresiones más complejas como arreglos. Las llamadas a una función pueden representarse de la siguiente manera: Y=polinomio

Ing. María del Carmen Zamudio Espinosa

pág.30


Programación Básica

Llamada de una función Se puede acceder a una función especificando su nombre, seguido de la lista de argumentos que necesitamenos para que pueda accionar. La llamada a la función puede formar parte de una expresión simple o uede ser un operando de una expresión más compleja. Los argumentos de una función puedesn ser constantes, variables simples, o expresiones más complejas como arreglos La llamadas a una función pueden presentarse de la siguiente manera: y= polinomio(x) suma(a,b,c) imprime() ;

Prototipos de funcion Es la declaracion de la primera línea de una función antes de la función principal, y alerta al compilador que después del main se definirá la función a la que hace alución el prototipo. La declaración de estasa expresiones simempre seráa antes del main y después de las instrucciones de prepocesado. Es importante aclarar que se trata úncamente de una declaracion (como en una variable) y por lo tanato, debe terminara acon punto y coma;

Ing. María del Carmen Zamudio Espinosa

pág.31


Programación Básica

Paso de argumentos a una función Cuando se pasa un valor simple a una función, se copia el valor al argumento de la función; ahí trabaja con dicho argumentp durante todo el proceso. Para qe se pueda completar la llamada de funciones es necesario pasar el mismi número de valores que se especifican en la declaración de la función

7

77 Variables globales y locales

Ing. María del Carmen Zamudio Espinosa

pág.32


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.