Práctica 0

Anuncio
Departamento de Electrónica y Automática 1
Práctica 0REP: REPASO DE C BÁSICO
Objetivos:
?? Arrancar nuevamente a programar en C.
?? Familiarizarse con la herramienta de desarrollo en C (Será introducida por el profesor en el
laboratorio).
?? Realizar pequeños programas de prueba con funciones de la librería estándar.
Tiempo de laboratorio:
1 sesión.
Trabajo a entregar al inicio de la sesión:
El alumno deberá traer preparados los trozos de código pedidos (apartados 3 y 4).
Es conveniente traer tecleados los programas dados.
Memoria:
Papel: sólo los trozos de código pedidos.
E-mail: Fichero (0rep.c) con todo el código (dado y pedido).
Normas para la cabecera del e-mail: CLAVE_PRACTICA APELLIDOS_ALUMNO CURSO. Ejemplo:
0rep Garcia Nieva 3itiei
0. Organización del directorio
El alumno deberá crear un directorio de nombre:
c
para almacenar todo lo referente a las prácticas de C. Todo el trabajo de cada práctica irá en directorio
independiente que colgará directamente del directorio c. El nombre de cada uno de estos directorios se
debe corresponder con el nombre en clave de la práctica. Para la sesión de hoy es
0rep
Aunque todo esto se haga a punta de ratón, el alumno debe estar familiarizado con al menos los siguientes
comandos de DOS:
cd: cambiar de directorio (cd 0rep).
md: crear subdirectorio en el directorio actual (md 0rep).
copy: copiar un fichero en otro (copy pru1.txt pru2.txt).
dir: ver la información del directorio (dir 0rep).
type: ver la información de un fichero (type pru1.txt).
Si no se recuerda cómo funcionan y cuál es su sintaxis se puede utilizar el comando help en una ventana
de DOS. Tecleando help en una ventana de DOS se obtiene información sobre todos los comandos
disponibles en DOS, y tecleando help y a continuación el nombre del comando (ejemplo: help cd) se
obtiene información de ese comando particular.
1. Hola mundo (30 min con explicación).
Escribir, compilar, enlazar y ejecutar el siguiente programa:
#include <stdio.h>
main()
{
printf("Hola mundo\n");
return 0;
}
Organizar el programa como un proyecto de nombre 0rep que contiene el fichero 0rep.c.
Prácticas de Programación en C - Nivel Intermedio
Departamento de Electrónica y Automática 2
Dependiendo del sistema operativo y del modo de ejecución del programa, puede ser que no se vea el
resultado de la ejecución en pantalla. Esto es debido a que el programa se ejecuta en una ventana
independiente que desaparece cuando el programa termina. Comprobarlo ejecutando el programa paso a
paso. Para evitar que desaparezca se puede programar al final del main una entrada de datos muy simple
como en el siguiente ejemplo:
main()
{
int i;
printf("Hola mundo\n");
printf("Pulse un número y return para terminar ");
scanf("%d",&i);
return 0;
}
2. Salida de datos con printf (20 min)
Comprobar el funcionamiento del siguiente programa:
#include <stdio.h>
main()
{
double d=2.36;
int i=234;
char s[]="Cadena";
printf("Tal cual:\n");
printf("double: %f, entero: %d, cadena: %s\n",d,i,s);
printf("Con más formato:\n");
printf("double: %8.1f, entero: %8d, cadena: %20s\n",d,i,s);
}
Para incluir este programa, se utilizará el mismo proyecto que en el apartado 1: se comenta con /*
*/ la parte de programa correspondiente al apartado 1 en 0rep.c y se incluye el nuevo código al
inicio del fichero. De esta forma también se realizará en los siguientes apartados.
Probar con otros valores de d, i y de la cadena apuntada por s. Y probar a utilizar otros tamaños en los
formatos (ejemplo: variar 8.1 para f o 20 para s).
3. Entrada de datos con fscanf (30 min)
Comprobar el funcionamiento del siguiente programa:
#include <stdio.h>
main()
{
double d;
int i;
char s[10];
printf("Escribe un número en coma flotante, otro entero y una cadena de 9
caracteres\n");
scanf("%lf %d %9s",&d,&i,s);
printf("Resultado: %f %d %s\n",d,i,s);
return 0;
}
Ejecutar el programa anterior paso a paso y activar el visualizador con las variables d, i y s para ver su
evolución.
Prácticas de Programación en C - Nivel Intermedio
Departamento de Electrónica y Automática 3
En el siguiente programa sustituir los comentarios por el código correspondiente para pedir y leer los
valores del vector enteros definido por el identificador mi. Seguir el mismo esquema del bucle
programado para imprimir los resultados por pantalla.
#include <stdio.h>
main()
{
int mi[4];
int i;
/* código para leer el vector mediante scanf desde teclado */
for(i=0;i<4;i++) {
printf("m[%i]=%i\n",i,mi[i]);
}
}
El formato %i equivale a %d.
4. Lectura/escritura desde fichero (70 min)
Comprobar el funcionamiento del siguiente programa para lectura y escritura desde fichero.
#include <stdlib.h>
#include <stdio.h>
main()
{
char s[]="Esto es una prueba";
char sLec[30];
FILE *pfic;
pfic=fopen("prueba.txt","w");
if (pfic==NULL) {
printf("Error abriendo prueba.txt");
exit(1);
}
fputs(s,pfic);
fclose(pfic);
pfic=fopen("prueba.txt","r");
if (pfic==NULL) {
printf("Error abriendo prueba.txt");
exit(1);
}
fgets(sLec,30,pfic);
fclose(pfic);
printf("Texto en prueba.txt: %s\n",sLec);
/* Tambien se puede utilizar rewind */
pfic=fopen("prueba.txt","r");
if (pfic==NULL) {
printf("Error abriendo prueba.txt");
exit(1);
}
printf("Lectura de prueba.txt con fscanf\n");
while(fscanf(pfic,"%29s",sLec)!=EOF) {
printf("%s\n",sLec);
}
fclose(pfic);
return 0;
}
Realizar una función (UnaPorFila) que permita pasar de un fichero de varias palabras por fila a otro
fichero con una palabra por fila. A continuación se da el programa main para probar dicha función.
Prácticas de Programación en C - Nivel Intermedio
Departamento de Electrónica y Automática 4
#include <stdio.h>
#include <stdlib.h>
void UnaPorFila(FILE *pficOri, FILE *pficSal);
void ImpFicPorFilas(FILE *pfic);
main() {
char sNomOri[]="prueba.txt";
char sNomSal[]="salida.txt";
FILE *pficOri;
FILE *pficSal;
if ((pficOri=fopen(sNomOri,"w"))==NULL) {
printf("Error abriendo %s\n",sNomOri);
exit(1);
}
fprintf(pficOri,"Obras son amores\ny no buenas razones");
fclose(pficOri);
if ((pficOri=fopen(sNomOri,"r"))==NULL) {
printf("Error abriendo %s\n",sNomOri);
exit(1);
}
if ((pficSal=fopen(sNomSal,"w"))==NULL) {
fclose(pficOri);
printf("Error abriendo %s\n",sNomSal);
exit(1);
}
UnaPorFila(pficOri,pficSal);
fclose(pficOri);
fclose(pficSal);
if ((pficSal=fopen(sNomSal,"r"))==NULL) {
printf("Error abriendo %s\n",sNomSal);
exit(1);
}
ImpFicPorFilas(pficSal);
fclose(pficSal);
return 0;
}
void UnaPorFila(FILE *pficOri, FILE *pficSal) {
/*Función a programar*/
}
void ImpFicPorFilas(FILE *pfic) {
char s[100];
while(fgets(s,100,pfic)) {
printf("%s",s);
}
}
El resultado de la ejecución debería ser:
Obras
son
amores
y
no
buenas
razones
Prácticas de Programación en C - Nivel Intermedio
Descargar