[Музички] ZAMYLA CHAN: Дали сакаш да добијат 10.000.000 $ во моментов или примате пени секој ден од месецот, каде што секој нареден ден, ќе добиете двоен износ на пени можете добиени на денот и пред тоа? Во пени, ние ќе докаже зошто треба да дефинитивно се земе пени. Вашата работа е да се напише pennies.c-- програма која прв го прашува корисникот како многу денови постојат во месецот и потоа го прашува колку пени на корисникот ќе добијат на првиот ден. На програма, тогаш треба да се пресмета износот што на корисникот ќе има акумулирани на крајот на месец и прикажување на тоа. Ние може да се скрши оваа програма се во неколку задачи. Ние ќе мора да го извести за повеќе корисник влезови - денови и месеци, а пени на првиот ден. Ние треба да ги пратите на тоа колку пари корисникот има и надградба на тоа секој ден, а удвојувањето на износот на пени што го добиваат. И конечно, го печати нивните конечна вкупно, во долари. Ајде да се справи со корисник влез во прв план. Одам да се отвори apples.c, кратка програма која се занимава со влезови и излези. На врвот тука, јас сум вклучен некои на библиотеките што ми треба - CS50 библиотека и стандарден I / O библиотека. Ќе печати на брза помош на printf функцијата од стандард I / O библиотека. Но, вистинските предизвикувајќи на корисникот се случи во наредните согласност со овој GetInt функција во CS50 библиотека. GetInt добива влез од корисникот и осигурува дека влез е цел број. Па јас чување влез на корисникот во цел број Јас, одземе 1 од i, а потоа печатење на нова вредност, ако јас. По составувањето apples.c користење на команда "направи јаболка," Имам извршна датотека јаболка. Вклучување на тоа, јас ќе влезните 1. На програмата ми кажува дека Имам 0 јаболка лево. И така што работеше како што се очекува. Па ајде да ја извршите оваа повторно и внесување на негативна 1. Сега, да има негативен износ на јаболка не навистина има смисла, но на програмата, таа прифаќа, бидејќи негативните 1, добро, тоа е цел број. И сега на програмата или на чудовиште во внатрешноста на програмата јаде негативни јаболко, и сега имам негативни 2 јаболка. Хм, па тоа е една лекција - иако GetInt функција и поврзани функции, како GetFlow или GetString се добие право тип на податоци, можете Мора да бидете сигурни дека влезот го прави чувство за вашата програма. Во пени, тоа нема да го стори само брза за цел број, ќе мора да се направи сигурни дека корисникот влезови целобројна кои го прават смисла со оглед на контекстот. Месец да имаш само 28, 29, 30, или 31 дена. Сакаме постојано да бараат валиден број. Ако тие влез целобројна надвор од нашата прифатените граници, ние ќе ги поттикне повторно и повторно, додека не го ни дадат валидна цел број. Потсетиме на "Повторете се додека" блокира во Скреч? Можете да направите слична конструкција во C со помош на "додека" јамка или "не-додека" јамка. Додека јамка структура има состојба кои мора да бидат исполнети за Телото на јамка да се изврши. Ова треба да се погледне малку слични, бидејќи состојбата е исто како и Нула блокови со краци и оди во загради на "додека" јамка. Па таа состојба ќе се провери дали на број е во рамките на соодветни границите. Можете да го натера цел број со користење GetInt а потоа изврши својата ", додека" јамка, повторување на брза и печатење инструкции, додека влезната не е валидна. Друг начин да се обезбеди правилна корисник влез е со користење на "не-додека" јамка, кој е многу сличен на Додека јамка. На "не-додека" јамка извршува кодот во внатрешноста на телото оние кои и потоа проверки дали услов е исполнет или не. Ова е корисно за добивање на корисникот влез, затоа што знаете дека ви е потребна да ги поттикне барем еднаш. Доколку условот не е исполнет, на програмата ќе го изврши линија по Вашиот "не-додека" јамка. Ако услов е исполнет иако, јамка ќе се повторува А "не-додека" јамка за потврдување на корисник влез ќе изгледа нешто како ова. Јас декларирате променлива n, GetInt, и потоа се повторува се додека n е валидна. И овој процес, јас објасни, беше користење на број-тип на податоци, кои дека ќе се користи за деновите во месецот. Но ние знаеме дека бројот на пени ќе се таложат брзо, па со цел да чување поголеми броеви, користете податочен тип LongLong, но се сеќавам на истиот принцип на нострификација се однесува. Страшни, па еднаш имаме две валидни влезови од корисникот - денови во месецот и кусур на првиот ден - ние може да се движи кон следниот дел од програмата. На првиот ден, корисникот започнува со меѓутоа многу пени тие утврдени и износот на пени дека тие добие на следниот ден е двојно зголемен. Па логично е да ги пратите на овие две суми - колку пари корисникот треба и како многу пени тие ќе бидат дадени. Сега, прави нешто за 28-31 дена е повторувачки, па ајде се користи "за" јамка да iterate во текот на деновите во месец, ажурирање на вкупно и денар изнесуваат во секое време. "За" јамка синтакса содржи следниве - иницијализација, состојба, и ажурирање. Вашата "за" јамка ќе се иницијализира променлива, кога станува прва влегува во јамка. Ако услов е исполнет, телото од циклусот ќе се изврши. Потоа, ажурирање ќе се изврши. Ако состојбата се уште се исполнети, јамка ќе се изврши и ажурирање, и повторува, се додека вашата состојба оценува за вистина. Тука е "за" јамка што го дели со број стр од 2 вкупно 10 пати. Забелешка како јас го прогласи број стр надвор од мојата "за" јамка, така што број може да биде достапна надвор од "за" јамка. По месец помина, време е да им кажам на корисникот колку пари тие ги добиле. На спец, треба да му кажете на корисник колку долари, не колку пени, тие имаат. Но досега, сте водел сметка вкупно и пени користење LongLongs, кои се цели броеви. Постојат 100 пени до $ 1, па освен ако бројот на пени е повеќе од 100, ќе треба да се претставуваат децимални места. На двојно autotype овозможува можете да го направите тоа. Така како ние да го конвертирате од кои претставуваат пени на долари? Ајде да ги разгледаме pi.c. Оваа програма ги зема LongLong big_pi и го дели од 100.000 и отпечатоци резултат на пет децимални места. Ако сакавме да се прикаже четири децимална места, тогаш ние само може да го замени овој бројот тука. Па ајде спаси, состави пи, и потоа го види резултатот, кој ние се очекува да биде 3,1415 - првите пет цифри од пи. Тоа не е иако. И зошто? Па, затоа што big_pi е LongLong, која е цел број, кој ќе не ги пратите на децимали. Модификација што треба да направи е во поделбата. Јас треба да го дадат на двојно тука пред поделба, бидејќи двојки не можат да продолжат ги пратите на децимални места. И јас ќе одам да додадете нова линија тука за подобро форматирање. И тука ние го имаме - 3,1416. Може да забележите дека тоа отпечатоци 3,1416 наместо 3,1415 како што се очекуваше. Тоа е поради тоа рунди за време на поделба процес, за разлика од само truncating вредноста. Сега треба да бидете во можност да се печати конечна вкупно правилно, која завршува на програмата. Алал да му е. Моето име е Zamyla. И тоа беше пени. [Музички]