>> [Glazbom]
DAVID Malan: Pozdrav svima.
Ovo je CS50 je supersection.
Dodijeljeni Sekcije neće start za drugi tjedan.
I tako danas, ovdje sam with--
>> MARIJA: Maria.
DAVID Malan: --to je zapravo pogledajte problema
jedan set, tečaj-a Prvih tjedana materijala,
dobili ste orijentirani s CS50 IDE, malo Linux, operativni sustav koji je
prikazuju na IDE, i pogledajte neke od tranzicije
od nule C vodećih do problema postaviti jednu.
>> Dakle, bez dodatnih teškoća, u problemu postaviti jedan,
ti si idući u biti uveo u CS50 IDE, koji
ovo web-based programiranje okruženje koje koristimo kako bi
pisati programe.
To je osmišljen kako izgledaju vrlo podsjeća na tipične računala
Sustav trčanje operativni Sustav se zove Linux.
Ali to je u tzv oblaka, što znači da svi u razredu
zapravo može imati njegov ili njezin vlastiti račun i koristiti ga kao dobro.
>> Dakle, većina vas vjerojatno nikada imati koristi Linux okruženju prije ili možda
čak i komandne linije okoliš.
I naredbenog retka okolina je drugačija.
To je sve tekstualne.
To je sve tipkovnice naredbe.
I to nije mousing, nema ikone, bez prozora dijalog, nema izbornika.
To je čisto tekst.
Dakle, na prvi, je vrsta osjeća poput koraka
unatrag u smislu sofisticiranost.
Ali to završi kao mnogo snažnije, svakako,
za računalni znanstvenik, u konačnici.
>> Tako ćemo pogledati.
Ovdje sam na CS50.io, preko kojih možete se prijaviti u CS50 IDE.
I baš kao u Scratch, postoji Tri glavna područja na zaslonu.
Dakle, na lijevoj strani, imamo što će biti preglednika datoteka.
I tu je ovu mapu na vrh, što je sada prazna
jer sam dobio osloboditi od svih mojih datoteka prije supersection.
I to je gdje ćemo spremiti C datoteke koje pišemo.
U gornjem desnom kutu, imamo mjesto gdje sve naše koda će dobiti pisani.
I doista, ako ja kliknite ovaj plus, ovaj će neka mi izabrati novu datoteku.
A ovdje mogu početi pisati C koda ili zapravo, bilo koji broj drugih jezika.
>> A onda se na dnu, gdje ga kaže jharvard @ ide50-- i tvoje će
reći nešto malo different-- što je to zove?
Terminal prozor.
Da.
Dakle terminal prozor tzv komandne linije
sučelje putem kojeg možete komunicirati s operacijskom sustavu u podlozi.
A za sada, idemo čine vrlo malo iskoristiti this--
samo sastaviti, pogledati poruke o pogreškama koje smo vidjeli,
i pokrenuti naše programe.
Ali u konačnici, idemo učiniti mnogo više, kao dobro.
A čak možete instalirati softver i administrirati svoj radni prostor
u CS50 IDE, kao dobro.
No, više o tome neki drugi put.
>> Tako ćemo ići naprijed i pisati vrlo jednostavan program jednostavno
proći kroz toplo-up hello.c, što je možda
najjednostavniji program možemo pisati.
Već sam otvorio novu karticu.
Ja ću ići naprijed i kažu uključuju standardni io.h.
Zatim int glavni (prazninu).
A onda printf ("Hello, World" backslash nje, u neposrednoj blizini citat,
zatvoriti zagrade i zarezom.
>> U redu.
Tako sada primijetiti moj prozor bez naslova.
Tako sam vrlo brzo ide ići na File, Save.
I važno je da Zovem to nije "zdravo".
Dakle, vrlo česta pogreška, osobito u problemu postaviti jedno,
je slučajno baš nazvati svoj Program "voda" ili "pohlepni" ili "Mario"
ili "kreditne" ili slično.
Ali vi zapravo želite napraviti jeste li datotečni nastavak
jer je to jedini način da se prevodilac i kod urednika
zna da si zapravo pisanje C kod.
Pa neka mi ići naprijed i kliknite Spremi.
>> A sada, također, ono što CS50 IDE učinio za nas je to isto
sintaksu istaknute sve.
Tako da je napravio sve što je vrlo intenzivan.
A cijela svrha koji nije funkcionalna.
To je samo nacrtati oči na konceptualno različiti dijelovi
ovog programa.
Tako ćemo ići naprijed i sastaviti to.
A ja mogu prevesti ovo u nekoliko načina.
A u tjednu jedan je old-school način smo učinili
bilo je doslovno na Command line-- "zveket hello.c."
A onda sam pritisnite Enter.
I ništa ne čini da se dogodi u prozor terminala.
No, ono što je učinio promjenu u IDE?
Gdje, opet, IDE samo znači Integrated Development Environment.
To je fancy način govoreći: Ovaj integrirani razvoj
okruženje za razvoj softvera.
Pa što je promjenu u sučelju?
Što si primjetiti to je drugačije, Maria?
>> MARIJA: primijetio sam nešto pod IDE50 mapu ovdje.
>> DAVID Malan: Da.
Dakle ovdje, ne samo imamo "hello.c."
Također imamo "a.out", koji je vrsta glupi naziv programa.
Ali, istina, to je zadani naziv za Program kada jednostavno sastaviti svoj kod
i ne reći prevodilac ono datoteke za izlaz.
Dakle, ako želim raditi ovo, trebaju reći compiler--
ili bolje rečeno, moram reći da sam radni prostor
želite pokrenuti program pod nazivom "a.out".
Unesite.
I tu je "Pozdrav, Svijet. "sada" ./ ".
je zapravo važno.
Iako obično mi samo Napiši nazive naredbi,
kada je program ste napisao, ti želiš reći "./"
jer izričito kaže Linux da želite pokrenuti program pod nazivom
"a.out" to je u ovom, gdje točka znači taj direktorij da sam trenutno
u, koji se dogoditi da se zove radni prostor ", a.out.
Jer ako sam samo rekao "a.out" Enter, Idem se "a.out naredbe ne
pronašao "jer computer-- jer sam izmislio "a.out";
što nije došao s computer-- ne znam gdje gledati za to,
iako je u pravu pod nosom, da se tako izrazim.
U REDU.
Tako bismo mogli promijeniti u biti "zveket -o Hello hello.c."
I ako sam pogodio Enter, što program će to izlaz za mene?
Što je naziv datoteke?
Da, u leđa.
Tako je. "Bok."
Dakle, "Hello" će biti naziv programa
jer smo se koristi tzv naredbenog retka argument, koji je samo
način promjene ponašanja prevodilac zapravo izlaz
specifičan naziv datoteke.
I doista, ako ja uvećanje van i pogledati ovdje,
sada imam ne samo "a.out" i "hello.c", ali i "Hello", kao dobro.
Pa sad ja mogu učiniti "./hello," Enter.
I tu je "Hello, World".
Ali lastly-- i to Sada će biti konvencija
koristimo u cijeloj semestar, typically--
je možete samo reći "učiniti pozdrav."
I doista, to je rekao da je spreman do danas, jer već postoji.
Dopustite mi ići naprijed i uklonite s RM naredba, i "a.out" -
i reći "izvadite redovite datoteke a.out?"
To samo znači, da li ste sigurni da želite izbrisati?
Ja ću reći da.
A onda ću ukloniti "Hello", ali ne "hello.c."
Idem reći "da" eksplicitno, ali "y" je dovoljno, kao dobro.
>> A sada primijetiti da sam upišite ls-- koja, podsjetimo,
znači list-- prikazuje sve datoteke u mojoj mapi.
I doista, ako ja uvećanje van i pogledajte gornjem lijevom,
što potvrđuje da je ono što je u ovoj mapi, čak
Iako je označen kao IDE50 ovdje a ne radni prostor, to je samo "hello.c."
Tako sada ovdje, ako sam ne "napraviti Hello," Enter,
sad vidim mnogo dulje naredbu ali sofisticiraniji naredba da se događa
biti koristan u tjednima koji dolaze.
I sada mogu reći "./hello."
>> Tako ćemo uzeti brzi obilazak neki drugi Linux naredbe.
Zašto onda ne bismo uzeti jedan korak natrag i zapravo pogled na C više
Općenito, prijelaz od nule na C, a zatim sklopiti s pogledom
u prvom problemu postaviti u C. U redu.
Tako ću ići naprijed i samo čista moj radni prostor s upravljačke L samo
držati zaslon uredan.
Ali to nema funkcionalni utjecati na neki drugi način.
>> Sjetite se da smo vidjeli nekoliko naredbi sada.
Tako smo vidjeli zveket, koji obično si neće morati izvršiti ručno više.
Umjesto toga ćemo koristiti make.
Ali, mi također vidio ls, što pokazuje popis datoteka u mom imeniku.
A sad zašto je there-- postoje dvije datoteke sada, "Hello" i "hello.c."
Zašto je zvijezda ili Zvjezdica nakon "Hello"?
Što to znači, na temelju na ono što smo vidjeli u tjedan jedan?
Što misliš?
Što je zvijezda znači?
>> MARIJA: For-- programa "Hello"?
DAVID Malan: "Pozdrav *".
Da.
O da?
Oh, izvršna.
Tako je.
Dakle, to znači da je "Hello" je izvršna.
Dakle, istina, to je razlog zašto Ja mogu učiniti "./hello."
U redu.
Dakle, što još mogu učiniti ovdje?
Pa, ispada da mogu Također stvoriti direktorije.
Pa neka mi ići naprijed i stvarati, Na primjer, "pset1" katalog.
A problem postaviti specifikacija će vam učiniti upravo to,
tako da ne morate zapamtiti danas.
No, "mkdir pset1" izgleda da nemaju utjecaj.
Ali opet, ne pojavi poruka je općenito dobra stvar.
Dakle, ako sam tip "ls" now-- Ah, sada Imam izvršnu datoteku pod nazivom
"Hello" C file "hello.c."
A onda je kosa crta, tako da govoriti, znači da je to katalog.
>> Dakle, istina, sada želim ga otvoriti.
I ne dvostruko kliknuti na nju kao u GUI, grafičko okruženje.
I umjesto da kažem "CD pset1."
Unesite.
Ništa zanimljivo izgleda da ima dogodilo, osim mog malog redak
here-- to je Linux je način podsjećajući ja gdje sam ja, pa što mape otvorena.
To je samo mi govori izričito za razliku grafički.
A ako upišete "ls", zašto ne vidim drugi potaknuti odmah misliš,
kad sam popis sadržaja pset1?
MARIJA: Vjerojatno ne ništa u tamo.
DAVID Malan: Da.
Pa onda nemamo očito stvorio sve tamo
jer sam upravo stvorili imenika.
Sada, ako sam želio stvoriti file-- za recimo, ja mogao stvoriti novu datoteku.
A onda mogla sam ići na Spremite i spremite ga kao,
poput: "mario.c" ako radite standardni izdanje pset jednom.
A onda, kao i bilo koji Mac ili PC, samo odaberite mapu "pset1, Spremi.
A sada je datoteka prazna.
Ali neka povećavanje opet za sekundu.
Učinimo LS ovdje.
Sada ćemo vidjeti "mario.c".
>> Dakle, postoji nekoliko drugih naredbi vrijedi imajući na umu tijekom time--
Jasno, ili upravljačke L je ono što sam je udaranje; mkdir smo vidjeli;
rm smo vidjeli, kao i, što je za uklanjanje ili brisanje datoteke.
Čuvajte možete also-- i ako pogledate na online tutoriali, vi ćete rm-rf
je vrlo čest način govoreći izbrisati mapu koja ima stvari u njemu.
Samo biti super, super oprezni.
rf znači rekurzivno izbrisati sve što je
pokušavate izbrisati i silom ga izbrisati.
Dakle rekurzivna znači ako je mapa mapa sa mape s mape,
izbrisati sve njih.
A prisilno znači uopće ne pitajte me da ili ne, ja sam siguran?
Dakle, to je super opasan način brisanje puno stvari brzo.
Ali beware-- prečesto radi neustrašivi Student slučajno izbrisati, recimo, pset
jedan, npr.
>> MARIJA: A ako su samo to -r, oni će
ih pitati o svakoj jednu datoteku.
>> DAVID Malan: Koji je umjereno neugodno.
>> MARIJA: Da.
>> DAVID Malan: Pa zato tako da mnogi od nas, samo su,
sam u naviku korištenja rf.
Ali, to je opasno.
Dakle, kupac biti na oprezu.
A onda MV je vrsta zanimljivo ime.
Dakle, ovo je potez naredba, koji se osjeća malo čudno
jer vi doista možete ga koristiti za premjestiti datoteke s jednog mjesta na drugo.
Na primjer, pretpostavimo da sam zabrljao.
Pretpostavimo da sam stvorio nova datoteka za pset.
I ja sam ga spremiti kao "greedy.c."
No, pretpostavimo sam slučajno spremite u IDE50-- tako da u samom mom radnom prostoru
i ne pset1.
>> Možete vidjeti koliko u gornjem lijevom kutu.
Postoji "greedy.c."
I tu je nekoliko rješenja.
Dakle, jedan, mogu koristiti super razumljiv način
samo povučete i ispustite.
I to bi zapravo riješili ovaj problem.
Ali danas, pokušavamo gledati na Više Arcane, ali moćne načine
za to.
Zato mi dopustite da poduzme "ls" u pset1.
A ja vidim samo "mario.c."
Dopustite mi ići naprijed i učiniti "CD ..".
Dakle CD opet promjene katalog.
".." Znači ono, iako?
Zadnji put kad sam rekao "CD pset1 "ići u pset1.
Dakle, kad kažem "cd ..", što ja radim?
Unatrag.
Da.
>> Tako da će tzv roditelja.
Idi jednu razinu gore, kao što izlaska iz mape.
Tako Enter.
I doista, pogledajte što je učinio.
To me preselio upravo u radnom prostoru, umjesto od u pset1, koja je u radnom prostoru.
A sada, ako sam tip "ls", postoji cijela hrpa stvari.
U tu je "greedy.c".
Pa sad neka mi koristiti MV doslovno premjestiti "greedy.c" u pset1.
I tako puno Linux naredbe rade upravo ovako.
Oni se ne argumente ili ih uzeti jedan Argument ili oni uzeti dvije komandne linije
argumenti i tako dalje.
I u ovom slučaju, to je doslovno radi ono
ona kaže, iako succinctly-- premjestiti greedy.c u pset1.
Unesite.
Ništa ne čini da se dogodi.
Ali ako ja to ls opet, pohlepni je otišao.
A ako radim "CD pset1", Enter, a zatim Je li opet, sada je na pravom mjestu.
Kao na stranu, ako se za Neki reason-- posebno
ako imate prekidima mrežnog povezivanja
ili ste šetnju kampus sa svojim laptop poklopcem
zatvorena, a zatim ga otvoriti opet i vaš radni prostor
Čini se pomalo out of sync, nije velika stvar.
Samo ponovno učitajte preglednik prozor, i to bi trebalo
RESYNC tako da je lijeva ruka file browser izgleda točno
poput prozora terminala.
Bez brige.
Kada su u nedoumici, učitajte stranicu, tako da dok ste spremili datoteke već.
U REDU.
Tako MV se također može koristiti za preimenovanje datoteka.
I neka je pogledati ovo konačna naredba ovdje.
Tako suppose-- a to je super uobičajeno, također, rano.
Neki studenti povremeno stvoriti datoteku zove, neka je say-- što je još jedan?
Kao "WATER.C."
Pa samo ću vikati, za nema razloga, u svim kape.
No, to nije Točan naziv za datoteku
ako je samo zato naš problem postaviti Specifikacija ti nije rekao
spremiti datoteku kao sve kape "WATER.C."
Umjesto toga, očekujemo "water.c" malim slovima.
A, u stvari, to je problematična jer check50,
program idete susret u problemu
jedan set koji automatski testira ispravnost kodu
će vikati na tebe ako to ne uspije pronaći "water.c" u svim malim slovima.
>> Dakle, moram popraviti.
Toliko različitih načina na to, od kojih je prvi
bi se kontrolirati klik ili desni klik naziv datoteke i samo promijeniti Preimenuj.
Totalno redu to učiniti.
Ali opet, danas, neka je to učiniti nešto ljubitelj.
Idemo koristiti MV mijenjati "WATER.C" na "water.c."
Dakle, možete koristiti prvi argument da ga preimenovati u drugi argument
ako je drugi argument nije u Činjenica, mape ili naziv direktorija.
>> U redu.
I na kraju, malo trick-- pa sam u moj radni prostor katalog u ovom trenutku.
Ako želim da se u pset jednom, Ja sigurno mogu upišete "cd pset1."
Ali to je tako zamorno tipkati "pset1" ili više imena datoteka ili imena imenik
još.
Dakle, vrlo često u Linuxu, što što možete učiniti je početi na gumb "PSE"
i samo dosadi, udario Tab, i neka računalo to shvatiti umjesto vas.
Super korisno da se u tu naviku.
Jedina kvaka je ako imate više datoteka ili mapa koje počinju
slovom "p" ili "ps", možda ćete morati
upisati još nekoliko prije Računalo zna što treba učiniti.
>> MARIJA: Volimo prečaca.
>> DAVID Malan: Ovo će uštedjeti puno vremena.
I također, kao što smo rekli u predavanju, što možete pronaći u povijesti, gore i dolje,
pronaći nedavno pogubljen naredbe, kao dobro.
U redu.
Tako sada, neka je skrenuti pozornost na jednostavan program, Hello World.
Tako smo sastaviti to točno.
A sad zašto ne uzmemo pogled na vrste podataka
a zatim prijelaz iz neke odgovara Bloka blokova C
MARIJA: Awesome.
Pa sada da ste započeli pisanje programa u C,
ćemo početi govoriti o vrstama podataka i varijabli.
Tako neke vrste podataka koje bi željeli znati počinju danas
su one koje su osvjetljeni plavim.
Tako imamo int prvo, koja se zalaže za cijeli broj.
I to drži prirodna broja, kao i vi možda guessed-- do 1, 2, 3,
i bilo koji drugi cijeli brojevi koje se možete sjetiti.
>> DAVID Malan: I također negativan.
>> MARIJA: I također negativni, Yep.
I 0.
Onda smo plovi, koji su brojeve s pomičnim zarezom.
Dakle, to je sve realne brojeve da imaju decimalne točke.
Dakle 5.0, 5.2, i još znamenke nakon decimalne točke,
kao i, kao i one negativne.
Onda smo char koji je lik.
Dakle, mislim da smo razgovarali o ovo predavanje danas.
Ali imamo pisma, za example-- A, B, C-- koji se može pohraniti kao char.
Ali onda imamo puno više simbola koji se može pohraniti kao char.
A oni se pohranjuju kao ASCII.
>> I onda imamo bool, koje su logičke izraze.
A oni ocjenjuju da Točno ili Lažna ili 1 i 0, respektivno.
DAVID Malan: i podsjetiti da je bool dolazi iz CS50 knjižnici.
Dakle, to nije ugrađen u C, ali to je super korisno
da pojam istinito i lažno.
I iako vas Možda think-- zabava činjenice.
Bool tehnički treba koliko bitova, doista, za zastupanje Točno Netočno odnosu?
Koliko bitova mislite li ti bi trebao, maksimalno?
Da, samo jednom.
Tako ispada da je C Ne mogu vam dati samo jedan zalogaj.
Najmanja jedinica mjere možete dobiti je osam.
Dakle, to je malo razoran da ste pomoću cijeli bajt ili osam bitova,
zastupati Točno ili netočno.
Ali to je samo način na koji je to implementiran u C od CS50 knjižnici.
Maria: I onda one koje smo neće govoriti o tako velikoj mjeri
Pravo now-- dvaput, to je za veće plovcima.
Dugo dugo i kratko su i za cijele brojeve.
DAVID Malan: Doista.
U hakerske izdanju pset jedne, mi zapravo koristiti dugo dugo.
No, za standardno izdanje, ne bi trebalo biti potrebno.
MARIJA: cool.
U REDU.
Dakle operators-- da bi trebao biti vjerojatno upoznati s većinom od njih.
Osim toga, +; oduzimanje, -.
Za množenje, imamo *.
Dakle, nije da je X obično koriste.
Odjel, imamo obrnutu kosu crtu.
A modulo je naš zadnji operator koji ćemo razgovarati o sada.
To je operator koji nam omogućuje da uzeti ostatak podjele.
Dakle, ako imamo 4% 2, 4 podijeljeni od 2 je 2 s ostatkom 0.
Dakle 4% 2 0.
4% 3 1.
4% 5 4, kao što ste mogli pogoditi.
I zapamtite kada se koristi sve te operateri koristiti PEMDAS pravila.
>> DAVID Malan: Dakle, da bude jasno, ako vas ne 4% 2, zašto je to 0, točno?
>> MARIJA: Zbog 4 podijeljen 2 2 s ostatkom 0.
Dakle modulo nam daje tu kao ostatak Za razliku od posljedica podjele.
DAVID Malan: I doista, što ćemo naći ovaj koristan
je da u nekim problemima to nije nužno jedan,
ako želite imati učinak ograničavanje sebe
na raspon brojeva kao 0 do nečega,
možete koristiti modulo omotati oko ranije nego kao 2 milijarde
ili vrijednost 4 milijarde koje smo razgovarali o predavanju u.
>> MARIJA: Da.
A čak iu "pohlepni" smo mogli.
DAVID Malan: Da, u Problem postaviti jedno, kao dobro.
MARIJA: Da, lijepo.
DAVID Malan: Dobar savjet.
MARIJA: Žao mi je.
Booleova expressions-- tako za Boolean operatora,
ćemo o svemu razgovarati od ovih koje ovdje vidite.
Tako sada imamo dva jednake znakovi popisu za jednakima.
Dakle, oni su za usporedbu.
Do sada smo samo sam vidio jedan znak jednakosti.
To je kad smo dodijelili vrijednost u varijablu.
Dakle, ako smo vidjeli int n = 5, zatim dodijelili smo 5 na varijablu n.
No, ako želimo koristiti == za usporedbu, možemo provjeriti da li je n == 5.
A ako n == 5, onda je to istina.
>> Dakle, Boolean operatora omogućuju nam, zapravo,
ocijeniti Boolean izrazi na true ili false.
Dakle, ne equals-- imamo uskličnik i jednaki.
Tako smo se također može provjeriti, ako je n nije jednak 5-- tako n! = 5.
Manje od manje od ili jednako, veći od, veći ili jednak,
a onda smo logički I i logično ILI.
A oni nam omogućiti da procijene više Boolean izraza zajedno
na osnovi dolaze zajedno kao jedan cijeli logički izraz.
Dakle, ako želimo pronaći broj, kažu, da je veći od 5, ali manje od 15
u isto vrijeme, mi bi koristiti logično i operater vidjeti ako je n
veći od 5 && n manje od 15.
DAVID Malan: I ovdje, također, to je stvarno lako
rano slučajno koristiti samo jedan ampersand
ili jedan okomita traka.
I nadam se prevodilac će vikati na vas, jer oni zapravo
imaju vrlo različito značenje.
Za one radoznale, oni su koristi za bitovni poslovanja,
djeluju na pojedinačne bitove.
Ali vi želite par njih ovdje.
I super važno je da Prvi je znak jednakosti,
koji je operator jednakosti kao Za razliku od operatora dodjele.
>> MARIJA: A okomita traka je nalazi između Delete i povratka.
DAVID Malan: Da.
Na tipičnoj američkoj tipkovnici.
>> MARIJA: Aha.
Tako ćemo skočiti pravo u uvjet.
U nule, vi ste već vidjeli, vjerojatno,
ako izjave da vam omogućuju da provjerite je li nešto istina, onda
učiniti nešto drugo.
Dakle, možda ste htjeli provjerite je li vaš duh je
dodirujući neku drugu sprite ili granica zaslona.
A onda ste možda željeli završiti igru ​​ili učiniti nešto drugo.
Dakle sintakse za to je "if (uvjet)."
Dakle, ako je vaš duh dodiruje nešto, onda je unutar vitičastih zagrada.
>> Onda smo IF-ostalo izjave.
Inače nam omogućuje da učinite nešto ako je uvjet da se
provjerite u početku nije istina.
Dakle, ako je duh dodiruje granični to, drugi učiniti nešto drugo.
Dakle, na neki drugi način učiniti nešto drugo.
Onda smo kratki primjer za to.
Dakle, ako (military_time <12), mi želite printf "Dobro jutro!"
Inače ćemo printf "Dobra večer!"
Osnovni primjer.
>> DAVID Malan: Dobro.
>> MARIJA: cool.
Tako sada imamo prekidač izjave.
Zamijenite izjave općenito mogu omogućuju nam da napraviti puno iste stvari
da smo samo razgovarali o s i ako izjavama.
Na primjer, sada imamo opći oblik izjave prekidača
koji nam omogućuje da se varijabla zove n
i usporedite ga puno različite vrijednosti, što ovdje ćemo
su pozvani constant1, constant2.
Možemo imati puno više.
A oni su pozvani slučajeve.
>> Dakle, ako imamo prekidač statement-- i to radi
samo za integers-- imamo varijabla u ovom slučaju to je n.
Ako je varijabla n jednak constant1 smo
će izvršiti neki isječak kôda ili nešto što želimo učiniti.
I onda bismo razbiti.
Tako je pauza znači da izjava prekidač
će se zaustaviti izvršenje, ako n je jednak constant1,
a zatim vaš program će se nastaviti.
To će izaći iz kategorije prebaciti izjavu i to će
nastaviti raditi nešto drugo.
>> Ako je, međutim, n nije jednak constant1, onda slučaj za constant2
će biti provjereni.
Dakle, ako je n jednak constant2, taj drugi Isječak koda će se izvršiti.
A onda ćemo razbiti ako je jednak tome.
A onda možemo imati also-- ne nužno, though-- zadani slučaj,
što će se dogoditi ako n nije jednak bilo slučajeva da ste na popisu.
I u zadanom slučaju, mi također ne treba predah nužno
jer Izjava prekidač će znati da treba završiti nakon defaultu
slučaj ako je to slučaj.
>> DAVID Malan: Ali stilski, smo ga uvijek staviti unutra.
>> MARIJA: Da.
>> DAVID Malan: Da.
Dakle, posebno na samom početku, pogotovo ako među onima manje
udoban, ja bih osobno Samo preporučuju držati s MS
i IFS-drukčije i ako je-drugo-ako-drukčije i tako dalje, ako se samo
jer si malo više jednostavan.
To je lijepo optimizacija, ili ponekad čak i estetski ga
čini kod više čitati.
A u stvari, vjerojatno Sredinom semestra vidjet ćemo problem
postavljen je sad izgleda bolje i lakše za čitanje za ljude
pomoću prekidača izjavu.
No, ne brinite o držeći to prerano.
>> MARIJA: Da.
Ako imate puno ako izjave, možda samo ne biti vrlo čitljiv.
To ne može biti vrlo brzo za vas da ide kroz njega.
Dakle prebaciti izjave mogu biti vrlo korisna, kao dobro.
I također, ne remember-- ne zaboravite staviti pauze tamo.
>> DAVID Malan: Ne sjećam ovoga.
>> MARIJA: Jer onda možda pasti kroz od slučaja do slučaja.
Dakle, recimo da je slučaj constant1 nije imao break izjavu u njoj.
Onda smo mogli pasti kroz u slučaju constant2.
A mi ne želimo učiniti ako već smo postigli slučaja constant1
i to je jednaka n.
>> Tako, na primjer, ako imamo varijablu n koji sadrži niz klase,
i želimo vidjeti što je to Klasa is-- ako je n = 50,
idemo ispisati "CS50 je Uvod u Computer Science I. "
Onda ćemo razbiti.
I to je to.
Ako je, međutim, n je jednak do 51, idemo
za ispis "CS51 je Uvod Computer Science II. "
Zatim, opet, idemo razbiti.
Međutim, ako je onda stavio 124, 61, bilo drugi broj da biste mogli misliti,
ili program ne ide prepoznati da.
Dakle, to će reći: "Žao mi je, ja sam nije upoznat s tom razredu. "
I to će se slomiti.
DAVID Malan: Dakle zaista možete vidjeti if, else if, drugo ideju ovdje.
To je samo drugačije sintaksa za izražavajući točno istu ideju.
>> MARIJA: Točno.
Sada imamo ternarna operatora.
Dakle ternarne operateri moraju tri parts-- stanje,
nešto učiniti ako taj uvjet je istina,
a zatim nešto učiniti ako je uvjet lažan.
Dakle vidite, u osnovi, sintaksa koja se ovdje.
Imamo upitnik i onda the-- što mi to nazivamo?
DAVID Malan: debelo crijevo.
MARIJA: Colon.
Hvala.
Oprostite.
Pa pogledajmo naš primjer vidjeti možemo li smisla this--
class_num == 50.
Dakle ovdje vidimo našu Boolean operator == koji uspoređuje varijablu class_num
do 50.
Dakle class_num trgovinama cijeli broj.
A ako taj cijeli broj jednako 50, onda smo
će pohraniti "David Malan" unutar niza profesora.
Ako poslovni broj ne jednaka 50 "Ne David Malan"
će biti profesor.
>> DAVID Malan: Hvala vam.
I tako to čini ekvivalent Što biste rekli, na prvi pogled?
>> MARIJA: Za mene to čini kao i ako-ostalo izjave.
>> DAVID Malan: Da.
A u stvari, to je vrsta od prilično jednog broda,
da tako kažemo, za provedbu upravo logika ako-ostalo
ali radi sve u jednom koraku.
>> MARIJA: Točno.
Da.
Dakle, ako-else izjava možda zauzimaju puno prostora.
Oni mogu biti predug za nešto kao jednostavan kao taj.
Dakle, to može biti vrlo sažet i vrlo lijepo.
Dakle, sada idemo u potrazi na i opet izvršavanju nešto,
pa ček za stanje više puta
a zatim nastavlja raditi nešto dok je uvjet true.
Dakle, to nas dovodi lijepo u while petlje.
>> S lijeve strane, imamo naš prvi while petlja.
Dakle, dok je nešto istina, nešto opet i opet.
Dakle, pobrinite se da je naš Stanje je ovdje potvrditi na vrhu.
Dok s našim drugom loop-- zovemo da do-a loop-- smo nešto učiniti,
onda smo provjeriti stanje.
A ako taj uvjet i dalje biti istina,
možemo se vratiti i učiniti što više.
Dakle, glavna razlika je u kojoj uvjet se provjerava na.
I kod svibanj nikada biti izvršiti ako uvjet nije
istina s while petlje.
Dok s do-vrijeme petlje, imamo kod
koji je uvijek izvršiti barem jednom.
A onda, dok je stanje i dalje biti istina,
možemo se vratiti i opet ponoviti unutra.
Pa zašto misliš da bi koristili do-while petlja iznad while petlji?
Pravo.
Dakle, ako želimo brz Korisnik za neku vrstu ulaza,
ako želimo da ih pitam unijeti svoje ime,
želimo ih barem pitati jednom.
A ako oni ne ulaze to ime, mi nismo
će ih ponovno pitati jer smo već znali.
Ali ako oni ne ulaze njihovo ime, ili ako se
upišite nešto što je očito nije ime,
mi i dalje želite nastaviti moleći ih na za svoje ime.
>> DAVID Malan: I u predavanju imali smo jednu ovako s dobiti pozitivan int
primjer, tamo gdje je ništa provjerite na prvi, jer imate ni
dobivši int.
Dakle, želimo napraviti this-- dobiti int od user--
onda to provjeriti, možda, opet i opet i opet.
>> MARIJA: Točno.
Za loops-- OK.
Za petlje može nam omogućiti da učinite gotovo točno istu stvar, kao dobro.
To je zapravo točno istu stvar.
Dakle, nema ništa što što možete učiniti s for petlje
da ne bi bio u stanju učiniti s while petlje.
Ali za petlje može činiti malo malo više komplicirano sintaktički
jer su tri dijela u ono
bio prije samo Stanje s while petlje.
Tako je prvi dio koji si more, lijevo-većina, imamo "int patuljci = 0."
Dakle, ovo je mjesto gdje smo inicijalizirati naše varijable.
>> Onda imamo zarez i "patuljci <7."
Dakle, ovo je mjesto gdje se Stanje je zapravo.
Dakle, to je ono što bi staviti samo u vrijeme loop--
"dok su patuljci <7."
Evo, da se ide u Sredina našeg for petlje.
Dakle, "dwaves <7."
A onda je naš zadnji dio je "patuljci ++" koji je mjesto gdje ćemo ažurirati naš varijablu.
Tako je važna stvar shvatiti da je ovaj
će proći kroz to za petlju sedam puta i izvršiti sedam puta.
Dakle, imamo sedam patuljci, i oni su svi
će reći: "Ja sam ovdje da vam pomogne, Snjeguljica "
jer oni su spremni pomoći Snjeguljicu.
>> Uz dok petlje, što bi učinio inicijalizacije i ažuriranje
ne u stanju, opet, ali prije ili unutar while petlji
kako bi bili sigurni da we-- jer mi uvijek trebati one dijelove.
Dakle, kako bi bili sigurni da imamo ih, mi bi ste dalje dodaje ih
na, samo ne u zagradama.
>> DAVID Malan: I tako to izgleda volimo-članovima za predavanje, na primjer,
Ja gotovo uvijek koristiti, kao što je, ja i n i prilično dosadno varijable.
Izgleda možete koristiti više pametno zove varijabli, previše.
>> MARIJA: Da, to je zapravo jako lijepo koristiti malo više opisne varijable
jer pogotovo ako je netko drugi čitajući vaše code-- možda ste ocjenjivač
ili ako ste za suradnju s somebody--
želite da biste bili sigurni da su oni Razumijem što radiš.
>> U REDU.
Dakle, to je nešto vrlo funky-- for petlja unutar petlje za.
Ja ne znam da li smo vidjeli prije.
Vjerojatno ne.
Ali mi zapravo može imati this-- tako petlje umjesto petlje.
Tako se bilo tko želi možda prošetati meni kroz ono što se ovdje događa?
DAVID Malan: Ja ću uzeti ubod.
MARIJA: cool.
DAVID Malan: U redu.
Dakle, spoiler-- želimo ispisati stvari to je u donjem desnom kutu
tamo.
>> MARIJA: Tako je.
Da da.
>> DAVID Malan: Pa mi smo samo staviti taj primjer izlaza nema.
Dakle, ja mogu zaključiti iz najviši petlje da ste
iterating preko reda u najudaljeniji petlje, da se tako izrazim.
A ti iterating više stupovi s najintimnijeg kruga.
I intuitivno, to trebali nadamo smisla
jer po prirodi svaki program smo vidjeli
Prije, printf, koji je Funkcija mi koristimo, u konačnici,
ima mogućnost ispisa stvari iz suštini redak po redak.
Kao, nakon što ste reproduciraju nova linija, postoji
nema dubliranje natrag i tiskanje nešto više na zaslonu, barem
Ne koristite printf ovako.
>> I tako u tom smislu, čini osjećaj da je vanjski petlje
treba se odnosi na nizove jer je za svako dano red,
ti si idući u ištanje to ispis XXXXX, a zatim
premjestiti na sljedeći redak, xxxxx.
Dakle, redovi na prvom mjestu.
A onda unutar svakog red, ispisujete stupce.
Ako ste pokušali da ga se ne suprotno, to bi vjerojatno ne
izaći kao namjeravate.
>> MARIJA: Da.
Mi jednostavno ne mogu vratiti na prethodni redak s printf.
>> DAVID Malan: A što je zanimljivo po današnjem razgovor o opsegu,
zapravo, da je red je int koji je proglašen u najvišem petlji.
Ali primijetite da je još uvijek unutar, da tako kažemo,
Kovrčava aparatić koji Odmah slijedi,
iako to nije tehnički unutar tih vitičastih zagrada.
Pa red je opseg za cjelokupnost isječku koda,
kako unutar vanjskog za petlje i unutarnje strane za petlju.
No s druge strane, gdje je je stupac u opsegu?
Varijabla stupac?
Da, samo u unutarnjoj petlji.
I to je u redu, jer mi ne pristupiti je izvan njenih vitičastih zagrada.
Sve što učiniti je ispisati iz nova linije na samom kraju tamo.
Tako da je zapravo u redu.
>> Dakle, to ima učinak, izgleda, raditi tri retka i četiri stupca.
>> MARIJA: Tako je.
Dakle, prvo ćemo proći kroz naš prvi red.
I samo u prvom redu, mi učiniti četiri stupa unutar prvog reda.
Tako smo ispisali četiri X-ih.
A onda možemo izlaz za petlju, jer već smo isprintati četiri X-ih.
A mi ispisati novu liniju.
A onda idemo kroz Isti postupak još dva reda
da bi ukupno tri.
>> DAVID Malan: I to je vrijedno napomenuti da je samo artefakt fonta, činjenica
da uzorak izlaz čini toliko jači,
kao da postoji više redaka nego stupaca.
Ali to je samo zato što je X je viši nego što je širok.
To je sve što se tamo događa, plus bijeli prostor između redaka.
>> MARIJA: Tako je.
Cool.
DAVID Malan: U redu.
Tako brz pogled na problemu postaviti jedan, uzeti na sva pitanja, a zatim prekinuti?
U redu.
Tako je u problema postaviti jednu, ima tri primarni izazovi, u konačnici.
Ali prvo, vi ćete kako postaviti problem
specifikacije, kao što je s mnogima psets ove jeseni, će vas provesti
kroz nekoliko zagrijavanja vježbe, ukazuju vas iz nekoliko izvora
koji svibanj ili svibanj nisam vidio već.
Na primjer, CS50 ima paket gaćice,
koji su kratki video, Nije za razliku od toga, ali to
Vrlo tema specific-- možda pet minuta,
10 minuta u dužini na petlji ili o uvjetima i na algoritme
ili kasnije više napredne teme, kao dobro.
I općenito ugradili oni u problemu
postavlja tako da učenici imaju resurs s kojim
pregledati materijal koji bi mogli imati Već se u predavanju ili dijelu.
No, ovaj put to je više fokusiran i na dohvat ruke.
>> Mi također imaju tendenciju da se ugraditi u problemu postavlja stvari zove Walkthroughs.
Dakle, gotovo sve primjere radim u predavanju, na pozornici se ovdje, mi također
su pucali na kameri u unaprijed više sporije,
više intimni prohod po meni na moj laptop tog koda, redak po redak
tako da je u klasi, mi ćemo se često kliziti kroz nešto ili nekoga
će ubaciti Sa odgovoriti na pitanje.
No, to ne mora nužno potonuti u za svakoga u publici.
Tako ćete naći kod Walkthroughs za većinu primjerima
da mi ovdje u predavanju, tako da mogu hodati kroz njega na vlastitim tempom
i natrag ili naprijed ili preskočite zajedno, ako želite.
>> Tu je često malo topla-up pitanja koja
Vas molimo da vrsta ojačati taj materijal
i uvjerite se da si udoban prije nastavite s ostatkom pset.
I onda, naravno, tu je sama pset.
I jedna od stvari smo vrlo namjerno
učiniti u CS50 je gotovo svaki nezanimljiv ili intelektualno nezanimljiv
mehanička korak koji možda ćete morati učiniti
je gotovo uvijek vrlo dobro dokumentirana.
Tijekom roka, mi ćemo početi tražiti više retorička pitanja
kao što se sjetiti kako ovo ili ono?
Ali općenito, vidjet ćete da je problem setovi dobiti
kroz mehanika nešto tako da
zanimljive, intelektualni izazovi su u konačnici lijevo za vas studenta.
>> Uz to, rekao je, Zamyla, kojima smo čuvaju se danas odnosi na predavanja,
je jedan od naših dugogodišnjih zaposlenika član koji također drži Walkthroughs
na specifične probleme kao što su Mario pset i pohlepni, iako ne zalijevati ove godine.
I to je u onima Walkthroughs da je ona često
nudi neke savjete i trikove za kako postupiti, nikada vam govorim
točno što učiniti, ali rather-- kao uvjet,
ako will-- dajući vam najmanje Nekoliko ideja tako da je na vama,
u konačnici, odlučiti kako im pristupiti.
>> MARIJA: Nešto poput visoke razine Razumijevanje logike što
tražimo od vas da učinite.
>> DAVID Malan: Točno.
I, u stvari, a Zamyla Walkthroughs značilo
odgovoriti na najčešća pitao pitanje gdje
Počeo sam raditi, pogotovo kada ove duge specifikacije
malo zastrašujuće dao sav tekst i slike koje su u njima.
>> Dakle water.c, naći ćete Nakon što ste ga završili,
je zapravo relativno jednostavan.
Apsolutno su hrpa od vas će lupati
glave o zid pokušavajući shvatiti zašto to nije sastavljanju
ili zašto to nije ispravno radi.
No, nakon što ste učinili s njom i nakon što ste
proveo neko vrijeme bori s bilo od bugova koji bi mogli imati,
vidjet ćete da je to vrlo kratki program.
To se može obaviti u samo nekoliko linija koda, od kojih je većina
vidjeli smo ovdje u predavanju već, ako sastavljanja pravo blokova.
>> I kao što predlažemo ovdje, to će pitati
da odredite koliko minuta netko tuširanja na kampusu.
Mi navesti u problemu podešavanje brzine protoka vode
u, kao što su tuš, low-flow Glava, baš kao Seinfeld isječak
što smo vidjeli jučer ili ih budete suprotno.
I onda samo trebate učiniti malo matematike,
really-- aritmetiku pomoću C ispričati nam koliko, otprilike, boce vode
da je ekvivalentna ako smo uzimanje n-minutni tuš.
>> Sada, u mario.c, to se događa biti nešto više programa.
To još uvijek neće biti tako dugo.
Samo nekoliko redaka dulje nego water.c.
Ali to će biti prilika stvoriti staru školu Mario
Piramida od Super Mario Braća ili neki nastavak na.
To neće izgledati kao ljepše ili kao boja kao da je jedan igrač.
Samo ćemo koristiti malo izraze s oznakom # kao što mi imamo ovdje na zaslonu
pomoću ASCII tekst.
Ali to će se približna istu ideju.
I to će biti vježbe koje na prvi pogled
izgleda prilično jednostavno simple-- ispisati jednostavan piramidu.
No, tu je par obilježja ovdje su zanimljivi.
Obavijest da rightmost rubu piramida zapravo ima širinu dva.
Dakle, postoje dva jednaka Visina stupova, koji
čini to zahtijevaju malo Malo misli da bi
jeste li dobili koji točno pravo, kao što je za razliku od samo savršeno nagnuti
linije.
Dakle, to je malo kutak slučaja ali odgovara stvarnoj igri.
>> I to je također nije očito na prvi pogled kako ispisati bijeli prostor.
Dakle, kada sam pogled na Uzorak izlaz here--
i to je također u spec-- se vrsta izgleda kao pravokutnik,
ali dijagonalom od pravokutnik je odrezala,
i to je samo bijela mjesta, da se tako izrazim.
I tako često postavljana Pitanje ovdje je uvijek, dobro,
kako mogu premjestiti izraze s oznakom # na to pravo?
Ili kako mogu ispisati prazne prostore?
I to je zapravo lakše nego većina studenata misli.
Pravo?
Možete ga približan vizualno jednostavno udaranje razmaknicu jednom ili dvaput
ili tri puta.
>> I tako, iako s printf smo gotovo Uvijek ispisati niz ili int
ili riječ poput "Pozdrav, svijet "ili niz riječi,
možete samo ispisati citat, prostor, citat.
A to će zapravo dati što bijeli prostor postoji.
Pa imajte to na umu i Ne overthink ovo.
Vi stvarno trebate odlučiti red po red,
Nije za razliku od vašeg primjer trenutak prije, koliko je onih koji
stupovi bi trebali biti bijeli prostor i koliko ih treba biti izraze s oznakom #.
Trebat će malo vremena, ali to je konačnici logika puzzle sorti.
>> MARIJA: Da.
Ali logika ide red će biti vrlo korisno ovdje.
DAVID Malan: Da.
Mislim da je uzorak koda si gave-- čak iako to nije bio kompletan program.
Još uvijek je potrebno int i glavni i praznina i #include stdio.h,
puno stvari iz predavanja.
No, zgrada blokovi Čini se da su tamo.
A onda na kraju je nešto malo više algoritamski.
Tako ispada da je bilo koje vrijeme ići u CVS ili bilo trgovini
i netko pruži Na blagajničko računa ili novca kao promjena,
ispada da su oni, ljudi, da li ili ne oni to znaju ili ne,
Vjerojatno koristite ono što je naziva pohlepni algoritam,
pri čemu ako ste duguje, kažu, $ 21 u promjeni, jer iz nekog razloga
ste kupili nešto vrlo jeftin s vrlo velikim zakona na CVS,
to bi bilo jako neugodno ako je Blagajnik vam je dao 21 singlova ili, još gore
ipak, puno novca.
Umjesto toga, ono što razumna osoba Vjerojatno ćete učiniti je da ide
da zgrabite $ 20, a zatim $ 1 računa, a ruka vam samo dva računa u tom slučaju.
MARIJA: Tako oni traže kako bi se smanjila promjena koje daju natrag na vas.
DAVID Malan: Točno.
A isto bave novca, kao dobro.
Ako ste duguje, kažu, $ 0.50, nadam se da ne želite 50 penija.
Umjesto toga žele dva četvrtine, na primjer.
Sada, to ne pretpostaviti da blagajnik mora
dosta svake vjeroispovijesti koji on ili ona možda želite dati.
No, mi vam omogućiti da preuzme koliko u problemu.
A cilj, u konačnici, je implementirati u C kod pohlepan algoritam.
Dakle, korisnik je dopušteno upisati u koliko
mijenjati on ili ona je dugovao s dolara i centi, neka vrsta pomičnim zarezom
vrijednost vjerojatno.
A onda morate učiniti za matematiku i shvatiti algoritamski, dobro,
koliko novca mogu dati što minimalno da vam
upravo taj iznos promjene.
No, tu će biti Nekoliko lukav dijelova ovdje, zar ne?
Kao da je cijeli Pitanje nepreciznost.
MARIJA: Točno.
Dakle, s pomičnim zarezom Vrijednosti su nepreciznost.
Jesmo li razgovarati o tome u predavanju danas?
>> DAVID Malan: Napravili smo Posljednji put u predavanju.
Razgovarali smo o nepreciznosti.
A vi ne želite prevariti korisnika koliko promjena on ili ona duguje.
I tako prohod, u problem postaviti specifikacija,
dati neki mislili, u konačnici, kako bi se kako možete ublažiti one nepreciznost
pogreške, potencijalno.
To je izbjeći, sigurno, za ulazi mi govorimo.
I, u stvari, pennies-- Možda ćemo odgoditi za Zamyla,
Mislim, za trikove tamo.
Dakle u konačnici, pronaći ćete progresija problema ovaj tjedan,
prvi od kojih je prilično mala, zatim medij, onda je malo veći.
No, svi oni koriste zgradu blokova od prošlog tjedna,
iz ovog supersection, Problem postaviti Specifikacija
stavlja vas u bezbroj izvora.
Ali ipak, ako uopće bore, osobito među onima manje ugodno
bez prethodne pozadini, dolaze radnog vremena
u ponedjeljak i utorak i Srijedu i četvrtak.
Idi na CS50 Raspravite putem Web stranica tijeku je,
preko kojeg možete razgovarati s osobljem i kolege.
>> Ali u konačnici, mislim da je najbolji savjet je samo započeti rano.
To nije vrsta klase koja vas treba početkom psets srijedu
noć, ili još gore u četvrtak navečer.
>> MARIJA: Moj najbolji savjet je da su počeli u ponedjeljak.
DAVID Malan: ponedjeljak.
Dakle, ako niste započeli already-- br.
No, čak i ako nije u ponedjeljak, a zatim u utorak.
Što prije to bolje.
I to je razlog Naravno ima toliko kasno je dana
da vam malo psihološki pritisak
početi ranije, ali još uvijek neka stvari skliznuti kada stvari potrajati dulje
nego što očekujete.
>> MARIJA: A želite iskoristiti Radno vrijeme koliko možete, previše.
>> DAVID Malan: Ima li pitanja?
U redu.
Pa, zašto ne bismo odgoditi ovdje?