1 00:00:00,000 --> 00:00:12,410 >> [Musik Spela] 2 00:00:12,410 --> 00:00:12,830 >> DAVID MALAN: Okej. 3 00:00:12,830 --> 00:00:13,370 Välkommen tillbaka. 4 00:00:13,370 --> 00:00:16,510 Detta är CS50, och detta är Vecka One, Fortsättning. 5 00:00:16,510 --> 00:00:20,050 Så en av anledningarna till att vi har passerar kring teknik som 6 00:00:20,050 --> 00:00:24,120 Google Glass är att de kommer med något som kallas ett API, ett 7 00:00:24,120 --> 00:00:25,980 Application Programming Interface. 8 00:00:25,980 --> 00:00:28,830 Och vad detta betyder är att med rätt filer och med rätt 9 00:00:28,830 --> 00:00:32,850 dokumentation, kan du skriva faktiskt programvara för även enheter som dessa. 10 00:00:32,850 --> 00:00:36,200 >> Och så vad vi har i åtanke mot terminer slutet är, om ett projekt 11 00:00:36,200 --> 00:00:39,310 innebär, säger, Google Glass kan överklagande, vi får se vad vi kan göra i 12 00:00:39,310 --> 00:00:42,220 termer av hooking dig med några lånad hårdvara såväl som den 13 00:00:42,220 --> 00:00:46,500 allmänt tillgänglig API så att du kan faktiskt börja skapa programvara 14 00:00:46,500 --> 00:00:48,630 som körs på samma Google Glass. 15 00:00:48,630 --> 00:00:51,710 >> En annan enhet som vi har spelat med för sent att vi trodde kanske 16 00:00:51,710 --> 00:00:53,910 kul på terminen slut är denna lilla sak här. 17 00:00:53,910 --> 00:00:56,860 Det kallas Leap Motion, och vad du är om att se är tekniskt en 18 00:00:56,860 --> 00:01:00,280 reklam för enheten, men det talar vad detta 19 00:01:00,280 --> 00:01:01,240 enheten är kapabel till. 20 00:01:01,240 --> 00:01:05,550 Och det också kommer med ett API via som du kan skriva program till 21 00:01:05,550 --> 00:01:10,545 styra din egen dator på ett sätt ganska precis den här minuten filmen här. 22 00:01:10,545 --> 00:01:12,070 >> [VIDEO SPELA] 23 00:01:12,070 --> 00:02:08,002 24 00:02:08,002 --> 00:02:08,590 >> [END VIDEOAVSPELNING] 25 00:02:08,590 --> 00:02:11,190 >> Så just nu, händer här enheten genomföras som en liten USB 26 00:02:11,190 --> 00:02:14,290 kontakt som du kan ansluta till din dator, men jag skulle inte bli förvånad 27 00:02:14,290 --> 00:02:17,930 om innan länge vi har dessa typer av teknik i nästa omgång av datorer 28 00:02:17,930 --> 00:02:20,510 och Mac så att du kan, faktiskt, interagerar med den i 29 00:02:20,510 --> 00:02:21,650 ett sätt som. 30 00:02:21,650 --> 00:02:24,250 I själva verket, vad jag trodde jag skulle göra också, är Jag drog upp en liten demonstration 31 00:02:24,250 --> 00:02:25,860 program som medföljer den här programvaran. 32 00:02:25,860 --> 00:02:28,700 Så jag har lagt den lilla sensorn framför min laptop. 33 00:02:28,700 --> 00:02:32,420 >> Och som ni kan se, inser att det redan att min hand är det 34 00:02:32,420 --> 00:02:33,400 styra det. 35 00:02:33,400 --> 00:02:37,900 Och allt det här programmet gör är lekande små saker som detta. 36 00:02:37,900 --> 00:02:41,080 Men du kan se att, ja, Jag har fem fingrar där. 37 00:02:41,080 --> 00:02:44,270 Om vi ​​kan få den att göra alla 10, du kan tänka dig ett snyggt piano 38 00:02:44,270 --> 00:02:45,390 ansökan eller liknande. 39 00:02:45,390 --> 00:02:47,820 Så om du skulle vilja komma upp efter klass idag och spela med det som 40 00:02:47,820 --> 00:02:49,720 Tja, är du välkommen att. 41 00:02:49,720 --> 00:02:52,930 Så mer om det mot terminens slut. 42 00:02:52,930 --> 00:02:54,420 >> Så ett par administrativ tillkännagivanden. 43 00:02:54,420 --> 00:02:58,690 One, gör avsnittet av denna fredag vid lunchtid på cs60.net/section. 44 00:02:58,690 --> 00:03:01,260 Denna URL är på kursens hemsidan också. 45 00:03:01,260 --> 00:03:04,010 Under tiden, dock, supersections kommer debut denna söndag. 46 00:03:04,010 --> 00:03:07,800 Supersections är en engångs grej, eftersom det tar oss lite tid att arbeta 47 00:03:07,800 --> 00:03:09,470 reda på vem som är i vilket avsnitt och där. 48 00:03:09,470 --> 00:03:12,280 >> Så nu på söndag, kommer det att finnas en avsnitt för de mindre bekväm, 49 00:03:12,280 --> 00:03:14,040 ett avsnitt för dem mer bekväm. 50 00:03:14,040 --> 00:03:16,110 Och de av er någonstans i mellan är välkommen att gå till 51 00:03:16,110 --> 00:03:17,850 endera eller båda eller ingen. 52 00:03:17,850 --> 00:03:19,150 Båda dessa kommer att filmas. 53 00:03:19,150 --> 00:03:22,740 De kommer att vara i ett större auditorium än en del som normalt skulle vara i. 54 00:03:22,740 --> 00:03:26,110 Men målet här är att utrusta dig med viss tröst med problem som en, 55 00:03:26,110 --> 00:03:29,910 med C, med CS50 apparaten, detta helg, även innan du reda på din 56 00:03:29,910 --> 00:03:31,050 formella delen uppdrag. 57 00:03:31,050 --> 00:03:34,700 Så möter du din TF och din mindre grupp av sectionmates i omkring 58 00:03:34,700 --> 00:03:36,350 en veckas tid. 59 00:03:36,350 --> 00:03:38,200 >> Kontorstid, under tiden, har pågått. 60 00:03:38,200 --> 00:03:41,020 Gör dra nytta av dem i kväll eller i morgon kväll om du vill. 61 00:03:41,020 --> 00:03:43,460 Problem set 0 beror på fredag. 62 00:03:43,460 --> 00:03:46,680 Detta är en dag senare än regelbundet-planlagd torsdag. 63 00:03:46,680 --> 00:03:50,410 Men med problem set 1, ser du att den innehåller lite uppvärmning 64 00:03:50,410 --> 00:03:52,770 övningar som du själv kan förlänga ditt 65 00:03:52,770 --> 00:03:54,660 Torsdag deadline till fredag. 66 00:03:54,660 --> 00:03:58,410 Problem set 1, under tiden, kommer debut på kursens hemsida detta kommer 67 00:03:58,410 --> 00:04:02,000 Fredag, om du skulle vilja krypa upp med det som jag gjorde en gång i tiden sen 68 00:04:02,000 --> 00:04:04,370 Fredag ​​kväll i ditt rum. 69 00:04:04,370 --> 00:04:07,660 >> Så cs50.net/appliance är den plats där du kan få CS50 apparaten 70 00:04:07,660 --> 00:04:09,040 att vi började använda på måndag. 71 00:04:09,040 --> 00:04:10,140 Vi kommer att använda den lite mer idag. 72 00:04:10,140 --> 00:04:14,040 Men lita på att problemet satt 1 Specifikationen kommer att gå igenom 73 00:04:14,040 --> 00:04:16,490 exakt de steg du behöver att få det igång. 74 00:04:16,490 --> 00:04:22,120 Så oroa dig inte om att göra det innan Pset 1 om du inte vill. 75 00:04:22,120 --> 00:04:22,660 >> Okej. 76 00:04:22,660 --> 00:04:27,180 Så vi tittade på måndagen källkod, men i samband med en ny 77 00:04:27,180 --> 00:04:30,895 programmeringsspråk, nämligen C och C, Till skillnad från Scratch, inte grafiskt. 78 00:04:30,895 --> 00:04:32,270 Det är pussel inte bitar. 79 00:04:32,270 --> 00:04:34,450 Det är mer engelska-liknande syntax. 80 00:04:34,450 --> 00:04:37,140 Och det finns ett par inblandade steg i faktiskt skriva och köra ett 81 00:04:37,140 --> 00:04:41,650 program i C, eftersom förutom källan kod som denna, behöver du något 82 00:04:41,650 --> 00:04:42,890 kallas en kompilator. 83 00:04:42,890 --> 00:04:46,682 Och i lekmannaspråk, vad gör en kompilator för oss? 84 00:04:46,682 --> 00:04:47,650 Yeah. 85 00:04:47,650 --> 00:04:51,040 >> STUDENT: Den omvandlar koden att du skriver till 0 och 1. 86 00:04:51,040 --> 00:04:51,151 >> DAVID MALAN: Bra. 87 00:04:51,151 --> 00:04:53,580 Så det omvandlar koden som Vi skriver till 0 och 1. 88 00:04:53,580 --> 00:04:57,730 Den konverterar s.k. källkod till objektkod, den senare som ser 89 00:04:57,730 --> 00:04:59,140 lite ungefär så här. 90 00:04:59,140 --> 00:05:02,860 Och det är din CPU, hjärnorna inuti datorn, som på grund av 91 00:05:02,860 --> 00:05:06,280 människor som skapade dessa datorer, vet vad dessa sekvenser 92 00:05:06,280 --> 00:05:07,460 av 0 och 1 medelvärde. 93 00:05:07,460 --> 00:05:08,640 >> Kanske det betyder print. 94 00:05:08,640 --> 00:05:10,265 Kanske det betyder tillägg. 95 00:05:10,265 --> 00:05:11,610 Kanske det betyder subtraktion. 96 00:05:11,610 --> 00:05:13,350 Kanske betyder det visa en bild. 97 00:05:13,350 --> 00:05:16,870 Det finns fördefinierade mönster av bitar att världen har beslutat detta 98 00:05:16,870 --> 00:05:17,700 vissa saker. 99 00:05:17,700 --> 00:05:20,760 Men för det mesta i denna kurs, vi kommer att arbeta på en högre nivå, och 100 00:05:20,760 --> 00:05:24,180 vi tar för givet att det finns saker som kompilatorer som kan 101 00:05:24,180 --> 00:05:27,670 göra vår funktion källkod på det sätt vi tänker. 102 00:05:27,670 --> 00:05:31,660 >> Så det program vi först skrev förra veckan och sedan började port, så att 103 00:05:31,660 --> 00:05:33,920 tala, till C detta tidigare Måndag, var detta. 104 00:05:33,920 --> 00:05:35,700 När grön flagg klickade, säga hej. 105 00:05:35,700 --> 00:05:37,430 Detta var naturligtvis skriven i Scratch. 106 00:05:37,430 --> 00:05:40,710 Och jag hävdade att motsvarande program i C såg lite 107 00:05:40,710 --> 00:05:41,520 ungefär så här. 108 00:05:41,520 --> 00:05:45,050 >> Så vad jag trodde vi skulle göra först är, låt oss retas isär vad som ser, vid första 109 00:05:45,050 --> 00:05:48,790 blick, visserligen, som ganska svårbegripliga syntax, men du kommer att börja märka 110 00:05:48,790 --> 00:05:50,160 mönster ganska snabbt. 111 00:05:50,160 --> 00:05:53,770 Vad ska vi också göra i dag är att ge dig med en mental modell för vissa 112 00:05:53,770 --> 00:05:57,280 Canonical, några vanliga konstruktioner i programmering. 113 00:05:57,280 --> 00:06:00,420 Och sedan ska vi faktiskt få våra händer smutsiga med några exempel också. 114 00:06:00,420 --> 00:06:04,140 >> Så för de av er mer bekväm, inser att denna vecka och sedan nästa 115 00:06:04,140 --> 00:06:05,940 vecka kan mycket väl vara en bit av översyn. 116 00:06:05,940 --> 00:06:08,810 Men särskilt när hackare upplagan av problem set 1 går ut på 117 00:06:08,810 --> 00:06:12,330 kursens hemsida på fredagen, tror jag du kommer att upptäcka att även när du fyller i 118 00:06:12,330 --> 00:06:15,390 vissa ämnen under nästa vecka eller två, du börjar få allt mer 119 00:06:15,390 --> 00:06:18,410 utmanas och möter nya och nyare saker. 120 00:06:18,410 --> 00:06:21,310 >> Så låt oss retas detta program isär några rader åt gången. 121 00:06:21,310 --> 00:06:24,140 Högst upp har vi vad som är tekniskt kallas en 122 00:06:24,140 --> 00:06:25,950 förprocessor direktivet. 123 00:06:25,950 --> 00:06:30,510 Detta är bara en kodrad som säger att inkludera innehållet i en fil, 124 00:06:30,510 --> 00:06:35,080 kallas standard I / N, standard input - eller, förlåt, standard I / O, standard 125 00:06:35,080 --> 00:06:38,670 input / output,. h, insida av mitt eget program. 126 00:06:38,670 --> 00:06:41,670 >> Så med andra ord, om jag skrev detta program med en enkel textredigerare som 127 00:06:41,670 --> 00:06:45,260 gedit, den enklare motsvarande något som Microsoft Word, som 128 00:06:45,260 --> 00:06:50,970 instruktion, # include stdio.h är bara kommer att tala om för kompilatorn, greppa 129 00:06:50,970 --> 00:06:56,080 innehållet i den andra filen, stdio.h, och klistra in dem här. 130 00:06:56,080 --> 00:06:57,090 >> Nu, varför jag bry mig? 131 00:06:57,090 --> 00:07:01,850 Vad gjorde vi hävdar är inne i den här filen kallas stdio.h, som lagras 132 00:07:01,850 --> 00:07:05,490 någonstans på min hårddisk, eller i detta fall, någonstans i CS50 apparaten? 133 00:07:05,490 --> 00:07:06,635 Någon annan lägga den där för mig. 134 00:07:06,635 --> 00:07:09,910 Men vad betyder det? 135 00:07:09,910 --> 00:07:13,020 >> Ja, så det är en försäkran om en funktion som heter printf. 136 00:07:13,020 --> 00:07:17,400 Så printf påminner funktion som visar ord och tecken och 137 00:07:17,400 --> 00:07:20,160 nummer på skärmen på min budgivning. 138 00:07:20,160 --> 00:07:21,220 Men jag ville inte skriva det. 139 00:07:21,220 --> 00:07:22,230 CS50 inte skriva det. 140 00:07:22,230 --> 00:07:26,990 Någon år skrev sedan det, och de huvudsak gav oss receptet för det 141 00:07:26,990 --> 00:07:29,110 i en fil som heter stdio.h. 142 00:07:29,110 --> 00:07:33,240 Så att första raden ger bara mig tillgång till funktioner som någon annan 143 00:07:33,240 --> 00:07:36,500 skrev år sedan, bland vilka är printf. 144 00:07:36,500 --> 00:07:39,450 >> Nu, nästa rad jag ska vifta min handen på, åtminstone tills nästa vecka. 145 00:07:39,450 --> 00:07:43,620 Men för nu, vet att int main (void) är väsentligen motsvarar detta 146 00:07:43,620 --> 00:07:46,310 gul pusselbit när grön flagga klickade. 147 00:07:46,310 --> 00:07:49,510 Världen, år sedan, bestämde att om du skriver ett program i 148 00:07:49,510 --> 00:07:53,150 språk som kallas C, du börjar ditt program med en rad 149 00:07:53,150 --> 00:07:54,410 som ser ut som det. 150 00:07:54,410 --> 00:07:57,650 I nästan en veckas tid, det ska göra känna vad int är, vad tomrum. 151 00:07:57,650 --> 00:08:00,840 Men för nu, tänk bara på det eftersom denna gula pusselbit. 152 00:08:00,840 --> 00:08:04,550 >> Nu nästa, har vi en klammerparentes följde av en annan nära klammerparentes, 153 00:08:04,550 --> 00:08:05,240 så att säga. 154 00:08:05,240 --> 00:08:07,430 Och vi får se dem i hela program i C, samt 155 00:08:07,430 --> 00:08:08,930 JavaScript och PHP. 156 00:08:08,930 --> 00:08:11,345 Och dessa kapsla bara relaterade rader kod. 157 00:08:11,345 --> 00:08:14,600 Den öppna klammerparentes huvudsak säger, här kommer lite kod. 158 00:08:14,600 --> 00:08:17,590 Och den slutna klammerparentesen, vilket är vinklad i den andra riktningen, bara 159 00:08:17,590 --> 00:08:19,920 betyder, det är det för den aktuella koden. 160 00:08:19,920 --> 00:08:22,970 >> Så saftigt linjen i denna första Programmet är det sista, printf, 161 00:08:22,970 --> 00:08:25,080 quote-unquote, hallå världen. 162 00:08:25,080 --> 00:08:30,670 Och jag heter sak mellan citat vad förra gången? 163 00:08:30,670 --> 00:08:31,285 Så det är en sträng. 164 00:08:31,285 --> 00:08:35,309 Och en sträng är bara techie term för en sekvens av 165 00:08:35,309 --> 00:08:37,169 tecken, ett ord, en fras. 166 00:08:37,169 --> 00:08:39,380 Även en enda bokstav kunde vara dubbelt citeras. 167 00:08:39,380 --> 00:08:41,840 Men det är en sekvens av noll eller flera tecken. 168 00:08:41,840 --> 00:08:43,650 >> Backslash-n, fast, ser lite konstigt. 169 00:08:43,650 --> 00:08:46,290 Men det betydde helt enkelt något enkel till datorn. 170 00:08:46,290 --> 00:08:48,060 Vad är omvänt snedstreck-n? 171 00:08:48,060 --> 00:08:48,570 Ny rad. 172 00:08:48,570 --> 00:08:52,490 Så det är bara speciell sekvens av tecken på att världen har beslutat 173 00:08:52,490 --> 00:08:56,880 medel sätta en radbrytning just där, eftersom kompilatorn kommer faktiskt få 174 00:08:56,880 --> 00:09:02,280 förvirrade, oftast, om du, mycket förståeligt, men felaktigt, precis 175 00:09:02,280 --> 00:09:04,570 börja slå Enter för att sätta nya rader i koden. 176 00:09:04,570 --> 00:09:07,150 Du måste vara lite mer explicit med backslash-n. 177 00:09:07,150 --> 00:09:10,540 >> Och vi får se att det finns några andra sådana mönster för specialtecken. 178 00:09:10,540 --> 00:09:14,340 Till exempel, att om du ville låta din sinne vandra till ett hörn fall 179 00:09:14,340 --> 00:09:18,080 antar att jag ville skriva en dubbla citationstecken på skärmen för 180 00:09:18,080 --> 00:09:21,840 oavsett skäl, skulle det verkar vara lite problematiskt, rätt? 181 00:09:21,840 --> 00:09:24,990 För om jag sätter en dubbel citat i mitten av "Hello, world," oavsett 182 00:09:24,990 --> 00:09:30,120 skäl, varför det förefaller potentiellt problematiskt? 183 00:09:30,120 --> 00:09:32,180 Det bryter strängen. 184 00:09:32,180 --> 00:09:34,700 >> Kompilatorn är bara ett program. 185 00:09:34,700 --> 00:09:37,210 Ett program som en kompilator är bara att gå att läsa din kod topp till botten, 186 00:09:37,210 --> 00:09:37,990 vänster till höger. 187 00:09:37,990 --> 00:09:41,850 Och om ser tre citattecken istället av två, det kommer inte att veta 188 00:09:41,850 --> 00:09:45,210 Om du menar att saken till vänster bör vara strängen, eller den sak att 189 00:09:45,210 --> 00:09:46,570 höger, eller alltihop. 190 00:09:46,570 --> 00:09:50,560 Det är tvetydigt, och så vad en typisk kompilatorn skulle göra är att bara flippa ut, 191 00:09:50,560 --> 00:09:53,710 och ge dig några felmeddelande, och gör dig ta itu med problemet. 192 00:09:53,710 --> 00:09:58,120 >> Så med tanke på att backslash-n betyder ett nytt linje, vad skulle dina instinkter nu 193 00:09:58,120 --> 00:10:02,610 börjar vara om du ville inkludera något onormalt som en dubbel 194 00:10:02,610 --> 00:10:06,210 citera insidan av denna annars citerade snöre? 195 00:10:06,210 --> 00:10:07,640 Backslash-dubbla citattecken. 196 00:10:07,640 --> 00:10:09,630 Och så får vi se detta typ av mönster också. 197 00:10:09,630 --> 00:10:12,490 >> Om du vill göra något lite konstigt, ser du att det 198 00:10:12,490 --> 00:10:15,060 lösningar följer ofta ett mönster, och omvänt snedstreck 199 00:10:15,060 --> 00:10:17,150 betecknar en escape-sekvens. 200 00:10:17,150 --> 00:10:20,320 Och det betyder bara något speciellt att vi måste representera i ett 201 00:10:20,320 --> 00:10:21,060 annat sätt. 202 00:10:21,060 --> 00:10:23,830 När det gäller hur du representerar ett omvänt snedstreck, ja, vi 203 00:10:23,830 --> 00:10:24,550 komma tillbaka till det. 204 00:10:24,550 --> 00:10:26,930 Men svaret, också, är faktiskt lite uppenbart. 205 00:10:26,930 --> 00:10:31,080 >> Så låt oss nu införa någon annan programmering konstruktioner 206 00:10:31,080 --> 00:10:31,915 som du såg i Scratch. 207 00:10:31,915 --> 00:10:34,790 Du har förmodligen tagit för givet redan om du redan dök in 208 00:10:34,790 --> 00:10:36,060 problem som 0. 209 00:10:36,060 --> 00:10:40,950 Men låt oss nu införa syntaxen i C för dessa annars ganska intuitivt 210 00:10:40,950 --> 00:10:42,300 idéer, åtminstone några av dem. 211 00:10:42,300 --> 00:10:45,570 >> Så denna föreställning om ett tillstånd eller en gren, medan vi tidigare 212 00:10:45,570 --> 00:10:49,330 representerade den med kod som såg så här till vänster i Scratch - 213 00:10:49,330 --> 00:10:52,200 Om x är mindre än y, säg det - 214 00:10:52,200 --> 00:10:56,760 istället nu i C - låt mig finslipa in på det enklaste fallet - 215 00:10:56,760 --> 00:11:01,235 vi bara kommer att säga om, öppnar parentes, är något sant - en 216 00:11:01,235 --> 00:11:04,190 Booleskt uttryck kommer att gå där jag har sagt tillstånd - 217 00:11:04,190 --> 00:11:08,170 stäng parentes, sedan vad insidan av dessa klammerparenteser. 218 00:11:08,170 --> 00:11:11,020 >> Så även här klammerparentesen är ungefär som Scratch s 219 00:11:11,020 --> 00:11:12,460 U-formade pusselbitar. 220 00:11:12,460 --> 00:11:14,890 Gör vad som finns inuti dessa klammerparenteser. 221 00:11:14,890 --> 00:11:16,790 I detta fall, snedstreck snedstreck. 222 00:11:16,790 --> 00:11:19,720 Och märker detta är en framåt snedstreck, inte ett omvänt snedstreck. 223 00:11:19,720 --> 00:11:21,440 Snedstreck, snedstreck, för dem som har programmerat 224 00:11:21,440 --> 00:11:23,370 tidigare, betyder bara - 225 00:11:23,370 --> 00:11:24,190 det är bara en kommentar. 226 00:11:24,190 --> 00:11:26,630 En kommentar är inte en linje av kod, per se. 227 00:11:26,630 --> 00:11:30,200 Det är en rad av engelska som du, det människa, har skrivit till dig 228 00:11:30,200 --> 00:11:33,540 kanske påminna dig att göra något, till förklara för dig själv, för att förklara för 229 00:11:33,540 --> 00:11:35,260 någon annan, vad din kod gör. 230 00:11:35,260 --> 00:11:37,050 Det är bara en beskrivande kommentar. 231 00:11:37,050 --> 00:11:40,880 >> Nu, naturligtvis, kan vi ha en tvåvägs vägskäl bara genom att göra detta, en 232 00:11:40,880 --> 00:11:43,930 tre-vägs vägskäl genom att göra detta, och om du fortsätter 233 00:11:43,930 --> 00:11:47,570 mönster, kan du ha fyra-sätt, fem-vägs, sex-vägs gafflar i vägen om 234 00:11:47,570 --> 00:11:50,150 du behöver för att hantera, ja, att många förhållanden. 235 00:11:50,150 --> 00:11:52,010 Och sedan märker parallelliteten här - 236 00:11:52,010 --> 00:11:55,070 if (villkor), else if (villkor), och det enda som är lite 237 00:11:55,070 --> 00:11:58,010 konstigt är det sista, vilket är just det annars. 238 00:11:58,010 --> 00:12:01,170 Men återigen, detta är identiska, konceptuellt, vad vi har gjort 239 00:12:01,170 --> 00:12:04,690 redan, även om syntaxen ta lite tid att vänja sig. 240 00:12:04,690 --> 00:12:07,730 >> Nu, i detta exempel finns det någon annan konstig syntax. 241 00:12:07,730 --> 00:12:11,220 Vi ser printf igen, öppen parentes, och avslutande parentestecken. 242 00:12:11,220 --> 00:12:13,190 Och inuti finns en sträng inom citationstecken. 243 00:12:13,190 --> 00:12:17,060 De parentes, inom ramen av printf, gå till vänster 244 00:12:17,060 --> 00:12:18,160 och till höger om vad? 245 00:12:18,160 --> 00:12:22,190 Vad beskriver vi som citeras sträng som mer allmänt? 246 00:12:22,190 --> 00:12:23,320 >> Så det är ett argument. 247 00:12:23,320 --> 00:12:26,620 Varje gång du har en funktion, som printf och sedan en öppen föräldra och en 248 00:12:26,620 --> 00:12:30,330 nära föräldra och något inuti det, oavsett om det är en sträng, eller en 249 00:12:30,330 --> 00:12:34,420 heltal, eller något annat, den saken i mellan dessa parenteser kallas 250 00:12:34,420 --> 00:12:35,110 ett argument. 251 00:12:35,110 --> 00:12:37,910 >> Och ett argument påverkar bara funktionens beteende. 252 00:12:37,910 --> 00:12:39,990 I detta fall är klart det ganska hur. 253 00:12:39,990 --> 00:12:44,480 x 00:12:47,720 Och printf kommer att skriva ut exakt det. 255 00:12:47,720 --> 00:12:51,590 Eftersom säkerligen den person år sedan som genomförs printf hade ingen aning 256 00:12:51,590 --> 00:12:55,000 vad vi mänskliga efterföljare var kommer att använda printf för. 257 00:12:55,000 --> 00:12:58,610 Så det är därför argument finns, påverka beteendet efter en funktions 258 00:12:58,610 --> 00:12:59,450 skrivits. 259 00:12:59,450 --> 00:13:00,780 >> Nu, booleskt uttryck. 260 00:13:00,780 --> 00:13:02,470 Vi har sett dessa innan i Scratch. 261 00:13:02,470 --> 00:13:06,680 Det visar sig i C kan du också "eller" ihop dem, så att säga. 262 00:13:06,680 --> 00:13:10,930 Två vertikala streck betyder att detta block av koden, detta gör detta kommer 263 00:13:10,930 --> 00:13:15,350 köra om det första villkoret är sant eller det andra villkoret är sant. 264 00:13:15,350 --> 00:13:17,710 Och även om du kanske inte har gjort detta i Scratch, kan du verkligen 265 00:13:17,710 --> 00:13:20,580 göra detta i Scratch, och du kan också uttrycka dig annorlunda - 266 00:13:20,580 --> 00:13:25,300 om det första villkoret och den andra villkoret är sant, vad är 267 00:13:25,300 --> 00:13:27,160 insidan av klammerparenteser. 268 00:13:27,160 --> 00:13:31,210 >> Och precis som en parentes, anledningen till det är en dubbel-tecken och en dubbel 269 00:13:31,210 --> 00:13:34,610 vertikalt streck, vi får se så småningom att en enda vertikal bar och en 270 00:13:34,610 --> 00:13:38,710 enda ampersand har faktiskt olika vilket i C. Så för nu, 271 00:13:38,710 --> 00:13:41,840 att duplicering av symboler är avsiktlig. 272 00:13:41,840 --> 00:13:45,070 >> Så låt oss presentera, kortfattat, denna andra bit av syntax. 273 00:13:45,070 --> 00:13:48,940 Detta inte riktigt föra över till Scratch, men jag hävdar att jag kan 274 00:13:48,940 --> 00:13:55,190 genomföra idén om en om annat, om annars, om annat, om annat uttalande med 275 00:13:55,190 --> 00:13:56,760 något som kallas en switch. 276 00:13:56,760 --> 00:14:00,820 Och den enda anledningen detta verkligen existerar är att bara ge dig, programmerare, en 277 00:14:00,820 --> 00:14:05,470 något annorlunda sätt att lösa några problem, även om logiskt att det 278 00:14:05,470 --> 00:14:07,340 inte ger dig några nya funktioner. 279 00:14:07,340 --> 00:14:08,530 >> Med det menar jag det. 280 00:14:08,530 --> 00:14:13,330 När du säger switch, och sedan ett mellanslag, och sedan ett par parenteser inuti 281 00:14:13,330 --> 00:14:14,570 av vilka går ett uttryck - 282 00:14:14,570 --> 00:14:18,010 och detta kan vara lite icke uppenbara i början, men detta är inte ett argument, 283 00:14:18,010 --> 00:14:20,680 tekniskt, eftersom brytare är inte en funktion. 284 00:14:20,680 --> 00:14:24,230 Så för nu, bara anta att vi använder parenteser på olika platser 285 00:14:24,230 --> 00:14:25,250 av olika skäl. 286 00:14:25,250 --> 00:14:29,310 >> Så slå på uttrycket betyder att jag kan sätta en variabel inuti dem 287 00:14:29,310 --> 00:14:31,350 parenteser där det står uttrycket. 288 00:14:31,350 --> 00:14:33,090 Och sedan om den variabeln - 289 00:14:33,090 --> 00:14:35,400 antar att det kallas x, och det är bara ett heltal - 290 00:14:35,400 --> 00:14:38,900 Jag kan då räkna in min bild här något som detta. 291 00:14:38,900 --> 00:14:41,690 Om x är min variabel, och jag vill göra något om x 292 00:14:41,690 --> 00:14:43,480 är lika med 1, kan jag göra det. 293 00:14:43,480 --> 00:14:46,660 >> Om jag vill ha istället för att göra något Om x är 2, kan jag göra det. 294 00:14:46,660 --> 00:14:50,390 Else, om jag vill göra något annat helt, kan jag ha en standard fall 295 00:14:50,390 --> 00:14:52,750 då jag gör denna andra sak. 296 00:14:52,750 --> 00:14:58,730 Så i den meningen är det likvärdigt med ett om x är lika med är lika med 1, annars om annat, 297 00:14:58,730 --> 00:15:01,150 men jag nämner detta nu bara för att vi får se det igen. 298 00:15:01,150 --> 00:15:03,720 Men för nu, vet bara att den finns. 299 00:15:03,720 --> 00:15:04,220 >> Okej. 300 00:15:04,220 --> 00:15:07,660 Så dessa sista paret är lite mer komplex vid första anblicken, men de gör 301 00:15:07,660 --> 00:15:09,385 något ganska okomplicerad. 302 00:15:09,385 --> 00:15:14,410 En for-loop i C är en bit av kod som bara gör något nytt och 303 00:15:14,410 --> 00:15:15,330 igen och igen. 304 00:15:15,330 --> 00:15:17,590 Och det bara irriterande om det är det är att det är lite kryptisk 305 00:15:17,590 --> 00:15:21,380 att uttrycka dig i denna cykliska mönster, men världen standardiserat på 306 00:15:21,380 --> 00:15:22,450 följande sätt. 307 00:15:22,450 --> 00:15:25,760 >> När du använder en for-slinga, har du fått ett par av parenteser igen. 308 00:15:25,760 --> 00:15:27,570 Och märker de två semikolon i det. 309 00:15:27,570 --> 00:15:34,380 Dessa två semikolon separata tre olika uttryck insidan av 310 00:15:34,380 --> 00:15:35,020 parentes. 311 00:15:35,020 --> 00:15:37,170 En är den så kallade initieringar. 312 00:15:37,170 --> 00:15:38,830 En är den så kallade tillstånd. 313 00:15:38,830 --> 00:15:40,210 Och ett är de så kallade uppdateringar. 314 00:15:40,210 --> 00:15:43,240 >> Tittade på i det abstrakta, är detta helt icke-uppenbara, så låt oss titta 315 00:15:43,240 --> 00:15:44,630 vid ett konkret exempel. 316 00:15:44,630 --> 00:15:46,720 I Scratch hade vi en upprepning blocket. 317 00:15:46,720 --> 00:15:50,670 Och detta block sade upprepa 10 gånger, säger "Hej, världen." Låt mig hävdar att 318 00:15:50,670 --> 00:15:53,810 nu, och vi ska återkomma till detta, och Detta kommer också att få mer bekant med 319 00:15:53,810 --> 00:15:57,345 dig innan länge, motsvarande C kod kan sägas vara här - 320 00:15:57,345 --> 00:16:02,320 en för uttalande och ett utrymme, ett par parenteser, märker semikolon i 321 00:16:02,320 --> 00:16:05,730 där, som separerar tre distinkta saker, initiering, 322 00:16:05,730 --> 00:16:07,320 skick, och uppdateringen. 323 00:16:07,320 --> 00:16:08,840 >> Och ta en gissning vad det första gör. 324 00:16:08,840 --> 00:16:10,690 Int i = 0. 325 00:16:10,690 --> 00:16:15,120 I grova lekmannaspråk, vad är att göra för oss, antagligen? 326 00:16:15,120 --> 00:16:15,590 Så ja. 327 00:16:15,590 --> 00:16:19,630 Det förklara en variabel som heter jag, och det är att ge det vilket värde? 328 00:16:19,630 --> 00:16:20,220 0. 329 00:16:20,220 --> 00:16:24,280 Så det är att skapa en variabel som heter Jag, lagra värdet 0 i den. 330 00:16:24,280 --> 00:16:26,420 Det är den så kallade initiering. 331 00:16:26,420 --> 00:16:29,360 >> Okej, nu har jag påstod tidigare att mitten sak, jag 332 00:16:29,360 --> 00:16:31,760 <10, är ​​villkoret. 333 00:16:31,760 --> 00:16:32,730 Så vad gör? 334 00:16:32,730 --> 00:16:36,560 Nå, vad för loop gör när en program med en for-loop körs, är 335 00:16:36,560 --> 00:16:41,050 varje gång datorn går genom denna slinga, uppifrån och ned, uppifrån och 336 00:16:41,050 --> 00:16:43,740 botten, precis som ni gjorde när räkna er själva och sitta ner, 337 00:16:43,740 --> 00:16:47,090 igen och igen och igen, datorn kommer 338 00:16:47,090 --> 00:16:48,560 att kontrollera att villkoret. 339 00:16:48,560 --> 00:16:51,140 Och om jag är mindre än 10, Det ska göra det igen. 340 00:16:51,140 --> 00:16:53,100 Om i är mindre än 10, Det ska göra det igen. 341 00:16:53,100 --> 00:16:55,030 Om i är mindre än tio, Det ska göra det igen. 342 00:16:55,030 --> 00:16:57,330 Så det tyder på att förhoppningsvis jag förändras. 343 00:16:57,330 --> 00:16:59,010 Annars skulle vi ha en oändlig loop. 344 00:16:59,010 --> 00:17:02,590 Och sannerligen, jag förändras, eftersom sista efter semikolon finns 345 00:17:02,590 --> 00:17:05,569 är den något kryptiska syntax i + +. 346 00:17:05,569 --> 00:17:07,630 Men de av er som har gjort detta tidigare, innebär att bara 347 00:17:07,630 --> 00:17:08,609 helt enkelt vad? 348 00:17:08,609 --> 00:17:09,730 >> STUDENTER: [inplacering RÖSTER]. 349 00:17:09,730 --> 00:17:10,740 >> DAVID MALAN: Lägg 1 till i.. 350 00:17:10,740 --> 00:17:11,819 Increment i. 351 00:17:11,819 --> 00:17:13,910 Så vi såg en Scratch pussel lappar för det, faktiskt. 352 00:17:13,910 --> 00:17:18,230 Det ser inte ut som jag + +, men som bara betyder helt enkelt öka den 353 00:17:18,230 --> 00:17:24,040 värde som jag med 1 varje gång du gör detta. 354 00:17:24,040 --> 00:17:26,910 Så bokstavligen, börjar du med initierar jag till 0. 355 00:17:26,910 --> 00:17:29,520 Du kontrollerar sedan ditt tillstånd. 356 00:17:29,520 --> 00:17:31,070 Är 0 mindre än 10? 357 00:17:31,070 --> 00:17:31,730 Ja. 358 00:17:31,730 --> 00:17:32,910 Vi går genom öglan. 359 00:17:32,910 --> 00:17:35,150 >> Nästa sak jag hävdar datorns kommer att göra är att det kommer 360 00:17:35,150 --> 00:17:35,910 att inkrementera i. 361 00:17:35,910 --> 00:17:37,080 Så jag är nu 1. 362 00:17:37,080 --> 00:17:37,940 Det kontrollerar villkoret. 363 00:17:37,940 --> 00:17:39,290 Är en mindre än 10? 364 00:17:39,290 --> 00:17:39,930 Självklart. 365 00:17:39,930 --> 00:17:41,030 Så gör det igen. 366 00:17:41,030 --> 00:17:43,580 Sen steg jag + + till 2. 367 00:17:43,580 --> 00:17:44,610 Är 2 mindre än 10? 368 00:17:44,610 --> 00:17:45,230 Ja. 369 00:17:45,230 --> 00:17:46,670 Och igen och igen och igen. 370 00:17:46,670 --> 00:17:50,070 Och slutligen, på grund av den plus-plussing, får vi att jag är lika 10. 371 00:17:50,070 --> 00:17:51,675 Är 10 mindre än 10? 372 00:17:51,675 --> 00:17:52,990 Tja, uppenbarligen inte. 373 00:17:52,990 --> 00:17:55,320 Och det är den punkt där for-loopen stannar precis. 374 00:17:55,320 --> 00:17:58,320 Och om du har mer kod på skärmen nere, datorn 375 00:17:58,320 --> 00:18:01,620 fortsätter att köra den koden istället. 376 00:18:01,620 --> 00:18:05,380 >> Så återigen, även om detta kommer att ser ut och känns lite konstigt på 377 00:18:05,380 --> 00:18:07,830 först, säkert för dig som har aldrig programmerat förut, det 378 00:18:07,830 --> 00:18:11,640 bokstavligen minskar begreppsmässigt vad är annars en mycket 379 00:18:11,640 --> 00:18:14,330 okomplicerad pussel bit i Scratch. 380 00:18:14,330 --> 00:18:19,130 >> Okej, lovade jag att det skulle finnas andra analoger i Scratch. 381 00:18:19,130 --> 00:18:20,060 Det finns här också. 382 00:18:20,060 --> 00:18:21,700 Och vi såg detta kort förra gången. 383 00:18:21,700 --> 00:18:23,530 Men kom ihåg det forever Block i början? 384 00:18:23,530 --> 00:18:25,490 Det gör bara något evigt? 385 00:18:25,490 --> 00:18:27,470 Jag hävdade att man kunde genomföra detta på detta sätt. 386 00:18:27,470 --> 00:18:29,740 Och du kan faktiskt genomföra detta i en massa olika sätt. 387 00:18:29,740 --> 00:18:34,260 >> Men när slingan är bara en annan sätt på C för att uttrycka dig själv. 388 00:18:34,260 --> 00:18:37,080 Vid slutet av dagen, kan du inte göra någonting med en while-slinga som du 389 00:18:37,080 --> 00:18:38,360 kan inte med en for-loop. 390 00:18:38,360 --> 00:18:41,430 Så de är i slutet av dag funktionellt detsamma. 391 00:18:41,430 --> 00:18:43,840 Men det tillåter dig att uttrycka dig lite annorlunda i 392 00:18:43,840 --> 00:18:44,850 följande sätt. 393 00:18:44,850 --> 00:18:49,720 >> Med while-slingan, det är vad som finns i parenteser som har kontrollerats igen och 394 00:18:49,720 --> 00:18:51,050 igen och igen. 395 00:18:51,050 --> 00:18:55,100 Och så snart det uttrycket är falskt, då slingan upphör att exekvera, 396 00:18:55,100 --> 00:18:57,890 och datorn fortsätter till köra vad andra koden du 397 00:18:57,890 --> 00:18:59,230 ha i din fil. 398 00:18:59,230 --> 00:19:02,180 >> Men vad som är intressant här är som jag skrev bokstavligen sant. 399 00:19:02,180 --> 00:19:06,680 Och sant är en typ av booleskt värde, ett sant eller falskt värde. 400 00:19:06,680 --> 00:19:09,750 Så kunde riktigt någonsin blivit false om jag har bokstavligen 401 00:19:09,750 --> 00:19:11,970 hårdkodade in den i mitt program? 402 00:19:11,970 --> 00:19:12,470 Så nej. 403 00:19:12,470 --> 00:19:13,730 Det är lite konstigt att jag gjorde det här. 404 00:19:13,730 --> 00:19:15,190 Men sant är sant. 405 00:19:15,190 --> 00:19:16,320 Det finns inget plus-plussing. 406 00:19:16,320 --> 00:19:17,820 Det finns ingen användning av variabler i här. 407 00:19:17,820 --> 00:19:22,740 Så eftersom jag hårdkodad medan sant, detta slingan kommer alltid att utvärdera 408 00:19:22,740 --> 00:19:24,090 igen och igen och igen. 409 00:19:24,090 --> 00:19:27,660 >> Så hur många gånger är hallå världen kommer att skrivas ut på skärmen? 410 00:19:27,660 --> 00:19:28,170 Forever. 411 00:19:28,170 --> 00:19:31,980 Ett oändligt antal gånger tills batteri formar eller någon annan yttre 412 00:19:31,980 --> 00:19:32,730 händelse inträffar. 413 00:19:32,730 --> 00:19:35,880 Så det här är förmodligen inte det bästa programmet att skriva, för om användaren 414 00:19:35,880 --> 00:19:38,660 aldrig kan sluta ditt program, är det förmodligen inte vad du tänkt. 415 00:19:38,660 --> 00:19:41,070 >> Men ibland, program bör ha en oändlig loop. 416 00:19:41,070 --> 00:19:44,050 Till exempel har om din dator en klockan på det, det skulle verkligen vara 417 00:19:44,050 --> 00:19:48,130 trevligt om din klocka det inte hålla uppdatera sig för evigt, om än en gång 418 00:19:48,130 --> 00:19:50,500 sekund eller en gång i minuten eller något liknande. 419 00:19:50,500 --> 00:19:53,690 Så även oändliga slingor har sin plats. 420 00:19:53,690 --> 00:19:54,360 >> Okej. 421 00:19:54,360 --> 00:19:55,190 Slutligen, här. 422 00:19:55,190 --> 00:19:57,770 Och den här är lite annorlunda funktionellt, och vi ska återkomma till 423 00:19:57,770 --> 00:19:59,460 detta förmodligen i Pset 1. 424 00:19:59,460 --> 00:20:02,370 Men det finns en annan typ av loop kallas en göra medan slinga. 425 00:20:02,370 --> 00:20:07,100 Och den enda skillnaden här mellan en göra medan loop och, säg, en while-slinga, 426 00:20:07,100 --> 00:20:11,120 är att villkoret kontrolleras inte innan du köra koden, men efter 427 00:20:11,120 --> 00:20:12,080 du köra koden. 428 00:20:12,080 --> 00:20:15,380 Så upptill för tiden slinga, medan den gör medan 429 00:20:15,380 --> 00:20:16,560 kontrollerar den i botten. 430 00:20:16,560 --> 00:20:21,370 >> Och det betyder bara att while-slingan kommer vanligtvis köra fler gånger 431 00:20:21,370 --> 00:20:24,630 eller färre gånger än en while-slinga? 432 00:20:24,630 --> 00:20:30,810 Potentiellt fler gånger, eftersom en göra while säger tydligt göra detta, 433 00:20:30,810 --> 00:20:34,600 endast efter vilken punkt du kontrollera om villkoret insidan av 434 00:20:34,600 --> 00:20:35,980 parentes är sant. 435 00:20:35,980 --> 00:20:37,940 >> Så vi får se detta igen förmodligen i Pset 1. 436 00:20:37,940 --> 00:20:41,150 Om du någonsin vill göra något på åtminstone en gång och då kanske lite mer 437 00:20:41,150 --> 00:20:43,350 gånger, är detta en bra konstruera att använda. 438 00:20:43,350 --> 00:20:46,970 Men en while-slinga, däremot, kommer kontrollera dess tillstånd först. 439 00:20:46,970 --> 00:20:50,660 Och det är det för loopar i C, gör medan, samtidigt, och loopar. 440 00:20:50,660 --> 00:20:54,700 Och återigen, kartlägga de ganska snyggt tillbaka till Scratch, utom här inte 441 00:20:54,700 --> 00:20:57,350 riktigt har samma analoga i Scratch. 442 00:20:57,350 --> 00:20:58,880 >> Tja, vad sägs om, nu, variabler? 443 00:20:58,880 --> 00:21:02,600 Så det här är hur jag förklarade en variabel syntaktiskt häromdagen. 444 00:21:02,600 --> 00:21:06,440 Jag hade en int, vilket jag hävdade är ett heltal. 445 00:21:06,440 --> 00:21:09,690 Jag hade då en variabel som heter räknare, och sedan ett semikolon. 446 00:21:09,690 --> 00:21:11,070 Så vad är det här kodraden gör? 447 00:21:11,070 --> 00:21:14,540 Det är, helt enkelt, förklarar en variabel - 448 00:21:14,540 --> 00:21:17,940 det är, frågar datorn, ge mig en del minne, ge mig några bitar - i 449 00:21:17,940 --> 00:21:19,450 som jag kan lagra vad? 450 00:21:19,450 --> 00:21:20,300 En int. 451 00:21:20,300 --> 00:21:23,570 Och semikolon betyder bara slutet av kodrad. 452 00:21:23,570 --> 00:21:25,500 >> Nu är den andra raden förmodligen ganska gissa sig till. 453 00:21:25,500 --> 00:21:29,710 Vad är räknare = 0; göra? 454 00:21:29,710 --> 00:21:31,690 Det tilldela 0 att motverka. 455 00:21:31,690 --> 00:21:33,470 Och så detta är en annan sak som är lite irriterande 456 00:21:33,470 --> 00:21:34,540 kontra, säger, algebra. 457 00:21:34,540 --> 00:21:39,110 I algebra, betyder likhetstecknet jämlikar, här i C, lika 458 00:21:39,110 --> 00:21:40,470 tecknet betyder uppdraget. 459 00:21:40,470 --> 00:21:45,380 Så det betyder att sätta vad som finns till höger i vad som finns till vänster. 460 00:21:45,380 --> 00:21:49,030 Och vi får se en annan symbol, lika jämlikar, när vi vill verkligen testa 461 00:21:49,030 --> 00:21:50,570 för kvalitet, något irriterande. 462 00:21:50,570 --> 00:21:52,590 >> Men detta är lite ineffektivt. 463 00:21:52,590 --> 00:21:55,090 Det är typ av irriterande att jag har att deklarera en variabel och 464 00:21:55,090 --> 00:21:56,110 sedan ge det ett värde. 465 00:21:56,110 --> 00:21:59,380 Så C låter faktiskt oss förenkla denna och bara göra allt på en gång. 466 00:21:59,380 --> 00:22:01,330 Du kan deklarera variabeln till vänster. 467 00:22:01,330 --> 00:22:04,590 Du kan fortfarande göra uppdraget på rätt genom att sätta det likhetstecken 468 00:22:04,590 --> 00:22:05,030 mitten. 469 00:22:05,030 --> 00:22:08,740 Så i slutet av dagen, dessa två är likvärdiga, men här, ärligt talat, 470 00:22:08,740 --> 00:22:11,840 är förmodligen bättre vana att komma in bara för att det är lite mindre 471 00:22:11,840 --> 00:22:15,040 kod, är det lite lättare att läsa, och det stramar bara upp 472 00:22:15,040 --> 00:22:17,470 din kod, så att säga. 473 00:22:17,470 --> 00:22:22,120 >> Några frågor hittills på slingorna, på variabler, på villkor, om 474 00:22:22,120 --> 00:22:27,001 Booleans, vare sig tekniskt eller konceptuellt? 475 00:22:27,001 --> 00:22:28,010 Okej. 476 00:22:28,010 --> 00:22:30,690 Så nu här nästa man får en lite mer intressant. 477 00:22:30,690 --> 00:22:34,790 Och detta är det exempel jag satte upp förra tid som bara avbildar en Scratch exempel 478 00:22:34,790 --> 00:22:35,820 över till C. 479 00:22:35,820 --> 00:22:36,580 >> Så en funktion. 480 00:22:36,580 --> 00:22:38,110 I lekmannaspråk, är vad en funktion? 481 00:22:38,110 --> 00:22:42,900 482 00:22:42,900 --> 00:22:44,350 Fick vara djärvare med ditt svar. 483 00:22:44,350 --> 00:22:45,020 Vad är en funktion? 484 00:22:45,020 --> 00:22:46,320 >> STUDENT: Gör något. 485 00:22:46,320 --> 00:22:46,780 >> DAVID MALAN: Vad är det? 486 00:22:46,780 --> 00:22:48,000 >> STUDENT: Gör något. 487 00:22:48,000 --> 00:22:48,710 >> DAVID MALAN: Gör något. 488 00:22:48,710 --> 00:22:49,000 OK. 489 00:22:49,000 --> 00:22:49,590 Vi börjar där. 490 00:22:49,590 --> 00:22:51,270 Så en funktion gör något. 491 00:22:51,270 --> 00:22:55,160 Så det är en bit kod som är genomförs i huvudsak i andra områden som 492 00:22:55,160 --> 00:22:56,620 faktiskt gör något. 493 00:22:56,620 --> 00:23:00,180 Nu, vad är intressant med en funktion är att det kan ta input, 494 00:23:00,180 --> 00:23:02,710 och det kan producera utskrifter. 495 00:23:02,710 --> 00:23:05,090 Och låt oss ta faktiskt en titt på detta. 496 00:23:05,090 --> 00:23:09,030 >> Så mannen bakom gardinen var avsiktligt en stund sedan. 497 00:23:09,030 --> 00:23:10,320 Här har vi en tabell. 498 00:23:10,320 --> 00:23:13,010 Men anta att detta faktiskt representerar en stor låda. 499 00:23:13,010 --> 00:23:14,940 Så det här är en så kallad svart låda. 500 00:23:14,940 --> 00:23:19,800 Och i allmänhet, i design, i datorn vetenskap, svarta lådor hänvisar bara till 501 00:23:19,800 --> 00:23:22,510 bitar av funktionalitet som någon har genomfört, och du gör inte 502 00:23:22,510 --> 00:23:26,140 nödvändigtvis vet eller bryr sig om hur det är genomförs under huven. 503 00:23:26,140 --> 00:23:28,960 Du bryr dig bara att denna svarta låda, som vi nu börja ringa ett 504 00:23:28,960 --> 00:23:30,730 funktion, gör något. 505 00:23:30,730 --> 00:23:34,710 >> Så, till exempel, om denna svarta låda på scenen här representerar printf, en 506 00:23:34,710 --> 00:23:38,040 funktion, jag vet från tidigare exempel som tar printf en eller flera 507 00:23:38,040 --> 00:23:40,910 argument, och den första av dem argument ska vara en sträng, som 508 00:23:40,910 --> 00:23:44,780 "Hej, världen." Tja, om jag är den personen skriva programmet, och jag vill 509 00:23:44,780 --> 00:23:50,460 att använda printf, jag, till exempel, kan ta en bit blankt papper här och ett 510 00:23:50,460 --> 00:23:55,060 svart markering och skriva på det - 511 00:23:55,060 --> 00:23:56,580 Jag felstavade "världen" - 512 00:23:56,580 --> 00:23:59,560 H-E-L-L-O. 513 00:23:59,560 --> 00:24:04,220 >> Så jag tar min svarta markör och jag ska skriva, så stort och läsbart som jag kan på 514 00:24:04,220 --> 00:24:07,260 detta papper, "Hej, världen," Och nu har jag hävdar att detta är mitt argument. 515 00:24:07,260 --> 00:24:09,740 Detta är en sträng representerade med en bit vitt papper. 516 00:24:09,740 --> 00:24:13,030 Och min ingång nu till funktionen printf kommer att vara här. 517 00:24:13,030 --> 00:24:18,250 Så jag kallar printf, passerar detta argument som indata till den. 518 00:24:18,250 --> 00:24:22,110 519 00:24:22,110 --> 00:24:26,740 >> Och nu vet jag inte hur den person som skrev printf gjorde det år sedan, men 520 00:24:26,740 --> 00:24:31,110 Jag vet från sin dokumentation som sitt syfte i livet är att skriva vad jag 521 00:24:31,110 --> 00:24:34,410 tillhandahålla till den som ingående. 522 00:24:34,410 --> 00:24:40,630 Och så, trots att detta genomförande är okänt för mig 523 00:24:40,630 --> 00:24:44,170 under huven, nu Jag ser, åh, det är gjort. 524 00:24:44,170 --> 00:24:45,740 Det har tryckt något på skärmen. 525 00:24:45,740 --> 00:24:49,070 Och nu styr i programmet, om det fanns fler rader kod, skulle 526 00:24:49,070 --> 00:24:51,070 har nu återvänt till mig. 527 00:24:51,070 --> 00:24:52,290 Och så det faktum att Colton - 528 00:24:52,290 --> 00:24:55,370 välsigna hans hjärta, gömmer här under ett bord framför er alla - 529 00:24:55,370 --> 00:24:59,530 är medvetet i att jag inte vet och jag bryr mig inte hur printf är 530 00:24:59,530 --> 00:25:00,100 genomföras. 531 00:25:00,100 --> 00:25:03,390 Jag vet bara, återigen, från dess dokumentation, vad den gör och hur jag 532 00:25:03,390 --> 00:25:05,040 am ska använda den. 533 00:25:05,040 --> 00:25:09,140 >> Nu, minns att printf kunde få en lite mer sofistikerad. 534 00:25:09,140 --> 00:25:12,220 Återigen, vi pratar bara om motsvarande Scratch säga blocket. 535 00:25:12,220 --> 00:25:14,230 Men jag gjorde även denna sista gång. 536 00:25:14,230 --> 00:25:17,270 Jag ville göra min hello program en lite mer dynamiskt och inte bara hårt 537 00:25:17,270 --> 00:25:19,740 code något som "världen" och definitivt inte svårt koden något 538 00:25:19,740 --> 00:25:22,520 godtycklig som D-A-V-I-D i programmet. 539 00:25:22,520 --> 00:25:27,510 Jag ville fråga användaren om hans eller hennes namn, och sedan göra något med 540 00:25:27,510 --> 00:25:29,720 den strängen som de tillhandahåller. 541 00:25:29,720 --> 00:25:32,690 >> Så det finns något lite annorlunda här. printf, för en stund sedan, 542 00:25:32,690 --> 00:25:35,860 gjorde, ja, göra något, men det inte tillbaka någonting till mig. 543 00:25:35,860 --> 00:25:36,020 Rätt? 544 00:25:36,020 --> 00:25:38,910 Colton inte ge mig någonting tillbaka, inget papper. 545 00:25:38,910 --> 00:25:40,320 Det var bara en bieffekt. 546 00:25:40,320 --> 00:25:44,510 Min tillhandahålla "hello, world" som en argument till Colton resulterat i 547 00:25:44,510 --> 00:25:48,420 bieffekt av ett ord, några ord, visas på skärmen. 548 00:25:48,420 --> 00:25:51,350 >> getString, dock, är en liten olika. getString är också en 549 00:25:51,350 --> 00:25:54,590 fungera, men den returnerar något värde. 550 00:25:54,590 --> 00:25:56,370 Det har inte bara en estetisk bieffekt. 551 00:25:56,370 --> 00:26:00,230 Det ger mig faktiskt, den person ringer eller använder funktionen, 552 00:26:00,230 --> 00:26:01,320 något tillbaka. 553 00:26:01,320 --> 00:26:05,740 Så i detta fall, är getString heter med getString öppen 554 00:26:05,740 --> 00:26:07,510 föräldra, nära föräldra. 555 00:26:07,510 --> 00:26:11,370 Har getString därför ta några argument eller ingång? 556 00:26:11,370 --> 00:26:12,340 Nej, verkar det inte. 557 00:26:12,340 --> 00:26:14,460 Dess syfte i livet är bara för att få en sträng. 558 00:26:14,460 --> 00:26:16,910 Det behöver ingen mer ingående än så. 559 00:26:16,910 --> 00:26:20,430 Så låt mig gå vidare och låtsas att, igen, är denna svarta lådan inte printf, 560 00:26:20,430 --> 00:26:25,160 men getString, och låt mig, den person skriver detta program, ring eller använd 561 00:26:25,160 --> 00:26:29,720 getString genom att bara skriva G-E-T-S-T-R-I-N-G, öppen paren, nära 562 00:26:29,720 --> 00:26:32,170 föräldra, getString. 563 00:26:32,170 --> 00:26:36,920 >> Nu har jag ingen aning om hur det CS50 personalen genomfört getString, men jag vet att 564 00:26:36,920 --> 00:26:41,240 Om jag väntar tillräckligt länge, kommer den att göra sitt sak under huven, kanske med hjälp av 565 00:26:41,240 --> 00:26:44,940 vissa variabler, kanske med hjälp av några förhållanden, kanske använda några slingor, 566 00:26:44,940 --> 00:26:48,170 kanske använder vissa funktioner, kanske med hjälp av - 567 00:26:48,170 --> 00:26:52,290 försöker bara stall - kanske med hjälp av några andra programmeringsspråk funktioner. 568 00:26:52,290 --> 00:26:55,350 Men om jag väntar tillräckligt länge - i verkligheten, i datorn, händer detta 569 00:26:55,350 --> 00:26:56,270 supersnabbt - 570 00:26:56,270 --> 00:26:59,910 Om jag väntar tillräckligt länge, denna funktion getString kommer att få en sträng 571 00:26:59,910 --> 00:27:04,060 från användaren, som är förmodligen att skriva ut på tangentbordet, och 572 00:27:04,060 --> 00:27:08,090 då, när du getString görs få dessa tecken från användaren 573 00:27:08,090 --> 00:27:14,080 och lagra dem i en sträng, som funktion, getString, kommer att ha 574 00:27:14,080 --> 00:27:17,990 redo för mig lite utgång som jag är går att hämta i form av 575 00:27:17,990 --> 00:27:19,470 tilldelningsoperator. 576 00:27:19,470 --> 00:27:25,390 >> Och om jag går verkligen in i produktionen Här har Obosi generöst 577 00:27:25,390 --> 00:27:29,900 deltog, utan att veta detta i avancera, genom att skriva sitt namn på detta 578 00:27:29,900 --> 00:27:33,100 variabel, som representerar en sträng. 579 00:27:33,100 --> 00:27:35,640 Nu, innebär uppdraget operatören, även även om detta kan kännas lite 580 00:27:35,640 --> 00:27:38,790 redundant, gör jag verkligen behöver att göra min egen kopia av detta. 581 00:27:38,790 --> 00:27:40,700 Eftersom på den vänstra sidan side - hoppsan! - 582 00:27:40,700 --> 00:27:45,760 märker att jag i huvudsak har string namn på vänster sida. 583 00:27:45,760 --> 00:27:48,280 Så jag kommer också att göra min egen kopia av detta. 584 00:27:48,280 --> 00:27:50,990 Och detta är lite av en vit lögn, eftersom vi får se om en vecka eller två 585 00:27:50,990 --> 00:27:54,100 tid att strängarna är faktiskt inte vad de verkar vara. 586 00:27:54,100 --> 00:27:56,700 >> Men för nu, här är returvärdet. 587 00:27:56,700 --> 00:28:00,160 Här är min egen kopia av det efter med tilldelningsoperatorn. 588 00:28:00,160 --> 00:28:01,790 Och nu, vad jag vill göra härnäst? 589 00:28:01,790 --> 00:28:04,080 Vi har nu den näst av två rader kod. 590 00:28:04,080 --> 00:28:05,640 Så jag vill nu kalla printf. 591 00:28:05,640 --> 00:28:08,500 Låt oss låtsas nu att den svarta box är tillbaka till att vara 592 00:28:08,500 --> 00:28:10,210 printf och inte getString. 593 00:28:10,210 --> 00:28:12,200 >> Printf denna gång kommer att ta hur många argument? 594 00:28:12,200 --> 00:28:14,890 595 00:28:14,890 --> 00:28:16,770 Så titta, det är som två. 596 00:28:16,770 --> 00:28:18,860 Det finns två kommatecken i det, men en av dessa kommatecken, är det 597 00:28:18,860 --> 00:28:20,220 insidan av citat. 598 00:28:20,220 --> 00:28:23,190 Så det första argumentet är bokstavligen kommer att vara här. 599 00:28:23,190 --> 00:28:31,850 H-E-L-L-O, kommatecken, procent s, omvänt snedstreck-n. 600 00:28:31,850 --> 00:28:36,560 Och nu är jag ger inte ett argument, men två argument till printf. 601 00:28:36,560 --> 00:28:39,530 >> Och vad printf ska göra med dessa två ingångar när jag passerar dem i 602 00:28:39,530 --> 00:28:42,050 som argument? 603 00:28:42,050 --> 00:28:45,360 Det är tänkt att ta den andra av dem, som jag kallade namn, så 604 00:28:45,360 --> 00:28:48,660 andra papper jag skrev ut nyss kallas namn. 605 00:28:48,660 --> 00:28:53,550 Det kommer att kontakten på värdet inuti av den variabeln i platshållaren, 606 00:28:53,550 --> 00:28:58,310 % S, så att, återigen, på bara ett ögonblick tid, kommer vi att se en bieffekt av 607 00:28:58,310 --> 00:29:04,180 Då kallade printf, där vi nu se inte "hej, värld," men "hej, 608 00:29:04,180 --> 00:29:04,710 Obosi. " 609 00:29:04,710 --> 00:29:08,730 >> Så en stor applåd till båda våra volontärer, varav endast en visste 610 00:29:08,730 --> 00:29:12,010 detta skulle hända. 611 00:29:12,010 --> 00:29:12,990 Okej. 612 00:29:12,990 --> 00:29:16,480 Så kanske, enkelt som det var, Visst, om du redan känner 613 00:29:16,480 --> 00:29:20,190 med sådant, förhoppningsvis kommer du aldrig glömma att särskilt visuellt om hur 614 00:29:20,190 --> 00:29:21,220 funktioner fungerar. 615 00:29:21,220 --> 00:29:23,000 >> Så det finns mer än bara getString. 616 00:29:23,000 --> 00:29:26,020 Inne i CS50 biblioteket, det finns en massa funktioner, som alla 617 00:29:26,020 --> 00:29:29,510 aktiveras bara för att klargöra som vi skrev dessa funktioner. 618 00:29:29,510 --> 00:29:33,610 Typiskt, i C, nästan varannan funktion du kommer att använda är gemener. 619 00:29:33,610 --> 00:29:36,190 Men vi använder medvetet versaler bara för att klargöra att dessa 620 00:29:36,190 --> 00:29:39,880 är stödhjul slags som vi kommer använda för bara några veckor som 621 00:29:39,880 --> 00:29:42,890 förenkla processen att få inmatning från användaren. 622 00:29:42,890 --> 00:29:46,740 >> Den CS50-biblioteket gör ingenting att ni själva inte kan göra med 623 00:29:46,740 --> 00:29:50,230 bara med hjälp av C-kod från en oldschool lärobok. 624 00:29:50,230 --> 00:29:53,310 Men, återigen, använder vi dem som utbildning hjul av sorter för bara ett par 625 00:29:53,310 --> 00:29:57,250 vecka så att vi kan bli av med komplexitet som ni snart kommer att förstå 626 00:29:57,250 --> 00:30:00,460 själv att göra något som relativt enkelt som att få 627 00:30:00,460 --> 00:30:02,080 inmatning från en användare. 628 00:30:02,080 --> 00:30:05,540 >> Så vet att du kommer att ha tillgång att getchar, GetDouble - 629 00:30:05,540 --> 00:30:06,050 fördubblas. 630 00:30:06,050 --> 00:30:07,050 What's - och sedan getFloat. 631 00:30:07,050 --> 00:30:07,600 Vad är ett flöte? 632 00:30:07,600 --> 00:30:09,382 Låt oss börja där. 633 00:30:09,382 --> 00:30:10,600 >> STUDENT: [OHÖRBAR]. 634 00:30:10,600 --> 00:30:10,790 >> DAVID MALAN: Yeah. 635 00:30:10,790 --> 00:30:12,120 Det är ett nummer med en decimal. 636 00:30:12,120 --> 00:30:15,930 Så medan en int är ett heltal, vilket är bara ett nummer med 0 till 9, 637 00:30:15,930 --> 00:30:18,940 några antal repetitioner därav, en flottör är något 638 00:30:18,940 --> 00:30:20,100 med en decimal. 639 00:30:20,100 --> 00:30:26,090 Och en dubbel, under tiden, är också ett nummer med en decimal, men mer 640 00:30:26,090 --> 00:30:28,160 siffror efter decimalkommat punkt, potentiellt. 641 00:30:28,160 --> 00:30:30,040 >> Så vi återkommer till detta inom kort. 642 00:30:30,040 --> 00:30:34,560 Men typiskt, var och en av dessa typer av data var och en av dessa typer av variabler 643 00:30:34,560 --> 00:30:39,380 att ett bibliotek som vårt kan återvända till dig, använder olika antal bitar till 644 00:30:39,380 --> 00:30:40,290 lagra information. 645 00:30:40,290 --> 00:30:43,910 Typiskt en Char, vilket bara innebär ett tecken, använder 8 bitar. 646 00:30:43,910 --> 00:30:47,490 Och det är faktiskt i linje med vår byte av volontärer förra veckan som 647 00:30:47,490 --> 00:30:50,410 kom upp och representerade en ASCII-tecken i taget. 648 00:30:50,410 --> 00:30:51,850 Så en Char är 8 bitar. 649 00:30:51,850 --> 00:30:54,430 >> En flottör råkar vara 32 bitar, typiskt. 650 00:30:54,430 --> 00:30:59,230 Och en dubbel, som ni kan gissa, är faktiskt 64 bitar, vilket är bara mer, 651 00:30:59,230 --> 00:31:01,360 vilket innebär att du kan ha större siffror eller mer precision. 652 00:31:01,360 --> 00:31:03,000 Men återigen, mer om det en annan gång. 653 00:31:03,000 --> 00:31:06,550 GetLongLong under tiden, men dumt heter, är egentligen bara en 654 00:31:06,550 --> 00:31:10,770 heltal som är dubbelt så stor, dubbelt så lång, potentiellt, som en vanlig 655 00:31:10,770 --> 00:31:12,940 heltal, 64 bitar i stället för 32. 656 00:31:12,940 --> 00:31:14,560 Och getString vi har använt. 657 00:31:14,560 --> 00:31:18,870 >> Men det visar sig, i CS50 biblioteket som genomförs, så vi får se, i 658 00:31:18,870 --> 00:31:23,560 formen av de två filerna, varav en heter cs50.h, har två andra 659 00:31:23,560 --> 00:31:24,770 datatyper i det. 660 00:31:24,770 --> 00:31:29,700 Booleans finns inte i C. Du kan simulera dem genom att bara använda 0 och 1 661 00:31:29,700 --> 00:31:30,850 hela ditt program. 662 00:31:30,850 --> 00:31:35,500 Men vi i CS50 biblioteket har skapat symbolerna "sann" och "falsk" 663 00:31:35,500 --> 00:31:38,580 att representera 1 och 0 så att du inte måste hård-kod något 664 00:31:38,580 --> 00:31:39,810 bokstavligen som 1 och 0. 665 00:31:39,810 --> 00:31:40,980 Men vi får se dem igen. 666 00:31:40,980 --> 00:31:42,330 >> String, också, inte existerar. 667 00:31:42,330 --> 00:31:44,520 Och det är därför jag nämnde att det är en bit av en vit lögn för nu. 668 00:31:44,520 --> 00:31:46,660 Men vi ska dra tillbaka den lagret innan lång. 669 00:31:46,660 --> 00:31:49,540 Men för nu, är en sträng en sekvens av tecken. 670 00:31:49,540 --> 00:31:51,790 >> Under tiden, i C, ja du har olika datatyper. 671 00:31:51,790 --> 00:31:53,200 Lägg märke till dessa är gemener. 672 00:31:53,200 --> 00:31:56,960 Så de funktioner du såg för en stund sedan är funktioner skrivna av CS50 som 673 00:31:56,960 --> 00:32:02,310 kommer tillbaka till dig ett värde som faller in i någon av dessa kategorier. 674 00:32:02,310 --> 00:32:06,730 >> Ett par fuska lakan bara för att plantera fröet här. printf inte bara 675 00:32:06,730 --> 00:32:08,600 ta% s som platshållare. 676 00:32:08,600 --> 00:32:13,490 Det tar% d för decimala heltal, eller% Jag skulle fungera lika bra. 677 00:32:13,490 --> 00:32:19,450 % F flyttal. % C är för en röding, om du vill att bara ansluta en 678 00:32:19,450 --> 00:32:23,510 karaktär i en förformaterad sträng som vi har gjort, kan du använda% c. 679 00:32:23,510 --> 00:32:28,490 >> Och sedan, något irriterande,% lld är för en lång, lång heltal, 680 00:32:28,490 --> 00:32:31,050 vilket betyder bara om du behöver en riktigt stort antal och du använder något 681 00:32:31,050 --> 00:32:35,450 kallas en lång lång, som vi kommer tillbaka i en pset, kan du använda% lld till 682 00:32:35,450 --> 00:32:40,700 berätta printf, koppla in en riktigt stor heltal här genom sin andra eller 683 00:32:40,700 --> 00:32:41,830 något annat argument. 684 00:32:41,830 --> 00:32:45,700 >> Och slutligen, lovade jag att Det finns ett par andra flykt 685 00:32:45,700 --> 00:32:47,670 sekvenser som printf stöder. 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 blir liksom en nygammal sak. 689 00:32:51,780 --> 00:32:55,920 Om du någonsin använt en riktig skrivmaskin år sedan och du drog på veven 690 00:32:55,920 --> 00:32:59,810 som inte bara roteras hjulet för att flytta lineupen, flyttade det också 691 00:32:59,810 --> 00:33:03,730 hela hela vägen tillbaka över till vänster, väl, backslash-r bara 692 00:33:03,730 --> 00:33:06,480 huvudsak flyttar markören tillbaka till början av raden 693 00:33:06,480 --> 00:33:07,830 utan att flytta ner den. 694 00:33:07,830 --> 00:33:09,780 Men återigen, mer om det, kanske i framtiden. 695 00:33:09,780 --> 00:33:13,670 >> Backslash-citat, backslash-dubbla citattecken, omvänt snedstreck-omvänt snedstreck är den 696 00:33:13,670 --> 00:33:16,600 lösning på den lilla gåtan Jag hänvisade till tidigare. 697 00:33:16,600 --> 00:33:18,920 Och omvänt snedstreck-0 är faktiskt ganska intressant. 698 00:33:18,920 --> 00:33:21,470 Men vi ska komma tillbaka till att innan lång. 699 00:33:21,470 --> 00:33:25,640 >> Så låt mig gå in, nu, den CS50 apparat, och låt oss faktiskt göra en 700 00:33:25,640 --> 00:33:28,930 snabbt värma upp med ett av de exempel vi redan och sedan gå vidare till 701 00:33:28,930 --> 00:33:31,160 något lite mer komplicerat. 702 00:33:31,160 --> 00:33:34,980 Så om jag öppnar upp mitt program kallas gedit - 703 00:33:34,980 --> 00:33:36,840 detta är min grafisk editor. 704 00:33:36,840 --> 00:33:38,460 Och jag kan göra det - 705 00:33:38,460 --> 00:33:39,820 Låt mig avsluta det fönstret där - 706 00:33:39,820 --> 00:33:42,720 genom denna ikon här nere, gedit, i det nedre vänstra 707 00:33:42,720 --> 00:33:44,170 hörnet bredvid menyn. 708 00:33:44,170 --> 00:33:48,670 >> Jag ska gå vidare och avancera, och spara detta exempel i, säg, John 709 00:33:48,670 --> 00:33:49,660 Harvards mapp. 710 00:33:49,660 --> 00:33:52,690 John Harvards mapp är just hans hem katalog där alla hans filer bor 711 00:33:52,690 --> 00:33:53,340 som standard. 712 00:33:53,340 --> 00:33:58,410 Och jag kommer att spara detta som en fil som heter hello-0.c. 713 00:33:58,410 --> 00:34:01,260 Och jag har valt detta namn bara så det ställer upp med exempelkod på 714 00:34:01,260 --> 00:34:04,210 kursens hemsida och i YouTube-videor på nätet. 715 00:34:04,210 --> 00:34:06,320 >> Så nu ska jag börja skriva min första programmet. 716 00:34:06,320 --> 00:34:08,469 Låt mig zooma in för läsbarheten. 717 00:34:08,469 --> 00:34:12,760 Och jag ska gå vidare och säga int huvudsakliga tomrum, som bara är sådär 718 00:34:12,760 --> 00:34:14,900 gul pusselbit som startar ett program. 719 00:34:14,900 --> 00:34:18,290 Jag har fått till vana över år av att öppna mitt lockiga stag, sedan 720 00:34:18,290 --> 00:34:22,000 också stänga den och sedan gå tillbaka till där jag vill lägga min kod, bara 721 00:34:22,000 --> 00:34:24,630 eftersom det hjälper mig att hålla allt balanserad, särskilt som min 722 00:34:24,630 --> 00:34:25,880 Programmet blir lång. 723 00:34:25,880 --> 00:34:29,239 >> Och nu, här kommer jag att gå vidare och säga, printf, citerar slut citat, 724 00:34:29,239 --> 00:34:34,330 hallå världen, backslash-n, stäng citationstecken, stäng parentes, semikolon. 725 00:34:34,330 --> 00:34:38,100 Så jag bara upprepa allt vi har tagit för givet hittills. 726 00:34:38,100 --> 00:34:39,270 Nu ska jag för att zooma ut. 727 00:34:39,270 --> 00:34:43,030 >> Och detta terminalfönster här nere, vad får jag göra i detta svarta 728 00:34:43,030 --> 00:34:44,389 och vita fönster? 729 00:34:44,389 --> 00:34:46,977 Vad kan jag använda det till? 730 00:34:46,977 --> 00:34:49,770 Så det är där jag kör kommandon och där jag kan kompilera saker. 731 00:34:49,770 --> 00:34:50,620 Och jag kommer att hålla det enkelt. 732 00:34:50,620 --> 00:34:52,780 Jag kommer att använda ett program kallas Gör, vilket inte är 733 00:34:52,780 --> 00:34:54,020 tekniskt en kompilator. 734 00:34:54,020 --> 00:34:56,360 Kompilatorns kallas klang, men Vi ska återkomma till detta i ett 735 00:34:56,360 --> 00:34:57,190 vecka eller två tid. 736 00:34:57,190 --> 00:35:03,410 >> För nu kommer jag bara skriva att göra hello-0, men de av er som var 737 00:35:03,410 --> 00:35:07,050 jämföra i era sinnen vad jag just skrivit vad jag borde ha skrivit får 738 00:35:07,050 --> 00:35:10,180 vet redan att jag gjorde något fel här. 739 00:35:10,180 --> 00:35:12,160 Nu finns det helt klart vissa fel. 740 00:35:12,160 --> 00:35:16,742 Innan jag tittar även på vad de är, något tankar om vad jag gjorde fel? 741 00:35:16,742 --> 00:35:18,590 >> STUDENTER: [inplacering RÖSTER]. 742 00:35:18,590 --> 00:35:18,840 >> DAVID MALAN: Yeah. 743 00:35:18,840 --> 00:35:20,640 Jag saknar bibliotekets header-fil. 744 00:35:20,640 --> 00:35:24,240 Någon av dessa. H filer kallas header filer, och de kollektivt 745 00:35:24,240 --> 00:35:25,680 hör till saker som kallas bibliotek. 746 00:35:25,680 --> 00:35:28,030 Biblioteken är bara bitar av kod att andra människor skrev. 747 00:35:28,030 --> 00:35:32,140 Så standard [? Jag?] biblioteket är en samling filer som innehåller kod 748 00:35:32,140 --> 00:35:33,330 att andra människor skrev. 749 00:35:33,330 --> 00:35:34,820 >> Så jag saknar det. 750 00:35:34,820 --> 00:35:36,520 Så varför får jag ett felmeddelande? 751 00:35:36,520 --> 00:35:40,840 Nåväl, låt mig rulla tillbaka upp i mitt terminalfönster här. 752 00:35:40,840 --> 00:35:44,310 Och tyvärr, i C, som i en hel del programmeringsspråk, speciellt 753 00:35:44,310 --> 00:35:47,830 om det är allt nytt för dig, felet meddelanden är exakta, men de är också 754 00:35:47,830 --> 00:35:48,620 ganska kryptiskt. 755 00:35:48,620 --> 00:35:51,720 Och felet här, i rött, är "Implicit förklara bibliotekets funktion 756 00:35:51,720 --> 00:35:57,660 printf med typ, "och sedan rullar till nästa rad, "int const char *, 757 00:35:57,660 --> 00:36:00,220 ... "Det blir bara riktigt överväldigande snabbt. 758 00:36:00,220 --> 00:36:04,420 >> Men vad ska du börja göra om, igen, ny till allt detta, är bara 759 00:36:04,420 --> 00:36:06,010 börja leta efter sökord. 760 00:36:06,010 --> 00:36:08,770 Klart, kanske jag förstår inte hälften av orden jag ser bara ännu. 761 00:36:08,770 --> 00:36:10,140 Du kommer dock i en veckas tid. 762 00:36:10,140 --> 00:36:11,230 Men jag ser printf. 763 00:36:11,230 --> 00:36:14,310 Och det ska börja, innan länge, till jogga ditt minne, okej, printf. 764 00:36:14,310 --> 00:36:15,210 Något är fel med printf. 765 00:36:15,210 --> 00:36:16,580 Har jag stava det fel? 766 00:36:16,580 --> 00:36:18,130 Nej, det ser inte ut som - oh. 767 00:36:18,130 --> 00:36:21,350 Jag kan inte använda det om jag undervisar kompilatorn att den existerar. 768 00:36:21,350 --> 00:36:25,220 Och så, återigen, gå med dina instinkter, även om du faktiskt inte förstår 769 00:36:25,220 --> 00:36:26,510 de faktiska felmeddelanden. 770 00:36:26,510 --> 00:36:30,240 >> Och faktiskt, är lösningen här att bara inkludera det på toppen av filen 771 00:36:30,240 --> 00:36:34,340 sådär, spara om min fil med Kontroll-S eller Arkiv-menyn. 772 00:36:34,340 --> 00:36:36,730 Och om jag går nu tillbaka här nere, Jag ska rensa detta. 773 00:36:36,730 --> 00:36:39,150 Kontroll-L är bara ett trevligt sätt att rensa skärmen. 774 00:36:39,150 --> 00:36:44,870 Och då ska jag skriva "gör hej 0 "Enter, och nu ser jag fortfarande en 775 00:36:44,870 --> 00:36:47,710 kryptisk sekvens av symboler, men Vi ska återkomma till detta. 776 00:36:47,710 --> 00:36:49,230 Det är vad du gör för dig. 777 00:36:49,230 --> 00:36:52,590 Det automatisera processen att ta ett ganska irriterande kommando inbegriper 778 00:36:52,590 --> 00:36:54,050 Clang, själva kompilatorn. 779 00:36:54,050 --> 00:36:57,460 Men det faktum att jag fick några fel innebär att denna sak borde fungera. 780 00:36:57,460 --> 00:37:00,630 >> Så jag nu ska göra - Låt mig zooma in igen - 781 00:37:00,630 --> 00:37:07,070 ./hello-0 Enter, och faktiskt, jag ser "Hej, världen." Så låt oss nu öka 782 00:37:07,070 --> 00:37:12,105 detta någonsin så något bara för att replikera de steg som vi tänkt. 783 00:37:12,105 --> 00:37:15,370 Jag kommer att byta namn på detta med Spara som för att hello1.c. 784 00:37:15,370 --> 00:37:20,300 Och nu ska jag deklarera en variabel heter namn, så string namn, 785 00:37:20,300 --> 00:37:23,420 och jag kommer att sätta in den Värdet av citat-unquote 786 00:37:23,420 --> 00:37:27,030 D-A-V-I-D stäng-quote semikolon. 787 00:37:27,030 --> 00:37:31,150 Och nu ska jag byta "världen" med vad platshållare för en sträng? 788 00:37:31,150 --> 00:37:32,200 % S. 789 00:37:32,200 --> 00:37:35,040 >> Och nu, hur många argument bör printf tar den här gången? 790 00:37:35,040 --> 00:37:35,700 Så två. 791 00:37:35,700 --> 00:37:37,090 Så jag går utanför offerter. 792 00:37:37,090 --> 00:37:39,330 Jag skriver "namn" efter ett kommatecken. 793 00:37:39,330 --> 00:37:41,550 Men jag har gjort något annat fel denna gång. 794 00:37:41,550 --> 00:37:43,940 Men låt oss anta att jag inte inse att ännu. 795 00:37:43,940 --> 00:37:44,910 Låt mig gå upp hit. 796 00:37:44,910 --> 00:37:48,850 >> Och varsel, också, jag får lite uttråkad av att skriva "make hello 0" alla 797 00:37:48,850 --> 00:37:50,180 tid, "göra" och allt detta. 798 00:37:50,180 --> 00:37:53,270 Så visar det sig, i Linus du kan ofta träffade uppåtpilen på 799 00:37:53,270 --> 00:37:56,850 tangentbord, och du kan faktiskt rulla genom alla de kommandon som jag ve 800 00:37:56,850 --> 00:37:58,830 avrättades tidigare till just nu. 801 00:37:58,830 --> 00:38:02,040 Så om jag gör det, Upp, Upp, det finns att göra hello 0. 802 00:38:02,040 --> 00:38:02,610 Jag vill inte det. 803 00:38:02,610 --> 00:38:05,450 Jag vill bara ändra det till hello 1 denna gång, Enter. 804 00:38:05,450 --> 00:38:07,620 Så småningom, som kommer att spara lite tid. 805 00:38:07,620 --> 00:38:08,150 >> Okej. 806 00:38:08,150 --> 00:38:09,520 Tyvärr, det finns ett fel. 807 00:38:09,520 --> 00:38:10,980 Så låt mig rulla upp. 808 00:38:10,980 --> 00:38:13,120 Det ser ut som jag verkligen slaktade detta program. 809 00:38:13,120 --> 00:38:16,530 Jag menar, herregud, det är två rader kod, och dess 10 rader av fel. 810 00:38:16,530 --> 00:38:18,800 Men titta på den översta först. 811 00:38:18,800 --> 00:38:21,640 Användning av odeklarerat identifieringssträng. 812 00:38:21,640 --> 00:38:23,270 Har jag menar standard I n? 813 00:38:23,270 --> 00:38:23,930 Nej det gjorde jag inte. 814 00:38:23,930 --> 00:38:24,940 Jag menade sträng. 815 00:38:24,940 --> 00:38:29,390 >> Men var är strängvariabeln typ förklarade, DD vi säga? 816 00:38:29,390 --> 00:38:30,730 Så det är i CS50 biblioteket. 817 00:38:30,730 --> 00:38:33,740 Så det inte räcker, i dessa första par veckor, bara för att använda 818 00:38:33,740 --> 00:38:34,860 vad C ger oss. 819 00:38:34,860 --> 00:38:38,120 Jag kommer också att gå upp hit, och jag kunde sätta den över eller under, men jag ska 820 00:38:38,120 --> 00:38:40,340 bara hålla det alfabetiska att hålla saker ordnad. 821 00:38:40,340 --> 00:38:43,470 Jag kommer att omfatta cs50.h, som är förinstallerat för 822 00:38:43,470 --> 00:38:44,900 du på CS50 apparaten. 823 00:38:44,900 --> 00:38:47,640 Och det är öppen källkod, så även människor på internet kan använda den på sin 824 00:38:47,640 --> 00:38:48,450 egna datorer. 825 00:38:48,450 --> 00:38:50,700 Men det kommer med CS50 apparaten. 826 00:38:50,700 --> 00:38:55,320 >> Så låt mig nu gå tillbaka och kompilera detta med att göra hello 1. 827 00:38:55,320 --> 00:38:55,710 Fan också. 828 00:38:55,710 --> 00:38:57,240 Ytterligare ett annat fel. 829 00:38:57,240 --> 00:38:59,370 Låt mig rulla fram till den första, men. 830 00:38:59,370 --> 00:39:00,630 Den här är lite komplicerat. 831 00:39:00,630 --> 00:39:03,830 Multi-tecken tecknet konstant. 832 00:39:03,830 --> 00:39:04,890 Det är inte att hjälpa mig. 833 00:39:04,890 --> 00:39:08,220 Men varsel är klang åtminstone lite lite anständigt, varvid med lite 834 00:39:08,220 --> 00:39:11,890 grön caret symbol, det säger Här är där jag klantade mig. 835 00:39:11,890 --> 00:39:16,160 Varför är det pekar, med det lilla grön pil, den enda anbud nästa 836 00:39:16,160 --> 00:39:18,290 till mitt namn? 837 00:39:18,290 --> 00:39:20,880 >> Så det här är en av de saker som du bara vänja sig, speciellt om du har varit 838 00:39:20,880 --> 00:39:23,980 programmering i Python, eller JavaScript, eller andra språk där denna detalj 839 00:39:23,980 --> 00:39:24,560 spelar ingen roll. 840 00:39:24,560 --> 00:39:25,740 I C, spelar det för roll. 841 00:39:25,740 --> 00:39:29,520 Om du deklarerar en sträng, är som en sekvens av 0 eller flera tecken, 842 00:39:29,520 --> 00:39:32,280 du faktiskt måste använda dubbla citattecken. 843 00:39:32,280 --> 00:39:36,670 Så jag behöver verkligen ändra detta tillbaka att öppna citat, stänger citat, med 844 00:39:36,670 --> 00:39:37,800 dubbla citattecken. 845 00:39:37,800 --> 00:39:41,610 Enstaka citat har sin plats, men bara när du använder individen 846 00:39:41,610 --> 00:39:44,100 tecken, men mer om det en annan gång. 847 00:39:44,100 --> 00:39:46,550 För nu, citationstecken är nödvändiga. 848 00:39:46,550 --> 00:39:50,460 >> Så nu, låt mig gå tillbaka till min terminal fönster, gör hello 1. 849 00:39:50,460 --> 00:39:51,450 Och vem är säker? 850 00:39:51,450 --> 00:39:53,800 Är det här programmet går nu att kompilera korrekt? 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 tycker. 854 00:39:59,780 --> 00:40:00,280 Okej. 855 00:40:00,280 --> 00:40:01,190 Enter. 856 00:40:01,190 --> 00:40:02,440 Och det gjorde faktiskt. 857 00:40:02,440 --> 00:40:05,130 Så det finns inga fel den här gången, även även om detta program har blivit lite 858 00:40:05,130 --> 00:40:05,840 mer komplex. 859 00:40:05,840 --> 00:40:10,110 Om jag nu gör dot slash hello 1, Enter, det kommer att säga "hej, David." 860 00:40:10,110 --> 00:40:11,750 >> Men låt oss göra den tredje iteration på detta, där den 861 00:40:11,750 --> 00:40:13,380 programmet är verkligt dynamisk. 862 00:40:13,380 --> 00:40:16,770 Låt mig gå vidare och ändra filen namn, bara för överensstämmelse med 863 00:40:16,770 --> 00:40:20,410 filer du har till förfogande till dig efteråt på nätet. 864 00:40:20,410 --> 00:40:21,620 Enter. 865 00:40:21,620 --> 00:40:25,510 Och nu ska jag gå in och inte lagra "David" hårdkodade här. 866 00:40:25,510 --> 00:40:28,826 Vad kan jag göra för att mycket enkelt förbättra det här programmet? 867 00:40:28,826 --> 00:40:30,520 >> Jag kunde ringa getString. 868 00:40:30,520 --> 00:40:33,240 Det kan vara lite icke uppenbara vad på väg att hända, så jag kommer 869 00:40:33,240 --> 00:40:38,470 att faktiskt lägga till ytterligare en linje, printf, och säga namnet, kolon, nära citationstecken, precis 870 00:40:38,470 --> 00:40:40,790 att ge användaren en prompt på skärmen. 871 00:40:40,790 --> 00:40:42,980 Och nu ska jag gå här, och jag är kommer att använda min kortkommando. 872 00:40:42,980 --> 00:40:47,680 Jag kommer att gå upp, upp, och ändra hello 1 till hello 2, Enter. 873 00:40:47,680 --> 00:40:49,260 Och tack och lov, jag gör framsteg. 874 00:40:49,260 --> 00:40:52,720 >> Och nu ska jag gå upp till dot slash hej och 875 00:40:52,720 --> 00:40:54,690 ändra det till 2, Enter. 876 00:40:54,690 --> 00:40:55,650 Och nu mitt program - 877 00:40:55,650 --> 00:40:57,700 Jag ska zooma in - blir lite vackrare. 878 00:40:57,700 --> 00:41:02,190 Namnet kommer att bli, låt oss säga Rob den här gången, Enter, hej, Rob. 879 00:41:02,190 --> 00:41:03,260 Vi kan göra det igen. 880 00:41:03,260 --> 00:41:05,360 Namn, Lauren, Enter. 881 00:41:05,360 --> 00:41:07,820 Namn, Joseph, Enter. 882 00:41:07,820 --> 00:41:11,596 Namn, låt oss försöka vara svårt, Enter. 883 00:41:11,596 --> 00:41:12,410 Eh. 884 00:41:12,410 --> 00:41:14,680 Det är egentligen inte en bugg. 885 00:41:14,680 --> 00:41:16,090 Så det är bara lite ful. 886 00:41:16,090 --> 00:41:18,640 Så kanske vi kan lösa detta i framtiden, inte nu. 887 00:41:18,640 --> 00:41:20,840 >> Men hur skulle du instinktivt gå itu 888 00:41:20,840 --> 00:41:21,990 att särskild utmaning? 889 00:41:21,990 --> 00:41:23,710 Det ser bara dumt. 890 00:41:23,710 --> 00:41:27,320 Hur undviker ni saker ser dum? 891 00:41:27,320 --> 00:41:29,890 Så vi kunde göra, OK, hörde jag ett par saker, ett tillstånd och en slinga. 892 00:41:29,890 --> 00:41:33,340 Vi skulle kunna använda, en, ett villkor, att kontrollera vad är längden av strängen 893 00:41:33,340 --> 00:41:34,190 användaren gav oss? 894 00:41:34,190 --> 00:41:37,100 Och om det är 0, citat det bara slut citat, de slår bara Enter, sedan 895 00:41:37,100 --> 00:41:38,930 kanske jag borde skrika på dem och uppmana dem igen. 896 00:41:38,930 --> 00:41:39,970 Men hur uppmana en dem igen? 897 00:41:39,970 --> 00:41:44,230 Tja, hörde jag också slinga, och jag kunde göra det igen och igen och igen 898 00:41:44,230 --> 00:41:47,010 uppmanar användaren för samma sak. 899 00:41:47,010 --> 00:41:48,880 >> Nåväl, låt oss göra ett annat exempel användning av en annan 900 00:41:48,880 --> 00:41:50,620 funktion i CS50 biblioteket. 901 00:41:50,620 --> 00:41:52,330 Låt mig avsluta denna fil. 902 00:41:52,330 --> 00:41:53,510 Låt mig skapa en ny. 903 00:41:53,510 --> 00:41:58,510 Och jag ska kalla det adder.c, bara för att det är lätt att göra enkel aritmetik, 904 00:41:58,510 --> 00:42:00,890 även om detta kommer att vara helt underwhelming med vad du kan göra 905 00:42:00,890 --> 00:42:02,250 med alla moderna datorer. 906 00:42:02,250 --> 00:42:03,750 >> Men låt mig gå vidare nu och - 907 00:42:03,750 --> 00:42:10,680 Jag lärde mig min läxa förra gången - inkludera cs50.h, inkluderar stdio.h, int 908 00:42:10,680 --> 00:42:14,170 huvudsakliga tomrum, som, för nu, jag ska bara ta på blind tro, men vi kommer att anta 909 00:42:14,170 --> 00:42:16,380 som kommer att förstå vad det betyder innan lång. 910 00:42:16,380 --> 00:42:21,030 Och jag ska säga något som "ge mig en int." 911 00:42:21,030 --> 00:42:22,140 >> Och nu, hur får jag en int? 912 00:42:22,140 --> 00:42:26,820 Jag vill slutligen deklarera en variabel kallas x av typen int och 913 00:42:26,820 --> 00:42:29,240 lagra i det ett heltal från användaren. 914 00:42:29,240 --> 00:42:29,970 Så det var en munsbit. 915 00:42:29,970 --> 00:42:35,680 Men om någon vill föreslå, hur inte deklarerar jag ett heltal kallas x? 916 00:42:35,680 --> 00:42:36,310 Int x. 917 00:42:36,310 --> 00:42:37,430 >> Så det är verkligen så enkelt. 918 00:42:37,430 --> 00:42:38,240 Ge mig en int. 919 00:42:38,240 --> 00:42:39,070 Kalla det x. 920 00:42:39,070 --> 00:42:40,580 Nu använder jag uppdraget operatören. 921 00:42:40,580 --> 00:42:43,400 Och hur ska jag förvara från lämnade ett värde av användaren? 922 00:42:43,400 --> 00:42:47,310 Jag vill inte kalla getString, naturligtvis, utan snarare getInt. 923 00:42:47,310 --> 00:42:49,060 Några argument? 924 00:42:49,060 --> 00:42:49,350 Nej. 925 00:42:49,350 --> 00:42:51,870 Så det är öppet föräldra, nära föräldra omedelbart, och sedan en 926 00:42:51,870 --> 00:42:53,440 semikolon avslutar linjen. 927 00:42:53,440 --> 00:42:54,930 >> Nu vill jag göra det igen. 928 00:42:54,930 --> 00:42:57,070 Ge mig en annan int. 929 00:42:57,070 --> 00:43:01,850 Denna gång ska jag göra int, låt oss kallar den y, lika getInt. 930 00:43:01,850 --> 00:43:05,060 Och nu vill jag göra något super-enkel som vissa matte. 931 00:43:05,060 --> 00:43:14,340 Så printf, är summan av% d den platshållare för en int. 932 00:43:14,340 --> 00:43:20,030 Och% d, period, omvänt snedstreck-n. 933 00:43:20,030 --> 00:43:20,360 >> Okej. 934 00:43:20,360 --> 00:43:21,670 Så det är faktiskt inte matte. 935 00:43:21,670 --> 00:43:25,500 Men om jag vill säga summan av detta värde plus detta värde motsvarar detta 936 00:43:25,500 --> 00:43:29,320 annat värde, hur många argument till Totalt ska jag ge printf, 937 00:43:29,320 --> 00:43:30,520 slutändan? 938 00:43:30,520 --> 00:43:31,420 Så fyra, eller hur? 939 00:43:31,420 --> 00:43:33,790 Denna sträng och sedan de tre värden. 940 00:43:33,790 --> 00:43:37,560 Så x är det första jag vill vara inkopplad först till% d. 941 00:43:37,560 --> 00:43:39,270 y kommer att bli nästa. 942 00:43:39,270 --> 00:43:42,030 >> Och nu har jag slags vill säga z, men z inte existerar. 943 00:43:42,030 --> 00:43:43,190 Men det är inte en stor sak. 944 00:43:43,190 --> 00:43:45,440 För vad skulle du göra instinktivt, speciellt om du hade en 945 00:43:45,440 --> 00:43:47,820 grafräknare, vad du skriver? 946 00:43:47,820 --> 00:43:48,760 Vad sägs om x plus y? 947 00:43:48,760 --> 00:43:50,200 Så det är inte en verklig variabel. 948 00:43:50,200 --> 00:43:51,820 Det är bara summan av två andra variabler. 949 00:43:51,820 --> 00:43:53,170 Och det är helt legitimt. 950 00:43:53,170 --> 00:43:56,630 C förstår definitivt enkel aritmetik som denna. 951 00:43:56,630 --> 00:43:58,450 >> Semikolon, spara. 952 00:43:58,450 --> 00:44:02,080 Nu vill jag gå ner hit och Typ Fabrikat huggorm, Enter. 953 00:44:02,080 --> 00:44:04,100 Inget fel, så det är framsteg också. 954 00:44:04,100 --> 00:44:04,890 Typ adderare. 955 00:44:04,890 --> 00:44:07,100 Och en annan kortkommando, om du börjar bli uttråkad 956 00:44:07,100 --> 00:44:08,760 med alla kommandon - 957 00:44:08,760 --> 00:44:12,650 Om du börjar skriva ett kommando, som pricken slash annonsen, och det är där ditt 958 00:44:12,650 --> 00:44:16,020 tristess sparkar i, du oftast kan slå Tab för att ha datorn avsluta 959 00:44:16,020 --> 00:44:20,510 resten av frasen för dig om det inte är tvetydigt vad som ska komma efter annonsen. 960 00:44:20,510 --> 00:44:23,950 >> Så låt mig gå vidare nu och du klickar på Enter. 961 00:44:23,950 --> 00:44:27,490 Ge mig en int, 1, 2, och tack och lov, det är 3. 962 00:44:27,490 --> 00:44:29,900 Men som alltid, testa program bör inte minska till 963 00:44:29,900 --> 00:44:30,820 försöker bara det en gång. 964 00:44:30,820 --> 00:44:35,560 Låt mig försöka ett hörn fall som negativ 1, ge mig en, och att man 965 00:44:35,560 --> 00:44:36,210 checkar ut liksom. 966 00:44:36,210 --> 00:44:38,870 Och jag vill nog göra lite mer rigorösa tester, men jag är ganska 967 00:44:38,870 --> 00:44:40,630 bekväm med där det händer. 968 00:44:40,630 --> 00:44:43,110 >> Nåväl, nu ska vi prova ett annat program att denna gång använder en 969 00:44:43,110 --> 00:44:44,620 lite annan syntax. 970 00:44:44,620 --> 00:44:46,100 Låt mig skapa en ny fil. 971 00:44:46,100 --> 00:44:51,050 Jag kallar detta conditions0.c att rada upp med lite exempelkod på nätet. 972 00:44:51,050 --> 00:44:55,550 Och låt mig gå vidare och göra inkluderar cs50.h, inkludera 973 00:44:55,550 --> 00:45:00,320 stdio.h, i främsta tomrum - 974 00:45:00,320 --> 00:45:01,030 OK. 975 00:45:01,030 --> 00:45:01,850 Där vi går. 976 00:45:01,850 --> 00:45:03,010 Vi har vår standard standardtext. 977 00:45:03,010 --> 00:45:08,170 >> Och den här gången kommer jag att säga printf, "Jag vill ha en int, snälla," bara för att 978 00:45:08,170 --> 00:45:10,030 göra prompten lite mer användarvänliga. 979 00:45:10,030 --> 00:45:11,620 Och nu vill jag få en int från användaren. 980 00:45:11,620 --> 00:45:15,010 Jag kommer att kalla det n denna tid, bara eftersom n låter som nummer. 981 00:45:15,010 --> 00:45:18,140 getInt, och nu, vad gör Jag vill göra med det? 982 00:45:18,140 --> 00:45:21,640 Tja, om n är - och jag ska zooma in - 983 00:45:21,640 --> 00:45:25,930 om n är större än 0, vill jag att göra följande - 984 00:45:25,930 --> 00:45:36,060 printf "Du valde ett positivt tal." Else, jag ska skriva printf "Du 985 00:45:36,060 --> 00:45:37,870 plockade en negativ 986 00:45:37,870 --> 00:45:39,650 numret. "Okej. 987 00:45:39,650 --> 00:45:44,410 Så detta program, även om jag gjorde det snabb, ser rätt syntaktiskt. 988 00:45:44,410 --> 00:45:45,010 Låt mig prova detta. 989 00:45:45,010 --> 00:45:46,890 Gör tillstånd 0. 990 00:45:46,890 --> 00:45:47,710 Verkar för att köra. 991 00:45:47,710 --> 00:45:49,230 Skick 0 anger. 992 00:45:49,230 --> 00:45:51,910 Låt oss ge det en int av 50. 993 00:45:51,910 --> 00:45:53,160 Jag valde ett positivt tal. 994 00:45:53,160 --> 00:45:54,230 Låt oss försöka igen. 995 00:45:54,230 --> 00:45:54,930 Skick 0. 996 00:45:54,930 --> 00:45:56,260 Negativ 50. 997 00:45:56,260 --> 00:45:57,290 Jag valde ett negativt tal. 998 00:45:57,290 --> 00:46:00,350 >> Men nu, låt mig välja vad vi ska hålla ringer ett hörn fall är som mer 999 00:46:00,350 --> 00:46:04,702 ett intressant fall som du tror kanske ge dig några problem, 0. 1000 00:46:04,702 --> 00:46:07,940 Nu, jag är ganska säker på att detta är en av de hörn fall där noll är 1001 00:46:07,940 --> 00:46:12,330 varken positiv eller negativ, så min programmet, men i syntaktiskt 1002 00:46:12,330 --> 00:46:15,440 rätta - det kompilerar, det går - är inte logiskt korrekt. 1003 00:46:15,440 --> 00:46:21,050 Så vad är den enkla fix här om jag vill att upptäcka, om jag vill hantera n 1004 00:46:21,050 --> 00:46:23,840 lika med 0 för sig? 1005 00:46:23,840 --> 00:46:32,980 >> Så om n är lika med 0, då vill jag säga något som printf "Du valde 0." 1006 00:46:32,980 --> 00:46:33,990 Låt mig prova detta nu. 1007 00:46:33,990 --> 00:46:38,320 Låt mig gå tillbaka hit, rensa mitt fönster, och kompilera om. 1008 00:46:38,320 --> 00:46:38,690 Hm. 1009 00:46:38,690 --> 00:46:39,770 Ett fel genererar. 1010 00:46:39,770 --> 00:46:41,630 Men jag vill du kolla om n är lika med 0. 1011 00:46:41,630 --> 00:46:44,230 1012 00:46:44,230 --> 00:46:47,720 >> Så återigen, en annan dum sak att vänja sig, är likhetstecken 1013 00:46:47,720 --> 00:46:48,910 tilldelningsoperatorn. 1014 00:46:48,910 --> 00:46:52,240 Så detta är faktiskt fel i detta, tekniskt, även om kompilatorn 1015 00:46:52,240 --> 00:46:56,450 skyddade mig från mig själv, skulle vi tekniskt kunna kopiera 0 till n, som 1016 00:46:56,450 --> 00:46:57,590 är inte vad jag vill. 1017 00:46:57,590 --> 00:47:00,950 Jag vill testa för jämställdhet med lika jämlikar. 1018 00:47:00,950 --> 00:47:03,390 Och så det nu kan vara min bättre lösning. 1019 00:47:03,390 --> 00:47:07,810 >> Låt mig faktiskt spara om detta som, säg, conditions1, att vara ny och förbättrad. 1020 00:47:07,810 --> 00:47:10,480 Så nu om jag kompilerar detta, det skulle göra förhållanden - 1021 00:47:10,480 --> 00:47:16,960 hoppsan - gör conditions1 dot slash conditions1, Enter, "Jag vill ha en int, 1022 00:47:16,960 --> 00:47:18,760 Snälla. "Jag kommer att gå framåt och typ 50. 1023 00:47:18,760 --> 00:47:19,660 Det är fortfarande bra. 1024 00:47:19,660 --> 00:47:21,200 Negativ 50, fortfarande bra. 1025 00:47:21,200 --> 00:47:24,920 0, och det, faktiskt, upptäcks att jag plockade 0. 1026 00:47:24,920 --> 00:47:28,200 >> Så vad mer kan jag göra nu med det här? 1027 00:47:28,200 --> 00:47:32,280 Tja, kan vi säkert göra allt komplexa saker. 1028 00:47:32,280 --> 00:47:37,240 Men vad jag skulle vilja föreslå är att vi hamnar på denna anteckning här. 1029 00:47:37,240 --> 00:47:41,680 Om vi ​​drar upp det här, ser du, kanske, en favorit film av era 1030 00:47:41,680 --> 00:47:43,326 fram tills idag du kanske aldrig har förstått. 1031 00:47:43,326 --> 00:47:46,550 1032 00:47:46,550 --> 00:47:49,520 Och det är om kvaliteten av skratt du borde få med CS skämt. 1033 00:47:49,520 --> 00:47:51,060 Så det är ungefär rätt. 1034 00:47:51,060 --> 00:47:54,900 >> Men mer fängslande, tänkte jag ge oss en liten teaser för måndag. 1035 00:47:54,900 --> 00:47:56,430 Så vi har börjat använda heltal. 1036 00:47:56,430 --> 00:47:57,510 Vi har hänvisat till flottar. 1037 00:47:57,510 --> 00:48:00,120 Vi har även kallad dubbel, vilket, återigen, ger dig siffror 1038 00:48:00,120 --> 00:48:01,390 efter decimalkomma. 1039 00:48:01,390 --> 00:48:04,230 >> Men det visar sig att flöten och dubblar, och, egentligen, datorer, 1040 00:48:04,230 --> 00:48:08,470 fundamentalt, inte kan uttrycka vissa värden exakt. 1041 00:48:08,470 --> 00:48:12,840 Vi vet från matematik klasser som du kan ha valfritt antal siffror efter 1042 00:48:12,840 --> 00:48:13,510 decimalkomma. 1043 00:48:13,510 --> 00:48:16,460 Och du kan även sätta ett lodrätt streck att säga dessa fortsätta för evigt. 1044 00:48:16,460 --> 00:48:18,810 >> Tyvärr kan du inte riktigt göra det i en dator. 1045 00:48:18,810 --> 00:48:20,400 Och så hörn fall uppstår. 1046 00:48:20,400 --> 00:48:23,120 Anta till exempel att du är göra något ekonomiskt. 1047 00:48:23,120 --> 00:48:25,700 Du gör matematik med procentsatser, och 1048 00:48:25,700 --> 00:48:27,030 med kronor och ören. 1049 00:48:27,030 --> 00:48:29,230 Och dessa cent inte nödvändigtvis laguppställningen. 1050 00:48:29,230 --> 00:48:34,120 Jo, visar det sig att delar av pennies kan börja lägga upp när 1051 00:48:34,120 --> 00:48:37,250 modelleras med ett datorsystem på ett sådant sätt att smart 1052 00:48:37,250 --> 00:48:39,100 människor kan utnyttja. 1053 00:48:39,100 --> 00:48:42,650 >> Och de av er som inte har sett, skulle jag vilja ge dig en 30-sekunders teaser 1054 00:48:42,650 --> 00:48:48,290 en underbar film som kallas Office Space, som kommer att måla en bild av en 1055 00:48:48,290 --> 00:48:51,205 problem som vi skall ta itu med första sak på måndag. 1056 00:48:51,205 --> 00:48:53,960 Om vi ​​kunde höja volymen lite, jag ger dig 30 1057 00:48:53,960 --> 00:48:55,495 sekunder av kontorslokaler. 1058 00:48:55,495 --> 00:48:55,770 >> [VIDEO SPELA] 1059 00:48:55,770 --> 00:48:59,000 >> -Jag menar, du, du har inte varit att visa upp och du får behålla ditt jobb. 1060 00:48:59,000 --> 00:49:00,620 >> -Faktiskt, jag främjas. 1061 00:49:00,620 --> 00:49:03,240 >> -Jag skulle kunna programmera ett virus som skulle rip att platsen utanför big time. 1062 00:49:03,240 --> 00:49:04,430 >> -Tja, hur fungerar det? 1063 00:49:04,430 --> 00:49:06,782 >> -Varje gång det finns en bank transaktion där ränta beräknas, och det 1064 00:49:06,782 --> 00:49:10,160 finns tusentals en dag, slutar datorn upp med dessa bråkdelar av en procent. 1065 00:49:10,160 --> 00:49:12,030 >> -Men jag tänker inte göra något olagligt. 1066 00:49:12,030 --> 00:49:12,660 >> -Olagligt? 1067 00:49:12,660 --> 00:49:15,075 Samir är detta Amerika. 1068 00:49:15,075 --> 00:49:16,570 >> -Vi måste svära till Gud. 1069 00:49:16,570 --> 00:49:19,070 >> -Om ingen vet om detta men oss, okej? 1070 00:49:19,070 --> 00:49:21,920 Inga familjemedlemmar, inga flickvänner, ingen. 1071 00:49:21,920 --> 00:49:22,700 >> -Självklart. 1072 00:49:22,700 --> 00:49:23,320 >> -Godkänt. 1073 00:49:23,320 --> 00:49:24,280 >> -Oroa dig inte, mannen. 1074 00:49:24,280 --> 00:49:25,640 Jag kommer inte berätta för någon heller. 1075 00:49:25,640 --> 00:49:26,504 >> [END VIDEOAVSPELNING] 1076 00:49:26,504 --> 00:49:30,030 >> DAVID MALAN: Så det här är alltså CS50, som var Office Space, och det kommer alla 1077 00:49:30,030 --> 00:49:31,465 vettigt på måndag. 1078 00:49:31,465 --> 00:49:33,940 Ser du sedan. 1079 00:49:33,940 --> 00:49:37,880 >> Berättare: Vid nästa CS50, Rob anpassar sig vara av 1080 00:49:37,880 --> 00:49:39,130 Harvard måltider. 1081 00:49:39,130 --> 00:49:56,160