>> [Musik Spela]
>> DAVID MALAN: Okej.
Välkommen tillbaka.
Detta är CS50, och detta är Vecka One, Fortsättning.
Så en av anledningarna till att vi har passerar kring teknik som
Google Glass är att de kommer med något som kallas ett API, ett
Application Programming Interface.
Och vad detta betyder är att med rätt filer och med rätt
dokumentation, kan du skriva faktiskt programvara för även enheter som dessa.
>> Och så vad vi har i åtanke mot terminer slutet är, om ett projekt
innebär, säger, Google Glass kan överklagande, vi får se vad vi kan göra i
termer av hooking dig med några lånad hårdvara såväl som den
allmänt tillgänglig API så att du kan faktiskt börja skapa programvara
som körs på samma Google Glass.
>> En annan enhet som vi har spelat med för sent att vi trodde kanske
kul på terminen slut är denna lilla sak här.
Det kallas Leap Motion, och vad du är om att se är tekniskt en
reklam för enheten, men det talar vad detta
enheten är kapabel till.
Och det också kommer med ett API via som du kan skriva program till
styra din egen dator på ett sätt ganska precis den här minuten filmen här.
>> [VIDEO SPELA]
>> [END VIDEOAVSPELNING]
>> Så just nu, händer här enheten genomföras som en liten USB
kontakt som du kan ansluta till din dator, men jag skulle inte bli förvånad
om innan länge vi har dessa typer av teknik i nästa omgång av datorer
och Mac så att du kan, faktiskt, interagerar med den i
ett sätt som.
I själva verket, vad jag trodde jag skulle göra också, är Jag drog upp en liten demonstration
program som medföljer den här programvaran.
Så jag har lagt den lilla sensorn framför min laptop.
>> Och som ni kan se, inser att det redan att min hand är det
styra det.
Och allt det här programmet gör är lekande små saker som detta.
Men du kan se att, ja, Jag har fem fingrar där.
Om vi ​​kan få den att göra alla 10, du kan tänka dig ett snyggt piano
ansökan eller liknande.
Så om du skulle vilja komma upp efter klass idag och spela med det som
Tja, är du välkommen att.
Så mer om det mot terminens slut.
>> Så ett par administrativ tillkännagivanden.
One, gör avsnittet av denna fredag vid lunchtid på cs60.net/section.
Denna URL är på kursens hemsidan också.
Under tiden, dock, supersections kommer debut denna söndag.
Supersections är en engångs grej, eftersom det tar oss lite tid att arbeta
reda på vem som är i vilket avsnitt och där.
>> Så nu på söndag, kommer det att finnas en avsnitt för de mindre bekväm,
ett avsnitt för dem mer bekväm.
Och de av er någonstans i mellan är välkommen att gå till
endera eller båda eller ingen.
Båda dessa kommer att filmas.
De kommer att vara i ett större auditorium än en del som normalt skulle vara i.
Men målet här är att utrusta dig med viss tröst med problem som en,
med C, med CS50 apparaten, detta helg, även innan du reda på din
formella delen uppdrag.
Så möter du din TF och din mindre grupp av sectionmates i omkring
en veckas tid.
>> Kontorstid, under tiden, har pågått.
Gör dra nytta av dem i kväll eller i morgon kväll om du vill.
Problem set 0 beror på fredag.
Detta är en dag senare än regelbundet-planlagd torsdag.
Men med problem set 1, ser du att den innehåller lite uppvärmning
övningar som du själv kan förlänga ditt
Torsdag deadline till fredag.
Problem set 1, under tiden, kommer debut på kursens hemsida detta kommer
Fredag, om du skulle vilja krypa upp med det som jag gjorde en gång i tiden sen
Fredag ​​kväll i ditt rum.
>> Så cs50.net/appliance är den plats där du kan få CS50 apparaten
att vi började använda på måndag.
Vi kommer att använda den lite mer idag.
Men lita på att problemet satt 1 Specifikationen kommer att gå igenom
exakt de steg du behöver att få det igång.
Så oroa dig inte om att göra det innan Pset 1 om du inte vill.
>> Okej.
Så vi tittade på måndagen källkod, men i samband med en ny
programmeringsspråk, nämligen C och C, Till skillnad från Scratch, inte grafiskt.
Det är pussel inte bitar.
Det är mer engelska-liknande syntax.
Och det finns ett par inblandade steg i faktiskt skriva och köra ett
program i C, eftersom förutom källan kod som denna, behöver du något
kallas en kompilator.
Och i lekmannaspråk, vad gör en kompilator för oss?
Yeah.
>> STUDENT: Den omvandlar koden att du skriver till 0 och 1.
>> DAVID MALAN: Bra.
Så det omvandlar koden som Vi skriver till 0 och 1.
Den konverterar s.k. källkod till objektkod, den senare som ser
lite ungefär så här.
Och det är din CPU, hjärnorna inuti datorn, som på grund av
människor som skapade dessa datorer, vet vad dessa sekvenser
av 0 och 1 medelvärde.
>> Kanske det betyder print.
Kanske det betyder tillägg.
Kanske det betyder subtraktion.
Kanske betyder det visa en bild.
Det finns fördefinierade mönster av bitar att världen har beslutat detta
vissa saker.
Men för det mesta i denna kurs, vi kommer att arbeta på en högre nivå, och
vi tar för givet att det finns saker som kompilatorer som kan
göra vår funktion källkod på det sätt vi tänker.
>> Så det program vi först skrev förra veckan och sedan började port, så att
tala, till C detta tidigare Måndag, var detta.
När grön flagg klickade, säga hej.
Detta var naturligtvis skriven i Scratch.
Och jag hävdade att motsvarande program i C såg lite
ungefär så här.
>> Så vad jag trodde vi skulle göra först är, låt oss retas isär vad som ser, vid första
blick, visserligen, som ganska svårbegripliga syntax, men du kommer att börja märka
mönster ganska snabbt.
Vad ska vi också göra i dag är att ge dig med en mental modell för vissa
Canonical, några vanliga konstruktioner i programmering.
Och sedan ska vi faktiskt få våra händer smutsiga med några exempel också.
>> Så för de av er mer bekväm, inser att denna vecka och sedan nästa
vecka kan mycket väl vara en bit av översyn.
Men särskilt när hackare upplagan av problem set 1 går ut på
kursens hemsida på fredagen, tror jag du kommer att upptäcka att även när du fyller i
vissa ämnen under nästa vecka eller två, du börjar få allt mer
utmanas och möter nya och nyare saker.
>> Så låt oss retas detta program isär några rader åt gången.
Högst upp har vi vad som är tekniskt kallas en
förprocessor direktivet.
Detta är bara en kodrad som säger att inkludera innehållet i en fil,
kallas standard I / N, standard input - eller, förlåt, standard I / O, standard
input / output,. h, insida av mitt eget program.
>> Så med andra ord, om jag skrev detta program med en enkel textredigerare som
gedit, den enklare motsvarande något som Microsoft Word, som
instruktion, # include stdio.h är bara kommer att tala om för kompilatorn, greppa
innehållet i den andra filen, stdio.h, och klistra in dem här.
>> Nu, varför jag bry mig?
Vad gjorde vi hävdar är inne i den här filen kallas stdio.h, som lagras
någonstans på min hårddisk, eller i detta fall, någonstans i CS50 apparaten?
Någon annan lägga den där för mig.
Men vad betyder det?
>> Ja, så det är en försäkran om en funktion som heter printf.
Så printf påminner funktion som visar ord och tecken och
nummer på skärmen på min budgivning.
Men jag ville inte skriva det.
CS50 inte skriva det.
Någon år skrev sedan det, och de huvudsak gav oss receptet för det
i en fil som heter stdio.h.
Så att första raden ger bara mig tillgång till funktioner som någon annan
skrev år sedan, bland vilka är printf.
>> Nu, nästa rad jag ska vifta min handen på, åtminstone tills nästa vecka.
Men för nu, vet att int main (void) är väsentligen motsvarar detta
gul pusselbit när grön flagga klickade.
Världen, år sedan, bestämde att om du skriver ett program i
språk som kallas C, du börjar ditt program med en rad
som ser ut som det.
I nästan en veckas tid, det ska göra känna vad int är, vad tomrum.
Men för nu, tänk bara på det eftersom denna gula pusselbit.
>> Nu nästa, har vi en klammerparentes följde av en annan nära klammerparentes,
så att säga.
Och vi får se dem i hela program i C, samt
JavaScript och PHP.
Och dessa kapsla bara relaterade rader kod.
Den öppna klammerparentes huvudsak säger, här kommer lite kod.
Och den slutna klammerparentesen, vilket är vinklad i den andra riktningen, bara
betyder, det är det för den aktuella koden.
>> Så saftigt linjen i denna första Programmet är det sista, printf,
quote-unquote, hallå världen.
Och jag heter sak mellan citat vad förra gången?
Så det är en sträng.
Och en sträng är bara techie term för en sekvens av
tecken, ett ord, en fras.
Även en enda bokstav kunde vara dubbelt citeras.
Men det är en sekvens av noll eller flera tecken.
>> Backslash-n, fast, ser lite konstigt.
Men det betydde helt enkelt något enkel till datorn.
Vad är omvänt snedstreck-n?
Ny rad.
Så det är bara speciell sekvens av tecken på att världen har beslutat
medel sätta en radbrytning just där, eftersom kompilatorn kommer faktiskt få
förvirrade, oftast, om du, mycket förståeligt, men felaktigt, precis
börja slå Enter för att sätta nya rader i koden.
Du måste vara lite mer explicit med backslash-n.
>> Och vi får se att det finns några andra sådana mönster för specialtecken.
Till exempel, att om du ville låta din sinne vandra till ett hörn fall
antar att jag ville skriva en dubbla citationstecken på skärmen för
oavsett skäl, skulle det verkar vara lite problematiskt, rätt?
För om jag sätter en dubbel citat i mitten av "Hello, world," oavsett
skäl, varför det förefaller potentiellt problematiskt?
Det bryter strängen.
>> Kompilatorn är bara ett program.
Ett program som en kompilator är bara att gå att läsa din kod topp till botten,
vänster till höger.
Och om ser tre citattecken istället av två, det kommer inte att veta
Om du menar att saken till vänster bör vara strängen, eller den sak att
höger, eller alltihop.
Det är tvetydigt, och så vad en typisk kompilatorn skulle göra är att bara flippa ut,
och ge dig några felmeddelande, och gör dig ta itu med problemet.
>> Så med tanke på att backslash-n betyder ett nytt linje, vad skulle dina instinkter nu
börjar vara om du ville inkludera något onormalt som en dubbel
citera insidan av denna annars citerade snöre?
Backslash-dubbla citattecken.
Och så får vi se detta typ av mönster också.
>> Om du vill göra något lite konstigt, ser du att det
lösningar följer ofta ett mönster, och omvänt snedstreck
betecknar en escape-sekvens.
Och det betyder bara något speciellt att vi måste representera i ett
annat sätt.
När det gäller hur du representerar ett omvänt snedstreck, ja, vi
komma tillbaka till det.
Men svaret, också, är faktiskt lite uppenbart.
>> Så låt oss nu införa någon annan programmering konstruktioner
som du såg i Scratch.
Du har förmodligen tagit för givet redan om du redan dök in
problem som 0.
Men låt oss nu införa syntaxen i C för dessa annars ganska intuitivt
idéer, åtminstone några av dem.
>> Så denna föreställning om ett tillstånd eller en gren, medan vi tidigare
representerade den med kod som såg så här till vänster i Scratch -
Om x är mindre än y, säg det -
istället nu i C - låt mig finslipa in på det enklaste fallet -
vi bara kommer att säga om, öppnar parentes, är något sant - en
Booleskt uttryck kommer att gå där jag har sagt tillstånd -
stäng parentes, sedan vad insidan av dessa klammerparenteser.
>> Så även här klammerparentesen är ungefär som Scratch s
U-formade pusselbitar.
Gör vad som finns inuti dessa klammerparenteser.
I detta fall, snedstreck snedstreck.
Och märker detta är en framåt snedstreck, inte ett omvänt snedstreck.
Snedstreck, snedstreck, för dem som har programmerat
tidigare, betyder bara -
det är bara en kommentar.
En kommentar är inte en linje av kod, per se.
Det är en rad av engelska som du, det människa, har skrivit till dig
kanske påminna dig att göra något, till förklara för dig själv, för att förklara för
någon annan, vad din kod gör.
Det är bara en beskrivande kommentar.
>> Nu, naturligtvis, kan vi ha en tvåvägs vägskäl bara genom att göra detta, en
tre-vägs vägskäl genom att göra detta, och om du fortsätter
mönster, kan du ha fyra-sätt, fem-vägs, sex-vägs gafflar i vägen om
du behöver för att hantera, ja, att många förhållanden.
Och sedan märker parallelliteten här -
if (villkor), else if (villkor), och det enda som är lite
konstigt är det sista, vilket är just det annars.
Men återigen, detta är identiska, konceptuellt, vad vi har gjort
redan, även om syntaxen ta lite tid att vänja sig.
>> Nu, i detta exempel finns det någon annan konstig syntax.
Vi ser printf igen, öppen parentes, och avslutande parentestecken.
Och inuti finns en sträng inom citationstecken.
De parentes, inom ramen av printf, gå till vänster
och till höger om vad?
Vad beskriver vi som citeras sträng som mer allmänt?
>> Så det är ett argument.
Varje gång du har en funktion, som printf och sedan en öppen föräldra och en
nära föräldra och något inuti det, oavsett om det är en sträng, eller en
heltal, eller något annat, den saken i mellan dessa parenteser kallas
ett argument.
>> Och ett argument påverkar bara funktionens beteende.
I detta fall är klart det ganska hur.
x <y är vad som förs vidare in, så att säga, som ett argument.
Och printf kommer att skriva ut exakt det.
Eftersom säkerligen den person år sedan som genomförs printf hade ingen aning
vad vi mänskliga efterföljare var kommer att använda printf för.
Så det är därför argument finns, påverka beteendet efter en funktions
skrivits.
>> Nu, booleskt uttryck.
Vi har sett dessa innan i Scratch.
Det visar sig i C kan du också "eller" ihop dem, så att säga.
Två vertikala streck betyder att detta block av koden, detta gör detta kommer
köra om det första villkoret är sant eller det andra villkoret är sant.
Och även om du kanske inte har gjort detta i Scratch, kan du verkligen
göra detta i Scratch, och du kan också uttrycka dig annorlunda -
om det första villkoret och den andra villkoret är sant, vad är
insidan av klammerparenteser.
>> Och precis som en parentes, anledningen till det är en dubbel-tecken och en dubbel
vertikalt streck, vi får se så småningom att en enda vertikal bar och en
enda ampersand har faktiskt olika vilket i C. Så för nu,
att duplicering av symboler är avsiktlig.
>> Så låt oss presentera, kortfattat, denna andra bit av syntax.
Detta inte riktigt föra över till Scratch, men jag hävdar att jag kan
genomföra idén om en om annat, om annars, om annat, om annat uttalande med
något som kallas en switch.
Och den enda anledningen detta verkligen existerar är att bara ge dig, programmerare, en
något annorlunda sätt att lösa några problem, även om logiskt att det
inte ger dig några nya funktioner.
>> Med det menar jag det.
När du säger switch, och sedan ett mellanslag, och sedan ett par parenteser inuti
av vilka går ett uttryck -
och detta kan vara lite icke uppenbara i början, men detta är inte ett argument,
tekniskt, eftersom brytare är inte en funktion.
Så för nu, bara anta att vi använder parenteser på olika platser
av olika skäl.
>> Så slå på uttrycket betyder att jag kan sätta en variabel inuti dem
parenteser där det står uttrycket.
Och sedan om den variabeln -
antar att det kallas x, och det är bara ett heltal -
Jag kan då räkna in min bild här något som detta.
Om x är min variabel, och jag vill göra något om x
är lika med 1, kan jag göra det.
>> Om jag vill ha istället för att göra något Om x är 2, kan jag göra det.
Else, om jag vill göra något annat helt, kan jag ha en standard fall
då jag gör denna andra sak.
Så i den meningen är det likvärdigt med ett om x är lika med är lika med 1, annars om annat,
men jag nämner detta nu bara för att vi får se det igen.
Men för nu, vet bara att den finns.
>> Okej.
Så dessa sista paret är lite mer komplex vid första anblicken, men de gör
något ganska okomplicerad.
En for-loop i C är en bit av kod som bara gör något nytt och
igen och igen.
Och det bara irriterande om det är det är att det är lite kryptisk
att uttrycka dig i denna cykliska mönster, men världen standardiserat på
följande sätt.
>> När du använder en for-slinga, har du fått ett par av parenteser igen.
Och märker de två semikolon i det.
Dessa två semikolon separata tre olika uttryck insidan av
parentes.
En är den så kallade initieringar.
En är den så kallade tillstånd.
Och ett är de så kallade uppdateringar.
>> Tittade på i det abstrakta, är detta helt icke-uppenbara, så låt oss titta
vid ett konkret exempel.
I Scratch hade vi en upprepning blocket.
Och detta block sade upprepa 10 gånger, säger "Hej, världen." Låt mig hävdar att
nu, och vi ska återkomma till detta, och Detta kommer också att få mer bekant med
dig innan länge, motsvarande C kod kan sägas vara här -
en för uttalande och ett utrymme, ett par parenteser, märker semikolon i
där, som separerar tre distinkta saker, initiering,
skick, och uppdateringen.
>> Och ta en gissning vad det första gör.
Int i = 0.
I grova lekmannaspråk, vad är att göra för oss, antagligen?
Så ja.
Det förklara en variabel som heter jag, och det är att ge det vilket värde?
0.
Så det är att skapa en variabel som heter Jag, lagra värdet 0 i den.
Det är den så kallade initiering.
>> Okej, nu har jag påstod tidigare att mitten sak, jag
<10, är ​​villkoret.
Så vad gör?
Nå, vad för loop gör när en program med en for-loop körs, är
varje gång datorn går genom denna slinga, uppifrån och ned, uppifrån och
botten, precis som ni gjorde när räkna er själva och sitta ner,
igen och igen och igen, datorn kommer
att kontrollera att villkoret.
Och om jag är mindre än 10, Det ska göra det igen.
Om i är mindre än 10, Det ska göra det igen.
Om i är mindre än tio, Det ska göra det igen.
Så det tyder på att förhoppningsvis jag förändras.
Annars skulle vi ha en oändlig loop.
Och sannerligen, jag förändras, eftersom sista efter semikolon finns
är den något kryptiska syntax i + +.
Men de av er som har gjort detta tidigare, innebär att bara
helt enkelt vad?
>> STUDENTER: [inplacering RÖSTER].
>> DAVID MALAN: Lägg 1 till i..
Increment i.
Så vi såg en Scratch pussel lappar för det, faktiskt.
Det ser inte ut som jag + +, men som bara betyder helt enkelt öka den
värde som jag med 1 varje gång du gör detta.
Så bokstavligen, börjar du med initierar jag till 0.
Du kontrollerar sedan ditt tillstånd.
Är 0 mindre än 10?
Ja.
Vi går genom öglan.
>> Nästa sak jag hävdar datorns kommer att göra är att det kommer
att inkrementera i.
Så jag är nu 1.
Det kontrollerar villkoret.
Är en mindre än 10?
Självklart.
Så gör det igen.
Sen steg jag + + till 2.
Är 2 mindre än 10?
Ja.
Och igen och igen och igen.
Och slutligen, på grund av den plus-plussing, får vi att jag är lika 10.
Är 10 mindre än 10?
Tja, uppenbarligen inte.
Och det är den punkt där for-loopen stannar precis.
Och om du har mer kod på skärmen nere, datorn
fortsätter att köra den koden istället.
>> Så återigen, även om detta kommer att ser ut och känns lite konstigt på
först, säkert för dig som har aldrig programmerat förut, det
bokstavligen minskar begreppsmässigt vad är annars en mycket
okomplicerad pussel bit i Scratch.
>> Okej, lovade jag att det skulle finnas andra analoger i Scratch.
Det finns här också.
Och vi såg detta kort förra gången.
Men kom ihåg det forever Block i början?
Det gör bara något evigt?
Jag hävdade att man kunde genomföra detta på detta sätt.
Och du kan faktiskt genomföra detta i en massa olika sätt.
>> Men när slingan är bara en annan sätt på C för att uttrycka dig själv.
Vid slutet av dagen, kan du inte göra någonting med en while-slinga som du
kan inte med en for-loop.
Så de är i slutet av dag funktionellt detsamma.
Men det tillåter dig att uttrycka dig lite annorlunda i
följande sätt.
>> Med while-slingan, det är vad som finns i parenteser som har kontrollerats igen och
igen och igen.
Och så snart det uttrycket är falskt, då slingan upphör att exekvera,
och datorn fortsätter till köra vad andra koden du
ha i din fil.
>> Men vad som är intressant här är som jag skrev bokstavligen sant.
Och sant är en typ av booleskt värde, ett sant eller falskt värde.
Så kunde riktigt någonsin blivit false om jag har bokstavligen
hårdkodade in den i mitt program?
Så nej.
Det är lite konstigt att jag gjorde det här.
Men sant är sant.
Det finns inget plus-plussing.
Det finns ingen användning av variabler i här.
Så eftersom jag hårdkodad medan sant, detta slingan kommer alltid att utvärdera
igen och igen och igen.
>> Så hur många gånger är hallå världen kommer att skrivas ut på skärmen?
Forever.
Ett oändligt antal gånger tills batteri formar eller någon annan yttre
händelse inträffar.
Så det här är förmodligen inte det bästa programmet att skriva, för om användaren
aldrig kan sluta ditt program, är det förmodligen inte vad du tänkt.
>> Men ibland, program bör ha en oändlig loop.
Till exempel har om din dator en klockan på det, det skulle verkligen vara
trevligt om din klocka det inte hålla uppdatera sig för evigt, om än en gång
sekund eller en gång i minuten eller något liknande.
Så även oändliga slingor har sin plats.
>> Okej.
Slutligen, här.
Och den här är lite annorlunda funktionellt, och vi ska återkomma till
detta förmodligen i Pset 1.
Men det finns en annan typ av loop kallas en göra medan slinga.
Och den enda skillnaden här mellan en göra medan loop och, säg, en while-slinga,
är att villkoret kontrolleras inte innan du köra koden, men efter
du köra koden.
Så upptill för tiden slinga, medan den gör medan
kontrollerar den i botten.
>> Och det betyder bara att while-slingan kommer vanligtvis köra fler gånger
eller färre gånger än en while-slinga?
Potentiellt fler gånger, eftersom en göra while säger tydligt göra detta,
endast efter vilken punkt du kontrollera om villkoret insidan av
parentes är sant.
>> Så vi får se detta igen förmodligen i Pset 1.
Om du någonsin vill göra något på åtminstone en gång och då kanske lite mer
gånger, är detta en bra konstruera att använda.
Men en while-slinga, däremot, kommer kontrollera dess tillstånd först.
Och det är det för loopar i C, gör medan, samtidigt, och loopar.
Och återigen, kartlägga de ganska snyggt tillbaka till Scratch, utom här inte
riktigt har samma analoga i Scratch.
>> Tja, vad sägs om, nu, variabler?
Så det här är hur jag förklarade en variabel syntaktiskt häromdagen.
Jag hade en int, vilket jag hävdade är ett heltal.
Jag hade då en variabel som heter räknare, och sedan ett semikolon.
Så vad är det här kodraden gör?
Det är, helt enkelt, förklarar en variabel -
det är, frågar datorn, ge mig en del minne, ge mig några bitar - i
som jag kan lagra vad?
En int.
Och semikolon betyder bara slutet av kodrad.
>> Nu är den andra raden förmodligen ganska gissa sig till.
Vad är räknare = 0; göra?
Det tilldela 0 att motverka.
Och så detta är en annan sak som är lite irriterande
kontra, säger, algebra.
I algebra, betyder likhetstecknet jämlikar, här i C, lika
tecknet betyder uppdraget.
Så det betyder att sätta vad som finns till höger i vad som finns till vänster.
Och vi får se en annan symbol, lika jämlikar, när vi vill verkligen testa
för kvalitet, något irriterande.
>> Men detta är lite ineffektivt.
Det är typ av irriterande att jag har att deklarera en variabel och
sedan ge det ett värde.
Så C låter faktiskt oss förenkla denna och bara göra allt på en gång.
Du kan deklarera variabeln till vänster.
Du kan fortfarande göra uppdraget på rätt genom att sätta det likhetstecken
mitten.
Så i slutet av dagen, dessa två är likvärdiga, men här, ärligt talat,
är förmodligen bättre vana att komma in bara för att det är lite mindre
kod, är det lite lättare att läsa, och det stramar bara upp
din kod, så att säga.
>> Några frågor hittills på slingorna, på variabler, på villkor, om
Booleans, vare sig tekniskt eller konceptuellt?
Okej.
Så nu här nästa man får en lite mer intressant.
Och detta är det exempel jag satte upp förra tid som bara avbildar en Scratch exempel
över till C.
>> Så en funktion.
I lekmannaspråk, är vad en funktion?
Fick vara djärvare med ditt svar.
Vad är en funktion?
>> STUDENT: Gör något.
>> DAVID MALAN: Vad är det?
>> STUDENT: Gör något.
>> DAVID MALAN: Gör något.
OK.
Vi börjar där.
Så en funktion gör något.
Så det är en bit kod som är genomförs i huvudsak i andra områden som
faktiskt gör något.
Nu, vad är intressant med en funktion är att det kan ta input,
och det kan producera utskrifter.
Och låt oss ta faktiskt en titt på detta.
>> Så mannen bakom gardinen var avsiktligt en stund sedan.
Här har vi en tabell.
Men anta att detta faktiskt representerar en stor låda.
Så det här är en så kallad svart låda.
Och i allmänhet, i design, i datorn vetenskap, svarta lådor hänvisar bara till
bitar av funktionalitet som någon har genomfört, och du gör inte
nödvändigtvis vet eller bryr sig om hur det är genomförs under huven.
Du bryr dig bara att denna svarta låda, som vi nu börja ringa ett
funktion, gör något.
>> Så, till exempel, om denna svarta låda på scenen här representerar printf, en
funktion, jag vet från tidigare exempel som tar printf en eller flera
argument, och den första av dem argument ska vara en sträng, som
"Hej, världen." Tja, om jag är den personen skriva programmet, och jag vill
att använda printf, jag, till exempel, kan ta en bit blankt papper här och ett
svart markering och skriva på det -
Jag felstavade "världen" -
H-E-L-L-O.
>> Så jag tar min svarta markör och jag ska skriva, så stort och läsbart som jag kan på
detta papper, "Hej, världen," Och nu har jag hävdar att detta är mitt argument.
Detta är en sträng representerade med en bit vitt papper.
Och min ingång nu till funktionen printf kommer att vara här.
Så jag kallar printf, passerar detta argument som indata till den.
>> Och nu vet jag inte hur den person som skrev printf gjorde det år sedan, men
Jag vet från sin dokumentation som sitt syfte i livet är att skriva vad jag
tillhandahålla till den som ingående.
Och så, trots att detta genomförande är okänt för mig
under huven, nu Jag ser, åh, det är gjort.
Det har tryckt något på skärmen.
Och nu styr i programmet, om det fanns fler rader kod, skulle
har nu återvänt till mig.
Och så det faktum att Colton -
välsigna hans hjärta, gömmer här under ett bord framför er alla -
är medvetet i att jag inte vet och jag bryr mig inte hur printf är
genomföras.
Jag vet bara, återigen, från dess dokumentation, vad den gör och hur jag
am ska använda den.
>> Nu, minns att printf kunde få en lite mer sofistikerad.
Återigen, vi pratar bara om motsvarande Scratch säga blocket.
Men jag gjorde även denna sista gång.
Jag ville göra min hello program en lite mer dynamiskt och inte bara hårt
code något som "världen" och definitivt inte svårt koden något
godtycklig som D-A-V-I-D i programmet.
Jag ville fråga användaren om hans eller hennes namn, och sedan göra något med
den strängen som de tillhandahåller.
>> Så det finns något lite annorlunda här. printf, för en stund sedan,
gjorde, ja, göra något, men det inte tillbaka någonting till mig.
Rätt?
Colton inte ge mig någonting tillbaka, inget papper.
Det var bara en bieffekt.
Min tillhandahålla "hello, world" som en argument till Colton resulterat i
bieffekt av ett ord, några ord, visas på skärmen.
>> getString, dock, är en liten olika. getString är också en
fungera, men den returnerar något värde.
Det har inte bara en estetisk bieffekt.
Det ger mig faktiskt, den person ringer eller använder funktionen,
något tillbaka.
Så i detta fall, är getString heter med getString öppen
föräldra, nära föräldra.
Har getString därför ta några argument eller ingång?
Nej, verkar det inte.
Dess syfte i livet är bara för att få en sträng.
Det behöver ingen mer ingående än så.
Så låt mig gå vidare och låtsas att, igen, är denna svarta lådan inte printf,
men getString, och låt mig, den person skriver detta program, ring eller använd
getString genom att bara skriva G-E-T-S-T-R-I-N-G, öppen paren, nära
föräldra, getString.
>> Nu har jag ingen aning om hur det CS50 personalen genomfört getString, men jag vet att
Om jag väntar tillräckligt länge, kommer den att göra sitt sak under huven, kanske med hjälp av
vissa variabler, kanske med hjälp av några förhållanden, kanske använda några slingor,
kanske använder vissa funktioner, kanske med hjälp av -
försöker bara stall - kanske med hjälp av några andra programmeringsspråk funktioner.
Men om jag väntar tillräckligt länge - i verkligheten, i datorn, händer detta
supersnabbt -
Om jag väntar tillräckligt länge, denna funktion getString kommer att få en sträng
från användaren, som är förmodligen att skriva ut på tangentbordet, och
då, när du getString görs få dessa tecken från användaren
och lagra dem i en sträng, som funktion, getString, kommer att ha
redo för mig lite utgång som jag är går att hämta i form av
tilldelningsoperator.
>> Och om jag går verkligen in i produktionen Här har Obosi generöst
deltog, utan att veta detta i avancera, genom att skriva sitt namn på detta
variabel, som representerar en sträng.
Nu, innebär uppdraget operatören, även även om detta kan kännas lite
redundant, gör jag verkligen behöver att göra min egen kopia av detta.
Eftersom på den vänstra sidan side - hoppsan! -
märker att jag i huvudsak har string namn på vänster sida.
Så jag kommer också att göra min egen kopia av detta.
Och detta är lite av en vit lögn, eftersom vi får se om en vecka eller två
tid att strängarna är faktiskt inte vad de verkar vara.
>> Men för nu, här är returvärdet.
Här är min egen kopia av det efter med tilldelningsoperatorn.
Och nu, vad jag vill göra härnäst?
Vi har nu den näst av två rader kod.
Så jag vill nu kalla printf.
Låt oss låtsas nu att den svarta box är tillbaka till att vara
printf och inte getString.
>> Printf denna gång kommer att ta hur många argument?
Så titta, det är som två.
Det finns två kommatecken i det, men en av dessa kommatecken, är det
insidan av citat.
Så det första argumentet är bokstavligen kommer att vara här.
H-E-L-L-O, kommatecken, procent s, omvänt snedstreck-n.
Och nu är jag ger inte ett argument, men två argument till printf.
>> Och vad printf ska göra med dessa två ingångar när jag passerar dem i
som argument?
Det är tänkt att ta den andra av dem, som jag kallade namn, så
andra papper jag skrev ut nyss kallas namn.
Det kommer att kontakten på värdet inuti av den variabeln i platshållaren,
% S, så att, återigen, på bara ett ögonblick tid, kommer vi att se en bieffekt av
Då kallade printf, där vi nu se inte "hej, värld," men "hej,
Obosi. "
>> Så en stor applåd till båda våra volontärer, varav endast en visste
detta skulle hända.
Okej.
Så kanske, enkelt som det var, Visst, om du redan känner
med sådant, förhoppningsvis kommer du aldrig glömma att särskilt visuellt om hur
funktioner fungerar.
>> Så det finns mer än bara getString.
Inne i CS50 biblioteket, det finns en massa funktioner, som alla
aktiveras bara för att klargöra som vi skrev dessa funktioner.
Typiskt, i C, nästan varannan funktion du kommer att använda är gemener.
Men vi använder medvetet versaler bara för att klargöra att dessa
är stödhjul slags som vi kommer använda för bara några veckor som
förenkla processen att få inmatning från användaren.
>> Den CS50-biblioteket gör ingenting att ni själva inte kan göra med
bara med hjälp av C-kod från en oldschool lärobok.
Men, återigen, använder vi dem som utbildning hjul av sorter för bara ett par
vecka så att vi kan bli av med komplexitet som ni snart kommer att förstå
själv att göra något som relativt enkelt som att få
inmatning från en användare.
>> Så vet att du kommer att ha tillgång att getchar, GetDouble -
fördubblas.
What's - och sedan getFloat.
Vad är ett flöte?
Låt oss börja där.
>> STUDENT: [OHÖRBAR].
>> DAVID MALAN: Yeah.
Det är ett nummer med en decimal.
Så medan en int är ett heltal, vilket är bara ett nummer med 0 till 9,
några antal repetitioner därav, en flottör är något
med en decimal.
Och en dubbel, under tiden, är också ett nummer med en decimal, men mer
siffror efter decimalkommat punkt, potentiellt.
>> Så vi återkommer till detta inom kort.
Men typiskt, var och en av dessa typer av data var och en av dessa typer av variabler
att ett bibliotek som vårt kan återvända till dig, använder olika antal bitar till
lagra information.
Typiskt en Char, vilket bara innebär ett tecken, använder 8 bitar.
Och det är faktiskt i linje med vår byte av volontärer förra veckan som
kom upp och representerade en ASCII-tecken i taget.
Så en Char är 8 bitar.
>> En flottör råkar vara 32 bitar, typiskt.
Och en dubbel, som ni kan gissa, är faktiskt 64 bitar, vilket är bara mer,
vilket innebär att du kan ha större siffror eller mer precision.
Men återigen, mer om det en annan gång.
GetLongLong under tiden, men dumt heter, är egentligen bara en
heltal som är dubbelt så stor, dubbelt så lång, potentiellt, som en vanlig
heltal, 64 bitar i stället för 32.
Och getString vi har använt.
>> Men det visar sig, i CS50 biblioteket som genomförs, så vi får se, i
formen av de två filerna, varav en heter cs50.h, har två andra
datatyper i det.
Booleans finns inte i C. Du kan simulera dem genom att bara använda 0 och 1
hela ditt program.
Men vi i CS50 biblioteket har skapat symbolerna "sann" och "falsk"
att representera 1 och 0 så att du inte måste hård-kod något
bokstavligen som 1 och 0.
Men vi får se dem igen.
>> String, också, inte existerar.
Och det är därför jag nämnde att det är en bit av en vit lögn för nu.
Men vi ska dra tillbaka den lagret innan lång.
Men för nu, är en sträng en sekvens av tecken.
>> Under tiden, i C, ja du har olika datatyper.
Lägg märke till dessa är gemener.
Så de funktioner du såg för en stund sedan är funktioner skrivna av CS50 som
kommer tillbaka till dig ett värde som faller in i någon av dessa kategorier.
>> Ett par fuska lakan bara för att plantera fröet här. printf inte bara
ta% s som platshållare.
Det tar% d för decimala heltal, eller% Jag skulle fungera lika bra.
% F flyttal. % C är för en röding, om du vill att bara ansluta en
karaktär i en förformaterad sträng som vi har gjort, kan du använda% c.
>> Och sedan, något irriterande,% lld är för en lång, lång heltal,
vilket betyder bara om du behöver en riktigt stort antal och du använder något
kallas en lång lång, som vi kommer tillbaka i en pset, kan du använda% lld till
berätta printf, koppla in en riktigt stor heltal här genom sin andra eller
något annat argument.
>> Och slutligen, lovade jag att Det finns ett par andra flykt
sekvenser som printf stöder.
Vi har sett backslash-n.
Backslash-r du kan se.
Det blir liksom en nygammal sak.
Om du någonsin använt en riktig skrivmaskin år sedan och du drog på veven
som inte bara roteras hjulet för att flytta lineupen, flyttade det också
hela hela vägen tillbaka över till vänster, väl, backslash-r bara
huvudsak flyttar markören tillbaka till början av raden
utan att flytta ner den.
Men återigen, mer om det, kanske i framtiden.
>> Backslash-citat, backslash-dubbla citattecken, omvänt snedstreck-omvänt snedstreck är den
lösning på den lilla gåtan Jag hänvisade till tidigare.
Och omvänt snedstreck-0 är faktiskt ganska intressant.
Men vi ska komma tillbaka till att innan lång.
>> Så låt mig gå in, nu, den CS50 apparat, och låt oss faktiskt göra en
snabbt värma upp med ett av de exempel vi redan och sedan gå vidare till
något lite mer komplicerat.
Så om jag öppnar upp mitt program kallas gedit -
detta är min grafisk editor.
Och jag kan göra det -
Låt mig avsluta det fönstret där -
genom denna ikon här nere, gedit, i det nedre vänstra
hörnet bredvid menyn.
>> Jag ska gå vidare och avancera, och spara detta exempel i, säg, John
Harvards mapp.
John Harvards mapp är just hans hem katalog där alla hans filer bor
som standard.
Och jag kommer att spara detta som en fil som heter hello-0.c.
Och jag har valt detta namn bara så det ställer upp med exempelkod på
kursens hemsida och i YouTube-videor på nätet.
>> Så nu ska jag börja skriva min första programmet.
Låt mig zooma in för läsbarheten.
Och jag ska gå vidare och säga int huvudsakliga tomrum, som bara är sådär
gul pusselbit som startar ett program.
Jag har fått till vana över år av att öppna mitt lockiga stag, sedan
också stänga den och sedan gå tillbaka till där jag vill lägga min kod, bara
eftersom det hjälper mig att hålla allt balanserad, särskilt som min
Programmet blir lång.
>> Och nu, här kommer jag att gå vidare och säga, printf, citerar slut citat,
hallå världen, backslash-n, stäng citationstecken, stäng parentes, semikolon.
Så jag bara upprepa allt vi har tagit för givet hittills.
Nu ska jag för att zooma ut.
>> Och detta terminalfönster här nere, vad får jag göra i detta svarta
och vita fönster?
Vad kan jag använda det till?
Så det är där jag kör kommandon och där jag kan kompilera saker.
Och jag kommer att hålla det enkelt.
Jag kommer att använda ett program kallas Gör, vilket inte är
tekniskt en kompilator.
Kompilatorns kallas klang, men Vi ska återkomma till detta i ett
vecka eller två tid.
>> För nu kommer jag bara skriva att göra hello-0, men de av er som var
jämföra i era sinnen vad jag just skrivit vad jag borde ha skrivit får
vet redan att jag gjorde något fel här.
Nu finns det helt klart vissa fel.
Innan jag tittar även på vad de är, något tankar om vad jag gjorde fel?
>> STUDENTER: [inplacering RÖSTER].
>> DAVID MALAN: Yeah.
Jag saknar bibliotekets header-fil.
Någon av dessa. H filer kallas header filer, och de kollektivt
hör till saker som kallas bibliotek.
Biblioteken är bara bitar av kod att andra människor skrev.
Så standard [? Jag?] biblioteket är en samling filer som innehåller kod
att andra människor skrev.
>> Så jag saknar det.
Så varför får jag ett felmeddelande?
Nåväl, låt mig rulla tillbaka upp i mitt terminalfönster här.
Och tyvärr, i C, som i en hel del programmeringsspråk, speciellt
om det är allt nytt för dig, felet meddelanden är exakta, men de är också
ganska kryptiskt.
Och felet här, i rött, är "Implicit förklara bibliotekets funktion
printf med typ, "och sedan rullar till nästa rad, "int const char *,
... "Det blir bara riktigt överväldigande snabbt.
>> Men vad ska du börja göra om, igen, ny till allt detta, är bara
börja leta efter sökord.
Klart, kanske jag förstår inte hälften av orden jag ser bara ännu.
Du kommer dock i en veckas tid.
Men jag ser printf.
Och det ska börja, innan länge, till jogga ditt minne, okej, printf.
Något är fel med printf.
Har jag stava det fel?
Nej, det ser inte ut som - oh.
Jag kan inte använda det om jag undervisar kompilatorn att den existerar.
Och så, återigen, gå med dina instinkter, även om du faktiskt inte förstår
de faktiska felmeddelanden.
>> Och faktiskt, är lösningen här att bara inkludera det på toppen av filen
sådär, spara om min fil med Kontroll-S eller Arkiv-menyn.
Och om jag går nu tillbaka här nere, Jag ska rensa detta.
Kontroll-L är bara ett trevligt sätt att rensa skärmen.
Och då ska jag skriva "gör hej 0 "Enter, och nu ser jag fortfarande en
kryptisk sekvens av symboler, men Vi ska återkomma till detta.
Det är vad du gör för dig.
Det automatisera processen att ta ett ganska irriterande kommando inbegriper
Clang, själva kompilatorn.
Men det faktum att jag fick några fel innebär att denna sak borde fungera.
>> Så jag nu ska göra - Låt mig zooma in igen -
./hello-0 Enter, och faktiskt, jag ser "Hej, världen." Så låt oss nu öka
detta någonsin så något bara för att replikera de steg som vi tänkt.
Jag kommer att byta namn på detta med Spara som för att hello1.c.
Och nu ska jag deklarera en variabel heter namn, så string namn,
och jag kommer att sätta in den Värdet av citat-unquote
D-A-V-I-D stäng-quote semikolon.
Och nu ska jag byta "världen" med vad platshållare för en sträng?
% S.
>> Och nu, hur många argument bör printf tar den här gången?
Så två.
Så jag går utanför offerter.
Jag skriver "namn" efter ett kommatecken.
Men jag har gjort något annat fel denna gång.
Men låt oss anta att jag inte inse att ännu.
Låt mig gå upp hit.
>> Och varsel, också, jag får lite uttråkad av att skriva "make hello 0" alla
tid, "göra" och allt detta.
Så visar det sig, i Linus du kan ofta träffade uppåtpilen på
tangentbord, och du kan faktiskt rulla genom alla de kommandon som jag ve
avrättades tidigare till just nu.
Så om jag gör det, Upp, Upp, det finns att göra hello 0.
Jag vill inte det.
Jag vill bara ändra det till hello 1 denna gång, Enter.
Så småningom, som kommer att spara lite tid.
>> Okej.
Tyvärr, det finns ett fel.
Så låt mig rulla upp.
Det ser ut som jag verkligen slaktade detta program.
Jag menar, herregud, det är två rader kod, och dess 10 rader av fel.
Men titta på den översta först.
Användning av odeklarerat identifieringssträng.
Har jag menar standard I n?
Nej det gjorde jag inte.
Jag menade sträng.
>> Men var är strängvariabeln typ förklarade, DD vi säga?
Så det är i CS50 biblioteket.
Så det inte räcker, i dessa första par veckor, bara för att använda
vad C ger oss.
Jag kommer också att gå upp hit, och jag kunde sätta den över eller under, men jag ska
bara hålla det alfabetiska att hålla saker ordnad.
Jag kommer att omfatta cs50.h, som är förinstallerat för
du på CS50 apparaten.
Och det är öppen källkod, så även människor på internet kan använda den på sin
egna datorer.
Men det kommer med CS50 apparaten.
>> Så låt mig nu gå tillbaka och kompilera detta med att göra hello 1.
Fan också.
Ytterligare ett annat fel.
Låt mig rulla fram till den första, men.
Den här är lite komplicerat.
Multi-tecken tecknet konstant.
Det är inte att hjälpa mig.
Men varsel är klang åtminstone lite lite anständigt, varvid med lite
grön caret symbol, det säger Här är där jag klantade mig.
Varför är det pekar, med det lilla grön pil, den enda anbud nästa
till mitt namn?
>> Så det här är en av de saker som du bara vänja sig, speciellt om du har varit
programmering i Python, eller JavaScript, eller andra språk där denna detalj
spelar ingen roll.
I C, spelar det för roll.
Om du deklarerar en sträng, är som en sekvens av 0 eller flera tecken,
du faktiskt måste använda dubbla citattecken.
Så jag behöver verkligen ändra detta tillbaka att öppna citat, stänger citat, med
dubbla citattecken.
Enstaka citat har sin plats, men bara när du använder individen
tecken, men mer om det en annan gång.
För nu, citationstecken är nödvändiga.
>> Så nu, låt mig gå tillbaka till min terminal fönster, gör hello 1.
Och vem är säker?
Är det här programmet går nu att kompilera korrekt?
OK.
Så tre av oss tycker.
Okej.
Enter.
Och det gjorde faktiskt.
Så det finns inga fel den här gången, även även om detta program har blivit lite
mer komplex.
Om jag nu gör dot slash hello 1, Enter, det kommer att säga "hej, David."
>> Men låt oss göra den tredje iteration på detta, där den
programmet är verkligt dynamisk.
Låt mig gå vidare och ändra filen namn, bara för överensstämmelse med
filer du har till förfogande till dig efteråt på nätet.
Enter.
Och nu ska jag gå in och inte lagra "David" hårdkodade här.
Vad kan jag göra för att mycket enkelt förbättra det här programmet?
>> Jag kunde ringa getString.
Det kan vara lite icke uppenbara vad på väg att hända, så jag kommer
att faktiskt lägga till ytterligare en linje, printf, och säga namnet, kolon, nära citationstecken, precis
att ge användaren en prompt på skärmen.
Och nu ska jag gå här, och jag är kommer att använda min kortkommando.
Jag kommer att gå upp, upp, och ändra hello 1 till hello 2, Enter.
Och tack och lov, jag gör framsteg.
>> Och nu ska jag gå upp till dot slash hej och
ändra det till 2, Enter.
Och nu mitt program -
Jag ska zooma in - blir lite vackrare.
Namnet kommer att bli, låt oss säga Rob den här gången, Enter, hej, Rob.
Vi kan göra det igen.
Namn, Lauren, Enter.
Namn, Joseph, Enter.
Namn, låt oss försöka vara svårt, Enter.
Eh.
Det är egentligen inte en bugg.
Så det är bara lite ful.
Så kanske vi kan lösa detta i framtiden, inte nu.
>> Men hur skulle du instinktivt gå itu
att särskild utmaning?
Det ser bara dumt.
Hur undviker ni saker ser dum?
Så vi kunde göra, OK, hörde jag ett par saker, ett tillstånd och en slinga.
Vi skulle kunna använda, en, ett villkor, att kontrollera vad är längden av strängen
användaren gav oss?
Och om det är 0, citat det bara slut citat, de slår bara Enter, sedan
kanske jag borde skrika på dem och uppmana dem igen.
Men hur uppmana en dem igen?
Tja, hörde jag också slinga, och jag kunde göra det igen och igen och igen
uppmanar användaren för samma sak.
>> Nåväl, låt oss göra ett annat exempel användning av en annan
funktion i CS50 biblioteket.
Låt mig avsluta denna fil.
Låt mig skapa en ny.
Och jag ska kalla det adder.c, bara för att det är lätt att göra enkel aritmetik,
även om detta kommer att vara helt underwhelming med vad du kan göra
med alla moderna datorer.
>> Men låt mig gå vidare nu och -
Jag lärde mig min läxa förra gången - inkludera cs50.h, inkluderar stdio.h, int
huvudsakliga tomrum, som, för nu, jag ska bara ta på blind tro, men vi kommer att anta
som kommer att förstå vad det betyder innan lång.
Och jag ska säga något som "ge mig en int."
>> Och nu, hur får jag en int?
Jag vill slutligen deklarera en variabel kallas x av typen int och
lagra i det ett heltal från användaren.
Så det var en munsbit.
Men om någon vill föreslå, hur inte deklarerar jag ett heltal kallas x?
Int x.
>> Så det är verkligen så enkelt.
Ge mig en int.
Kalla det x.
Nu använder jag uppdraget operatören.
Och hur ska jag förvara från lämnade ett värde av användaren?
Jag vill inte kalla getString, naturligtvis, utan snarare getInt.
Några argument?
Nej.
Så det är öppet föräldra, nära föräldra omedelbart, och sedan en
semikolon avslutar linjen.
>> Nu vill jag göra det igen.
Ge mig en annan int.
Denna gång ska jag göra int, låt oss kallar den y, lika getInt.
Och nu vill jag göra något super-enkel som vissa matte.
Så printf, är summan av% d den platshållare för en int.
Och% d, period, omvänt snedstreck-n.
>> Okej.
Så det är faktiskt inte matte.
Men om jag vill säga summan av detta värde plus detta värde motsvarar detta
annat värde, hur många argument till Totalt ska jag ge printf,
slutändan?
Så fyra, eller hur?
Denna sträng och sedan de tre värden.
Så x är det första jag vill vara inkopplad först till% d.
y kommer att bli nästa.
>> Och nu har jag slags vill säga z, men z inte existerar.
Men det är inte en stor sak.
För vad skulle du göra instinktivt, speciellt om du hade en
grafräknare, vad du skriver?
Vad sägs om x plus y?
Så det är inte en verklig variabel.
Det är bara summan av två andra variabler.
Och det är helt legitimt.
C förstår definitivt enkel aritmetik som denna.
>> Semikolon, spara.
Nu vill jag gå ner hit och Typ Fabrikat huggorm, Enter.
Inget fel, så det är framsteg också.
Typ adderare.
Och en annan kortkommando, om du börjar bli uttråkad
med alla kommandon -
Om du börjar skriva ett kommando, som pricken slash annonsen, och det är där ditt
tristess sparkar i, du oftast kan slå Tab för att ha datorn avsluta
resten av frasen för dig om det inte är tvetydigt vad som ska komma efter annonsen.
>> Så låt mig gå vidare nu och du klickar på Enter.
Ge mig en int, 1, 2, och tack och lov, det är 3.
Men som alltid, testa program bör inte minska till
försöker bara det en gång.
Låt mig försöka ett hörn fall som negativ 1, ge mig en, och att man
checkar ut liksom.
Och jag vill nog göra lite mer rigorösa tester, men jag är ganska
bekväm med där det händer.
>> Nåväl, nu ska vi prova ett annat program att denna gång använder en
lite annan syntax.
Låt mig skapa en ny fil.
Jag kallar detta conditions0.c att rada upp med lite exempelkod på nätet.
Och låt mig gå vidare och göra inkluderar cs50.h, inkludera
stdio.h, i främsta tomrum -
OK.
Där vi går.
Vi har vår standard standardtext.
>> Och den här gången kommer jag att säga printf, "Jag vill ha en int, snälla," bara för att
göra prompten lite mer användarvänliga.
Och nu vill jag få en int från användaren.
Jag kommer att kalla det n denna tid, bara eftersom n låter som nummer.
getInt, och nu, vad gör Jag vill göra med det?
Tja, om n är - och jag ska zooma in -
om n är större än 0, vill jag att göra följande -
printf "Du valde ett positivt tal." Else, jag ska skriva printf "Du
plockade en negativ
numret. "Okej.
Så detta program, även om jag gjorde det snabb, ser rätt syntaktiskt.
Låt mig prova detta.
Gör tillstånd 0.
Verkar för att köra.
Skick 0 anger.
Låt oss ge det en int av 50.
Jag valde ett positivt tal.
Låt oss försöka igen.
Skick 0.
Negativ 50.
Jag valde ett negativt tal.
>> Men nu, låt mig välja vad vi ska hålla ringer ett hörn fall är som mer
ett intressant fall som du tror kanske ge dig några problem, 0.
Nu, jag är ganska säker på att detta är en av de hörn fall där noll är
varken positiv eller negativ, så min programmet, men i syntaktiskt
rätta - det kompilerar, det går - är inte logiskt korrekt.
Så vad är den enkla fix här om jag vill att upptäcka, om jag vill hantera n
lika med 0 för sig?
>> Så om n är lika med 0, då vill jag säga något som printf "Du valde 0."
Låt mig prova detta nu.
Låt mig gå tillbaka hit, rensa mitt fönster, och kompilera om.
Hm.
Ett fel genererar.
Men jag vill du kolla om n är lika med 0.
>> Så återigen, en annan dum sak att vänja sig, är likhetstecken
tilldelningsoperatorn.
Så detta är faktiskt fel i detta, tekniskt, även om kompilatorn
skyddade mig från mig själv, skulle vi tekniskt kunna kopiera 0 till n, som
är inte vad jag vill.
Jag vill testa för jämställdhet med lika jämlikar.
Och så det nu kan vara min bättre lösning.
>> Låt mig faktiskt spara om detta som, säg, conditions1, att vara ny och förbättrad.
Så nu om jag kompilerar detta, det skulle göra förhållanden -
hoppsan - gör conditions1 dot slash conditions1, Enter, "Jag vill ha en int,
Snälla. "Jag kommer att gå framåt och typ 50.
Det är fortfarande bra.
Negativ 50, fortfarande bra.
0, och det, faktiskt, upptäcks att jag plockade 0.
>> Så vad mer kan jag göra nu med det här?
Tja, kan vi säkert göra allt komplexa saker.
Men vad jag skulle vilja föreslå är att vi hamnar på denna anteckning här.
Om vi ​​drar upp det här, ser du, kanske, en favorit film av era
fram tills idag du kanske aldrig har förstått.
Och det är om kvaliteten av skratt du borde få med CS skämt.
Så det är ungefär rätt.
>> Men mer fängslande, tänkte jag ge oss en liten teaser för måndag.
Så vi har börjat använda heltal.
Vi har hänvisat till flottar.
Vi har även kallad dubbel, vilket, återigen, ger dig siffror
efter decimalkomma.
>> Men det visar sig att flöten och dubblar, och, egentligen, datorer,
fundamentalt, inte kan uttrycka vissa värden exakt.
Vi vet från matematik klasser som du kan ha valfritt antal siffror efter
decimalkomma.
Och du kan även sätta ett lodrätt streck att säga dessa fortsätta för evigt.
>> Tyvärr kan du inte riktigt göra det i en dator.
Och så hörn fall uppstår.
Anta till exempel att du är göra något ekonomiskt.
Du gör matematik med procentsatser, och
med kronor och ören.
Och dessa cent inte nödvändigtvis laguppställningen.
Jo, visar det sig att delar av pennies kan börja lägga upp när
modelleras med ett datorsystem på ett sådant sätt att smart
människor kan utnyttja.
>> Och de av er som inte har sett, skulle jag vilja ge dig en 30-sekunders teaser
en underbar film som kallas Office Space, som kommer att måla en bild av en
problem som vi skall ta itu med första sak på måndag.
Om vi ​​kunde höja volymen lite, jag ger dig 30
sekunder av kontorslokaler.
>> [VIDEO SPELA]
>> -Jag menar, du, du har inte varit att visa upp och du får behålla ditt jobb.
>> -Faktiskt, jag främjas.
>> -Jag skulle kunna programmera ett virus som skulle rip att platsen utanför big time.
>> -Tja, hur fungerar det?
>> -Varje gång det finns en bank transaktion där ränta beräknas, och det
finns tusentals en dag, slutar datorn upp med dessa bråkdelar av en procent.
>> -Men jag tänker inte göra något olagligt.
>> -Olagligt?
Samir är detta Amerika.
>> -Vi måste svära till Gud.
>> -Om ingen vet om detta men oss, okej?
Inga familjemedlemmar, inga flickvänner, ingen.
>> -Självklart.
>> -Godkänt.
>> -Oroa dig inte, mannen.
Jag kommer inte berätta för någon heller.
>> [END VIDEOAVSPELNING]
>> DAVID MALAN: Så det här är alltså CS50, som var Office Space, och det kommer alla
vettigt på måndag.
Ser du sedan.
>> Berättare: Vid nästa CS50, Rob anpassar sig vara av
Harvard måltider.