Elaborado por:
Dr. Sabino Miranda Jiménez Dra. Obdulia Pichardo Lagunas
PRÁCTICA No 4
Iniciación a la programación en C 1
Objetivos
El alumno conocerá los elementos básicos para la programar en el lenguaje de programación C
El alumno conocerá la estructura de control if…else para la resolución de problemas de decisión en C
Introducción
C es un lenguaje de programación de propósito general que ofrece economía de expresión, control de flujo, estructuras de datos y un conjunto de operadores. C fue originalmente diseñado para el sistema operativo UNIX. Tanto dicho sistema como los programas que se ejecutan en él están desarrollados en C.
Proceso de compilación
La compilación de un programa C se realiza en varias fases que normalmente son automatizadas y ocultadas por los entornos de desarrollo.
1. Preprocesado. Consistente en modificar el código fuente en C según una serie de instrucciones (denominadas directivas de preprocesado) simplificando de esta forma el trabajo del compilador. Por ejemplo, sustitución de las inclusiones (#include) por las declaraciones reales existentes en el fichero indicado.
2. Compilación. Genera el código objeto a partir del código ya preprocesado.
3. Enlazado. Une los códigos objeto de los distintos módulos y bibliotecas externas para generar el programa ejecutable final.
El siguiente programa imprime en pantalla "Hola Mundo"
#include <stdio.h>
int main() {
/* Mensaje de salida */
printf("Hola, Mundo\n");
return 0;
}
En la primera línea del programa anterior, le indica al preprocesador que incluya la biblioteca stdio.h que forma parte de la biblioteca estándar del compilador. Esta biblioteca contiene la
Elaborado por:
Dr. Sabino Miranda Jiménez Dra. Obdulia Pichardo Lagunas
definición de la función printf la cual nos permite imprimir en la pantalla el valor indicado. Todo programa en C debe contener el nombre de la función main, ya que es el punto de acceso para la ejecución del programa. La definición de main es similar a la definición de otras funciones, esto es, definir el valor de retorno (si se regresa algún valor, en el caso anterior se retorna un valor entero).
Todas las instrucciones deben terminarse con un punto y coma “;” lo cual le indica al compilador que la instrucción ha finalizado.
Adicionalmente, se puede agregar comentarios al programa para su documentación. Existen dos tipos de comentarios: de más de una línea o varias líneas. Un comentario de una línea se indica con dos diagonales seguidas.
// Este es un comentario de una línea
Para los comentarios de una o más líneas se indican entre los símbolos “/*” inicio y cierre “*/ “
/* comentario de dos líneas */
Las líneas con comentarios sirven al programador para aclarar puntos clave del programa, así como para facilitar el mantenimiento de los mismos.
Declaración de variables
Los datos en el lenguaje C deben tener un tipo de datos. Las variables contienen datos, y se debe declarar el tipo adecuado para los valores que van a contener. En C se dispone los siguientes tipos de datos básicos:
Elaborado por:
Dr. Sabino Miranda Jiménez Dra. Obdulia Pichardo Lagunas
Rangos de valores y tipos modificados
Rango de los enteros
Una variable entera acepta valores positivos y negativos dentro de un rango determinado, que depende de la plataforma y del compilador (Por ejemplo, bajo MS-DOS un entero suele estar en entre -32768 y 32767; en Linux suelen ser de 32 bits).
Existen modificaciones para alterar el rango de valores sobre el que trabaja los enteros:
Los modificadores de tamaño (short, long) y de signo (signed, unsigned) se pueden combinar.
Formato de la función printf
La función printf es una de las funciones más usadas en C, ya que nos permite desplegar mensajes en la interfaz del usuario. La función printf se utiliza de acuerdo al siguiente formato:
printf( “cadena de formato”, arg1, arg2, ... argN );
En la cadena de formato aparecen:
el texto que se desea imprimir
Elaborado por:
Dr. Sabino Miranda Jiménez Dra. Obdulia Pichardo Lagunas
caracteres especiales => secuencias de escape
indicaciones del formato de los argumentos (los argumentos son expresiones cualesquiera)
Para usar printf, hay que escribir al principio del programa la directiva #include <stdio.h>, ya que esta incluye la definición de la función printf.
Una lista resumida de los caracteres de conversión para la función printf se presenta a continuación.
En el siguiente segmento de código se ejemplifica el uso de printf.
int x =10;
float pi=3.1416
prinff(“Valor de los datos: \n X=%d PI=%f”,x, pi);
En el código anterior se imprime un mensaje “valor de los datos:” \n imprime un salto de línea y después se imprimen los valores de X y PI los cuales están contenidos en las variables x y pi en minúsculas, x es de tipo entera (%d) y pi es de punto flotante (%f).
Formato de la función scanf
La función scanf es una de las funciones más usadas en C, ya que nos permite solicitarle datos al usuario por medio de la entrada estándar (teclado). La función scanf se utiliza de acuerdo al siguiente formato:
scanf(“cadena de formato”, &variable1, &variable2, ... &variableN);
En la cadena de formato aparecen:
Elaborado por:
Dr. Sabino Miranda Jiménez Dra. Obdulia Pichardo Lagunas
el tipo de dato que se quiere leer
Para usar scanf, hay que escribir al principio del programa la directiva #include <stdio.h>, ya que esta incluye la definición de la función scanf.
Una lista resumida de los caracteres de conversión para la función scanf se presenta a continuación.
En el siguiente segmento de código se ejemplifica el uso de scanf.
int num;
float fnum;
printf(“Teclee dos valores uno entero y otro flotante”);
scanf (“%d %f”,&num, &fnum);
En el código anterior se solicita al usuario dos datos: uno entero que se guarda en la variable num, y otro de punto flotante que se guarda en fnum.
Después de la ejecución de la instrucción scanf, se detiene el programa hasta que el usuario capture dichos números. Se captura el primer número y se teclea enter para poder capturar el siguiente número. Al final las variables tendrán los valores capturados.
Secuencias de escape útiles que se combinan con la instrucción printf
\n Indica que es un salto de línea
\t Indica que es una tabulación (5 espacios, generalmente)
Funciones matemáticas
Otras funciones útiles son las funciones matemáticas, en C existe una biblioteca que nos permite hacer uso de tales funciones: math.h En esta biblioteca se encuentran definidas las funciones trigonométricas, raíz cuadrada, potencia, etc. Algunas funciones se definen a continuación.
Elaborado por:
Dr. Sabino Miranda Jiménez Dra. Obdulia Pichardo Lagunas Ejemplo.
x=sqrt(4); // El resultado x=2
y=pow(4,2); // El resultado y=16 equivalente a 4 * 4 z=log10(20); // El resultado z=1.30
Ejemplos de programa en C
Ejemplo1. Ejecutar el siguiente programa.
#include <stdio.h>
#include <conio.h>
/* determina el volumen de una esfera de radio 21 */
int main() {
float radio, volumen, PI ; PI= 3.1416;
radio=21;
volumen= (4.0/3.0) * PI * radio * radio * radio;
printf("El volumen de la esfera con radio %f es %f", radio, volumen );
getche();
return 0;
}
La función getche(), en este caso, permite detener el programa para poder visualizar los resultados, su definición se encuentra en la biblioteca conio.h
Ejemplo2. Ejecutar el siguiente programa.
Este programa resuelve la ecuación 2x + 3y =18 f(x)= (18-2x)/3
#include <stdio.h>
#include <conio.h>
Elaborado por:
Dr. Sabino Miranda Jiménez Dra. Obdulia Pichardo Lagunas
int main() {
/* resuelve la ecuación 2x + 3y =18 */
float x,y;
printf("Resuelve la ecuacion 2x + 3y =18\n");
printf("Teclea el valor para x:");
scanf("%f",&x);
y = (18 - 2*x)/3;
printf("fun(x)= (18-2x)/3 \n");
printf("y = fun(%f)= %f \n",x,y);
getche();
return 0;
}
Sentencias de control
En C existen tres tipos básicos de sentencias de selección: if, switch y ? En esta práctica analizaremos el funcionamiento de la sentencia if.
Sentencia if
Es una de las sentencias de selección o condicional, su funcionamiento se rige por el resultado de una comprobación lógica de una expresión condicional que se evalúa a verdadero o falso. La sintaxis es la siguiente:
if(expresión_condicional) sentencia;
Donde expresión_condicional es válida en C si se evalúa a verdadero o falso; si la expresión se evalúa como verdadera se ejecutará la sentencia, sino lo es, se pasa por alto la sentencia y se ejecuta la línea de código que sigue a if.
En C, una expresión es verdadera si se evalúa a cualquier valor distinto de cero; si se evalúa a cero es falsa.
Ejemplo
Imprime un mensaje en pantalla si el valor es positivo o negativo, dependiendo del valor capturado por el usuario.
#include <stdio.h>
#include <conio.h>
int main() {
int num;
printf(“\nIntroduce un número:”);
scanf(“%d”, &num);
if(num>0)
printf(“El número es positivo”);
if(num<0)
printf(“El número es negativo”);
Elaborado por:
Dr. Sabino Miranda Jiménez Dra. Obdulia Pichardo Lagunas
getche();
return 0;
}
Sentencia if-else
Es una variante de la sentencia if, esta estructura va a compañada de else, el cual indica la ejecución de instrucciones si la condición se evalúa como falsa. La sintaxis es la siguiente.
if(expresión) sentencia1;
else
sentencia2;
Si expresión es verdadera entonces se ejecutará la sentenica1, después de ejecutarla continuará con las demás instrucciones posteriores a la estructura if-else. En este caso, no ejecutará las instrucciones que pertenecen a else (sentencia2). Si la expresión es falsa, se pasa por alto la sentencia1 y se ejecutará la sentencia2. Nunca se ejecutarán las dos sentencias, son excluyentes.
Ejemplo
#include <stdio.h>
#include <conio.h>
int main() {
int num;
printf(“\nIntroduce un número:”);
scanf(“%d”, &num);
if(num>0)
printf(“El número es positivo”);
else
printf(“El número es negativo”);
getche();
return 0;
}
Bloques de código en la sentencia if
En C se pueden enlazar dos o más sentencias, a esto se le llama bloque de código. Para crearlo, las sentencias se colocan en un bloque definido por dos llaves: una de apertura y otra de cierre.
Una vez hecho esto, las sentencias forman una unidad lógica. Sintaxis
if(expresión)
{ // Bloque verdadero sentenciaV1;
sentenciaV2;
….
sentenciaVN;
} else {
Elaborado por:
Dr. Sabino Miranda Jiménez Dra. Obdulia Pichardo Lagunas
sentenciaF1;
sentenciaF2;
…
sentenciaFN;
}
Un bloque de código presenta una unidad lógica indivisible, esto significa que bajo ninguna circunstancia se podría ejecutar alguna de las sentencias sin ejecutar las demás (por ejemplo, las sentenciasV1, sentenciasV2…).
Ejemplo. Este programa convierte de pies a metros o de metros a pies de acuerdo a la opción seleccionada por el usuario. Los mensajes se muestran de acuerdo al tipo de conversión seleccionada.
#include <stdio.h>
#include <conio.h>
int main() {
float num,metros,pies;
int cambio;
printf("\n\n 1) Conversión de Pies-Metros \n 2) Conversión de Metros-Pies");
printf("\nElige una opción:");
scanf("%d", &cambio);
if(cambio==1) {
printf("\nIntroducir cantidad (en pies): ");
scanf("%f", &num);
metros=num/3.28;
printf("Metros: %f", metros);
} else {
printf("\nIntroducir cantidad (en metros): ");
scanf("%f", &num);
pies= num*3.28;
printf("Pies: %f", pies);
}
getche();
return 0;
}
Anidamiento de sentencias if
Cuando una sentencia if se ejecuta como parte del bloque de otra sentencia if o else, se dice que está anidada dentro del if más externo. Un if anidado aparece dentro de un bloque de sentencias que sean el objetivo del if más externo. Sintaxis:
if(expresión1) sentenciaIF1;
Elaborado por:
Dr. Sabino Miranda Jiménez Dra. Obdulia Pichardo Lagunas
else
if(expresión2) sentenciaIF2;
else
if(expresión3) sentenciaIF3;
…..
else sentencia IFN;
También se puede ejecutar más de una instrucción, para ello es necesario indicar el bloque de instrucciones con las llaves de apertura y cierre. En el caso siguiente, tenemos dos if anidados.
El segundo if se encuentra en la parte de ejecución cuando expresión1 se evalúa como falsa. Es importante recalcar que puede haber más instrucciones en el bloque definido, por ejemplo otras_sentencias define que hay otras instrucciones que pertenecen al bloque cuando se evalúa falsa expresión1; pero no pertenecen al if interno que evalúa expresión2.
if(expresión1) {
sentenciaV1_1;
sentenciaV1_2;
...
} else {
if(expresión2) {
sentenciaV2_1;
sentenciaV2_2;
...
} else {
sentenciaF2_1;
sentenciaF2_2;
}
Otras_Sentecias ...
}
Ejercicios propuestos
Para todos los ejercicios, realizar el algoritmo (diagrama de flujo o pseudocódigo) y las especificaciones de entrada y salidas antes de programarlo en C.
1. Realizar un programa que resuelva ecuaciones de segundo grado de la forma siguiente:
𝐴𝑥2+ 𝐵𝑥 + 𝐶 = 0
Recordar que para la solución de esta clase de ecuaciones podemos hacer uso de la formula general:
Elaborado por:
Dr. Sabino Miranda Jiménez Dra. Obdulia Pichardo Lagunas
𝑋 =−𝑏 ± √𝑏2− 4𝑎𝑐 2𝑎
a. Considerar los casos cuando la raíz es negativa se obtendrían raíces complejas.
b. El usuario capturar los coeficientes A, B y C
c. Validar si el usuario captura ceros o datos que pongan en riesgo el funcionamiento del programa.
2. Realizar un programa que calcule el área de alguna figura de acuerdo a la que el usuario seleccione por medio de un menú desplegable en pantalla. Las posibles figuras son triángulo, rectángulo círculo, según lo decida el usuario. Desplegar el menú de opciones, capturar los datos necesarios para cada figura e imprimir el área de la figura seleccionada.
3. Realizar un programa que despliegue un menú donde se muestren los productos y sus precios de la tabla1. El usuario decide que producto del menú desea, así como la cantidad de productos que desea comprar, solamente se puede hacer una compra a la vez. Al final de la compra, se debe mostrar al usuario el producto que compró, la cantidad de productos y el monto total que debe pagar por la compra realizada. Los productos son los de la tabla 1. Adicionalmente, para el cálculo de la compra, a todos los productos se les hace un porcentaje de descuento por temporada y otro por la cantidad de productos que se compren. Para el cálculo del monto por pagar se debe hacer los descuentos correspondientes de acuerdo a los porcentajes proporcionados.
Por ejemplo, si un usuario compra 10 pares de “Zapatos A”, el total sería T=10 * 540 pero a esta cantidad se le debe restar el porcentaje por temporada (5%) y el porcentaje por ser mayorista (5%) sería un total del 10% de descuento.
Tabla 1.Precios y descuentos por productos
Elaborado por:
Dr. Sabino Miranda Jiménez Dra. Obdulia Pichardo Lagunas
Tabla 2. Descuentos a mayoristas