[Powered by Google Translate] DAVID Malan: Dette er CS50, og dette er begyndelsen af ​​uge 1.
Hvad vi troede, vi ville gøre i dag, er at tage et kig tilbage på
noget mange af jer har sikkert gik forbi for nogle
tid nu og kan se en lille smule bekendt.
Denne ting her, dette er naturligvis i -
PUBLIKUM: Science.
DAVID Malan: Science center.
Så dette er faktisk en af ​​de tidligste computere
tilbage fra 1940'erne.
Det var en af ​​de første elektromekaniske computere
der var i stand til særlig langt,
selvforbrændende beregninger, og hvad vi rent faktisk ser i
science centret er kun et lille stykke af denne ting.
Hvad vi troede, vi ville gøre så er at tage et kig tilbage på en video
der blev lavet nogen tid siden, at indføre denne
ting til verden.
Og du vil se fra musikken og stemme, som faktisk er de samme
var meget lykkelige tider.
>> [VIDEO PLAYBACK]
-A triumf matematisk og mekaniske færdigheder er dette
store nye automatiske regnemaskine på Harvard University.
Indviklede problemer i matematik, satte igennem
maskine i kodet form på bånd, er nøjagtigt løses i et
brøkdel af den tid, der kræves til human
beregning.
Designet til at fremskynde alle former for matematiske og videnskabelige
forskning, vil den gigantiske mekaniske hjerne arbejde for FN
States Navy indtil krigens slutning.
>> DAVID Malan: Så hvad du måske ikke ved er, at det var i
samme enhed, et begreb vi alle nu tage temmelig meget
for givet blev opfundet, nemlig en fejl.
Så en af ​​de ingeniører, der arbejder i denne computer
bogstaveligt fundet en lille møl i maskinen, som resulterede
i nogle forkerte beregninger.
Og som historien går på, at møl var tapede til denne log
journal her, tilbage fra september 9 i 1940-noget,
og dermed blev født for verden udtrykket "bug".
Så fremover vi overveje bugs at være nogen form for fejl i
programmer, uanset om de menneskeskabte eller i dette tilfælde,. insekter
>> Så et par meddelelser, som vi går videre.
Så CS50 har en tradition for at tilbyde Madpakker af slags på
de fleste fredage i løbet af semesteret, hvor vi tager 30 til
40 studerende i Fire and Ice in the Square for casual
småsnak, taler om datalogi,
tale om fremtiden.
Vi inviterer alumner og venner fra industrien at chatte op
studerende.
Virkelig mod en ende af at gøre, hvad der er en temmelig stor klasse
desto mere intime, mindst én gang i mens den for
delmængder af studerende.
Så hvis du gerne vil slutte sig til os på fredag, 01:15, gå til
CS50.net/lunch til RSVP.
Og vi vil gøre det recurringly, så ikke at bekymre dig, hvis du ikke er
blandt de første 30 eller deromkring i denne uge.
>> Så skriftklog noter.
Et ord på de ressourcer, der nu vil begynde at stå til rådighed
til elever i klassen.
Så at jeres hoveder ikke behøver at være nede under forelæsninger
skrible ned alt, hvad jeg siger og så videre, hvad vi gør
i stedet er at tilvejebringe fra lærerstaben en
kanoniske sæt noter.
Så vi har en af ​​vores undervisning stipendiater, Andrew Sellergren,
der sidder ned hver uge, gennemgår de videoer, og derefter
skriver ned, hvad vi synes er en rimelig
autoritative sæt noter.
Og Andrew glad, også for at sætte snarky fodnoter i
bunden.
Så du vil forhåbentlig nyde disse som en opslagsbog for
sjov, og også komme quiz tid, som en mulighed for at gennemgå
hvad der skete i de enkelte foredrag.
Så de er forbundet på foredrag siden.
>> Problem set 0, i mellemtiden, er ude.
Og med hensyn til de ressourcer til rådighed for dig -
den walkthrough.
Milo førte den første fredag.
Det blev filmet, lagt online ved lørdag.
Og så indse, hvis du ikke er helt sikker på hvor man skal begynde,
til dette eller kommende p-sæt, drej altid først til den
walkthrough eller video deraf.
Sektionering er i gang, ved cs50.net/section er, hvor du
skal indsende dine præferencer, hvis du ikke har
allerede ved i dag.
Fordi sektioner vil starte i den kommende søndag, mandag,
og tirsdag.
Vi gør sektioner disse tre dage, hver uge af
semester for det meste.
Og vi også indføre, igen, forskellige spor.
Så vil du blive spurgt om dette sektionering formular, hvis du
har ikke set det allerede, hvis du er blandt dem mindre
komfortabel, mere komfortabel, eller et sted midt imellem.
Og hvis du er slags på hegnet, generelt et eller andet sted i
mellem er hvad de fleste studerende ender kontrol.
Kontortid begynder i aften.
>> Så Scratch er temmelig lav nøgle, selvom det er helt naturligt
at løbe ind i diverse bugs, eller være usikker på, hvordan man
gennemføre noget.
Så indser, at vi vil begynde kontortid i denne uge.
De vil være på Annenberg mandag, tirsdag, onsdag,
Torsdag, fra 20:00 til 11:00 i løbet af hjernen pause.
Øvre classmen kan komme ind, og hvis du nogensinde har problemer med at få
i døren, fordi de vil være at føre bare snakke din vej
i og forklare du er sammen med CS50.
Typisk 20 til 30 af os på personalet vil være der til at hjælpe
du en på én.
>> Ved ankomsten ideen er denne: du vil bringe din bærbare computer,
har du din oplader, vil vi have ekstra netledninger,
især langs den sydlige væg af Annenberg hvor
der er masser af stikkontakter.
Og det vigtigste indgang til kontor timer Q & A er at gå til
cs50.net/discuss og at skrive
dit spørgsmål der.
Og at mærke det med Pset 0 eller Pset 1, uanset ugen
kunne ske at være.
Og så, hvad vi vil gøre, er at have en tabel over undervisning stipendiater
og kursus assistenter, generelt 8 eller 10 eller deromkring af os,
går igennem, holder et vågent øje på tavlen, og
plukning off spørgsmål virkelig så hurtigt som vi kan,
henvise dig til relaterede indlæg, hvis du ikke har fundet dem
jer selv, online referencer efter behov.
Og så hvis der er problemer, da der uundgåeligt
vil være, eller det bare giver det mere mening at sidde ned en på én,
arbejde gennem problemer med nogen.
>> Eller du bare komme i kontortiden virkelig
brug denne tankegang.
Du ønsker ikke at gå gennem den elektroniske formular, du
virkelig ønsker at mødes med nogen.
Kommunikere det til os, og hvad der vil ske er, når din
Spørgsmålet er blevet set af et medlem af personalet, og vi
bestemme, yup bør dette sendes til en af ​​de 20 eller
30 teammedlemmer her lokalt, vil du se øverst til venstre denne
lidt Indtast Queue knappen blinker på cs50.net /
diskutere.
Og det er at fortælle dig, at du nu er blevet inviteret, så
til at tale, for at indtaste køen.
Og ved at klikke på denne knap, vil dit navn og derefter vises på
en iPad, at CS50 greeter, en af ​​kursets hoveder, vil
afholde nær ved indgangen til Annenberg, som så vil
ser som afbildet her, de studerende, der har spørgsmål om
venstre, de medarbejdere, der er til stede i højre side.
Og med et klik på venstre og højre, vil din web browser
begynder at blinke, så snart f.eks Professor McGonnagal
er klar til at se dig på en bestemt tabel i Annenberg.
>> Så vi gjorde nogle af det sidste år.
Vi har genstartet kontortid og
igen gennemført en stor del af softwaren.
Så indse, at dette vil blive varme op i denne uge.
Men også indse også, i de forløbne år, som du måske har hørt
fra venner, havde kontortid faktisk 50 til
150 studerende på én gang.
Og det er simpelthen ikke muligt for os at håndtere, at
effektivt, en på én, hele aftenen.
Og så, hvad vi egentlig vil forsøge at gøre dette år er
udnytte det faktum, at en masse spørgsmål er
ofte stillet og kan ofte bedre besvaret
asynkront.
Så du kan sortere i tænke igennem de ansattes reaktion,
og vi kan tænke igennem din kode, uden den opvarmede
tryk nødvendigvis kæmper
igennem den side om side.
Så vi anslår, at omkring en tredjedel eller halvdelen af ​​spørgsmålene
vil blive afsendt i person, og vi vil forsøge at plukke ud som
mange som en halv eller mere elektronisk,
i kontortiden.
Og vi vil fortsætte med at bruge Diskuter
hele ugen så godt.
>> Og endelig indser, at dette kursus kan tages bestået / ikke bestået.
Så hvis du er på hegnet eller bare tror, ​​at du virkelig
ikke sikker på, om dette er verden for dig, eller det er virkelig
helt fremmed for dig, indse, at dette er en vidunderlig måde
for at få nogle tillid, som at træde ind i
klasse, som jeg gjorde ærligt år siden.
Og så har fem uger til at sortere i tal ud for
dig selv, hvis du ønsker at bo bestået / ikke bestået, skifte til et brev
klasse, eller lignende.
Og typisk hvad bestået / ikke bestået gør, tror jeg, for de studerende er
at hvis du lægger i, at 10 timer, 20 timer, hvad det
kan være på nogle problemer, og du banke hovedet
mod væggen,
og du virkelig kan bare ikke jage noget ned, og du
har så mange andre ting, du skal gøre, ærligt, hvad jeg
tænke bestået / ikke bestået, er det tager brodden af ​​af
situationer som denne.
Hvor du har taget ting 90% af vejen.
Du ved, det er ikke helt perfekt.
Men du fik en masse ud af det, alligevel.
Så overveje bestået / ikke bestået med at du får at
mental model, måske.
>> Okay, så i sidste uge vi dove i Scratch, og vi
talte om programmering på et ret højt grafisk niveau.
Og i dag har vi gøre overgangen til et sprog
kaldet C, et lavere niveau programmeringssprog oven på
som mange moderne sprog er nu bygget, herunder nogle
af dem, vi vil bruge til udtryk udgang.
Og syntaktisk, hvordan de ser ud
er alle temmelig ens.
Så lad os begynde at gøre denne overgang her.
Så det var et program i sidste uge, var den enkleste
Hello World-programmer.
Det er simpelthen udskrives til skærmen hej verden, med en
lille taleboble kommer ud af katten.
Tja, hvis vi begynder nu at omsætte dette til en anden
sprog, indse, at de ideer, i dag og på onsdag
er identiske, men syntaksen begynder at ændre sig.
Så mens vi i sidste uge havde, da grønt flag klikket, siger
hej verden.
I dag vil vi have int, main, ugyldig, printf,
tilbagevenden med nogle andre syntaks der samt.
Krøllede parenteser og parenteser, og citater, og whatnot.
Men indse, at kernen i idéen her er udskrivningen,
og i sidste ende det faktum, at main nu vil være
synonymt med start af et program.
Main vil være der, hvor det grønne flag sparker ting ud.
>> Så lad os nu drille hinanden nogle af de byggesten her
før vi dykke ned i nogle konkrete eksempler.
Så vi kaldte det en erklæring i sidste uge, hvorved det er bare
en instruktion.
Gør dette - i dette tilfælde, hej verden sige.
Godt i C, hvis vi ser på netop denne linje, det er sådan vi er
vil begynde at udtrykke denne særlige puslespilsbrik:
printf ("Hello World");.
Og nu vil vi drille dem fra hinanden mere og mere over tid,
men indse, at der er et mønster her.
Så man har vi denne ting kaldet printf, som er
det væsentlige analog med ordet Sig.
Det er, hvad det kommer til at gøre.
Printf, og f her betyder "formateret".
Så det bare betyder, at du kan indsætte
forskellige æstetiske detaljer.
Så citerer citat slut er begyndelsen på, hvad vi skal
at begynde at kalde en streng.
Et ord, en sætning, en sætning.
En snor i et programmeringssprog er en sekvens af nul
eller flere tegn.
Så h-e-l-l-o, komma, og så videre er,
citat citat slut, en streng.
Og nu backslash n, lidt syntaktisk underligt, men vi
allerede defineret i sidste uge således hvad?
Det er bare en ny linje.
Det er bare en måde at formidle til den computer, du ønsker
ækvivalent for at ramme Enter der, men du behøver ikke
vil faktisk Enter og derfor rodet op alle de
formatering af din faktiske program.
Nu parenteserne vedlægge denne streng, åbne paren og
close paren, og indersiden af ​​det er vores streng.
Fordi det er fordi i C, og anden programmering
sprog, kan lide at tingene printf tage argumenter, eller tage
parametre.
>> Så begynde at tænke nu af denne lilla Say blok som en
funktion, som en fremgangsmåde, som en procedure.
Du kan virkelig kalde det hvad du vil for nu, men
Det er en slags miniature program, der kun gør man
ting, i en enkelt linje, intet mindre.
Så printf er også det, vi vil begynde at kalde en
funktion og funktioner gøre noget - i dette tilfælde
udskriver en formateret streng til skærmen -
men fungerer også tage argumenter eller parametre.
Og med argumenter eller parametre, tak, mener vi
at deres adfærd kan være påvirket af, hvad du passerer i
i parentes.
Så i dette tilfælde, kan printf behov at vide, hvad der skal udskrives, og vi
bare gå i, i gåseøjne her, den streng, som vi
faktisk ønsker at udskrive.
Og semikolon på selve slutningen af ​​denne linje er blot en
historisk gene hvorved i slutningen af ​​de fleste linjer kode,
du sætte et semikolon for at gøre super klar til computeren
at denne linje kode ender her.
Nu er dette er godt, fordi som vi vil se som programmer får mere
kompleks, vil semikolon gøre super klart for os mennesker,
og også den computer, hvor linjer kode start og afslutning.
Erkend, at nogle sprog ikke har nogen
af de samme oplysninger.
Og i virkeligheden, i JavaScript, behøver du ikke altid brug for noget
ligesom semikolon.
Men mere om det at komme.
>> Så sløjfer.
Vi havde noget som dette, meget intuitivt indlysende, gøre
noget igen og igen og igen.
Ligesom at sætte på sokker, eller sige hej, i dette tilfælde.
Nå, begynder i dag i C, kunne vi udtrykke dette Scratch
blokere så while (true) printf ("Hello World").
Så opdager vi er begyndt at bygge videre på bogstaveligt talt puslespillet
stykke fra før.
Vi har den samme lilla blok, men det er inde i dette
parentes Forever blok, og den bedste måde at oversætte det
til C er som følger.
Der er ingen Forever søgeord.
Du kan ikke bare skrive f-o-r-e-v-e-r i C.
Så den nærmeste analog er samtidig.
>> Nu, mens (sand) virker lidt dum, fordi gør værdien
af ægte nogensinde forandring?
Formentlig ikke.
Det er ligesom at sige, mens en, mens du er på, mens sandt.
Det er alt sammen det samme, gælder det altid er tilfældet.
Så denne løkke er faktisk inducere hvilken slags loop?
Bare en uendelig løkke, højre.
En Forever sløjfe eller som vi kaldte det i sidste uge,
bare en uendelig løkke.
Så nogle gange er det slemt.
Nogle gange er det en fejl, nogle gange det er derfor du får
den roterende badebold eller timeglas eller lignende.
Men i dette tilfælde, vi bevidst, uanset
Derfor ønskede at udskrive det samme igen
og igen og igen.
Eller i tilfælde af lignende et ur, du ønsker at gøre
noget igen og igen og igen.
Så uendelige løkker kan give mening.
Og det er sådan i C vi kan oversætte Forever til kode.
>> Så nu er denne ene er lidt mere specifik.
Vi havde gentag 10 gange følgende erklæring.
Så mens (sand) ikke helt arbejde der, fordi sand er
altid sandt.
Så hvis vi i stedet se på C-version, nu syntaksen får en
lidt mere kryptisk.
Men for at være ærlig, når du begynder at se dette, det hele bliver
temmelig bekendt hurtigt.
Så dette er hvad der kaldes en for-løkke.
En for-løkke vil fortælle computeren til at gøre noget
igen og igen og igen så længe
disse ting er sande.
Nu hvad mener vi med det?
Tja, der er tre dele til en for-løkke, og vi vil
vende tilbage til dette i forbindelse med den faktiske
eksempler i et øjeblik.
Så du skal ikke bekymre dig, hvis det ikke helt synke i på én gang.
Men int i = 0 er, lang historie kort, siger give mig en
variabel, der er af typen heltal, så giv mig et nummer
kaldte jeg, og det initialiseres til 0.
Det er at give mig som en algebraisk variabel x og
initialisere den til 0.
Men i dette tilfælde har vi kaldte det i.
Så i midten, siger, at det i er mindre end 10.
Det er at fortælle computeren gøre følgende ting, så længe
som jeg er mindre end 10.
Og selvfølgelig er det starter mindre end 10, fordi
starter ved 0.
Så endelig kan du måske gætte, hvad jeg + + midler.
Det er en lille smule af syntaks, der betyder bare tilvækst i.
Så tilsættes 1 til i, igen og igen og igen.
>> Og så vi vil se denne løkke, denne syntaks snarere, implementerer
præcis det samme, som helt ærligt, i Scratch var lige så
meget lettere at udtrykke.
Gentag 10, og du er færdig.
I C, og i de fleste programmeringssprog, skal vi være en
lidt mere lærerigt for computeren og faktisk
specificere noget som dette.
Men vi vil vende tilbage til dette og andre syntaks.
>> Hvad med variabler?
I Scratch havde vi noget som de orange blokke,
hvor jeg kunne erklære en variabel.
Lad os vilkårligt kalde det tæller.
Lad os initialisere den til 0 og derefter
lad os for evigt gøre noget.
I dette tilfælde i Scratch jeg siger tælleren, så den
kat kommer til at have en lille taleboble, der er tale
det antal, der er i denne variabel.
Og så har vi ændre tæller med 1.
Så alt dette er viklet inde i en Forever lås.
Så vi allerede nu har de byggesten i C med
der til at oversætte denne.
>> En måde, vi kunne gøre det er det.
Giv mig et heltal, kalder det tæller.
Initialiser den til 0
i første linje der.
Mens (sand), så jeg stjæler den ide fra blot et øjeblik
siden, gå videre og gøre følgende.
Print ud tælleren, og derefter inkrementere tælleren,
igen og igen, og igen.
Eller igen, + + betyder blot tilføje 1 til noget.
Men der er et nyt stykke syntaks her.
Hvad springer ud som ikke blandt vores tidligere eksempler?
Ja, dette% d.
Så du kan måske udlede, hvad det gør, helt ærligt, der er baseret
på, hvad Scratch blokken gør.
Men igen i C, vi bare nødt til at være lidt mere specielt
når det kommer til at udtrykke os selv.
>> Så printf ("% d \ n").
Nå det meste af det, vi kan smide væk som bekendt.
Citaterne bare betyder, at det er en streng, backslash n
er bare en ny linje.
Så det eneste nye ting her er% d.
Og alt det er er en pladsholder.
% D kommer til at betegne et decimaltal.
Og% d betyder computer, sætte et decimaltal her.
Nå, hvad nummer du ønsker at sætte der?
Nå, som du måske kan udlede, efter kommaet vi siger
tæller, det er navnet på en variabel, som vi erklæret eller
skabt et par linjer tidligere.
Så dette er bare C måde at tilslutte en variabel ind i en
streng dynamisk.
Fordi derimod, hvis jeg i stedet havde gjort noget lignende
dette, printf ("counter"), hvad ville dette
program i stedet gøre, formentlig?
Det vil bogstaveligt talt udskrive "tæller".
Hvilket ikke den virkning, at jeg vil have.
Jeg har brug for at erstatte i nogle numeriske værdi.
Så vi vil se, at funktionerne derefter, ligesom printf kan tage ikke
kun lige enkelte argumenter, ligesom
"Hej verden".
De kan tage citat citat slut komma, og derefter nogle variabler
der vil få sat ind, som vi vil se den forrige streng
via disse%-tegnet pladsholdere.
>> Nå hvad med booleske udtryk?
Boolske udtryk var disse værdier, sande eller falske.
Ja eller nej.
1 eller 0.
Tændt eller slukket.
Så i Scratch de ser sådan ud, og bemærke, at
bundblokken her er faktisk sammenholdt
af to mindre blokke.
Så jeg slags trækkes og slippes tre puslespilsbrikker
sammen for at gøre det længere puslespilsbrik der så at jeg
kunne vække det indtryk, at jeg ønsker x at være mindre end y og
y er mindre end z.
Og så jeg kan oversætte disse to separate linjer som følger.
Den øverste man kan blive meget trivielt oversættes til C,
med blot x <y.
Måske med nogle parenteser for god foranstaltning.
Og så i C, behøver du ikke skrive og til at betegne den
sammenholdt af noget.
Du i stedet skrive &&.
Og da vi i sidste ende vil se en enkelt tegnet sker for
betyde noget andet.
Så && lige betegner ideen om OG.
>> Så igen, selvom det begynder at se temmelig kompleks,
et af formålene med introduktionen af ​​Scratch, foruden
bare at have en slags sjov on-rampe, hvor du kan gøre
noget, der er meget grafisk, og animeret, og
deles og lignende, også at transportere tanken, der
alle de ideer, vi starter dykning i dag og fremefter
er blevet indarbejdet i selv at simple
grænseflade siden dag ét.
Hvad med denne her?
>> Så betingelser.
Så Scratch blokken til venstre der ser
lidt mere kompliceret.
Men det er bare nogle at trække og
nedkastning af velkendte stykker.
Hvis x er mindre end y, så sig.
Else hvis x er større end y, så sig det.
Else, kan vi logisk antage det er udledes,
De skal være ens.
Så at sige, at de er ens.
Nu i C til højre, samme nøjagtige ting.
Og se, at de krøllede parenteser vil være en
træk af C og andre sprog, der gør denne slags
af indkapsling.
Ligesom hvis blokken er denne gule ting, der er slags
snuppe den lilla blok inde i den.
Tilsvarende er disse seler -
disse krøllede parenteser -
betød at fremmane den samme idé om at omfavne en eller flere
linjer kode, der er indrykket inde i dem.
Så på den højre side her, hvis x er mindre end y, printf
("X er mindre end y").
Ellers hvis x er større end y, printe det samme.
Else udskrive, at de er ens.
>> Så kort sagt, er der en temmelig direkte kortlægning eller oversættelse
af det sprog, vi har set hidtil, også for nogle
af de mere avancerede funktioner.
Så du kan ikke bruge dette til dit projekt, eller måske ikke
bruge dette til dit projekt i denne uge.
Men vi har disse ting kaldet arrays i C. I Scratch,
de kaldes lister.
Og vi så dem med Fruitcraft RPG sidste uge.
Den lille blå fyr, der gik rundt, picking up
kirsebær og appelsiner og lignende.
Godt i Scratch, blev der gennemført med denne orange
blokere, der indeholder ord, i dette tilfælde, er vi bogstaveligt talt
tilføje "orange" til en
variabel kaldet opgørelse.
Så i C, er denne syntaks vil få en lidt mere kryptisk.
Og vi vil vende tilbage til dette i næste uge og gøre mere
interessante ting i verden af ​​kryptografi med det.
Men ved bunden her, disse to linjer væsentlige
oversætte til, hvad vi laver i én Scratch blokere deroppe.
Men mere om det at komme.
>> Så sætte det sammen, her er et program i C. Så lad os
hurtigt drille hinanden nogle af stykker af syntaks her, men
så lad os faktisk begynde at skrive noget kode, sætte
dig med nogle af de værktøjer, vi skal bruge, og se, om vi
kan bygge på nu nogle af disse grundlæggende byggesten fra
i sidste uge, nu syntaktisk i C. Så øverst her, dette
er måske et af de mest kedelige programmer, du kunne
skrive i de fleste enhver programmeringssprog.
Men det er slags har særlig betydning, fordi det er den
kanoniske program at enhver datalog skriver, når
undervisning nogen et programmeringssprog -
et hej verden program.
>> Så øverst ser vi denne opfattelse af # include
og derefter, i vinklede parenteser. stdio.h
Vi vil vende tilbage til det, men virkelig, hvad det
betyder, at der er en fil i denne verden kaldet standard
I / O, stdio dot h, og det er bare en tekstfil,
nogen skrev år siden.
Og inde i den pågældende tekstfil er en hel masse
funktioner eller metoder eller procedurer, som en anden har
skrev, at vi er modtagere af, fordi vi
kan nu bruge denne persons kode.
De funktioner, han eller hun skrev.
I dette tilfælde er printf ikke noget, som jeg skrev, det er
ikke noget, som CS50 skrev.
Det er noget, som nogen skrev år siden og sat i en
fil kaldet stdio.h og derefter, som en sidebemærkning, sætte
en anden del af funktion i en anden fil.
Men vi vil komme der.
>> Så # include er bare vores måde at sige, i
C, giv mig adgang til funktioner, som en anden skrev.
Og i dette tilfælde jeg ligeglad, fordi jeg ønsker printf.
Nu får vi int main (void).
Så dette er en af ​​disse ting, helt ærligt, at på dag 0,
temmelig meget jeg har at slags zone ud, fordi det er bare
ikke interessant
intellektuelt, nogle af syntaksen.
Men for nu, at funktioner, også kendt som
procedurer, eller metoder, frembringer i almindelighed en vis værdi.
De gør noget.
De kommer med et svar.
De producerer output.
Så int næste to main er bare vores forkortet måde at sige
at denne funktion, denne procedure i sidste ende vil
at give dig tilbage et nummer.
Og hvorfor det er, vi vil komme tilbage til.
Main er bare standard verden standard for standard
funktion, der kommer til at blive henrettet i et C-program, når
du kører det.
Void betyder bare denne ting, main, tager ikke
argumenter, i dette tilfælde.
Så jeg er super eksplicit.
Der er ingen strenge derinde, der er ingen kommaer.
Void betyder ingen argumenter til main.
>> Nu endelig, heldigvis, de to sidste linjer er velkendte.
Inde i de krøllede parenteser vi har en printf
og vi har en tilbagevenden.
Og afkastet er lidt uheldigt, at vi er nødt til at
sætte det der, fordi det i dette tilfælde er ikke at gøre alt,
meget af interesse.
Men i et edb-program, når en funktion returnerer 0,
det betyder alt er godt.
Intet gik galt.
Derimod hvis en funktion returnerer 1, eller negativ 1, eller
negativ 1.337, eller nogle tilfældige numre som det, der
generelt betyder, at en fejl, der faktisk er opstået.
Så hvis du er på din Mac eller din pc, hvis du nogensinde har set
nogle irriterende besked, fordi din computer er gået ned eller
frosset, og der er en kryptisk fejlmeddelelse,
og derefter nogle kode, som systemet kode
1,2,3,4 nogle nummer,
der generelt er en unødvendig detalje at fortælle
de fleste af os mennesker, men det er, hvad en funktion eller nogle
Programmet har faktisk returneres, en ikke-nul værdi.
Og fordelen ved dette er, at 0 betyder alt så godt, og
så du hovedsagelig have et uendeligt antal af ting, som
kan gå galt.
Hvilket er hvorfor de valgte 0 for god og en ikke-nul værdi for
dårlige, som vi skal snart se.
>> Så lad os gå videre og skriver dette.
Så minde om, at den anden dag brugte jeg min Mac til at åbne op for en
terminalvindue, og så åbnede jeg op tekst program, ligesom
TextEdit, og jeg begyndte at skrive noget kode.
Nå det er fint.
Men din oplevelse vil være anderledes på en Mac, eller
på en Solaris computer, en Linux computer, uanset operativsystem
system du tilfældigvis bruger.
Og så i kurset, er, hvad vi i stedet for at bruge noget
kaldet CS50 Appliance.
Så CS50 Appliance er et downloades stykke software
der giver dig mulighed for at køre et operativsystem kaldet Linux,
specifikt Fedora Linux, på din egen Mac eller pc.
Og du gør dette ved at hente noget, der hedder en hypervisor.
Så alt dette vil blive dokumenteret i problem sæt 1.
Og du vil blive guidet mod, hvad du behøver at downloade.
Men det endelige resultat, om du har en Mac eller pc, er du
hente nogle gratis software.
Du kan derefter hente den CS50 Appliance, og du fortælle, at
fri software - hypervisoren -
at køre CS50 Appliance i et vindue på din computer.
Og hvad der sker, er dette.
>> Jeg har nu, mærke her, hvad der synes at være en stationær
miljø.
Og lad mig faktisk skrumpe denne enkelt vindue.
Så dette nu er min Mac, med et lille vindue her, og inde
af dette vindue sker for at være en helt
andet operativsystem.
Faktisk er der denne startmenuen hernede, der minder om
Windows, der har en hel bunke af undermenuer, herunder
et link til CS50 manual, Dropbox og lignende.
Og hvad dette miljø nu er en standard miljø
at vi alle nu kan bruge, så uanset hvad din
computer er, hvad du har installeret på den, hvilken version
af Mac OS eller Windows du kører, alle nu har vi
samme miljø.
Og nu i dette miljø kan vi begynde at skrive noget kode.
>> Så jeg har tænkt mig at gå videre og åbne et program kaldet gedit.
Dette kan sammenlignes med notepad.exe, eller
TextEdit på en Mac.
Og det er bare et super simpelt tekst redigering program
der ligner dette ved første øjekast.
Nu øverst, har jeg en hvid palet, nederst I
har denne sorte vindue, der siger jharvard @ apparatet.
Og det er fordi den brugerkonto, vi på forhånd skabt
for alle hedder John Harvard.
Han har en mappe, hvor alle hans filer kommer til at gå, og
her er, hvor vi kan begynde at skrive noget kode.
Så lad mig gå videre her og zoome ind bare en smule, og jeg er
vil gøre # include , int main (void), og
så jeg har tænkt mig at gøre printf ("Hello World")
; Returnerer 0.
Nu er alle helt sort og hvidt.
>> Lad mig gå videre og gøre én ting at undervise gedit hvad jeg
faktisk gør.
Lad mig gå til Gem som.
Jeg har tænkt mig at vælge i venstre side her jharvard.
Så igen, selvom du aldrig har brugt Linux før, helt ærligt
disse dage er de alle dekoncentration i det væsentlige
samme type interface -
Mac OS, Windows og Linux.
Så jeg valgte jharvard hjemmemappe her.
Og jeg har tænkt mig at gemme denne fil som hello.c.
Så øverst, skrev jeg hello.c, at navngive en C
program med det. c. forlængelse
hvad der er almindelig praksis.
Og jeg ramte Gem.
Og nu, hvad er rart er, at jeg faktisk har lært gedit,
at dette er et C-program.
Bemærk, at min sorte og hvide tekst nu er farvekodet, eller
syntaks fremhævet, hvilket bare gør mig opmærksom på det
forskellige semantiske dele af programmet.
Øverst til venstre der, som mine programmer bliver mere kompleks, jeg er
vil have en oversigt over alle de ting jeg har skrevet.
Så det er det deroppe.
Så lad mig nu zoome ud og gå ned til denne terminal vindue.
>> Så det er måske nyt for mange mennesker.
Hvis du aldrig har brugt en kommandolinje miljø, du har aldrig
brugt DOS, eller du aldrig har brugt Linux, eller du aldrig har åbnet
Mac OS terminalvindue, der er en masse ting, du
kunne gøre med den GUI, som peger, og klikke, og
trække, og slippe, og lignende, men generelt -
sikkert i verden af ​​datalogi -
hjælp af en kommandolinje, hvor du ikke har din mus
generelt, du kun har dit tastatur, er faktisk en masse
mere kraftfuld end interface, når du får akklimatiseret til
forskellige kommandoer.
Og du slags fri dig selv for at skulle pege og klikke
på alt.
Så i gedit vi sortere i har det bedste fra begge verdener.
Vi kan trække og slippe tekst, kan vi se det
rart og farvekodet.
Men når det drejer sig tid til at køre vores program, vil vi undertiden
bare bruge denne lille vindue her.
>> Så jeg har tænkt mig at gå videre og gøre det.
I den nederste sorte og hvide vindue, vil jeg gå videre
og skrive klang.
Og klang er navnet på en compiler.
Det er et program, der konverterer min kildekode
ind, således, objektkode.
0'er og 1-taller, at vi så kort i sidste uge.
Recall fra sidste uge, vi lovede, at vi skulle
gå fra noget som dette - vi skulle være
noget som dette -
og det er bestemt ikke noget, at et menneske kommer
at gøre manuelt.
Så i stedet vil vi bruge et program, og dette program i
dette tilfælde kaldes Dunk.
Og navnet på mit program er hello.c.
Så for at kompilere hello.c fra kildekode til
objekt kode, eller 0'er og 1-taller, bør det være tilstrækkeligt at bare gøre
dette og tryk på Enter.
>> Okay, intet synes at være sket.
Men jeg ved nu, eller fra sidste uge, at standard navn
et program, når skrevet i C, er tåbelig kaldes a.out.
Mest uinteressante navn, du kunne komme op med.
A er det første bogstav i alfabetet, ud er, hvad der var
udsendes, men så må det være.
Dette er mit program, og nu dot slash, som vi vil se, er
faktisk bare en slags sikkerhed funktion, fordi
a.out er et program jeg skrev.
Det kom ikke med min computer, det er
ikke i Program Files.
Det er ikke i Mac OS er mappen Programmer.
Jeg er nødt til at være super eksplicit med computeren, og sige
dette program, a.out, er i den aktuelle mappe,
aktuelle bibliotek.
Og den måde, du repræsenterer dette i et miljø som dette
er prik repræsenterer uanset mappe du befinder dig i.
Og så. / Betyder blot kører a.out
i den aktuelle mappe.
Og jeg køre dette med Enter, og voila, min allerførste program.
>> Lad mig tage et skridt tilbage.
Dette vindue er lidt lille, og indse, at bunden
venstre af apparatet her er en anden ikon.
Den ene er Chrome, som bør være ganske velkendt, bare en web
browser inde i skabet.
Og denne sorte og hvide ikon er blot en
større terminalvindue.
Så hvis det bliver lidt irriterende at sortere i har bare
denne lille lille udsnit af et vindue med til at interagere
med programmer, kan vi i stedet gøre dette.
Og lad mig starte med at skrive et par snart
at være velkendte kommandoer.
ls.
Så ls er kommandoen til notering.
Så i en Mac OS eller Windows, vil du normalt dobbeltklikke på en
mappe og derefter, voila, du se alle de forskellige filer
og mapper.
I en kommandolinje miljø, hvor du kun kan skrive
kommandoer eller tekst, ls er tilsvarende.
Så vis mig hvad der er i denne mappe.
>> Nu er der en masse ting her, der er både lidt
velkendt og lidt uvant.
Men bemærk, at ligesom Windows og Mac OS, jharvard
har en mappe på skrivebordet.
Så enhver ikoner, der er på mit skrivebord ske
at være i denne mappe.
Der er en downloads mappe, ting,
Chrome kan sætte der.
Dropbox.
Så Apparatet leveres med indbygget understøttelse af Dropbox
således at der i løbet af semestret, kan du synkronisere med din Dropbox
konto, så alle dine programmer bakkes op.
De er tilgængelige på din anden computer.
Hvis noget nogensinde går galt med apparatet, kan du
meget nemt genoprette fra Dropbox.
Så det folder er der for.
Der er to filer, som jeg gjorde - hello.c
og a.out.
Og så til højre er der nogle andre mapper, vi får
komme til i slutningen af ​​semestret, med web
programmering.
Så når jeg gør. /, A.out, Enter, det siger gå
i den mappe jeg er i, den aktuelle mappe, og kør
program kaldet a.out lige der.
>> Okay, så det er rart og godt, men det er ikke alt,
overbevisende at skrive et program, der hedder hjælpe a.out.
Så vi kan faktisk gøre dette lidt anderledes.
Så i stedet for bare at køre klang, hello.c, lad os tilføje
hvad der kaldes en kommandolinje argument.
Så en kommandolinje argument, eller en switch i denne sag, er blot
et andet ord eller en sætning, du skriver på en prompt efter
det program, du vil køre.
Så i dette tilfælde, klang er det program, jeg ønsker at køre,-o
betyder output en fil, der er ikke længere hedder a.out.
Output en fil kaldet goddag, og gør det ved at opgøre
sidste ord på linjen, hello.c.
Så kort sagt, er dette en meget marginal forbedring, hvorved
i stedet for at have dette dumt fil med navnet a.out,
Jeg kan nu gøre klang-o hej, så hello.c, og
derefter trykke på Enter.
Intet synes at ske, men igen meget gerne med 0 - når
intet synes at ske det betyder noget galt sket -
så lad os gøre ls nu, Enter, og ja, jeg nu
have en hello program.
Så hvis jeg skriver hej nu, command not found.
OK,. /.
Så helt rigtigt.
Så fordi dette program jeg skrev, og det kom ikke med
computeren,. / hej, Enter, betyder
Jeg kører nu hej.
>> Så det er det der.
Nu, hvad vi vil i sidste ende komme til mere og mere kommandolinjen
argumenter, der tillader os at gøre mere, men bare for dem, for
hvem det kan være gamle hat, lad mig faktisk gå ind i en
bibliotek her og bare give dig en smagsprøve på, hvordan vi ellers
kunne gå om gennemførelsen hej verden.
Lad mig komme ind på her, og jeg har tænkt mig at åbne den.
Så faktisk, jeg vil forklare, hvad jeg gør, så
Dette er nyttigt.
Lad mig op igen.
>> Så jeg har gjort det i lang tid.
Så opdager over på den højre er der et par af
mapper, der er mærkeligt navngivne source1m og source1w.
Det er bare fjollet konvention vi bruger.
Kilde betyder bare kildekode, 1 betyder dette er uge et, og
m betyder, at det er mandag, og w betyder det er onsdag.
Så intet kryptisk der.
Det er bare stenografi notation.
Disse blå ting er mapper, ellers kendt som
mapper.
Jeg ønsker at gå ind i denne mappe nu, og på en normal computer
Jeg kunne bare dobbeltklikke på et mappeikon og
der er alle mine filer.
Men i en kommandolinje miljø, kan jeg ikke helt gøre
at, så i stedet, jeg er nødt til at skifte mapper manuelt.
Så hvis jeg skriver cd og derefter source1m, Enter, bemærke, at
min prompt, den ting i hvidt til venstre, lige skiftet.
Og så ja, når det lige har sagt parenteser og derefter de
lille krusedulle, tildesymbolet symbol, der bare betød, at jeg var
i John Harvard hjemmemappe,, hans Mine dokumenter
hans personlige filer.
Men nu i parentes står ~ / source1m.
Det betyder bare, jeg er i en mappe kaldet source1m
det er i John Harvard hjemmemappe.
Så hvis jeg nu ønsker at vise en filerne i denne mappe, let
spørgsmål, jeg skriver bare ls.
Og nu vil jeg se alle de filer, som jeg på forhånd skabt til nutidens
foredrag, der alle eller de fleste af dem, sker
at ende i. c.
>> Så lad mig gå videre nu og køre gedit af et program kaldet
holloway.c, som er skrevet af nogle tilfældige hacker
på internettet, ser det lidt som denne.
Og vi vil ikke gå igennem denne ene i ethvert
detalje, men for dem mere komfortable, navnlig hvis
du ønsker at tage et gæt om, hvad dette program gør her.
Være forvisset om, uanset om du er mindre eller mere komfortabel,
vi ikke engang komme til denne slags ting ved udgangen af
dette semester.
Dette er, hvad er et eksempel på en uklar C konkurrence, som
midler skrive den mest kryptiske leder program du muligvis
kan at overgå andre kloge mennesker, der ligeledes er
forsøger at skrive ting og vise, at de kan skrive
mere kryptiske ting end dig.
Så dette er ikke et eksempel på en velskrevet program fra
perspektiv stil, er dette et eksempel på et program,
vinder en konkurrence, for folk forsøger at
være vag og abstrakt.
>> Så hvis vi kører det her, så lad mig gå ind i min terminal vindue,
så at sige.
Så denne sorte og hvide omgivelser kaldes
terminalvindue generelt.
Lad mig gå videre og kompilere den.
Jeg har ikke tænkt mig at bruge klang, fordi dette program er en
lidt kryptisk og det kræver en anderledes
compiler, en kaldet GCC.
Men det gør de samme ting.
Det tager kildekode til objektkode.
Og nu, hvis jeg løber a.out, at program, du
lige set gør dette.
Så det fyr samme år vandt konkurrencen.
Under alle omstændigheder, vi ikke går i den retning, i sig selv.
>> Så lad os faktisk prøve at nu drille hinanden, hvad vi kan gøre
med disse grundlæggende byggesten til at gøre mere og mere
interessante programmer.
Så vi har skrevet et program, har vi kørt et program.
Nu kan vi faktisk forenkle og ikke længere behøver at skrive
Ordet klang ved prompten.
Det viser sig som vores programmer får mere kryptisk, vi kan, eller
mere kompleks snarere, kan vi faktisk køre denne kommando.
Så lad mig vende tilbage til mit hjem bibliotek, så at sige, så lad mig
fjerne - rm er den fjernelseskommando - jeg kommer til at fjerne
filen hedder a.out og goddag.
Og nu mærke i en kommandolinje miljø, meget gerne i
en GUI, får du bedt om det. Jeg kan ikke klikke på en knap selvom, jeg
nødt til at skrive y for ja, y for ja.
Og nu, hvis jeg skriver ls igen, meddelelse om, at de grønne
programmer - a.out og goddag -
er væk.
Pas rm.
Det kan gøre dårlige ting, ligesom du kan ved at trække
ting til din papirkurv.
>> Så lad os nu gå videre - og jeg kunne gøre dette - klang-o
hej, hej -
Jeg er allerede keder skrive denne kommando.
Selvom jeg har skrevet det lidt hurtigt.
Så vi kan i stedet gøre gøre hej.
Så gør ikke en compiler.
Det er bare et venligt program, der kommer med Linux, i dette
sag - operativsystemet -
der automatiserer processen med udarbejdelse af programmer.
Så i stedet for at huske klang-o filnavn og
så så videre, især når disse linjer bliver længere og
længere tid, kan jeg bare skrive lave.
Og det kommer til at spytte ud en hel masse ting, som
vil vi til sidst se dette semester.
Men bemærk nu, hvis I type LS, hej er tilbage i mit bibliotek.
Og ja, jeg kan køre det med. / Hej.
Så gør bare automatiserer processen med at køre, hvad der var,
i dette tilfælde en meget længere, mere komplekse kommando.
Så vi kommer til at begynde at bruge mærke, bare fordi det er en meget
mere brugervenlige.
>> Men lad os nu lave en mere interessant program
end bare sige hej.
Så i de programmer, vi har skrevet hidtil er der main.
Det er bare den standard ting, der sparker alt off.
Men der er andre funktioner derude så godt, og
stdio.h er den ting, som vi så på toppen af ​​vores
fil før, og det er hvad der er kendt som standard biblioteket.
Inde i standard biblioteket er en hel masse funktioner
at en anden skrev, og vi kan begynde at bruge disse
funktioner til at skrive mere
interessante programmer os selv.
>> Så lad mig gå tilbage til apparatet.
Jeg har tænkt mig at lukke denne terminal vindue.
Jeg har tænkt mig at lukke de ting, vi skrev tidligere, og bare gå
i hello.c, mærke og nu kan jeg gøre følgende.
Hej Verden er ikke så interessant, jeg gerne vil
personliggøre dette program for mig selv.
Så i stedet for at sige verden, vil jeg
gå videre og sige -
Jeg kunne skrive David - men dette er virkelig slags
grundlæggende de samme.
Men lad os prøve denne pladsholder idé.
Minde om, at i C, snarere i printf, havde vi disse
pladsholdere, og der er mere end bare% d.
Så% d var hurtig tilregnelighed check.
Okay, decimaltal, det er det.
Decimaler, det er alt.
Så% c, som vi vil møde, vil være et tegn.
Put en karakter her, et brev A til Z,
eller tegnsætning symbol.
Et enkelt tegn,% f, nogen kender fra andre sprog?
Så en kommatalsværdi.
Et reelt tal.
Så ikke et decimaltal - det er faktisk et reelt tal med
et komma, og nogle flere cifre til venstre
og højre for den.
% S, streng.
At man vi kommer til at se ganske ofte.
En streng, igen, er bare et ord, en sætning, en sekvens af
individuelle karakterer.
Og endelig, LLD?
Så dette er mere af et hjørne sag.
Lang, lang decimal.
Så hvis du ønsker ikke bare et nummer, der er så store, du
ønsker en større tal, er du nødt til at specificere til
den computer, den er af en bestemt størrelse.
>> Så lad os nappe dette en lille smule.
I stedet for bare hårdt kode i David, lad mig lidt
dynamisk sige% s.
Så læg% s her, hvilket er en pladsholder for en streng.
Så lad mig gøre komma, og derefter "David" herovre.
Nu er det er ikke alt, intellektuelt interessant,
fordi alt hvad jeg har gjort nu virkelig skabe mere arbejde for
computeren.
Snarere end at fortælle computeren gøre det hele på én gang, er jeg nu
siger, at gøre dette og indsætte en streng her til sidst, komma,
her er, at streng.
Så dette er ikke en bedre forbedring, men det er mindst
et skridt i retning af et mere interessant program.
Fordi nu, lad mig gå videre og gøre dette vindue lidt
større, lad mig gå videre og køre make goddag.
Og nu. / A.out virker ikke, hvorfor?
Okay, nu er det hedder hello.
Så igen gøre, og også Klang med a-o, omdøbt til
program til at være noget mere interessant.
Og voila: nu er det siger Hej David.
>> Okay, stadig en dum program.
Så lad os nu rent faktisk gå tilbage her og indføre begrebet
af en variabel.
Ville det ikke være rart, hvis jeg kunne erklære en variabel
hvis type er streng?
Og variablens værdi faktisk kommer fra brugeren
ham eller hende selv.
Så vilkårligt, jeg vil ringe til min variable s, hvilket er
blot et fælles konvention, når du har en variabel kaldet
strengen.
Jeg har tænkt mig at gøre lighedstegnet, og så jeg har tænkt mig at kalde en
funktion kaldet GetString.
Så GetString er ikke noget, der kommer indbygget i C. Det er
en funktion, som den CS50 personale skrev, virkelig bare for
disse første par uger, for at forenkle processen med
få brugerinput og få brugerinput i form
af strygere, eller tal, og sådan.
Så GetString er ligesom printf, men naturligvis i stedet
udskrive det kommer til at gøre, hvad navnet siger, få en streng.
Men for at bruge GetString, vi nødt til at foretage en ændring
her, ud over dette.
Så intuitivt, dette program, forhåbentlig, vil en eller anden måde
få en snor fra brugeren, og derefter hvad det kommer til at gøre
med denne streng, kaldet s?
Det er bare at udskrive det, ikke?
Stadig ikke et stimulerende program, fordi alt det går
at gøre, er plug i denne værdi i, hvor% s
siger, at det skal gå.
>> Så lad os i det mindste se det i aktion.
Lad mig spare og zoome ud.
Nu i min terminal vinduet ned her, den lille skive af en,
Lad mig igen gøre gøre hej.
Okay, og ah, damn, jeg fik en hel masse fejl.
Lad mig rulle op, og vi ser vores første -
så lad os rent faktisk gør dette i et endnu større vindue, så du
kan se, hvor dårligt jeg skruet op -
så gør hej.
Okay, det er en katastrofe, ikke?
Jeg har skrevet tre linjer kode, og
det har givet mig 12 fejl.
Så hvorfor er dette?
Så heldigvis ofte når du ser mange, mange fejl
spytte ud på én gang, det er virkelig bare fordi du har
forvirret computeren op her.
Og det er fortsat forvirret over den tid, det kommer ned her.
Og så er det bare begynder at snuble, og snublende, og
spytte ud mere skræmmende ting end rent faktisk gælder.
Så generelt starte altid med den øverste.
>> Så selve toppen mest forekomst af rød,
fejlmeddelelse er dette.
Anvendelse af sort identifikator streng, jeg
betyde standard i?
Jeg gjorde ikke.
Jeg mente snor, men det er fordi, også ordet streng
at jeg fortsætte med at bruge verbalt faktisk
findes ikke i C enten.
Det er noget, vi vil bruge bare for den første uge eller to
her, men det findes i en fil kaldet cs50.h.
Så for nu, ved, at der er denne anden bibliotek at
Personalet skrev, så det er blevet skrevet senere end
stdio.h.
Men inde i cs50.h er en definition, et synonym for
sorterer, der skaber dette ord streng.
>> Så nu lad mig vende tilbage til mit terminalvindue.
Jeg har tænkt mig at rydde hele denne rod ved Ctrl-L. Vi vil bare
Tør alt ren, og jeg har tænkt mig at gå videre og gøre
hej igen, Enter.
Så hvad der er sket nu?
Nu er alle disse fejl gik bort.
Så hvad har jeg virkelig gjort?
Jeg har lige lært den computer, strengen eksisterer, og det er
i denne fil kaldet cs50.h.
Så stoppe klager, fordi nu ved du hvor du kan finde
denne funktion erklæring så at sige.
Hvor der findes i verden.
>> Så nu vil jeg gå videre og køre goddag.
Jeg synes at have en uendelig løkke, intet sker.
Så jeg er nødt til at skrive noget her, lige.
Den første linje kode i mit program var GetString.
Så det er bogstaveligt venter for mig at få en streng.
Så i den forstand ja, det er en uendelig løkke.
Tilsyneladende i GetString er standard opførsel, som vi
skrev - personale -
der bare siger vente og vente og vente og vente og vente,
indtil brugeren giver dig en streng ved at skrive noget i.
Så lad mig gå videre og skriv D-a-v - i-d, Enter.
Og der er det, hej David.
>> Nu betyder det synes som om det er bare en handling?
Lad mig gå videre og skrive Tommy.
Indtast, okay, synes at virke.
Værker for Rob, arbejder for Zamyla, arbejder for - okay.
Så det kommer til at arbejde, mest sandsynligt.
Så det burde udskrive hvad vi faktisk give det,
og vi kan være lidt svært her.
Lad os se, om vi gør noget som hej.
Kan gå over her, lad os se, kopier, indsæt.
Jeg har ikke tænkt mig at være i stand til at indsætte, at mange gange her.
Sæt ind, okay, Shift + Ctrl + V. Så hvad kunne
ske, det er slemt her?
>> Okay, så, segfault'er.
Så nogle af jer med tidligere baggrunde vil vide, at
generelt, hvilket giver computere masser af input, når de er
sandsynligvis ikke ment til at modtage lange navne som dette - dårlige
ting sker.
Faktisk i verden af ​​internettet, også dette sker ganske lidt,
hvorved, når du designer en hjemmeside, når du er
designe Facebook, er du nødt til at foretage vilkårlige beslutninger op
front, ligesom hvor længe vil en persons
Facebook brugernavn være?
Eller hvor længe vil en persons fornavn være?
Hvor længe vil nogen telefonnummer være og lignende.
Og hvis programmører lave dårlige forudsætninger, programmer bryder
fordi du prøver at give dem mere output, mere input
snarere end de har hukommelse.
Eller RAM afsat til det, og så hvis nu jeg trykker på Enter,
dette program faktisk arbejdede, fordi vi var på biblioteket
og vi faktisk forventet dette særlige tilfælde.
Men uden tvivl dette semester, vil du skrive mindst en
program, der vil sige disse ord.
Husk dette uger fra nu, måske to dage fra nu.
Segmenteringsfejl er en dårlig ting.
Det vil henvise til din gør noget, som computeren
ikke foregribe.
Og i så fald, du som programmør, ikke foregribe.
Meget gerne, hvad denne bunke af sokker, der var forskellige
hjørne sager vi kunne have mødt.
Tilsvarende i programmer, hvis du ikke foregribe hvor lang er
en persons navn kommer til at være.
Eller hvad hvis jeg har en ondsindet bruger, og hans eller hendes navn er
faktisk temmelig kort, men de prøver bare
at rode med mig?
Hvad kommer til at være adfærd mit program?
Tja, i dette tilfælde, kan noget faktisk ned.
>> Så lad os gøre det.
I 90 minutter, er det en forfærdelig lang tid
at gøre datalogi.
Hvorfor vi ikke komme ind i vane med at tage en fem minutters
pause her, og når vi kommer tilbage, vil vi dykke ned i nogle
mere komplekse og overbevisende programmer?
Fem minutter.
>> Ok.
Så en hurtig kommentar.
Jeg får at vide, at selv om det var på skærmen før, hvad
kom ud af min mund var cs50.net/rsvp.
Det er korrekt. cs50.net/lunch.
Så nu kan du prøve RSVPing for dette på / frokost.
Men lad os gøre det nu.
Så det har været super hurtig, super nyt for en masse folk.
Gammel hat for nogle folk.
Så lad os spole tilbage for bare et øjeblik, og se, hvordan vi kom til
denne hello verden output bare for et øjeblik siden.
>> Så det første, der er denne CS50 Appliance.
Igen stykke software, problem sæt 1 kommer til at fortælle
dig, hvordan du henter den, hvor man kan hente det, hvad man skal klikke på
og så videre.
Og så når du følger disse instruktioner, vil du være i stand
at maksimere dit vindue, og din Mac eller PC vil se en
lidt noget som dette.
En sort baggrund, en hjemmemappe øverst, hvor alle
dine filer gå, en skraldespand øverst til venstre,
en menu i bunden.
Så igen, temmelig ens i ånden til Mac OS eller Windows,
selv om det sker for at være Linux.
Så hvad gjorde vi næste gøre?
Nå, vi startede med at skrive programmer.
Og husker fra sidste uge, at alt det tager at skrive en
program er en simpel teksteditor,
som Notesblok eller TextEdit.
Helt ærligt, kan du endda bruge Microsoft Word.
Men dårlige ting i sidste ende vil ske, fordi det er en meget
hårdhændet løsning til at skrive et program, plus det vil
gemme det i den forkerte filformat.
Men det er bare en tekst editor, et tekstbehandlingsprogram, er alt, hvad der er
nødvendig for at skrive et program.
>> Så i CS50 Appliance, kan vi gøre dette i en enkel måde.
Vi kan blot klikke på dette ikon nederst til venstre.
Og igen, problem sæt 1 vil rådgive dig om dette, og voila -
du får denne sorte og hvide brugergrænseflade, hvor vi kan begynde
skrive kode.
Så lad os begynde at skrive et super simpelt program igen.
Jeg har tænkt mig at gå op til Fil, Gem, og jeg har tænkt mig at kalde
dette, lad os sige, hello2.c.
Og jeg bare at fortælle det ved at klikke på jharvard, det sat
i sit hjem bibliotek, kan jeg ikke rigtig pleje
hvor denne ene går.
Og derefter Gem.
Og nu kan jeg begynde at skrive mit program.
Og jeg husker fra tidligere, at jeg er nødt til at skrive int
main (void).
Zoom ind på øverst til venstre.
Og så vil jeg sige printf, tage to.
Og nu en ny linje, tæt tilbud, lukke
parenteser, semikolon.
Og så går jeg ned her til min terminal vindue, der er
indlejret i gedit, bare for nemheds skyld.
Og jeg har tænkt mig at gå videre og skrive gøre goddag, men ikke
hej alene, hello2.
>> Så min fil hedder hello2.c. Min fil derfor
bør kaldes hello2 i dette tilfælde.
For helvede, hvad gjorde jeg forkert?
Okay, så jeg helt klart udeladt en linje, hvis du huske, hvad
tidligere programmer se ud.
Men lad os se om vi ikke kan drille dette fra hinanden.
Desværre er de fleste mennesker, der skriver de programmer, som
vi skriver programmer ikke forenkle tingene så godt.
Så vi er nødt til at slags skimme over hvad der ikke helt gøre
fornemmer her, og se om vi kan finde ud af hvad der er galt.
Den allerførste linje der siger implicit erklære C
biblioteksfunktionen printf med type int.
OK, jeg forstod en del af det.
Men det synes at være hentyder til det faktum, at jeg brugte printf
forkert, eller anden måde.
Og hvilken forstand er det forkert?
Jeg vidste bare ikke lære den computer, det er i en fil
kaldet stdio.h.
Nu har jeg kun skal bare huske nu, at printf er
i stdio.h, og faktisk der vil være andre
funktioner i samme fil, som vi vænne os til.
>> Så nu lad mig gå videre og bruge Ctrl + L for bare klart, at
væk, køre lave hello2, og voila.
Og denne kommando igen, mere kompleks, end vi vil forklare om
dag formål.
Men det kørte klang, og klang tager kildekode og
spytter 0'er og 1'ere.
Og de 0'er og 1-taller i dette tilfælde kaldes hvad?
Okay, objektkoden.
Og den fil, de er i kaldes, så,
hello2 i dette tilfælde.
Fordi min tekstfil var hello2.c, Enter.
Og nu har jeg tage to udråbstegn, udråbstegn
punkt, udråbstegn.
Okay, så vi har nu evnen til at få strenge,
tilsyneladende.
Nå, hvad kan vi ellers får fra brugere?
>> Godt i CS50 biblioteket, er der andre funktioner,
kommer til at forenkle vores liv i disse første par dage.
Getchar, GetDouble, GetFloat, GetInt,
GetLongLong, GetString.
Nå, lad os plukke ud den nemmeste af disse først.
GetString bogstaveligt gør det.
Det sidder bare og venter på, at brugeren indtaster noget i,
og så snart jeg skriver noget i og trykker på Enter, det
gør noget med den værdi.
Så lad os gå tilbage til dette eksempel for at se, præcis hvad
GetString gjorde.
Lad mig gå videre og åbne op i gedit, hello.c, og genkalde
denne ret inden pausen, er dette, hvor vi slap.
>> Så lad os nu drille dette fra hinanden i en lidt mere detaljeret.
Så på linie 6, er der to ting
sker i øjeblikket.
Lighedstegnet adskille første halvdel og anden halvdel.
Så på den venstre side af lighedstegnet er vi
sige streng s.
Og så bare lægmandssprog, hvad er streng s
gøre, tror du?
Det skaber en hvad?
Så det er at skabe en streng ved navn s.
Nu, hvad betyder det egentlig?
Nå, det reservere plads til en streng kaldet s.
Det er ikke helt rigtigt.
Hvad er dette gør?
Well computere, som du kender, har harddiske, det er, hvor
dine filer er gemt.
Computere har RAM, og det er her programmer er indlæst
mens de kører.
Så når du dobbeltklikker på et ikon, og Microsoft Word åbner
op, er Microsoft Word kører, så at sige, i RAM, hvilket er
den elektroniske del af din computer.
Ikke de fysiske, mekaniske del, der er spinding, hvor
data opbevares generelt lang sigt.
Så string s er temmelig meget at fortælle computeren giver mig
nok RAM til at passe en snor.
Nu, er lidt af en oversimplificering, fordi
Hvor stort er strengen vil blive?
Jamen vi faktisk ikke kender endnu, så i de kommende uger
vi vil faktisk trække sig tilbage det lag, der er streng og
vi vil fortælle dig hvad det egentlig er.
String, for nu, er blot en nice forenkling af vores verden.
Men string s erklærer en streng kaldet s, for nu.
Erklærer en streng.
Det forbeholder nogle plads i RAM efter strengen brugeren er
om at skrive.
>> Lad os nu se på højre side af lighedstegnet.
Så det siger GetString ().
Og lidt tilregnelighed check.
Den omstændighed, at der ikke er noget i parentes
indebærer hvad GetString?
Det tager ingen argumenter.
Det vil sige, kan du ikke påvirke dens adfærd på nogen måde.
Hver gang du bruger det, vil det få en streng og det er det.
I modsætning hertil printf forhåbentlig sin opførsel gør
ændre hver gang.
Ellers er det en temmelig ubrugelig udskrivning funktion, hvis
det gør det samme.
Hvis det altid udskriver David eller noget
vilkårlige hele tiden.
Så printf giver mening at have et argument.
GetString ikke virkelig har brug for et argument, fordi jeg gerne ville
at få en snor fra brugeren, og det er den bruger, der kommer
at levere den dynamik ved at skrive i forskellige breve
hver gang på tastaturet.
>> Så hvad gør GetString gør i sidste ende?
Tænk på det som denne lille sorte boks.
Og denne sorte boks tager ingen input, men når du bang på
det, det spytter en streng, som brugeren har indtastet i.
Og det faktum, at der er et lighedstegn der betyder tage
hvad der er spytte ud til højre og opbevares inde
hvad der er til venstre.
Så lighedstegn her, er det faktisk ikke betyder
ligestilling, det snarere er teknisk betyder opgave.
Tag værdien til højre, og sætte det i
variabel til venstre.
Så det er alt, hvad der sker der.
>> Nu i linje 7, vi kalder printf.
Så printf forhåbentlig bliver lidt kedeligt nu.
Så udskrive en formateret streng.
Hvilken snor?
Udskrive, "h-e-l-l-o,% s
! \ N ".
Okay, så hvad ønsker jeg at plug-in for% s?
Bogstaveligt, uanset hvilken gemt i s.
Så i dette tilfælde, lille tilregnelighed check, hvor mange argumenter gør
printf tage?
Okay, jeg har hørt en.
Jeg hørte en gang.
To, jeg hørte to.
Og hvad med tre?
Okay, tre?
Excellent.
Tre mulige svar, kun en af ​​dem er korrekt.
Så argumenter igen påvirke adfærden hos en funktion.
Før i tiden har printf kun tage ét argument.
"Hej verden" var et enkelt argument.
Men nu, mærke hvor dette komma er.
Denne komma er uden for citat / citat slut, hvilket betyder
hey printf, her kommer et andet argument.
>> Så kommaer i de fleste programmeringssprog
adskil flere argumenter.
Så svaret her er bestemt ikke en, fordi
der er denne komma.
Så minimalt, er printf tilsyneladende tage to
argumenter denne gang.
Men muligheden for et trick spørgsmål her er, hvad
om denne komma?
Betyder det, at der er faktisk tre argumenter?
Det er denne, og dette.
Så nej, fordi det komma er inde i de citater, som
betyder, at det er egentlig bare en æstetisk på engelsk.
Det har intet at gøre med antallet af
argumenter i dette program.
Så dette komma er uden for de dobbelte anførselstegn.
Og derefter vende tilbage 0.
For lad os nu bare slags tage denne ene på tro for
i dag, og bare vide, at når funktioner er færdig fuldbyrdende
linjer kode, bør de generelt returnere en vis værdi.
I dette tilfælde, fordi bare main skal returnere en int,
det er bare den måde sproget C fungerer.
>> Så fordi intet gik galt, føles dette programs
fint, jeg bare hårdt kodet til gengæld 0.
Men i modsætning, og jeg har tænkt mig at skrive dette i pseudokode
nu, ligesom Joseph gjorde, da vi gjorde sokken
eksempel i sidste uge.
Hvis noget gik galt - det er ikke faktiske kode - gik
forkert, derefter vende tilbage, lad os sige, 1.
Else returnere 0.
Så dette er hvor vi skal hen med dette.
Dette er ikke egentlige C-kode, bare pseudokode.
Men dette er, hvordan du kan vende tilbage
forskellige værdier.
Men for nu er jeg bare tænkt mig at gå videre og returnere 0.
Okay, nogen spørgsmål hidtil på syntaks, funktionalitet,
eller lignende?
Ja, i ryggen.
>> PUBLIKUM: [uhørligt]
DAVID Malan: Kan du tale lidt højere?
Hvorfor gjorde dette program return 0, og?
PUBLIKUM: [uhørligt]
DAVID Malan: Åh, det er fordi jeg fik doven, sorry.
Ingen god akademisk svar, returnerer 0.
Jeg kan slags bjærgning dette, ved at sige teknisk C, hvis vigtigste
ikke udtrykkeligt returnere en værdi, vil 0 blive returneret
automatisk for dig.
Hvilket er sandt, jeg ikke bare dækker op.
Men skulle jeg have gjort det på denne måde.
Ingen interessant takeaway end at andre end min fejl.
Ja?
>> PUBLIKUM: Normalt når du skriver i tomrum, som betyder, at du
returnerer ikke noget.
DAVID Malan: Korrekt.
Hvis man i stedet kan du angive før navnet på en funktion,
eksempel her, ugyldig, så funktionen
ikke vender tilbage noget.
Og derfor vil jeg bare sige, afkast eller slet ingenting,
og det ville være konsekvent.
Og vi vil komme tilbage til.
Og bare FYI, en af ​​de fangster med indlæringsvanskeligheder
programmering i en verden, der har hundredvis af bøger og
hundredvis af hjemmesider derude er, du vil uvægerligt
se anden syntaks i forskellige bøger
af forskellige mennesker.
Indse at vi vil gøre vores bedste i sektioner og foredrag for at være
sammenhængende.
Men nogle gange vil du se modstridende syntaks.
Så hver gang i tvivl, så spørg.
Og generelt, vil vi passe på foredrag og sektioner til
næsten altid præsentere det på den rigtige måde.
Og jeg siger næsten altid, fordi sag.
Andre spørgsmål?
>> PUBLIKUM: Er% s eksisterer udenfor apparatet?
DAVID Malan: Er% s eksisterer udenfor apparatet?
Ja.
Så% s har at gøre med C. Det faktum, at vi bruger det i
apparatet fundamentalt har intet at gøre med den
funktioner i det sprog, vi bruger.
Faktisk sidste uge, da vi brugte min Mac, jeg skrev
C-kode på min Mac.
Jeg kunne have brugt% s på min Mac, og du kan bruge det på
din Windows-computer, hvis du installerer en compiler, ligesom
Visual Studio fra Microsoft.
Så% s.
Alt, hvad vi laver inde i dette vindue i dag har til
gøre med C. Og grundlæggende intet at gøre med den
operativsystem i spørgsmålet.
Derimod den sorte og hvide terminalvindue - når
Jeg skriver ting som ls, og rm, og cd -
der har at gøre med operativsystemet og
navigere rundt.
Yeah.
PUBLIKUM: Jeg mente biblioteket, CS50 biblioteket.
DAVID Malan: Okay, så hvis du mener søgeordet streng, at
kun findes i CS50 biblioteket, korrekt.
Det eksisterer ikke i C selv, og faktisk i et par
uger vil vi smide CS50 bibliotek og starte
gøre tingene fra bunden selv, så at sige.
Andre spørgsmål?
Yeah.
>> PUBLIKUM: [uhørligt]
DAVID Malan: Godt spørgsmål.
Er det kommandoer små bogstaver?
Og lad mig gøre en forskel her.
Så kommandoer er generelt de ting, vi skal skrive på
nederst i vinduet, i terminalvinduet.
Alt op her ville være erklæringer eller C-kode.
Men i begge tilfælde er svaret det samme, ja.
Begge disse miljøer, C-kode øverst og
operativsystem kommandolinje på
bund, store og små bogstaver.
Så du skal udnytte GetString med stort G,
kapital S. Du skal skrive printf i alle små bogstaver.
Du skal skrive ls i alle små bogstaver.
Så i næsten enhver situation dette semester, sag vil i
Faktisk stof.
Ja.
>> PUBLIKUM: [uhørligt]
DAVID Malan: Ah, så okay, hvad nu hvis vi havde en fil
kaldet hello.d.
Så viser det sig, D er et programmeringssprog.
Og så i nogle tilfælde kan vi faktisk skrive et program i
denne fil og har det kompileret på denne måde.
Vi kan, og faktisk, korte svar er, ved jeg ikke.
Så vi vil gøre dette.
Lad mig gå videre og oprette en ny fil.
Og spin her, ærligt i almindelighed, er når nogen tvivl
dette semester, og du har din apparat eller computer
åbne, gå videre og prøve noget.
Så jeg har tænkt mig at gemme en fil kaldet hello.d.
Gem dette.
Og jeg har tænkt mig at køre make hej Enter.
Det syntes at antyde, at AC var mere sandsynligt
end d,. i dette tilfælde
Andre spørgsmål.
Yeah.
>> PUBLIKUM: [uhørligt]
DAVID Malan: Okay, siger, at en gang mere.
PUBLIKUM: [uhørligt]
DAVID Malan: Hvordan ville du gå om diagnosticering dette eller
fejlfinding det?
Så mest sandsynligt, fordi de er forskellige sprog,
mest sandsynligt du ville få en helt
anderledes program udsendes.
Du ville få helt forskellige fejlmeddelelser.
Og også bare med hensyn til design, ville det nok være en
dårligt design afgørelse, der skal skrive to forskellige
sprog med næsten identisk navngivne filer, i
nøjagtig samme bibliotek ved hjælp af en
automatisk værktøj som gør.
Så jeg kan også skubbe tilbage og sige i 15 år at gøre dette,
aldrig lavet den fejl.
Kunne ske.
Men der er bare forskellige, tror jeg,
logistiske forsvar på plads.
Plus de fejlmeddelelser, der vil følge, ville
til sidst afsløre, hvad problemet er.
Men en mulig hjørne tilfælde.
>> Okay, så lad os indføre bare et par andre
funktioner her nu, så vi kan begynde at bygge op i mere
og mere komplekst program.
Så først og fremmest, matematik.
Så matematiske eksempler er bare lidt let i den første uge.
Dette er ikke til at sige, at al programmering handler om
matematik.
Bestemt, forstå forskellige funktioner i
matematik, algebra i særdeleshed er
helt relevant her.
I højere niveau CS klasser, lineær algebra,
calculus og lignende.
Men indse det meste af, hvad vi vil gøre dette semester reducerer ikke
til matematik, og slet ikke til aritmetik, per se, men virkelig
til bare logik og omhyggelig tænkning.
Og så denne kobling, at datalogi længe har haft,
især på high school niveau, med matematik, er en
lidt vildledende.
Fordi de fleste af de programmer, vi vil skrive, virkelig er
slags højere niveau og fokusere på at løse problemer, som,
sikker, kan bruge nogle addition, subtraktion, og forskellige
matematiske formler eller lignende,
men i slutningen af ​​dagen, er det om at tænke og ikke
bare at gennemføre, hvad man kunne have gjort på som en TI
lommeregner i gymnasiet.
>> Så med det sagt, lad os nu gøre noget med disse
matematiske operatorer, der findes, så vi kan rejse
over nogle af de underliggende aspekter af programmeringen, eller i
dette tilfælde C. Så der er, som det CS50 biblioteket foreslået,
og i dag er vi kun bruger GetString - og i et øjeblik
måske en anden funktion -
men der er forskellige datatyper i en computer.
I slutningen af ​​dagen, kun computere kender 0'er og 1'ere.
Men huske på, at i sidste uge talte vi om det binære system
i at repræsentere tal, ligesom tallet 0 og 1 og 2,
hele vejen på op til 8, som i Nates video.
Og så kan vi tælle langt højere, da vi
gjorde på scenen her.
Men hvis du ønsker at repræsentere ikke bare tal, men bogstaver,
vi, mennesker, er nødt til at komme med nogle vilkårlige
konventioner, idet såfremt slutningen af ​​dagen al min computer
har, er evnen til at udtrykke 0'er og 1-taller, godt vi hellere
begynde at standardisere mønstre af 0'er og 1'ere, der repræsenterer
forskellige ting.
Et mønster af 0'er og 1-taller, der repræsenterer bogstavet a.
Mønstre af 0'er og 1-taller, der repræsenterer bogstavet z.
Mønstre af 0'er og 1-taller, der repræsenterer farven blå, eller
rød, eller lignende.
Vi er nødt til at bruge alle disse 0'er og 1-taller at udtrykke os i
forskellige sammenhænge, ​​på forskellige måder, der ikke er
nødvendigvis numerisk.
>> Så med hensyn til repræsentation, har C forskellige datatyper,
og vi har set en af ​​disse hidtil.
Vi så int, og læg mærke til hvad der ikke er på skærmen
lige nu er streng.
String ikke i virkeligheden, findes i C. Igen, det er en
forenkling vi præsenterer for første
par uger.
En char er en individuel karakter.
En flyder er et reelt tal, med et komma og numre til
venstre og højre for den.
En dobbelt er hvad, for dem med tilbage til før baggrund?
Så en dobbelt er to gange noget.
Tilføjer dobbelt så meget præcision.
Så hvad betyder dette?
Så i hvert af disse tilfælde har verdens slags standardiseret
hvor mange bit til at repræsentere
hver af disse ting.
Så hvis du har set Nates ASCII video, der allerede for en del
af Pset 0 eller senere i denne uge, vil du, vil du sandsynligvis vide
at ASCII -
karakter repræsentationer -
bruge hvor mange bits?
Og du kan endda huske fra vores demo i sidste uge om, hvordan
mange mennesker var på scenen.
Så 7 eller 8, typisk.
Så generelt 8, og der er noget, der hedder som forlænget
ASCII, der bruger alle 8 bit, i stedet for 7.
Men generelt taler vi i potenser af 2, så i dette tilfælde, 8.
Så en char i et programmeringssprog er normalt 8 bit.
Så en int er generelt 32 bits.
En flyder er generelt 32 bits.
En dobbelt er generelt 64 bits.
Og hvad betyder det?
Det betyder, at du kan repræsentere større tal, eller i tilfælde
af reelle tal, kan du få en masse flere numre efter
decimal.
En masse mere præcision, i dette tilfælde.
Nu er en lang lang er desværre navngivet.
Så der er en int, som er 32 bit.
Der er en lang som, nej, 32 bits.
Og en lang lang som er 64 bits.
Men nogle af dem er kontekstafhængige, det afhænger
hvilken type computer du har.
Så generelt, vil vi angiver i en hjemmearbejde eller i en quiz, hvor
det faktisk betyder noget.
Men pointen er at der er alle disse forskellige
repræsentationer her.
>> Så lad os faktisk dykke ned i et program.
Snarere end at skrive denne ene fra bunden, lad mig gå videre
og åbne op fra dagens kildekode - som alle er
online - hvis du ønsker at pille rundt på nettet, eller afkast af
Onsdag med apparatet på din computer, instruktion
for der skal forbinde på kursets hjemmeside.
Her er et super simpelt program.
Men det har fået lidt noget nyt i toppen, at
vi ikke havde før.
En hel masse blå linjer tekst.
Så disse blå linier repræsenterer kommentarer.
Så det er ganske nyttigt i et program for at kunne skrive
nogle kommentarer til dig selv, eller til kolleger eller venner, eller
undervisning stipendiater, den slags beskrive, hvad der sker i
denne fil, men har intet at gøre med C-kode selv.
Intet at gøre med det program, funktionelt, det er bare
æstetik.
Så den måde du gør dette i C er du generelt starte din
kommentarer med / *, og du ender dine kommentarer med
* /.
Og hvis du virkelig anal og gerne henlede slags billeder,
så du ville lægge en hel masse stjerner, ville du lave en
lille boks som denne.
Men intet af dette spørgsmål.
Det eneste, der betyder noget, er den allerførste
og den allersidste.
Dette er, hvad der kaldes en multi-line kommentar.
Og det er bare menneskelig konvention til ofte gøre stjernerne og kasse
ting i som dette, hvis du har en masse fritid.
>> Så efter du har skrevet i nogle kommentarer, generelt kommer
de faktiske tarme af programmet.
Her er vores velkendte # include .
Og netop hurtig, dette er nødvendigt eller ikke er nødvendig?
PUBLIKUM: Nødvendig.
DAVID Malan: Så det er faktisk ikke nødvendigt.
Så hvorfor dog er det ikke nødvendigt?
Så der er ingen printf.
Indeed.
Alt, hvad vi laver i dette program er matematik.
Så jeg kan faktisk slette det.
Så du behøver ikke altid at inkludere noget
toppen af ​​et program.
>> Så lad os forenkle det en smule.
Og nu mærke til, hvad dette program gør.
Ikke meget af interesse.
int x = 1.
Nå, hvad er dette gør?
Nå, tænker tilbage til den mentale model fra før.
Den venstre side af dette udtryk gør hvad?
Give plads til et heltal.
Så hvor meget plads?
Tja, vi tilfældigvis ved nu, at det er 32 bit.
Tidligere en streng var teknisk 32 bit, men mere
om det i fremtiden.
Men en int er 32 bit.
Så dette udtryk til venstre her, x bare int siger hey
operativsystem, giv mig 32 bit RAM -
ellers kendt som 4 byte RAM -
så jeg kan sætte et heltal i dette rum.
Hvad heltal har du ønsker at sætte?
Nå, bare nummer 1.
int y får 2, gør præcis det samme, selv om
antallet er større med hensyn til dets størrelse.
Antallet selv er stadig blot 32 bits.
Det er bare det mønster af bits er anderledes
udgøre 1 versus 2.
int z nu siger give mig en anden 32 bits, kalde det z, og sætte
summation af 1 og 2 derinde.
Så der nu z er formentlig lagre værdien 3,
og derefter vende tilbage 0.
>> Nu er dette program, gør den noget af interesse?
Så det faktisk ikke gør noget interessant under alle
mening, fordi hvorfor? Det laver nogle matematik.
Men det er ikke returnere svaret, højre.
Det tilbage 0.
Det er ikke udskrives svaret.
Så dette program er fundamentalt værdiløs, da det
står nu.
Det gør nogle arbejde.
Det kommer til at tage nogle flere sekunder, eller mikrosekunder, at
køre, men det er faktisk ikke gør noget
anvendelige til mennesker.
>> Så lad os faktisk nu åbne math2, hvor nu er jeg faktisk
udskrivning af resultatet.
Så også dette kan udledes vores tidligere eksempler.
Hvis jeg ønsker at gøre nogle enkle matematik, int x = 1, y
= 2. z er 1 plus 2 nu.
Hvad er dette vil udskrive tydeligvis?
Blot 3.
Så hurtig tilregnelighed check.
Lad mig flytte ind i denne mappe.
Så cd source1m.
Lad mig gå videre og skrive make math2.
Ingen fejlmeddelelser kom ud, så lad mig løbe -
ikke a.out--lad mig løbe math2. Enter.
Og ja, det udskrives 3.
Jamen så lad os tage et kig på en variant af denne.
I math3.c har vi nu dette eksempel her.
>> Så denne ene er lidt interessant.
Så i denne ene her er svaret kommer til at få 1 divideret med 10,
og bemærk jeg har erklæret det som en float.
Hvorfor vil jeg have det til at være en float?
Tja, det er en brøkdel.
Det kommer til at være et reelt tal.
Så det kommer til at være 0,1, forhåbentlig - 10%, i dette tilfælde.
Og hvad gør jeg så gerne udskrive?
Nå, dette svar.
Nå, lad os drille dem fra hinanden først.
Så på den venstre side, erklære en
flyde, kalder det svar.
På højre side, har 1 divideret med 10 og sætte det
answer indersiden af ​​den variable.
Nu, denne linje ser lidt mere kryptisk.
Men læg mærke til nogle velkendte funktioner. % Betyder her kommer en
pladsholder.
f betyder her er en kommatalsværdi, bare en reel
nummer, noget med et komma.
0,2 betyder hvad?
Alle kender fra tidligere erfaring?
To decimaler.
Så vi har ikke set det før, men det er bare en måde at
udøve lidt mere kontrol over printf og
talemåde ikke give mig 30 point efter kommaet,
i stedet give mig bare 2.
>> Og så lad os gå videre og køre dette.
Så gør matematik 3, og lad mig nu køre matematik 3, Enter.
Og det er ikke rigtigt.
Vi synes at have stødt på vores første ægte bug.
Tja, måske er jeg bare ikke ser tæt nok.
Så lad mig gå op her, og lad mig sige 20 decimal
point steder der.
Og lad mig samle dette, skal math3, køre.
Temmelig sikker på 1 divideret med 10 ikke er 0.
Så hvad sker der?
Nå okay, så faktisk det behøver ikke at gøre med dette.
Det er en god tanke.
Dette er egentlig bare en tilfældighed
at vi gør dette.
Men bare for at bevise, at det ikke er det, jeg vil
returnere noget tilfældigt.
Gør ikke dette derhjemme, fordi det er bare forkert.
Men lave math3, lad mig køre den.
Så har intet at gøre med hvad jeg vender tilbage, kun har at gøre
med hvad jeg udskriver.
Men jeg hørte det hernede.
Hvad?
PUBLIKUM: Så vi er nødt til at skrive numrene i
delingen som -
>> DAVID Malan: Okay godt.
Så vi er nødt til at skrive numrene, der deltager i
division her som kommeværdier selv.
Så problemet her er som tidligere: C, med en masse
sprog, har forskellige datatyper.
Og disse datatyper, for eksempel, er disse her.
Og datatyper i spørgsmål her, når jeg skriver 1 og derefter jeg
type 10, er sandsynligvis, hvad datatyper?
Så det er nok en int, right?
Det er bestemt ikke en svømmer fordi der er ingen decimal
punkt eller noget lignende.
Så virkelig, jeg har en int divideret med en int.
>> Så det interessante ting om matematik og en computer er, at
hvis du laver division med heltal -
1 divideret med 10, ja er 0,1.
Men når du dividere et helt tal med et heltal, den
Svaret må også være et heltal bare fordi, for nu.
Og hvad er konsekvenserne så?
Tja, hvis svaret 1 er divideret med 10 er lig med 0,1, hvad
computeren kommer til at gøre, er jeg har ingen idé, hvordan man
repræsentere 0,1, fordi det er en kommatalsværdi, ikke en
integer, det kommer til at hugge alt efter
decimaltegn og bare vise dig 0 i begyndelsen.
Og det faktum, at det er udskrivning som en floating point
værdi, det er bare en æstetisk ting.
Det er fordi jeg tvinge computeren til at udskrive dette som en
decimaltalsværdi.
Og faktisk har jeg erklæret det som en float, men matematik er
sker herovre.
>> Så lad mig faktisk løse dette på en temmelig nem måde.
Hvorfor kan jeg ikke bare gøre 10,0 og 1,0, selv om
teknisk jeg kunne slippe afsted med blot at gøre en af ​​dem.
Lad mig nu gå videre og gøre math3.
Lad mig gå videre og nu køre math3, Enter.
Og nu, oh boy.
Nu har vi et nyt problem helt.
Så bedre, højre, vi er tættere på 0,1, men hvad tydeligvis er
galt her?
Medmindre vi har liggende til dig i mange år, ikke?
1 divideret med 10 er faktisk ikke helt 0,1, så hvad er
virkelig foregår der her?
Nå du kan slags grund gennem denne logisk.
Hvis en computer kun har en begrænset mængde RAM til at begynde
med, og faktisk en computer kun bruger 32 bits til en
decimaltalsværdi, det er indlysende, at med en
endeligt antal bits, 32 i dette tilfælde, ja, du kan
repræsentere en masse ting.
Det faktisk er fire milliarder forskellige værdier kan være
repræsenteret med 32 bits, 2 til 32, men det er stadig begrænset.
Så problemet er der et uendeligt antal reelle
numre, højre.
Hvis du giver mig et reelt tal, kan jeg altid finde dig en
lidt større, lidt mindre, ved blot tweaking
numre, der er efter kommaet.
Så hvis du ikke har et uendeligt antal bit, du
kan umuligt udgøre en uendelig
Antallet af reelle tal.
>> Så der er denne iboende unøjagtighed i computere, og
dette bliver snublede over hele tiden, selv i den simpleste af
programmer som dette.
Men også i nogle meget reelle verdens problemer så godt.
Faktisk, lad os tage et øjeblik til bare tage et kig på
noget, der rent faktisk er sket i virkeligheden.
Vi ser bare de første par minutter, og derefter
vi vil sende linket online.
Men dette er et udtryk for netop hvad der kan gå galt, helt
ærligt, på en meget tragisk måde, når disse ting er ikke
værdsat eller bare vi mennesker laver fejl, når det kommer til
disse former for gennemførelsesdetaljer af moderne computere.
>> [Video spiller]
-Vi vender nu tilbage til tekniske katastrofer på Modern Marvels.
Computere.
Vi har alle kommet til at acceptere de ofte frustrerende problemer
der går med dem.
Bugs, virus og software glitches er små priser til
betale for bekvemmelighed.
Men i high tech og høj hastighed militær og rum
programansøgninger, kan den mindste problemet være
forstørret ind i katastrofen.
Den 4. juni 1996, udarbejdet forskerne at lancere en ubemandet
Ariane 5 raket.
Man gennemførte videnskabelige satellitter, der skal
fastslå præcist, hvordan jordens magnetfelt
interagerer med solvinden.
Raketten blev bygget til Den Europæiske Rumorganisation og
løftes fra sit anlæg på kysten af ​​Fransk Guyana.
>> -På omkring cirka 37 sekunder inde i flyvningen, de først
bemærket noget gik galt, at dyserne var
drejning på en måde, de bør virkelig ikke.
Omkring 40 sekunder inde i flyvningen, klart køretøjet
var i vanskeligheder, og det er når de traf beslutningen om at
ødelægge det.
En række sikkerheds officer med enorme indvolde pressede
knappen, sprængte raket, før det kan blive en
fare for den offentlige sikkerhed.
>> -Det var den jomfrurejse af Ariane 5, og dens
ødelæggelse fandt sted på grund af en fejl indlejret i
rakettens software.
>> -Problemet om Ariane var, at der var et nummer,
kræver 64 bits til at udtrykke og de ønskede at konvertere det
til et 16 bit tal.
De antog, at antallet aldrig var
vil være meget store,
at de fleste af disse cifre i 64 bit nummer var 0'erne.
De var forkert.
>> -Den manglende evne af et software-program til at acceptere
slags tal genereres af et andet var roden til
fejlen.
Softwareudvikling var blevet en meget bekostelig del af
ny teknologi.
Ariane 4 raket havde været meget vellykket.
Så meget af den software, skabt til det blev også brugt
i Ariane 5.
>> -Det grundlæggende problem var, at Ariane 5 var hurtigere,
fremskyndes hurtigere.
Og softwaren havde ikke tegnede sig for det.
>> -Den ødelæggelse af raketten var en enorm økonomisk
katastrofe, alt sammen på grund et minut software fejl.
Men det var ikke første gang, datakonvertering problemer havde
plaget moderne raketteknologi.
>> DAVID Malan: Vi vil lade det blive ved det.
Men dette er et udtryk for, hvor relevant selv nogle af
Disse laveste niveau detaljer, som vi er begyndt at
udforske dag.
Så selv om du får lidt distraheret måske af nogle af
syntaks og arcaneness her, indser, at over
sigt vil vi være fokuseret bare på, hvordan relevant det er at
verdener langt ud over CS.
Vi vil se dig på onsdag.