[Música tocando] ZAMYLA CHAN: Prefire recibir 10 millóns de dólares agora ou recibir tostões todos os días do mes, cando cada día posterior, que obtén dobrar a cantidade de moedas que recibida o día anterior? En tostões, imos probar por que ten que asumir definitivamente os tostões. A súa tarefa é escribir pennies.c-- un programa que pide ao usuario como primeiro Hai moitos días no mes e entón pregunta cantos centavos o usuario vai recibir, o primeiro día. O programa debe entón calcular a importe que o usuario terá acumulado ao final do mes e amosar-lo. Podemos dividir este programa para un par de tarefas. Imos ter para solicitar múltiples entradas de usuario - días e meses, e moedas de un centavo o primeiro día. Necesitamos manter o control de canto diñeiro o usuario ten e actualiza-lo cada día, dobrando a cantidade de tostões que reciben. E, finalmente, imprimir o seu total final, en dólares. Imos atacar a entrada do usuario en primeiro lugar. Vou abrir apples.c, programa curto, que trata con entradas e saídas. Na parte superior aquí, eu incluín algúns das bibliotecas que eu teño - Biblioteca de CS50 e un patrón I / O da biblioteca. Eu imprimir unha ventá utilizando o función printf do biblioteca estándar de E / S. Pero o impulso efectivo do usuario ocorre na seguinte liña con este Función GetInt na biblioteca CS50. GetInt obtén a entrada do usuario e asegura que a entrada é un número enteiro. Entón eu gardar a entrada do usuario no integer i, subtraia 1 do i, e, a continuación, imprimir o novo valor se i. Despois de compilar apples.c mediante o mando "facer mazás," Eu teño unha mazás arquivo executábel. Execución que, eu vou entrada 1. O programa dime que Teño 0 mazás esquerda. E así que funcionou como se esperaba. Entón, imos realizar este novo e unha entrada negativa. Agora, tendo un valor negativo de mazás non ten moito sentido, pero o programa acepta-lo, porque o negativo 1, tamén, que é un número enteiro. E agora, o programa ou o monstro dentro do programa come un negativo mazá, e agora eu teño 2 mazás negativos. Hm, entón iso é unha lección - aínda que a función GetInt e funcións relacionadas, como GetFlow ou GetString obter o tipo de datos para a dereita, vostede ten que estar seguro de que a entrada fai sentido para o seu programa. En tostões, non fará máis que un poder a un enteiro, teñas que facer seguro de que o usuario inserir un enteiro que ten sentido dado o contexto. Mes pode ter só 28, 29, 30 ou 31 días. Queremos esixir continuamente un número enteiro válido. Se introducir un número enteiro fóra do noso límites aceptados, imos levalos unha e outra vez, ata que ofrécenos un enteiro válido. Teña en conta que do "repeat ata" bloquear en cero? Podes facer unha construción semellante en C usando un loop "while" ou "-mentres facer" loop. A estrutura de loop while ten unha condición que deben ser cumpridos á corpo do loop para realizar. Isto debe parecer algo similar, porque a condición é igual a Bloques cero cos ángulos e nos soportes do loop "while". Entón, esta condición pode comprobar se o número enteiro queda os límites axeitados. Pode pedir o número enteiro usando GetInt e, a continuación, realizar o seu "tempo" loop, repetindo o poder e impresión instrucións, mentres que a entrada non é válido. Outra forma de garantir a entrada do usuario correcto está a usar un "do-while" loop, o que é moi semellante a un loop. O "faga mentres" lazo execútase o código dentro do corpo e, a continuación, os cheques a condición de ser satisfeita ou non. Isto é útil para a obtención de entrada do usuario, porque vostede sabe que precisa para levalos polo menos unha vez. Se a condición non se responde, o programa utilizará a liña tras seu ", mentres fan" loop. Se a condición se responde, porén, o ciclo se repetirá A "faga mentres" volta para a validación de usuario entrada será algo parecido a isto. Eu declaro unha variable n, GetInt e Repita ata que non é válido. E este proceso, eu expliquei, estaba usando o tipo integer-data, que vai empregar para os días do mes. Pero sabemos que o número de moedas de un centavo se acumulan rapidamente, polo que, a fin de almacenar números grandes, usa o tipo de datos LongLong, pero lembre se a mesma principio de validación se aplica. Impresionante, entón cando temos dous válido entradas do usuario - días do mes e as moedas de un centavo o primeiro día - podemos pasar á seguinte parte do programa. O primeiro día, o usuario comeza con porén moitos tostões eles especificados e a cantidade de moedas que recibir, o día seguinte é dobrada. Polo tanto, ten sentido manter o control destes dous valores - canto diñeiro o usuario ten e como moitos tostões que será dado. Agora facer algo por 28 a 31 días é repetitivo, por iso imos usar un "for" loop para iterado sobre os días no mes, actualizar o total e peso cantidade de cada vez. "Para" sintaxe de loop contén o seguinte - unha inicialización, unha condición, e unha actualización. O seu bucle "for" pode arrincar unha variable, cando entra por primeira vez o loop. Se a condición se responde, o corpo do loop será executado. Despois diso, a actualización será executada. Se a condición é aínda cumprida, o loop executarase e actualizar e repetir, sempre que a súa condición valorada como certa. Velaquí un loop "é" que divide unha número enteiro de 2 p por un total de 10 veces. Observe como eu declarei o enteiro p fóra do meu loop "a", de xeito que o enteiro pode ser accesible fóra do loop "a". Despois de que o mes pasou, é hora para informar ao usuario canto diñeiro eles quedaron. Pola especificación, ten que informar ao usuario cantos dólares, e non como moitos tostões, que eles teñen. Pero ata agora, mantivo o control do total e os tostões que utilizan LongLongs, que son números enteiros. Hai 100 centavos a US $ 1, salvo que o número de moedas é unha múltiplo de 100, vai ter representar cifras decimais. O autotype dobrou permite que faga iso. Entón, como imos converter de representar tostões para dólares? Imos dar un ollo pi.c. Este programa ten un big_pi LongLong e divídese por 100 mil, e imprime o resultado de cinco cifras decimais. Se quixésemos ver catro decimal lugares, entón podemos simplemente substituír este número aquí. Entón, imos gardar, compilar pi, e entón ver o resultado, que esperar ser 3,1415 - os cinco primeiros díxitos do pi. Non é con todo. E por que? Ben, porque big_pi é un LongLong, que é un número enteiro, o que non manter o control de cifras decimais. A modificación que eu teño facer é en división. Eu teño converter a un double aquí antes división, porque dobres non pode manter seguir de cifras decimais. E eu estou indo a engadir unha nova liña aquí para unha mellor formato. E aquí temos que - 3,1416. Pode notar que imprime 3.1416 no canto de 3,1415 como se esperaba. Isto porque roldas durante o proceso de división, en vez de só truncando o valor. Agora ten que ser capaz de imprimir a total final correctamente, que remata o programa. Parabéns. O meu nome é Zamyla. E iso foi tostões. [Música tocando]