1 tÉcnicas de programaciÓn lenguaje c tercera clase (segunda de c)
TRANSCRIPT
![Page 1: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/1.jpg)
1
TÉCNICAS DE PROGRAMACIÓN
Lenguaje CTercera Clase
(Segunda de C)
![Page 2: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/2.jpg)
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.
![Page 3: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/3.jpg)
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 ...
![Page 4: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/4.jpg)
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;
![Page 5: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/5.jpg)
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; } }
![Page 6: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/6.jpg)
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; } }
![Page 7: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/7.jpg)
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
![Page 8: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/8.jpg)
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.
![Page 9: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/9.jpg)
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.
![Page 10: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/10.jpg)
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.
![Page 11: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/11.jpg)
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.
![Page 12: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/12.jpg)
12Daniel Finol
printf("%3.0f %6.1f\n", fahr, celsius);
imprime de esta manera:
0 -17.8
20 -6.7
40 4.4
...
![Page 13: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/13.jpg)
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; } }
![Page 14: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/14.jpg)
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; } }
![Page 15: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/15.jpg)
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.
![Page 16: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/16.jpg)
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.
![Page 17: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/17.jpg)
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; } }
![Page 18: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/18.jpg)
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; } }
![Page 19: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/19.jpg)
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; } }
![Page 20: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/20.jpg)
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)); }
![Page 21: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/21.jpg)
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));
![Page 22: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/22.jpg)
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));
}
![Page 23: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/23.jpg)
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));
}
![Page 24: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/24.jpg)
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”.
![Page 25: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/25.jpg)
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);
![Page 26: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/26.jpg)
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(); }
}
![Page 27: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/27.jpg)
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); }
![Page 28: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/28.jpg)
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); }
![Page 29: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/29.jpg)
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); }
![Page 30: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/30.jpg)
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); }
![Page 31: 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)](https://reader036.vdocumento.com/reader036/viewer/2022062500/5665b4d41a28abb57c940e50/html5/thumbnails/31.jpg)
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); }