>> [MUSIC Playing]
>> DAVID MALAN: Okay.
Velkommen tilbage.
Dette er CS50, og dette er Uge One, Fortsat.
Så en af ​​grundene til vi har passerer omkring teknologier som
Google Glas er at de kommer med noget kendt som et API, et
Application Programming Interface.
Og hvad det betyder er, at med rigtige filer og med den rigtige
dokumentation, kan du faktisk skrive software til selv enheder som disse.
>> Og så det, vi har i tankerne i retning af semestre ende er, at hvis et projekt
involverer, siger, Google Glass måske appel, vil vi se, hvad vi kan gøre i
hensyn koble dig op med nogle låneenhed hardware såvel som den
offentligt tilgængelig API, så du kan faktisk begynde at skabe software
der kører på den samme Google Glass.
>> En anden enhed, som vi har spillet med for sent, som vi troede kunne være
sjov på semesters ende er denne lille ting her.
Det hedder Leap Motion, og hvad du er at se er teknisk en
reklame for enheden, men det taler til hvad denne særlige
enhed er i stand til.
Og det, også kommer med en API via som du kan skrive software til at
styre din egen computer på en måde, godt lide denne ene minuts film her.
>> [VIDEO AFSPIL]
>> [END VIDEOAFSPILNING]
>> Så lige nu, denne enhed sker for gennemføres som en lille USB
stik, som du kan sætte ind i din computer, men jeg ville ikke blive overrasket
hvis inden længe vi har disse former for teknologier i den næste batch af pc'er
og Macs, så du kan, ja, interagere med den i
en måde som.
Faktisk jeg, hvad tænkte jeg ville gøre, også er Jeg trak op lidt demonstration
program, der følger med denne software.
Så jeg har lagt den lille sensor foran min bærbare computer.
>> Og som du kan se, er det allerede realiserer at min hånd er der
kontrollere den.
Og alt dette program gør, er strygende små ting som dette.
Men du kan se, at, ja, Jeg har fem fingre der.
Hvis vi kan få det til at gøre alle 10, du kan forestille dig en pæn klaver
anvendelse eller lignende.
Så hvis du gerne vil komme op efter klasse dag og leg med, som
Nå, er du velkommen til.
Så mere om det i retning semesters afslutning.
>> Så et par administrativ annonceringer.
One, gør afsnit ved denne fredag ved middagstid ved cs60.net/section.
Denne URL er på kursets hjemmeside samt.
I mellemtiden, selv om, supersections vil debut på søndag.
Supersections er en engangs-ting, fordi det tager os lidt tid til at arbejde
ud af, hvem der er i hvilket afsnit og hvor.
>> Så den kommende søndag, vil der være én sektion for de mindre behagelige,
en sektion for dem mere komfortabel.
Og dem af jer et sted i mellem er velkommen til at gå til
enten eller begge eller ingen af ​​delene.
Begge disse vil blive filmet.
De vil være i en større auditorium end en sektion normalt ville være i.
Men målet her er at udstyre dig med nogle komfort med problemer indstille en,
med C, med CS50 apparatet dette weekend, selv før du finder ud af din
formelle sektion opgave.
Så du møde din TF og din mindre gruppe af sectionmates i omkring
en uges tid.
>> Kontortid, i mellemtiden, har stået på.
Gør drage fordel af dem i aften eller i i morgen aften, hvis du ønsker.
Problem sæt 0 forfalder på fredag.
Dette er en dag senere end den regelmæssigt-planlagt torsdag.
Men med problemet sæt 1, vil du se at det indeholder nogle warm-up
øvelser, som du selv kan forlænge dit
Torsdag deadline til fredag.
Problem sæt 1, i mellemtiden, vil debut på kursets hjemmeside i den kommende
Fredag, hvis du gerne vil krølle op med det, som jeg gjorde engang sent
Fredag ​​aften i dit værelse.
>> Så cs50.net/appliance er det sted, hvor du kan få den CS50 apparat
at vi begyndte at bruge på mandag.
Vi vil bruge det lidt mere i dag.
Men forvisset om, at problemet sæt 1 specifikation vil lede dig gennem
netop de trin, du har brug for at få det op at køre.
Så du skal ikke bekymre dig om at gøre det før Pset 1, hvis du hellere vil ikke.
>> Ok.
Så vi kiggede på mandag på kildekode, men i forbindelse med en ny
programmeringssprog, nemlig C. And C, i modsætning til Scratch, er ikke grafisk.
Det er ikke puslespillet.
Det er mere engelsk-lignende syntaks.
Og der er et par af de involverede trin i rent faktisk at skrive og kører en
program i C, fordi ud kilde kode som dette, du har brug for noget
kaldes en compiler.
Og i lægmandssprog, hvad gør en compiler gøre for os?
Ja.
>> STUDENT: Det konverterer koden at du skriver til 0'er og 1-taller.
>> DAVID MALAN: Godt.
Så det konverterer den kode, Vi skriver til 0'er og 1-taller.
Det konverterer såkaldte kildekode til objektkode, hvor sidstnævnte ser
lidt noget som dette.
Og det er din CPU, hjerne indeni computeren, at på grund af
mennesker, der skabte disse computere, vide, hvad disse sekvenser
af 0'er og 1'ere middelværdi.
>> Måske betyder det print.
Måske betyder tilføjelse.
Måske betyder det subtraktion.
Måske betyder det, vises en grafisk.
Der er foruddefinerede mønstre af bits at verden har besluttet betyde
visse ting.
Men for det meste i dette kursus, vi vil arbejde på et højere niveau, og
vi tager for givet, at der findes ting som compilere, der kan
gøre vores kildekode-funktion på den måde, vi har tænkt.
>> Så det program, vi skrev først i sidste uge og derefter begyndte at havnen, så at
tale, til C denne fortid Mandag var dette.
Når grønt flag klikket, sige hej.
Dette var naturligvis, skrevet i Scratch.
Og jeg hævdede, at tilsvarende program i C så lidt
noget som dette.
>> Så hvad jeg troede, vi ville gøre på første, lad os drille hinanden hvad ser ved første
øjekast ganske vist som ret mystiske syntaks, men du vil begynde at mærke
mønstre ganske hurtigt.
Hvad vil vi også gøre i dag, er at give dig med en mental model for nogle
kanoniske, nogle standard konstruktioner i programmering.
Og så vil vi faktisk få vores hænder beskidte med nogle eksempler så godt.
>> Så for dem af jer mere behagelig, indse, at denne uge, og derefter næste
uge kan meget vel være en smule gennemgang.
Men især når hacker edition problem sæt 1 går ud på
Kurset hjemmeside på fredag, tror jeg du opdage, at selv når du udfylder
nogle blanke end den næste uge eller to, du vil begynde at få mere og mere
udfordret og støder nye og nyere ting.
>> Så lad os drille dette program fra hinanden et par linjer ad gangen.
På toppen har vi, hvad der er teknisk kaldes en
præprocessor direktiv.
Dette er blot en linje kode, der siger at inkludere indholdet af en fil,
kaldet standard I / N, standard input - eller, undskyld, standard I / O, standard
input / output. h, inde min egen program.
>> Så med andre ord, hvis jeg skrev dette program med en simpel teksteditor som
gedit, den simplere svarende til noget som Microsoft Word, der
instruktion, # include stdio.h, er blot vil fortælle compileren, tag fat i
Indholdet af denne anden fil, stdio.h, og indsætte dem lige her.
>> Nu, hvorfor skal jeg pleje?
Hvad gjorde vi hævder er inde i denne fil kaldet stdio.h, der er lagret
et eller andet sted på min harddisk, eller i dette fald et sted i CS50 apparat?
En anden udtrykte det der for mig.
Men hvad er der i?
>> Yeah, så det er en erklæring om en funktion kaldet printf.
Så printf minder den funktion, viser ord og tegn, og
tal på skærmen på min bud.
Men jeg vidste ikke skrive det.
CS50 ikke skrive det.
Nogen år siden skrev det, og de hovedsagelig gav os opskriften på det
i en fil kaldet stdio.h.
Så første linje bare giver mig adgang til funktioner, at en anden
skrev år siden, blandt som er printf.
>> Nu den næste linje jeg har tænkt mig at vinke min hånd på, i hvert fald indtil næste uge.
Men for nu, ved, at int main (void) er væsentlige svarer til dette
gul brik, når grønne flag klikkede.
Verden, år siden, besluttede, at hvis du skriver et program i
sprog kaldet C, du starter dit program med en linje
der ligner det.
I næsten en uges tid, vil det gøre mening, hvad int er, hvilken ugyldig er.
Men for nu, tror bare på det da denne gule brik.
>> Nu næste, vi har en klammeparentes efterfulgt af en anden tæt klammeparentes,
så at sige.
Og vi vil se disse i hele programmer i C, samt
JavaScript og PHP.
Og disse bare indkapsle relaterede linjer kode.
Den åbne klammeparentes væsentlige siger, her kommer noget kode.
Og den lukkede klammeparentes, som er vinklet i den anden retning, bare
betyder, det er det for den relevante kode.
>> Så den saftige linie i denne første Programmet er det sidste, printf,
quote-citat slut, hej verden.
Og jeg kaldte ting imellem citater hvad sidste gang?
Så det er en streng.
Og en streng er bare techie betegnelse for en sekvens af
tegn, et ord, et udtryk.
Selv et enkelt bogstav kunne være dobbelt citeret.
Men det er en sekvens af nul eller flere tegn.
>> Backslash-n, men ser lidt mærkeligt.
Men det simpelthen betød noget enkle til computeren.
Hvad er backslash-n?
Ny linje.
Så det er bare den særlige sekvens af tegn, som verden har besluttet
midler lægge et linjeskift lige der, fordi compileren faktisk får
forvirret, som regel, hvis man meget forståeligt, men er forkert, bare
begynde at trykke Enter for at sætte nye linjer i din kode.
Du er nødt til at være lidt mere eksplicit med backslash-n.
>> Og vi vil se, at der er et par andre sådanne mønstre for specialtegn.
For eksempel, for hvis du ville lade din sind vandre til et hjørne tilfælde
antage, at jeg ønskede at udskrive en dobbelt citat på skærmen for
uanset årsagen, vil der synes at være lidt problematisk, right?
Fordi hvis jeg sætter en dobbelt citat i midten af ​​"Hej, verden," uanset
grund, hvorfor der synes potentielt problematiske?
Det bryder strengen.
>> Compileren er bare et program.
Et program som en compiler er bare at læse din kode top til bund,
venstre til højre.
Og hvis ser tre dobbelte citationstegn i stedet to, er det ikke kommer til at kende
Hvis du mener, at de ting til venstre bør være strengen, eller ting til
højre eller det hele.
Det er tvetydig, og så hvad en typisk compiler ville gøre er bare flipper ud,
og give dig nogle fejlmeddelelse, og gøre dig med at håndtere problemet.
>> Så da backslash-n betyder en ny linje, hvad ville dine instinkter nu
begynder at være, hvis du ønskede at medtage noget unormalt som en dobbelt
citere inde i denne ellers citerede string?
Omvendt skråstreg-double citat.
Og så vil vi se denne form for mønster også.
>> Hvis du ønsker at gøre noget lidt mærkeligt, vil du opdage, at
løsninger ofte følger et mønster, og backslash
betegner et escape-sekvens.
Og det betyder bare noget særligt at vi skal repræsentere i en
anderledes måde.
Med hensyn til hvordan du repræsenterer en omvendt skråstreg, ja, vi vil
vende tilbage til.
Men svaret, også er faktisk en smule indlysende.
>> Så lad os nu indføre nogle andre programmering konstruktioner
at du så i Scratch.
Du har sikkert taget for givet allerede, hvis du allerede har dykket ned
Problemet sæt 0.
Men lad os nu indføre syntaks i C for disse ellers temmelig intuitiv
ideer, i det mindste nogle af dem.
>> Så dette begreb en betingelse eller en filial, mens vi tidligere
repræsenterede det med kode, så som dette på venstrefløjen i Scratch -
hvis x er mindre end y, så sige det -
stedet nu i C - lad mig finpudse ind på det simpleste tilfælde -
vi simpelthen kommer til at sige, at hvis åbne parentes, noget er sandt - en
Boolske udtryk kommer til at gå hvor jeg har sagt tilstand -
tæt parentes, derefter hvad der er indersiden af ​​disse krøllede parenteser.
>> Så her også, de krøllede parenteser er lidt ligesom Scratch s
U-formede puslespilsbrikker.
Gør hvad der er indeni disse krøllede parenteser.
I dette tilfælde, skråstreg skråstreg.
Og bemærke dette er en fremadrettet slash, ikke en backslash.
Skråstreg, skråstreg, for dem, der har programmeret
før, bare betyder -
det er bare en kommentar.
En kommentar er ikke en linje kode, se pr.
Det er en linje af engelsk, at du som menneske, har skrevet til dig selv at
måske minde dig om at gøre noget, for at forklare dig selv, at forklare
en anden, hvad din kode gør.
Det er bare en beskrivende kommentar.
>> Nu, selvfølgelig, kan vi have en to-vejs gaffel i vejen lige ved at gøre dette, en
tre-vejs gaffel i vejen ved at gøre det, og hvis du fortsætter med dette
mønster, kan du have fire-vejs, fem-vejs, seks-vejs gafler i vejen, hvis
du nødt til at håndtere, ja, at en række betingelser.
Og så mærke til parallelitet her -
hvis (betingelse), ellers hvis (betingelse), og det eneste, der er lidt
mærkeligt er det sidste, der er bare, at andet.
Men igen, dette er identiske, begrebsmæssigt, hvad vi har gjort
allerede, selvom syntaks vil tage en lille smule tilvænning.
>> Nu, i dette eksempel, er der nogle andre mærkelige syntaks.
Vi ser printf igen åben parentes, og tæt parentes.
Og inde i der er et noteret streng.
De parenteser, i forbindelse af printf, gå til venstre
og til højre for hvad?
Hvad skal vi beskrive det citerede streng som mere generelt?
>> Så det er et argument.
Hver gang du har en funktion, som printf, og derefter en åben parentes og et
tæt paren og noget inde i det, uanset om det er en streng, eller en
heltal, eller noget andet, de ting i mellem disse parentes kaldes
et argument.
>> Og et argument netop indflydelse funktionens adfærd.
I dette tilfælde er det temmelig klart hvordan.
x <y er, hvad der bliver vedtaget i, så at sige, som et argument.
Og printf vil udskrive præcis det.
Fordi sikkert den person år siden der gennemføres printf havde ingen idé
hvad vi menneskelige efterfølgere vil bruge printf til.
Så det er derfor argumenter findes, påvirke adfærd efter en funktions
blevet skrevet.
>> Nu Boolske udtryk.
Vi har set disse før i Scratch.
Det viser sig i C kan du også "eller" dem sammen, så at sige.
To lodrette bjælker betyder, at denne blok kode, dette gør dette, vil
udføre, hvis den første betingelse er sand eller den anden betingelse er sand.
Og selvom du måske ikke har gjort dette Scratch, du kunne faktisk
gøre dette i Scratch, og du kan også udtrykke dig anderledes -
hvis den første tilstand og den anden betingelse er sandt, så hvad er
indersiden af ​​krøllede parenteser.
>> Og lige som en sidebemærkning, grunden til det er en dobbelt-tegn og en dobbelt
lodrette linje, vil vi se til sidst at en enkelt lodret streg og en
single-tegn faktisk har forskellige mening i C. Så for nu,
at overlapning af symboler er tilsigtet.
>> Så lad os indføre kortvarigt, dette andet smule syntaks.
Det ikke helt fremførsel til Scratch, men jeg hævder, at jeg kan
implementere begrebet et if andet, hvis ellers, hvis ellers hvis ellers erklæring hjælp
noget, der hedder en switch-statement.
Og den eneste grund til dette virkelig eksisterer er at bare give dig, programmør,
lidt anden måde at løse nogle problem, selvom logisk det
giver dig ikke nogen nye kapaciteter.
>> Dermed mener jeg dette.
Når du siger switch, og derefter et mellemrum, og derefter et par parenteser, indenfor
som går et udtryk -
og dette kan være en smule ikke-indlysende ved første, men dette er ikke et argument,
teknisk, fordi switch er ikke en funktion.
Så for nu, antager bare, at vi bruger parentes på forskellige steder
af forskellige årsager.
>> Så tænd udtryk betyder, at jeg kan sætte en variabel inde i dem
parentes hvor der står udtryk.
Og hvis den pågældende variabel -
Antag, at det hedder x, og det er bare et heltal -
Jeg kan derefter opregne i min slide her noget som dette.
Hvis x er min variabel, og jeg ønsker at gøre noget, hvis x
er lig med 1, kan jeg gøre det.
>> Hvis jeg i stedet ønsker at gøre noget hvis x er 2, kan jeg gøre det.
Else, hvis jeg ønsker at gøre noget andet helt, kan jeg have en default sag
hvilket tilfælde jeg gør dette andet.
Så i den forstand er det svarende til en hvis x er lig lig med 1, ellers hvis andet,
men jeg nævner det nu, bare fordi vi vil se det igen.
Men for nu, ved bare, at den eksisterer.
>> Ok.
Så disse sidste par er lidt mere kompleks ved første øjekast, men de gør
noget forholdsvis ligetil.
A for løkke i C er en bid af kode, bare gør noget igen og
igen og igen.
Og den eneste irriterende ting ved det er det er, at det er lidt kryptisk
at udtrykke dig i denne cykliske mønster, men verden standardiseret på
på følgende måde.
>> Når du bruger en for-løkke, you got et par parenteser igen.
Og bemærk to semikoloner derinde.
Disse to semikoloner separate tre forskellige udtryk indersiden af
parenteser.
Den ene er de såkaldte startværdier.
Den ene er den såkaldte tilstand.
Og en er de såkaldte opdateringer.
>> Kiggede på i det abstrakte, det er fuldstændig ikke-indlysende, så lad os se
på et konkret eksempel.
I Scratch havde vi en gentagelse blok.
Og denne blok sagde gentag 10 gange, siger "Hej, verden." Lad mig krav på
nu, og vi vil komme tilbage til dette, og dette vil også få mere velkendt for
du inden længe, ​​svarende C kode kan siges at være det -
en for opgørelse og et mellemrum, et par parenteser, bemærk semikolon i
der, som adskiller tre særskilte Ting, initialisering, de
tilstand, og opdateringen.
>> Og tage et gæt hvad den første gør.
Int i = 0.
I ru lægmandssprog, hvad , at gøre for os, sandsynligvis?
Så ja.
Det er om en variabel kaldet i, og det er at give den, hvad værdi?
0.
Så det er at skabe en kaldet variabel Jeg, lagring værdien 0 i det.
Det er den såkaldte initialisering.
>> Okay, nu er jeg påstod før at den midterste ting, jeg
<10, er betingelsen.
Så hvad gør?
Nå, hvad for-løkken gør, når en program med en for-løkke køres, er
hver gang computeren løber gennem denne løkke, top til bund, top til
bund, ligesom du fyre gjorde, da tælle jer selv og sidder ned,
igen og igen og igen, computeren går
at kontrollere, at tilstand.
Og hvis jeg er mindre end 10, det vil gøre det igen.
Hvis i er mindre end 10, det vil gøre det igen.
Hvis i er mindre end ti, det vil gøre det igen.
Så det tyder på, at forhåbentlig jeg er under forandring.
Ellers ville vi have en uendelig løkke.
Og faktisk er jeg forandring, fordi sidste ting efter semikolon der
er den noget kryptiske syntaks i + +.
Men de af jer, der har gjort det før, det betyder bare
ganske enkelt hvad?
>> STUDERENDE: [interposing STEMMER].
>> DAVID MALAN: Læg 1 til i.
Tilvækst i.
Så så vi en Scratch puslespil stykke for at, faktisk.
Det lignede ikke i + +, men blot betyder ganske enkelt, øg
værdsætter jeg med 1 hver gang du gør dette.
Så bogstaveligt, skal du starte med initialisering i til 0.
Du kan derefter kontrollere din tilstand.
Er 0 mindre end 10?
Ja.
Vi går gennem løkken.
>> Det næste jeg hævder computerens kommer til at gøre, er at det går
at forøge jeg.
Så jeg er nu 1.
Den kontrollerer tilstanden.
Er 1 mindre end 10?
Selvfølgelig.
Så gør det igen.
Så spring i + + til 2.
Er 2 mindre end 10?
Ja.
Og igen og igen og igen.
Og til sidst, på grund af den plus-plussing, får vi til i svarer til 10.
Er 10 mindre end 10?
Nå, selvfølgelig ikke.
Og det er det punkt, hvor for-løkken bare stopper.
Og hvis du har mere kode på skærm dernede, computeren
provenu til at køre denne kode i stedet.
>> Så igen, selvom det kommer til at se og føles lidt mærkeligt på
først, i hvert fald for dem af jer, der aldrig har programmeret før, det
bogstaveligt reducerer begrebsmæssigt til hvad der er ellers en meget
ligetil puslespil brik i Scratch.
>> Okay, jeg lovede, at der ville være andre analoger Scratch.
Der er denne ene også.
Og vi så dette kort sidste gang.
Men husk altid blokere i bunden?
Det bare gør noget for evigt?
Jeg hævdede, at man kunne gennemføre dette på denne måde.
Og du kan faktisk gennemføre denne i en masse forskellige måder.
>> Men imens løkken er bare en anden måde C udtrykke dig selv.
I slutningen af ​​dagen, kan du ikke gøre noget med en while-løkke, som du
kan ikke med en for-løkke.
Så de er i slutningen af dag funktionelt den samme.
Men det giver dig mulighed for at udtrykke dig lidt forskelligt i
på følgende måde.
>> Med while-løkke, det er hvad der er i parenteser, der er kontrolleret igen og
igen og igen.
Og så snart dette udtryk er falsk, så løkken stopper udførelse,
og computeren fortsætter til køre, hvad anden kode, du
have i din fil.
>> Men hvad er interessant her at jeg bogstaveligt talt skrevet sandt.
Og sandt er en type af boolesk værdi, en sand eller falsk værdi.
Så kunne sande nogensinde blive falsk, hvis jeg har bogstaveligt talt
hard-kodet det ind i min program?
Så nej.
Det er lidt mærkeligt, at jeg gjorde det.
Men sandt er sandt.
Der er ingen plus-plussing.
Der er ingen brug af variabler i her.
Så fordi jeg hardcoded mens sandt, dette løkke er altid vil evaluere
igen og igen og igen.
>> Så hvor mange gange er hej verden kommer til at udskrive på skærmen?
Evigt.
Et uendeligt antal gange, indtil batteriet dør eller en anden ekstern
begivenhed sker.
Så dette er nok ikke det bedste program at skrive, fordi hvis brugeren
kan aldrig forlade dit program, er det sandsynligvis ikke, hvad du havde tænkt dig.
>> Men nogle gange, programmer har en uendelig løkke.
For eksempel har, hvis computeren en ur på det, det sikkert ville være
rart, hvis dit ur det gør holde opdatere selv for evigt, omend en gang
sekund eller en gang et minut eller noget lignende.
Så selv uendelige løkker har deres plads.
>> Ok.
Endelig, denne ene.
Og dette er en lille smule anderledes funktionelt, og vi vil komme tilbage til
dette sandsynligvis i Pset 1..
Men der er en anden type loop kaldes en gøre, mens løkke.
Og den eneste forskel her mellem en gøre, mens loop og, siger en while-løkke,
er, at betingelsen er markeret ikke før du udføre koden, men efter
du udføre koden.
Så på toppen for imens loop, mens gøre, mens
kontrollerer den i bunden.
>> Og det betyder blot, at mens løkken vil typisk udføre flere gange
eller færre gange end en while-løkke?
Potentielt flere gange, fordi en do mens løkken klart siger gøre dette,
først efter hvilket tidspunkt du tjekke hvis betingelsen indersiden af
parentes er sandt.
>> Så vi vil se det igen sandsynligvis i Pset 1.
Hvis du nogensinde ønsker at gøre noget ved mindst en gang og så måske nogle flere
gange, det er en god konstruere at bruge.
Men en while-løkke, derimod, vil kontrollere dets tilstand først.
Og det er det for sløjfer i C, må mens, mens, og sløjfer.
Og igen, de kortlægge temmelig pænt tilbage til bunden, undtagen denne ene ikke gør
helt har samme analoge i Scratch.
>> Tja, hvad med nu, variabler?
Så det er sådan jeg erklæret en variabel syntaktisk forleden.
Jeg havde en int, som jeg påstod er et heltal.
Jeg havde derefter en variabel kaldet tæller, og derefter et semikolon.
Så hvad er denne linje kode gør?
Det er ganske enkelt at erklære en variabel -
der er, spørger computeren, giv mig noget hukommelse, giv mig nogle bits - i
som jeg kan gemme hvad?
En int.
Og semikolon betyder bare slutningen af ​​linje kode.
>> Nu, den anden linje er sandsynligvis pretty guessable.
Hvad er counter = 0; gør?
Det tildele 0 at imødegå.
Og så dette er den anden ting det er lidt irriterende
versus, siger, algebra.
Betragtninger i algebra betyder lighedstegnet lig, her i C, lige
tegn betyder opgave.
Så det betyder lægge, hvad der er på den rigtige i, hvad der er til venstre.
Og vi vil se et andet symbol, er lig ligeværdige, når vi ønsker at rent faktisk teste
for kvalitet, noget irriterende.
>> Men dette er lidt ineffektiv.
Det er slags irriterende, at jeg har at erklære en variabel og
derefter give det en værdi.
Så C faktisk lader os forenkle denne og bare gøre det hele på én gang.
Du kan erklære variable til venstre.
Du kan stadig gøre opgaven på lige ved at sætte det lighedstegn i
midten.
Så i slutningen af ​​dagen, er disse to ækvivalente, men denne ene, helt ærligt,
er sandsynligvis den bedre vane at komme ind bare fordi det er en smule mindre
kode, det er lidt lettere at læse, og det bare strammer op
din kode, så at sige.
>> Eventuelle spørgsmål hidtil på loops, af variabler, om vilkår og på
Booleans, hverken teknisk eller begrebsmæssigt?
Ok.
Så nu denne næste får man en lidt mere interessant.
Og dette er eksempel jeg sat op sidste tid, der blot kortlægger en Scratch eksempel
over til C.
>> Så en funktion.
I lægmandssprog, er hvad en funktion?
Fik at være dristigere med dit svar.
Hvad er en funktion?
>> STUDENT: gør noget.
>> DAVID MALAN: Hvad er det?
>> STUDENT: gør noget.
>> DAVID MALAN: Betyder noget.
OK.
Vi starte der.
Så en funktion gør noget.
Så det er et stykke kode, der er væsentlige gennemført andetsteds,
faktisk gør noget.
Nu, hvad er interessant ved en funktion er, at det kan tage input,
og det kan producere output.
Og lad os faktisk tage et kig på dette.
>> Så manden bag forhænget var bevidst for et øjeblik siden.
Her har vi en tabel.
Men formoder, at dette faktisk repræsenterer en stor kasse.
Så dette er en såkaldt sort boks.
Og generelt, i design, i computer videnskab, sorte bokse blot henvise til
stykker af funktionalitet, at nogen har gennemført, og du ikke
nødvendigvis kender eller pleje, hvordan det er implementeret under hætten.
Du skal bare passe, at denne sorte boks, som vi vil nu begynde at kalde en
funktion, gør noget.
>> Så, for eksempel hvis denne sorte boks på scenen her repræsenterer printf, en
funktion, jeg kender fra tidligere eksempler der printf tager et eller flere
argumenter, og den første af dem, Argumenterne bør være en streng, ligesom
"Hej, verden." Tja, hvis jeg er den person, skriver i programmet, og jeg vil
at bruge printf, jeg, for eksempel, kan tage et stykke af blankt papir her og en
sort markør og skrive på den -
Jeg stavede "verden" -
H-E-L-L-O.
>> Så jeg tager min sorte markør og jeg vil skrive, så stor og læseligt, som jeg kan på
dette stykke papir, "Hej, verden," Og nu har jeg hævde dette er mit argument.
Dette er en streng repræsenteret med et stykke hvidt papir.
Og mit input nu til funktionen printf vil være dette.
Så jeg ringer printf, passerer dette argument som input til det.
>> Og nu, jeg ved ikke, hvordan den person, der skrev printf gjorde det år siden, men
Jeg kender fra dets dokumentation, sit formål i livet er at udskrive, hvad jeg
give det som input.
Og ja, selvom denne implementering er ukendt for mig
under hætten, nu Jeg ser, åh, det er gjort.
Det har udskrevet noget på skærmen.
Og nu kontrollerer af programmet, hvis der var flere linjer kode, ville
er nu vendt tilbage til mig.
Og så det faktum at Colton -
velsigne hans hjerte, der gemmer sig her under et bord foran jer alle -
er bevidst, idet jeg ikke kender og jeg er ligeglad med hvor printf er
gennemført.
Jeg ved bare, igen, fra dens dokumentation, hvad det gør og hvordan jeg
jeg skulle bruge det.
>> Nu huske, at printf kunne få lidt mere sofistikeret.
Igen, vi bare taler om svarende til Scratch os sige blok.
Men jeg har også gjorde det sidste gang.
Jeg ønskede at gøre mit hello program a lidt mere dynamisk og ikke bare svært
kode noget lignende "verden", og absolut ikke svært kode noget
vilkårlig ligesom D-A-V-I-D i programmet.
Jeg ville gerne spørge brugeren om hans eller hendes navn og derefter gøre noget med
denne streng som de giver.
>> Så der er noget lidt anderledes her. printf, for et øjeblik siden,
gjorde, ja, gøre noget, men det returnerede ikke noget for mig.
Right?
Colton ikke give mig noget tilbage, ingen stykke papir.
Der var bare en bivirkning.
Min give "hej, verden" som en argument for Colton resulteret i
bivirkning af et ord, nogle ord, vises på skærmen.
>> getString, er dog en smule anderledes. getString er også en
fungere, men det returnerer en vis værdi.
Det er ikke bare har en æstetisk bivirkning.
Det faktisk giver mig, skal den person ringer eller bruge funktionen
noget tilbage.
Så i dette tilfælde er getString kaldte med getString åben
paren tæt parentes.
Er getString derfor tage argumenter eller input?
Nej, det ser ikke ud til.
Dens formål i livet er bare for at få en streng.
Det kræver ikke mere detaljeret end det.
Så lad mig gå videre og lade som om, igen, denne sorte kasse er ikke printf,
men getString, og lad mig, den person skriver dette program, skal du ringe eller bruge
getString ved blot at skrive G-E-T-S-T-R-I-N-G, åben paren tæt
paren, getString.
>> Nu har jeg ingen idé om, hvordan CS50 ansatte implementeret getString, men jeg ved, at
hvis jeg venter længe nok, vil det gøre sit ting under kølerhjelmen, måske ved hjælp
nogle variabler, måske ved hjælp af nogle betingelser, måske ved hjælp af nogle loops,
måske ved hjælp af nogle funktioner, måske ved hjælp -
blot forsøger at stall - måske ved hjælp nogle andre programmering funktioner.
Men hvis jeg vente længe nok - i virkeligheden, i computeren, sker det
super hurtig -
hvis jeg vente længe nok, denne funktion getString kommer til at få en streng
fra brugeren, der formentlig skrive det ud på deres tastatur og
så, når du getString sker få disse tegn fra brugeren
og gemme dem i en streng, der funktion, getString, vil have
klar til mig nogle output, som jeg er vil hente i form af
opgaven operatør.
>> Og hvis jeg går, ja, i output her Obosi har generøst
deltog, uden at vide dette på forhånd, ved at skrive sit navn på dette
variabel, der repræsenterer en streng.
Nu opgaven operatør betyder, selv selv om dette måske føle sig lidt
overflødige, jeg rent faktisk gør brug at gøre min egen kopi af denne.
Fordi på venstre side - hovsa! -
bemærke, at jeg hovedsageligt har snor navngive på venstre side.
Så jeg vil også gøre min egen kopi af denne.
Og det er lidt af en hvid løgn, fordi vi vil se i en uge eller to
tid at strenge ikke er faktisk hvad de synes at være.
>> Men for nu, er her returværdien.
Her er min egen kopi af det efter hjælp opgaven operatør.
Og nu, hvad jeg ønsker at gøre næste?
Vi har nu den anden af to linjer kode.
Så jeg vil nu kalde printf.
Lad os foregive nu, at den sorte Boksen er tilbage igen at blive
printf og ikke getString.
>> Printf denne gang kommer til at tage hvor mange argumenter?
Så se, det er ligesom to.
Der er to kommaer i der, men en af ​​disse komma, er det
indersiden af ​​citater.
Så det første argument er bogstaveligt talt kommer til at være dette.
H-E-L-L-O, komma, procent s, backslash-n.
Og nu er jeg leverer ikke et argument, men to argumenter til printf.
>> Og hvad printf meningen at gøre med disse to indgange, efter jeg passerer dem på
som argumenter?
Det er meningen at tage den anden af dem, som jeg kaldte navn, så
andet stykke papir skrev jeg ud for et øjeblik siden, kaldes navn.
Det kommer til at stikket af værdien inde af denne variabel i den pladsholder,
% S, så, igen, på bare et øjeblik tid, vil vi se en bivirkning af
have kaldt printf, hvor vi nu se ikke "Hej, verden," men "Hej,
Obosi. "
>> Så en stor runde af bifald til begge vores frivillige, hvoraf kun én kendte
dette ville ske.
Ok.
Så måske, enkel som der var, sikkert, hvis du allerede er bekendt
med en sådan, du forhåbentlig aldrig vil glemme, at særlige visuelle, hvordan
funktioner fungerer.
>> Så der er mere end bare getString.
Inde i CS50-biblioteket, er der en hel masse funktioner, som alle
aktiveres bare for at gøre det klart at vi skrev disse funktioner.
Typisk, i C, næsten alle andre funktion, du vil bruge, er små bogstaver.
Men vi bevidst blokbogstaver bare for at gøre det klart, at disse
er støttehjul slags, som vi vil brug for blot et par uger, som
forenkle processen med at få input fra brugeren.
>> Den CS50-biblioteket ikke gør noget at man selv ikke kunne gøre ved
bare bruge C-kode fra en oldschool lærebog.
Men igen, vi bruger dem som træning hjul slags for blot et par
uger, så vi kan slippe af med kompleksitet, at du snart vil forstå
dig selv for at gøre noget som relativt ligetil som at få
input fra en bruger.
>> Så vide, at du har adgang at getchar, GetDouble -
dobbelte.
What's - og så GetFloat.
Hvad er en svømmer?
Lad os starte der.
>> STUDENT: [uhørlig].
>> DAVID MALAN: Ja.
Det er et tal med en decimal.
Så mens en int er et heltal, der er bare et tal med 0 til 9,
nogle antallet af gentagelser, og en float er noget
med et komma.
Og en dobbelt, i mellemtiden, er også en tal med et komma, men mere
tal efter kommaet punkt, potentielt.
>> Så vender vi tilbage til dette inden længe.
Men typisk, hver af disse typer data, hver af disse typer af variable
at et bibliotek som vores kan vende tilbage til dig, bruge forskellige antal bits til
lagre information.
Typisk, en Char, hvilket betyder bare et tegn, bruger 8 bit.
Og det er faktisk i overensstemmelse med vores byte af frivillige i sidste uge, der
kom op og repræsenterede en ASCII-tegn ad gangen.
Så en Char er 8 bit.
>> En svømmerafbryder sker for at være 32 bit, typisk.
Og en dobbelt, som du kan gætte, er faktisk 64 bit, hvilket er bare mere,
hvilket betyder, at du kan have større numre eller mere præcision.
Men igen, mere om det en anden gang.
GetLongLong, i mellemtiden, men dumt hedder, er egentlig bare en
heltal, der er dobbelt så stor, dobbelt så lang, potentielt som et fast
heltal, 64 bit i stedet for 32.
Og getString vi har brugt.
>> Men det viser sig, i CS50 biblioteket som er gennemført, som vi skal se, i
i form af de to filer, hvoraf den ene kaldes cs50.h, har to andre
datatyper i det.
Booleans ikke findes i C. Du kan simulere dem ved blot at bruge 0'er og 1-taller
hele dine programmer.
Men vi i CS50 biblioteket har skabt symbolerne "sand" og "falsk"
at repræsentere 1 og 0, så du ikke nødt til at hard code noget
bogstaveligt talt som 1 og 0.
Men vi vil se dem igen.
>> Streng, også, ikke eksisterer.
Og det er derfor, jeg nævnte, det er lidt af en hvid løgn for nu.
Men vi vil skrælle, at lag inden længe.
Men for nu, er en streng a sekvens af tegn.
>> I mellemtiden, i C, ja du har forskellige datatyper.
Bemærk disse er små bogstaver.
Så de funktioner, du har set for et øjeblik siden er funktioner, som er skrevet af CS50, at
vil vende tilbage til dig en værdi, der falder i en af ​​disse kategorier.
>> Et par cheat sheets bare at plante frøet her. printf ikke bare
tage% s som pladsholdere.
Det tager% d for decimal heltal, eller% Jeg vil arbejde så godt.
% F kommeværdier. % C er for en char, hvis du bare ønsker at sætte en
tegn i en forudformateret snor ligesom vi har gjort, kan du bruge% c..
>> Og så, noget irriterende,% LLD er for en lang, lang decimal heltal,
som netop betyder, at hvis du har brug for en rigtig stort antal, og du bruger noget
kaldes en lang lang, som vi vil komme tilbage til i et Pset, kan du bruge% LLD til
fortælle printf, plug i en virkelig stor heltal her i form af sit andet eller
nogle andre argument.
>> Og endelig, jeg lovede, at der er et par andre flugt
sekvenser, printf understøtter.
Vi har set backslash-n.
Backslash-r, kan du se.
Det er en slags en old-school ting.
Hvis du nogensinde har brugt en rigtig skrivemaskine år siden, og du trak på kranken
som ikke blot roteret hjulet til flytte lineup, men også flyttet
hele hele vejen tilbage over til venstre, ja, backslash-r bare
hovedsageligt flytter markøren tilbage til starten af ​​linjen
uden at bevæge det ned.
Men igen, mere om det, måske i fremtiden.
>> Backslash-citat, backslash-double citat, backslash-backslash er
løsning på den lillebitte gåde Jeg hentydede til tidligere.
Og backslash-0 er faktisk ganske interessant.
Men vi vil vende tilbage til at inden længe.
>> Så lad mig komme ind nu, det CS50 apparat, og lad os rent faktisk gør en
hurtig varme op med et af eksemplerne vi allerede, og derefter gå videre til
noget lidt mere kompliceret.
Så hvis jeg åbner mit program kaldet gedit -
dette er mit grafiske editor.
Og jeg kan gøre det -
lad mig lukke vinduet der -
ved hjælp af dette ikon hernede, gedit i nederste venstre
hjørne ved siden af ​​menuen.
>> Jeg har tænkt mig at gå videre og videre, og gem dette eksempel ind, siger, John
Harvards mappe.
John Harvard mappe er bare hans hjem bibliotek, hvor alle hans filer lever
som standard.
Og jeg har tænkt mig at gemme denne som en fil kaldet goddag-0.c.
Og jeg har valgt dette navn bare så det linjer op med prøven kode på
kursets hjemmeside og i YouTube-videoer online.
>> Så nu har jeg tænkt mig at begynde at skrive min første program.
Lad mig zoome ind for læsbarhed.
Og jeg har tænkt mig at gå videre og sige int main tomrum, der bare sådan
gul brik der starter et program.
Jeg har fået den vane over år af åbne min klammeparentes, så
også lukke det og derefter gå tilbage til hvor jeg ønsker at sætte min kode, bare
fordi det hjælper mig med at holde alting afbalanceret, især som min
program får lang.
>> Og nu, her, jeg kommer til at gå videre og sige, printf, citerer citat slut,
hej verden, backslash-n tæt citerer, tæt parentes, semikolon.
Så jeg bare gentage alt, hvad vi har taget for givet hidtil.
Nu vil jeg zoome ud.
>> Og denne terminal vindue ned her, hvad må jeg gøre i denne sorte
og hvid vindue?
Hvad kan jeg bruge det til?
Så dette er hvor jeg køre kommandoer og hvor jeg kan kompilere ting.
Og jeg har tænkt mig at holde det simpelt.
Jeg har tænkt mig at bruge et program kaldet Make, hvilket ikke er
teknisk set en compiler.
Den compiler kaldet Clang, men vi vil komme tilbage til om et
uge eller to tid.
>> For nu, jeg lige til at skrive at gøre hej-0 Men de af jer, der var
sammenligner i jeres sind, hvad jeg lige skrevet til, hvad jeg skulle have skrevet, kan
ved allerede, at jeg gjorde noget galt her.
Nu er der helt klart nogle fejl.
Før jeg selv se på, hvad de er, kan enhver tanker om, hvad jeg gjorde forkert?
>> STUDERENDE: [interposing STEMMER].
>> DAVID MALAN: Ja.
Jeg mangler bibliotekets header fil.
Enhver af disse. H filer kaldes header filer, og de kollektivt
tilhører ting kaldet biblioteker.
Biblioteker er bare bidder af kode at andre mennesker skrev.
Så standarden [? Jeg?] Biblioteket er et samling af filer, der indeholder koden
at andre mennesker skrev.
>> Så jeg mangler det.
Så hvorfor får jeg en fejl?
Nå, lad mig rulle tilbage op i mit terminalvindue her.
Og desværre, i C, som i en masse programmeringssprog, især
hvis det hele er nyt for dig, at fejlen budskaber er præcise, men de er også
ganske kryptisk.
Og fejlen her i rød, er "Implicit erklære biblioteksfunktion
printf med type ", og så er det ruller til næste linje, "int const char *,
... "Det bliver bare rigtig overvældende hurtigt.
>> Men hvad du skal begynde at gøre, hvis igen, ny til alt dette, er bare at
begynder at lede efter søgeord.
Det er klart, kunne jeg ikke forstå halvdelen af de ord, jeg ser bare endnu.
Du vil dog i en uges tid.
Men jeg ser printf.
Og det bør begynde inden længe at jogge din hukommelse, okay, printf.
Noget er galt med printf.
Har jeg stave det forkert?
Nej, det ligner ikke - oh.
Jeg kan ikke bruge det, medmindre jeg underviser compileren, at det eksisterer.
Og så igen, gå med dine instinkter, selvom du faktisk ikke forstår
den faktiske fejlmeddelelser.
>> Og ja, løsningen her er at bare omfatte det øverst i filen
sådan, resaving min fil med Ctrl-S eller menuen Filer.
Og hvis jeg nu går tilbage hernede, Jeg har tænkt mig at fjerne denne.
Kontrol-L er bare en dejlig måde for at rydde skærmen.
Og så jeg har tænkt mig at skrive "make goddag 0 "Enter, og nu ser jeg stadig et
kryptisk sekvens af symboler, men vi vil vende tilbage til.
Det er, hvad der gør gør for dig.
Det automatisere processen med at tage en temmelig irriterende kommando involverer
Klang, den egentlige compiler.
Men det faktum, at jeg fik ingen fejl betyder at denne ting skal fungere.
>> Så jeg vil nu gøre - lad mig zoome ind igen -
./hello-0 Enter, og faktisk ser jeg "Hej, verden." Så lad os nu styrke
dette nogensinde så lidt bare at kopiere de skridt, vi bestemt til.
Jeg har tænkt mig at omdøbe dette med Gem som for hello1.c.
Og nu vil jeg til at erklære en variabel kaldte navn, så string navn,
og jeg har tænkt mig at sætte i det Værdien af ​​quote-citat slut
D-A-V-I-D tæt citat semikolon.
Og nu vil jeg til at erstatte "verden" med hvilken pladsholder for en streng?
% S.
>> Og nu, hvor mange argumenter skal printf tage denne gang?
Så to.
Så jeg går uden for de citater.
Jeg skriver "navn" efter et komma.
Men jeg har gjort noget andet galt denne gang.
Men lad os antage, at jeg ikke indse, at endnu.
Lad mig gå op her.
>> Og varsel, også, jeg får lidt kede af at skrive "make goddag 0" alt det
tid, "gøre", og alt dette.
Så det viser sig, i Linus kan du ofte ramt pil op på din
tastatur, og du kan faktisk rulle gennem alle de kommandoer, som jeg har
henrettet tidligere bare nu.
Så hvis jeg gør det, op, op, der er at gøre hej 0.
Jeg ønsker ikke, at.
Jeg ønsker blot at ændre det til hej 1 denne gang, Enter.
Til sidst, som vil spare dig tid.
>> Ok.
Desværre er der er en fejl.
Så lad mig rulle op.
Det ser ud som jeg virkelig slagtet dette program.
Jeg mener, min Gud, det er to linjer kode, og dets 10 linjer af fejl.
Men se på den øverste først.
Anvendelse af sort identifikator streng.
Har jeg mener standard I N?
Nej det gjorde jeg ikke.
Jeg mente streng.
>> Men hvor er den streng variabel typen erklærede, dd vi sige?
Så det er i CS50 biblioteket.
Så det er ikke tilstrækkeligt, i disse først par uger, blot at bruge
hvad C giver os.
Jeg er også kommer til at gå herop, og jeg kunne sætte det over eller under, men jeg vil
bare holde det alfabetisk at holde tingene ordnet.
Jeg har tænkt mig at medtage cs50.h, der er præinstalleret på
dig på CS50 apparatet.
Og det er open source, så selv folk på internettet kan bruge det på deres
egne computere.
Men det kommer med CS50 apparatet.
>> Så lad mig gå tilbage og kompilere dette med make hej 1..
Fandens.
Stadig en anden fejl.
Lad mig rulle op til det første, selv om.
Denne ene er lidt kompliceret.
Multi-tegn tegn konstant.
Det er ikke at hjælpe mig.
Men varsel, Clang er mindst en lille bit anstændigt, hvorved med lidt
grøn indskudsmærke symbol, det siger her er hvor jeg skruet op.
Hvorfor er det peger, med den lille grøn pil, til det indre citerer næste
til mit navn?
>> Så dette er en af ​​de ting, du bare vænne sig til, især hvis du har været
programmering i Python eller JavaScript, eller andre sprog, hvor denne detalje
betyder ikke noget.
I C, betyder det noget.
Hvis du erklærer en snor, som er en sekvens af 0 eller flere tegn,
du rent faktisk skal bruge dobbelte anførselstegn.
Så jeg faktisk nødt til at ændre dette tilbage at åbne tilbud, lukker citat med
anførselstegn.
Enkelt citater har deres plads, men kun, når du bruger de enkelte
chars, men mere om det en anden gang.
For nu, de dobbelte anførselstegn er nødvendige.
>> Så nu, lad mig gå tilbage til min terminal Vinduet gør hej 1..
Og hvem er overbevist?
Er dette program nu går at kompilere korrekt?
OK.
Så tre af os mener dette.
Ok.
Enter.
Og det faktisk gjorde.
Så der er ingen fejl denne gang, selv selvom dette program er kommet lidt
mere kompleks.
Hvis jeg nu gøre dot slash hello 1, Enter, det kommer til at sige "Hej, David."
>> Men lad os gøre det tredje iteration af dette, hvor
Programmet er virkelig dynamisk.
Lad mig gå videre og ændre filen navn, bare for sammenhængen med
filer, du har til rådighed til dig bagefter online.
Enter.
Og nu vil jeg gå ind og ikke gemme "David" hard kodet her.
Hvad kan jeg gøre for meget enkelt forbedre dette program?
>> Jeg kunne kalde getString.
Det kan være lidt ikke-indlysende, hvad der er ved at ske, så jeg har tænkt mig
til rent faktisk at tilføje en anden linje, printf, og sige navn, colon tæt citat, bare
for at give brugeren en prompt på skærmen.
Og nu vil jeg gå her, og jeg er kommer til at bruge min tastaturgenvej.
Jeg har tænkt mig at gå op, op, og ændre hej 1 til hello 2 Enter.
Og heldigvis, jeg gør fremskridt.
>> Og nu vil jeg til at gå op til prik slash goddag og
ændre det til 2, Enter.
Og nu mit program -
Jeg zoome ind - bliver lidt kønnere.
Name bliver, lad os sige Rob denne gang, Enter, hallo, Rob.
Vi kan gøre det igen.
Navn, Lauren, Enter.
Navn, Joseph, Enter.
Navn, lad os prøve at være svært, Enter.
Eh.
Det er egentlig ikke en bug.
Så det er bare en lille grim.
Så måske vi kunne løse dette i fremtiden,. ikke nu
>> Men hvordan ville du instinktivt gå om adressering
det særlig udfordring?
Det bare ser dumt.
Hvordan undgår man tingene ser dum?
Så vi kunne gøre, OK, jeg hørte et par af ting,. en tilstand og en løkke
Vi kunne bruge, én, en betingelse, at kontrollere hvad er længden af ​​strengen
brugeren gav os?
Og hvis det er 0, det er bare citere citat slut, de bare trykke Enter, og derefter
måske jeg skulle råbe på dem og beder dem igen.
Men hvordan en tilskynde dem igen?
Tja, jeg har også hørt loop, og jeg kunne gøre det igen og igen og igen
spørge brugeren for de samme ting.
>> Nå, lad os gøre en anden eksempel hjælp af en anden
funktion i CS50 biblioteket.
Lad mig slutte denne fil.
Lad mig med at oprette en ny.
Og jeg vil kalde det adder.c, bare fordi det er nemt at gøre simple aritmetik,
selvom dette vil være helt påklistret med, hvad du kunne gøre
med alle moderne computer.
>> Men lad mig gå videre nu, og -
Jeg lærte min lektie sidste gang - bl.a. cs50.h omfatter stdio.h, int
main tomrum, der for nu, jeg vil bare tage på blind tro, men vi vil antage
der vil forstå, hvad det betyder inden længe.
Og jeg har tænkt mig at sige noget som "giv mig en int."
>> Og nu, hvordan får jeg en int?
Jeg vil til sidst erklære en variabel kaldet x af typen int og
opbevares i det et heltal fra brugeren.
Så det var en mundfuld.
Men hvis nogen ønsker at foreslå, hvordan jeg erklærer et heltal kaldet x?
Int x.
>> Så det er virkelig så simpelt.
Giv mig en int.
Kald det x.
Nu bruger jeg opgaven operatør.
Og hvordan opbevarer jeg fra efterlod en værdi af brugeren?
Jeg ønsker ikke at kalde getString, naturligvis, men snarere getint.
Nogen argumenter?
Nej.
Så det er åbent paren tæt paren straks, og derefter en
semikolon slutter linjen.
>> Lad mig nu gøre det igen.
Giv mig en int.
Denne gang vil jeg gøre int, lad os kalder det y, lig getint.
Og lad mig nu gøre noget super-simple ligesom nogle matematik.
Så printf er summen af% d er pladsholder for en int.
Og% d, periode, backslash-n.
>> Ok.
Så det er faktisk ikke matematik.
Men hvis jeg ønsker at sige summen af ​​dette plus denne værdi er lig med dette
anden værdi, hvor mange argumenter i alt skal jeg give printf,
i sidste ende?
Så fire, right?
Denne streng og derefter de tre værdier.
Så x er den første jeg ønsker at være tilsluttet først til% d.
y bliver den næste.
>> Og nu vil jeg slags ønsker at sige z, men z findes ikke.
Men det er ikke en big deal.
For hvad ville du gøre instinktivt, især hvis du havde en
grafregneren, hvad du skriver?
Hvordan omkring x plus y?
Så det er ikke en egentlig variabel.
Det er blot summen af ​​to andre variabler.
Og det er helt legitim.
C sikkert forstår simpelt aritmetik som dette.
>> Semikolon gemme.
Lad mig nu gå herned og skriv lave adder, Enter.
Ingen fejl, så det er fremskridt også.
Indtast adder.
Og endnu en tastaturgenvej, hvis du begynder at kede sig
med alle kommandoerne -
hvis du begynder at skrive en kommando, ligesom dot slash annonce, og det er, hvor din
kedsomhed spark i, kan du normalt hit Tab for at have computeren afslutte
resten af ​​sætningen for dig, hvis det ikke er tvetydig hvad skal komme efter annonce.
>> Så lad mig gå videre nu og du klikker på Enter.
Giv mig en int, 1, 2, og heldigvis, det er 3..
Men som altid, test programmer bør ikke reduceres til
bare prøve det én gang.
Lad mig prøve et hjørne tilfælde som negative 1, giv mig 1, og at en
tjekker så godt.
Og jeg sandsynligvis ønsker at gøre nogle flere streng afprøvning, men jeg er temmelig
komfortabel med hvor det er på.
>> Nå, lad os nu prøve et andet program at denne gang anvender et
bit af andet syntaks.
Lad mig med at oprette en ny fil.
Jeg ringer denne conditions0.c til linje op med nogle eksempler på kode online.
Og lad mig gå videre og gøre omfatte cs50.h omfatter
stdio.h i main tomrum -
OK.
Der går vi.
Vi har vores standard standardtekst.
>> Og denne gang jeg har tænkt mig at sige printf, "Jeg vil gerne en int, please," bare for at
gør prompt lidt mere venlige.
Og nu vil jeg få en int fra brugeren.
Jeg har tænkt mig at kalde det n denne gang, bare fordi n lyder som nummer.
getint, og nu, hvad gør Jeg ønsker at gøre med det?
Tja, hvis n er - og jeg vil zoome ind -
Hvis n er større end 0, vil jeg at gøre følgende -
printf "Du valgte et positivt tal." Else, jeg vil skrive printf "You
plukket en negativ
nummer. "Okay.
Så dette program, selv om jeg gjorde det hurtigt, ser ret syntaktisk.
Lad mig prøve dette.
Gør tilstand 0.
Synes at køre.
Tilstand 0, ind.
Lad os give det en int på 50.
Jeg plukket et positivt tal.
Lad os prøve det igen.
Tilstand 0.
Negativ 50.
Jeg plukket et negativt tal.
>> Men nu, lad mig vælge, hvad vi vil holde kalde et hjørne tilfælde er der mere
et interessant tilfælde, at du tror kan give dig nogle problemer, 0.
Nu er jeg temmelig sikker på det er en af de hjørne tilfælde, hvor nul er
hverken positiv eller negativ, så min program, men i syntaktisk
korrigere - det kompilerer, det kører - er ikke logisk korrekte.
Så hvad er den simple fix her, hvis jeg vil have at opdage, hvis jeg ønsker at håndtere n
lig 0 separat?
>> Så hvis n er lig med 0, så vil jeg sige noget som printf "Du valgte 0".
Lad mig prøve det nu.
Lad mig gå tilbage her, ryd mit vindue, og kompilere.
Hm.
Én fejl genererer.
Men jeg ønsker du at kontrollere hvis n er lig med 0.
>> Så igen en anden dum ting at vænne sig til, lighedstegnet er
opgaven operatør.
Så dette er faktisk fejl i det, teknisk, selvom compiler
beskyttede mig fra mig selv, vi havde teknisk kan kopiere 0 til n, som
er ikke, hvad jeg vil.
Jeg ønsker at teste for ligestilling med lig ligemænd.
Og så der nu kunne være min bedre løsning.
>> Lad mig faktisk gem dette som, siger, forhold1, for at være nyt og forbedret.
Så nu, hvis jeg kompilere det, det ville gøre forhold -
hovsa - gør forhold1 dot skråstreg forhold1, Enter, "Jeg vil gerne en int,
please. "Jeg har tænkt mig at gå fremad og skriv 50 år.
Det er stadig godt.
Negativ 50, stadig godt.
0, og det, ja, opdages at jeg plukket 0.
>> Så hvad mere kan jeg nu gøre med dette?
Nå, kan vi helt sikkert gøre mere komplekse ting.
Men hvad jeg gerne vil foreslå, er at vi ender på denne note her.
Hvis vi trækker op på denne, vil du se, måske, en favorit tegneserie af jeres
indtil i dag du måske aldrig har forstået.
Og det er om kvaliteten af ​​latter du bør få med CS vittigheder.
Så det er om ret.
>> Men mere overbevisende, jeg troede, jeg ville give os lidt teaser til mandag.
Så vi er begyndt at bruge heltal.
Vi har nævnt flåd.
Vi har endda nævnt doubler, som igen giver dig tal
efter decimaler.
>> Men det viser sig, at flåd og doubler, og virkelig, computere,
fundamentalt, kan ikke udtrykke nogle værdier præcist.
Vi ved fra matematiske klasser, som du kan have et vilkårligt antal numre efter
kommaet.
Og du kan endda sætte en lodret streg at sige disse gå på evigt.
>> Desværre, du kan ikke rigtig gøre det på en computer.
Og så hjørne sager opstår.
For eksempel antage, at du er gør noget økonomisk.
Du gør matematik med procenter, og
med dollars og cents.
Og de cents ikke nødvendigvis line up.
Tja, det viser sig, at fraktioner af øre kan begynde at tilføje op, når
modelleret med et edb-system på en sådan måde, at smart
mennesker kan drage fordel.
>> Og dem af jer der ikke har set, jeg havde gerne give dig en 30-sekunders teaser af
en vidunderlig film kaldet Office Space, hvilket vil male et billede af en
problem, vi skal tage fat første ting på mandag.
Hvis vi kunne hæve lydstyrken en lille smule, jeg giver dig 30
sekunder af kontorplads.
>> [VIDEO AFSPIL]
>> -Jeg mener, du, har du ikke været der viser op, og du får til at holde dit job.
>> -Faktisk, jeg blive forfremmet.
>> -Jeg kunne programmere en virus, der ville rip dette sted fra big tid.
>> -Nå, hvordan virker det?
>> -Hver gang der er en bank transaktion hvor renten er beregnet, og der
er tusindvis om dagen, computeren slutter op med disse brøkdele af en cent.
>> -Men jeg har ikke tænkt mig at gøre noget ulovligt.
>> -Ulovligt?
Samir dette er Amerika.
>> -Vi er nødt til at sværge til Gud.
>> -Hvis ingen kender dette men os, okay?
Ingen familiemedlemmer, ingen veninder, ingen.
>> -Selvfølgelig.
>> -Aftalt.
>> -Don 't bekymre, mand.
Jeg vil ikke sige det til nogen enten.
>> [END VIDEOAFSPILNING]
>> DAVID MALAN: Så dette er altså CS50, der var Office Space, og det vil alle
mening på mandag.
Se dig derefter.
>> Fortæller: På det næste CS50, Rob justerer til at være væk fra
Harvard madplan.