View
215
Download
0
Category
Preview:
Citation preview
1
TÉCNICAS DE PROGRAMACIÓN
Lenguaje CTercera Clase
(Segunda de C)
2Daniel Finol
Cuerpo del whileCuerpo del while
while: el cuerpo de una instrucción while puede consistir de Una o más instrucciones encerradas entre llaves; o Una sola instrucción sin llaves.
En todo caso, para que el código sea fácil de leer y entender (para el lector humano), se debe sangrar (indent) el cuerpo del while (así como cualquier sub-bloque de código) para resaltar la estructura lógica del programa.
Posición de las llaves. Punto y coma(;) - 1 instrucción por línea.
3Daniel Finol
Más acerca de printfMás acerca de printf
Si sustituimos la línea:printf("%d\t%d\n", fahr, celsius);
por:printf("%3d %6d\n", fahr, celsius);
la tabla se imprimirá con justificación a la derecha:
en vez de 0 -17 20 -6 40 4 60 15 80 26 100 37 ...
1 -17 20 -6 40 4 60 15 80 26 100 37 ...
4Daniel Finol
Punto flotantePunto flotante
Para tener más precisión en los datos de la tabla de conversión necesitamos trabajar con números fraccionarios en vez de enteros.
Entonces la variables fahr y celsius deben cambiarse a float, sustituyendo:
int fahr, celsius; por float fahr, celsius;
5Daniel Finol
El programa quedaría así: #include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; int lower, upper, step;
lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */
fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }
6Daniel Finol
CambiosCambios
El programa quedaría así: #include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; int lower, upper, step;
lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */
fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }
7Daniel Finol
#include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; int lower, upper, step;
lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */
fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }
Operandos enteros -> Operación EnteraOperandos de punto flotante -> Operación de Punto Foltante
8Daniel Finol
El programa quedaría así: #include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; int lower, upper, step;
lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */
fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }
Si uno de los operandos es de punto flotante y el
otro entero,el entero se
transforma en punto flotante.
9Daniel Finol
El programa quedaría así: #include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; int lower, upper, step;
lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */
fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }
Así que lo podemos poner de
esta manera.
10Daniel Finol
El programa quedaría así: #include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; int lower, upper, step;
lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */
fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }
Con estos dos tampoco hay
problema.
11Daniel Finol
Más acerca de printfMás acerca de printf
%f – imprime como punto flotante.
%6f – igual pero con por lo menos 3 caracteres de amplitud.
%6.1f – igual pero con una cifra después del punto.
%.2 – imprime como punto flotante con dos cifras después del punto decimal.
12Daniel Finol
printf("%3.0f %6.1f\n", fahr, celsius);
imprime de esta manera:
0 -17.8
20 -6.7
40 4.4
...
13Daniel Finol
Sustitución de variables por constantes... #include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius; int lower, upper, step;
lower = 0; /* lower limit of temperatuire scale */ upper = 300; /* upper limit */ step = 20; /* step size */
fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }
14Daniel Finol
Sustitución de variables por constantes: #include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius;
fahr = 0; while (fahr <= 300) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + 20; } }
15Daniel Finol
Sustitución de variable por expresión... #include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr, celsius;
fahr = 0; while (fahr <= 300) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + 20; } }
En cualquier contexto en el que se permita usar el valor de una variable es posible usar una expresión del mismo
tipo.
16Daniel Finol
Sustitución de variable por expresión: #include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr;
fahr = 0; while (fahr <= 300) {
printf("%3.0f %6.1f\n", fahr, (5.0/9.0) * (fahr-32)); fahr = fahr + 20; } }
En cualquier contexto en el que se permita usar el valor de una variable es posible usar una expresión del mismo
tipo que la variable.
17Daniel Finol
fahr -> int... #include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { float fahr;
fahr = 0; while (fahr <= 300) { printf("%3.0f %6.1f\n", fahr, (5.0/9.0) * (fahr-32)); fahr = fahr + 20; } }
18Daniel Finol
fahr -> int: #include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { int fahr;
fahr = 0; while (fahr <= 300) { printf("%3.0f %6.1f\n", fahr, (5.0/9.0) * (fahr-32)); fahr = fahr + 20; } }
19Daniel Finol
while -> for... #include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { int fahr;
fahr = 0; while (fahr <= 300) { printf("%3.0f %6.1f\n", fahr, (5.0/9.0) * (fahr-32)); fahr = fahr + 20; } }
20Daniel Finol
while -> for: #include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ main() { int fahr;
for (fahr = 0; fahr <= 300; fahr = fahr + 20) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); }
21Daniel Finol
La instrucción forLa instrucción for
for(inicialización; condición; incremento)cuerpo;
for (fahr = 0; fahr <= 300; fahr = fahr + 20)
printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
22Daniel Finol
ConstantesConstantes
Es una mala práctica usar “constantes literales” como:
#include <stdio.h>
main()
{
int fahr;
for (fahr = 0; fahr <= 300; fahr = fahr + 20)
printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
}
23Daniel Finol
Constantes simbólicasConstantes simbólicas
Es mejor usar “CONSTANTES SIMBÓLICAS” como:#include <stdio.h>
#define LOWER 0 /* lower limit of table */
#define UPPER 300 /* upper limit */
#define STEP 20 /* step size */
main()
{
int fahr;
for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
}
24Daniel Finol
Entrada y Salida de CaracteresEntrada y Salida de Caracteres
Toda entrada y salida de texto se trata como un “flujo (stream) de caracteres”
Un “flujo de texto” es una secuencia de texo dividido entre líneas; cada línea consta de cero o más caracteres seguidos de un carácter “nueva línea”.
25Daniel Finol
getchar y putchargetchar y putchar
La función getchar (de la biblioteca estándar) lee el siguiente carácter de la entrada de una secuencia de texto y lo devuelve como su valor:
c = getchar(); La función putchar escribe el contenido de
una variable entera como un carácter en la salida (generalmente la pantalla).
putchar(c);
26Daniel Finol
Copia la entrada a la salidaCopia la entrada a la salida
#include <stdio.h>
/* copy input to output; 1st version */ main() { int c;
c = getchar(); while (c != EOF) { putchar(c); c = getchar(); }
}
27Daniel Finol
Copia la entrada a la salida (versión 2)Copia la entrada a la salida (versión 2)
#include <stdio.h>
/* copy input to output; 2nd version */ main() { int c;
while ((c = getchar()) != EOF) putchar(c); }
28Daniel Finol
Conteo de caracteresConteo de caracteres
#include <stdio.h>
/* count characters in input; 1st version */ main() { long nc;
nc = 0; while (getchar() != EOF) ++nc; printf("%ld\n", nc); }
29Daniel Finol
Conteo de caracteres (versión 2)Conteo de caracteres (versión 2)
#include <stdio.h>
/* count characters in input; 2nd version */ main() { double nc;
for (nc = 0; gechar() != EOF; ++nc) ; printf("%.0f\n", nc); }
30Daniel Finol
Conteo de líneasConteo de líneas
#include <stdio.h>
/* count lines in input */ main() { int c, nl;
nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); }
31Daniel Finol
Conteo de palabrasConteo de palabras #include <stdio.h>
#define IN 1 /* inside a word */ #define OUT 0 /* outside a word */
/* count lines, words, and characters in input */ main() { int c, nl, nw, nc, state;
state = OUT; nl = nw = nc = 0; while ((c = getchar()) != EOF) { ++nc; if (c == '\n') ++nl; if (c == ' ' || c == '\n' || c = '\t') state = OUT; else if (state == OUT) { state = IN; ++nw; } } printf("%d %d %d\n", nl, nw, nc); }
Recommended