>> [REPRODUCCIÓN DE MÚSICA]
>> ZAMYLA CHAN: ¿Prefieres recibir $ 10 millones en este momento o recibir
monedas de un centavo cada día del mes, donde cada día subsecuente, recibe
duplicar la cantidad de centavos que recibido el día anterior?
En peniques, vamos a demostrar por qué usted debe
definitivamente tomar las monedas de un centavo.
Su trabajo es escribir pennies.c--
un programa que primero pide al usuario cómo muchos días hay en el mes y
le pregunta cuántos centavos al usuario recibirán el primer día.
El programa deberá calcular el cantidad que el usuario tendrá
acumulada al final de la mes y mostrarlo.
>> Podemos romper este programa hasta en un par de tareas.
Tendremos que solicite múltiples entradas de usuario -
días y meses, y de un centavo en el primer día.
Necesitamos hacer un seguimiento de la cantidad de dinero el usuario tiene y actualizarla cada
día, duplicando la cantidad de centavos que reciben.
Y, por último, imprimimos su final total, en dólares.
>> Abordemos primero la entrada del usuario.
Voy a abrir apples.c, programa corto que trata
con entradas y salidas.
En la parte superior aquí, he incluido algunos de las bibliotecas que necesito -
La biblioteca del CS50 y un estándar E / S de la biblioteca.
Imprimo un mensaje utilizando el función printf de la
biblioteca de E / S estándar.
Pero la verdadera inspiración del usuario que ocurre en la siguiente línea con esta
Función GetInt en la biblioteca CS50.
>> GetInt obtiene la entrada del usuario y garantiza que la entrada es un número entero.
Así que guardo la entrada del usuario en entero i, restar 1 a i, y luego
imprimir el nuevo valor si i.
Después de compilar apples.c utilizando el comando "hacer las manzanas," Tengo una
manzanas de archivo ejecutable.
Ejecución de eso, voy a la entrada 1.
El programa me dice que Tengo 0 manzanas a la izquierda.
Y así que funcionó como se esperaba.
>> Así que vamos a correr de nuevo y negativo de entrada 1.
Ahora, tener un importe negativo de las manzanas no tiene mucho sentido, pero
el programa acepta, porque la negativa 1, bueno, es un entero.
Y ahora, el programa o el monstruo dentro del programa se come una negativa
manzana, y ahora tengo negativos 2 manzanas.
Hm, así que esa es una lección -
a pesar de que la función GetInt y funciones relacionadas, como GetFlow o
GetString obtener el tipo de datos correcto, tiene que asegurarse de que la entrada hace
sentido para su programa.
>> En peniques, no va a hacer precisamente un símbolo para un entero, que tendrá que hacer
asegurarse de que el usuario introduce un número entero Eso tiene sentido, dado el contexto.
Mes sólo puede tener 28, 29, 30, o 31 días.
Queremos exigir continuamente un entero válido.
Si un número entero de entrada fuera de nuestro límites aceptados, vamos a impulsarlos
una y otra vez, hasta que darnos un número entero válido.
>> Recordemos la "repetición hasta que aparezca" bloquear en cero?
Usted puede hacer una construcción similar en C utilizando un bucle "while"
o bucle "do-while".
La estructura de bucle while tiene una condición que deben cumplirse para que la
cuerpo del bucle para ejecutar.
>> Esto debería verse un poco parecido, porque la condición es igual que el
Bloques de Scratch con los ángulos y entra en los soportes
del bucle "while".
Así que esta condición se comprobará si el número entero está dentro de
de los límites adecuados.
Usted puede pedir al entero utilizando GetInt y luego ejecutar su "tiempo"
bucle, repitiendo el mensaje y la impresión instrucciones, mientras que la entrada
no es válido.
>> Otra manera de asegurar la entrada de usuario correcta es mediante el uso de un bucle "do-while",
que es muy similar a un bucle While.
El bucle "do-while" se ejecuta el código dentro de los cuerpo y luego comprueba
si la condición se cumple o no.
Esto es útil para la obtención de la entrada del usuario, porque usted sabe que usted necesita
para pedir al menos una vez.
Si la condición no se cumple, el programa se ejecutará la línea después de
el bucle "do-while".
Si la condición se cumple, sin embargo, el bucle se repita
>> Un bucle "do-while" para la validación de usuario de entrada se verá algo como esto.
Declaro una variable n, GetInt y a continuación, repita hasta que n es válido.
Y este proceso, le expliqué, estaba usando el tipo de datos entero, que
que va a utilizar para los días del mes.
Pero sabemos que el número de monedas de un centavo se acumulan rápidamente, por lo que con el fin de
almacenar números más grandes, use el tipo de datos LongLong, pero recuerde que la misma
principio de validación se aplica.
>> Impresionante, así que una vez que tenemos dos válida aportaciones del usuario -
días del mes y los centavos en el primer día -
podemos pasar a la siguiente parte del programa.
El primer día, el usuario comienza con sin embargo, muchos peniques que especifican
y la cantidad de monedas que se recibirá al día siguiente se duplica.
Así que tiene sentido para llevar un registro de estas dos cantidades -
la cantidad de dinero que el usuario tiene y cómo muchas monedas que van a ser dados.
>> Ahora, haciendo algo para el 28 a 31 días es repetitivo, por lo que vamos a usar un "para"
bucle para iterar sobre los días en el mes, la actualización del total y penny
cantidad cada vez.
"Para" sintaxis bucle contiene los siguientes -
una inicialización, una condición, y una actualización.
Su bucle "for" se inicializará una variable, cuando se
entra primero el bucle.
Si se cumple la condición, el cuerpo del bucle se ejecutará.
Posteriormente, la actualización se ejecutará.
Si todavía se cumple la condición, la ciclo se ejecutará y actualizará, y
repetir, siempre y cuando su condición evalúa en true.
>> Aquí hay un bucle "for" que divide una entero p 2 por un total de 10 veces.
Tenga en cuenta cómo me declaré el entero p fuera de mi bucle "for", para que el
entero puede ser accesible fuera del bucle "for".
Después de que el mes ha pasado, es hora de para indicar al usuario la cantidad de dinero
que han conseguido.
Por las especificaciones, es necesario decirle al usuario la cantidad de dólares, no cuántos
monedas de un centavo, que tienen.
Pero hasta ahora, usted ha mantenido un seguimiento de la total y los centavos que utilizan LongLongs,
que son números enteros.
>> Hay 100 centavos a $ 1, así que a menos el número de monedas de un centavo es un
múltiplo de 100, usted tendrá que representar decimales.
El autotype duplicado permite que hagas esto.
Entonces, ¿cómo convertimos de representar centavos a dólares?
>> Vamos a echar un vistazo pi.c.
Este programa toma un big_pi LongLong y divide por 100.000, y las impresiones
el resultado a cinco decimales.
Si quisiéramos mostrar cuatro decimales lugares, entonces sólo pueden sustituir este
número aquí.
Así que vamos a guardar, compilar pi, y luego ver el resultado, que nos
espere ser 3,1415 -
los primeros cinco dígitos de pi.
>> No es sin embargo.
¿Y por qué?
Bueno, porque es un big_pi LongLong, que es un número entero, que no se
realizar un seguimiento de los decimales.
La modificación que necesito hacer es en la división.
Tengo que echar a un doble aquí antes dividiendo, porque dobles no pueden mantener
pista de decimales.
Y voy a añadir una nueva línea aquí para un mejor formato.
>> Y aquí lo tenemos -
3.1416.
Usted puede notar que se imprima 3.1416 en lugar de 3,1415 como se esperaba.
Eso es porque las rondas durante el proceso de división, en lugar de sólo
truncando el valor.
Ahora usted debería ser capaz de imprimir el total definitivo correctamente, que acaba
el programa.
>> Felicitaciones.
Mi nombre es Zamyla.
Y esto fue peniques.
>> [REPRODUCCIÓN DE MÚSICA]