>> [MUSIC PLAYING]
>> DAVID MALAN: Va bene.
Bentornato.
Questo è CS50, e questo è Una settimana, Continua.
Quindi, una delle ragioni per cui abbiamo che passa intorno a tecnologie come
Google Glass è che essi sono dotati di qualcosa di noto come un API, un
Application Programming Interface.
E che cosa questo significa è che con il file giusto e con il giusto
documentazione, si può effettivamente scrivere software per dispositivi anche come questi.
>> E così quello che abbiamo in mente verso semestri finale è, se un progetto
coinvolgendo, ad esempio, Google Glass potrebbe appello, vedremo cosa possiamo fare in
termini di mettersi in contatto con voi un po 'di hardware loaner nonché la
API pubblicamente accessibile in modo da poter effettivamente iniziare a creare software
che gira su quella stessa Google Glass.
>> Un altro dispositivo che abbiamo giocato con di ritardo che abbiamo pensato che potrebbe essere
divertimento alla fine del semestre è questa piccola cosa qui.
Si chiama Leap movimento, e quello che stai per vedere è tecnicamente un
pubblicità per il dispositivo, ma non parlare di ciò che questo particolare
dispositivo è in grado di.
Ed è, anche, è dotato di una API via cui è possibile scrivere il software per
controllare il proprio computer in un modo piuttosto come questo film di un minuto qui.
>> [RIPRODUZIONE VIDEO]
>> [FINE RIPRODUZIONE VIDEO]
>> Quindi, in questo momento, questo dispositivo sembra essere implementato come un po USB
connettore che potete inserire nel vostro computer, ma non sarei sorpreso
se non molto abbiamo questi tipi di tecnologie nel prossimo gruppo di PC
e Mac in modo che si può, infatti, interagire con esso in
una maniera simile.
In realtà, quello che ho pensato che avrei fatto, anche, è Ho tirato su una piccola dimostrazione
programma che viene fornito con il software.
Così ho messo il piccolo sensore davanti al mio computer portatile.
>> E come potete vedere, realizza già che la mia mano è lì
controllarlo.
E tutto fa questa applicazione è swimmingly piccole cose come questa.
Ma si può vedere che, in effetti, Ho cinque dita lì.
Se siamo in grado di arrivare a fare tutto 10, si può immaginare un piano pulito
applicazione o simili.
Quindi, se vuoi venire dopo le lezioni oggi e giocare con quello
bene, sei il benvenuto a.
Quindi, più su che verso la fine del semestre.
>> Così un paio di amministrazione annunci.
Uno, fanno parte di questo Venerdì a mezzogiorno a cs60.net/section.
Questo URL è in corso di homepage pure.
Nel frattempo, però, supersections farà il suo debutto questa Domenica.
Supersections sono una cosa di una volta, perché ci vuole del tempo per lavorare
chi è in quale sezione e dove.
>> Quindi il prossimo Domenica, ci sarà una sezione per quelli meno confortevole,
una sezione per quelli più confortevole.
E quelli di voi da qualche parte in fra i benvenuti per andare a
uno o entrambi o nessuno dei due.
Entrambi questi sarà filmato.
Saranno in un auditorium più grande di una sezione normalmente sarebbe pollici
Ma l'obiettivo è quello di dotare con qualche conforto con il problema impostato uno,
con C, con l'apparecchio CS50, questo fine settimana, anche prima di scoprire la tua
Assegnazione sezione formale.
Così incontrerete il vostro TF e il vostro più piccolo gruppo di sectionmates in merito
una settimana di tempo.
>> Orario di ricevimento, nel frattempo, sono in corso.
Fate approfittare di loro stasera o domani sera se si desidera.
Problema set 0 è dovuto il Venerdì.
Questo è un giorno di ritardo rispetto al regolarmente in programma Giovedi.
Ma con il problema di set 1, vedrai che comprende alcuni warm-up
esercizi con i quali lei stesso può estendere la vostra
Giovedi scadenza al Venerdì.
Insieme Problema 1, intanto, farà il suo debutto sul sito web del corso il prossimo
Venerdì, se vuoi curl con come ho fatto una volta in ritardo
Venerdì sera nella vostra camera.
>> Così cs50.net/appliance è il luogo dove è possibile ottenere l'apparecchio CS50
che abbiamo iniziato a usare il Lunedi.
Useremo un po 'di più oggi.
Ma vi assicuro che il problema impostato 1 Specifica il lettore attraverso la
proprio i passi necessari per ottenere che installato e funzionante.
Quindi non preoccuparti di farlo prima Pset 1 se si preferisce non.
>> D'accordo.
Così abbiamo cercato il Lunedi a codice sorgente, ma nel contesto di una nuova
linguaggio di programmazione, cioè C. E C, a differenza di Scratch, non è grafica.
Non è di pezzi di puzzle.
E 'sintassi più simile all'inglese.
E ci sono un paio di passaggi necessari in realtà la scrittura e l'esecuzione di un
programma in C, perché oltre a fonte codice come questo, è necessario qualcosa
detto compilatore.
E in parole povere, che cosa fa un compilatore per noi?
Già.
>> STUDENTE: Si converte il codice che si scrive di 0 e 1.
>> DAVID MALAN: Buono.
Quindi converte il codice che scriviamo a 0 e 1.
Si converte cosiddetto codice sorgente codice oggetto, il secondo dei quali sembra
un po 'di qualcosa come questo.
Ed è la CPU, il cervello all'interno di il computer, che a causa della
persone che hanno creato quei computer, sapere quali quelle sequenze
di media 0 e 1.
>> Forse significa stampa.
Forse significa aggiunta.
Forse significa sottrazione.
Forse significa visualizzare un grafico.
Ci sono modelli di bit predefiniti che il mondo ha deciso di dire
certe cose.
Ma per la maggior parte a questo corso, lavoreremo a un livello superiore, e
daremo per scontato che esistono cose come compilatori che possono
rendere la nostra funzione di codice sorgente nel modo in cui noi intendiamo.
>> Così il programma che abbiamo scritto prima settimana scorsa e poi cominciò a porta, in modo da
parlare, di C lo scorso Lunedi, era questo.
Quando si fa clic su bandiera verde, dire ciao.
Questo era, naturalmente, scritto in Scratch.
E ho affermato che l'equivalente programma in C sembrava un po '
qualcosa di simile a questo.
>> Quindi quello che ho pensato che avremmo fatto in un primo momento è, cerchiamo di prendere in giro a parte quello che sembra, a prima
sguardo, è vero, come abbastanza arcano sintassi, ma inizierete a notare
modelli abbastanza rapidamente.
Ciò che faremo anche oggi è fornire con un modello mentale per qualche
canonica, alcuni costrutti standard di nella programmazione.
E poi ci troveremo a mettere le mani sporco con alcuni esempi e.
>> Quindi, per quelli di voi più comodo, rendersi conto che questa settimana e poi dopo
settimana può benissimo essere un po 'di revisione.
Ma soprattutto quando l'edizione di hacker del problema proposto 1 esce sul
sito web del corso il Venerdì, io credo troverete che anche come si compila
alcuni spazi vuoti oltre la prossima settimana o due, inizierete a ottenere sempre più
sfidato e di incontro cose nuove e più recenti.
>> Quindi cerchiamo di prendere in giro questo programma a parte poche righe alla volta.
Nella parte superiore, noi abbiamo ciò che è tecnicamente chiamato
direttiva del preprocessore.
Questa è solo una riga di codice che dice per includere il contenuto di un file,
chiamato Standard I / N, standard input - o, mi dispiace, I / O standard, standard di
input / output,. h, all'interno del mio programma.
>> Quindi, in altre parole, se ho scritto questo programma con un semplice editor di testo come
gedit, l'equivalente più semplice di qualcosa di simile a Microsoft Word, che
istruzione, # include stdio.h, è solo andare a dire al compilatore, afferrare la
contenuto di tale altro file, stdio.h, e incollarli qui.
>> Ora, perché me ne importa?
Cosa abbiamo pretesa è all'interno di questo file chiamato stdio.h, che è memorizzato
da qualche parte sul mio disco rigido, o in questo caso, da qualche parte in macchina CS50?
Qualcun altro ha messo lì per me.
Ma cosa c'è dentro?
>> Sì, quindi è una dichiarazione di una funzione chiamata printf.
Ricorda così la funzione printf che visualizza le parole e caratteri e
numeri sullo schermo della mia gara.
Ma non l'ho scritto io.
CS50 non l'ha scritto.
Anni fa qualcuno ha scritto, e che in sostanza ci ha dato la ricetta per esso
in un file chiamato stdio.h.
In modo che prima riga dà solo a me accedo di funzioni che qualcun altro
ha scritto anni fa, tra quali sono printf.
>> Ora, la prossima linea che sto per agitare la mia mano, almeno fino alla prossima settimana.
Ma per ora, sapere che int main () è essenzialmente l'equivalente di questa
giallo pezzo di puzzle in cui bandiera verde cliccato.
Il mondo, anni fa, ha deciso che, se si sta scrivendo un programma in
linguaggio chiamato C, si avvia il programma con una linea
che sembra così.
In quasi una settimana di tempo, farà senso ciò che int è, ciò che è vuoto.
Ma per ora, pensate un po ' come questo pezzo di puzzle giallo.
>> Ora prossimo, abbiamo una parentesi graffa seguito da un altro vicino parentesi graffa,
per così dire.
E vedremo questi in tutto programmi in C, nonché
JavaScript e PHP.
E questi solo incapsulano righe correlate di codice.
La parentesi graffa aperta essenzialmente dice, ecco che arriva un po 'di codice.
E la parentesi graffa di chiusura, che è inclinato nella direzione opposta, basta
mezzi, questo è tutto per il codice rilevante.
>> Così la linea succosa in questo primo programma è l'ultimo, printf,
tra virgolette, ciao mondo.
E ho chiamato la cosa tra citazioni che cosa l'ultima volta?
Quindi è una stringa.
E una stringa è solo il techie termine per una sequenza di
personaggi, una parola, una frase.
Anche una sola lettera potrebbe essere doppio citato.
Ma si tratta di una sequenza di zero o più caratteri.
>> Backslash-n, però, sembra un po 'strano.
Ma significava semplicemente qualcosa semplice al computer.
Che backslash-n?
Nuova linea.
Ecco, questo è proprio la sequenza speciale di personaggi che il mondo ha deciso
significa mettere una interruzione di linea proprio lì, perché il compilatore effettivamente ottenere
confuso, di solito, se si, molto comprensibilmente, ma in modo non corretto, proprio
iniziare a colpire Invio per mettere nuove linee nel codice.
Hai bisogno di essere un po 'più esplicita con backslash-n.
>> E vedremo c'è qualche altro tale modelli per i caratteri speciali.
Per esempio, se si voleva lasciare il vostro mente vagare per un caso d'angolo,
Suppongo che ho voluto stampare un doppia citazione sullo schermo per
qualsiasi motivo, che sembrerebbe essere un po 'problematico, giusto?
Perché se ho messo una doppia citazione nel mezzo "ciao, mondo", per qualunque
ragione, perché Ti sembra potenzialmente problematico?
Si rompe la corda.
>> Il compilatore è solo un programma.
Un programma come un compilatore è solo andare a leggere il tuo codice in alto verso il basso,
sinistra a destra.
E se vede tre doppie virgolette invece di due, non sta andando a conoscere
se vuoi dire che la cosa a sinistra dovrebbe essere la stringa o la cosa da
il diritto, o il tutto.
E 'ambiguo, e quindi ciò che un tipico compilatore dovrebbe fare è semplicemente fuori di testa,
e darvi qualche messaggio di errore, e ti fanno affrontare il problema.
>> Quindi, dato che la barra inversa-n significa una nuova linea, quale sarebbe il tuo istinto adesso
iniziare ad essere se si voleva includere qualcosa di anomalo come una doppia
citare all'interno di questo altrimenti citato stringa?
Backslash-doppie virgolette.
E quindi vedremo questa tipo di modello troppo.
>> Se si vuole fare qualcosa di un po ' strano, troverete che il
soluzioni spesso seguono uno schema, e la barra rovesciata
denota una sequenza di escape.
E significa semplicemente qualcosa di speciale che abbiamo bisogno di rappresentare in un
modo diverso.
Quanto a come si fa a rappresentare una barra rovesciata, beh, faremo
tornare a quello.
Ma la risposta, anche, è in realtà un po 'ovvio.
>> Quindi cerchiamo di ora introdurre qualche altro costrutti di programmazione
che si è visto in Scratch.
Probabilmente hai preso per scontato già se hai già tuffò
problema impostare 0.
Ma veniamo ora introdurre la sintassi in C per queste altrimenti abbastanza intuitivo
idee, almeno alcuni di loro.
>> Quindi questa idea di una condizione o un ramo, mentre in precedenza si
rappresentata con il codice che sembrava come questo a sinistra in Scratch -
se x è minore di y, poi dire -
invece ora in C - lasciatemi affinare in sul caso più semplice -
stiamo semplicemente andando a dire, se, aprire parentesi, qualcosa è vero - un
Espressione booleana sta per andare dove ho detto condizione -
parentesi chiusa, quindi fare ciò che è all'interno di queste parentesi graffe.
>> Quindi, anche qui, le parentesi graffe sono un po 'come Scratch
Pezzi di un puzzle a forma di U.
Fare ciò che è all'interno di queste parentesi graffe.
In questo caso, slash slash.
E notare questo è un attaccante Slash, non una barra rovesciata.
Slash, slash, per coloro che hanno programmato
prima, significa semplicemente -
è solo un commento.
Un commento non è una linea di codice, per sé.
E 'una linea di inglese che, il umana, hanno scritto a voi stessi per
forse si ricorderà di fare qualcosa, di spiegare a te stesso, a spiegare a
qualcun altro, ciò che il codice sta facendo.
E 'solo un commento descrittivo.
>> Ora, naturalmente, siamo in grado di avere un doppio senso bivio solo facendo questo, un
forcella a tre vie in mezzo alla strada facendo questo, e se si continua questo
modello, si può avere a quattro vie, a cinque vie, forchette sei vie in mezzo alla strada, se
è necessario gestire, in effetti, che molte condizioni.
E poi notare il parallelismo qui -
if (condizione), else if (condizione), e l'unico che è un po '
strano è l'ultimo, che è proprio questo il resto.
Ma ancora una volta, questa è identica, concettualmente, a quello che abbiamo fatto
già, anche se la sintassi volontà prendere un po 'per abituarsi.
>> Ora, in questo esempio, vi sono qualche altra sintassi strana.
Vediamo printf nuovo, parentesi aperta, e la parentesi chiusa.
E dentro c'è una stringa tra virgolette.
Le parentesi, nel contesto di printf, andare a sinistra
e proprio di che cosa?
Che cosa ci descriviamo che citava stringa come più in generale?
>> Quindi si tratta di un argomento.
Ogni volta che si dispone di una funzione, come printf, e quindi una parentesi aperta e una
stretta paren e qualcosa dentro di esso, che si tratti di una stringa, o un
numero intero, o qualsiasi altra cosa, la cosa in tra queste parentesi è chiamato
un argomento.
>> E un argomento influisce solo comportamento della funzione.
In questo caso, è abbastanza chiaro come.
x <y è quello che viene passato in, per così dire, come un argomento.
E printf sta per stampare esattamente questo.
Perché sicuramente, gli anni persona fa che ha implementato printf non aveva idea
quello che noi successori umani sono stati intenzione di utilizzare printf per.
Ecco perché esistono argomenti, a influenzare il comportamento dopo una funzione di
stato scritto.
>> Ora, l'espressione booleana.
Abbiamo visto questi prima di Scratch.
Si scopre in C si può anche "o" loro insieme, per così dire.
Due barre verticali significa che questo blocco di codice, questo fare questo, sarà
eseguire se la prima condizione è vera o la seconda condizione è vera.
E anche se si potrebbe non aver fatto questo in Scratch, si potrebbe infatti
fate questo in Scratch, ed è anche possibile esprimere se stessi in modo diverso -
Se la prima e la seconda condizione condizioni sono vere, allora che cosa è
all'interno delle parentesi graffe.
>> E proprio come un a parte, la ragione è una doppia e commerciale e un doppio
barra verticale, vedremo alla fine che una singola barra verticale e
singola e commerciale effettivamente avere diverse significato in C. Quindi, per ora,
che la duplicazione dei simboli è intenzionale.
>> Quindi cerchiamo di introdurre, per breve tempo, questo altro po 'di sintassi.
Questo non abbastanza riporto a Scratch, ma io sostengo che posso
attuare la nozione di un altro caso, se altra cosa, se altra cosa, se else usando
qualcosa chiamato un'istruzione switch.
E l'unica ragione per questo esiste davvero è di dare solo voi, il programmatore, una
leggermente diverso modo di risolvere alcuni problema, anche se logicamente
non ti dà le nuove funzionalità.
>> Con questo voglio dire questo.
Quando si dice l'interruttore, e poi uno spazio, e poi una coppia di parentesi, all'interno
di cui va l'espressione -
e questo potrebbe essere un po 'non ovvio in un primo momento, ma questo non è un argomento,
tecnicamente, perché interruttore non è una funzione.
Quindi, per ora, solo dal presupposto che stiamo usando parentesi in luoghi diversi
per motivi diversi.
>> Quindi accendere l'espressione significa che posso mettere una variabile all'interno di quelle
parentesi dove si dice espressione.
E poi se quella variabile -
supponiamo che si chiama x, e è solo un numero intero -
Posso quindi enumerare nella mia presentazione ecco qualcosa di simile.
Se x è la mia variabile, e io vogliono fare qualcosa se x
uguale a 1, lo posso fare.
>> Se io invece voglio fare qualcosa se x è 2, posso fare quello.
Altrimenti, se voglio fare qualcosa di diverso del tutto, posso avere un caso di default in
qual caso faccio quest'altra cosa.
Quindi, in questo senso, è equivalente ad un se x è uguale uguale a 1, altrimenti se il resto,
ma ho detto questo ora solo perché vedremo di nuovo.
Ma per ora, è sufficiente sapere che esiste.
>> D'accordo.
Quindi questi ultimi due sono un po 'più complesso a prima vista, ma lo fanno
qualcosa di abbastanza semplice.
Un ciclo for in C è un pezzo di codice che appena fa qualcosa di nuovo e
ancora e ancora.
E l'unica cosa fastidiosa è che è che è un po 'criptico
per esprimere voi stessi in questo ciclico modello, ma il mondo standardizzato su
seguente modo.
>> Quando si utilizza un ciclo for, hai una coppia di parentesi di nuovo.
E notare i due punti e virgola in là.
Quei due virgola tre distinti espressioni diverse all'interno del
parentesi.
Una è la cosiddetta inizializzazioni.
Una è la cosiddetta condizione.
E uno è il cosiddetto aggiornamenti.
>> Guardò in astratto, questo è completamente non-ovvio, così diamo un'occhiata
un esempio concreto.
In Scratch abbiamo avuto un blocco di ripetizione.
E questo blocco ha detto ripetere 10 volte, per esempio "Ciao, mondo". Permettetemi di rivendicare per
ora, e ci torneremo a questo, e anche questo, otterrà più familiare al
fra poco, l'equivalente C codice può essere detto di essere presente -
un'istruzione for e uno spazio, una coppia di tra parentesi, si noti il ​​punto e virgola in
ci, che separano tre distinti cose, l'inizializzazione, il
condizione, e l'aggiornamento.
>> E prendere a indovinare che cosa la prima è di fare.
Int i = 0.
In parole povere ruvido, quello che è che fa per noi, forse?
Quindi sì.
Si dichiara una variabile denominata i, e sta dando quale valore?
0.
Quindi è la creazione di una variabile chiamata i, memorizzare il valore 0 in esso.
Questa è la cosiddetta inizializzazione.
>> Bene, ora ho affermato prima che la cosa centrale, i
<10, è la condizione.
Così che cosa sta facendo?
Beh, che il ciclo di fa, quando un programma viene eseguito con un ciclo for, è
ogni volta che il computer viene eseguito tramite questo ciclo, dall'alto in basso, in alto a
in basso, proprio come voi ragazzi ha fatto quando contando voi stessi e sedersi,
ancora e ancora e ancora, il computer sta
per verificare tale condizione.
E se i è minore di 10, lo farà di nuovo.
Se i è inferiore a 10, lo farà di nuovo.
Se i è inferiore a dieci, lo farà di nuovo.
In modo che sembra suggerire che Speriamo che sta cambiando.
In caso contrario, avremmo un ciclo infinito.
E infatti, io sta cambiando, perché la ultima cosa, dopo il punto e virgola non ci
è la sintassi un po 'criptico di i + +.
Ma quelli di voi che avete fatto questo prima, che significa solo
molto semplicemente che cosa?
>> STUDENTI: [interponendo VOCI].
>> DAVID MALAN: Aggiungi 1 a i.
Incrementa i.
Così abbiamo visto un puzzle Scratch pezzo per questo, in realtà.
L'aspetto non era come i + +, ma che, proprio significa, molto semplicemente, incrementare il
Apprezzo i di 1 ogni volta che si esegue questa operazione.
Quindi, letteralmente, si inizia inizializzando i per 0.
È quindi controllare la vostra condizione.
È 0 a meno di 10?
Sì.
Andiamo attraverso il ciclo.
>> La prossima cosa che io rivendico il computer di intenzione di fare è che sta andando
per incrementare i.
Così i è ora 1.
Si verifica la condizione.
È 1 meno di 10?
Certo.
Così lo fa di nuovo.
Allora incrementa i + + a 2.
È 2 a meno di 10?
Sì.
E ancora e ancora e ancora.
E alla fine, a causa della plus-plussing, si arriva a i è uguale a 10.
È di 10 meno di 10?
Beh, ovviamente no.
E questo è il punto in cui il ciclo si ferma solo.
E se hai più il codice su schermo in basso, il computer
procede per eseguire tale codice invece.
>> Quindi, di nuovo, anche se questo sta per guardare e sentire un po 'strano a
primo, sicuramente per quelli di voi che non hanno mai programmato prima,
letteralmente riduce concettualmente a ciò che è altrimenti molto
di puzzle semplice pezzo in Scratch.
>> Va bene, ho promesso che non ci sarebbe essere altri analoghi in Scratch.
C'è anche questo.
E abbiamo visto questa brevemente ultima volta.
Ma ricordate sempre il bloccare a zero?
Lo fa solo qualcosa per sempre?
Ho affermato che si potrebbe implementare questo in questo modo.
E si può effettivamente realizzare questo in un sacco di modi diversi.
>> Ma il ciclo while è solo un diverso modo in C di esprimere se stessi.
Alla fine della giornata, non si può fare qualsiasi cosa con un ciclo while che si
non è possibile con un ciclo for.
Quindi sono alla fine del funzionalmente lo stesso giorno.
Ma permette di esprimerti un po 'diverso in
seguente modo.
>> Con il ciclo while, è quello che c'è in parentesi che è controllato ancora e
ancora e ancora.
E non appena che l'espressione è falsa, poi il ciclo si interrompe l'esecuzione,
e il computer procede a eseguire qualunque altro codice che
avere nel vostro file.
>> Ma ciò che è interessante è che ho digitato letteralmente vero.
E vero è un tipo di valore booleano, un valore vero o falso.
Quindi potrebbe mai diventare vero false se ho letteralmente
hard-coded nel mio programma?
Quindi no.
E 'un po' strano che ho fatto questo.
Ma vero è vero.
Non c'è più-plussing.
Non c'è uso di variabili qui.
Quindi perché a livello di codice, mentre è vero, questo ciclo sta andando sempre di valutare
ancora e ancora e ancora.
>> Così come molte volte è il mondo ciao andare in stampa sullo schermo?
Per sempre.
Un numero infinito di volte fino batteria muore o qualche altra esterne
evento si verifica.
Quindi questo non è probabilmente il miglior programma scrivere, poiché se l'utente
non può mai lasciare il tuo programma, è probabilmente non è quello desiderato.
>> Ma a volte, i programmi dovrebbero hanno un ciclo infinito.
Per esempio, se il computer ha un orologio su di esso, certamente sarebbe
bello se il vostro orologio si fa a mantenere l'aggiornamento sé sempre, seppur una volta
seconda o una volta al minuto o qualcosa di simile.
Loop Così anche infiniti hanno il loro posto.
>> D'accordo.
Infine, questa.
E questo è un po 'diverso funzionalmente, e torneremo a
questo probabilmente in Pset 1.
Ma c'è un altro tipo di ciclo chiamato un ciclo Do While.
E l'unica differenza tra un fare mentre loop e, dicono, un ciclo while,
è che la condizione è verificata non prima di eseguire il codice, ma dopo
si esegue il codice.
Così in alto per l'istante loop, mentre il fare, mentre
controlla in fondo.
>> E questo significa solo che il ciclo while tipicamente eseguire più volte
o di un minor numero di volte che un ciclo while?
Potenzialmente più volte, perché un fare ciclo while è chiaramente dicendo fare questo,
solo dopo questo punto si controlla se la condizione interna del
tra parentesi è vero.
>> Quindi vedremo di nuovo probabilmente nel Ptaratura 1.
Se mai voglia di fare qualcosa di a almeno una volta e poi magari un po 'di più
volte, questo è un buon costrutto da utilizzare.
Ma un ciclo while, invece, sarà controllare prima la sua condizione.
E questo è tutto per il loop in C, DO mentre, mentre, e per i cicli.
E ancora, mappano abbastanza bene indietro a zero, tranne questo non
piuttosto hanno la stessa analogico in Scratch.
>> Beh, che dire, ora, le variabili?
Quindi questo è come ho dichiarato una variabile sintatticamente l'altro giorno.
Ho avuto un int, che ho sostenuto è un numero intero.
Ho poi avuto una variabile chiamata contatore, e poi una virgola.
Così che cosa è questa linea di codice che fa?
Questo è, molto semplicemente, che dichiara una variabile -
che è, chiedendo al computer, dammi qualche ricordo, mi danno alcuni bit - in
che posso conservare cosa?
Un int.
E il punto e virgola significa solo fine della linea di codice.
>> Ora, la seconda linea è probabilmente abbastanza da indovinare.
Che cosa è counter = 0; fare?
E 'assegnazione da 0 a contrastare.
E quindi questa è l'altra cosa che è un po 'fastidioso
rispetto, ad esempio, l'algebra.
Mentre in algebra, significa il segno di uguale pari, qui in C, la parità
segno significa assegnazione.
Quindi significa mettere ciò che è a destra in ciò che è a sinistra.
E vedremo un altro simbolo, uguale pari, quando vogliamo testare effettivamente
per la qualità, un po 'fastidioso.
>> Ma questo è un po inefficiente.
È un po 'fastidioso che ho per dichiarare una variabile e
poi dargli un valore.
Quindi C in realtà ci permette di semplificare questo e basta fare tutto in una volta.
È possibile dichiarare la variabile sulla sinistra.
Si può ancora fare l'assegnazione del destra mettendo quel segno uguale in
mezzo.
Così alla fine della giornata, questi due sono equivalente, ma questo, francamente,
è probabilmente l'abitudine migliore per entrare in solo perché è un po 'meno
codice, è un po 'più facile da leggere, ed è appena stringe
il codice, per così dire.
>> Tutte le domande finora sugli anelli, sulle variabili, sulle condizioni, sui
Booleani, sia tecnicamente o concettuale?
D'accordo.
Così ora questo successivo ottiene un po 'più interessante.
E questo è l'esempio che ho messo scorso tempo che appena mappa un esempio Scratch
oltre a C.
>> Così una funzione.
In parole povere, che cosa è una funzione?
Avuto modo di essere più audace con la vostra risposta.
Che cos'è una funzione?
>> STUDENTE: Fa qualcosa.
>> DAVID MALAN: Cosa e 'quello?
>> STUDENTE: Fa qualcosa.
>> DAVID MALAN: Fa qualcosa.
OK.
Inizieremo lì.
Quindi una funzione fa qualcosa.
Quindi è un pezzo di codice che è essenzialmente attuata altrove, che
anzi fa qualcosa.
Ora, la cosa interessante di una funzione è che può prendere in ingresso,
e può produrre output.
E diciamo effettivamente prendere uno sguardo a questo.
>> Così l'uomo dietro la tenda è stato deliberato un momento fa.
Qui abbiamo un tavolo.
Ma supponiamo che questo in realtà rappresenta una grande scatola.
Quindi questa è una cosiddetta scatola nera.
E, in generale, nel disegno, in calcolatore scienza, scatole nere appena si riferiscono a
parti di funzionalità che qualcuno ha implementato, e non fare
necessariamente conosce o si cura come è attuato sotto la cappa.
Hai appena interessa che questa scatola nera, che vedremo ora iniziare a chiamare un
funzione, fa qualcosa.
>> Così, per esempio, se questa scatola nera sul la fase qui rappresenta printf, un
funzione, lo so da esempi precedenti printf che prende uno o più
argomenti, e il primo di questi argomenti dovrebbero essere una stringa, come
"Ciao, mondo". Beh, se io sono la persona scrivere il programma, e voglio
utilizzare printf, io, per esempio, potrebbe prendere un pezzo di carta bianca qui e un
pennarello nero e scrivere su di esso -
Ho scritto male "mondo" -
H-E-L-L-O.
>> Quindi mi prendo il mio pennarello nero e io scrivere, così grande e leggibile come posso su
questo pezzo di carta, "ciao, mondo", e ora io rivendico questa è la mia tesi.
Questa è una stringa rappresentata con un pezzo di carta bianca.
E il mio ingresso ora alla funzione printf sta per essere presente.
Quindi vi invito printf, passando tale argomento come input ad esso.
>> E ora, io non so come la persona che ha scriveva printf lo ha fatto anni fa, ma
So dalla sua documentazione il suo scopo nella vita è quello di stampare quello che ho
fornire ad essa come input.
E così, anche se questa implementazione è a mia insaputa
sotto la cappa, ora Vedo, oh, è fatto.
Esso ha stampato qualcosa sullo schermo.
E ora il controllo del programma, se ci erano più righe di codice, avrebbe
ora sono tornati a me.
E quindi il fatto che Colton -
benedica il suo cuore, si nasconde qui sotto un tavolo di fronte a tutti voi -
è intenzionale nel senso che io non lo so e non mi importa come printf è
implementato.
So solo che, ancora una volta, dalla sua documentazione, cosa fa e come mi
dovrei usarlo.
>> Ora, ricordare che printf potrebbe ottenere un po 'più sofisticato.
Ancora una volta, stiamo solo parlando del equivalente del blocco di Say Scratch.
Ma ho fatto anche l'ultima volta.
Volevo fare il mio programma ciao un poco più dinamico e non solo difficile
Codice di qualcosa come "mondo", e sicuramente non è difficile codice qualcosa
arbitrario come D-A-V-I-D nel programma.
Volevo chiedere all'utente per la sua nome, e poi fare qualcosa con
questa stringa che essi forniscono.
>> Quindi c'è qualcosa di un po 'diverso qui. printf, un momento fa,
ha, infatti, fare qualcosa, ma non ha prodotto nulla per me.
Giusto?
Colton non mi consegnare nulla indietro, nessun pezzo di carta.
C'era solo un effetto collaterale.
Il mio fornitura "ciao, mondo" come un argomento portato Colton nel
effetto collaterale di una parola, alcune parole, che appare sullo schermo.
>> GetString, però, è un po ' diverso. getstring è anche un
funzionare, ma restituisce qualche valore.
Non solo hanno un effetto collaterale estetico.
In realtà mi dà, la persona chiamata o usando la funzione,
qualcosa di nuovo.
Quindi, in questo caso, è getstring chiamato con GetString aperto
parentesi, vicino parentesi.
Non GetString, pertanto, prendere eventuali argomenti o di ingresso?
No, non lo sembra.
Il suo scopo nella vita è solo per ottenere una stringa.
Non ha bisogno di più dettagli di quello.
Quindi, mi permetta di andare avanti e far finta che, ancora una volta, questa scatola nera non è printf,
ma GetString, e mi permetta, la persona scrivere questo programma, vedere o usare
getString semplicemente scrivendo G-E-T-S-T-R-I-N-G, aperto paren, close
parentesi, GetString.
>> Ora, non ho idea di come il personale CS50 implementato GetString, ma so che
se aspetto abbastanza a lungo, che farà la sua cosa sotto il cofano, magari usando
alcune variabili, magari usando un po 'di condizioni, magari usando alcuni loop,
magari usando alcune funzioni, magari usando -
solo cercando di stallo - magari utilizzando alcune altre funzioni di programmazione.
Ma se aspetto abbastanza a lungo - in realtà, nel computer, questo accade
super veloce -
se aspetto abbastanza a lungo, questa funzione GetString sta per ottenere una stringa
da parte dell'utente, che è presumibilmente scrivendo fuori sulla loro tastiera, e
poi, quando si è fatto sempre getstring quei caratteri da parte dell'utente
e loro memorizzazione in una stringa, che funzione, GetString, sta per avere
pronto per me un po 'di potenza di cui sono andando a recuperare attraverso la
operatore di assegnazione.
>> E se me ne vado, anzi, in uscita qui, Obosi ha generosamente
partecipato, senza conoscere questo in avanzare, scrivendo il suo nome su questo
variabile, che sta rappresentando una stringa.
Ora, l'operatore di assegnazione significa, anche anche se questo potrebbe sentire un po '
ridondante, io in realtà ho bisogno di per fare una copia di questo.
Perché sulla mano sinistra lato - whoops! -
notare che io essenzialmente ho stringa nominare dal lato sinistro.
Così ho anche intenzione di fare una copia di questo.
E questo è un po 'una bugia, perché vedremo in una settimana o due di
momento che le stringhe non sono in realtà quello che sembrano essere.
>> Ma per ora, qui è il valore di ritorno.
Qui è la mia copia di esso dopo utilizzando l'operatore di assegnazione.
E ora, che cosa voglio fare dopo?
Ora abbiamo la seconda di due righe di codice.
Quindi ora voglio chiamare printf.
Facciamo finta adesso che il nero scatola è tornato di nuovo ad essere
printf e non GetString.
>> Printf questa volta sta per prendere il numero di argomenti?
Quindi guarda, è come due.
Ci sono due virgole in là, ma uno di quei virgole, e '
all'interno delle virgolette.
Quindi, il primo argomento è letteralmente sta per essere presente.
H-E-L-L-O, virgola, cento s, backslash-n.
E ora sto fornendo non un argomento, ma due argomenti di printf.
>> E cosa printf deve fare con questi due ingressi dopo che li passano
come argomenti?
Si suppone di prendere la seconda di loro, che ho chiamato il nome, in modo che il
secondo pezzo di carta che ho scritto fuori un momento fa si chiama nome.
E 'intenzione di spina del valore all'interno di tale variabile nel segnaposto,
% S, in modo che, ancora una volta, in un attimo di tempo, vedremo un effetto collaterale di
dopo aver chiamato printf, per cui ora ci vedere non "ciao, mondo", ma "ciao,
Obosi. "
>> Quindi un grande applauso a tutti e due i nostri volontari, solo uno dei quali conoscevano
questo sarebbe successo.
D'accordo.
Così, forse, semplice come quello era, certamente, se avete già familiarità
con i quali, si spera che non sarà mai dimenticare che la particolare visuale di come
funzioni di lavoro.
>> Quindi c'è più di una semplice GetString.
All'interno della biblioteca CS50, c'è un intero gruppo di funzioni, tutte
sono capitalizzati solo per chiarire che abbiamo scritto queste funzioni.
Tipicamente, in C, quasi ogni altra funzione che verrà utilizzato è minuscolo.
Ma abbiamo volutamente usiamo le lettere maiuscole solo per chiarire che questi
sono ruote di formazione di sorta che faremo utilizzare solo per un paio di settimane che
semplificare il processo di ottenere input dall'utente.
>> La biblioteca CS50 non fa nulla che voi stessi non potrebbe fare da
semplicemente utilizzando il codice C da un libro di testo oldschool.
Ma, ancora una volta, li usiamo come formazione ruote del genere solo per un paio di
settimane, in modo da poter eliminare il complessità che presto capito
voi stessi di fare qualcosa come relativamente semplice da ottenere
input da un utente.
>> Così sapere che avrete accesso a GetChar, getDouble -
raddoppiare.
Come si chiama - e poi GetFloat.
Che cosa è un float?
Cominciamo lì.
>> STUDENTE: [incomprensibile].
>> DAVID MALAN: Già.
Si tratta di un numero con un punto decimale.
Così mentre un int è un numero intero, che è solo un numero da 0 a 9,
certo numero di ripetizioni della stessa, un galleggiante è qualcosa
con un punto decimale.
E un doppio, nel frattempo, è anche un numero con un punto decimale, ma più
numeri dopo la virgola punto, potenzialmente.
>> Così ci arriveremo di nuovo a questo non molto.
Ma tipicamente, ciascuno di questi tipi di dati, ciascuno di questi tipi di variabili
che una libreria come la nostra può tornare te, utilizzare un diverso numero di bit a
memorizzare le informazioni.
In genere, un Char, che significa semplicemente un carattere, utilizza 8 bit.
E questo è effettivamente coerente con la nostra byte di volontari scorsa settimana che
si avvicinò e rappresentato uno Carattere ASCII in un momento.
Quindi un Char è di 8 bit.
>> Un galleggiante sembra essere 32 bit, tipicamente.
E un doppio, come si può immaginare, è in realtà i 64 bit, che è appena più,
il che significa che si può avere più grande numeri o più precisione.
Ma ancora una volta, più su che un'altra volta.
GetLongLong, nel frattempo, anche se stupidamente nome, è in realtà solo una
numero intero che è due volte più grande, il doppio lunga, potenzialmente, come un normale
numero intero, 64 bit invece di 32.
E getString abbiamo usato.
>> Ma si scopre, nella biblioteca CS50, che viene realizzato, come vedremo, in
la forma dei due file, uno dei quali è chiamato cs50.h, ha due altri
tipi di dati in essa.
Booleani non esistono in C. Si può li simulare da solo utilizzando 0 e 1
durante i vostri programmi.
Ma siamo in biblioteca CS50 abbiamo creato i simboli "true" e "false"
per rappresentare 1 e 0 in modo da non devono codificare qualcosa
letteralmente come 1 e 0.
Ma vedremo di nuovo quelle.
>> String, troppo, non esiste.
Ed è per questo che ho detto che è un po 'di una bugia bianca per ora.
Ma faremo buccia indietro che strato non molto.
Ma per ora, una stringa è un sequenza di caratteri.
>> Nel frattempo, in C, è infatti avere diversi tipi di dati.
AVVISO Questi sono minuscole.
Quindi le funzioni che avete visto poco fa sono funzioni scritte da CS50 che
tornerà a voi un valore che cade in una di queste categorie.
>> Un cheat sheet paio solo di piantare il seme qui. printf non solo
prendere% s come segnaposto.
Prende% d per gli interi decimali, o% Vorrei lavorare pure.
% F è flottante valori punto. % C è per un char, se si vuole collegare un solo
carattere in una stringa preformattato come abbiamo fatto finora, è possibile utilizzare% c.
>> E poi, un po 'fastidioso,% LLD è per un lungo, lungo intero decimale,
il che significa che solo se hai bisogno di una realtà numero grande e si sta utilizzando qualcosa
chiamato un lungo lungo, che verremo torna in un pset, è possibile utilizzare% LLD per
raccontare printf, collegare una davvero grande integer qui attraverso la sua seconda o
qualche altro argomento.
>> E, infine, ho promesso che c'è qualche altra fuga
sequenze che supporta printf.
Abbiamo visto backslash-n.
Backslash-r si può vedere.
E 'una sorta di una cosa vecchia scuola.
Se avete mai usato un vero e macchina da scrivere anni fa e hai tirato su la manovella
che ruotava non solo la ruota per spostare la scaletta, ma ha anche spostato il
cosa completamente tutta la strada verso sinistra, beh, backslash-r basta
muove essenzialmente il cursore indietro l'inizio della linea
senza spostarlo verso il basso.
Ma ancora una volta, più su quello, forse, in futuro.
>> Backslash-citazione, backslash-doppie virgolette, backslash-backslash è il
soluzione al piccolo piccolo enigma Alludevo prima.
E backslash-0 è in realtà molto interessante.
Ma torniamo al che tra non molto.
>> Quindi, mi permetta di andare in, ora, il CS50 apparecchio, e cerchiamo di fare in realtà un
rapido riscaldamento con uno degli esempi abbiamo già e poi passare a
qualcosa di un po 'più complesso.
Quindi, se io apro il mio programma chiamato gedit -
questo è il mio editor grafico.
E posso farlo -
Lasciatemi chiudere quella finestra lì -
per mezzo di questa icona quaggiù, gedit, in basso a sinistra
angolo accanto al menu.
>> Ho intenzione di andare avanti e progredire, e salvare questo esempio in, diciamo, John
Cartella di Harvard.
Cartella di John Harvard è solo la sua casa directory in cui tutti i suoi file di vivere
per impostazione predefinita.
E ho intenzione di salvare questo come un file chiamato ciao-0.C.
E io ho scelto questo nome proprio così allinea con il codice di esempio sul
sito del corso e nel YouTube video online.
>> Così ora ho intenzione di cominciare a scrivere il mio primo programma.
Permettetemi di zoomare per leggibilità.
E ho intenzione di andare avanti e dire: int void main, che è proprio così
giallo pezzo di puzzle che avvia un programma.
Ho preso l'abitudine di sopra del anni di apertura la mia parentesi graffa, quindi
anche di chiuderlo e poi tornare a dove voglio mettere il mio codice, basta
perché mi aiuta a mantenere tutto equilibrata, soprattutto perché il mio
programma ottiene lungo.
>> Ed ora, qui, ho intenzione di andare avanti e dire, printf, tra virgolette,
ciao mondo, backslash-n, vicino citazione, parentesi chiusa, punto e virgola.
Quindi sto solo ripetendo tutto quello che abbiamo state dando per scontato finora.
Ora sto andando a diminuire.
>> E questa finestra di terminale quaggiù, cosa ho il permesso di fare in questo nero
e finestra bianca?
Cosa posso usare per?
Quindi questo è dove ho eseguito i comandi e dove posso compilare cose.
E ho intenzione di mantenerlo semplice.
Ho intenzione di utilizzare un programma di Fai chiamato, che non è
tecnicamente un compilatore.
Chiamato Clang del compilatore, ma torneremo a che in un
settimana o due di tempo.
>> Per ora, sto solo andando a digitare make ciao-0, ma quelli di voi che sono stati
confronto nelle vostre menti ciò che ho appena digitato a quello che avrei scritto può
So già che ho fatto qualcosa che non va qui.
Ora, ci sono chiaramente alcuni errori.
Prima ancora di guardare a ciò che sono, qualunque pensieri su ciò che ho fatto di sbagliato?
>> STUDENTI: [interponendo VOCI].
>> DAVID MALAN: Già.
Mi manca file di intestazione della libreria.
Uno di questi file. H sono chiamati intestazione file, e collettivamente
appartengono a cose chiamate librerie.
Le biblioteche sono solo pezzi di codice che altre persone hanno scritto.
Quindi la norma [? i] biblioteca? è un raccolta di file contenenti codice
che altre persone hanno scritto.
>> Così mi manca quello.
Allora perché mi appare un errore?
Bene, lasciate scorrere indietro fino a la mia finestra di terminale qui.
E purtroppo, in C, come in molti linguaggi di programmazione, in particolare
se è tutto nuovo per voi, l'errore messaggi sono precisi, ma sono anche
piuttosto criptico.
E l'errore qui, in rosso, è "Funzione di libreria dichiarando implicitamente
printf con il tipo ", e poi scorre alla riga successiva, "int const char *,
... "C'è solo molto travolgente rapidamente.
>> Ma quello che si dovrebbe cominciare a fare, se, di nuovo, di nuovo da tutto questo, è solo per
cominciare per cercare parole chiave.
Chiaramente, potrei non capire la metà delle parole che sto vedendo ancora.
Sarà, però, nel giro di una settimana.
Ma vedo printf.
E che dovrebbe iniziare, in breve tempo, a rinfrescare la memoria, tutto a posto, printf.
Qualcosa non va con printf.
Ho Spell sbagliato?
No, non sembra che - oh.
Non posso usare a meno che non insegno il compilatore che esiste.
E così, ancora una volta, vai con il tuo istinto, anche se in realtà non capisci
i messaggi di errore.
>> E in effetti, la soluzione è quella appena includere nella parte superiore del file
così, salvare di nuovo il mio file con Control-S o il menu File.
E se io ora torno qui, Sto per cancellare questo.
Control-L è solo un modo piacevole per cancellare lo schermo.
E poi ho intenzione di scrivere "fare ciao 0 "Enter, e ora vedo ancora un
sequenza di simboli criptici, ma torneremo a questo.
Questo è quello che fanno è fare per voi.
E 'l'automazione del processo di assunzione un comando abbastanza fastidioso che coinvolge
Clang, il compilatore vero e proprio.
Ma il fatto che ho ricevuto nessun errore significa che questa cosa dovrebbe funzionare.
>> Così ora sto andando a fare - mi permetta di zoomare di nuovo -
./hello-0 entrare, e anzi, vedo "Ciao, mondo". Quindi cerchiamo di migliorare la società
questo sempre leggermente solo per replicare i passi che intendevamo.
Ho intenzione di rinominare questo con Salva con nome per hello1.c.
E ora ho intenzione di dichiarare una variabile chiamato nome, così il nome della stringa,
e ho intenzione di mettere in essa il valore tra virgolette
D-A-V-I-D close-quote virgola.
E ora ho intenzione di sostituire il "mondo" con quale segnaposto per una stringa?
% S.
>> E ora, come molti argomenti dovrebbe printf prendere questo tempo?
Quindi due.
Così vado al di fuori delle virgolette.
Digito "nome", dopo una virgola.
Ma ho fatto qualcosa che non va questa volta.
Ma supponiamo che non ho fatto rendersi conto che ancora.
Lasciami andare qui.
>> E notate, troppo, sto diventando un po ' annoiato di digitare "make ciao 0" tutte le
tempo, "make" e tutto questo.
Così, si scopre, a Linus è possibile spesso colpito la freccia in alto sulla
tastiera, e si può effettivamente scorrere attraverso tutti i comandi che ho
eseguiti precedente a questo momento.
Quindi, se lo faccio, Su, Su, c'è fare ciao 0.
Non voglio questo.
Voglio solo cambiare la situazione a ciao 1 questo momento, Enter.
Alla fine, che verrà risparmiare un po 'di tempo.
>> D'accordo.
Purtroppo, non è un errore.
Così mi permetta di scorrere verso l'alto.
Questo sembra davvero macellato questo programma.
Voglio dire, il mio dio, è due righe di codice, e le sue 10 righe di errori.
Ma guardate la prima in alto.
L'uso di stringa identificatore non dichiarato.
Ti voglio dire standard di I N?
No non l'ho fatto.
Intendevo stringa.
>> Ma dove è la variabile stringa tipo dichiarato, dd che diciamo?
Quindi è nella CS50 biblioteca.
Quindi non basta, in questi primi paio di settimane, giusto per usare
quello C ci dà.
Ho anche intenzione di andare qui, e io potrebbe mettere sopra o sotto, ma io
basta tenere alfabetico per mantenere le cose ordinate.
Ho intenzione di includere cs50.h, che è pre-installato per
si sull'apparecchio CS50.
Ed è open source, quindi, anche le persone su internet può utilizzare sul loro
proprio computer.
Ma si tratta con l'apparecchio CS50.
>> Così ora lasciami andare indietro e ricompilare con questo fanno ciao 1.
Dannazione.
Ancora un altro errore.
Permettetemi di scorrimento verso l'alto per il primo, però.
Questo è un po 'complessa.
Costante carattere multi-carattere.
Questo non mi sta aiutando.
Ma notate, Clang è almeno un po ' po 'decente, per cui con un po'
verde simbolo caret, sta dicendo qui è dove ho fatto un casino.
Perché si è rivolto, con quel piccolo freccia verde, per la sola quota prossima
a mio nome?
>> Quindi questa è una delle cose che hai appena abituarsi, soprattutto se si è stati
programmazione in Python, o JavaScript, o di altre lingue in cui questo dettaglio
non importa.
In C, lo fa materia.
Se si dichiara una stringa, che è una sequenza di 0 o più caratteri,
effettivamente necessario utilizzare le virgolette doppie.
Così ho davvero bisogno di cambiare questo ritorno per aprire citazione, chiudere citazione, con
doppie virgolette.
Le virgolette semplici hanno il loro posto, ma solo quando si utilizza individuale
caratteri, ma più su che un'altra volta.
Per ora, le virgolette doppie sono necessari.
>> Così ora, lasciatemi tornare al mio terminale finestra, fare ciao 1.
E chi è fiducioso?
È questo programma ora sta andando per compilare correttamente?
OK.
Così tre di noi pensano questo.
D'accordo.
Invio.
Ed effettivamente ha fatto.
Quindi non c'è nessun errore questa volta, anche se questo programma è ottenuto un po '
più complesso.
Se ora faccio dot barra ciao 1, Enter, è andare a dire "ciao, David."
>> Ma facciamo la terza iterazione di questo, dove la
programma è veramente dinamico.
Lasciami andare avanti e cambiare il file nome, solo per coerenza con il
file avrete a disposizione a voi in seguito on-line.
Invio.
E ora ho intenzione di andare in e non memorizzare "David" qui hard coded.
Che cosa potevo fare per molto semplicemente migliorare questo programma?
>> Potrei chiamare GetString.
Potrebbe essere un po 'ciò che non è ovvio per accadere, quindi vado
realmente per aggiungere un'altra linea, printf, e dire il nome, del colon, vicino citazione, appena
per dare un prompt all'utente sullo schermo.
E ora ho intenzione di andare qui, e sono intenzione di utilizzare il mio tasto di scelta rapida.
Ho intenzione di andare su, su, e cambiare ciao ciao da 1 a 2, Invio.
E per fortuna, sto facendo progressi.
>> E ora ho intenzione di salire al punto barra ciao e
cambiare la situazione a 2, Invio.
E ora il mio programma -
Io Zoom In - è sempre un po 'più carina.
Nome sta per essere, diciamo Rob questo momento, Enter, ciao, Rob.
Siamo in grado di farlo di nuovo.
Nome, Lauren, Enter.
Nome, Joseph, Enter.
Nome, cerchiamo di essere difficile, Invio.
Eh.
Non è proprio un bug.
Quindi è solo un po 'brutto.
Quindi forse potremmo risolvere questo in futuro, non ora.
>> Ma come ti istintivamente andare su di indirizzamento
che sfida particolare?
Sembra proprio stupido.
Come si fa a evitare le cose guardando stupido?
Così abbiamo potuto fare, OK, ho sentito un paio delle cose, una condizione e un ciclo.
Potremmo usare, una, una condizione, per verificare qual è la lunghezza della stringa
l'utente ci ha dato?
E se è 0, è solo tra virgolette, semplicemente premere Invio, quindi
forse dovrei urlare contro di loro e chiederà di nuovo.
Ma come si fa a loro ancora il prompt?
Beh, ho anche sentito loop, e ho potuto farlo ancora e ancora e ancora
chiedendo all'utente la stessa cosa.
>> Bene, vediamo di fare un altro esempio utilizzando un diverso
funzione nella libreria CS50.
Vorrei concludere questo file.
Permettetemi di crearne uno nuovo.
E io ti chiamo adder.c, solo perché è facile fare semplice aritmetica,
anche se questo sarà completamente deludente con quello che si potrebbe fare
con qualsiasi computer moderno.
>> Ma mi permetta di andare avanti ora e -
Ho imparato la lezione ultima volta - includere cs50.h, comprendono stdio.h, int
void main, il quale, per ora, mi limiterò a prendiamo sulla fede cieca, ma si suppone che
che capire che cosa questo significa che prima a lungo.
E ho intenzione di dire qualcosa come "dammi un int."
>> E ora, come faccio a ottenere un int?
Voglio dichiarare in ultima analisi, una variabile chiamato x di tipo int e
memorizzare in esso un intero da parte dell'utente.
Così che era un boccone.
Ma se qualcuno vuole proporre, come posso dichiarare un intero chiamato x?
X int.
>> Quindi è davvero così semplice.
Dammi un int.
Chiamalo x.
Ora uso l'operatore di assegnazione.
E come faccio Store dal lasciato un valore dell'utente?
Non voglio chiamare GetString, ovviamente, ma piuttosto getint.
Qualsiasi argomento?
No.
Quindi è aperta parentesi, vicino paren immediatamente, e poi una
virgola termina la linea.
>> Ora vorrei farlo di nuovo.
Dammi un altro int.
Questa volta farò int, cerchiamo di chiamano y, uguale getint.
E ora fammi fare qualcosa di super-semplice come po 'di matematica.
Così printf, la somma di% d è il segnaposto per un int.
E% d, periodo, backslash-n.
>> D'accordo.
Quindi questo non è in realtà la matematica.
Ma se io voglio dire la somma di questo valore più questo valore è uguale a questo
altro valore, come molti argomenti in totale dovrei dare printf,
in definitiva?
Così quattro, giusto?
Questa stringa e quindi i tre valori.
Quindi x è il primo voglio essere collegato prima al% d.
y sta per essere il prossimo.
>> E ora mi sorta di voglia di dire z, z ma non esiste.
Ma questo non è un grosso problema.
Perché, cosa vorresti fare istintivamente, specialmente se si ha un
calcolatrice grafica, che cosa tipo?
Che ne dici di x + y?
Quindi non è una variabile reale.
E 'solo la somma di due altre variabili.
E questo è perfettamente legittimo.
C comprende certamente semplice l'aritmetica come questo.
>> Punto e virgola, salvare.
Ora lasciami andare qui e digitare make vipera, Invio.
Nessun errore, quindi questo è il progresso troppo.
Digitare vipera.
E un altro tasto di scelta rapida, se si inizia ad annoiarsi
con tutti i comandi -
se si inizia a digitare un comando, come dot tagliare annuncio, e questo è dove il vostro
noia calci, di solito si può colpire Tab per avere il computer di finire il
resto della frase per voi se non è cosa ambigua dovrebbe venire dopo annuncio.
>> Quindi, mi permetta di andare avanti ora e si fa clic su Invio.
Dammi un int, 1, 2, e per fortuna, è 3.
Ma, come sempre, il test dei programmi non dovrebbe ridurre al
basta provare una volta.
Fammi provare un caso d'angolo, come negativo 1, dammi 1, e che uno
controlla pure.
E probabilmente io voglio fare un po 'di più test rigorosi, ma sono abbastanza
agio con cui questo è a.
>> Bene, ora proviamo un altro programma che questa volta utilizza un
po 'di altra sintassi.
Mi permette di creare un nuovo file.
Chiamerò questo conditions0.c di allineare con alcuni esempi di codice online.
E mi permetta di andare avanti e farlo includere cs50.h, includere
stdio.h, in void main -
OK.
Ecco fatto.
Noi abbiamo il nostro testo standard standard.
>> E questa volta ho intenzione di dire printf, "Mi piacerebbe un int, per favore," solo per
fare la richiesta un po ' più amichevole.
E ora voglio ottenere un int da parte dell'utente.
Io vado a chiamare n questo momento, proprio perché n suona come numero.
getint, e ora, che cosa fare Io voglio fare con esso?
Beh, se n è - e io ingrandire -
se n è maggiore di 0, che voglio per effettuare le seguenti -
printf "Hai scelto un numero positivo." Altra cosa, ho intenzione di scrivere printf "Tu
raccolto un negativo
numero. «Va bene.
Quindi questo programma, anche se l'ho fatto veloce, sembra giusto sintatticamente.
Fammi provare questo.
Fai la condizione 0.
Sembra funzionare.
Condizione 0, immettere.
Diamogli un int di 50.
Ho scelto un numero positivo.
Proviamo di nuovo.
Condizione 0.
Negativo 50.
Ho scelto un numero negativo.
>> Ma ora, mi permetta di scegliere ciò che continueremo chiamando un caso d'angolo, che è più
un caso interessante che si pensa potrebbe dare qualche problema, 0.
Ora, io sono abbastanza sicuro che questa è una delle quei casi limite in cui zero è
né positivo né negativo, quindi il mio programma, se in sintatticamente
correggere - si compila, si corre - non è logicamente corretta.
Quindi qual è la semplice correzione qui se voglio di rilevare, se voglio gestire n
uguale a 0 a parte?
>> Quindi, se n è uguale a 0, allora voglio dire qualcosa di simile a printf "Hai raccolto 0."
Fammi provare questo adesso.
Fammi tornare qui, deselezionare la mia finestra, e ricompilare.
Hm.
Un errore di generare.
Ma io ti voglio controllare se n è uguale a 0.
>> Quindi, di nuovo, un'altra cosa stupida per abituarsi, segno di uguale è
l'operatore di assegnazione.
Quindi questo è effettivamente in tale errore, tecnicamente, anche se il compilatore
mi ha protetto da me stesso, avremmo tecnicamente essere la copia 0 in n, che
Non è quello che voglio.
Voglio verificare l'uguaglianza con uguale uguale.
E così che ora potrebbe essere il mio migliore soluzione.
>> Lasciatemi in realtà salvare nuovamente questo come, dico, condizioni 1, per essere nuovo e migliorato.
Così ora se io ricompilare questo, renderebbe le condizioni -
whoops - rendere condizioni 1 dot barra condizioni 1, Enter, "Mi piacerebbe un int,
ti prego. "Ho intenzione di andare avanti e digitare 50.
E 'ancora buona.
Negativo 50, ancora buono.
0, e, in effetti, rilevato che ho preso 0.
>> Quindi, che altro posso fare ora con questo?
Beh, possiamo certamente fare sempre cose complesse.
Ma quello che vorrei proporre è che finiamo su questa nota qui.
Se ci tiriamo su questo, vedrai, forse, un cartone animato preferito di tuo
fino ad oggi si potrebbe non hanno mai capito.
E questo è per la qualità della risata si dovrebbe ottenere con battute CS.
Ecco, questo è giusto.
>> Ma più convincente, ho pensato che avrei ci danno un po 'di teaser per Lunedi.
Così abbiamo iniziato a utilizzare numeri interi.
Abbiamo fatto riferimento a carri allegorici.
Abbiamo anche fatto riferimento al doppio, che, ancora una volta, dare i numeri
dopo il punto decimale.
>> Ma si scopre che i carri allegorici e doppie, e, in realtà, i computer,
fondamentalmente, non può esprimere alcuni valori precisione.
Sappiamo da lezioni di matematica che si può avere un numero qualsiasi di numeri dopo la
punto decimale.
E si può anche mettere una barra verticale dire questi andare avanti per sempre.
>> Purtroppo, non si può davvero farlo in un computer.
E così i casi d'angolo presentano.
Per esempio, supponiamo che sei fare qualcosa finanziaria.
Stai facendo matematica con percentuali, e
con i dollari e centesimi.
E quei centesimi non linea necessariamente up.
Bene, si scopre che le frazioni di penny possono iniziare a sommare quando
modellato con un sistema di computer in modo tale che intelligente
gli esseri umani possono trarre vantaggio.
>> E quelli di voi che non hanno visto, mi piacerebbe di darvi un 30-secondo teaser
un film meraviglioso conosciuto come Office Space, che dipingere un quadro di un
problema dovremo affrontare prima cosa il Lunedi.
Se potessimo alzare il volume un po ', ti do 30
secondi di uffici.
>> [RIPRODUZIONE VIDEO]
>> -Voglio dire, voi, non sono state dimostrate e si arriva a mantenere il vostro posto di lavoro.
>> -In realtà, io sono stato promosso.
>> -Potrei programmare un virus che Preferirei strappare quel posto alla grande.
>> -Beh, come funziona?
>> -Ogni volta che c'è una transazione bancaria dove viene calcolato interesse, e là
sono migliaia al giorno, il computer termina con queste frazioni di centesimo.
>> -Ma io non ho intenzione di fare niente di illegale.
>> -Illegale?
Samir, questa è l'America.
>> -Dobbiamo giurare a Dio.
>> -Se nessuno conosce questa ma noi, va bene?
Nessun membro della famiglia, nessun fidanzate, nessuno.
>> -Certo.
>> -Concordo.
>> -Non preoccuparti, amico.
Non lo dirò a nessuno neanche.
>> [FINE RIPRODUZIONE VIDEO]
>> DAVID MALAN: Quindi questo è, allora, CS50, che era Office Space, e sarà tutto
senso il Lunedi.
Vediamo allora.
>> NARRATORE: Al prossimo CS50, Rob regola per essere fuori dal
Piano di pasto Harvard.