1 1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)
2 Daniel Finol 2 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.
3 Daniel Finol 3 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...
4 Daniel Finol 4 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;
5 Daniel Finol 5 El programa quedaría así: #include /* 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
6 Daniel Finol 6 El programa quedaría así: #include /* 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
7 Daniel Finol 7 #include /* 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 Operación Entera Operandos de punto flotante -> Operación de Punto Foltante
8 Daniel Finol 8 El programa quedaría así: #include /* 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
9 Daniel Finol 9 El programa quedaría así: #include /* 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
10 Daniel Finol 10 El programa quedaría así: #include /* 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
11 Daniel Finol 11 %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.
12 Daniel Finol 12 printf("%3.0f %6.1f\n", fahr, celsius); imprime de esta manera: 0 - 17.8 20 - 6.7 40 4.4...
13 Daniel Finol 13 Sustitución de variables por constantes... #include /* 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
14 Daniel Finol 14 Sustitución de variables por constantes: #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300; floating-point version */ main() { float fahr, celsius; fahr = 0; while (fahr
15 Daniel Finol 15 Sustitución de variable por expresión... #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300; floating-point version */ main() { float fahr, celsius; fahr = 0; while (fahr
16 Daniel Finol 16 Sustitución de variable por expresión: #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300; floating-point version */ main() { float fahr; fahr = 0; while (fahr
17 Daniel Finol 17 fahr -> int... #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300; floating-point version */ main() { float fahr; fahr = 0; while (fahr
18 Daniel Finol 18 fahr -> int: #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300; floating-point version */ main() { int fahr; fahr = 0; while (fahr
19 Daniel Finol 19 while -> for... #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300; floating-point version */ main() { int fahr; fahr = 0; while (fahr
20 Daniel Finol 20 while -> for: #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300; floating-point version */ main() { int fahr; for (fahr = 0; fahr
21 Daniel Finol 21 for(inicialización; condición; incremento) cuerpo; for (fahr = 0; fahr
22 Daniel Finol 22 Es una mala práctica usar “constantes literales” como: #include main() { int fahr; for (fahr = 0; fahr
23 Daniel Finol 23 Es mejor usar “CONSTANTES SIMBÓLICAS” como: #include #define LOWER 0 /* lower limit of table */ #define UPPER 300 /* upper limit */ #define STEP 20 /* step size */ main() { int fahr; for (fahr = LOWER; fahr
24 Daniel Finol 24 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”.
25 Daniel Finol 25 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);
26 Daniel Finol 26 #include /* copy input to output; 1st version */ main() { int c; c = getchar(); while (c != EOF) { putchar(c); c = getchar(); }
27 Daniel Finol 27 #include /* copy input to output; 2nd version */ main() { int c; while ((c = getchar()) != EOF) putchar(c); }
28 Daniel Finol 28 #include /* count characters in input; 1st version */ main() { long nc; nc = 0; while (getchar() != EOF) ++nc; printf("%ld\n", nc); }
29 Daniel Finol 29 #include /* count characters in input; 2nd version */ main() { double nc; for (nc = 0; gechar() != EOF; ++nc) ; printf("%.0f\n", nc); }
30 Daniel Finol 30 #include /* count lines in input */ main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); }
31 Daniel Finol 31 #include #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); }