1 00:00:00,000 --> 00:00:12,410 >> [Musikk spilles] 2 00:00:12,410 --> 00:00:12,830 >> DAVID MALAN: All right. 3 00:00:12,830 --> 00:00:13,370 Velkommen tilbake. 4 00:00:13,370 --> 00:00:16,510 Dette er CS50, og dette er Uke One, Fortsatte. 5 00:00:16,510 --> 00:00:20,050 Så en av grunnene til at vi har bestått rundt teknologier som 6 00:00:20,050 --> 00:00:24,120 Google Glass er at de kommer med noe som kalles en API, et 7 00:00:24,120 --> 00:00:25,980 Application Programming Interface. 8 00:00:25,980 --> 00:00:28,830 Og hva dette betyr er at med riktige filer og med den rette 9 00:00:28,830 --> 00:00:32,850 dokumentasjon, kan du faktisk skrive programvare for selv enheter som dette. 10 00:00:32,850 --> 00:00:36,200 >> Og så hva vi har i tankene mot semestre slutten er, hvis et prosjekt 11 00:00:36,200 --> 00:00:39,310 involverer, sier Google Glass kan appell, vil vi se hva vi kan gjøre i 12 00:00:39,310 --> 00:00:42,220 når det gjelder å hekte deg opp med noen låne maskinvare samt 13 00:00:42,220 --> 00:00:46,500 offentlig tilgjengelig API, slik at du kan faktisk begynne å lage programvare 14 00:00:46,500 --> 00:00:48,630 som kjører på den samme Google Glass. 15 00:00:48,630 --> 00:00:51,710 >> En annen enhet som vi har spilt med i det siste at vi trodde kunne være 16 00:00:51,710 --> 00:00:53,910 moro på semesterets slutt er denne lille tingen her. 17 00:00:53,910 --> 00:00:56,860 Det kalles Leap Motion, og hva du er å se er teknisk sett en 18 00:00:56,860 --> 00:01:00,280 reklame for enheten, men det snakker til hva dette 19 00:01:00,280 --> 00:01:01,240 Enheten er i stand til. 20 00:01:01,240 --> 00:01:05,550 Og det, også, kommer med en API via som du kan skrive programvare for å 21 00:01:05,550 --> 00:01:10,545 styre din egen datamaskin på en måte ganske like denne minutters film her. 22 00:01:10,545 --> 00:01:12,070 >> [VIDEOAVSPILLING] 23 00:01:12,070 --> 00:02:08,002 24 00:02:08,002 --> 00:02:08,590 >> [END VIDEOAVSPILLING] 25 00:02:08,590 --> 00:02:11,190 >> Så akkurat nå, skjer denne enheten til implementeres som en liten USB 26 00:02:11,190 --> 00:02:14,290 kontakt som du kan plugge inn datamaskin, men jeg ville ikke bli overrasket 27 00:02:14,290 --> 00:02:17,930 hvis ikke lang tid før vi har slike teknologier i neste batch av PC 28 00:02:17,930 --> 00:02:20,510 og Mac-maskiner, slik at du kan, faktisk, samhandle med den i 29 00:02:20,510 --> 00:02:21,650 en måte sånn. 30 00:02:21,650 --> 00:02:24,250 Faktisk, det jeg tenkte jeg skulle gjøre, også er Jeg trakk opp en liten demonstrasjon 31 00:02:24,250 --> 00:02:25,860 programmet som følger med denne programvaren. 32 00:02:25,860 --> 00:02:28,700 Så jeg har satt den lille sensoren foran min laptop. 33 00:02:28,700 --> 00:02:32,420 >> Og som du kan se, innser det allerede at min hånd er det 34 00:02:32,420 --> 00:02:33,400 kontrollere den. 35 00:02:33,400 --> 00:02:37,900 Og alt dette programmet gjør er swimmingly små ting som dette. 36 00:02:37,900 --> 00:02:41,080 Men du kan se at, ja, Jeg har fem fingre der. 37 00:02:41,080 --> 00:02:44,270 Hvis vi kan få den til å gjøre alt 10, du kan forestille deg en pen piano 38 00:02:44,270 --> 00:02:45,390 anvendelse eller lignende. 39 00:02:45,390 --> 00:02:47,820 Så hvis du ønsker å komme opp etter klasse dag og lek med det som 40 00:02:47,820 --> 00:02:49,720 vel, er du velkommen til. 41 00:02:49,720 --> 00:02:52,930 Så mer om det mot semesterets slutt. 42 00:02:52,930 --> 00:02:54,420 >> Så et par av administrative kunngjøringer. 43 00:02:54,420 --> 00:02:58,690 En, gjør delen av denne fredag midt på dagen på cs60.net/section. 44 00:02:58,690 --> 00:03:01,260 At nettadressen er på kursets hjemmeside også. 45 00:03:01,260 --> 00:03:04,010 I mellomtiden, skjønt, supersections vil debut denne søndagen. 46 00:03:04,010 --> 00:03:07,800 Supersections er en engangs ting, fordi det tar oss litt tid til å jobbe 47 00:03:07,800 --> 00:03:09,470 ut hvem som er i hvilken seksjon og hvor. 48 00:03:09,470 --> 00:03:12,280 >> Så førstkommende søndag, vil det være en seksjon for de mindre komfortable, 49 00:03:12,280 --> 00:03:14,040 en seksjon for de mer behagelig. 50 00:03:14,040 --> 00:03:16,110 Og de av dere et sted i mellom er velkommen til å gå til 51 00:03:16,110 --> 00:03:17,850 én av eller begge eller ingen av delene. 52 00:03:17,850 --> 00:03:19,150 Begge disse vil bli filmet. 53 00:03:19,150 --> 00:03:22,740 De vil være i et større auditorium enn en seksjon normalt ville være i. 54 00:03:22,740 --> 00:03:26,110 Men målet her er å utstyre deg med noen trøst med problemet satt en, 55 00:03:26,110 --> 00:03:29,910 med C, med CS50 apparatet, dette helg, selv før du finner ut din 56 00:03:29,910 --> 00:03:31,050 formelle delen oppdrag. 57 00:03:31,050 --> 00:03:34,700 Så du møter din TF og mindre gruppe sectionmates i om 58 00:03:34,700 --> 00:03:36,350 en ukes tid. 59 00:03:36,350 --> 00:03:38,200 >> Kontortid, i mellomtiden, har pågått. 60 00:03:38,200 --> 00:03:41,020 Må ta nytte av dem i kveld eller i morgen kveld hvis du ønsker. 61 00:03:41,020 --> 00:03:43,460 Oppgavesettet 0 skyldes på fredag. 62 00:03:43,460 --> 00:03:46,680 Dette er en dag senere enn jevnlig planlagt torsdag. 63 00:03:46,680 --> 00:03:50,410 Men med problem sett en, vil du se at det inneholder noen warm-up 64 00:03:50,410 --> 00:03:52,770 øvelser som du selv kan utvide 65 00:03:52,770 --> 00:03:54,660 Torsdag frist til fredag. 66 00:03:54,660 --> 00:03:58,410 Oppgavesettet 1, i mellomtiden, vil debut på kurset hjemmeside førstkommende 67 00:03:58,410 --> 00:04:02,000 Fredag, hvis du ønsker å krølle opp med det som jeg gjorde en gang sent 68 00:04:02,000 --> 00:04:04,370 Fredag ​​kveld på rommet ditt. 69 00:04:04,370 --> 00:04:07,660 >> Så cs50.net/appliance er stedet hvor du kan få CS50 apparatet 70 00:04:07,660 --> 00:04:09,040 at vi begynte å bruke på mandag. 71 00:04:09,040 --> 00:04:10,140 Vi vil bruke det litt mer i dag. 72 00:04:10,140 --> 00:04:14,040 Men trygg på at problemet satt en spesifikasjonen vil lede deg gjennom 73 00:04:14,040 --> 00:04:16,490 nettopp trinnene du må å få den opp og kjører. 74 00:04:16,490 --> 00:04:22,120 Så ikke bekymre deg om du gjør det før PSett 1 hvis du vil helst ikke. 75 00:04:22,120 --> 00:04:22,660 >> OK. 76 00:04:22,660 --> 00:04:27,180 Så vi så på mandag kl kildekode, men i sammenheng med en ny 77 00:04:27,180 --> 00:04:30,895 programmeringsspråk, nemlig C. Og C, i motsetning til Scratch, er ikke grafisk. 78 00:04:30,895 --> 00:04:32,270 Det forundrer ikke biter. 79 00:04:32,270 --> 00:04:34,450 Det er mer engelsk-lignende syntaks. 80 00:04:34,450 --> 00:04:37,140 Og det er et par skritt involvert i faktisk skrive og kjøre en 81 00:04:37,140 --> 00:04:41,650 program i C, fordi foruten kilde kode som dette, trenger du noe 82 00:04:41,650 --> 00:04:42,890 kalt en kompilator. 83 00:04:42,890 --> 00:04:46,682 Og i lekmann vilkår, hva gjør en kompilator for oss? 84 00:04:46,682 --> 00:04:47,650 Yeah. 85 00:04:47,650 --> 00:04:51,040 >> STUDENT: Den konverterer koden at du skriver til 0'er og 1'ere. 86 00:04:51,040 --> 00:04:51,151 >> DAVID MALAN: Good. 87 00:04:51,151 --> 00:04:53,580 Så det konverterer koden som vi skrive til 0'er og 1'ere. 88 00:04:53,580 --> 00:04:57,730 Den konverterer såkalte kildekoden til objektkode, sistnevnte som ser 89 00:04:57,730 --> 00:04:59,140 litt noe sånt som dette. 90 00:04:59,140 --> 00:05:02,860 Og det er din CPU, hjernen innsiden av datamaskinen, som på grunn av 91 00:05:02,860 --> 00:05:06,280 menneskene som skapte disse datamaskinene, vite hva disse sekvensene 92 00:05:06,280 --> 00:05:07,460 av 0'er og 1'ere gjennomsnittet. 93 00:05:07,460 --> 00:05:08,640 >> Kanskje det betyr print. 94 00:05:08,640 --> 00:05:10,265 Kanskje det betyr tillegg. 95 00:05:10,265 --> 00:05:11,610 Kanskje det betyr subtraksjon. 96 00:05:11,610 --> 00:05:13,350 Kanskje det betyr vise grafikk. 97 00:05:13,350 --> 00:05:16,870 Det er forhåndsdefinerte punktmønstre at verden har besluttet mener 98 00:05:16,870 --> 00:05:17,700 visse ting. 99 00:05:17,700 --> 00:05:20,760 Men for det meste i dette kurset, vi skal jobbe på et høyere nivå, og 100 00:05:20,760 --> 00:05:24,180 Vi tar for gitt at det finnes ting som kompilatorer som kan 101 00:05:24,180 --> 00:05:27,670 gjøre våre kildekoden funksjon i måten vi har tenkt. 102 00:05:27,670 --> 00:05:31,660 >> Så programmet skrev vi først sist uke og deretter begynte å port, så å 103 00:05:31,660 --> 00:05:33,920 snakke, til C denne fortid Mandag, var dette. 104 00:05:33,920 --> 00:05:35,700 Når grønne flagget klikket, si hei. 105 00:05:35,700 --> 00:05:37,430 Dette var selvfølgelig skrevet i spillene. 106 00:05:37,430 --> 00:05:40,710 Og jeg hevdet at tilsvarende program i C så litt 107 00:05:40,710 --> 00:05:41,520 noe sånt som dette. 108 00:05:41,520 --> 00:05:45,050 >> Så det jeg tenkte vi skulle gjøre først er, la oss erte hverandre hva som ser, først 109 00:05:45,050 --> 00:05:48,790 blikk, riktignok, som ganske uforståelige syntaks, men du vil begynne å merke 110 00:05:48,790 --> 00:05:50,160 mønstre ganske raskt. 111 00:05:50,160 --> 00:05:53,770 Hva vil vi også gjøre i dag er å gi du med en mental modell for noen 112 00:05:53,770 --> 00:05:57,280 kanonisk, noen standard konstruerer i programmering. 113 00:05:57,280 --> 00:06:00,420 Og så får vi faktisk få våre hender skitne med noen eksempler, så vel. 114 00:06:00,420 --> 00:06:04,140 >> Så for de av dere mer komfortabel, innser at denne uken og deretter neste 115 00:06:04,140 --> 00:06:05,940 uke kan meget vel være litt for anmeldelse. 116 00:06:05,940 --> 00:06:08,810 Men spesielt når hacker utgave av oppgavesettet en går ut på 117 00:06:08,810 --> 00:06:12,330 Kursets hjemmeside på fredag, tror jeg du vil finne at selv som du fyller inn 118 00:06:12,330 --> 00:06:15,390 noen blanks i løpet av neste uke eller to, vil du begynne å bli stadig mer 119 00:06:15,390 --> 00:06:18,410 utfordret og møter nye og nyere ting. 120 00:06:18,410 --> 00:06:21,310 >> Så la oss erte dette programmet fra hverandre noen få linjer samtidig. 121 00:06:21,310 --> 00:06:24,140 På toppen har vi det er teknisk kalles en 122 00:06:24,140 --> 00:06:25,950 preprocessor direktiv. 123 00:06:25,950 --> 00:06:30,510 Dette er bare en linje med kode som sier med innholdet av en fil, 124 00:06:30,510 --> 00:06:35,080 kalles standard I / N, standard inngang - eller, sorry, standard I / O, standard 125 00:06:35,080 --> 00:06:38,670 input / output,. t, inne av mitt eget program. 126 00:06:38,670 --> 00:06:41,670 >> Så med andre ord, hvis jeg skrev dette program med en enkel tekst editor som 127 00:06:41,670 --> 00:06:45,260 gedit, jo enklere tilsvarende noe som Microsoft Word, som 128 00:06:45,260 --> 00:06:50,970 instruksjon, # include stdio.h, er bare kommer til å fortelle kompilatoren, ta tak i 129 00:06:50,970 --> 00:06:56,080 Innholdet i den andre filen, stdio.h, og lim dem rett her. 130 00:06:56,080 --> 00:06:57,090 >> Nå, hvorfor jeg bry meg? 131 00:06:57,090 --> 00:07:01,850 Hva var det vi hevder er innsiden av denne filen kalt stdio.h, som er lagret 132 00:07:01,850 --> 00:07:05,490 et sted på harddisken min, eller i dette tilfelle, et sted i CS50 apparatet? 133 00:07:05,490 --> 00:07:06,635 Noen andre satt den der for meg. 134 00:07:06,635 --> 00:07:09,910 Men hva er det? 135 00:07:09,910 --> 00:07:13,020 >> Ja, så det er en erklæring av en funksjon som heter printf. 136 00:07:13,020 --> 00:07:17,400 Så printf minnes den funksjonen som viser ord og tegn og 137 00:07:17,400 --> 00:07:20,160 tall på skjermen ved budgivning min. 138 00:07:20,160 --> 00:07:21,220 Men jeg ville ikke skrive det. 139 00:07:21,220 --> 00:07:22,230 CS50 ikke skrive det. 140 00:07:22,230 --> 00:07:26,990 Noen år siden skrev det, og de hovedsak ga oss oppskriften på det 141 00:07:26,990 --> 00:07:29,110 i en fil kalt stdio.h. 142 00:07:29,110 --> 00:07:33,240 Slik at første linje bare gir meg tilgang til funksjoner som noen andre 143 00:07:33,240 --> 00:07:36,500 skrev år siden, blant som er printf. 144 00:07:36,500 --> 00:07:39,450 >> Nå, neste linje jeg kommer til å vinke min hånd på, i hvert fall til neste uke. 145 00:07:39,450 --> 00:07:43,620 Men for nå, vet at int main (void) er hovedsakelig den samme som denne 146 00:07:43,620 --> 00:07:46,310 gul puslespill brikke når grønt flagg klikket. 147 00:07:46,310 --> 00:07:49,510 Verden, år siden bestemte at hvis du skriver et program i 148 00:07:49,510 --> 00:07:53,150 språk som heter C, begynner du programmet med en linje 149 00:07:53,150 --> 00:07:54,410 som ser slik ut. 150 00:07:54,410 --> 00:07:57,650 I omtrent en ukes tid, vil det gjøre fornemme hva int er, hva tomrommet er. 151 00:07:57,650 --> 00:08:00,840 Men for nå, bare tenk på det som denne gule puslespill brikke. 152 00:08:00,840 --> 00:08:04,550 >> Nå neste, har vi en klammeparentes fulgt av en annen nær klammeparentes, 153 00:08:04,550 --> 00:08:05,240 så å si. 154 00:08:05,240 --> 00:08:07,430 Og vi vil se disse gjennom programmer i C, samt 155 00:08:07,430 --> 00:08:08,930 JavaScript og PHP. 156 00:08:08,930 --> 00:08:11,345 Og disse bare kapsle relaterte linjer med kode. 157 00:08:11,345 --> 00:08:14,600 Den åpne klammeparentes hovedsak sier, her kommer noen kode. 158 00:08:14,600 --> 00:08:17,590 Og den lukkede krøllete spenne, som er vinklet i den andre retning, bare 159 00:08:17,590 --> 00:08:19,920 betyr, det er det for den relevante koden. 160 00:08:19,920 --> 00:08:22,970 >> Så saftig linje i denne første Programmet er det siste, printf, 161 00:08:22,970 --> 00:08:25,080 quote-unquote, hallo verden. 162 00:08:25,080 --> 00:08:30,670 Og jeg ringte ting mellom sitater hva siste gang? 163 00:08:30,670 --> 00:08:31,285 Så det er en streng. 164 00:08:31,285 --> 00:08:35,309 Og en streng er bare teknikken betegnelse for en sekvens av 165 00:08:35,309 --> 00:08:37,169 tegn, et ord, en setning. 166 00:08:37,169 --> 00:08:39,380 Selv en enkelt bokstav kunne være dobbelt sitert. 167 00:08:39,380 --> 00:08:41,840 Men det er en sekvens av null eller flere tegn. 168 00:08:41,840 --> 00:08:43,650 >> Backslash-n, skjønt, ser litt rart. 169 00:08:43,650 --> 00:08:46,290 Men det bare betydde noe enkelt til datamaskinen. 170 00:08:46,290 --> 00:08:48,060 Hva er omvendt skråstrek-n? 171 00:08:48,060 --> 00:08:48,570 Ny linje. 172 00:08:48,570 --> 00:08:52,490 Så det er bare spesiell sekvens av tegn på at verden har bestemt seg 173 00:08:52,490 --> 00:08:56,880 del sette et linjeskift rett der, fordi kompilatoren vil faktisk få 174 00:08:56,880 --> 00:09:02,280 forvirret, som regel, hvis du, veldig forståelig, men på feil måte, bare 175 00:09:02,280 --> 00:09:04,570 begynne å trykke Enter for å sette nye linjer i koden. 176 00:09:04,570 --> 00:09:07,150 Du må være litt mer eksplisitt med backslash-n. 177 00:09:07,150 --> 00:09:10,540 >> Og vi vil se det er noen andre slike mønstre for spesialtegn. 178 00:09:10,540 --> 00:09:14,340 For eksempel, hvis du ønsket la din tankene vandre til et hjørne tilfellet, 179 00:09:14,340 --> 00:09:18,080 anta at jeg ønsket å skrive ut en dobbelt anførselstegn på skjermen for 180 00:09:18,080 --> 00:09:21,840 uansett grunn, ville det synes å være litt problematisk, ikke sant? 181 00:09:21,840 --> 00:09:24,990 Fordi hvis jeg legger en dobbel sitat i midten av "hallo, verden," uansett 182 00:09:24,990 --> 00:09:30,120 grunnen, hvorfor det synes potensielt problematisk? 183 00:09:30,120 --> 00:09:32,180 Det bryter strengen. 184 00:09:32,180 --> 00:09:34,700 >> Kompilatoren er bare et program. 185 00:09:34,700 --> 00:09:37,210 Et program som en kompilator er bare kommer å lese koden din topp til bunn, 186 00:09:37,210 --> 00:09:37,990 venstre mot høyre. 187 00:09:37,990 --> 00:09:41,850 Og hvis ser tre doble anførselstegn i stedet av to, det er ikke til å kjenne 188 00:09:41,850 --> 00:09:45,210 hvis du mener at tingen til venstre bør være streng, eller det å 189 00:09:45,210 --> 00:09:46,570 høyre, eller hele greia. 190 00:09:46,570 --> 00:09:50,560 Det er tvetydig, og så hva en typisk kompilatoren vil gjøre er å frik bare ute, 191 00:09:50,560 --> 00:09:53,710 og gi deg noen feilmelding, og gjør du håndtere problemet. 192 00:09:53,710 --> 00:09:58,120 >> Så gitt at backslash-n betyr en ny linje, hva ville instinktene dine nå 193 00:09:58,120 --> 00:10:02,610 begynne å være hvis du ønsket å inkludere noe unormalt som en dobbel 194 00:10:02,610 --> 00:10:06,210 sitere innsiden av denne ellers siterte streng? 195 00:10:06,210 --> 00:10:07,640 Skråstrek-dobbelt anførselstegn. 196 00:10:07,640 --> 00:10:09,630 Og så får vi se dette slags mønster også. 197 00:10:09,630 --> 00:10:12,490 >> Hvis du ønsker å gjøre noe litt merkelig, vil du finne at den 198 00:10:12,490 --> 00:10:15,060 løsninger ofte følger et mønster, og backslash 199 00:10:15,060 --> 00:10:17,150 betegner en escape-sekvens. 200 00:10:17,150 --> 00:10:20,320 Og det betyr bare noe spesielt at vi trenger å representere en 201 00:10:20,320 --> 00:10:21,060 annen måte. 202 00:10:21,060 --> 00:10:23,830 Som for hvordan du representerer en skråstrek, vel, vil vi 203 00:10:23,830 --> 00:10:24,550 komme tilbake til det. 204 00:10:24,550 --> 00:10:26,930 Men svaret, også, faktisk litt opplagt. 205 00:10:26,930 --> 00:10:31,080 >> Så la oss nå introdusere noen andre programmering konstruerer 206 00:10:31,080 --> 00:10:31,915 som du så i spillene. 207 00:10:31,915 --> 00:10:34,790 Du har sikkert tatt for gitt allerede hvis du allerede har prøvd seg på 208 00:10:34,790 --> 00:10:36,060 Problemet satt 0. 209 00:10:36,060 --> 00:10:40,950 Men la oss nå introdusere syntaksen i C for disse ellers ganske intuitivt 210 00:10:40,950 --> 00:10:42,300 ideer, i det minste noen av dem. 211 00:10:42,300 --> 00:10:45,570 >> Så denne oppfatningen av en tilstand eller en gren, mens vi tidligere 212 00:10:45,570 --> 00:10:49,330 representerte det med kode som så som dette på venstre side i Scratch - 213 00:10:49,330 --> 00:10:52,200 hvis x er mindre enn y, så si det - 214 00:10:52,200 --> 00:10:56,760 i stedet nå i C - la meg finpusse inn på den enkleste sak - 215 00:10:56,760 --> 00:11:01,235 vi bare kommer til å si, hvis, åpner parentes, er noe sant - en 216 00:11:01,235 --> 00:11:04,190 Boolske uttrykket kommer til å gå hvor jeg har sagt tilstand - 217 00:11:04,190 --> 00:11:08,170 sluttparentes, så hva som er innsiden av de klammeparentes. 218 00:11:08,170 --> 00:11:11,020 >> Så også her de klammeparentes er typen som Scratch er 219 00:11:11,020 --> 00:11:12,460 U-formede biter i et puslespill. 220 00:11:12,460 --> 00:11:14,890 Hva som er inni disse klammeparentes. 221 00:11:14,890 --> 00:11:16,790 I dette tilfellet, slash slash. 222 00:11:16,790 --> 00:11:19,720 Og legg merke til dette er en fremtidsrettet slash, ikke omvendt skråstrek. 223 00:11:19,720 --> 00:11:21,440 Skråstrek, skråstrek, for de som har programmert 224 00:11:21,440 --> 00:11:23,370 før, betyr bare - 225 00:11:23,370 --> 00:11:24,190 det er bare en kommentar. 226 00:11:24,190 --> 00:11:26,630 En kommentar er ikke en linje av koden, per se. 227 00:11:26,630 --> 00:11:30,200 Det er en linje av engelsk som deg, menneske, har skrevet til deg selv 228 00:11:30,200 --> 00:11:33,540 kanskje minne deg på å gjøre noe, for å forklare til deg selv, til å forklare 229 00:11:33,540 --> 00:11:35,260 noen andre, hva koden gjør. 230 00:11:35,260 --> 00:11:37,050 Det er bare en beskrivende kommentar. 231 00:11:37,050 --> 00:11:40,880 >> Nå, selvfølgelig, kan vi ha en toveis gaffel i veien like ved å gjøre dette, en 232 00:11:40,880 --> 00:11:43,930 treveis gaffel i veien ved å gjøre dette, og hvis du fortsetter dette 233 00:11:43,930 --> 00:11:47,570 mønster, kan du ha fire-veis, fem-veis, seks-veis gafler i veien hvis 234 00:11:47,570 --> 00:11:50,150 du trenger for å håndtere, ja, at mange forhold. 235 00:11:50,150 --> 00:11:52,010 Og så merker parallellitet her - 236 00:11:52,010 --> 00:11:55,070 if (betingelse), else if (betingelse), og den eneste som er litt 237 00:11:55,070 --> 00:11:58,010 merkelig er den siste, som er nettopp det annet. 238 00:11:58,010 --> 00:12:01,170 Men igjen, er denne identisk konseptuelt, til hva vi har gjort 239 00:12:01,170 --> 00:12:04,690 dag, selv om det vil syntaksen ta litt å bli vant til. 240 00:12:04,690 --> 00:12:07,730 >> Nå, i dette eksempel, er det annen merkelig syntaks. 241 00:12:07,730 --> 00:12:11,220 Vi ser printf igjen, åpen parentes, og sluttparentes. 242 00:12:11,220 --> 00:12:13,190 Og innsiden av det en sitert streng. 243 00:12:13,190 --> 00:12:17,060 I parentesene, i sammenheng av printf, gå til venstre 244 00:12:17,060 --> 00:12:18,160 og høyre for hva? 245 00:12:18,160 --> 00:12:22,190 Hva beskriver vi at sitert strengen som mer generelt? 246 00:12:22,190 --> 00:12:23,320 >> Så det er et argument. 247 00:12:23,320 --> 00:12:26,620 Hver gang du har en funksjon, som printf, og deretter en åpen paren og en 248 00:12:26,620 --> 00:12:30,330 nær paren og noe på innsiden av det, enten det er en streng, eller en 249 00:12:30,330 --> 00:12:34,420 heltall, eller noe annet, ting i mellom disse parentes kalles 250 00:12:34,420 --> 00:12:35,110 et argument. 251 00:12:35,110 --> 00:12:37,910 >> Og et argument påvirker bare funksjonens oppførsel. 252 00:12:37,910 --> 00:12:39,990 I dette tilfellet er det ganske klart hvordan. 253 00:12:39,990 --> 00:12:44,480 x 00:12:47,720 Og printf kommer til å skrive ut akkurat det. 255 00:12:47,720 --> 00:12:51,590 Fordi sikkert, personen år siden som iverksettes printf hadde ingen anelse 256 00:12:51,590 --> 00:12:55,000 hva vi menneskelige etterfølgere var kommer til å bruke printf for. 257 00:12:55,000 --> 00:12:58,610 Så det er derfor argumenter eksisterer, til påvirke atferd etter en funksjons 258 00:12:58,610 --> 00:12:59,450 blitt skrevet. 259 00:12:59,450 --> 00:13:00,780 >> Nå, boolsk uttrykk. 260 00:13:00,780 --> 00:13:02,470 Vi har sett dette før i spillene. 261 00:13:02,470 --> 00:13:06,680 Det viser seg i C kan du også "eller" dem sammen, så å si. 262 00:13:06,680 --> 00:13:10,930 To loddrette streker betyr at denne blokken av koden, dette gjør dette, vil 263 00:13:10,930 --> 00:13:15,350 utføre hvis den første betingelsen er sann eller den andre betingelsen er sann. 264 00:13:15,350 --> 00:13:17,710 Og selv om du kanskje ikke har gjort dette i Scratch, kunne du faktisk 265 00:13:17,710 --> 00:13:20,580 gjøre dette i Scratch, og du kan også uttrykke deg annerledes - 266 00:13:20,580 --> 00:13:25,300 hvis den første tilstand og den andre tilstanden er sant, så hva er 267 00:13:25,300 --> 00:13:27,160 innsiden av klammeparentes. 268 00:13:27,160 --> 00:13:31,210 >> Og akkurat som en side, grunnen til det er en dobbel-tegn og en dobbel 269 00:13:31,210 --> 00:13:34,610 vertikale linjen, vil vi se til slutt at en enkelt vertikal stang og en 270 00:13:34,610 --> 00:13:38,710 enkelt ampersand faktisk har forskjellig mening i C. Så for nå, 271 00:13:38,710 --> 00:13:41,840 at duplisering av symboler er tilsiktet. 272 00:13:41,840 --> 00:13:45,070 >> Så la oss innføre, kort, denne annen bit av syntaks. 273 00:13:45,070 --> 00:13:48,940 Denne ikke helt bære over til Scratch, men jeg påstår at jeg kan 274 00:13:48,940 --> 00:13:55,190 gjennomføre forestillingen om en if else, hvis annet, hvis annet, hvis annet utsagn ved hjelp av 275 00:13:55,190 --> 00:13:56,760 noe som kalles en bryter uttalelse. 276 00:13:56,760 --> 00:14:00,820 Og den eneste grunnen til at dette virkelig eksisterer er å bare gi deg, programmerer, 277 00:14:00,820 --> 00:14:05,470 litt annen måte å løse noen problem, selv om det logisk 278 00:14:05,470 --> 00:14:07,340 ikke gi deg noen nye evner. 279 00:14:07,340 --> 00:14:08,530 >> Med det mener jeg dette. 280 00:14:08,530 --> 00:14:13,330 Når du sier bryteren, og deretter et mellomrom, og deretter i parenteser, inne 281 00:14:13,330 --> 00:14:14,570 som går et uttrykk - 282 00:14:14,570 --> 00:14:18,010 og dette kan være en liten ikke-innlysende i begynnelsen, men dette er ikke et argument, 283 00:14:18,010 --> 00:14:20,680 teknisk, fordi switch er ikke en funksjon. 284 00:14:20,680 --> 00:14:24,230 Så for nå, bare anta at vi bruker parentes på forskjellige steder 285 00:14:24,230 --> 00:14:25,250 for forskjellige grunner. 286 00:14:25,250 --> 00:14:29,310 >> Så bryter på uttrykket betyr at jeg kan sette en variabel innsiden av de 287 00:14:29,310 --> 00:14:31,350 parenteser der det står uttrykk. 288 00:14:31,350 --> 00:14:33,090 Og så hvis det variable - 289 00:14:33,090 --> 00:14:35,400 anta det heter x, og det er bare et heltall - 290 00:14:35,400 --> 00:14:38,900 Da kan jeg oppsummere i lysbilde min her er noe som dette. 291 00:14:38,900 --> 00:14:41,690 Hvis x er min variabel, og jeg ønsker å gjøre noe hvis x 292 00:14:41,690 --> 00:14:43,480 lik 1, kan jeg gjøre det. 293 00:14:43,480 --> 00:14:46,660 >> Hvis jeg i stedet ønsker å gjøre noe hvis x er to, kan jeg gjøre det. 294 00:14:46,660 --> 00:14:50,390 Annet, hvis jeg ønsker å gjøre noe annet helt, kan jeg ha en standard sak 295 00:14:50,390 --> 00:14:52,750 og da jeg gjør dette andre ting. 296 00:14:52,750 --> 00:14:58,730 Så på den måten, er det tilsvarende en hvis x er lik lik 1, annet hvis annet, 297 00:14:58,730 --> 00:15:01,150 men jeg nevner dette nå bare fordi vi vil se det igjen. 298 00:15:01,150 --> 00:15:03,720 Men for nå, bare vet at den finnes. 299 00:15:03,720 --> 00:15:04,220 >> OK. 300 00:15:04,220 --> 00:15:07,660 Så disse siste par er litt mer komplisert ved første øyekast, men de gjør 301 00:15:07,660 --> 00:15:09,385 noe ganske grei. 302 00:15:09,385 --> 00:15:14,410 En for loop i C er en del av koden som bare gjør noe nytt og 303 00:15:14,410 --> 00:15:15,330 igjen og igjen. 304 00:15:15,330 --> 00:15:17,590 Og den eneste irriterende ting om det er det er at det er litt kryptisk 305 00:15:17,590 --> 00:15:21,380 å uttrykke deg i denne sykliske mønster, men verden på standardisert 306 00:15:21,380 --> 00:15:22,450 på følgende måte. 307 00:15:22,450 --> 00:15:25,760 >> Når du bruker en for loop, har du fått i parenteser på nytt. 308 00:15:25,760 --> 00:15:27,570 Og legg merke til de to semikolon der inne. 309 00:15:27,570 --> 00:15:34,380 De to semikolon separate tre forskjellige uttrykk innsiden av 310 00:15:34,380 --> 00:15:35,020 parentes. 311 00:15:35,020 --> 00:15:37,170 Den ene er de såkalte initializations. 312 00:15:37,170 --> 00:15:38,830 Den ene er den såkalte stand. 313 00:15:38,830 --> 00:15:40,210 Og en er de såkalte oppdateringer. 314 00:15:40,210 --> 00:15:43,240 >> Sett på i det abstrakte, er dette fullstendig ikke-åpenbare, så la oss se 315 00:15:43,240 --> 00:15:44,630 på et konkret eksempel. 316 00:15:44,630 --> 00:15:46,720 I Scratch hadde vi en gjentakelse blokk. 317 00:15:46,720 --> 00:15:50,670 Og denne blokken sa gjenta 10 ganger, sier "Hei, verden». La meg hevder for 318 00:15:50,670 --> 00:15:53,810 nå, og vi vil komme tilbake til dette, og Dette vil også få mer kjent for 319 00:15:53,810 --> 00:15:57,345 du før lang, tilsvarende C Koden kan sies å være dette - 320 00:15:57,345 --> 00:16:02,320 en for setning og et mellomrom, et par parentes, legger merke til semikolon i 321 00:16:02,320 --> 00:16:05,730 der, som skiller tre distinkte ting, initialiseringen, 322 00:16:05,730 --> 00:16:07,320 tilstand, og oppdateringen. 323 00:16:07,320 --> 00:16:08,840 >> Og ta en gjetning hva det første gjør. 324 00:16:08,840 --> 00:16:10,690 Int i = 0. 325 00:16:10,690 --> 00:16:15,120 I grove lekmann vilkår, hva er som gjør for oss, sannsynligvis? 326 00:16:15,120 --> 00:16:15,590 Så ja. 327 00:16:15,590 --> 00:16:19,630 Det å erklære en variabel kalt i, og det er å gi det hva verdien? 328 00:16:19,630 --> 00:16:20,220 0. 329 00:16:20,220 --> 00:16:24,280 Så det å lage en variabel kalt Jeg, lagring verdien 0 i det. 330 00:16:24,280 --> 00:16:26,420 Det er den såkalte initialisering. 331 00:16:26,420 --> 00:16:29,360 >> Ok, nå har jeg hevdet før at den midtre tingen, I 332 00:16:29,360 --> 00:16:31,760 <10, er tilstanden. 333 00:16:31,760 --> 00:16:32,730 Så hva gjør? 334 00:16:32,730 --> 00:16:36,560 Vel, hva for loop gjør når en med et program for løkke blir kjørt, er 335 00:16:36,560 --> 00:16:41,050 hver gang maskinen løper igjennom denne sløyfen, fra topp til bunn, topp til 336 00:16:41,050 --> 00:16:43,740 bunnen, akkurat som dere gjorde da telle dere og sitte ned, 337 00:16:43,740 --> 00:16:47,090 igjen og igjen og igjen, maskinen går 338 00:16:47,090 --> 00:16:48,560 å sjekke at tilstanden. 339 00:16:48,560 --> 00:16:51,140 Og hvis jeg er mindre enn 10, det vil gjøre det igjen. 340 00:16:51,140 --> 00:16:53,100 Dersom i er mindre enn 10, det vil gjøre det igjen. 341 00:16:53,100 --> 00:16:55,030 Dersom i er mindre enn ti, det vil gjøre det igjen. 342 00:16:55,030 --> 00:16:57,330 Så det synes å antyde at forhåpentligvis jeg er i endring. 343 00:16:57,330 --> 00:16:59,010 Ellers ville vi ha en uendelig loop. 344 00:16:59,010 --> 00:17:02,590 Og ja, er jeg i endring, fordi siste ting etter semikolon der 345 00:17:02,590 --> 00:17:05,569 er den noe kryptiske syntaksen i + +. 346 00:17:05,569 --> 00:17:07,630 Men de av dere som har gjort dette før, betyr at bare 347 00:17:07,630 --> 00:17:08,609 ganske enkelt hva? 348 00:17:08,609 --> 00:17:09,730 >> STUDENTER: [interposing VOICES]. 349 00:17:09,730 --> 00:17:10,740 >> DAVID MALAN: Legg en til jeg. 350 00:17:10,740 --> 00:17:11,819 Økning i. 351 00:17:11,819 --> 00:17:13,910 Så vi så en Scratch puslespill stykke for det, faktisk. 352 00:17:13,910 --> 00:17:18,230 Det så ikke ut som i + +, men som bare betyr ganske enkelt, øke den 353 00:17:18,230 --> 00:17:24,040 verdsetter jeg etter en hver gang du gjør dette. 354 00:17:24,040 --> 00:17:26,910 Så bokstavelig, starter du med initialisering jeg til 0. 355 00:17:26,910 --> 00:17:29,520 Du kan deretter sjekke tilstanden. 356 00:17:29,520 --> 00:17:31,070 Er 0 mindre enn 10? 357 00:17:31,070 --> 00:17:31,730 Ja. 358 00:17:31,730 --> 00:17:32,910 Vi går gjennom løkken. 359 00:17:32,910 --> 00:17:35,150 >> Det neste jeg hevder datamaskinens kommer til å gjøre er det som skjer 360 00:17:35,150 --> 00:17:35,910 å øke i. 361 00:17:35,910 --> 00:17:37,080 Så jeg er nå en. 362 00:17:37,080 --> 00:17:37,940 Den kontrollerer tilstanden. 363 00:17:37,940 --> 00:17:39,290 Er en mindre enn 10? 364 00:17:39,290 --> 00:17:39,930 Selvfølgelig. 365 00:17:39,930 --> 00:17:41,030 Så gjør det igjen. 366 00:17:41,030 --> 00:17:43,580 Da er det trinn i + + til to. 367 00:17:43,580 --> 00:17:44,610 Er to mindre enn 10? 368 00:17:44,610 --> 00:17:45,230 Ja. 369 00:17:45,230 --> 00:17:46,670 Og igjen og igjen og igjen. 370 00:17:46,670 --> 00:17:50,070 Og til slutt, på grunn av pluss-plussing, får vi i tilsvarer 10. 371 00:17:50,070 --> 00:17:51,675 Er 10 mindre enn 10? 372 00:17:51,675 --> 00:17:52,990 Vel, tydeligvis ikke. 373 00:17:52,990 --> 00:17:55,320 Og det er det punktet hvor for loop stopper like. 374 00:17:55,320 --> 00:17:58,320 Og hvis du har mer kode på skjerm ned nedenfor, datamaskinen 375 00:17:58,320 --> 00:18:01,620 fortsetter å kjøre den koden i stedet. 376 00:18:01,620 --> 00:18:05,380 >> Så igjen, selv om dette skal ser og føles litt rart på 377 00:18:05,380 --> 00:18:07,830 først, i hvert fall for de av dere som har aldri programmert før, det 378 00:18:07,830 --> 00:18:11,640 bokstavelig reduserer konseptuelt til hva som er ellers en veldig 379 00:18:11,640 --> 00:18:14,330 grei puslespill brikke i Scratch. 380 00:18:14,330 --> 00:18:19,130 >> All right, jeg lovet at det ville være andre analoger i Scratch. 381 00:18:19,130 --> 00:18:20,060 Det er denne også. 382 00:18:20,060 --> 00:18:21,700 Og vi så dette kort sist. 383 00:18:21,700 --> 00:18:23,530 Men husk alltid blokkere i bunnen av? 384 00:18:23,530 --> 00:18:25,490 Det gjør bare noe for alltid? 385 00:18:25,490 --> 00:18:27,470 Jeg hevdet at du kan implementere Dette på denne måten. 386 00:18:27,470 --> 00:18:29,740 Og du kan faktisk gjennomføre dette i en haug med forskjellige måter. 387 00:18:29,740 --> 00:18:34,260 >> Men mens loop er bare en annen måte i C for å uttrykke deg selv. 388 00:18:34,260 --> 00:18:37,080 På slutten av dagen, kan du ikke gjøre noe med en while-loop som du 389 00:18:37,080 --> 00:18:38,360 kan ikke med en for-løkke. 390 00:18:38,360 --> 00:18:41,430 Så de er på slutten av dag funksjonelt sett like. 391 00:18:41,430 --> 00:18:43,840 Men det tillater deg å uttrykke deg litt annerledes i 392 00:18:43,840 --> 00:18:44,850 på følgende måte. 393 00:18:44,850 --> 00:18:49,720 >> Med mens loop, det er hva som er i parenteser som er sjekket igjen og 394 00:18:49,720 --> 00:18:51,050 igjen og igjen. 395 00:18:51,050 --> 00:18:55,100 Og så snart det uttrykket er usant, da løkken stopper utfører, 396 00:18:55,100 --> 00:18:57,890 og datamaskinen fortsetter å kjøre hva andre koden du 397 00:18:57,890 --> 00:18:59,230 har i filen. 398 00:18:59,230 --> 00:19:02,180 >> Men det som er interessant her er at jeg bokstavelig talt skrevet sant. 399 00:19:02,180 --> 00:19:06,680 Og sant er en type boolsk verdi, en sann eller falsk verdi. 400 00:19:06,680 --> 00:19:09,750 Så kunne true noen gang blitt falsk hvis jeg har bokstavelig talt 401 00:19:09,750 --> 00:19:11,970 hardkodet det inn i programmet mitt? 402 00:19:11,970 --> 00:19:12,470 Så no. 403 00:19:12,470 --> 00:19:13,730 Det er litt rart at jeg gjorde dette. 404 00:19:13,730 --> 00:19:15,190 Men sant er sant. 405 00:19:15,190 --> 00:19:16,320 Det er ingen plus-plussing. 406 00:19:16,320 --> 00:19:17,820 Det er ingen bruk av variabler i her. 407 00:19:17,820 --> 00:19:22,740 Så fordi jeg hardkodet mens sant, dette løkke er alltid kommer til å evaluere 408 00:19:22,740 --> 00:19:24,090 igjen og igjen og igjen. 409 00:19:24,090 --> 00:19:27,660 >> Så hvor mange ganger er hello world kommer til å skrive ut på skjermen? 410 00:19:27,660 --> 00:19:28,170 Evig. 411 00:19:28,170 --> 00:19:31,980 Et uendelig antall ganger til batteriet dør eller noen andre eksterne 412 00:19:31,980 --> 00:19:32,730 hendelsen skjer. 413 00:19:32,730 --> 00:19:35,880 Så dette er nok ikke det beste programmet å skrive, fordi hvis brukeren 414 00:19:35,880 --> 00:19:38,660 kan aldri slutte programmet, er det sannsynligvis ikke hva du hadde tenkt. 415 00:19:38,660 --> 00:19:41,070 >> Men noen ganger, programmer bør har en uendelig loop. 416 00:19:41,070 --> 00:19:44,050 For eksempel har hvis datamaskinen en klokke på det, er det sikkert ville være 417 00:19:44,050 --> 00:19:48,130 fint om din klokke det holder å oppdatere seg for alltid, om enn en gang 418 00:19:48,130 --> 00:19:50,500 sekund eller hvert minutt eller noe slikt. 419 00:19:50,500 --> 00:19:53,690 Så selv uendelige løkker har sin plass. 420 00:19:53,690 --> 00:19:54,360 >> OK. 421 00:19:54,360 --> 00:19:55,190 Til slutt, denne. 422 00:19:55,190 --> 00:19:57,770 Og dette er en liten smule annerledes funksjonelt, og vi vil komme tilbake til 423 00:19:57,770 --> 00:19:59,460 dette sannsynligvis i PSett en. 424 00:19:59,460 --> 00:20:02,370 Men det er en annen type løkke kalt en gjøre mens loop. 425 00:20:02,370 --> 00:20:07,100 Og den eneste forskjellen her mellom en gjøre mens loop og, si, en stund loop, 426 00:20:07,100 --> 00:20:11,120 er at tilstanden ikke er avmerket før du kjører koden, men etter 427 00:20:11,120 --> 00:20:12,080 du utføre koden. 428 00:20:12,080 --> 00:20:15,380 Så øverst for den stund loop, mens gjøre mens 429 00:20:15,380 --> 00:20:16,560 sjekker den på bunnen. 430 00:20:16,560 --> 00:20:21,370 >> Og dette betyr bare at mens loop typisk vil utføre flere ganger 431 00:20:21,370 --> 00:20:24,630 eller færre ganger enn en while-loop? 432 00:20:24,630 --> 00:20:30,810 Potensielt flere ganger, fordi en gjøre mens loop er tydelig sier gjør dette, 433 00:20:30,810 --> 00:20:34,600 bare etter som peker du sjekke Hvis tilstanden inne i 434 00:20:34,600 --> 00:20:35,980 parentes er sant. 435 00:20:35,980 --> 00:20:37,940 >> Så får vi se dette igjen sannsynligvis i PSett en. 436 00:20:37,940 --> 00:20:41,150 Hvis du noen gang ønsker å gjøre noe på minst én gang, og deretter kanskje noen mer 437 00:20:41,150 --> 00:20:43,350 ganger, er dette en god konstruere å bruke. 438 00:20:43,350 --> 00:20:46,970 Men en stund loop, derimot, vil sjekke tilstanden først. 439 00:20:46,970 --> 00:20:50,660 Og det er det for løkker i C, gjør mens, samtidig, og for løkker. 440 00:20:50,660 --> 00:20:54,700 Og igjen, kartlegge de ganske pent tilbake i Scratch, bortsett fra denne ene ikke 441 00:20:54,700 --> 00:20:57,350 helt har samme analoge i spillene. 442 00:20:57,350 --> 00:20:58,880 >> Vel, hva med nå, variabler? 443 00:20:58,880 --> 00:21:02,600 Så dette er hvordan jeg erklært en variabel syntaktisk den andre dagen. 444 00:21:02,600 --> 00:21:06,440 Jeg hadde en int, som jeg hevdet er et helt tall. 445 00:21:06,440 --> 00:21:09,690 Jeg hadde da en variabel kalt teller, og deretter et semikolon. 446 00:21:09,690 --> 00:21:11,070 Så hva er denne linjen med kode gjør? 447 00:21:11,070 --> 00:21:14,540 Dette er ganske enkelt, erklærte en variabel - 448 00:21:14,540 --> 00:21:17,940 som er, spør maskinen, gi meg noe minne, gi meg noen biter - i 449 00:21:17,940 --> 00:21:19,450 som jeg kan lagre hva? 450 00:21:19,450 --> 00:21:20,300 En int. 451 00:21:20,300 --> 00:21:23,570 Og semikolon betyr bare slutten av linje med kode. 452 00:21:23,570 --> 00:21:25,500 >> Nå er den andre linjen trolig ganske guessable. 453 00:21:25,500 --> 00:21:29,710 Hva er teller = 0; gjør? 454 00:21:29,710 --> 00:21:31,690 Det tilordne 0 for å motvirke. 455 00:21:31,690 --> 00:21:33,470 Og så dette er det andre ting det er litt irriterende 456 00:21:33,470 --> 00:21:34,540 versus, sier algebra. 457 00:21:34,540 --> 00:21:39,110 Mens det i algebra, betyr likhetstegnet likemenn, her i C, lik 458 00:21:39,110 --> 00:21:40,470 tegnet betyr oppdraget. 459 00:21:40,470 --> 00:21:45,380 Så det betyr sette hva som er på den rette i hva som er til venstre. 460 00:21:45,380 --> 00:21:49,030 Og vi vil se et annet symbol, lik likemenn, når vi ønsker å faktisk teste 461 00:21:49,030 --> 00:21:50,570 for kvalitet, noe plagsomt. 462 00:21:50,570 --> 00:21:52,590 >> Men dette er en lite ineffektive. 463 00:21:52,590 --> 00:21:55,090 Det er litt irriterende at jeg har å erklære en variabel og 464 00:21:55,090 --> 00:21:56,110 deretter gi den en verdi. 465 00:21:56,110 --> 00:21:59,380 Så C faktisk lar oss forenkle dette og bare gjøre alt på en gang. 466 00:21:59,380 --> 00:22:01,330 Du kan deklarere variabelen til venstre. 467 00:22:01,330 --> 00:22:04,590 Du kan fortsatt gjøre oppdrag på rett ved å sette det likhetstegn 468 00:22:04,590 --> 00:22:05,030 midten. 469 00:22:05,030 --> 00:22:08,740 Slik på slutten av dagen, disse to er tilsvarende, men dette, ærlig, 470 00:22:08,740 --> 00:22:11,840 er trolig bedre vane å komme inn bare fordi det er litt mindre 471 00:22:11,840 --> 00:22:15,040 kode, er det litt lettere å lese, og det strammer bare opp 472 00:22:15,040 --> 00:22:17,470 koden, så å si. 473 00:22:17,470 --> 00:22:22,120 >> Eventuelle spørsmål så langt på looper, av variabler, på vilkår, på 474 00:22:22,120 --> 00:22:27,001 Boolske, enten teknisk eller konseptuelt? 475 00:22:27,001 --> 00:22:28,010 OK. 476 00:22:28,010 --> 00:22:30,690 Så nå denne neste man får en litt mer interessant. 477 00:22:30,690 --> 00:22:34,790 Og dette er et eksempel jeg satte opp i fjor tid som bare kartlegger en Scratch eksempel 478 00:22:34,790 --> 00:22:35,820 over til C. 479 00:22:35,820 --> 00:22:36,580 >> Så en funksjon. 480 00:22:36,580 --> 00:22:38,110 I lekmann vilkår, er det en funksjon? 481 00:22:38,110 --> 00:22:42,900 482 00:22:42,900 --> 00:22:44,350 Kom til å være dristigere med svaret ditt. 483 00:22:44,350 --> 00:22:45,020 Hva er en funksjon? 484 00:22:45,020 --> 00:22:46,320 >> STUDENT: Har noe. 485 00:22:46,320 --> 00:22:46,780 >> DAVID MALAN: Hva er det? 486 00:22:46,780 --> 00:22:48,000 >> STUDENT: Har noe. 487 00:22:48,000 --> 00:22:48,710 >> DAVID MALAN: Har noe. 488 00:22:48,710 --> 00:22:49,000 OK. 489 00:22:49,000 --> 00:22:49,590 Vi begynner der. 490 00:22:49,590 --> 00:22:51,270 Så en funksjon gjør noe. 491 00:22:51,270 --> 00:22:55,160 Så det er et stykke kode som er hovedsak implementert andre steder som 492 00:22:55,160 --> 00:22:56,620 faktisk gjør noe. 493 00:22:56,620 --> 00:23:00,180 Nå, hva er interessant om en funksjon er at det kan ta inndata, 494 00:23:00,180 --> 00:23:02,710 og den kan produsere utgang. 495 00:23:02,710 --> 00:23:05,090 Og la oss ta faktisk en titt på denne. 496 00:23:05,090 --> 00:23:09,030 >> Så mannen bak gardin var bevisst et øyeblikk siden. 497 00:23:09,030 --> 00:23:10,320 Her har vi et bord. 498 00:23:10,320 --> 00:23:13,010 Men anta at dette faktisk representerer en stor boks. 499 00:23:13,010 --> 00:23:14,940 Dette er altså en såkalt svart boks. 500 00:23:14,940 --> 00:23:19,800 Og generelt, i design, i datamaskinen vitenskap, svarte bokser bare referere til 501 00:23:19,800 --> 00:23:22,510 biter av funksjonalitet som noen har implementert, og du ikke 502 00:23:22,510 --> 00:23:26,140 nødvendigvis vet eller bryr seg hvordan det er implementert under panseret. 503 00:23:26,140 --> 00:23:28,960 Du bare bryr deg at denne svarte boksen, som vi vil nå begynne å kalle en 504 00:23:28,960 --> 00:23:30,730 funksjon, gjør noe. 505 00:23:30,730 --> 00:23:34,710 >> Så, for eksempel, hvis denne svarte boksen på scenen her representerer printf, en 506 00:23:34,710 --> 00:23:38,040 funksjon, vet jeg fra tidligere eksempler printf som tar ett eller flere 507 00:23:38,040 --> 00:23:40,910 argumenter, og den første av dem argumenter skal være en streng, som 508 00:23:40,910 --> 00:23:44,780 "Hei, verden». Vel, hvis jeg er den personen skriving av program, og jeg vil 509 00:23:44,780 --> 00:23:50,460 å bruke printf, jeg, for eksempel, kan ta et stykke blankt papir her og en 510 00:23:50,460 --> 00:23:55,060 sort tusj og skrive på det - 511 00:23:55,060 --> 00:23:56,580 Jeg stavet "verden" - 512 00:23:56,580 --> 00:23:59,560 H-E-L-L-O. 513 00:23:59,560 --> 00:24:04,220 >> Så jeg skal ta min sort tusj og jeg skal skrive, så stor og leselig som jeg kan på 514 00:24:04,220 --> 00:24:07,260 dette stykke papir, "hallo, verden," Og nå har jeg hevder dette er mitt argument. 515 00:24:07,260 --> 00:24:09,740 Dette er en streng representert med et stykke hvitt papir. 516 00:24:09,740 --> 00:24:13,030 Og mitt innspill nå til funksjonen printf kommer til å være dette. 517 00:24:13,030 --> 00:24:18,250 Så jeg kaller printf, passerer det argumentet som innspill til det. 518 00:24:18,250 --> 00:24:22,110 519 00:24:22,110 --> 00:24:26,740 >> Og nå vet jeg ikke hvordan den personen som skrev printf gjorde det år siden, men 520 00:24:26,740 --> 00:24:31,110 Jeg vet fra sin dokumentasjon som sitt formål i livet er å skrive hva jeg 521 00:24:31,110 --> 00:24:34,410 gi til den som input. 522 00:24:34,410 --> 00:24:40,630 Og så, selv om denne implementeringen er ukjent for meg 523 00:24:40,630 --> 00:24:44,170 under panseret, nå Jeg ser, oh, er det gjort. 524 00:24:44,170 --> 00:24:45,740 Det er skrevet ut noe på skjermen. 525 00:24:45,740 --> 00:24:49,070 Og nå kontroll over programmet, hvis det var flere linjer med kode, ville 526 00:24:49,070 --> 00:24:51,070 har nå returnert til meg. 527 00:24:51,070 --> 00:24:52,290 Og så det faktum at Colton - 528 00:24:52,290 --> 00:24:55,370 velsigne hans hjerte, gjemmer seg her etter et bord foran alle dere - 529 00:24:55,370 --> 00:24:59,530 er bevisst på at jeg ikke vet og jeg bryr meg ikke hvor printf er 530 00:24:59,530 --> 00:25:00,100 implementert. 531 00:25:00,100 --> 00:25:03,390 Jeg bare vet, igjen, fra sin dokumentasjon, hva den gjør og hvordan jeg 532 00:25:03,390 --> 00:25:05,040 er ment å bruke den. 533 00:25:05,040 --> 00:25:09,140 >> Nå husker at printf kunne få litt mer sofistikert. 534 00:25:09,140 --> 00:25:12,220 Igjen, vi bare snakker om tilsvarende Scratch si blokk. 535 00:25:12,220 --> 00:25:14,230 Men jeg gjorde også dette siste gang. 536 00:25:14,230 --> 00:25:17,270 Jeg ønsket å gjøre mitt hallo programmet en litt mer dynamisk og ikke bare vanskelig 537 00:25:17,270 --> 00:25:19,740 kode noe sånt som "verden", og definitivt ikke vanskelig kode noe 538 00:25:19,740 --> 00:25:22,520 vilkårlig som D-A-V-I-D inn i programmet. 539 00:25:22,520 --> 00:25:27,510 Jeg ønsket å spørre brukeren om hans eller hennes navn, og deretter gjøre noe med 540 00:25:27,510 --> 00:25:29,720 strengen som de leverer. 541 00:25:29,720 --> 00:25:32,690 >> Så det er noe litt annerledes her. printf, et øyeblikk siden, 542 00:25:32,690 --> 00:25:35,860 gjorde faktisk gjøre noe, men det returnerte ikke noe for meg. 543 00:25:35,860 --> 00:25:36,020 Høyre? 544 00:25:36,020 --> 00:25:38,910 Colton ikke gi meg noe tilbake, ingen stykke papir. 545 00:25:38,910 --> 00:25:40,320 Det var bare en bivirkning. 546 00:25:40,320 --> 00:25:44,510 Min gir "hallo, verden" som en argumentet til Colton resulterte i 547 00:25:44,510 --> 00:25:48,420 bivirkning av et ord, noen ord, vises på skjermen. 548 00:25:48,420 --> 00:25:51,350 >> getstring, men er litt annerledes. getstring er også en 549 00:25:51,350 --> 00:25:54,590 fungere, men den returnerer noen verdi. 550 00:25:54,590 --> 00:25:56,370 Det betyr ikke bare har en estetisk bivirkning. 551 00:25:56,370 --> 00:26:00,230 Det gir meg faktisk, at personen ringer eller bruker funksjonen, 552 00:26:00,230 --> 00:26:01,320 noe tilbake. 553 00:26:01,320 --> 00:26:05,740 Så i dette tilfellet, er getstring heter med getstring åpen 554 00:26:05,740 --> 00:26:07,510 paren, nær paren. 555 00:26:07,510 --> 00:26:11,370 Har getstring derfor ta noen argumenter eller innspill? 556 00:26:11,370 --> 00:26:12,340 Nei, det virker ikke. 557 00:26:12,340 --> 00:26:14,460 Dens formål i livet er bare for å få en streng. 558 00:26:14,460 --> 00:26:16,910 Den trenger ingen flere detaljer enn det. 559 00:26:16,910 --> 00:26:20,430 Så la meg gå videre og late som, igjen, dette er black box ikke printf, 560 00:26:20,430 --> 00:26:25,160 men getstring, og la meg, personen skriver dette programmet, ringe eller bruke 561 00:26:25,160 --> 00:26:29,720 getstring ved bare å skrive G-E-T-S-T-R-I-N-G, åpner paren, nær 562 00:26:29,720 --> 00:26:32,170 paren, getstring. 563 00:26:32,170 --> 00:26:36,920 >> Nå har jeg ingen anelse om hvordan CS50 ansatte implementert getstring, men jeg vet at 564 00:26:36,920 --> 00:26:41,240 hvis jeg venter lenge nok, vil det gjøre sitt ting under panseret, kanskje ved hjelp 565 00:26:41,240 --> 00:26:44,940 noen variabler, kanskje ved hjelp av noen forhold, kanskje ved hjelp av noen looper, 566 00:26:44,940 --> 00:26:48,170 kanskje bruke enkelte funksjoner, kanskje bruker - 567 00:26:48,170 --> 00:26:52,290 bare prøver å stall - kanskje ved hjelp noen andre programmeringsspråk funksjoner. 568 00:26:52,290 --> 00:26:55,350 Men hvis jeg venter lenge nok - i virkeligheten, i datamaskinen, skjer dette 569 00:26:55,350 --> 00:26:56,270 superrask - 570 00:26:56,270 --> 00:26:59,910 hvis jeg venter lenge nok, denne funksjonen getstring kommer til å få en streng 571 00:26:59,910 --> 00:27:04,060 fra brukeren, som trolig er å skrive det ut på tastaturet sitt, og 572 00:27:04,060 --> 00:27:08,090 så, når du getstring er gjort få disse tegnene fra brukerens 573 00:27:08,090 --> 00:27:14,080 og å lagre dem i en streng, som funksjon, getstring, kommer til å ha 574 00:27:14,080 --> 00:27:17,990 klar for meg noen utgang som jeg er kommer til å hente ved hjelp av 575 00:27:17,990 --> 00:27:19,470 oppdrag operatør. 576 00:27:19,470 --> 00:27:25,390 >> Og hvis jeg går faktisk inn i produksjonen her har Obosi sjenerøst 577 00:27:25,390 --> 00:27:29,900 deltok, uten å vite dette i avansere, ved å skrive sitt navn på dette 578 00:27:29,900 --> 00:27:33,100 variabel, som representerer en streng. 579 00:27:33,100 --> 00:27:35,640 Nå betyr oppdraget operatør, selv selv om dette kan føles litt 580 00:27:35,640 --> 00:27:38,790 overflødige, jeg faktisk trenger å lage min egen kopi av denne. 581 00:27:38,790 --> 00:27:40,700 Fordi på venstre hånd side - whoops! - 582 00:27:40,700 --> 00:27:45,760 merker at jeg egentlig har streng navn på venstre side. 583 00:27:45,760 --> 00:27:48,280 Så jeg også kommer til å gjøre min egen kopi av denne. 584 00:27:48,280 --> 00:27:50,990 Og dette er litt av en hvit løgn, fordi vi vil se i en uke eller to 585 00:27:50,990 --> 00:27:54,100 gang at strenger er faktisk ikke hva de synes å være. 586 00:27:54,100 --> 00:27:56,700 >> Men for nå, her er verdien som returneres. 587 00:27:56,700 --> 00:28:00,160 Her er min egen kopi av det etter med oppdraget operatør. 588 00:28:00,160 --> 00:28:01,790 Og nå, hva jeg ønsker å gjøre nå? 589 00:28:01,790 --> 00:28:04,080 Vi har nå den andre av to linjer med kode. 590 00:28:04,080 --> 00:28:05,640 Så jeg nå ønsker å kalle printf. 591 00:28:05,640 --> 00:28:08,500 La oss late nå at den svarte boksen er tilbake igjen for å være 592 00:28:08,500 --> 00:28:10,210 printf og ikke getstring. 593 00:28:10,210 --> 00:28:12,200 >> Printf denne gangen kommer til å ta hvor mange argumenter? 594 00:28:12,200 --> 00:28:14,890 595 00:28:14,890 --> 00:28:16,770 Så ser, det er som to. 596 00:28:16,770 --> 00:28:18,860 Det er to komma i det, men en av disse komma, er det 597 00:28:18,860 --> 00:28:20,220 innsiden av sitater. 598 00:28:20,220 --> 00:28:23,190 Så det første argumentet er bokstavelig talt kommer til å være dette. 599 00:28:23,190 --> 00:28:31,850 H-E-L-L-O, komma, prosent s, skråstrek-n. 600 00:28:31,850 --> 00:28:36,560 Og nå er jeg gir ikke ett argument, men to argumenter til printf. 601 00:28:36,560 --> 00:28:39,530 >> Og hva som printf skal gjøre med disse to innganger etter at jeg passerer dem i 602 00:28:39,530 --> 00:28:42,050 som argumenter? 603 00:28:42,050 --> 00:28:45,360 Det er ment for å ta den andre av dem, som jeg kalte navn, slik at 604 00:28:45,360 --> 00:28:48,660 andre arket jeg skrev ut et øyeblikk siden kalles navn. 605 00:28:48,660 --> 00:28:53,550 Det kommer til å koble av verdien inne av den variabelen inn i plassholderen, 606 00:28:53,550 --> 00:28:58,310 % S, slik at, igjen, på bare et øyeblikks tid, vil vi se en bivirkning av 607 00:28:58,310 --> 00:29:04,180 etter å ha kalt printf, der vi nå se ikke "hallo, verden," men "hallo, 608 00:29:04,180 --> 00:29:04,710 Obosi. " 609 00:29:04,710 --> 00:29:08,730 >> Så en stor applaus til begge våre frivillige, bare én av dem visste 610 00:29:08,730 --> 00:29:12,010 dette ville skje. 611 00:29:12,010 --> 00:29:12,990 OK. 612 00:29:12,990 --> 00:29:16,480 Så, kanskje, enkelt som det var, sikkert, hvis du allerede er kjent 613 00:29:16,480 --> 00:29:20,190 med en slik, forhåpentligvis vil du aldri glemme at spesielt visuelt av hvordan 614 00:29:20,190 --> 00:29:21,220 funksjonene fungerer. 615 00:29:21,220 --> 00:29:23,000 >> Så det er mer enn bare getstring. 616 00:29:23,000 --> 00:29:26,020 Innsiden av CS50 bibliotek, det er en hel del funksjoner, som alle 617 00:29:26,020 --> 00:29:29,510 balanseføres bare for å gjøre det klart som vi skrev disse funksjonene. 618 00:29:29,510 --> 00:29:33,610 Vanligvis, i C, nesten alle andre funksjon du skal bruke er små bokstaver. 619 00:29:33,610 --> 00:29:36,190 Men vi bevisst bruk blokkbokstaver bare for å gjøre det klart at disse 620 00:29:36,190 --> 00:29:39,880 er trening hjul slags som vi vil bruk for bare noen få uker at 621 00:29:39,880 --> 00:29:42,890 forenkle prosessen med å få input fra brukeren. 622 00:29:42,890 --> 00:29:46,740 >> Det CS50-biblioteket ikke gjør noe at du selv ikke kunne gjøre ved 623 00:29:46,740 --> 00:29:50,230 bare ved hjelp av C-kode fra en oldschool lærebok. 624 00:29:50,230 --> 00:29:53,310 Men igjen, vi bruker dem som trening hjul av sorterer for bare et par 625 00:29:53,310 --> 00:29:57,250 uker, slik at vi kan bli kvitt den kompleksiteten som du vil snart forstå 626 00:29:57,250 --> 00:30:00,460 selv for å gjøre noe som relativt enkelt som å få 627 00:30:00,460 --> 00:30:02,080 input fra en bruker. 628 00:30:02,080 --> 00:30:05,540 >> Så vet at du vil ha tilgang å getchar, GetDouble - 629 00:30:05,540 --> 00:30:06,050 doble. 630 00:30:06,050 --> 00:30:07,050 Omverden - og deretter GetFloat. 631 00:30:07,050 --> 00:30:07,600 Hva er en float? 632 00:30:07,600 --> 00:30:09,382 La oss starte der. 633 00:30:09,382 --> 00:30:10,600 >> STUDENT: [uhørlig]. 634 00:30:10,600 --> 00:30:10,790 >> DAVID MALAN: Yeah. 635 00:30:10,790 --> 00:30:12,120 Det er et tall med en desimal. 636 00:30:12,120 --> 00:30:15,930 Så mens en int er et helt tall, noe er bare et tall med 0 til 9, 637 00:30:15,930 --> 00:30:18,940 et antall repetisjoner derav, en float er noe 638 00:30:18,940 --> 00:30:20,100 med en desimal. 639 00:30:20,100 --> 00:30:26,090 Og en dobbel, i mellomtiden, er også en tall med en desimal, men mer 640 00:30:26,090 --> 00:30:28,160 tall etter kommaet punkt, potensielt. 641 00:30:28,160 --> 00:30:30,040 >> Så vi vil komme tilbake til dette før lenge. 642 00:30:30,040 --> 00:30:34,560 Men vanligvis, og hver av disse typer data, hver av disse typer variabler 643 00:30:34,560 --> 00:30:39,380 at et bibliotek som vårt kan gå tilbake til deg, bruker ulike antall bits til 644 00:30:39,380 --> 00:30:40,290 lagre informasjon. 645 00:30:40,290 --> 00:30:43,910 Vanligvis en Char, som bare betyr ett tegn, bruker 8 bits. 646 00:30:43,910 --> 00:30:47,490 Og det er faktisk i tråd med vår byte av frivillige forrige uke som 647 00:30:47,490 --> 00:30:50,410 kom opp og representerte en Ascii tegn om gangen. 648 00:30:50,410 --> 00:30:51,850 Så en Char er 8 bits. 649 00:30:51,850 --> 00:30:54,430 >> En flottør skjer for å være 32 bits, typisk. 650 00:30:54,430 --> 00:30:59,230 Og en dobbel, som du kanskje skjønner, er faktisk 64 bits, som er bare mer, 651 00:30:59,230 --> 00:31:01,360 som betyr at du kan ha større tall eller mer presisjon. 652 00:31:01,360 --> 00:31:03,000 Men igjen, mer om det en annen gang. 653 00:31:03,000 --> 00:31:06,550 GetLongLong, i mellomtiden, men dumt heter, er egentlig bare en 654 00:31:06,550 --> 00:31:10,770 heltall som er dobbelt så stor, dobbelt så lang, potensielt, som en vanlig 655 00:31:10,770 --> 00:31:12,940 heltall, 64 bits i stedet for 32. 656 00:31:12,940 --> 00:31:14,560 Og GetString vi har brukt. 657 00:31:14,560 --> 00:31:18,870 >> Men det viser seg, i CS50 bibliotek, som er implementert, så vi får se, i 658 00:31:18,870 --> 00:31:23,560 form av de to filer, en av hvilke kalles cs50.h, har to andre 659 00:31:23,560 --> 00:31:24,770 datatyper i det. 660 00:31:24,770 --> 00:31:29,700 Boolske ikke finnes i C. Du kan simulere dem ved bare å bruke 0'er og 1'ere 661 00:31:29,700 --> 00:31:30,850 gjennom programmene dine. 662 00:31:30,850 --> 00:31:35,500 Men vi i CS50 bibliotek har opprettet symbolene "true" og "false" 663 00:31:35,500 --> 00:31:38,580 å representere en og 0 slik at du ikke må hardt kode noe 664 00:31:38,580 --> 00:31:39,810 bokstavelig talt som 1 og 0. 665 00:31:39,810 --> 00:31:40,980 Men vi får se dem igjen. 666 00:31:40,980 --> 00:31:42,330 >> String, også, ikke eksisterer. 667 00:31:42,330 --> 00:31:44,520 Og det er derfor jeg nevnte det er litt av en hvit løgn for nå. 668 00:31:44,520 --> 00:31:46,660 Men vi vil skrelle tilbake som lag før lenge. 669 00:31:46,660 --> 00:31:49,540 Men for nå, er en streng en sekvens av tegn. 670 00:31:49,540 --> 00:31:51,790 >> I mellomtiden, i C, ja du har ulike datatyper. 671 00:31:51,790 --> 00:31:53,200 Legg merke til disse er små. 672 00:31:53,200 --> 00:31:56,960 Så funksjonene så deg et øyeblikk siden blir funksjonene skrevet av CS50 at 673 00:31:56,960 --> 00:32:02,310 vil komme tilbake til deg en verdi som faller inn i en av disse klassene. 674 00:32:02,310 --> 00:32:06,730 >> Et par jukse ark bare å plante frøet her. printf ikke bare 675 00:32:06,730 --> 00:32:08,600 ta% s som plassholdere. 676 00:32:08,600 --> 00:32:13,490 Det tar% d for desimal heltall, eller% ville jeg jobbe i tillegg. 677 00:32:13,490 --> 00:32:19,450 % F flyter poengverdi. % C er for en røye, hvis du ønsker å bare plugge en 678 00:32:19,450 --> 00:32:23,510 tegnet inn i en ferdig formatert streng som vi har gjort, kan du bruke% c. 679 00:32:23,510 --> 00:32:28,490 >> Og så, litt irriterende,% lld er for en lang, lang Desimalheltallet, 680 00:32:28,490 --> 00:32:31,050 noe som betyr at bare hvis du trenger en virkelig stort tall, og du bruker noe 681 00:32:31,050 --> 00:32:35,450 kalt en lang lang, som vi vil komme tilbake til i en PSett, kan du bruke% lld til 682 00:32:35,450 --> 00:32:40,700 fortelle printf, plugg i en virkelig stor heltall her på grunnlag av det andre eller 683 00:32:40,700 --> 00:32:41,830 noen andre argument. 684 00:32:41,830 --> 00:32:45,700 >> Og til slutt, lovet jeg at det er noen annen flukt 685 00:32:45,700 --> 00:32:47,670 sekvenser som printf støtter. 686 00:32:47,670 --> 00:32:49,160 Vi har sett backslash-n. 687 00:32:49,160 --> 00:32:50,510 Backslash-r du kan se. 688 00:32:50,510 --> 00:32:51,780 Det er liksom en old-school ting. 689 00:32:51,780 --> 00:32:55,920 Hvis du noen gang brukt en ekte skrivemaskin år siden, og du trakk på kranken 690 00:32:55,920 --> 00:32:59,810 som ikke bare roteres hjulet flytte lineup, den også flyttet 691 00:32:59,810 --> 00:33:03,730 hele greia hele veien tilbake over til venstre, vel, skråstrek-r bare 692 00:33:03,730 --> 00:33:06,480 hovedsak flytter markøren tilbake til begynnelsen av linjen 693 00:33:06,480 --> 00:33:07,830 uten å bevege den ned. 694 00:33:07,830 --> 00:33:09,780 Men igjen, mer om det, kanskje i fremtiden. 695 00:33:09,780 --> 00:33:13,670 >> Skråstrek-sitat, skråstrek-dobbel sitat, backslash-backslash er 696 00:33:13,670 --> 00:33:16,600 løsning på den bitte liten gåte Jeg antydet tidligere. 697 00:33:16,600 --> 00:33:18,920 Og omvendt skråstrek-0 er faktisk ganske interessant. 698 00:33:18,920 --> 00:33:21,470 Men vi vil komme tilbake til som før lenge. 699 00:33:21,470 --> 00:33:25,640 >> Så la meg gå inn i, nå, det CS50 apparatet, og la oss faktisk gjør en 700 00:33:25,640 --> 00:33:28,930 rask varme opp med ett av eksemplene vi allerede, og deretter gå videre til 701 00:33:28,930 --> 00:33:31,160 noe litt mer komplisert. 702 00:33:31,160 --> 00:33:34,980 Så hvis jeg åpner opp mitt program kalt gedit - 703 00:33:34,980 --> 00:33:36,840 dette er min grafisk editor. 704 00:33:36,840 --> 00:33:38,460 Og jeg kan gjøre det - 705 00:33:38,460 --> 00:33:39,820 la meg lukke vinduet der - 706 00:33:39,820 --> 00:33:42,720 ved hjelp av dette ikonet her nede, gedit, i nederste venstre 707 00:33:42,720 --> 00:33:44,170 hjørne ved siden av menyen. 708 00:33:44,170 --> 00:33:48,670 >> Jeg kommer til å gå videre og videre, og lagre dette eksemplet inn i, sier John 709 00:33:48,670 --> 00:33:49,660 Harvards mappe. 710 00:33:49,660 --> 00:33:52,690 John Harvards mappen er bare hans hjem katalogen der alle sine filer leve 711 00:33:52,690 --> 00:33:53,340 som standard. 712 00:33:53,340 --> 00:33:58,410 Og jeg kommer til å lagre dette som en fil som heter hallo-0.c. 713 00:33:58,410 --> 00:34:01,260 Og jeg har valgt dette navnet bare så det på linje med eksempelkode på 714 00:34:01,260 --> 00:34:04,210 kursets hjemmeside og i YouTube-videoer på nettet. 715 00:34:04,210 --> 00:34:06,320 >> Så nå skal jeg begynne å skrive min første programmet. 716 00:34:06,320 --> 00:34:08,469 La meg zoome inn for lesbarhet. 717 00:34:08,469 --> 00:34:12,760 Og jeg kommer til å gå foran og si int viktigste tomrom, som er akkurat sånn 718 00:34:12,760 --> 00:34:14,900 gul puslespill brikke som begynner et program. 719 00:34:14,900 --> 00:34:18,290 Jeg har fått inn i vanen over år med åpningen min krøllete brace, deretter 720 00:34:18,290 --> 00:34:22,000 også lukke den og deretter gå tilbake til hvor jeg ønsker å sette min kode, bare 721 00:34:22,000 --> 00:34:24,630 fordi det hjelper meg å holde alt balansert, særlig ettersom min 722 00:34:24,630 --> 00:34:25,880 Programmet blir lang. 723 00:34:25,880 --> 00:34:29,239 >> Og nå, her kommer jeg til å gå videre og si: printf, sitere unquote, 724 00:34:29,239 --> 00:34:34,330 hello world, skråstrek-n, nær sitat, sluttparentes, semikolon. 725 00:34:34,330 --> 00:34:38,100 Så jeg bare gjenta alt vi har tatt for gitt så langt. 726 00:34:38,100 --> 00:34:39,270 Nå skal jeg å zoome ut. 727 00:34:39,270 --> 00:34:43,030 >> Og dette terminal-vinduet ned her, hva har jeg lov til å gjøre i denne svarte 728 00:34:43,030 --> 00:34:44,389 og hvite vinduet? 729 00:34:44,389 --> 00:34:46,977 Hva kan jeg bruke det til? 730 00:34:46,977 --> 00:34:49,770 Så dette er hvor jeg kjøre kommandoer og hvor jeg kan kompilere ting. 731 00:34:49,770 --> 00:34:50,620 Og jeg kommer til å holde det enkelt. 732 00:34:50,620 --> 00:34:52,780 Jeg kommer til å bruke et program kalt Gjør, som ikke er 733 00:34:52,780 --> 00:34:54,020 teknisk sett en kompilator. 734 00:34:54,020 --> 00:34:56,360 Kompilatoren er kalt Clang, men vi vil komme tilbake til det i et 735 00:34:56,360 --> 00:34:57,190 uke eller to tid. 736 00:34:57,190 --> 00:35:03,410 >> For nå er jeg bare kommer til å skrive gjøre hallo-0, Men de av dere som var 737 00:35:03,410 --> 00:35:07,050 sammenligne i ditt sinn hva jeg nettopp tastet til hva jeg burde ha skrevet kan 738 00:35:07,050 --> 00:35:10,180 vet allerede at jeg gjorde noe galt her. 739 00:35:10,180 --> 00:35:12,160 Nå er det klart noen feil. 740 00:35:12,160 --> 00:35:16,742 Før jeg selv se på hva de er, noe tanker om hva jeg gjorde galt? 741 00:35:16,742 --> 00:35:18,590 >> STUDENTER: [interposing VOICES]. 742 00:35:18,590 --> 00:35:18,840 >> DAVID MALAN: Yeah. 743 00:35:18,840 --> 00:35:20,640 Jeg mangler bibliotekets header-fil. 744 00:35:20,640 --> 00:35:24,240 Noen av disse. H filer kalles header filer, og de kollektivt 745 00:35:24,240 --> 00:35:25,680 tilhører tingene heter biblioteker. 746 00:35:25,680 --> 00:35:28,030 Bibliotekene er bare biter av kode at andre skrev. 747 00:35:28,030 --> 00:35:32,140 Så standard [? jeg?] Biblioteket er en samling av filer som inneholder koden 748 00:35:32,140 --> 00:35:33,330 at andre skrev. 749 00:35:33,330 --> 00:35:34,820 >> Så jeg mangler det. 750 00:35:34,820 --> 00:35:36,520 Så hvorfor får jeg en feil? 751 00:35:36,520 --> 00:35:40,840 Vel, la meg bla tilbake i min terminal-vinduet her. 752 00:35:40,840 --> 00:35:44,310 Og dessverre, i C, som i mange programmeringsspråk, spesielt 753 00:35:44,310 --> 00:35:47,830 hvis det er alt nytt for deg, feilen meldinger er presise, men de er også 754 00:35:47,830 --> 00:35:48,620 ganske kryptisk. 755 00:35:48,620 --> 00:35:51,720 Og feilen her, i rødt, er "Implisitt erklære bibliotek funksjon 756 00:35:51,720 --> 00:35:57,660 printf med type ", og da er det ruller til neste linje, "int const char *, 757 00:35:57,660 --> 00:36:00,220 ... "Det blir bare virkelig overveldende raskt. 758 00:36:00,220 --> 00:36:04,420 >> Men hva du bør begynne å gjøre, hvis, igjen, ny i alt dette, er bare å 759 00:36:04,420 --> 00:36:06,010 begynne å lete etter søkeord. 760 00:36:06,010 --> 00:36:08,770 Åpenbart kan jeg ikke forstå halvparten av ordene jeg ser ennå. 761 00:36:08,770 --> 00:36:10,140 Du vil, selv om det i en ukes tid. 762 00:36:10,140 --> 00:36:11,230 Men jeg ser printf. 763 00:36:11,230 --> 00:36:14,310 Og det skulle begynne, før lenge, til jogge hukommelsen, all right, printf. 764 00:36:14,310 --> 00:36:15,210 Noe er galt med printf. 765 00:36:15,210 --> 00:36:16,580 Gjorde jeg stave det feil? 766 00:36:16,580 --> 00:36:18,130 Nei, det ser ikke ut som - oh. 767 00:36:18,130 --> 00:36:21,350 Jeg kan ikke bruke den med mindre jeg underviser kompilatoren at den finnes. 768 00:36:21,350 --> 00:36:25,220 Og så, igjen, gå med dine instinkter, selv om du ikke egentlig forstår 769 00:36:25,220 --> 00:36:26,510 selve feilmeldinger. 770 00:36:26,510 --> 00:36:30,240 >> Og ja, er løsningen her å bare omfatte den på toppen av filen 771 00:36:30,240 --> 00:36:34,340 sånn, resaving min fil med Kontroll-S eller Fil-menyen. 772 00:36:34,340 --> 00:36:36,730 Og hvis jeg nå gå tilbake her nede, Jeg kommer til å klare dette. 773 00:36:36,730 --> 00:36:39,150 Kontroll-L er bare en fin måte å tømme skjermen. 774 00:36:39,150 --> 00:36:44,870 Og så skal jeg skrive "make hei 0 "Enter, og nå er jeg fortsatt se en 775 00:36:44,870 --> 00:36:47,710 kryptiske sekvens av symboler, men vi vil komme tilbake til det. 776 00:36:47,710 --> 00:36:49,230 Det er det som gjør gjør for deg. 777 00:36:49,230 --> 00:36:52,590 Det er å automatisere prosessen med å ta en ganske irriterende kommando som involverer 778 00:36:52,590 --> 00:36:54,050 Klang, selve kompilatoren. 779 00:36:54,050 --> 00:36:57,460 Men det faktum at jeg fikk ingen feil betyr at denne tingen skal fungere. 780 00:36:57,460 --> 00:37:00,630 >> Så jeg nå kommer til å gjøre - la meg zoome inn igjen - 781 00:37:00,630 --> 00:37:07,070 ./hello-0 Enter, og ja, jeg ser "Hei, verden». Så la oss nå forsterke 782 00:37:07,070 --> 00:37:12,105 dette aldri så litt bare for å replikere trinnene vi ment. 783 00:37:12,105 --> 00:37:15,370 Jeg kommer til å endre navn på dette med Lagre som for å hello1.c. 784 00:37:15,370 --> 00:37:20,300 Og nå skal jeg til å erklære en variabel kalt navn, så string navn, 785 00:37:20,300 --> 00:37:23,420 og jeg kommer til å sette i det Verdien av sitat-unquote 786 00:37:23,420 --> 00:37:27,030 D-A-V-I-D-tett sitat semikolon. 787 00:37:27,030 --> 00:37:31,150 Og nå skal jeg til å erstatte "verden" med hva som plassholder for en streng? 788 00:37:31,150 --> 00:37:32,200 % S. 789 00:37:32,200 --> 00:37:35,040 >> Og nå, hvor mange argumenter bør printf ta denne gangen? 790 00:37:35,040 --> 00:37:35,700 Så to. 791 00:37:35,700 --> 00:37:37,090 Så jeg går utenfor de anførselstegn. 792 00:37:37,090 --> 00:37:39,330 Jeg skriver "navn" etter komma. 793 00:37:39,330 --> 00:37:41,550 Men jeg har gjort noe annet galt denne gangen. 794 00:37:41,550 --> 00:37:43,940 Men la oss anta at jeg ikke skjønner det ennå. 795 00:37:43,940 --> 00:37:44,910 La meg gå opp her. 796 00:37:44,910 --> 00:37:48,850 >> Og legg merke til, også, jeg får litt lei av å skrive "make hallo 0" hele 797 00:37:48,850 --> 00:37:50,180 tid, "make" og alt dette. 798 00:37:50,180 --> 00:37:53,270 Så det viser seg, i Linus kan du ofte trykker pil opp på din 799 00:37:53,270 --> 00:37:56,850 tastaturet, og du kan faktisk bla gjennom alle kommandoene som jeg har 800 00:37:56,850 --> 00:37:58,830 henrettet tidligere å bare nå. 801 00:37:58,830 --> 00:38:02,040 Så hvis jeg gjør det, opp, opp, det er få hallo 0. 802 00:38:02,040 --> 00:38:02,610 Jeg vil ikke ha det. 803 00:38:02,610 --> 00:38:05,450 Jeg vil bare endre det til hallo en denne gangen, Enter. 804 00:38:05,450 --> 00:38:07,620 Til slutt, som vil spare deg litt tid. 805 00:38:07,620 --> 00:38:08,150 >> OK. 806 00:38:08,150 --> 00:38:09,520 Dessverre er det en feil. 807 00:38:09,520 --> 00:38:10,980 Så la meg bla opp. 808 00:38:10,980 --> 00:38:13,120 Dette ser ut som jeg virkelig slaktet dette programmet. 809 00:38:13,120 --> 00:38:16,530 Jeg mener, min Gud, er det to linjer med kode, og sine 10 linjer med feil. 810 00:38:16,530 --> 00:38:18,800 Men se på den øverste først. 811 00:38:18,800 --> 00:38:21,640 Bruk av undeclared identifikator streng. 812 00:38:21,640 --> 00:38:23,270 Sa jeg mener standard jeg n? 813 00:38:23,270 --> 00:38:23,930 Nei jeg gjorde ikke det. 814 00:38:23,930 --> 00:38:24,940 Jeg mente streng. 815 00:38:24,940 --> 00:38:29,390 >> Men hvor er strengvariabelen typen erklærte DD vi si? 816 00:38:29,390 --> 00:38:30,730 Så det er i CS50 biblioteket. 817 00:38:30,730 --> 00:38:33,740 Så det ikke være nok, i disse første par uker, bare for å bruke 818 00:38:33,740 --> 00:38:34,860 hva C gir oss. 819 00:38:34,860 --> 00:38:38,120 Jeg er også kommer til å gå opp her, og jeg kunne sette den over eller under, men jeg skal 820 00:38:38,120 --> 00:38:40,340 bare holde det alfabetisk å holde ting ryddig. 821 00:38:40,340 --> 00:38:43,470 Jeg kommer til å inkludere cs50.h, som er forhåndsinstallert for 822 00:38:43,470 --> 00:38:44,900 du på CS50 apparatet. 823 00:38:44,900 --> 00:38:47,640 Og det er åpen kildekode, slik at selv folk på internett kan bruke det på sin 824 00:38:47,640 --> 00:38:48,450 egne datamaskiner. 825 00:38:48,450 --> 00:38:50,700 Men det kommer med CS50 apparatet. 826 00:38:50,700 --> 00:38:55,320 >> Så nå la meg gå tilbake og rekompilere dette med make hallo en. 827 00:38:55,320 --> 00:38:55,710 Pokker. 828 00:38:55,710 --> 00:38:57,240 Nok en feil. 829 00:38:57,240 --> 00:38:59,370 La meg bla opp til den første, skjønt. 830 00:38:59,370 --> 00:39:00,630 Denne er en litt komplisert. 831 00:39:00,630 --> 00:39:03,830 Multi-tegns tegnkonstant. 832 00:39:03,830 --> 00:39:04,890 Det hjelper ikke meg. 833 00:39:04,890 --> 00:39:08,220 Men legg merke til, er Clang minst litt litt anstendig, der med et lite 834 00:39:08,220 --> 00:39:11,890 grønn caret symbol, er det å si her er der jeg skrudd opp. 835 00:39:11,890 --> 00:39:16,160 Hvorfor er det peker, med det lille grønn pil, til den enkle sitat neste 836 00:39:16,160 --> 00:39:18,290 til mitt navn? 837 00:39:18,290 --> 00:39:20,880 >> Så dette er en av de tingene du bare venne seg til, særlig hvis du har vært 838 00:39:20,880 --> 00:39:23,980 programmering i Python eller JavaScript, eller andre språk der denne detaljen 839 00:39:23,980 --> 00:39:24,560 spiller ingen rolle. 840 00:39:24,560 --> 00:39:25,740 I C, gjør det uansett. 841 00:39:25,740 --> 00:39:29,520 Hvis du er erklære en streng, som er en sekvens med 0 eller flere tegn, 842 00:39:29,520 --> 00:39:32,280 du faktisk må bruke anførselstegn. 843 00:39:32,280 --> 00:39:36,670 Så jeg faktisk trenger å endre dette tilbake å åpne sitat, lukke sitat, med 844 00:39:36,670 --> 00:39:37,800 doble anførselstegn. 845 00:39:37,800 --> 00:39:41,610 Apostrof har sin plass, men bare når du bruker enkelte 846 00:39:41,610 --> 00:39:44,100 tegn, men mer om det en annen gang. 847 00:39:44,100 --> 00:39:46,550 For nå, de doble anførselstegnene er nødvendig. 848 00:39:46,550 --> 00:39:50,460 >> Så nå, la meg gå tilbake til terminalen min vinduet, gjør hallo en. 849 00:39:50,460 --> 00:39:51,450 Og hvem er trygg? 850 00:39:51,450 --> 00:39:53,800 Er dette programmet nå går å kompilere riktig? 851 00:39:53,800 --> 00:39:58,250 852 00:39:58,250 --> 00:39:58,540 OK. 853 00:39:58,540 --> 00:39:59,780 Så tre av oss tror dette. 854 00:39:59,780 --> 00:40:00,280 OK. 855 00:40:00,280 --> 00:40:01,190 Enter. 856 00:40:01,190 --> 00:40:02,440 Og det faktisk gjorde. 857 00:40:02,440 --> 00:40:05,130 Så det er ingen feil denne gangen, selv om dette programmet har fått litt 858 00:40:05,130 --> 00:40:05,840 mer komplekse. 859 00:40:05,840 --> 00:40:10,110 Hvis jeg nå gjøre dot slash hallo 1, Enter, det kommer til å si "hallo, David." 860 00:40:10,110 --> 00:40:11,750 >> Men la oss gjøre den tredje iterasjon av dette, hvor den 861 00:40:11,750 --> 00:40:13,380 Programmet er virkelig dynamisk. 862 00:40:13,380 --> 00:40:16,770 La meg gå videre og endre filen navn, bare for konsistens med 863 00:40:16,770 --> 00:40:20,410 filene du har tilgjengelig til deg etterpå online. 864 00:40:20,410 --> 00:40:21,620 Enter. 865 00:40:21,620 --> 00:40:25,510 Og nå skal jeg gå inn og ikke lagre "David" hard kodet her. 866 00:40:25,510 --> 00:40:28,826 Hva kan jeg gjøre for å veldig enkelt forbedre dette programmet? 867 00:40:28,826 --> 00:40:30,520 >> Jeg kunne ringe getstring. 868 00:40:30,520 --> 00:40:33,240 Det kan være litt ikke-innlysende hva som er ferd med å skje, så jeg kommer 869 00:40:33,240 --> 00:40:38,470 å faktisk legge til en annen linje, printf, og si navn, tykktarm, nær sitat, bare 870 00:40:38,470 --> 00:40:40,790 å gi brukeren en rask på skjermen. 871 00:40:40,790 --> 00:40:42,980 Og nå skal jeg til å gå her, og jeg er kommer til å bruke min hurtigtast. 872 00:40:42,980 --> 00:40:47,680 Jeg kommer til å gå opp, opp, og endre hallo en til hei 2, Enter. 873 00:40:47,680 --> 00:40:49,260 Og heldigvis, jeg gjør fremskritt. 874 00:40:49,260 --> 00:40:52,720 >> Og nå skal jeg til å gå opp til dot slash hei og 875 00:40:52,720 --> 00:40:54,690 endre det til to, Enter. 876 00:40:54,690 --> 00:40:55,650 Og nå mitt program - 877 00:40:55,650 --> 00:40:57,700 Jeg vil zoome inn - blir litt penere. 878 00:40:57,700 --> 00:41:02,190 Navnet skal være, la oss si Rob denne gangen, Enter, hallo, Rob. 879 00:41:02,190 --> 00:41:03,260 Vi kan gjøre det igjen. 880 00:41:03,260 --> 00:41:05,360 Navn, Lauren, Enter. 881 00:41:05,360 --> 00:41:07,820 Navn, Joseph, Enter. 882 00:41:07,820 --> 00:41:11,596 Navn, la oss prøve å være vanskelig, Enter. 883 00:41:11,596 --> 00:41:12,410 Eh. 884 00:41:12,410 --> 00:41:14,680 Det er egentlig ikke en bug. 885 00:41:14,680 --> 00:41:16,090 Så det er bare litt stygg. 886 00:41:16,090 --> 00:41:18,640 Så kanskje vi kunne løse dette i fremtiden, ikke nå. 887 00:41:18,640 --> 00:41:20,840 >> Men hvordan ville du instinktivt gå om adressering 888 00:41:20,840 --> 00:41:21,990 at særlig utfordring? 889 00:41:21,990 --> 00:41:23,710 Det ser bare dumt. 890 00:41:23,710 --> 00:41:27,320 Hvordan kan du unngå ting ser dum? 891 00:41:27,320 --> 00:41:29,890 Slik at vi kunne gjøre, OK, jeg hørte et par av ting, en tilstand og en loop. 892 00:41:29,890 --> 00:41:33,340 Vi kunne bruke, en, en tilstand, for å sjekke det som er lengden av strengen 893 00:41:33,340 --> 00:41:34,190 brukeren ga oss? 894 00:41:34,190 --> 00:41:37,100 Og hvis det er 0, det er bare sitere unquote, de bare trykke Enter, deretter 895 00:41:37,100 --> 00:41:38,930 kanskje jeg skulle kjefte på dem og be dem igjen. 896 00:41:38,930 --> 00:41:39,970 Men hvordan be en trenger dem igjen? 897 00:41:39,970 --> 00:41:44,230 Vel, jeg har også hørt loop, og jeg kunne gjøre det igjen og igjen og igjen 898 00:41:44,230 --> 00:41:47,010 spørre brukeren etter det samme. 899 00:41:47,010 --> 00:41:48,880 >> Vel, la oss gjøre en annen eksempel med en annen 900 00:41:48,880 --> 00:41:50,620 funksjon i CS50 biblioteket. 901 00:41:50,620 --> 00:41:52,330 La meg avslutte denne filen. 902 00:41:52,330 --> 00:41:53,510 La meg lage en ny. 903 00:41:53,510 --> 00:41:58,510 Og jeg skal kalle det adder.c, bare fordi det er lett å gjøre enkel aritmetikk, 904 00:41:58,510 --> 00:42:00,890 selv om dette vil være helt uimponerende med hva du kan gjøre 905 00:42:00,890 --> 00:42:02,250 med enhver moderne datamaskin. 906 00:42:02,250 --> 00:42:03,750 >> Men la meg gå videre nå og - 907 00:42:03,750 --> 00:42:10,680 Jeg har lært min lekse sist gang - inkluderer cs50.h, inkluderer stdio.h, int 908 00:42:10,680 --> 00:42:14,170 viktigste tomrom, som, for nå vil jeg bare ta på blind tro, men vi vil anta 909 00:42:14,170 --> 00:42:16,380 som vil forstå hva det betyr før lenge. 910 00:42:16,380 --> 00:42:21,030 Og jeg kommer til å si noe som "gi meg en int." 911 00:42:21,030 --> 00:42:22,140 >> Og nå, hvordan får jeg en int? 912 00:42:22,140 --> 00:42:26,820 Jeg vil til slutt erklære en variabel kalt x av type int og 913 00:42:26,820 --> 00:42:29,240 lagre i det et heltall fra brukeren. 914 00:42:29,240 --> 00:42:29,970 Så det var en munnfull. 915 00:42:29,970 --> 00:42:35,680 Men hvis noen ønsker å foreslå, hvordan erklærer jeg et heltall kalles x? 916 00:42:35,680 --> 00:42:36,310 Int x. 917 00:42:36,310 --> 00:42:37,430 >> Så det er virkelig så enkelt. 918 00:42:37,430 --> 00:42:38,240 Gi meg en int. 919 00:42:38,240 --> 00:42:39,070 Kall det x. 920 00:42:39,070 --> 00:42:40,580 Nå bruker jeg tilordningsoperatoren. 921 00:42:40,580 --> 00:42:43,400 Og hvordan skal jeg oppbevare fra igjen en verdi på brukeren? 922 00:42:43,400 --> 00:42:47,310 Jeg ønsker ikke å kalle getstring, selvsagt, men heller getint. 923 00:42:47,310 --> 00:42:49,060 Noen argumenter? 924 00:42:49,060 --> 00:42:49,350 Nei. 925 00:42:49,350 --> 00:42:51,870 Så det er åpent paren, nær paren umiddelbart, og deretter en 926 00:42:51,870 --> 00:42:53,440 semikolon slutter linjen. 927 00:42:53,440 --> 00:42:54,930 >> Nå la meg gjøre dette igjen. 928 00:42:54,930 --> 00:42:57,070 Gi meg en annen int. 929 00:42:57,070 --> 00:43:01,850 Denne gangen skal jeg gjøre int, la oss kalle det y, lik getint. 930 00:43:01,850 --> 00:43:05,060 Og nå la meg gjøre noe super-enkel som litt matematikk. 931 00:43:05,060 --> 00:43:14,340 Så printf, er summen av% d plassholder for en int. 932 00:43:14,340 --> 00:43:20,030 Og% d, punktum, skråstrek-n. 933 00:43:20,030 --> 00:43:20,360 >> OK. 934 00:43:20,360 --> 00:43:21,670 Så det er faktisk ikke matematikk. 935 00:43:21,670 --> 00:43:25,500 Men hvis jeg ønsker å si summen av dette verdi pluss denne verdien tilsvarer dette 936 00:43:25,500 --> 00:43:29,320 annen verdi, hvor mange argumenter inn Totalt skal jeg være å gi printf, 937 00:43:29,320 --> 00:43:30,520 til slutt? 938 00:43:30,520 --> 00:43:31,420 Så fire, ikke sant? 939 00:43:31,420 --> 00:43:33,790 Denne strengen og deretter de tre verdier. 940 00:43:33,790 --> 00:43:37,560 Så x er det første jeg ønsker å være plugget i første til% d. 941 00:43:37,560 --> 00:43:39,270 y kommer til å bli den neste. 942 00:43:39,270 --> 00:43:42,030 >> Og nå er jeg slags ønsker å si z, men z ikke eksisterer. 943 00:43:42,030 --> 00:43:43,190 Men det er ikke en stor avtale. 944 00:43:43,190 --> 00:43:45,440 For hva ville du gjøre instinktivt, spesielt hvis du hadde en 945 00:43:45,440 --> 00:43:47,820 grafisk kalkulator, hva du skriver? 946 00:43:47,820 --> 00:43:48,760 Hva med x pluss y? 947 00:43:48,760 --> 00:43:50,200 Så det er ikke en faktisk variabel. 948 00:43:50,200 --> 00:43:51,820 Det er bare summen av to andre variabler. 949 00:43:51,820 --> 00:43:53,170 Og det er helt legitimt. 950 00:43:53,170 --> 00:43:56,630 C forstår sikkert enkel aritmetikk som dette. 951 00:43:56,630 --> 00:43:58,450 >> Semikolon, lagre. 952 00:43:58,450 --> 00:44:02,080 Nå la meg gå ned her og skriver at huggorm, Enter. 953 00:44:02,080 --> 00:44:04,100 Ingen feil, så det er fremgang også. 954 00:44:04,100 --> 00:44:04,890 Skriv huggorm. 955 00:44:04,890 --> 00:44:07,100 Og en annen hurtigtast, hvis du begynner å gå lei 956 00:44:07,100 --> 00:44:08,760 med alle kommandoene - 957 00:44:08,760 --> 00:44:12,650 hvis du begynner å skrive en kommando, som dot slash annonse, og det er der 958 00:44:12,650 --> 00:44:16,020 kjedsomhet spark i, kan du vanligvis treffer Tab å ha maskinen fullføre 959 00:44:16,020 --> 00:44:20,510 resten av uttrykket for deg hvis det ikke er tvetydig hva som skal komme etter annonsen. 960 00:44:20,510 --> 00:44:23,950 >> Så la meg gå videre nå og du klikker på Enter. 961 00:44:23,950 --> 00:44:27,490 Gi meg en int, 1, 2, og heldigvis er det tre. 962 00:44:27,490 --> 00:44:29,900 Men som alltid, testing programmer bør ikke redusere til 963 00:44:29,900 --> 00:44:30,820 bare prøve det en gang. 964 00:44:30,820 --> 00:44:35,560 La meg prøve et hjørne sak, som negativ 1, gi meg en, og at ett 965 00:44:35,560 --> 00:44:36,210 sjekker ut også. 966 00:44:36,210 --> 00:44:38,870 Og jeg sannsynligvis vil gjøre litt mer grundige tester, men jeg er ganske 967 00:44:38,870 --> 00:44:40,630 komfortabel med hvor det er på. 968 00:44:40,630 --> 00:44:43,110 >> Vel, nå la oss prøve et annet program at denne gangen bruker en 969 00:44:43,110 --> 00:44:44,620 litt annen syntaks. 970 00:44:44,620 --> 00:44:46,100 La meg lage en ny fil. 971 00:44:46,100 --> 00:44:51,050 Jeg vil kalle dette conditions0.c til linje opp med noen eksempelkode på nettet. 972 00:44:51,050 --> 00:44:55,550 Og la meg gå videre og gjøre inkludere cs50.h, inkluderer 973 00:44:55,550 --> 00:45:00,320 stdio.h, i hoved ugyldig - 974 00:45:00,320 --> 00:45:01,030 OK. 975 00:45:01,030 --> 00:45:01,850 Det vi går. 976 00:45:01,850 --> 00:45:03,010 Vi har vår standard standardtekst. 977 00:45:03,010 --> 00:45:08,170 >> Og denne gangen skal jeg si printf, "Jeg vil gjerne ha en int, please" bare for å 978 00:45:08,170 --> 00:45:10,030 gjøre prompt litt mer vennlig. 979 00:45:10,030 --> 00:45:11,620 Og nå ønsker jeg å få en int fra brukeren. 980 00:45:11,620 --> 00:45:15,010 Jeg kommer til å kalle det n denne gangen, bare fordi n høres ut som nummer. 981 00:45:15,010 --> 00:45:18,140 getint, og nå, hva gjør Jeg ønsker å gjøre med det? 982 00:45:18,140 --> 00:45:21,640 Vel, hvis n er - og jeg vil zoome inn - 983 00:45:21,640 --> 00:45:25,930 hvis n er større enn 0, vil jeg å gjøre følgende - 984 00:45:25,930 --> 00:45:36,060 printf "Du plukket et positivt tall." Else, jeg kommer til å skrive printf "Du 985 00:45:36,060 --> 00:45:37,870 plukket en negativ 986 00:45:37,870 --> 00:45:39,650 nummer. "All right. 987 00:45:39,650 --> 00:45:44,410 Så dette programmet, selv om jeg gjorde det fort, ser rett syntaktisk. 988 00:45:44,410 --> 00:45:45,010 La meg prøve dette. 989 00:45:45,010 --> 00:45:46,890 Gjør tilstand 0. 990 00:45:46,890 --> 00:45:47,710 Synes å kjøre. 991 00:45:47,710 --> 00:45:49,230 Tilstand 0, inn. 992 00:45:49,230 --> 00:45:51,910 La oss gi det en int 50 år. 993 00:45:51,910 --> 00:45:53,160 Jeg plukket et positivt tall. 994 00:45:53,160 --> 00:45:54,230 La oss prøve det igjen. 995 00:45:54,230 --> 00:45:54,930 Tilstand 0. 996 00:45:54,930 --> 00:45:56,260 Negativ 50. 997 00:45:56,260 --> 00:45:57,290 Jeg plukket et negativt tall. 998 00:45:57,290 --> 00:46:00,350 >> Men nå, la meg velge hva vi vil holde ringer et hjørne sak, som er mer 999 00:46:00,350 --> 00:46:04,702 en interessant sak som du tror kan gi deg noen problemer, 0. 1000 00:46:04,702 --> 00:46:07,940 Nå er jeg ganske sikker på at dette er en av de hjørne tilfeller der null er 1001 00:46:07,940 --> 00:46:12,330 verken positiv eller negativ, så min program, men i syntaktisk 1002 00:46:12,330 --> 00:46:15,440 korrigere - det kompilerer, det går - er ikke logisk riktig. 1003 00:46:15,440 --> 00:46:21,050 Så hva er den enkel fiks her hvis jeg vil å oppdage, hvis jeg ønsker å håndtere n 1004 00:46:21,050 --> 00:46:23,840 lik 0 separat? 1005 00:46:23,840 --> 00:46:32,980 >> Så hvis n er lik 0, da vil jeg si noe som printf "Du plukket 0". 1006 00:46:32,980 --> 00:46:33,990 La meg prøve dette nå. 1007 00:46:33,990 --> 00:46:38,320 La meg gå tilbake hit, fjerner mitt vindu, og rekompilere. 1008 00:46:38,320 --> 00:46:38,690 Hm. 1009 00:46:38,690 --> 00:46:39,770 En feil generere. 1010 00:46:39,770 --> 00:46:41,630 Men jeg vil du sjekke hvis n er lik 0. 1011 00:46:41,630 --> 00:46:44,230 1012 00:46:44,230 --> 00:46:47,720 >> Så igjen, en annen dum ting å venne seg til, er likhetstegn 1013 00:46:47,720 --> 00:46:48,910 tilordningsoperatoren. 1014 00:46:48,910 --> 00:46:52,240 Så dette er faktisk feil i det, teknisk sett, selv om kompilatoren 1015 00:46:52,240 --> 00:46:56,450 beskyttet meg fra meg selv, ville vi teknisk mulig å kopiere 0 til n, som 1016 00:46:56,450 --> 00:46:57,590 er ikke det jeg ønsker. 1017 00:46:57,590 --> 00:47:00,950 Jeg ønsker å teste for likestilling med lik lik. 1018 00:47:00,950 --> 00:47:03,390 Og så nå kan være min bedre løsning. 1019 00:47:03,390 --> 00:47:07,810 >> La meg faktisk resave dette som, si, conditions1, for å være ny og forbedret. 1020 00:47:07,810 --> 00:47:10,480 Så nå hvis jeg rekompilere dette, det ville gjøre forholdene - 1021 00:47:10,480 --> 00:47:16,960 whoops - gjør conditions1 dot slash conditions1, Enter, "Jeg vil gjerne ha en int, 1022 00:47:16,960 --> 00:47:18,760 takk. "Jeg kommer til å gå videre og skriver 50. 1023 00:47:18,760 --> 00:47:19,660 Det er fortsatt god. 1024 00:47:19,660 --> 00:47:21,200 Negative 50, fortsatt god. 1025 00:47:21,200 --> 00:47:24,920 0, og den faktisk oppdaget at jeg plukket 0. 1026 00:47:24,920 --> 00:47:28,200 >> Så hva mer kan jeg nå gjøre med dette? 1027 00:47:28,200 --> 00:47:32,280 Vel, vi kan sikkert gjøre mer komplekse ting. 1028 00:47:32,280 --> 00:47:37,240 Men det jeg ønsker å foreslå er at vi ender på dette notatet her. 1029 00:47:37,240 --> 00:47:41,680 Hvis vi trekker opp dette, vil du se, kanskje, en favoritt tegneserie av deg 1030 00:47:41,680 --> 00:47:43,326 frem til i dag kan du aldri har forstått. 1031 00:47:43,326 --> 00:47:46,550 1032 00:47:46,550 --> 00:47:49,520 Og det er om kvaliteten på latter du bør få med CS vitser. 1033 00:47:49,520 --> 00:47:51,060 Så det er omtrent riktig. 1034 00:47:51,060 --> 00:47:54,900 >> Men mer overbevisende, jeg trodde jeg ville gi oss en liten teaser for mandag. 1035 00:47:54,900 --> 00:47:56,430 Så vi har begynt å bruke heltall. 1036 00:47:56,430 --> 00:47:57,510 Vi har henvist til flyter. 1037 00:47:57,510 --> 00:48:00,120 Vi har selv referert til dobbeltrom, som, igjen, gi deg tall 1038 00:48:00,120 --> 00:48:01,390 etter desimaler. 1039 00:48:01,390 --> 00:48:04,230 >> Men det viser seg at flyter og dobbeltrom, og, egentlig, datamaskiner, 1040 00:48:04,230 --> 00:48:08,470 fundamentalt, ikke kan uttrykke noen verdier presist. 1041 00:48:08,470 --> 00:48:12,840 Vi vet fra matematikk klasser som du kan ha hvilket som helst antall sifre etter at 1042 00:48:12,840 --> 00:48:13,510 desimaltegn. 1043 00:48:13,510 --> 00:48:16,460 Og du kan selv sette en loddrett strek å si disse gå på for alltid. 1044 00:48:16,460 --> 00:48:18,810 >> Dessverre kan du ikke egentlig gjøre det i en datamaskin. 1045 00:48:18,810 --> 00:48:20,400 Og så hjørne tilfeller oppstår. 1046 00:48:20,400 --> 00:48:23,120 For eksempel anta at du er gjør noe økonomisk. 1047 00:48:23,120 --> 00:48:25,700 Du gjør matematikk med prosenter, og 1048 00:48:25,700 --> 00:48:27,030 med kroner og øre. 1049 00:48:27,030 --> 00:48:29,230 Og disse cent ikke nødvendigvis oppstillingen. 1050 00:48:29,230 --> 00:48:34,120 Vel, det viser seg at fraksjoner av pennies kan begynne å legge opp når 1051 00:48:34,120 --> 00:48:37,250 modellert med et datasystem på en slik måte at smart 1052 00:48:37,250 --> 00:48:39,100 mennesker kan dra nytte. 1053 00:48:39,100 --> 00:48:42,650 >> Og de av dere som ikke har sett, ville jeg gjerne gi deg en 30-sekunders teaser av 1054 00:48:42,650 --> 00:48:48,290 en fantastisk film som kalles Office Space, som vil male et bilde av en 1055 00:48:48,290 --> 00:48:51,205 problemet vi skal takle første på mandag. 1056 00:48:51,205 --> 00:48:53,960 Hvis vi kunne heve volumet litt, jeg gir deg 30 1057 00:48:53,960 --> 00:48:55,495 sekunder av kontorlokaler. 1058 00:48:55,495 --> 00:48:55,770 >> [VIDEOAVSPILLING] 1059 00:48:55,770 --> 00:48:59,000 >> -Jeg mener, du, du har ikke vært vist opp og du får beholde jobben. 1060 00:48:59,000 --> 00:49:00,620 >> -Egentlig, jeg blir forfremmet. 1061 00:49:00,620 --> 00:49:03,240 >> -Jeg kunne programmere et virus som ville rive det stedet av store tid. 1062 00:49:03,240 --> 00:49:04,430 >> -Vel, hvordan virker det? 1063 00:49:04,430 --> 00:49:06,782 >> -Hver gang det er en bank transaksjon hvor interessen er beregnet, og det 1064 00:49:06,782 --> 00:49:10,160 er tusenvis om dagen, avslutter datamaskinen opp med disse fraksjoner av en cent. 1065 00:49:10,160 --> 00:49:12,030 >> -Men jeg har ikke tenkt å gjøre noe ulovlig. 1066 00:49:12,030 --> 00:49:12,660 >> -Ulovlig? 1067 00:49:12,660 --> 00:49:15,075 Samir, dette er Amerika. 1068 00:49:15,075 --> 00:49:16,570 >> -Vi må sverge til Gud. 1069 00:49:16,570 --> 00:49:19,070 >> -Hvis ingen vet om dette men oss, ok? 1070 00:49:19,070 --> 00:49:21,920 Ingen familiemedlemmer, ingen kjærester, ingen. 1071 00:49:21,920 --> 00:49:22,700 >> -Selvfølgelig. 1072 00:49:22,700 --> 00:49:23,320 >> -Agreed. 1073 00:49:23,320 --> 00:49:24,280 >> -Ikke bekymre deg, mann. 1074 00:49:24,280 --> 00:49:25,640 Jeg vil ikke si det til noen heller. 1075 00:49:25,640 --> 00:49:26,504 >> [END VIDEOAVSPILLING] 1076 00:49:26,504 --> 00:49:30,030 >> DAVID MALAN: Så dette er altså CS50, som var Office Space, og det vil alle 1077 00:49:30,030 --> 00:49:31,465 fornuftig på mandag. 1078 00:49:31,465 --> 00:49:33,940 Se deg da. 1079 00:49:33,940 --> 00:49:37,880 >> FORTELLER: Ved neste CS50, Rob justerer å være utenfor 1080 00:49:37,880 --> 00:49:39,130 Harvard måltid plan. 1081 00:49:39,130 --> 00:49:56,160