>> [Redarea muzicii]
>> DAVID MALAN: În regulă.
Bine ai venit înapoi.
Aceasta este CS50, iar acest lucru este O saptamana, a continuat.
Deci, unul dintre motivele pentru care am fost trece în jurul tehnologii, cum ar fi
Google Glass este că ei vin cu ceva cunoscut ca un API, un
Application Programming Interface.
Și ce înseamnă acest lucru este că, odată cu fișierele potrivite și cu dreptul
documentație, puteți scrie de fapt, software pentru dispozitive chiar ca acestea.
>> Și ce avem în minte față de semestre final este, în cazul în care un proiect
care implică, spune, Google Glass s-ar putea apel, vom vedea ce putem face în
Termeni de prindere vă cu unele înlocuitor hardware precum
API accesibil publicului, astfel încât să puteți începe de fapt, crearea de software
care ruleaza pe acelasi Google Glass.
>> Un alt dispozitiv care ne-am jucat cu întârziere de care ne-am gandit ar putea fi
distracție, la sfârșitul semestru este acest lucru mic aici.
Se numește Leap Motion, si ce esti pe cale de a vedea este punct de vedere tehnic o
publicitate pentru dispozitiv, dar vorbește la ceea ce particular acest
Dispozitivul este capabil.
Și, de asemenea, vine cu un API prin intermediul pe care le puteți scrie software-ul pentru a
controla propriul computer într-o manieră destul ca acest film de un minut aici.
>> [Redare video]
>> [END redare video]
>> Deci, chiar acum, acest dispozitiv se întâmplă să fi implementat ca un pic USB
conector pe care le puteți conecta la dvs. calculator, dar nu aș fi surprins
dacă înainte de mult timp avem aceste tipuri de tehnologii în următorul lot de PC-uri
și Mac-uri, astfel încât să puteți, într-adevăr, interacționează cu acesta în
un mod de genul asta.
De fapt, ceea ce am crezut că mi-ar face, de asemenea, este Am tras o mică demonstrație
program care vine cu acest software.
Așa că am pus senzor mic în fața laptop-ul meu.
>> Și, după cum puteți vedea, ea își dă seama deja că mâna mea este acolo
ao controla.
Și tot această cerere nu este roate lucruri mici, cum ar fi acest lucru.
Dar puteți vedea că, într-adevăr, Eu am cinci degete acolo.
Dacă putem ajunge să facă tot 10, vă puteți imagina un pian elegant
aplicarea sau similar.
Deci, dacă doriți să vină după clasa azi și să se joace cu care ca
Ei bine, sunteți bineveniți să.
Deci, mai multe pe care spre sfârșitul semestru.
>> Deci, un cuplu de administrative anunțuri.
Unul, face secțiunea de vineri la prânz la cs60.net/section.
Că URL-ul este în curs de pagina de pornire, de asemenea.
În același timp, deși, supersections va debuta în această duminică.
Supersections sunt un lucru o singură dată, pentru că ne ia ceva timp pentru a lucra
cine e în care secțiune și unde.
>> Deci, acest lucru vine duminică, nu va fi unul Secțiunea pentru cei mai puțin confortabil,
o secțiune pentru cei mai confortabil.
Iar cei dintre voi undeva în între sunt binevenite pentru a merge la
una sau ambele sau nici una.
Ambele vor fi filmat.
Vor fi într-o sală mai mare decât o secțiune în mod normal ar fi inch
Dar scopul aici este de a vă dota cu un pic de confort cu probleme stabilit o,
cu C, cu CS50 aparat, această week-end, chiar înainte de a afla dvs.
misiune oficială secțiune.
Deci, veți întâlni TF și mai mici dvs. grup de sectionmates în aproximativ
timp de o săptămână.
>> Orelor de lucru, între timp, au fost întâmplă.
Face să profite de ele in seara asta sau mâine seară, dacă doriți.
Set de probleme a 0 se datorează vineri.
Aceasta este o zi mai târziu decât regulat-programată joi.
Dar, cu set de probleme 1, veți vedea care include unele warm-up
exerciții cu care te poate extinde dvs.
Joi termen limită până vineri.
Set de probleme 1, între timp, va debuta pe site-ul cursului aceasta vine
Vineri, dacă doriți să mă ghemuiesc cu ea așa cum am făcut-o o dată la un moment târziu
Vineri seara, în camera ta.
>> Deci, cs50.net/appliance este locul unde puteți obține aparatul CS50
că am început cu luni.
Vom folosi o pic mai mult astăzi.
Dar fiți siguri că problema set 1 caietul de sarcini vă va plimba prin
exact pașii pe care trebuie pentru a obține că până și să fie difuzate.
Deci, nu vă faceți griji despre a face că, înainte de PSET 1, dacă nu ar fi mai degrabă.
>> Bine.
Deci, ne-am uitat, luni, la codul sursă, dar în contextul unei noi
limbaj de programare, și anume C și C, spre deosebire de Scratch, nu este grafic.
Nu e puzzle piese.
Este sintaxa mai mult limba engleză-ca.
Și există o serie de etape implicate în fapt, scris și rulează un
Programul în C, deoarece, pe lângă sursa cod ca aceasta, ai nevoie de ceva
numit un compilator.
Și în termeni de nespecialist, ceea ce face un compilator pentru noi?
Da.
>> STUDENT: Acesta convertește codul care scrie la 0 si 1.
>> DAVID MALAN: Bine.
Deci, se convertește codul care ne scrie la 0 si 1.
Acesta convertește așa-numitul cod sursă pentru cod obiect, din care acesta din urmă arată
ceva ca asta.
Și e CPU, creierul din interiorul computer, că, din cauza
persoanele care au creat aceste computere, știu ce aceste secvente
de medie 0 si 1.
>> Poate că aceasta înseamnă de imprimare.
Poate că aceasta înseamnă plus.
Poate că aceasta înseamnă scădere.
Poate că aceasta înseamnă afișa un grafic.
Există modele predefinite de biți că lumea a decis înseamnă
anumite lucruri.
Dar pentru cea mai mare parte din acest curs, vom lucra la un nivel superior, și
vom lua de la sine că există lucruri cum ar fi compilatoare, care poate
face funcția noastră codul sursă în modul în care ne-am propus.
>> Astfel încât programul am scris prima săptămâna trecută și apoi a început să port, așa să
vorbesc, să C această trecut Luni, a fost aceasta.
Când steagul verde clic, salut.
Acest lucru a fost, desigur, scris în Scratch.
Și am pretins că echivalentul Programul în C uitat un pic
ceva de genul asta.
>> Deci, ce-am gândit să facem la prima este, hai sa tachineze pe langa ceea ce pare, la prima
vedere, desigur, ca destul de arcane sintaxa, dar veți începe să observați
modele destul de repede.
Ce vom face, de asemenea, astăzi este de a oferi te cu un model mental pentru unele
canonic, unele construcții standard de în programare.
Și apoi vom obține de fapt, mâinile noastre murdare cu unele exemple.
>> Deci, pentru cei dintre voi mai confortabil, dau seama că în această săptămână și apoi viitoare
săptămână poate fi foarte bine un pic de revizuire.
Dar mai ales atunci când ediție hacker a problemei set 1 iese pe
site-ul curs, vineri, eu nu cred veți găsi că, chiar în timp ce completați
unele spații în următorii săptămână sau două, veți începe să obțineți mai mult
contestat și se confruntă lucruri noi și mai noi.
>> Așa că haideți să tachineze acest program în afară câteva linii la un moment dat.
La foarte de sus, avem ceea ce-i numit punct de vedere tehnic
Directiva preprocesor.
Aceasta este doar o linie de cod care spune pentru a include conținutul unui fișier,
numitul standard I / N, standard de intrare - sau, îmi pare rău, I / O standard, standard,
intrare / ieșire,. h, în interiorul de propriul meu program.
>> Deci, cu alte cuvinte, în cazul în care am scris acest program cu un editor de text simplu, cum ar fi
gedit, echivalentul simplu de ceva de genul Microsoft Word, care
instruire, # include stdio.h, este doar să-i spun compilator, apuca
Conținutul de celălalt dosar, stdio.h, și lipiți-le chiar aici.
>> Acum, ce-mi pasă?
Ce am pretinde în interiorul acestui fișier numit stdio.h, care este stocat
undeva pe hard-disk, sau în acest caz, undeva în CS50 aparat?
Cineva la pus acolo pentru mine.
Dar ce e în ea?
>> Da, așa că este o declarație de o funcție numită printf.
Amintește astfel printf funcția pe care afișează cuvinte și caractere și
Numerele de pe ecran de la licitare mea.
Dar eu nu l-am scris.
CS50 nu-l scrie.
Ani în urmă cineva a scris-o, și ei în esență, ne-a dat reteta pentru ea
într-un fișier numit stdio.h.
Astfel că prima linie doar dă-mi acces a funcțiilor că altcineva
a scris cu ani în urmă, printre care sunt printf.
>> Acum, linia următoare am de gând să val meu parte la, cel puțin până săptămâna viitoare.
Dar pentru acum, știu că int main (void) este în esență, echivalentul acestei
piesa de puzzle galben când steagul verde clic.
Lumea, cu ani în urmă, a decis că în cazul în care ai scris un program în
limbaj numit C, de a începe programul cu o linie
care arata ca asta.
În doar aproximativ o săptămână, se va face sens ceea ce Int este, ceea ce este nul.
Dar pentru acum, cred că doar de ea ca această piesă de puzzle galben.
>> Acum viitoare, avem o proteză cret urmat de către un alt aproape bretele cret,
ca să spunem așa.
Și vom vedea acestea de-a lungul programe în C, precum și
JavaScript și PHP.
Și acestea incapsuleaza doar linii legate de cod.
Deschis bretele buclat în esență, spune, aici vine un cod.
Și bretele buclat închis, care este în unghi, în cealaltă direcție, doar
înseamnă, că e pentru codul relevant.
>> Deci, linia de suculent în această primă Programul este ultimul, printf,
citez, salut lume.
Și am sunat la lucru între citate ce ultima oară?
Deci, este un șir.
Și un șir este doar tehnician Termenul pentru o secvență de
caractere, un cuvânt, o frază.
Chiar și o singură literă ar putea fie dublu citat.
Dar este o secvență de zero, sau mai multe caractere.
>> Backslash-n, deși, pare un pic ciudat.
Dar însemna pur și simplu ceva simplu la calculator.
Ce-i backslash-n?
Linie nouă.
Deci, asta e doar secvență specială de caractere că lumea a decis
înseamnă a pune un sfârșit de linie chiar acolo, deoarece compilatorul va primi de fapt,
confuz, de obicei, în cazul în care aveți, foarte de înțeles, dar incorect, doar
începe apăsarea Enter pentru a pune noi linii de cod.
Aveți nevoie pentru a fi un pic mai mult explicite cu backslash-n.
>> Și vom vedea acolo este un alt astfel de câteva modelelor de caractere speciale.
De exemplu, dacă ai vrut să vă lăsați minte umbla la un caz colț,
presupunem că am vrut să imprima o Citat dublu de pe ecran pentru
indiferent de motiv, care ar părea să fi un pic problematic, nu?
Pentru că dacă am pus un citat dublu în mijlocul de "Bună ziua, lume," pentru orice
motiv, de ce se pare că potențial problematice?
Se rupe șirul.
>> Compilator este doar un program.
Un program ca un compilator este doar de gând pentru a citi de sus codul de fund,
la stânga la dreapta.
Și dacă vede trei ghilimele în loc a doua, ea nu va sti
dacă vrei să spui că ceea ce la stânga ar trebui să fie șir, sau de lucru pentru a
dreapta, sau totul.
Este ambiguu, și deci ceea ce un tipic compilator ar face este doar speria,
și vă va oferi un mesaj de eroare, și te fac să se ocupe de problema.
>> Deci dat fiind că backslash-n înseamnă o nouă linie, ceea ce ar fi instinctele tale acum
începe să fie, dacă ai vrut să includă ceva anormal ca un dublu
cita în interiorul acestei altfel citat șir?
Backslash-ghilimele.
Și astfel vom vedea acest lucru un fel de model prea.
>> Dacă vrei să faci ceva un pic ciudat, veți găsi că
Soluții de multe ori urmeaza un tipar, și backslash
denotă o secvență de evadare.
Și aceasta înseamnă doar ceva special care trebuie să reprezinte într-un
mod diferit.
În ceea ce privește modul în care te reprezinta o bară oblică inversă, ei bine, vom
reveni la asta.
Dar răspunsul, de asemenea, este de fapt un pic evident.
>> Așa că haideți să introducă acum o altă constructe de programare
că ai văzut în Scratch.
Probabil le-ați luat pentru a acordat deja, dacă ai deja scufundat în
Problema stabilit 0.
Dar hai să introducă acum sintaxa din C pentru acestea altfel destul de intuitiv
idei, cel puțin unele dintre ele.
>> Deci, această noțiune de o condiție sau o filială, în timp ce anterior am
a reprezentat-o ​​cu cod care arata ca asta de pe partea stângă în Scratch -
dacă x este mai mic decât y, atunci spune asa -
în schimb acum în C - lasă-mă perfecționa în cazul cel mai simplu pe -
suntem pur și simplu să spun, dacă, deschideți paranteze, ceva este adevărat - un
Expresie booleană este de gând să meargă unde am spus stare -
paranteze de aproape, apoi face ceea ce-i în interiorul acestor acolade.
>> Deci, aici, de asemenea, acolade sunt un fel de a Scratch
Piese de puzzle în formă de U.
Nu ceea ce este în interiorul acestor acolade.
În acest caz, slash slash.
Și că acest lucru este un atacant slash, nu o bară oblică inversă.
Slash, slash, pentru cei care au programat
înainte, înseamnă doar -
e doar un comentariu.
Un comentariu nu este o linie de cod, per se.
Este o linie de limba engleză care, umană, s-au scris la tine pentru a
poate vă reamintesc să faci ceva, să explica pentru tine, pentru a explica
altcineva, ceea ce codul dvs. este de a face.
E doar un comentariu descriptiv.
>> Acum, desigur, putem avea un mod de două- furculiță în drum doar de a face acest lucru, o
trei căi furculiță în drum de a face acest lucru, iar dacă veți continua acest
model, puteți avea patru căi, cinci-way, șase cai furci din drum, dacă
trebuie să se ocupe, într-adevăr, că multe condiții.
Și apoi observați paralelismul aici -
în cazul în care (condiție), else if (conditie), și singurul care e un pic
ciudat este ultimul, care este doar că altcineva.
Dar, din nou, acest lucru este identic, conceptual, pentru ceea ce am făcut
deja, deși sintaxa va ia un pic sa va obisnuiti.
>> Acum, în acest exemplu, există o altă sintaxă ciudat.
Vedem printf din nou, paranteză deschisă, și Paranteză închisă.
Și interioară nu există un șir citat.
Paranteze, în contextul de printf, du-te la stânga
și dreptul de ce?
Ce vom descrie că citat șir ca fiind mai general?
>> Deci, este un argument.
Oricând aveți o funcție, cum ar fi printf, iar apoi o paren deschis și un
paren aproape și ceva în interiorul ea, indiferent dacă este un șir, sau o
întreg, sau orice altceva, lucru în între aceste paranteze se numește
un argument.
>> Și un argument doar influențează Comportamentul funcția lui.
În acest caz, e destul de clar cum.
x <y este ceea ce se a trecut în, ca să spunem așa, ca un argument.
Și printf se va imprima exact care.
Deoarece cu siguranță, în anii persoana în urmă care a implementat printf avut nici o idee
ceea ce am succesorii umane au fost va folosi printf pentru.
Deci, de aceea exista argumente, pentru a influența comportamentul după o funcție de
a fost scris.
>> Acum, expresie booleană.
Am văzut aceste înainte în Scratch.
Se pare în C Puteți, de asemenea, "sau" le împreună, ca să spunem așa.
Două bare verticale înseamnă că acest bloc din cod, această face acest lucru, va
executa dacă prima condiție este adevărată sau a doua condiție este adevărată.
Și, chiar dacă nu s-ar fi făcut acest lucru în Scratch, ai putea într-adevăr
face acest lucru în Scratch, și puteți, de asemenea, te exprimi altfel -
dacă prima condiție, iar al doilea condiție sunt adevărate, atunci nu ceea ce-i
interiorul acolade.
>> Și, la fel ca și o parte, motivul pentru care este un ampersand dublu și un dublu
bara verticală, vom vedea în cele din urmă că o singură bară verticală și o
ampersand unic de fapt diferite adică în C. Deci, de acum,
că dublarea simbolurilor este intenționată.
>> Așa că haideți să introducă, pe scurt, acest alt pic de sintaxă.
Acest lucru nu este destul de reportare a Zero, dar eu pretind că pot
pună în aplicare noțiunea de cazul în care altcineva, în cazul în care altfel, în cazul în care altcineva, în cazul în care declarația altceva folosind
ceva numit un switch.
Și singurul motiv pentru aceasta există cu adevărat este să vă dau doar, programator, un
ușor mod diferit de rezolvare a unor Problema, deși logic aceasta
nu da nici noi capabilități.
>> Prin asta vreau sa spun acest lucru.
Când spui comutator, și apoi un spațiu, și apoi o pereche de paranteze, în interiorul
din care se duce o expresie -
și acest lucru ar putea fi un pic neevidenta la prima, dar acest lucru nu este un argument,
punct de vedere tehnic, deoarece comutator nu este o funcție.
Deci, pentru moment, doar presupunem că suntem folosind paranteze în diferite locuri
pentru diferite motive.
>> Deci, porniți expresie înseamnă că pot a pus-o în interiorul variabil de cei
paranteze unde se spune exprimare.
Și apoi dacă variabila -
Presupun că e numit x, și E doar un întreg -
Eu pot enumera apoi în diapozitiv mea aici, ceva de genul asta.
Dacă x este variabila mea, și eu vrei sa faci ceva, dacă x
este egal cu 1, eu pot face asta.
>> Dacă am în schimb vrea să facă ceva dacă x este 2, pot face asta.
Altfel, dacă vreau să fac altceva în întregime, pot avea un caz implicit în
caz în care fac acest alt lucru.
Deci, în acest sens, este echivalent cu un dacă X este egal cu 1, altfel dacă altcineva,
dar am spus asta acum doar pentru că vom vedea din nou.
Dar pentru acum, știu doar că ea există.
>> Bine.
Deci, in aceste ultime doua sunt un pic mai mult complexe la prima vedere, dar ei nu
ceva destul de simplu.
O buclă în C este o bucată de cod care doar face ceva nou și
din nou și din nou.
Și singurul lucru enervant despre ea este că este că este un pic criptic
să te exprimi în acest ciclic model, dar lumea standardizate pe
modul următor.
>> Când utilizați un pentru buclă, ai o pereche de paranteze din nou.
Și observați cele două punct și virgulă acolo.
Aceste două semne punct și virgulă separate de trei diferite expresii interiorul
paranteze.
Una dintre ele este așa-numitele initializare.
Unul este așa-numita condiție.
Și unul este așa-numitele actualizări.
>> Privit puțin în abstract, acest lucru este complet non-evident, deci haideți să ne uităm
la un exemplu concret.
În Scratch am avut un bloc de repetare.
Și acest bloc spus repeta de 10 ori, spune "Bună ziua, lume." Lasă-mă să revendice
acum, și vom reveni la aceasta, și acest lucru, de asemenea, va primi mai familiar
te înainte de mult timp, echivalentul C cod ar putea fi spus să fie acest lucru -
o pentru declarația și un spațiu, o pereche de paranteze, observați punct și virgulă în
acolo, care separă trei distincte lucruri, de inițializare,
condiție, și actualizarea.
>> Și să ia o ghici ce prima este de a face.
Int i = 0.
În termeni simpli dur lui, ceea ce este care face pentru noi, probabil?
Deci, da.
Se declară o variabilă numită I, și dă-l ce valoare?
0.
Deci, se creează o variabilă numită Eu, stocarea 0 valoarea în ea.
Aceasta este așa-numitul inițializare.
>> Bine, acum am susținut în fața că chestia de la mijloc, i
<10, este condiție.
Deci, ce face?
Ei bine, ceea ce face pentru buclă atunci când o program cu o buclă este rulat, este
de fiecare dată când calculatorul trece prin această buclă, de sus în jos, partea de sus a
partea de jos, la fel ca voi făcut atunci când numărare-vă și stând jos,
din nou și din nou și din nou, calculatorul se întâmplă
pentru a verifica această condiție.
Și dacă este mai mic de 10, o va face din nou.
Dacă i este mai mic de 10, o va face din nou.
Dacă i este mai mic de zece, o va face din nou.
Așa că pare să sugereze că Sperăm că se schimbă.
În caz contrar, vom avea o buclă infinită.
Și într-adevăr, eu se schimbă, deoarece Ultimul lucru pe care, după virgulă acolo
este sintaxa oarecum criptic de i + +.
Dar cei dintre voi care au făcut acest înainte, asta înseamnă doar
pur și simplu ce?
>> STUDENȚI: [interpunerea VOCI].
>> DAVID MALAN: Adauga 1 la i.
Incrementa i.
Așa că am văzut un puzzle Scratch piesă pentru că, de fapt.
Ea nu arata ca i + +, dar că doar înseamnă, pur și simplu, incrementa
valoarea I cu 1 de fiecare dată când face acest lucru.
Deci, literalmente, voi începe prin a inițializarea I la 0.
Atunci ai verifica starea dumneavoastră.
Este 0 mai puțin de 10?
Da.
Trecem prin bucla.
>> Următorul lucru pe care pretind a computerului de gând să faci este sa mergi
de i incrementa.
Deci, eu acum 1.
Acesta verifică starea.
Este mai mică de 1 10?
Desigur.
Deci, face din nou.
Atunci acesta trepte i + + la 2.
Este 2 mai mic de 10?
Da.
Și, din nou și din nou și din nou.
Și în cele din urmă, din cauza plus-plussing, vom ajunge să i este egal cu 10.
Este mai mică de 10 10?
Ei bine, evident că nu.
Și asta e punctul în care pentru bucla doar se oprește.
Și dacă aveți codul de mai mult de Ecranul jos, calculatorul
veniturile pentru a rula acest cod în loc.
>> Deci, din nou, chiar dacă acest lucru se va arata si se simt un pic ciudat la
în primul rând, desigur, pentru cei dintre voi care nu s-au programat înainte,
literalmente reduce conceptual a ceea ce este de altfel un foarte
puzzle simplu piesă în Scratch.
>> Bine, i-am promis că nu ar fie alte analogii în Scratch.
Nu e unul prea.
Și am văzut ultima scurt timp.
Dar tine minte pentru totdeauna bloca în Scratch?
Ea doar face ceva pentru totdeauna?
Am pretins că ai putea pune în aplicare aceasta în acest fel.
Și vă pot pune în aplicare, de fapt acest într-o grămadă de moduri diferite.
>> Dar buclă în timp ce este doar un alt modul în C de a te exprima.
La sfârșitul zilei, nu se poate face ceva cu o buclă în timp ce vă
Nu se poate cu un pentru buclă.
Deci, acestea sunt la sfârșitul zi funcțional aceeași.
Dar vă permite să te exprimi un pic diferit în
modul următor.
>> Cu bucla în timp ce, e ceea ce este în paranteze care este verificată din nou și
din nou și din nou.
Și, de îndată ce expresie este fals, apoi bucla se oprește de executare,
și computerul trece la rula orice alt cod ce
au în fișierul.
>> Dar ceea ce este interesant aici este că am scris literalmente adevărat.
Și adevărat este un tip de valoare Boolean, o valoare adevărat sau fals.
Atât de adevărat ar putea deveni vreodată fals dacă am literalmente
este greu codificate în programul meu?
Deci, nu.
E un pic ciudat că am făcut asta.
Dar adevărat este adevărat.
Nu e nici o plus-plussing.
Nu are nici un rost de variabile în aici.
Așa că am greu codificate în timp ce adevărat, acest lucru bucla este întotdeauna o să evalueze
din nou și din nou și din nou.
>> Deci, cum de multe ori este Hello world merge pentru a imprima de pe ecran?
Pentru totdeauna.
Un număr infinit de ori, până când moare baterii sau alte externe
Evenimentul se întâmplă.
Deci, acest lucru nu este, probabil, cel mai bun program de a scrie, pentru că în cazul în care utilizatorul
nu poate renunta programul dvs., este probabil, nu ceea ce ați intenționat.
>> Dar, uneori, programele ar trebui au o buclă infinită.
De exemplu, în cazul în care computerul are o ceas pe ea, cu siguranță că ar fi
frumos dacă ceasul acesta se păstra actualizarea în sine pentru totdeauna, deși o dată
al doilea sau o dată pe minut sau ceva de genul asta.
Bucle astfel încât, chiar infinite nu au locul lor.
>> Bine.
În sfârșit, aceasta.
Și acesta este un pic diferit funcțional, și ne vom întoarce la
acest lucru, probabil, în PSET 1.
Dar există un alt tip de buclă numit o face în timp ce buclă.
Și singura diferență aici între un face în timp ce buclă și, să zicem, o buclă în timp ce,
este că condiție nu este verificată înainte de a executa codul, dar după
te execute codul.
Deci, la partea de sus pentru timp buclă, în timp ce face în timp
verifică-l în partea de jos.
>> Iar acest lucru înseamnă doar că bucla în timp ce va executa de obicei de mai multe ori
sau mai puține ori decât o buclă în timp ce?
Potențial de mai multe ori, pentru că o face în timp ce bucla se spune clar acest lucru,
numai după care vă verificați dacă starea interiorul
paranteze este adevărat.
>> Deci, vom vedea acest lucru din nou probabil în PSET 1.
Dacă vrei vreodată să facă ceva la cel puțin o dată și apoi poate ceva mai mult
ori, acesta este un bun construirea a utiliza.
Dar, o buclă în timp ce, prin contrast, se va verifica starea sa de primul.
Și că este de bucle în C, nu în timp ce, în timp, și pentru bucle.
Și din nou, ei mapa destul de frumos înapoi la zero, cu excepția acesta nu
chiar au același analogice în Scratch.
>> Ei bine, ce zici, acum, variabile?
Deci, acesta este modul în care am declarat-o variabilă sintactic de altă zi.
Am avut un int, pe care am susținut este un număr întreg.
Apoi am avut o variabilă numită contor, și apoi un punct și virgulă.
Deci, ce este această linie de cod face?
Acest lucru este, pur și simplu, declarând o variabilă -
că este, cere calculatorul, da-mi unele de memorie, da-mi niste biti - în
care pot stoca ce?
Un int.
Și virgulă înseamnă doar sfârșitul de linie de cod.
>> Acum, a doua linie este, probabil, destul de guessable.
Ce este contor = 0; face?
Este atribuirea 0 pentru a contracara.
Și astfel încât acesta este un alt lucru că este un pic enervant
comparativ cu, să zicem, algebra.
Întrucât, în algebră, semnul egal înseamnă egal, aici în C, egal
semn înseamnă misiune.
Deci, aceasta înseamnă a pune ceea ce e pe dreapta în ceea ce-i de pe partea stângă.
Și vom vedea un alt simbol, este egal este egal, atunci când vrem pentru a testa de fapt
de calitate, oarecum enervant.
>> Dar acest lucru este un pic ineficient.
Este un fel de enervant ca am pentru a declara o variabilă și
apoi da o valoare.
Deci, C, de fapt ne permite să simplifice această și doar face totul dintr-o dată.
Puteți declara variabila pe stânga.
Puteți face în continuare alocarea pe dreptul de a pune semnul egal în
la mijloc.
Deci, la sfârșitul zilei, aceste două sunt echivalent, dar asta, sincer,
este, probabil, mai bine obiceiul de a intra în doar pentru că este un pic mai puțin
cod, este un pic mai ușor de citit, și doar înăsprește
codul, ca să spunem așa.
>> Orice întrebări, astfel, până în prezent pe bucle, pe variabile, în condiții, pe
Booleans, fie punct de vedere tehnic sau conceptual?
Bine.
Deci, acum acesta viitor devine o pic mai interesant.
Și acesta este un exemplu am pus ultimul timp ce doar Maps exemplu Scratch
pe la C.
>> Deci, o funcție.
În termeni de nespecialist, ceea ce este o funcție?
Trebuie să fie mai îndrăzneț cu raspunsul tau.
Ce este o funcție?
>> STUDENT: Are ceva.
>> DAVID MALAN: Ce-i asta?
>> STUDENT: Are ceva.
>> DAVID MALAN: Are ceva.
OK.
Vom începe acolo.
Deci, o funcție face ceva.
Deci, este o bucata de cod care este în esență, implementat în altă parte că
într-adevăr face ceva.
Acum, ceea ce este interesant despre o funcție este că poate dura de intrare,
și se poate produce rezultate.
Și să luăm de fapt o privire la acest lucru.
>> Deci, omul din spatele cortinei a fost în mod deliberat în urmă cu o clipă.
Aici avem o masă.
Dar să presupunem că acest fapt reprezintă o cutie mare.
Deci, aceasta este o așa-numită cutie neagră.
Și, în general, în proiectare, în calculator știință, cutii negre doar se referă la
piese de funcționalitate care cineva a implementat, iar tu nu faci
știu neapărat sau pasa cum este implementat sub capota.
Ai doar grijă ca această cutie neagră, pe care vom începe acum de asteptare o
funcție, face ceva.
>> Astfel, de exemplu, în cazul în care această cutie neagră pe etapa de aici reprezintă printf, o
funcția, eu știu de la exemplele anterioare care să ia printf una sau mai multe
argumente, și prima dintre aceste Argumentele ar trebui să fie un șir, cum ar fi
"Bună ziua, lume." Ei bine, dacă eu sunt persoana scrierea programului, și vreau
pentru a utiliza printf, I, de exemplu, s-ar putea să ia o bucată de hârtie goală aici și o
marker negru și scrie pe ea -
Am scris greșit "lume" -
H-E-L-L-O.
>> Deci, voi lua markerul negru și voi scrie, la fel de mare și lizibil ca pot pe
această bucată de hârtie, "Bună ziua, lume," Și acum eu susțin acest lucru este argumentul meu.
Acesta este un șir reprezentat cu o bucată de hârtie albă.
Și de intrare mea acum la funcția printf va fi aceasta.
Deci, eu sun printf, trecând ca argument ca intrare la ea.
>> Și acum, eu nu știu modul în care persoana care a scris printf a făcut-o cu ani în urmă, dar
Eu știu de la documentația de care scopul său în viață este de a imprima ceea ce am
oferi să-l ca intrare.
Și astfel, chiar dacă această punere în aplicare Este fără știrea mine
sub capota, acum Eu văd, oh, aceasta se face.
Ea a imprimat ceva de pe ecran.
Și acum control al programului, în cazul în care există au fost mai multe linii de cod, ar
s-au întors la mine.
Și astfel faptul că Colton -
binecuvânta inima lui, se ascunde aici sub un tabel în fața tuturor de tine -
este deliberată în care eu nu știu și nu-mi pasă cât de printf este
implementat.
Știu, din nou, de la ei documentație, ceea ce face și cum am
eu ar trebui să-l folosească.
>> Acum, amintim că printf ar putea obține un pic mai sofisticat.
Din nou, doar vorbim despre echivalentul a blocului Spune Scratch lui.
Dar am, de asemenea, ultima dată.
Am vrut să fac programul meu salut o puțin mai dinamic și nu doar greu
ceva de cod ca "lumea," și cu siguranta nu ceva greu codul
arbitrar ca D-A-V-I-D în program.
Am vrut să întreb de utilizator pentru lui sau a ei nume, și apoi face ceva cu
că șir pe care le oferă.
>> Deci, există ceva un pic diferit aici. printf, un moment în urmă,
a, într-adevăr, face ceva, dar nu sa întors nimic pentru mine.
Dreapta?
Colton nu-mi dai nimic înapoi, nu bucată de hârtie.
Nu a fost doar un efect secundar.
My furnizarea de "Bună ziua, lume", ca o argument a condus în Colton
efect secundar al unui cuvânt, unele cuvinte, apare pe ecran.
>> getstring, însă, este un pic diferit. getstring este, de asemenea, un
funcționa, dar returnează o anumită valoare.
Ea nu are doar un efect secundar estetic.
Este de fapt, dă-mi, persoana apel sau folosind funcția,
ceva înapoi.
Deci, în acest caz, este getstring numit cu getstring deschis
paren, paren aproape.
Are getstring, prin urmare, să ia orice argumente sau de intrare?
Nu, se pare că nu.
Scopul său în viață este doar pentru a obține un șir.
Ea nu are nevoie de mai multe detalii decât atât.
Așa că lasă-mă să merg mai departe și pretinde că, din nou, această cutie neagră nu este printf,
dar getstring, și lasă-mă, persoana scris acest program, apel sau de a folosi
getstring doar prin scris G-E-T-S-T-R-I-N-G, deschis paren, aproape
paren, getstring.
>> Acum, nu am nici o idee despre modul în care personalul CS50 implementat getstring, dar eu știu că
dacă aștept destul de mult, se va face acesteia lucru sub capota, poate cu ajutorul
unele variabile, poate cu unele condiții, poate cu ajutorul unor bucle,
Poate că utilizarea unor funcții, Poate folosind -
doar încearcă să stagneze - poate prin câteva alte caracteristici de programare.
Dar dacă am așteptat destul de mult - în realitate, în calculator, acest lucru se întâmplă
super-rapid -
dacă aștept destul de mult, această funcție getstring este mergi la a lua un șir
de utilizator, care este probabil să tastați l pe tastatură lor, și
Apoi, când getstring se face obtinerea acele caractere de la utilizator
și stocarea lor într-un șir, care funcția, getstring, va avea
gata pentru mine ceva de ieșire, care sunt va prelua cu titlu de
operator de atribuire.
>> Și dacă mă duc, într-adevăr, în producția aici, Obosi are cu generozitate
a participat, fără să știe acest lucru în avansa, prin scris numele său pe această
variabilă, care reprezintă un șir.
Acum, operatorul de atribuire înseamnă, chiar deși acest lucru s-ar putea simți un pic
redundante, de fapt, am nevoie de pentru a face propria mea copie a acestui.
Deoarece pe stânga lateral - Hopa! -
Observați că în esență au string Numele de pe partea stângă.
Deci, eu sunt, de asemenea, de gând să facă propria mea copie a acestui.
Și acest lucru este un pic de o minciună albă, pentru că vom vedea într-o săptămână sau două de
timp că șirurile nu sunt de fapt ceea ce par a fi.
>> Dar pentru acum, aici, este valoarea returnată.
Aici este propria mea copie după folosind operatorul de atribuire.
Și acum, ce vreau să fac în continuare?
Avem acum de-a doua a două linii de cod.
Așa că acum vreau pentru a apela printf.
Să presupunem acum ca negru casetă este din nou pentru a fi
printf și nu getstring.
>> Printf acest timp se va ia cât de multe argumente?
Deci, uite, e ca si cum doi.
Există două virgule acolo, dar unul dintre aceste virgule, e
interiorul citate.
Deci, primul argument este literalmente Va fi aceasta.
H-E-L-L-O, virgulă, sut s, backslash-n.
Și acum oferind nu un argument, dar două argumente pentru printf.
>> Și ce ar trebui printf-a face cu aceste două intrări după ce le trece în
ca argumente?
Ar trebui să aibă de-a doua de ei, pe care am chemat numele, astfel încât
a doua bucată de hârtie am scris un moment în urmă se numește nume.
O să conectați din valoarea interior din care variabile în substituent,
% S, astfel încât, din nou, în doar un moment de timp, vom vedea un efect secundar al
a chemat printf, prin care acum ne vezi nu "Bună ziua, lume," dar "Bună ziua,
Obosi. "
>> Deci, o mare rundă de aplauze atât de voluntarii nostri, dintre care doar unul cunoscut
acest lucru s-ar fi întâmplat.
Bine.
Deci, probabil, de simplu ca asta a fost, Desigur, dacă sunteți deja familiarizați
cu astfel, sperăm că nu va uita ca vizuală special de modul în care
Funcțiile de lucru.
>> Deci, nu e mai mult decât getstring.
In interiorul CS50 bibliotecii, există un grămadă de funcții, toate din care
sunt capitalizate doar pentru a face clar că am scris aceste funcții.
De obicei, în C, aproape fiecare Funcția vei folosi este litere mici.
Dar am folosit în mod deliberat cu majuscule doar pentru a face clar faptul că acestea
sunt roți de formare de felul care ne vom folosi pentru doar câteva săptămâni că
simplifica procesul de a obține intrare de la utilizator.
>> Biblioteca CS50 nu face nimic că voi înșivă nu putea face de către
folosind doar cod C de la o manual Oldschool.
Dar, din nou, le folosim ca formare roți de soiuri de doar o pereche de
săptămâni, astfel încât să putem scăpa de complexitate că veți înțelege în curând
te de a face ceva la fel de relativ simplu ca obtinerea
intrare de la un utilizator.
>> Deci, știți că veți avea acces la getchar, GetDouble -
dublu.
What's - și apoi GetFloat.
Ce este un flotor?
Să începem de acolo.
>> STUDENT: [inaudibil].
>> DAVID MALAN: Da.
Este un număr cu o zecimală.
Deci întrucât un int este un număr întreg, care este doar un număr de la 0 la 9,
un numar de repetari ale acestora, un float este ceva
cu un punct zecimal.
Și un dublu, între timp, este, de asemenea, un număr cu o zecimală, dar mai mult
Numerele după zecimală punct, potențial.
>> Asa ca vom lua înapoi la acest lucru înainte de timp.
Dar de obicei, fiecare dintre aceste tipuri de date, fiecare dintre aceste tipuri de variabile
că o biblioteca ca a noastră poate reveni la te, folosesc diferite numere de biți la
stoca informații.
De obicei, un Char, ceea ce înseamnă doar un personaj, folosește 8 biți.
Și că, de fapt, în concordanță cu nostru octet de voluntari săptămâna trecută, care
a venit și a reprezentat una Caractere ASCII la un moment dat.
Deci, un Char este de 8 biți.
>> Un float se întâmplă să fie 32 biți, de obicei.
Și un dublu, așa cum s-ar putea ghici, este de fapt 64 de biți, care este doar mai mult,
ceea ce înseamnă că puteți avea mai mare numere sau mai multe precizie.
Dar, din nou, mai mult pe altă dată.
GetLongLong, între timp, deși stupid numit, este de fapt doar o
întreg, care este de două ori mai mare, de două ori mai lung, eventual, ca o regulat
număr întreg, 64 de biți în loc de 32.
Și getstring am fost folosind.
>> Dar se pare că, în CS50 bibliotecă, care este pusă în aplicare, așa cum vom vedea, în
forma a două fișiere, unul dintre care se numește cs50.h, are două alte
Tipuri de date în ea.
Booleans nu există în C. Puteți le simula folosind doar 0 si 1
de-a lungul programele.
Dar noi, în CS50 biblioteca au creat simbolurile "adevărat" și "fals"
pentru a reprezenta 1 și 0, astfel încât să nu Trebuie să ceva cod greu
literalmente ca 1 si 0.
Dar vom vedea pe cei din nou.
>> Șir, de asemenea, nu există.
Și de aceea am menționat că e un pic de o minciună albă pentru acum.
Dar vom coaja de spate, care strat înainte de lung.
Dar pentru acum, un șir este o secvență de caractere.
>> Între timp, în C, tu într-adevăr au diferite tipuri de date.
Observați acestea sunt mici.
Astfel încât funcțiile-ai văzut acum o clipă sunt funcții scrise de CS50 care
va reveni la tine o valoare care se încadrează într-una din aceste categorii.
>> Câteva foi de ieftin doar pentru a planta semințele aici. printf nu doar
ia% s ca substituenți.
Este nevoie de% d pentru numere întregi zecimale, sau% i-ar funcționa la fel de bine.
% F pluteste valori în virgulă. % C este pentru un caracter, dacă doriți să conectați doar un singur
caracter într-un șir preformatate ca și cum ne-am făcut, puteți folosi% C.
>> Și apoi, oarecum enervant,% LLD este pentru o lungă, intreg zecimal lung,
ceea ce înseamnă doar dacă aveți nevoie de un adevărat Numărul mare și utilizați ceva
numit un timp lung, pe care vom veni înapoi la un PSET, puteți folosi% LLD la
spune printf, conectați într-o foarte mare întreg aici prin intermediul a doua sau
un alt argument.
>> Și, în fine, i-am promis că există o altă scăpare câteva
secvențe care sprijină printf.
Am văzut backslash-n.
Backslash-r-ar putea vedea.
Este un fel de lucru vechi-școală.
Dacă ați folosit vreodată un adevărat ani mașină de scris Acum și tu tras de pe pârghia
care rotit nu numai roata care muta gama, de asemenea, sa mutat
Toată chestia tot drumul înapoi pe la stânga, bine, backslash-R doar
se mută în esență spate cursorului la începutul liniei
fără a se deplasează în jos.
Dar, din nou, mai mult pe faptul că, probabil, în viitor.
>> Backslash-Citat, citat backslash-dublu, backslash-backslash este
Soluția la ghicitoare micuță Am făcut aluzie la mai devreme.
Și backslash-0 este de fapt destul de interesant.
Dar să ne întoarcem la că înainte de mult timp.
>> Așa că lasă-mă să merg în, acum, CS50 aparat, și să facem de fapt o
rapid încălzească cu unul dintre exemplele am făcut deja și apoi trece la
ceva un pic mai complex.
Deci, dacă am deschide programul meu numit gedit -
aceasta este editorul meu grafic.
Și eu pot face asta -
permiteți-mi închide fereastra aia acolo -
prin această icoană aici, gedit, în stânga-jos
colț de lângă meniul.
>> Am de gând să merg mai departe și să avanseze, și a salva acest exemplu în, să zicem, John
Director la Harvard.
Dosar John Harvard este doar casa lui directorul în care trăiesc toate fișierele sale
în mod implicit.
Și am de gând să salveze acest drept un fișier numit salut-0.c.
Și am ales acest nume doar așa aliniază cu mostre de cod pe
site-ul cursului și în YouTube videoclipuri online.
>> Așa că acum am de gând să înceapă să scrie primul meu program.
Permiteți-mi mări pentru lizibilitate.
Și am de gând să merg mai departe și spune Int void main, care este la fel ca asta
piesa de puzzle galben care începe un program.
Am ajuns în obiceiul de peste de ani de la deschiderea bretele meu cret, apoi
De asemenea, închiderea și apoi merge înapoi la unde vreau să pun codul meu, doar
pentru că mă ajută să păstrați totul echilibrată, mai ales ca-mi
Programul devine mult.
>> Și acum, aici, am de gând să merg mai departe și spune, printf, citat citatul,
Bună ziua lume, backslash-n, citat de aproape, paranteze de aproape, punct și virgulă.
Deci, eu sunt doar repet tot ceea ce am fost luați pentru a acordat până în prezent.
Acum am de gând pentru a micșora.
>> Și această fereastră terminal aici, ceea ce am voie să fac în acest negru
și fereastra de alb?
Ce pot sa-l folosesc pentru?
Deci, acest lucru este în cazul în care I a alerga comenzi și unde pot compila lucruri.
Și am de gând să-l păstrați simplu.
Am de gând să utilizeze un program de numita face, care nu este
punct de vedere tehnic un compilator.
Compilatorul numit zăngănit, dar vom reveni la faptul că într-o
săptămână sau de două lui.
>> Pentru moment, eu sunt doar de gând să tastați face Bună ziua-0, dar cei dintre voi care au fost
compararea în mințile voastre ce am tastat la ceea ce ar fi trebuit sa scris poate
deja știu că am făcut ceva în neregulă aici.
Acum, există în mod clar unele erori.
Înainte de a mă uita la ceea ce sunt, orice gânduri cu privire la ceea ce am făcut greșit?
>> STUDENȚI: [interpunerea VOCI].
>> DAVID MALAN: Da.
Îmi lipsește fișierul header al bibliotecii.
Oricare dintre aceste fișiere. H sunt numite în afara fișiere, și ei colectiv
fac parte din lucrurile numite biblioteci.
Bibliotecile sunt doar bucăți de cod că alte persoane au scris.
Deci, [Standard? i] bibliotecă? este un colecție de fișiere care conțin cod
că alte persoane au scris.
>> Așa că îmi lipsește asta.
Deci, de ce primesc o eroare?
Ei bine, lasă-mă să derulați înapoi în fereastra mea terminalul aici.
Și, din păcate, în C, ca într-o mulțime de limbaje de programare, în special
în cazul în care totul este nou pentru tine, eroarea Mesajele sunt precise, dar sunt, de asemenea,
destul de criptic.
Și eroarea aici, în roșu, este "Funcția de bibliotecă, implicit, declararea
printf cu tipul, "și apoi aceasta se va derula la următoarea linie, "int const char *,
... "Este doar devine foarte copleșitoare rapid.
>> Dar ceea ce ar trebui să înceapă să facă, în cazul în care, din nou, noi la toate acestea, este doar de a
începe să caute cuvinte cheie.
În mod evident, nu s-ar putea înțelege jumătate din cuvintele pe care le-am văzut încă.
O vei face, deși, într-o săptămână.
Dar eu văd printf.
Și că ar trebui să înceapă, înainte de mult timp, pentru a împrospăta memoria dumneavoastră, în regulă, printf.
Ceva e în neregulă cu printf.
Ti-am scrie greșit?
Nu, nu arata ca - oh.
Eu nu pot folosi decât dacă predau compilatorul că ea există.
Și astfel, din nou, du-te cu instinctele tale, chiar dacă nu înțeleg de fapt
real mesajele scrise de eroare.
>> Și într-adevăr, soluția aici este de a doar o includă în partea de sus a fișierului
cum ar fi că, resaving dosarul meu cu Control-S sau din meniul File.
Și dacă acum mă întorc aici, Am de gând să clar acest lucru.
De control-L este doar un mod frumos pentru a goli ecranul.
Și apoi am de gând să tastați "face salut 0 "Enter, și acum văd încă o
secvență criptică de simboluri, dar vom reveni la asta.
Asta e ceea ce face este de a face pentru tine.
Este automatizarea procesului de luare o comandă destul de enervant care implică
Clang, compilatorul actual.
Dar faptul că am primit nici o eroare înseamnă că acest lucru ar trebui să funcționeze.
>> Deci, eu sunt acum de gând să facă - permiteți-mi mări din nou -
./hello-0 Enter, și într-adevăr, eu văd "Bună ziua, lume." Deci, haideți să sporească acum
acest vreodată atât de ușor doar pentru a reproduce pașii ne-am propus.
Am de gând să redenumi acest lucru cu Salvare ca pentru a hello1.c.
Și acum am de gând să declare o variabilă numit nume, astfel încât numele șir,
și am de gând să pun în ea Valoarea citez,
D-A-V-I-D virgulă Close-citat.
Și acum am de gând să înlocuiască "lume" cu ceea ce substituent pentru un șir?
% S.
>> Și acum, cât de multe argumente ar trebui ia printf acest timp?
Deci doi.
Așa că mă duc afară de citate.
I tip "nume" după o virgulă.
Dar am făcut ceva mai greșit de data asta.
Dar să presupunem că nu am făcut- seama că încă.
Lasă-mă să plec de aici.
>> Și observați, de asemenea, Primesc un pic plictisit de dactilografiere "face salut 0" toate
timp, "a face", și toate astea.
Deci, se pare, în Linus puteți de multe ori lovit săgeata în sus dvs.
tastatură, și puteți derula de fapt, prin toate comenzile pe care le-am
executate anterior la doar acum.
Deci, dacă am face asta, sus, sus, nu e să salut 0.
Eu nu vreau asta.
Vreau doar să schimbe că la Bună ziua 1 de această dată, Enter.
În cele din urmă, care va economisi ceva timp.
>> Bine.
Din păcate, nu este o eroare.
Deci, lasă-mă să derulați în sus.
Acest lucru arata ca chiar măcelărit acest program.
Adică, Doamne, e două linii de cod, și cele 10 linii de erori.
Dar uita-te la partea de sus o primul.
Utilizarea șir de identificare nedeclarate.
Am Adică standard de I n?
Nu, nu am făcut-o.
Am vrut șir.
>> Dar unde este variabilă șir tip a declarat, DD spunem?
Deci, este în CS50 biblioteca.
Deci, nu este suficient, în aceste primul cateva saptamani, doar pentru a utiliza
Ce C ne dă.
Am, de asemenea, de gând să meargă aici, și eu ar putea pune mai sus sau mai jos, dar voi
doar păstrați-l alfabetică pentru a menține lucrurile ordonat.
Am de gând să includă cs50.h, care este pre-instalat pentru
te pe CS50 aparat.
Și este open source, astfel încât, chiar oameni pe internet se poate folosi pe teritoriul lor
calculatoarele proprii.
Dar vine cu CS50 aparat.
>> Deci, acum lasă-mă să mă întorc și recompilați acest lucru cu a face salut 1.
La naiba.
Încă o altă eroare.
Lasă-mă să derulați până la primul, totuși.
Asta e un pic mai complex.
Multi-caracter caracter constant.
Asta nu mă ajută.
Dar observați, zăngănit este de cel puțin un pic bit decent, prin care, cu un pic de
verde caret simbol, se spune aici este locul unde am greșit.
De ce este îndreptat, cu puțin săgeata verde, la citat urmatorul single
pentru numele meu?
>> Deci, acesta este unul dintre lucrurile pe care le doar te obișnuiești, mai ales dacă ați fost
programarea în Python, sau JavaScript, sau alte limbi în care acest detaliu
nu conteaza.
În C, nu contează.
Dacă se declară un string, care este o secvență de 0 sau mai multe caractere,
tu de fapt trebuie să utilizați ghilimele.
Deci, de fapt, am nevoie pentru a schimba această înapoi pentru a deschide Citat, citat de aproape, cu
ghilimele duble.
Ghilimele simple nu au locul lor, dar numai atunci când utilizați individuală
caractere, dar mai mult pe altă dată.
Pentru moment, ghilimele duble sunt necesare.
>> Deci, acum, lasă-mă să mă întorc la terminalul meu fereastră, să salut 1.
Și cine e sigur?
Este acest program acum merge pentru a compila corect?
OK.
Deci, trei dintre noi cred că acest lucru.
Bine.
Enter.
Și a făcut-o de fapt.
Deci, nu există nici o eroare de această dată, chiar deși acest program a devenit un pic
mai complexă.
Dacă am face punct slash Bună ziua 1, Enter, se va spune "Bună, David."
>> Dar hai să facem de-a treia iterație de acest lucru, în cazul în care
Programul este cu adevărat dinamic.
Lasă-mă să merg mai departe și să modificați fișierul nume, doar pentru coerența cu
fișierele pe care le veți avea la dispoziție pentru a vă după aceea on-line.
Enter.
Și acum am de gând să merg în și nu stoca "David" greu codificate aici.
Ce aș putea face pentru foarte simplu îmbunătăți acest program?
>> Am putea numi getstring.
Acesta ar putea fi un pic de ceea ce ne-evident este să se întâmple, așa că am de gând
pentru a adăuga de fapt, o altă linie, printf, și spune numele, colon, citat de aproape, doar
pentru a oferi utilizatorului un prompt de pe ecran.
Și acum am de gând să merg aici, și eu sunt va folosi shortcut-mi tastatură.
Am de gând să meargă în sus, sus, și de a schimba salut 1 la salut 2, Enter.
Și din fericire, eu fac progrese.
>> Și acum am de gând să meargă în sus la punct slash salut și
schimba asta la 2, Enter.
Și acum programul meu -
Voi mări - este obținerea un pic mai frumoasa.
Nume va fi, să zicem Rob acest timp, Enter, salut, Rob.
O putem face din nou.
Numele, Lauren, Enter.
Numele, Iosif, Enter.
Numele, haideți să încercăm să fie dificilă, Enter.
Eh.
Nu e chiar un bug.
Deci, e doar un pic urât.
Așa că poate am putea rezolva această în viitor, nu acum.
>> Dar cum să te instinctiv du-te cu privire la abordarea
ca provocare deosebită?
Este doar pare stupid.
Cum puteți evita lucruri căutarea prost?
Deci, am putea face, OK, am auzit un cuplu de lucruri, o condiție și o buclă.
Am putea folosi, unul, o condiție, pentru a verifica ceea ce este lungimea șirului
utilizator ne-a dat?
Și dacă e 0, e cita doar încheiat citatul, ei doar a lovi Enter, apoi
Poate că ar trebui să țip la ei și le cere din nou.
Dar cum o le solicita din nou?
Ei bine, am auzit, de asemenea, buclă, și am putut face acest lucru din nou și din nou și din nou
fapt care ia determinat de utilizator pentru același lucru.
>> Ei bine, hai sa facem un alt exemplu folosind un alt
Funcția în CS50 biblioteca.
Permiteți-mi să închidă acest dosar.
Permiteți-mi să creeze unul nou.
Și eu numesc adder.c, doar pentru că este ușor să faci aritmetică simplă,
chiar dacă acest lucru va fi complet underwhelming cu ceea ce ai putea face
cu orice computer modern.
>> Dar lasă-mă să merg mai departe acum și -
Am învățat lecția ultima dată - includ cs50.h, includ stdio.h, int
void main, care, de acum, eu doar ia pe credinta oarba, dar vom presupune
care va înțelege ceea ce înseamnă că înainte de mult timp.
Și am de gând să spun ceva ca "da-mi un întreg."
>> Și acum, cum pot obține un int?
Vreau să declar în cele din urmă o variabilă numit x de tip int și
stocați în ea un număr întreg de la utilizator.
Astfel că a fost o îmbucătură.
Dar dacă cineva vrea să propună, cum mă declar un întreg numit x?
X Int.
>> Deci, este adevărat că este simplu.
Dă-mi un int.
Spune-i x.
Acum, am folosi operatorul de atribuire.
Și cum pot stoca de la lăsat o valoare de utilizare?
Nu vreau să numesc getstring, evident, ci mai degrabă getint.
Orice argumente?
Nu.
Deci, este deschis paranteza, aproape paren imediat, și apoi o
punct și virgulă se termină linia.
>> Acum, lasă-mă să fac asta din nou.
Dă-mi un alt Int.
De data asta voi face Int, să numim y, egal getint.
Si acum lasa-ma sa fac ceva super-simplu ca unele matematica.
Deci printf, suma de% d este substituent pentru un int.
Și% d, perioada, backslash-n.
>> Bine.
Astfel că nu este de fapt matematica.
Dar dacă vreau să spun suma acestei plus de valoare această valoare este egală cu aceasta
altă valoare, cât de multe argumente în totală ar trebui să fie dau printf,
în cele din urmă?
Deci patru, nu?
Acest șir și apoi cele trei valori.
Deci, x este primul vreau să fie conectat la prima d%.
Y va fi următoarea.
>> Și acum am un fel de vreau să spun z, dar z nu există.
Dar asta nu e mare lucru.
Pentru că ceea ce ai face instinctiv, mai ales dacă ați avut o
Graphing Calculator, ce tip?
Ce zici de x plus y?
Deci, nu este o variabilă reală.
E doar suma de două alte variabile.
Și asta e perfect legitim.
C cu siguranță înțelege simplu aritmetică ca aceasta.
>> Punct și virgulă, cu excepția.
Acum, lasă-mă să merg aici și tastați face vipera, Enter.
Nici o eroare, așa că e progres prea.
Introduceți vipera.
Și o altă tastatură de comenzi rapide, dacă începi să te plictisești
cu toate comenzile -
dacă începeți să tastați o comandă, ca punct slash anunț, și că este în cazul în care dvs.
plictiseala lovituri, se poate lovi de obicei, Tab pentru a avea calculator termina
Restul fraza pentru tine, dacă nu este ambiguu ceea ce ar trebui să vină după anunț.
>> Așa că lasă-mă să merg mai departe acum și faceți clic pe Enter.
Dă-mi un int, 1, 2, și Din fericire, e 3.
Dar, ca întotdeauna, de testare de programe nu ar trebui să reducă la
doar încearcă o dată.
Lasă-mă să încerc un caz colț, cum ar fi negativ 1, dă-mi o, și că o
se verifică de asemenea.
Și probabil că vreau să fac ceva mai mult teste riguroase, dar eu sunt destul de
confortabile, cu care e la.
>> Ei bine, acum hai sa incercam un alt program că această dată folosește o
bit de altă sintaxă.
Permiteți-mi crea un nou fișier.
Voi numi acest conditions0.c să se alinieze cu un cod on-line eșantion.
Și lasă-mă să merg mai departe și face includ cs50.h, includ
stdio.h, în main -
OK.
Acolo mergem.
Avem șabloane nostru standard.
>> Și de data asta am de gând să spun printf, "Aș dori un int, vă rugăm," doar pentru a
face prompt un pic mai prietenos.
Și acum vreau să obțineți un int de la utilizator.
Am de gând să-l n acest moment apel, doar pentru că n sună ca număr.
getint, și acum, ce facem Vreau să fac cu ea?
Ei bine, dacă n este - și voi mări -
dacă n este mai mare decât 0, vreau pentru a face următoarele -
printf "Ai ales un număr pozitiv." Altfel, am de gând să scrie printf "Tu
ales un negativ
număr. "În regulă.
Deci acest program, chiar dacă am făcut-o rapid, arata bine punct de vedere sintactic.
Lasă-mă să încerc asta.
Face condiție 0.
Se pare că pentru a rula.
Stare 0, intra.
Să-i dăm o int de 50.
Am ales un număr pozitiv.
Să încercăm din nou.
Stare 0.
Negativă 50.
Am ales un număr negativ.
>> Dar acum, lasă-mă să aleg ce vom păstra apelarea unui caz colț, care este mai mult
un caz interesant care credeți că s-ar putea să vă dau unele probleme, 0.
Acum, eu sunt destul de sigur că aceasta este una dintre acele cazuri în colțul în care zero
nici pozitiv, nici negativ, așa mea Programul, deși în vedere sintactic
corecta - se compilează, se execută - nu este logic corect.
Deci, ce este remediu simplu aici dacă vreau pentru a detecta, dacă vreau să se ocupe de n
este egal cu 0 separat?
>> Deci, dacă n este egal cu 0, atunci vreau să spun ceva de genul printf "Tu ai ales 0."
Lasă-mă să încerc asta acum.
Lasă-mă să mă întorc aici, clar fereastra mea, și recompilare.
Hm.
Genera o eroare.
Dar eu nu vă doriți să verificați dacă n este egal cu 0.
>> Deci, din nou, un alt lucru stupid să se obișnuiască, semnul egal este
operatorului de atribuire.
Deci, aceasta este de fapt greseala in care, punct de vedere tehnic, chiar dacă compilator
ma protejat de mine, ne-am punct de vedere tehnic se copierea 0 în n, care
nu este ceea ce vreau.
Vreau să testeze pentru egalitate cu egal egal.
Și așa că acum ar putea fi Soluția mea mai bine.
>> Permiteți-mi să resalvați de fapt acest lucru ca, spune, conditions1, să fie noi și îmbunătățite.
Deci, acum, dacă am recompilați acest lucru, s-ar face condiții -
Hopa - face conditions1 punct slash conditions1, Enter, "Aș vrea un int,
te rog. "Am de gând să meargă înainte și tastați 50.
Este încă bine.
Negativ 50, încă bine.
0, și aceasta, într-adevăr, detectat că am ales 0.
>> Deci, ce mai pot face acum cu asta?
Ei bine, putem face cu siguranță din ce în ce lucruri complexe.
Dar ceea ce aș vrea să propun este pe care le încheie în această notă aici.
Dacă ne trage în sus acest lucru, veți vedea, probabil, un desen animat preferat al tau
până în prezent s-ar putea Nu am înțeles niciodată.
Și că e vorba de calitatea de râs ar trebui să te cu glume CS.
Așa că e vorba de dreptate.
>> Dar mai convingător, m-am gândit să ne dea un pic de teaser pentru luni.
Așa că am început cu numere întregi.
Am menționat flotoare.
Chiar am menționat duble, care, din nou, vă dau numerele
după zecimale.
>> Dar se pare că plutește și duble, și, într-adevăr, calculatoare,
fundamental, nu se poate exprima unele valori exact.
Știm de la clase de matematica pe care le puteți avea orice număr de numere după
zecimale.
Și puteți chiar pune o bară verticală să spun aceste merge pe totdeauna.
>> Din păcate, nu se poate într-adevăr face acest lucru într-un calculator.
Și astfel de cazuri colț apar.
De exemplu, să presupunem că ești a face ceva financiare.
Tu faci matematica cu procente, iar
cu dolari și cenți.
Și aceste cenți nu neapărat linia de sus.
Ei bine, se pare că fracțiuni de mărunțiș poate începe să adăugați până când
modelat cu un sistem informatic în așa fel încât inteligent
oamenii pot profita.
>> Iar cei dintre voi care nu au văzut, mi-ar ca să vă dau un 30-al doilea teaser al
un film minunat cunoscut ca spatiu de birouri, care va picta o imagine a unui
Problema vom aborda Primul lucru pe luni.
Dacă am putea ridica volumul un pic, vă dau 30
secunde de spatii de birouri.
>> [Redare video]
>> -Adică, tu, tu nu au fost afișate și veți obține pentru a păstra locul de muncă.
>> -De fapt, am fost promovat.
>> -Aș putea programa un virus care ar rip acel loc mare de timp.
>> -Ei bine, cum funcționează?
>> -De fiecare dată când există o tranzacție bancară în cazul în care dobânda este calculată, și acolo
sunt mii de o zi, computerul se termină cu aceste fracțiuni de un cent.
>> -Dar eu nu am de gând să fac nimic ilegal.
>> -Ilegal?
Samir, asta e America.
>> -Trebuie să jur pe Dumnezeu.
>> -În cazul în care nimeni nu știe despre acest dar noi, bine?
Nici membrii familiei, nu prietene, nimeni.
>> -Desigur.
>> -De acord.
>> -Nu vă faceți griji, omule.
Nu voi spune nimănui, fie.
>> [END redare video]
>> DAVID MALAN: Deci, atunci, este CS50, care era Office Space, și se va tot
sens luni.
Ne vedem atunci.
>> NARATOR: La CS50 următoare, Rob ajustează pentru a fi pe
Plan de masă Harvard.