1 00:00:00,000 --> 00:00:12,410 >> [MUSIC Playing] 2 00:00:12,410 --> 00:00:12,830 >> DAVID MALAN: Okay. 3 00:00:12,830 --> 00:00:13,370 Velkommen tilbage. 4 00:00:13,370 --> 00:00:16,510 Dette er CS50, og dette er Uge One, Fortsat. 5 00:00:16,510 --> 00:00:20,050 Så en af ​​grundene til vi har passerer omkring teknologier som 6 00:00:20,050 --> 00:00:24,120 Google Glas er at de kommer med noget kendt som et API, et 7 00:00:24,120 --> 00:00:25,980 Application Programming Interface. 8 00:00:25,980 --> 00:00:28,830 Og hvad det betyder er, at med rigtige filer og med den rigtige 9 00:00:28,830 --> 00:00:32,850 dokumentation, kan du faktisk skrive software til selv enheder som disse. 10 00:00:32,850 --> 00:00:36,200 >> Og så det, vi har i tankerne i retning af semestre ende er, at hvis et projekt 11 00:00:36,200 --> 00:00:39,310 involverer, siger, Google Glass måske appel, vil vi se, hvad vi kan gøre i 12 00:00:39,310 --> 00:00:42,220 hensyn koble dig op med nogle låneenhed hardware såvel som den 13 00:00:42,220 --> 00:00:46,500 offentligt tilgængelig API, så du kan faktisk begynde at skabe software 14 00:00:46,500 --> 00:00:48,630 der kører på den samme Google Glass. 15 00:00:48,630 --> 00:00:51,710 >> En anden enhed, som vi har spillet med for sent, som vi troede kunne være 16 00:00:51,710 --> 00:00:53,910 sjov på semesters ende er denne lille ting her. 17 00:00:53,910 --> 00:00:56,860 Det hedder Leap Motion, og hvad du er at se er teknisk en 18 00:00:56,860 --> 00:01:00,280 reklame for enheden, men det taler til hvad denne særlige 19 00:01:00,280 --> 00:01:01,240 enhed 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 software til at 21 00:01:05,550 --> 00:01:10,545 styre din egen computer på en måde, godt lide denne ene minuts film her. 22 00:01:10,545 --> 00:01:12,070 >> [VIDEO AFSPIL] 23 00:01:12,070 --> 00:02:08,002 24 00:02:08,002 --> 00:02:08,590 >> [END VIDEOAFSPILNING] 25 00:02:08,590 --> 00:02:11,190 >> Så lige nu, denne enhed sker for gennemføres som en lille USB 26 00:02:11,190 --> 00:02:14,290 stik, som du kan sætte ind i din computer, men jeg ville ikke blive overrasket 27 00:02:14,290 --> 00:02:17,930 hvis inden længe vi har disse former for teknologier i den næste batch af pc'er 28 00:02:17,930 --> 00:02:20,510 og Macs, så du kan, ja, interagere med den i 29 00:02:20,510 --> 00:02:21,650 en måde som. 30 00:02:21,650 --> 00:02:24,250 Faktisk jeg, hvad tænkte jeg ville gøre, også er Jeg trak op lidt demonstration 31 00:02:24,250 --> 00:02:25,860 program, der følger med denne software. 32 00:02:25,860 --> 00:02:28,700 Så jeg har lagt den lille sensor foran min bærbare computer. 33 00:02:28,700 --> 00:02:32,420 >> Og som du kan se, er det allerede realiserer at min hånd er der 34 00:02:32,420 --> 00:02:33,400 kontrollere den. 35 00:02:33,400 --> 00:02:37,900 Og alt dette program gør, er strygende 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å det til at gøre alle 10, du kan forestille dig en pæn klaver 38 00:02:44,270 --> 00:02:45,390 anvendelse eller lignende. 39 00:02:45,390 --> 00:02:47,820 Så hvis du gerne vil komme op efter klasse dag og leg med, som 40 00:02:47,820 --> 00:02:49,720 Nå, er du velkommen til. 41 00:02:49,720 --> 00:02:52,930 Så mere om det i retning semesters afslutning. 42 00:02:52,930 --> 00:02:54,420 >> Så et par administrativ annonceringer. 43 00:02:54,420 --> 00:02:58,690 One, gør afsnit ved denne fredag ved middagstid ved cs60.net/section. 44 00:02:58,690 --> 00:03:01,260 Denne URL er på kursets hjemmeside samt. 45 00:03:01,260 --> 00:03:04,010 I mellemtiden, selv om, supersections vil debut på søndag. 46 00:03:04,010 --> 00:03:07,800 Supersections er en engangs-ting, fordi det tager os lidt tid til at arbejde 47 00:03:07,800 --> 00:03:09,470 ud af, hvem der er i hvilket afsnit og hvor. 48 00:03:09,470 --> 00:03:12,280 >> Så den kommende søndag, vil der være én sektion for de mindre behagelige, 49 00:03:12,280 --> 00:03:14,040 en sektion for dem mere komfortabel. 50 00:03:14,040 --> 00:03:16,110 Og dem af jer et sted i mellem er velkommen til at gå til 51 00:03:16,110 --> 00:03:17,850 enten eller begge eller ingen af ​​delene. 52 00:03:17,850 --> 00:03:19,150 Begge disse vil blive filmet. 53 00:03:19,150 --> 00:03:22,740 De vil være i en større auditorium end en sektion normalt ville være i. 54 00:03:22,740 --> 00:03:26,110 Men målet her er at udstyre dig med nogle komfort med problemer indstille en, 55 00:03:26,110 --> 00:03:29,910 med C, med CS50 apparatet dette weekend, selv før du finder ud af din 56 00:03:29,910 --> 00:03:31,050 formelle sektion opgave. 57 00:03:31,050 --> 00:03:34,700 Så du møde din TF og din mindre gruppe af sectionmates i omkring 58 00:03:34,700 --> 00:03:36,350 en uges tid. 59 00:03:36,350 --> 00:03:38,200 >> Kontortid, i mellemtiden, har stået på. 60 00:03:38,200 --> 00:03:41,020 Gør drage fordel af dem i aften eller i i morgen aften, hvis du ønsker. 61 00:03:41,020 --> 00:03:43,460 Problem sæt 0 forfalder på fredag. 62 00:03:43,460 --> 00:03:46,680 Dette er en dag senere end den regelmæssigt-planlagt torsdag. 63 00:03:46,680 --> 00:03:50,410 Men med problemet sæt 1, vil du se at det indeholder nogle warm-up 64 00:03:50,410 --> 00:03:52,770 øvelser, som du selv kan forlænge dit 65 00:03:52,770 --> 00:03:54,660 Torsdag deadline til fredag. 66 00:03:54,660 --> 00:03:58,410 Problem sæt 1, i mellemtiden, vil debut på kursets hjemmeside i den kommende 67 00:03:58,410 --> 00:04:02,000 Fredag, hvis du gerne vil krølle op med det, som jeg gjorde engang sent 68 00:04:02,000 --> 00:04:04,370 Fredag ​​aften i dit værelse. 69 00:04:04,370 --> 00:04:07,660 >> Så cs50.net/appliance er det sted, hvor du kan få den CS50 apparat 70 00:04:07,660 --> 00:04:09,040 at vi begyndte at bruge på mandag. 71 00:04:09,040 --> 00:04:10,140 Vi vil bruge det lidt mere i dag. 72 00:04:10,140 --> 00:04:14,040 Men forvisset om, at problemet sæt 1 specifikation vil lede dig gennem 73 00:04:14,040 --> 00:04:16,490 netop de trin, du har brug for at få det op at køre. 74 00:04:16,490 --> 00:04:22,120 Så du skal ikke bekymre dig om at gøre det før Pset 1, hvis du hellere vil ikke. 75 00:04:22,120 --> 00:04:22,660 >> Ok. 76 00:04:22,660 --> 00:04:27,180 Så vi kiggede på mandag på kildekode, men i forbindelse med en ny 77 00:04:27,180 --> 00:04:30,895 programmeringssprog, nemlig C. And C, i modsætning til Scratch, er ikke grafisk. 78 00:04:30,895 --> 00:04:32,270 Det er ikke puslespillet. 79 00:04:32,270 --> 00:04:34,450 Det er mere engelsk-lignende syntaks. 80 00:04:34,450 --> 00:04:37,140 Og der er et par af de involverede trin i rent faktisk at skrive og kører en 81 00:04:37,140 --> 00:04:41,650 program i C, fordi ud kilde kode som dette, du har brug for noget 82 00:04:41,650 --> 00:04:42,890 kaldes en compiler. 83 00:04:42,890 --> 00:04:46,682 Og i lægmandssprog, hvad gør en compiler gøre for os? 84 00:04:46,682 --> 00:04:47,650 Ja. 85 00:04:47,650 --> 00:04:51,040 >> STUDENT: Det konverterer koden at du skriver til 0'er og 1-taller. 86 00:04:51,040 --> 00:04:51,151 >> DAVID MALAN: Godt. 87 00:04:51,151 --> 00:04:53,580 Så det konverterer den kode, Vi skriver til 0'er og 1-taller. 88 00:04:53,580 --> 00:04:57,730 Det konverterer såkaldte kildekode til objektkode, hvor sidstnævnte ser 89 00:04:57,730 --> 00:04:59,140 lidt noget som dette. 90 00:04:59,140 --> 00:05:02,860 Og det er din CPU, hjerne indeni computeren, at på grund af 91 00:05:02,860 --> 00:05:06,280 mennesker, der skabte disse computere, vide, hvad disse sekvenser 92 00:05:06,280 --> 00:05:07,460 af 0'er og 1'ere middelværdi. 93 00:05:07,460 --> 00:05:08,640 >> Måske betyder det print. 94 00:05:08,640 --> 00:05:10,265 Måske betyder tilføjelse. 95 00:05:10,265 --> 00:05:11,610 Måske betyder det subtraktion. 96 00:05:11,610 --> 00:05:13,350 Måske betyder det, vises en grafisk. 97 00:05:13,350 --> 00:05:16,870 Der er foruddefinerede mønstre af bits at verden har besluttet betyde 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 kursus, vi vil arbejde på et højere niveau, og 100 00:05:20,760 --> 00:05:24,180 vi tager for givet, at der findes ting som compilere, der kan 101 00:05:24,180 --> 00:05:27,670 gøre vores kildekode-funktion på den måde, vi har tænkt. 102 00:05:27,670 --> 00:05:31,660 >> Så det program, vi skrev først i sidste uge og derefter begyndte at havnen, så at 103 00:05:31,660 --> 00:05:33,920 tale, til C denne fortid Mandag var dette. 104 00:05:33,920 --> 00:05:35,700 Når grønt flag klikket, sige hej. 105 00:05:35,700 --> 00:05:37,430 Dette var naturligvis, skrevet i Scratch. 106 00:05:37,430 --> 00:05:40,710 Og jeg hævdede, at tilsvarende program i C så lidt 107 00:05:40,710 --> 00:05:41,520 noget som dette. 108 00:05:41,520 --> 00:05:45,050 >> Så hvad jeg troede, vi ville gøre på første, lad os drille hinanden hvad ser ved første 109 00:05:45,050 --> 00:05:48,790 øjekast ganske vist som ret mystiske syntaks, men du vil begynde at mærke 110 00:05:48,790 --> 00:05:50,160 mønstre ganske hurtigt. 111 00:05:50,160 --> 00:05:53,770 Hvad vil vi også gøre i dag, er at give dig med en mental model for nogle 112 00:05:53,770 --> 00:05:57,280 kanoniske, nogle standard konstruktioner i programmering. 113 00:05:57,280 --> 00:06:00,420 Og så vil vi faktisk få vores hænder beskidte med nogle eksempler så godt. 114 00:06:00,420 --> 00:06:04,140 >> Så for dem af jer mere behagelig, indse, at denne uge, og derefter næste 115 00:06:04,140 --> 00:06:05,940 uge kan meget vel være en smule gennemgang. 116 00:06:05,940 --> 00:06:08,810 Men især når hacker edition problem sæt 1 går ud på 117 00:06:08,810 --> 00:06:12,330 Kurset hjemmeside på fredag, tror jeg du opdage, at selv når du udfylder 118 00:06:12,330 --> 00:06:15,390 nogle blanke end den næste uge eller to, du vil begynde at få mere og mere 119 00:06:15,390 --> 00:06:18,410 udfordret og støder nye og nyere ting. 120 00:06:18,410 --> 00:06:21,310 >> Så lad os drille dette program fra hinanden et par linjer ad gangen. 121 00:06:21,310 --> 00:06:24,140 På toppen har vi, hvad der er teknisk kaldes en 122 00:06:24,140 --> 00:06:25,950 præprocessor direktiv. 123 00:06:25,950 --> 00:06:30,510 Dette er blot en linje kode, der siger at inkludere indholdet af en fil, 124 00:06:30,510 --> 00:06:35,080 kaldet standard I / N, standard input - eller, undskyld, standard I / O, standard 125 00:06:35,080 --> 00:06:38,670 input / output. h, inde min egen program. 126 00:06:38,670 --> 00:06:41,670 >> Så med andre ord, hvis jeg skrev dette program med en simpel teksteditor som 127 00:06:41,670 --> 00:06:45,260 gedit, den simplere svarende til noget som Microsoft Word, der 128 00:06:45,260 --> 00:06:50,970 instruktion, # include stdio.h, er blot vil fortælle compileren, tag fat i 129 00:06:50,970 --> 00:06:56,080 Indholdet af denne anden fil, stdio.h, og indsætte dem lige her. 130 00:06:56,080 --> 00:06:57,090 >> Nu, hvorfor skal jeg pleje? 131 00:06:57,090 --> 00:07:01,850 Hvad gjorde vi hævder er inde i denne fil kaldet stdio.h, der er lagret 132 00:07:01,850 --> 00:07:05,490 et eller andet sted på min harddisk, eller i dette fald et sted i CS50 apparat? 133 00:07:05,490 --> 00:07:06,635 En anden udtrykte det der for mig. 134 00:07:06,635 --> 00:07:09,910 Men hvad er der i? 135 00:07:09,910 --> 00:07:13,020 >> Yeah, så det er en erklæring om en funktion kaldet printf. 136 00:07:13,020 --> 00:07:17,400 Så printf minder den funktion, viser ord og tegn, og 137 00:07:17,400 --> 00:07:20,160 tal på skærmen på min bud. 138 00:07:20,160 --> 00:07:21,220 Men jeg vidste 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 Nogen år siden skrev det, og de hovedsagelig gav os opskriften på det 141 00:07:26,990 --> 00:07:29,110 i en fil kaldet stdio.h. 142 00:07:29,110 --> 00:07:33,240 Så første linje bare giver mig adgang til funktioner, at en anden 143 00:07:33,240 --> 00:07:36,500 skrev år siden, blandt som er printf. 144 00:07:36,500 --> 00:07:39,450 >> Nu den næste linje jeg har tænkt mig at vinke min hånd på, i hvert fald indtil næste uge. 145 00:07:39,450 --> 00:07:43,620 Men for nu, ved, at int main (void) er væsentlige svarer til dette 146 00:07:43,620 --> 00:07:46,310 gul brik, når grønne flag klikkede. 147 00:07:46,310 --> 00:07:49,510 Verden, år siden, besluttede, at hvis du skriver et program i 148 00:07:49,510 --> 00:07:53,150 sprog kaldet C, du starter dit program med en linje 149 00:07:53,150 --> 00:07:54,410 der ligner det. 150 00:07:54,410 --> 00:07:57,650 I næsten en uges tid, vil det gøre mening, hvad int er, hvilken ugyldig er. 151 00:07:57,650 --> 00:08:00,840 Men for nu, tror bare på det da denne gule brik. 152 00:08:00,840 --> 00:08:04,550 >> Nu næste, vi har en klammeparentes efterfulgt af en anden tæt klammeparentes, 153 00:08:04,550 --> 00:08:05,240 så at sige. 154 00:08:05,240 --> 00:08:07,430 Og vi vil se disse i hele 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 indkapsle relaterede linjer kode. 157 00:08:11,345 --> 00:08:14,600 Den åbne klammeparentes væsentlige siger, her kommer noget kode. 158 00:08:14,600 --> 00:08:17,590 Og den lukkede klammeparentes, som er vinklet i den anden retning, bare 159 00:08:17,590 --> 00:08:19,920 betyder, det er det for den relevante kode. 160 00:08:19,920 --> 00:08:22,970 >> Så den saftige linie i denne første Programmet er det sidste, printf, 161 00:08:22,970 --> 00:08:25,080 quote-citat slut, hej verden. 162 00:08:25,080 --> 00:08:30,670 Og jeg kaldte ting imellem citater hvad sidste 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 techie betegnelse for en sekvens af 165 00:08:35,309 --> 00:08:37,169 tegn, et ord, et udtryk. 166 00:08:37,169 --> 00:08:39,380 Selv et enkelt bogstav kunne være dobbelt citeret. 167 00:08:39,380 --> 00:08:41,840 Men det er en sekvens af nul eller flere tegn. 168 00:08:41,840 --> 00:08:43,650 >> Backslash-n, men ser lidt mærkeligt. 169 00:08:43,650 --> 00:08:46,290 Men det simpelthen betød noget enkle til computeren. 170 00:08:46,290 --> 00:08:48,060 Hvad er backslash-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 den særlige sekvens af tegn, som verden har besluttet 173 00:08:52,490 --> 00:08:56,880 midler lægge et linjeskift lige der, fordi compileren faktisk får 174 00:08:56,880 --> 00:09:02,280 forvirret, som regel, hvis man meget forståeligt, men er forkert, bare 175 00:09:02,280 --> 00:09:04,570 begynde at trykke Enter for at sætte nye linjer i din kode. 176 00:09:04,570 --> 00:09:07,150 Du er nødt til at være lidt mere eksplicit med backslash-n. 177 00:09:07,150 --> 00:09:10,540 >> Og vi vil se, at der er et par andre sådanne mønstre for specialtegn. 178 00:09:10,540 --> 00:09:14,340 For eksempel, for hvis du ville lade din sind vandre til et hjørne tilfælde 179 00:09:14,340 --> 00:09:18,080 antage, at jeg ønskede at udskrive en dobbelt citat på skærmen for 180 00:09:18,080 --> 00:09:21,840 uanset årsagen, vil der synes at være lidt problematisk, right? 181 00:09:21,840 --> 00:09:24,990 Fordi hvis jeg sætter en dobbelt citat i midten af ​​"Hej, verden," uanset 182 00:09:24,990 --> 00:09:30,120 grund, hvorfor der synes potentielt problematiske? 183 00:09:30,120 --> 00:09:32,180 Det bryder strengen. 184 00:09:32,180 --> 00:09:34,700 >> Compileren er bare et program. 185 00:09:34,700 --> 00:09:37,210 Et program som en compiler er bare at læse din kode top til bund, 186 00:09:37,210 --> 00:09:37,990 venstre til højre. 187 00:09:37,990 --> 00:09:41,850 Og hvis ser tre dobbelte citationstegn i stedet to, er det ikke kommer til at kende 188 00:09:41,850 --> 00:09:45,210 Hvis du mener, at de ting til venstre bør være strengen, eller ting til 189 00:09:45,210 --> 00:09:46,570 højre eller det hele. 190 00:09:46,570 --> 00:09:50,560 Det er tvetydig, og så hvad en typisk compiler ville gøre er bare flipper ud, 191 00:09:50,560 --> 00:09:53,710 og give dig nogle fejlmeddelelse, og gøre dig med at håndtere problemet. 192 00:09:53,710 --> 00:09:58,120 >> Så da backslash-n betyder en ny linje, hvad ville dine instinkter nu 193 00:09:58,120 --> 00:10:02,610 begynder at være, hvis du ønskede at medtage noget unormalt som en dobbelt 194 00:10:02,610 --> 00:10:06,210 citere inde i denne ellers citerede string? 195 00:10:06,210 --> 00:10:07,640 Omvendt skråstreg-double citat. 196 00:10:07,640 --> 00:10:09,630 Og så vil vi se denne form for mønster også. 197 00:10:09,630 --> 00:10:12,490 >> Hvis du ønsker at gøre noget lidt mærkeligt, vil du opdage, at 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 et escape-sekvens. 200 00:10:17,150 --> 00:10:20,320 Og det betyder bare noget særligt at vi skal repræsentere i en 201 00:10:20,320 --> 00:10:21,060 anderledes måde. 202 00:10:21,060 --> 00:10:23,830 Med hensyn til hvordan du repræsenterer en omvendt skråstreg, ja, vi vil 203 00:10:23,830 --> 00:10:24,550 vende tilbage til. 204 00:10:24,550 --> 00:10:26,930 Men svaret, også er faktisk en smule indlysende. 205 00:10:26,930 --> 00:10:31,080 >> Så lad os nu indføre nogle andre programmering konstruktioner 206 00:10:31,080 --> 00:10:31,915 at du så i Scratch. 207 00:10:31,915 --> 00:10:34,790 Du har sikkert taget for givet allerede, hvis du allerede har dykket ned 208 00:10:34,790 --> 00:10:36,060 Problemet sæt 0. 209 00:10:36,060 --> 00:10:40,950 Men lad os nu indføre syntaks i C for disse ellers temmelig intuitiv 210 00:10:40,950 --> 00:10:42,300 ideer, i det mindste nogle af dem. 211 00:10:42,300 --> 00:10:45,570 >> Så dette begreb en betingelse eller en filial, mens vi tidligere 212 00:10:45,570 --> 00:10:49,330 repræsenterede det med kode, så som dette på venstrefløjen i Scratch - 213 00:10:49,330 --> 00:10:52,200 hvis x er mindre end y, så sige det - 214 00:10:52,200 --> 00:10:56,760 stedet nu i C - lad mig finpudse ind på det simpleste tilfælde - 215 00:10:56,760 --> 00:11:01,235 vi simpelthen kommer til at sige, at hvis åbne parentes, noget er sandt - en 216 00:11:01,235 --> 00:11:04,190 Boolske udtryk kommer til at gå hvor jeg har sagt tilstand - 217 00:11:04,190 --> 00:11:08,170 tæt parentes, derefter hvad der er indersiden af ​​disse krøllede parenteser. 218 00:11:08,170 --> 00:11:11,020 >> Så her også, de krøllede parenteser er lidt ligesom Scratch s 219 00:11:11,020 --> 00:11:12,460 U-formede puslespilsbrikker. 220 00:11:12,460 --> 00:11:14,890 Gør hvad der er indeni disse krøllede parenteser. 221 00:11:14,890 --> 00:11:16,790 I dette tilfælde, skråstreg skråstreg. 222 00:11:16,790 --> 00:11:19,720 Og bemærke dette er en fremadrettet slash, ikke en backslash. 223 00:11:19,720 --> 00:11:21,440 Skråstreg, skråstreg, for dem, der har programmeret 224 00:11:21,440 --> 00:11:23,370 før, bare betyder - 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 kode, se pr. 227 00:11:26,630 --> 00:11:30,200 Det er en linje af engelsk, at du som menneske, har skrevet til dig selv at 228 00:11:30,200 --> 00:11:33,540 måske minde dig om at gøre noget, for at forklare dig selv, at forklare 229 00:11:33,540 --> 00:11:35,260 en anden, hvad din kode gø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 >> Nu, selvfølgelig, kan vi have en to-vejs gaffel i vejen lige ved at gøre dette, en 232 00:11:40,880 --> 00:11:43,930 tre-vejs gaffel i vejen ved at gøre det, og hvis du fortsætter med dette 233 00:11:43,930 --> 00:11:47,570 mønster, kan du have fire-vejs, fem-vejs, seks-vejs gafler i vejen, hvis 234 00:11:47,570 --> 00:11:50,150 du nødt til at håndtere, ja, at en række betingelser. 235 00:11:50,150 --> 00:11:52,010 Og så mærke til parallelitet her - 236 00:11:52,010 --> 00:11:55,070 hvis (betingelse), ellers hvis (betingelse), og det eneste, der er lidt 237 00:11:55,070 --> 00:11:58,010 mærkeligt er det sidste, der er bare, at andet. 238 00:11:58,010 --> 00:12:01,170 Men igen, dette er identiske, begrebsmæssigt, hvad vi har gjort 239 00:12:01,170 --> 00:12:04,690 allerede, selvom syntaks vil tage en lille smule tilvænning. 240 00:12:04,690 --> 00:12:07,730 >> Nu, i dette eksempel, er der nogle andre mærkelige syntaks. 241 00:12:07,730 --> 00:12:11,220 Vi ser printf igen åben parentes, og tæt parentes. 242 00:12:11,220 --> 00:12:13,190 Og inde i der er et noteret streng. 243 00:12:13,190 --> 00:12:17,060 De parenteser, i forbindelse af printf, gå til venstre 244 00:12:17,060 --> 00:12:18,160 og til højre for hvad? 245 00:12:18,160 --> 00:12:22,190 Hvad skal vi beskrive det citerede streng som mere 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 funktion, som printf, og derefter en åben parentes og et 248 00:12:26,620 --> 00:12:30,330 tæt paren og noget inde i det, uanset om det er en streng, eller en 249 00:12:30,330 --> 00:12:34,420 heltal, eller noget andet, de ting i mellem disse parentes kaldes 250 00:12:34,420 --> 00:12:35,110 et argument. 251 00:12:35,110 --> 00:12:37,910 >> Og et argument netop indflydelse funktionens adfærd. 252 00:12:37,910 --> 00:12:39,990 I dette tilfælde er det temmelig klart hvordan. 253 00:12:39,990 --> 00:12:44,480 x 00:12:47,720 Og printf vil udskrive præcis det. 255 00:12:47,720 --> 00:12:51,590 Fordi sikkert den person år siden der gennemføres printf havde ingen idé 256 00:12:51,590 --> 00:12:55,000 hvad vi menneskelige efterfølgere vil bruge printf til. 257 00:12:55,000 --> 00:12:58,610 Så det er derfor argumenter findes, påvirke adfærd efter en funktions 258 00:12:58,610 --> 00:12:59,450 blevet skrevet. 259 00:12:59,450 --> 00:13:00,780 >> Nu Boolske udtryk. 260 00:13:00,780 --> 00:13:02,470 Vi har set disse før i Scratch. 261 00:13:02,470 --> 00:13:06,680 Det viser sig i C kan du også "eller" dem sammen, så at sige. 262 00:13:06,680 --> 00:13:10,930 To lodrette bjælker betyder, at denne blok kode, dette gør dette, vil 263 00:13:10,930 --> 00:13:15,350 udføre, hvis den første betingelse er sand eller den anden betingelse er sand. 264 00:13:15,350 --> 00:13:17,710 Og selvom du måske ikke har gjort dette Scratch, du kunne faktisk 265 00:13:17,710 --> 00:13:20,580 gøre dette i Scratch, og du kan også udtrykke dig anderledes - 266 00:13:20,580 --> 00:13:25,300 hvis den første tilstand og den anden betingelse er sandt, så hvad er 267 00:13:25,300 --> 00:13:27,160 indersiden af ​​krøllede parenteser. 268 00:13:27,160 --> 00:13:31,210 >> Og lige som en sidebemærkning, grunden til det er en dobbelt-tegn og en dobbelt 269 00:13:31,210 --> 00:13:34,610 lodrette linje, vil vi se til sidst at en enkelt lodret streg og en 270 00:13:34,610 --> 00:13:38,710 single-tegn faktisk har forskellige mening i C. Så for nu, 271 00:13:38,710 --> 00:13:41,840 at overlapning af symboler er tilsigtet. 272 00:13:41,840 --> 00:13:45,070 >> Så lad os indføre kortvarigt, dette andet smule syntaks. 273 00:13:45,070 --> 00:13:48,940 Det ikke helt fremførsel til Scratch, men jeg hævder, at jeg kan 274 00:13:48,940 --> 00:13:55,190 implementere begrebet et if andet, hvis ellers, hvis ellers hvis ellers erklæring hjælp 275 00:13:55,190 --> 00:13:56,760 noget, der hedder en switch-statement. 276 00:13:56,760 --> 00:14:00,820 Og den eneste grund til dette virkelig eksisterer er at bare give dig, programmør, 277 00:14:00,820 --> 00:14:05,470 lidt anden måde at løse nogle problem, selvom logisk det 278 00:14:05,470 --> 00:14:07,340 giver dig ikke nogen nye kapaciteter. 279 00:14:07,340 --> 00:14:08,530 >> Dermed mener jeg dette. 280 00:14:08,530 --> 00:14:13,330 Når du siger switch, og derefter et mellemrum, og derefter et par parenteser, indenfor 281 00:14:13,330 --> 00:14:14,570 som går et udtryk - 282 00:14:14,570 --> 00:14:18,010 og dette kan være en smule ikke-indlysende ved første, men dette er ikke et argument, 283 00:14:18,010 --> 00:14:20,680 teknisk, fordi switch er ikke en funktion. 284 00:14:20,680 --> 00:14:24,230 Så for nu, antager bare, at vi bruger parentes på forskellige steder 285 00:14:24,230 --> 00:14:25,250 af forskellige årsager. 286 00:14:25,250 --> 00:14:29,310 >> Så tænd udtryk betyder, at jeg kan sætte en variabel inde i dem 287 00:14:29,310 --> 00:14:31,350 parentes hvor der står udtryk. 288 00:14:31,350 --> 00:14:33,090 Og hvis den pågældende variabel - 289 00:14:33,090 --> 00:14:35,400 Antag, at det hedder x, og det er bare et heltal - 290 00:14:35,400 --> 00:14:38,900 Jeg kan derefter opregne i min slide her noget som dette. 291 00:14:38,900 --> 00:14:41,690 Hvis x er min variabel, og jeg ønsker at gøre noget, hvis x 292 00:14:41,690 --> 00:14:43,480 er lig med 1, kan jeg gøre det. 293 00:14:43,480 --> 00:14:46,660 >> Hvis jeg i stedet ønsker at gøre noget hvis x er 2, kan jeg gøre det. 294 00:14:46,660 --> 00:14:50,390 Else, hvis jeg ønsker at gøre noget andet helt, kan jeg have en default sag 295 00:14:50,390 --> 00:14:52,750 hvilket tilfælde jeg gør dette andet. 296 00:14:52,750 --> 00:14:58,730 Så i den forstand er det svarende til en hvis x er lig lig med 1, ellers hvis andet, 297 00:14:58,730 --> 00:15:01,150 men jeg nævner det nu, bare fordi vi vil se det igen. 298 00:15:01,150 --> 00:15:03,720 Men for nu, ved bare, at den eksisterer. 299 00:15:03,720 --> 00:15:04,220 >> Ok. 300 00:15:04,220 --> 00:15:07,660 Så disse sidste par er lidt mere kompleks ved første øjekast, men de gør 301 00:15:07,660 --> 00:15:09,385 noget forholdsvis ligetil. 302 00:15:09,385 --> 00:15:14,410 A for løkke i C er en bid af kode, bare gør noget igen og 303 00:15:14,410 --> 00:15:15,330 igen og igen. 304 00:15:15,330 --> 00:15:17,590 Og den eneste irriterende ting ved det er det er, at det er lidt kryptisk 305 00:15:17,590 --> 00:15:21,380 at udtrykke dig i denne cykliske mønster, men verden standardiseret på 306 00:15:21,380 --> 00:15:22,450 på følgende måde. 307 00:15:22,450 --> 00:15:25,760 >> Når du bruger en for-løkke, you got et par parenteser igen. 308 00:15:25,760 --> 00:15:27,570 Og bemærk to semikoloner derinde. 309 00:15:27,570 --> 00:15:34,380 Disse to semikoloner separate tre forskellige udtryk indersiden af 310 00:15:34,380 --> 00:15:35,020 parenteser. 311 00:15:35,020 --> 00:15:37,170 Den ene er de såkaldte startværdier. 312 00:15:37,170 --> 00:15:38,830 Den ene er den såkaldte tilstand. 313 00:15:38,830 --> 00:15:40,210 Og en er de såkaldte opdateringer. 314 00:15:40,210 --> 00:15:43,240 >> Kiggede på i det abstrakte, det er fuldstændig ikke-indlysende, så lad os 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 havde vi en gentagelse blok. 317 00:15:46,720 --> 00:15:50,670 Og denne blok sagde gentag 10 gange, siger "Hej, verden." Lad mig krav på 318 00:15:50,670 --> 00:15:53,810 nu, og vi vil komme tilbage til dette, og dette vil også få mere velkendt for 319 00:15:53,810 --> 00:15:57,345 du inden længe, ​​svarende C kode kan siges at være det - 320 00:15:57,345 --> 00:16:02,320 en for opgørelse og et mellemrum, et par parenteser, bemærk semikolon i 321 00:16:02,320 --> 00:16:05,730 der, som adskiller tre særskilte Ting, initialisering, de 322 00:16:05,730 --> 00:16:07,320 tilstand, og opdateringen. 323 00:16:07,320 --> 00:16:08,840 >> Og tage et gæt hvad den første gør. 324 00:16:08,840 --> 00:16:10,690 Int i = 0. 325 00:16:10,690 --> 00:16:15,120 I ru lægmandssprog, hvad , at gøre for os, sandsynligvis? 326 00:16:15,120 --> 00:16:15,590 Så ja. 327 00:16:15,590 --> 00:16:19,630 Det er om en variabel kaldet i, og det er at give den, hvad værdi? 328 00:16:19,630 --> 00:16:20,220 0. 329 00:16:20,220 --> 00:16:24,280 Så det er at skabe en kaldet variabel Jeg, lagring værdien 0 i det. 330 00:16:24,280 --> 00:16:26,420 Det er den såkaldte initialisering. 331 00:16:26,420 --> 00:16:29,360 >> Okay, nu er jeg påstod før at den midterste ting, jeg 332 00:16:29,360 --> 00:16:31,760 <10, er betingelsen. 333 00:16:31,760 --> 00:16:32,730 Så hvad gør? 334 00:16:32,730 --> 00:16:36,560 Nå, hvad for-løkken gør, når en program med en for-løkke køres, er 335 00:16:36,560 --> 00:16:41,050 hver gang computeren løber gennem denne løkke, top til bund, top til 336 00:16:41,050 --> 00:16:43,740 bund, ligesom du fyre gjorde, da tælle jer selv og sidder ned, 337 00:16:43,740 --> 00:16:47,090 igen og igen og igen, computeren går 338 00:16:47,090 --> 00:16:48,560 at kontrollere, at tilstand. 339 00:16:48,560 --> 00:16:51,140 Og hvis jeg er mindre end 10, det vil gøre det igen. 340 00:16:51,140 --> 00:16:53,100 Hvis i er mindre end 10, det vil gøre det igen. 341 00:16:53,100 --> 00:16:55,030 Hvis i er mindre end ti, det vil gøre det igen. 342 00:16:55,030 --> 00:16:57,330 Så det tyder på, at forhåbentlig jeg er under forandring. 343 00:16:57,330 --> 00:16:59,010 Ellers ville vi have en uendelig løkke. 344 00:16:59,010 --> 00:17:02,590 Og faktisk er jeg forandring, fordi sidste ting efter semikolon der 345 00:17:02,590 --> 00:17:05,569 er den noget kryptiske syntaks i + +. 346 00:17:05,569 --> 00:17:07,630 Men de af jer, der har gjort det før, det betyder bare 347 00:17:07,630 --> 00:17:08,609 ganske enkelt hvad? 348 00:17:08,609 --> 00:17:09,730 >> STUDERENDE: [interposing STEMMER]. 349 00:17:09,730 --> 00:17:10,740 >> DAVID MALAN: Læg 1 til i. 350 00:17:10,740 --> 00:17:11,819 Tilvækst i. 351 00:17:11,819 --> 00:17:13,910 Så så vi en Scratch puslespil stykke for at, faktisk. 352 00:17:13,910 --> 00:17:18,230 Det lignede ikke i + +, men blot betyder ganske enkelt, øg 353 00:17:18,230 --> 00:17:24,040 værdsætter jeg med 1 hver gang du gør dette. 354 00:17:24,040 --> 00:17:26,910 Så bogstaveligt, skal du starte med initialisering i til 0. 355 00:17:26,910 --> 00:17:29,520 Du kan derefter kontrollere din tilstand. 356 00:17:29,520 --> 00:17:31,070 Er 0 mindre end 10? 357 00:17:31,070 --> 00:17:31,730 Ja. 358 00:17:31,730 --> 00:17:32,910 Vi går gennem løkken. 359 00:17:32,910 --> 00:17:35,150 >> Det næste jeg hævder computerens kommer til at gøre, er at det går 360 00:17:35,150 --> 00:17:35,910 at forøge jeg. 361 00:17:35,910 --> 00:17:37,080 Så jeg er nu 1. 362 00:17:37,080 --> 00:17:37,940 Den kontrollerer tilstanden. 363 00:17:37,940 --> 00:17:39,290 Er 1 mindre end 10? 364 00:17:39,290 --> 00:17:39,930 Selvfølgelig. 365 00:17:39,930 --> 00:17:41,030 Så gør det igen. 366 00:17:41,030 --> 00:17:43,580 Så spring i + + til 2. 367 00:17:43,580 --> 00:17:44,610 Er 2 mindre end 10? 368 00:17:44,610 --> 00:17:45,230 Ja. 369 00:17:45,230 --> 00:17:46,670 Og igen og igen og igen. 370 00:17:46,670 --> 00:17:50,070 Og til sidst, på grund af den plus-plussing, får vi til i svarer til 10. 371 00:17:50,070 --> 00:17:51,675 Er 10 mindre end 10? 372 00:17:51,675 --> 00:17:52,990 Nå, selvfølgelig ikke. 373 00:17:52,990 --> 00:17:55,320 Og det er det punkt, hvor for-løkken bare stopper. 374 00:17:55,320 --> 00:17:58,320 Og hvis du har mere kode på skærm dernede, computeren 375 00:17:58,320 --> 00:18:01,620 provenu til at køre denne kode i stedet. 376 00:18:01,620 --> 00:18:05,380 >> Så igen, selvom det kommer til at se og føles lidt mærkeligt på 377 00:18:05,380 --> 00:18:07,830 først, i hvert fald for dem af jer, der aldrig har programmeret før, det 378 00:18:07,830 --> 00:18:11,640 bogstaveligt reducerer begrebsmæssigt til hvad der er ellers en meget 379 00:18:11,640 --> 00:18:14,330 ligetil puslespil brik i Scratch. 380 00:18:14,330 --> 00:18:19,130 >> Okay, jeg lovede, at der ville være andre analoger Scratch. 381 00:18:19,130 --> 00:18:20,060 Der er denne ene også. 382 00:18:20,060 --> 00:18:21,700 Og vi så dette kort sidste gang. 383 00:18:21,700 --> 00:18:23,530 Men husk altid blokere i bunden? 384 00:18:23,530 --> 00:18:25,490 Det bare gør noget for evigt? 385 00:18:25,490 --> 00:18:27,470 Jeg hævdede, at man kunne gennemføre dette på denne måde. 386 00:18:27,470 --> 00:18:29,740 Og du kan faktisk gennemføre denne i en masse forskellige måder. 387 00:18:29,740 --> 00:18:34,260 >> Men imens løkken er bare en anden måde C udtrykke dig selv. 388 00:18:34,260 --> 00:18:37,080 I slutningen af ​​dagen, kan du ikke gøre noget med en while-løkke, 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 i slutningen af dag funktionelt den samme. 391 00:18:41,430 --> 00:18:43,840 Men det giver dig mulighed for at udtrykke dig lidt forskelligt i 392 00:18:43,840 --> 00:18:44,850 på følgende måde. 393 00:18:44,850 --> 00:18:49,720 >> Med while-løkke, det er hvad der er i parenteser, der er kontrolleret igen og 394 00:18:49,720 --> 00:18:51,050 igen og igen. 395 00:18:51,050 --> 00:18:55,100 Og så snart dette udtryk er falsk, så løkken stopper udførelse, 396 00:18:55,100 --> 00:18:57,890 og computeren fortsætter til køre, hvad anden kode, du 397 00:18:57,890 --> 00:18:59,230 have i din fil. 398 00:18:59,230 --> 00:19:02,180 >> Men hvad er interessant her at jeg bogstaveligt talt skrevet sandt. 399 00:19:02,180 --> 00:19:06,680 Og sandt er en type af boolesk værdi, en sand eller falsk værdi. 400 00:19:06,680 --> 00:19:09,750 Så kunne sande nogensinde blive falsk, hvis jeg har bogstaveligt talt 401 00:19:09,750 --> 00:19:11,970 hard-kodet det ind i min program? 402 00:19:11,970 --> 00:19:12,470 Så nej. 403 00:19:12,470 --> 00:19:13,730 Det er lidt mærkeligt, at jeg gjorde det. 404 00:19:13,730 --> 00:19:15,190 Men sandt er sandt. 405 00:19:15,190 --> 00:19:16,320 Der er ingen plus-plussing. 406 00:19:16,320 --> 00:19:17,820 Der er ingen brug af variabler i her. 407 00:19:17,820 --> 00:19:22,740 Så fordi jeg hardcoded mens sandt, dette løkke er altid vil evaluere 408 00:19:22,740 --> 00:19:24,090 igen og igen og igen. 409 00:19:24,090 --> 00:19:27,660 >> Så hvor mange gange er hej verden kommer til at udskrive på skærmen? 410 00:19:27,660 --> 00:19:28,170 Evigt. 411 00:19:28,170 --> 00:19:31,980 Et uendeligt antal gange, indtil batteriet dør eller en anden ekstern 412 00:19:31,980 --> 00:19:32,730 begivenhed sker. 413 00:19:32,730 --> 00:19:35,880 Så dette er nok ikke det bedste program at skrive, fordi hvis brugeren 414 00:19:35,880 --> 00:19:38,660 kan aldrig forlade dit program, er det sandsynligvis ikke, hvad du havde tænkt dig. 415 00:19:38,660 --> 00:19:41,070 >> Men nogle gange, programmer har en uendelig løkke. 416 00:19:41,070 --> 00:19:44,050 For eksempel har, hvis computeren en ur på det, det sikkert ville være 417 00:19:44,050 --> 00:19:48,130 rart, hvis dit ur det gør holde opdatere selv for evigt, omend en gang 418 00:19:48,130 --> 00:19:50,500 sekund eller en gang et minut eller noget lignende. 419 00:19:50,500 --> 00:19:53,690 Så selv uendelige løkker har deres plads. 420 00:19:53,690 --> 00:19:54,360 >> Ok. 421 00:19:54,360 --> 00:19:55,190 Endelig, denne ene. 422 00:19:55,190 --> 00:19:57,770 Og dette er en lille smule anderledes funktionelt, og vi vil komme tilbage til 423 00:19:57,770 --> 00:19:59,460 dette sandsynligvis i Pset 1.. 424 00:19:59,460 --> 00:20:02,370 Men der er en anden type loop kaldes en gøre, mens løkke. 425 00:20:02,370 --> 00:20:07,100 Og den eneste forskel her mellem en gøre, mens loop og, siger en while-løkke, 426 00:20:07,100 --> 00:20:11,120 er, at betingelsen er markeret ikke før du udføre koden, men efter 427 00:20:11,120 --> 00:20:12,080 du udføre koden. 428 00:20:12,080 --> 00:20:15,380 Så på toppen for imens loop, mens gøre, mens 429 00:20:15,380 --> 00:20:16,560 kontrollerer den i bunden. 430 00:20:16,560 --> 00:20:21,370 >> Og det betyder blot, at mens løkken vil typisk udføre flere gange 431 00:20:21,370 --> 00:20:24,630 eller færre gange end en while-løkke? 432 00:20:24,630 --> 00:20:30,810 Potentielt flere gange, fordi en do mens løkken klart siger gøre dette, 433 00:20:30,810 --> 00:20:34,600 først efter hvilket tidspunkt du tjekke hvis betingelsen indersiden af 434 00:20:34,600 --> 00:20:35,980 parentes er sandt. 435 00:20:35,980 --> 00:20:37,940 >> Så vi vil se det igen sandsynligvis i Pset 1. 436 00:20:37,940 --> 00:20:41,150 Hvis du nogensinde ønsker at gøre noget ved mindst en gang og så måske nogle flere 437 00:20:41,150 --> 00:20:43,350 gange, det er en god konstruere at bruge. 438 00:20:43,350 --> 00:20:46,970 Men en while-løkke, derimod, vil kontrollere dets tilstand først. 439 00:20:46,970 --> 00:20:50,660 Og det er det for sløjfer i C, må mens, mens, og sløjfer. 440 00:20:50,660 --> 00:20:54,700 Og igen, de kortlægge temmelig pænt tilbage til bunden, undtagen denne ene ikke gør 441 00:20:54,700 --> 00:20:57,350 helt har samme analoge i Scratch. 442 00:20:57,350 --> 00:20:58,880 >> Tja, hvad med nu, variabler? 443 00:20:58,880 --> 00:21:02,600 Så det er sådan jeg erklæret en variabel syntaktisk forleden. 444 00:21:02,600 --> 00:21:06,440 Jeg havde en int, som jeg påstod er et heltal. 445 00:21:06,440 --> 00:21:09,690 Jeg havde derefter en variabel kaldet tæller, og derefter et semikolon. 446 00:21:09,690 --> 00:21:11,070 Så hvad er denne linje kode gør? 447 00:21:11,070 --> 00:21:14,540 Det er ganske enkelt at erklære en variabel - 448 00:21:14,540 --> 00:21:17,940 der er, spørger computeren, giv mig noget hukommelse, giv mig nogle bits - i 449 00:21:17,940 --> 00:21:19,450 som jeg kan gemme hvad? 450 00:21:19,450 --> 00:21:20,300 En int. 451 00:21:20,300 --> 00:21:23,570 Og semikolon betyder bare slutningen af ​​linje kode. 452 00:21:23,570 --> 00:21:25,500 >> Nu, den anden linje er sandsynligvis pretty guessable. 453 00:21:25,500 --> 00:21:29,710 Hvad er counter = 0; gør? 454 00:21:29,710 --> 00:21:31,690 Det tildele 0 at imødegå. 455 00:21:31,690 --> 00:21:33,470 Og så dette er den anden ting det er lidt irriterende 456 00:21:33,470 --> 00:21:34,540 versus, siger, algebra. 457 00:21:34,540 --> 00:21:39,110 Betragtninger i algebra betyder lighedstegnet lig, her i C, lige 458 00:21:39,110 --> 00:21:40,470 tegn betyder opgave. 459 00:21:40,470 --> 00:21:45,380 Så det betyder lægge, hvad der er på den rigtige i, hvad der er til venstre. 460 00:21:45,380 --> 00:21:49,030 Og vi vil se et andet symbol, er lig ligeværdige, når vi ønsker at rent faktisk teste 461 00:21:49,030 --> 00:21:50,570 for kvalitet, noget irriterende. 462 00:21:50,570 --> 00:21:52,590 >> Men dette er lidt ineffektiv. 463 00:21:52,590 --> 00:21:55,090 Det er slags irriterende, at jeg har at erklære en variabel og 464 00:21:55,090 --> 00:21:56,110 derefter give det en værdi. 465 00:21:56,110 --> 00:21:59,380 Så C faktisk lader os forenkle denne og bare gøre det hele på én gang. 466 00:21:59,380 --> 00:22:01,330 Du kan erklære variable til venstre. 467 00:22:01,330 --> 00:22:04,590 Du kan stadig gøre opgaven på lige ved at sætte det lighedstegn i 468 00:22:04,590 --> 00:22:05,030 midten. 469 00:22:05,030 --> 00:22:08,740 Så i slutningen af ​​dagen, er disse to ækvivalente, men denne ene, helt ærligt, 470 00:22:08,740 --> 00:22:11,840 er sandsynligvis den bedre vane at komme ind bare fordi det er en smule mindre 471 00:22:11,840 --> 00:22:15,040 kode, det er lidt lettere at læse, og det bare strammer op 472 00:22:15,040 --> 00:22:17,470 din kode, så at sige. 473 00:22:17,470 --> 00:22:22,120 >> Eventuelle spørgsmål hidtil på loops, af variabler, om vilkår og på 474 00:22:22,120 --> 00:22:27,001 Booleans, hverken teknisk eller begrebsmæssigt? 475 00:22:27,001 --> 00:22:28,010 Ok. 476 00:22:28,010 --> 00:22:30,690 Så nu denne næste får man en lidt mere interessant. 477 00:22:30,690 --> 00:22:34,790 Og dette er eksempel jeg sat op sidste tid, der blot kortlægger 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 funktion. 480 00:22:36,580 --> 00:22:38,110 I lægmandssprog, er hvad en funktion? 481 00:22:38,110 --> 00:22:42,900 482 00:22:42,900 --> 00:22:44,350 Fik at være dristigere med dit svar. 483 00:22:44,350 --> 00:22:45,020 Hvad er en funktion? 484 00:22:45,020 --> 00:22:46,320 >> STUDENT: gør noget. 485 00:22:46,320 --> 00:22:46,780 >> DAVID MALAN: Hvad er det? 486 00:22:46,780 --> 00:22:48,000 >> STUDENT: gør noget. 487 00:22:48,000 --> 00:22:48,710 >> DAVID MALAN: Betyder noget. 488 00:22:48,710 --> 00:22:49,000 OK. 489 00:22:49,000 --> 00:22:49,590 Vi starte der. 490 00:22:49,590 --> 00:22:51,270 Så en funktion gør noget. 491 00:22:51,270 --> 00:22:55,160 Så det er et stykke kode, der er væsentlige gennemført andetsteds, 492 00:22:55,160 --> 00:22:56,620 faktisk gør noget. 493 00:22:56,620 --> 00:23:00,180 Nu, hvad er interessant ved en funktion er, at det kan tage input, 494 00:23:00,180 --> 00:23:02,710 og det kan producere output. 495 00:23:02,710 --> 00:23:05,090 Og lad os faktisk tage et kig på dette. 496 00:23:05,090 --> 00:23:09,030 >> Så manden bag forhænget var bevidst for et øjeblik siden. 497 00:23:09,030 --> 00:23:10,320 Her har vi en tabel. 498 00:23:10,320 --> 00:23:13,010 Men formoder, at dette faktisk repræsenterer en stor kasse. 499 00:23:13,010 --> 00:23:14,940 Så dette er en såkaldt sort boks. 500 00:23:14,940 --> 00:23:19,800 Og generelt, i design, i computer videnskab, sorte bokse blot henvise til 501 00:23:19,800 --> 00:23:22,510 stykker af funktionalitet, at nogen har gennemført, og du ikke 502 00:23:22,510 --> 00:23:26,140 nødvendigvis kender eller pleje, hvordan det er implementeret under hætten. 503 00:23:26,140 --> 00:23:28,960 Du skal bare passe, at denne sorte boks, som vi vil nu begynde at kalde en 504 00:23:28,960 --> 00:23:30,730 funktion, gør noget. 505 00:23:30,730 --> 00:23:34,710 >> Så, for eksempel hvis denne sorte boks på scenen her repræsenterer printf, en 506 00:23:34,710 --> 00:23:38,040 funktion, jeg kender fra tidligere eksempler der printf tager et eller flere 507 00:23:38,040 --> 00:23:40,910 argumenter, og den første af dem, Argumenterne bør være en streng, ligesom 508 00:23:40,910 --> 00:23:44,780 "Hej, verden." Tja, hvis jeg er den person, skriver i programmet, og jeg vil 509 00:23:44,780 --> 00:23:50,460 at bruge printf, jeg, for eksempel, kan tage et stykke af blankt papir her og en 510 00:23:50,460 --> 00:23:55,060 sort markør og skrive på den - 511 00:23:55,060 --> 00:23:56,580 Jeg stavede "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 tager min sorte markør og jeg vil skrive, så stor og læseligt, som jeg kan på 514 00:24:04,220 --> 00:24:07,260 dette stykke papir, "Hej, verden," Og nu har jeg hævde dette er mit argument. 515 00:24:07,260 --> 00:24:09,740 Dette er en streng repræsenteret med et stykke hvidt papir. 516 00:24:09,740 --> 00:24:13,030 Og mit input nu til funktionen printf vil være dette. 517 00:24:13,030 --> 00:24:18,250 Så jeg ringer printf, passerer dette argument som input til det. 518 00:24:18,250 --> 00:24:22,110 519 00:24:22,110 --> 00:24:26,740 >> Og nu, jeg ved ikke, hvordan den person, der skrev printf gjorde det år siden, men 520 00:24:26,740 --> 00:24:31,110 Jeg kender fra dets dokumentation, sit formål i livet er at udskrive, hvad jeg 521 00:24:31,110 --> 00:24:34,410 give det som input. 522 00:24:34,410 --> 00:24:40,630 Og ja, selvom denne implementering er ukendt for mig 523 00:24:40,630 --> 00:24:44,170 under hætten, nu Jeg ser, åh, det er gjort. 524 00:24:44,170 --> 00:24:45,740 Det har udskrevet noget på skærmen. 525 00:24:45,740 --> 00:24:49,070 Og nu kontrollerer af programmet, hvis der var flere linjer kode, ville 526 00:24:49,070 --> 00:24:51,070 er nu vendt tilbage til mig. 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, der gemmer sig her under et bord foran jer alle - 529 00:24:55,370 --> 00:24:59,530 er bevidst, idet jeg ikke kender og jeg er ligeglad med hvor printf er 530 00:24:59,530 --> 00:25:00,100 gennemført. 531 00:25:00,100 --> 00:25:03,390 Jeg ved bare, igen, fra dens dokumentation, hvad det gør og hvordan jeg 532 00:25:03,390 --> 00:25:05,040 jeg skulle bruge det. 533 00:25:05,040 --> 00:25:09,140 >> Nu huske, at printf kunne få lidt mere sofistikeret. 534 00:25:09,140 --> 00:25:12,220 Igen, vi bare taler om svarende til Scratch os sige blok. 535 00:25:12,220 --> 00:25:14,230 Men jeg har også gjorde det sidste gang. 536 00:25:14,230 --> 00:25:17,270 Jeg ønskede at gøre mit hello program a lidt mere dynamisk og ikke bare svært 537 00:25:17,270 --> 00:25:19,740 kode noget lignende "verden", og absolut ikke svært kode noget 538 00:25:19,740 --> 00:25:22,520 vilkårlig ligesom D-A-V-I-D i programmet. 539 00:25:22,520 --> 00:25:27,510 Jeg ville gerne spørge brugeren om hans eller hendes navn og derefter gøre noget med 540 00:25:27,510 --> 00:25:29,720 denne streng som de giver. 541 00:25:29,720 --> 00:25:32,690 >> Så der er noget lidt anderledes her. printf, for et øjeblik siden, 542 00:25:32,690 --> 00:25:35,860 gjorde, ja, gøre noget, men det returnerede ikke noget for mig. 543 00:25:35,860 --> 00:25:36,020 Right? 544 00:25:36,020 --> 00:25:38,910 Colton ikke give mig noget tilbage, ingen stykke papir. 545 00:25:38,910 --> 00:25:40,320 Der var bare en bivirkning. 546 00:25:40,320 --> 00:25:44,510 Min give "hej, verden" som en argument for Colton resulteret i 547 00:25:44,510 --> 00:25:48,420 bivirkning af et ord, nogle ord, vises på skærmen. 548 00:25:48,420 --> 00:25:51,350 >> getString, er dog en smule anderledes. getString er også en 549 00:25:51,350 --> 00:25:54,590 fungere, men det returnerer en vis værdi. 550 00:25:54,590 --> 00:25:56,370 Det er ikke bare har en æstetisk bivirkning. 551 00:25:56,370 --> 00:26:00,230 Det faktisk giver mig, skal den person ringer eller bruge funktionen 552 00:26:00,230 --> 00:26:01,320 noget tilbage. 553 00:26:01,320 --> 00:26:05,740 Så i dette tilfælde er getString kaldte med getString åben 554 00:26:05,740 --> 00:26:07,510 paren tæt parentes. 555 00:26:07,510 --> 00:26:11,370 Er getString derfor tage argumenter eller input? 556 00:26:11,370 --> 00:26:12,340 Nej, det ser ikke ud til. 557 00:26:12,340 --> 00:26:14,460 Dens formål i livet er bare for at få en streng. 558 00:26:14,460 --> 00:26:16,910 Det kræver ikke mere detaljeret end det. 559 00:26:16,910 --> 00:26:20,430 Så lad mig gå videre og lade som om, igen, denne sorte kasse er ikke printf, 560 00:26:20,430 --> 00:26:25,160 men getString, og lad mig, den person skriver dette program, skal du ringe eller bruge 561 00:26:25,160 --> 00:26:29,720 getString ved blot at skrive G-E-T-S-T-R-I-N-G, åben paren tæt 562 00:26:29,720 --> 00:26:32,170 paren, getString. 563 00:26:32,170 --> 00:26:36,920 >> Nu har jeg ingen idé om, hvordan CS50 ansatte implementeret getString, men jeg ved, at 564 00:26:36,920 --> 00:26:41,240 hvis jeg venter længe nok, vil det gøre sit ting under kølerhjelmen, måske ved hjælp 565 00:26:41,240 --> 00:26:44,940 nogle variabler, måske ved hjælp af nogle betingelser, måske ved hjælp af nogle loops, 566 00:26:44,940 --> 00:26:48,170 måske ved hjælp af nogle funktioner, måske ved hjælp - 567 00:26:48,170 --> 00:26:52,290 blot forsøger at stall - måske ved hjælp nogle andre programmering funktioner. 568 00:26:52,290 --> 00:26:55,350 Men hvis jeg vente længe nok - i virkeligheden, i computeren, sker det 569 00:26:55,350 --> 00:26:56,270 super hurtig - 570 00:26:56,270 --> 00:26:59,910 hvis jeg vente længe nok, denne funktion getString kommer til at få en streng 571 00:26:59,910 --> 00:27:04,060 fra brugeren, der formentlig skrive det ud på deres tastatur og 572 00:27:04,060 --> 00:27:08,090 så, når du getString sker få disse tegn fra brugeren 573 00:27:08,090 --> 00:27:14,080 og gemme dem i en streng, der funktion, getString, vil have 574 00:27:14,080 --> 00:27:17,990 klar til mig nogle output, som jeg er vil hente i form af 575 00:27:17,990 --> 00:27:19,470 opgaven operatør. 576 00:27:19,470 --> 00:27:25,390 >> Og hvis jeg går, ja, i output her Obosi har generøst 577 00:27:25,390 --> 00:27:29,900 deltog, uden at vide dette på forhånd, ved at skrive sit navn på dette 578 00:27:29,900 --> 00:27:33,100 variabel, der repræsenterer en streng. 579 00:27:33,100 --> 00:27:35,640 Nu opgaven operatør betyder, selv selv om dette måske føle sig lidt 580 00:27:35,640 --> 00:27:38,790 overflødige, jeg rent faktisk gør brug at gøre min egen kopi af denne. 581 00:27:38,790 --> 00:27:40,700 Fordi på venstre side - hovsa! - 582 00:27:40,700 --> 00:27:45,760 bemærke, at jeg hovedsageligt har snor navngive på venstre side. 583 00:27:45,760 --> 00:27:48,280 Så jeg vil også gøre min egen kopi af denne. 584 00:27:48,280 --> 00:27:50,990 Og det er lidt af en hvid løgn, fordi vi vil se i en uge eller to 585 00:27:50,990 --> 00:27:54,100 tid at strenge ikke er faktisk hvad de synes at være. 586 00:27:54,100 --> 00:27:56,700 >> Men for nu, er her returværdien. 587 00:27:56,700 --> 00:28:00,160 Her er min egen kopi af det efter hjælp opgaven operatør. 588 00:28:00,160 --> 00:28:01,790 Og nu, hvad jeg ønsker at gøre næste? 589 00:28:01,790 --> 00:28:04,080 Vi har nu den anden af to linjer kode. 590 00:28:04,080 --> 00:28:05,640 Så jeg vil nu kalde printf. 591 00:28:05,640 --> 00:28:08,500 Lad os foregive nu, at den sorte Boksen er tilbage igen at blive 592 00:28:08,500 --> 00:28:10,210 printf og ikke getString. 593 00:28:10,210 --> 00:28:12,200 >> Printf denne gang kommer til at tage hvor mange argumenter? 594 00:28:12,200 --> 00:28:14,890 595 00:28:14,890 --> 00:28:16,770 Så se, det er ligesom to. 596 00:28:16,770 --> 00:28:18,860 Der er to kommaer i der, men en af ​​disse komma, er det 597 00:28:18,860 --> 00:28:20,220 indersiden af ​​citater. 598 00:28:20,220 --> 00:28:23,190 Så det første argument er bogstaveligt talt kommer til at være dette. 599 00:28:23,190 --> 00:28:31,850 H-E-L-L-O, komma, procent s, backslash-n. 600 00:28:31,850 --> 00:28:36,560 Og nu er jeg leverer ikke et argument, men to argumenter til printf. 601 00:28:36,560 --> 00:28:39,530 >> Og hvad printf meningen at gøre med disse to indgange, efter jeg passerer dem på 602 00:28:39,530 --> 00:28:42,050 som argumenter? 603 00:28:42,050 --> 00:28:45,360 Det er meningen at tage den anden af dem, som jeg kaldte navn, så 604 00:28:45,360 --> 00:28:48,660 andet stykke papir skrev jeg ud for et øjeblik siden, kaldes navn. 605 00:28:48,660 --> 00:28:53,550 Det kommer til at stikket af værdien inde af denne variabel i den pladsholder, 606 00:28:53,550 --> 00:28:58,310 % S, så, igen, på bare et øjeblik tid, vil vi se en bivirkning af 607 00:28:58,310 --> 00:29:04,180 have kaldt printf, hvor vi nu se ikke "Hej, verden," men "Hej, 608 00:29:04,180 --> 00:29:04,710 Obosi. " 609 00:29:04,710 --> 00:29:08,730 >> Så en stor runde af bifald til begge vores frivillige, hvoraf kun én kendte 610 00:29:08,730 --> 00:29:12,010 dette ville ske. 611 00:29:12,010 --> 00:29:12,990 Ok. 612 00:29:12,990 --> 00:29:16,480 Så måske, enkel som der var, sikkert, hvis du allerede er bekendt 613 00:29:16,480 --> 00:29:20,190 med en sådan, du forhåbentlig aldrig vil glemme, at særlige visuelle, hvordan 614 00:29:20,190 --> 00:29:21,220 funktioner fungerer. 615 00:29:21,220 --> 00:29:23,000 >> Så der er mere end bare getString. 616 00:29:23,000 --> 00:29:26,020 Inde i CS50-biblioteket, er der en hel masse funktioner, som alle 617 00:29:26,020 --> 00:29:29,510 aktiveres bare for at gøre det klart at vi skrev disse funktioner. 618 00:29:29,510 --> 00:29:33,610 Typisk, i C, næsten alle andre funktion, du vil bruge, er små bogstaver. 619 00:29:33,610 --> 00:29:36,190 Men vi bevidst blokbogstaver bare for at gøre det klart, at disse 620 00:29:36,190 --> 00:29:39,880 er støttehjul slags, som vi vil brug for blot et par uger, som 621 00:29:39,880 --> 00:29:42,890 forenkle processen med at få input fra brugeren. 622 00:29:42,890 --> 00:29:46,740 >> Den CS50-biblioteket ikke gør noget at man selv ikke kunne gøre ved 623 00:29:46,740 --> 00:29:50,230 bare bruge C-kode fra en oldschool lærebog. 624 00:29:50,230 --> 00:29:53,310 Men igen, vi bruger dem som træning hjul slags for blot et par 625 00:29:53,310 --> 00:29:57,250 uger, så vi kan slippe af med kompleksitet, at du snart vil forstå 626 00:29:57,250 --> 00:30:00,460 dig selv for at gøre noget som relativt ligetil som at få 627 00:30:00,460 --> 00:30:02,080 input fra en bruger. 628 00:30:02,080 --> 00:30:05,540 >> Så vide, at du har adgang at getchar, GetDouble - 629 00:30:05,540 --> 00:30:06,050 dobbelte. 630 00:30:06,050 --> 00:30:07,050 What's - og så GetFloat. 631 00:30:07,050 --> 00:30:07,600 Hvad er en svømmer? 632 00:30:07,600 --> 00:30:09,382 Lad os 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: Ja. 635 00:30:10,790 --> 00:30:12,120 Det er et tal med en decimal. 636 00:30:12,120 --> 00:30:15,930 Så mens en int er et heltal, der er bare et tal med 0 til 9, 637 00:30:15,930 --> 00:30:18,940 nogle antallet af gentagelser, og en float er noget 638 00:30:18,940 --> 00:30:20,100 med et komma. 639 00:30:20,100 --> 00:30:26,090 Og en dobbelt, i mellemtiden, er også en tal med et komma, men mere 640 00:30:26,090 --> 00:30:28,160 tal efter kommaet punkt, potentielt. 641 00:30:28,160 --> 00:30:30,040 >> Så vender vi tilbage til dette inden længe. 642 00:30:30,040 --> 00:30:34,560 Men typisk, hver af disse typer data, hver af disse typer af variable 643 00:30:34,560 --> 00:30:39,380 at et bibliotek som vores kan vende tilbage til dig, bruge forskellige antal bits til 644 00:30:39,380 --> 00:30:40,290 lagre information. 645 00:30:40,290 --> 00:30:43,910 Typisk, en Char, hvilket betyder bare et tegn, bruger 8 bit. 646 00:30:43,910 --> 00:30:47,490 Og det er faktisk i overensstemmelse med vores byte af frivillige i sidste uge, der 647 00:30:47,490 --> 00:30:50,410 kom op og repræsenterede en ASCII-tegn ad gangen. 648 00:30:50,410 --> 00:30:51,850 Så en Char er 8 bit. 649 00:30:51,850 --> 00:30:54,430 >> En svømmerafbryder sker for at være 32 bit, typisk. 650 00:30:54,430 --> 00:30:59,230 Og en dobbelt, som du kan gætte, er faktisk 64 bit, hvilket er bare mere, 651 00:30:59,230 --> 00:31:01,360 hvilket betyder, at du kan have større numre eller mere præcision. 652 00:31:01,360 --> 00:31:03,000 Men igen, mere om det en anden gang. 653 00:31:03,000 --> 00:31:06,550 GetLongLong, i mellemtiden, men dumt hedder, er egentlig bare en 654 00:31:06,550 --> 00:31:10,770 heltal, der er dobbelt så stor, dobbelt så lang, potentielt som et fast 655 00:31:10,770 --> 00:31:12,940 heltal, 64 bit i stedet for 32. 656 00:31:12,940 --> 00:31:14,560 Og getString vi har brugt. 657 00:31:14,560 --> 00:31:18,870 >> Men det viser sig, i CS50 biblioteket som er gennemført, som vi skal se, i 658 00:31:18,870 --> 00:31:23,560 i form af de to filer, hvoraf den ene kaldes 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 Booleans ikke findes i C. Du kan simulere dem ved blot at bruge 0'er og 1-taller 661 00:31:29,700 --> 00:31:30,850 hele dine programmer. 662 00:31:30,850 --> 00:31:35,500 Men vi i CS50 biblioteket har skabt symbolerne "sand" og "falsk" 663 00:31:35,500 --> 00:31:38,580 at repræsentere 1 og 0, så du ikke nødt til at hard code noget 664 00:31:38,580 --> 00:31:39,810 bogstaveligt talt som 1 og 0. 665 00:31:39,810 --> 00:31:40,980 Men vi vil se dem igen. 666 00:31:40,980 --> 00:31:42,330 >> Streng, også, ikke eksisterer. 667 00:31:42,330 --> 00:31:44,520 Og det er derfor, jeg nævnte, det er lidt af en hvid løgn for nu. 668 00:31:44,520 --> 00:31:46,660 Men vi vil skrælle, at lag inden længe. 669 00:31:46,660 --> 00:31:49,540 Men for nu, er en streng a sekvens af tegn. 670 00:31:49,540 --> 00:31:51,790 >> I mellemtiden, i C, ja du har forskellige datatyper. 671 00:31:51,790 --> 00:31:53,200 Bemærk disse er små bogstaver. 672 00:31:53,200 --> 00:31:56,960 Så de funktioner, du har set for et øjeblik siden er funktioner, som er skrevet af CS50, at 673 00:31:56,960 --> 00:32:02,310 vil vende tilbage til dig en værdi, der falder i en af ​​disse kategorier. 674 00:32:02,310 --> 00:32:06,730 >> Et par cheat sheets bare at plante frøet her. printf ikke bare 675 00:32:06,730 --> 00:32:08,600 tage% s som pladsholdere. 676 00:32:08,600 --> 00:32:13,490 Det tager% d for decimal heltal, eller% Jeg vil arbejde så godt. 677 00:32:13,490 --> 00:32:19,450 % F kommeværdier. % C er for en char, hvis du bare ønsker at sætte en 678 00:32:19,450 --> 00:32:23,510 tegn i en forudformateret snor ligesom vi har gjort, kan du bruge% c.. 679 00:32:23,510 --> 00:32:28,490 >> Og så, noget irriterende,% LLD er for en lang, lang decimal heltal, 680 00:32:28,490 --> 00:32:31,050 som netop betyder, at hvis du har brug for en rigtig stort antal, og du bruger noget 681 00:32:31,050 --> 00:32:35,450 kaldes en lang lang, som vi vil komme tilbage til i et Pset, kan du bruge% LLD til 682 00:32:35,450 --> 00:32:40,700 fortælle printf, plug i en virkelig stor heltal her i form af sit andet eller 683 00:32:40,700 --> 00:32:41,830 nogle andre argument. 684 00:32:41,830 --> 00:32:45,700 >> Og endelig, jeg lovede, at der er et par andre flugt 685 00:32:45,700 --> 00:32:47,670 sekvenser, printf understøtter. 686 00:32:47,670 --> 00:32:49,160 Vi har set backslash-n. 687 00:32:49,160 --> 00:32:50,510 Backslash-r, kan du se. 688 00:32:50,510 --> 00:32:51,780 Det er en slags en old-school ting. 689 00:32:51,780 --> 00:32:55,920 Hvis du nogensinde har brugt en rigtig skrivemaskine år siden, og du trak på kranken 690 00:32:55,920 --> 00:32:59,810 som ikke blot roteret hjulet til flytte lineup, men også flyttet 691 00:32:59,810 --> 00:33:03,730 hele hele vejen tilbage over til venstre, ja, backslash-r bare 692 00:33:03,730 --> 00:33:06,480 hovedsageligt flytter markøren tilbage til starten af ​​linjen 693 00:33:06,480 --> 00:33:07,830 uden at bevæge det ned. 694 00:33:07,830 --> 00:33:09,780 Men igen, mere om det, måske i fremtiden. 695 00:33:09,780 --> 00:33:13,670 >> Backslash-citat, backslash-double citat, backslash-backslash er 696 00:33:13,670 --> 00:33:16,600 løsning på den lillebitte gåde Jeg hentydede til tidligere. 697 00:33:16,600 --> 00:33:18,920 Og backslash-0 er faktisk ganske interessant. 698 00:33:18,920 --> 00:33:21,470 Men vi vil vende tilbage til at inden længe. 699 00:33:21,470 --> 00:33:25,640 >> Så lad mig komme ind nu, det CS50 apparat, og lad os rent faktisk gør en 700 00:33:25,640 --> 00:33:28,930 hurtig varme op med et af eksemplerne vi allerede, og derefter gå videre til 701 00:33:28,930 --> 00:33:31,160 noget lidt mere kompliceret. 702 00:33:31,160 --> 00:33:34,980 Så hvis jeg åbner mit program kaldet gedit - 703 00:33:34,980 --> 00:33:36,840 dette er mit grafiske editor. 704 00:33:36,840 --> 00:33:38,460 Og jeg kan gøre det - 705 00:33:38,460 --> 00:33:39,820 lad mig lukke vinduet der - 706 00:33:39,820 --> 00:33:42,720 ved hjælp af dette ikon hernede, gedit i nederste venstre 707 00:33:42,720 --> 00:33:44,170 hjørne ved siden af ​​menuen. 708 00:33:44,170 --> 00:33:48,670 >> Jeg har tænkt mig at gå videre og videre, og gem dette eksempel ind, siger, John 709 00:33:48,670 --> 00:33:49,660 Harvards mappe. 710 00:33:49,660 --> 00:33:52,690 John Harvard mappe er bare hans hjem bibliotek, hvor alle hans filer lever 711 00:33:52,690 --> 00:33:53,340 som standard. 712 00:33:53,340 --> 00:33:58,410 Og jeg har tænkt mig at gemme denne som en fil kaldet goddag-0.c. 713 00:33:58,410 --> 00:34:01,260 Og jeg har valgt dette navn bare så det linjer op med prøven kode på 714 00:34:01,260 --> 00:34:04,210 kursets hjemmeside og i YouTube-videoer online. 715 00:34:04,210 --> 00:34:06,320 >> Så nu har jeg tænkt mig at begynde at skrive min første program. 716 00:34:06,320 --> 00:34:08,469 Lad mig zoome ind for læsbarhed. 717 00:34:08,469 --> 00:34:12,760 Og jeg har tænkt mig at gå videre og sige int main tomrum, der bare sådan 718 00:34:12,760 --> 00:34:14,900 gul brik der starter et program. 719 00:34:14,900 --> 00:34:18,290 Jeg har fået den vane over år af åbne min klammeparentes, så 720 00:34:18,290 --> 00:34:22,000 også lukke det og derefter gå tilbage til hvor jeg ønsker at sætte min kode, bare 721 00:34:22,000 --> 00:34:24,630 fordi det hjælper mig med at holde alting afbalanceret, især som min 722 00:34:24,630 --> 00:34:25,880 program får lang. 723 00:34:25,880 --> 00:34:29,239 >> Og nu, her, jeg kommer til at gå videre og sige, printf, citerer citat slut, 724 00:34:29,239 --> 00:34:34,330 hej verden, backslash-n tæt citerer, tæt parentes, semikolon. 725 00:34:34,330 --> 00:34:38,100 Så jeg bare gentage alt, hvad vi har taget for givet hidtil. 726 00:34:38,100 --> 00:34:39,270 Nu vil jeg zoome ud. 727 00:34:39,270 --> 00:34:43,030 >> Og denne terminal vindue ned her, hvad må jeg gøre i denne sorte 728 00:34:43,030 --> 00:34:44,389 og hvid vindue? 729 00:34:44,389 --> 00:34:46,977 Hvad kan jeg bruge det til? 730 00:34:46,977 --> 00:34:49,770 Så dette er hvor jeg køre kommandoer og hvor jeg kan kompilere ting. 731 00:34:49,770 --> 00:34:50,620 Og jeg har tænkt mig at holde det simpelt. 732 00:34:50,620 --> 00:34:52,780 Jeg har tænkt mig at bruge et program kaldet Make, hvilket ikke er 733 00:34:52,780 --> 00:34:54,020 teknisk set en compiler. 734 00:34:54,020 --> 00:34:56,360 Den compiler kaldet Clang, men vi vil komme tilbage til om et 735 00:34:56,360 --> 00:34:57,190 uge eller to tid. 736 00:34:57,190 --> 00:35:03,410 >> For nu, jeg lige til at skrive at gøre hej-0 Men de af jer, der var 737 00:35:03,410 --> 00:35:07,050 sammenligner i jeres sind, hvad jeg lige skrevet til, hvad jeg skulle have skrevet, kan 738 00:35:07,050 --> 00:35:10,180 ved allerede, at jeg gjorde noget galt her. 739 00:35:10,180 --> 00:35:12,160 Nu er der helt klart nogle fejl. 740 00:35:12,160 --> 00:35:16,742 Før jeg selv se på, hvad de er, kan enhver tanker om, hvad jeg gjorde forkert? 741 00:35:16,742 --> 00:35:18,590 >> STUDERENDE: [interposing STEMMER]. 742 00:35:18,590 --> 00:35:18,840 >> DAVID MALAN: Ja. 743 00:35:18,840 --> 00:35:20,640 Jeg mangler bibliotekets header fil. 744 00:35:20,640 --> 00:35:24,240 Enhver af disse. H filer kaldes header filer, og de kollektivt 745 00:35:24,240 --> 00:35:25,680 tilhører ting kaldet biblioteker. 746 00:35:25,680 --> 00:35:28,030 Biblioteker er bare bidder af kode at andre mennesker skrev. 747 00:35:28,030 --> 00:35:32,140 Så standarden [? Jeg?] Biblioteket er et samling af filer, der indeholder koden 748 00:35:32,140 --> 00:35:33,330 at andre mennesker 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 fejl? 751 00:35:36,520 --> 00:35:40,840 Nå, lad mig rulle tilbage op i mit terminalvindue her. 752 00:35:40,840 --> 00:35:44,310 Og desværre, i C, som i en masse programmeringssprog, især 753 00:35:44,310 --> 00:35:47,830 hvis det hele er nyt for dig, at fejlen budskaber er præcise, 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 fejlen her i rød, er "Implicit erklære biblioteksfunktion 756 00:35:51,720 --> 00:35:57,660 printf med type ", og så er det ruller til næste linje, "int const char *, 757 00:35:57,660 --> 00:36:00,220 ... "Det bliver bare rigtig overvældende hurtigt. 758 00:36:00,220 --> 00:36:04,420 >> Men hvad du skal begynde at gøre, hvis igen, ny til alt dette, er bare at 759 00:36:04,420 --> 00:36:06,010 begynder at lede efter søgeord. 760 00:36:06,010 --> 00:36:08,770 Det er klart, kunne jeg ikke forstå halvdelen af de ord, jeg ser bare endnu. 761 00:36:08,770 --> 00:36:10,140 Du vil dog i en uges 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 bør begynde inden længe at jogge din hukommelse, okay, printf. 764 00:36:14,310 --> 00:36:15,210 Noget er galt med printf. 765 00:36:15,210 --> 00:36:16,580 Har jeg stave det forkert? 766 00:36:16,580 --> 00:36:18,130 Nej, det ligner ikke - oh. 767 00:36:18,130 --> 00:36:21,350 Jeg kan ikke bruge det, medmindre jeg underviser compileren, at det eksisterer. 768 00:36:21,350 --> 00:36:25,220 Og så igen, gå med dine instinkter, selvom du faktisk ikke forstår 769 00:36:25,220 --> 00:36:26,510 den faktiske fejlmeddelelser. 770 00:36:26,510 --> 00:36:30,240 >> Og ja, løsningen her er at bare omfatte det øverst i filen 771 00:36:30,240 --> 00:36:34,340 sådan, resaving min fil med Ctrl-S eller menuen Filer. 772 00:36:34,340 --> 00:36:36,730 Og hvis jeg nu går tilbage hernede, Jeg har tænkt mig at fjerne denne. 773 00:36:36,730 --> 00:36:39,150 Kontrol-L er bare en dejlig måde for at rydde skærmen. 774 00:36:39,150 --> 00:36:44,870 Og så jeg har tænkt mig at skrive "make goddag 0 "Enter, og nu ser jeg stadig et 775 00:36:44,870 --> 00:36:47,710 kryptisk sekvens af symboler, men vi vil vende tilbage til. 776 00:36:47,710 --> 00:36:49,230 Det er, hvad der gør gør for dig. 777 00:36:49,230 --> 00:36:52,590 Det automatisere processen med at tage en temmelig irriterende kommando involverer 778 00:36:52,590 --> 00:36:54,050 Klang, den egentlige compiler. 779 00:36:54,050 --> 00:36:57,460 Men det faktum, at jeg fik ingen fejl betyder at denne ting skal fungere. 780 00:36:57,460 --> 00:37:00,630 >> Så jeg vil nu gøre - lad mig zoome ind igen - 781 00:37:00,630 --> 00:37:07,070 ./hello-0 Enter, og faktisk ser jeg "Hej, verden." Så lad os nu styrke 782 00:37:07,070 --> 00:37:12,105 dette nogensinde så lidt bare at kopiere de skridt, vi bestemt til. 783 00:37:12,105 --> 00:37:15,370 Jeg har tænkt mig at omdøbe dette med Gem som for hello1.c. 784 00:37:15,370 --> 00:37:20,300 Og nu vil jeg til at erklære en variabel kaldte navn, så string navn, 785 00:37:20,300 --> 00:37:23,420 og jeg har tænkt mig at sætte i det Værdien af ​​quote-citat slut 786 00:37:23,420 --> 00:37:27,030 D-A-V-I-D tæt citat semikolon. 787 00:37:27,030 --> 00:37:31,150 Og nu vil jeg til at erstatte "verden" med hvilken pladsholder for en streng? 788 00:37:31,150 --> 00:37:32,200 % S. 789 00:37:32,200 --> 00:37:35,040 >> Og nu, hvor mange argumenter skal printf tage denne gang? 790 00:37:35,040 --> 00:37:35,700 Så to. 791 00:37:35,700 --> 00:37:37,090 Så jeg går uden for de citater. 792 00:37:37,090 --> 00:37:39,330 Jeg skriver "navn" efter et komma. 793 00:37:39,330 --> 00:37:41,550 Men jeg har gjort noget andet galt denne gang. 794 00:37:41,550 --> 00:37:43,940 Men lad os antage, at jeg ikke indse, at endnu. 795 00:37:43,940 --> 00:37:44,910 Lad mig gå op her. 796 00:37:44,910 --> 00:37:48,850 >> Og varsel, også, jeg får lidt kede af at skrive "make goddag 0" alt det 797 00:37:48,850 --> 00:37:50,180 tid, "gøre", og alt dette. 798 00:37:50,180 --> 00:37:53,270 Så det viser sig, i Linus kan du ofte ramt pil op på din 799 00:37:53,270 --> 00:37:56,850 tastatur, og du kan faktisk rulle gennem alle de kommandoer, som jeg har 800 00:37:56,850 --> 00:37:58,830 henrettet tidligere bare nu. 801 00:37:58,830 --> 00:38:02,040 Så hvis jeg gør det, op, op, der er at gøre hej 0. 802 00:38:02,040 --> 00:38:02,610 Jeg ønsker ikke, at. 803 00:38:02,610 --> 00:38:05,450 Jeg ønsker blot at ændre det til hej 1 denne gang, Enter. 804 00:38:05,450 --> 00:38:07,620 Til sidst, som vil spare dig tid. 805 00:38:07,620 --> 00:38:08,150 >> Ok. 806 00:38:08,150 --> 00:38:09,520 Desværre er der er en fejl. 807 00:38:09,520 --> 00:38:10,980 Så lad mig rulle op. 808 00:38:10,980 --> 00:38:13,120 Det ser ud som jeg virkelig slagtet dette program. 809 00:38:13,120 --> 00:38:16,530 Jeg mener, min Gud, det er to linjer kode, og dets 10 linjer af fejl. 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 Anvendelse af sort identifikator streng. 812 00:38:21,640 --> 00:38:23,270 Har jeg mener standard I N? 813 00:38:23,270 --> 00:38:23,930 Nej det gjorde jeg ikke. 814 00:38:23,930 --> 00:38:24,940 Jeg mente streng. 815 00:38:24,940 --> 00:38:29,390 >> Men hvor er den streng variabel typen erklærede, dd vi sige? 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 er ikke tilstrækkeligt, i disse først par uger, blot at bruge 818 00:38:33,740 --> 00:38:34,860 hvad C giver os. 819 00:38:34,860 --> 00:38:38,120 Jeg er også kommer til at gå herop, og jeg kunne sætte det over eller under, men jeg vil 820 00:38:38,120 --> 00:38:40,340 bare holde det alfabetisk at holde tingene ordnet. 821 00:38:40,340 --> 00:38:43,470 Jeg har tænkt mig at medtage cs50.h, der er præinstalleret på 822 00:38:43,470 --> 00:38:44,900 dig på CS50 apparatet. 823 00:38:44,900 --> 00:38:47,640 Og det er open source, så selv folk på internettet kan bruge det på deres 824 00:38:47,640 --> 00:38:48,450 egne computere. 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å lad mig gå tilbage og kompilere dette med make hej 1.. 827 00:38:55,320 --> 00:38:55,710 Fandens. 828 00:38:55,710 --> 00:38:57,240 Stadig en anden fejl. 829 00:38:57,240 --> 00:38:59,370 Lad mig rulle op til det første, selv om. 830 00:38:59,370 --> 00:39:00,630 Denne ene er lidt kompliceret. 831 00:39:00,630 --> 00:39:03,830 Multi-tegn tegn konstant. 832 00:39:03,830 --> 00:39:04,890 Det er ikke at hjælpe mig. 833 00:39:04,890 --> 00:39:08,220 Men varsel, Clang er mindst en lille bit anstændigt, hvorved med lidt 834 00:39:08,220 --> 00:39:11,890 grøn indskudsmærke symbol, det siger her er hvor jeg skruet op. 835 00:39:11,890 --> 00:39:16,160 Hvorfor er det peger, med den lille grøn pil, til det indre citerer næste 836 00:39:16,160 --> 00:39:18,290 til mit navn? 837 00:39:18,290 --> 00:39:20,880 >> Så dette er en af ​​de ting, du bare vænne sig til, især hvis du har været 838 00:39:20,880 --> 00:39:23,980 programmering i Python eller JavaScript, eller andre sprog, hvor denne detalje 839 00:39:23,980 --> 00:39:24,560 betyder ikke noget. 840 00:39:24,560 --> 00:39:25,740 I C, betyder det noget. 841 00:39:25,740 --> 00:39:29,520 Hvis du erklærer en snor, som er en sekvens af 0 eller flere tegn, 842 00:39:29,520 --> 00:39:32,280 du rent faktisk skal bruge dobbelte anførselstegn. 843 00:39:32,280 --> 00:39:36,670 Så jeg faktisk nødt til at ændre dette tilbage at åbne tilbud, lukker citat med 844 00:39:36,670 --> 00:39:37,800 anførselstegn. 845 00:39:37,800 --> 00:39:41,610 Enkelt citater har deres plads, men kun, når du bruger de enkelte 846 00:39:41,610 --> 00:39:44,100 chars, men mere om det en anden gang. 847 00:39:44,100 --> 00:39:46,550 For nu, de dobbelte anførselstegn er nødvendige. 848 00:39:46,550 --> 00:39:50,460 >> Så nu, lad mig gå tilbage til min terminal Vinduet gør hej 1.. 849 00:39:50,460 --> 00:39:51,450 Og hvem er overbevist? 850 00:39:51,450 --> 00:39:53,800 Er dette program nu går at kompilere 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 af os mener 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å der er ingen fejl denne gang, selv selvom dette program er kommet lidt 858 00:40:05,130 --> 00:40:05,840 mere kompleks. 859 00:40:05,840 --> 00:40:10,110 Hvis jeg nu gøre dot slash hello 1, Enter, det kommer til at sige "Hej, David." 860 00:40:10,110 --> 00:40:11,750 >> Men lad os gøre det tredje iteration af dette, hvor 861 00:40:11,750 --> 00:40:13,380 Programmet er virkelig dynamisk. 862 00:40:13,380 --> 00:40:16,770 Lad mig gå videre og ændre filen navn, bare for sammenhængen med 863 00:40:16,770 --> 00:40:20,410 filer, du har til rådighed til dig bagefter online. 864 00:40:20,410 --> 00:40:21,620 Enter. 865 00:40:21,620 --> 00:40:25,510 Og nu vil jeg gå ind og ikke gemme "David" hard kodet her. 866 00:40:25,510 --> 00:40:28,826 Hvad kan jeg gøre for meget enkelt forbedre dette program? 867 00:40:28,826 --> 00:40:30,520 >> Jeg kunne kalde getString. 868 00:40:30,520 --> 00:40:33,240 Det kan være lidt ikke-indlysende, hvad der er ved at ske, så jeg har tænkt mig 869 00:40:33,240 --> 00:40:38,470 til rent faktisk at tilføje en anden linje, printf, og sige navn, colon tæt citat, bare 870 00:40:38,470 --> 00:40:40,790 for at give brugeren en prompt på skærmen. 871 00:40:40,790 --> 00:40:42,980 Og nu vil jeg gå her, og jeg er kommer til at bruge min tastaturgenvej. 872 00:40:42,980 --> 00:40:47,680 Jeg har tænkt mig at gå op, op, og ændre hej 1 til hello 2 Enter. 873 00:40:47,680 --> 00:40:49,260 Og heldigvis, jeg gør fremskridt. 874 00:40:49,260 --> 00:40:52,720 >> Og nu vil jeg til at gå op til prik slash goddag og 875 00:40:52,720 --> 00:40:54,690 ændre det til 2, Enter. 876 00:40:54,690 --> 00:40:55,650 Og nu mit program - 877 00:40:55,650 --> 00:40:57,700 Jeg zoome ind - bliver lidt kønnere. 878 00:40:57,700 --> 00:41:02,190 Name bliver, lad os sige Rob denne gang, Enter, hallo, Rob. 879 00:41:02,190 --> 00:41:03,260 Vi kan gøre det igen. 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, lad os prøve at være svært, 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 en lille grim. 886 00:41:16,090 --> 00:41:18,640 Så måske vi kunne løse dette i fremtiden,. ikke nu 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 det særlig udfordring? 889 00:41:21,990 --> 00:41:23,710 Det bare ser dumt. 890 00:41:23,710 --> 00:41:27,320 Hvordan undgår man tingene ser dum? 891 00:41:27,320 --> 00:41:29,890 Så vi kunne gøre, OK, jeg hørte et par af ting,. en tilstand og en løkke 892 00:41:29,890 --> 00:41:33,340 Vi kunne bruge, én, en betingelse, at kontrollere hvad er længden af ​​strengen 893 00:41:33,340 --> 00:41:34,190 brugeren gav os? 894 00:41:34,190 --> 00:41:37,100 Og hvis det er 0, det er bare citere citat slut, de bare trykke Enter, og derefter 895 00:41:37,100 --> 00:41:38,930 måske jeg skulle råbe på dem og beder dem igen. 896 00:41:38,930 --> 00:41:39,970 Men hvordan en tilskynde dem igen? 897 00:41:39,970 --> 00:41:44,230 Tja, jeg har også hørt loop, og jeg kunne gøre det igen og igen og igen 898 00:41:44,230 --> 00:41:47,010 spørge brugeren for de samme ting. 899 00:41:47,010 --> 00:41:48,880 >> Nå, lad os gøre en anden eksempel hjælp af en anden 900 00:41:48,880 --> 00:41:50,620 funktion i CS50 biblioteket. 901 00:41:50,620 --> 00:41:52,330 Lad mig slutte denne fil. 902 00:41:52,330 --> 00:41:53,510 Lad mig med at oprette en ny. 903 00:41:53,510 --> 00:41:58,510 Og jeg vil kalde det adder.c, bare fordi det er nemt at gøre simple aritmetik, 904 00:41:58,510 --> 00:42:00,890 selvom dette vil være helt påklistret med, hvad du kunne gøre 905 00:42:00,890 --> 00:42:02,250 med alle moderne computer. 906 00:42:02,250 --> 00:42:03,750 >> Men lad mig gå videre nu, og - 907 00:42:03,750 --> 00:42:10,680 Jeg lærte min lektie sidste gang - bl.a. cs50.h omfatter stdio.h, int 908 00:42:10,680 --> 00:42:14,170 main tomrum, der for nu, jeg vil bare tage på blind tro, men vi vil antage 909 00:42:14,170 --> 00:42:16,380 der vil forstå, hvad det betyder inden længe. 910 00:42:16,380 --> 00:42:21,030 Og jeg har tænkt mig at sige noget som "giv mig en int." 911 00:42:21,030 --> 00:42:22,140 >> Og nu, hvordan får jeg en int? 912 00:42:22,140 --> 00:42:26,820 Jeg vil til sidst erklære en variabel kaldet x af typen int og 913 00:42:26,820 --> 00:42:29,240 opbevares i det et heltal fra brugeren. 914 00:42:29,240 --> 00:42:29,970 Så det var en mundfuld. 915 00:42:29,970 --> 00:42:35,680 Men hvis nogen ønsker at foreslå, hvordan jeg erklærer et heltal kaldet 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å simpelt. 918 00:42:37,430 --> 00:42:38,240 Giv mig en int. 919 00:42:38,240 --> 00:42:39,070 Kald det x. 920 00:42:39,070 --> 00:42:40,580 Nu bruger jeg opgaven operatør. 921 00:42:40,580 --> 00:42:43,400 Og hvordan opbevarer jeg fra efterlod en værdi af brugeren? 922 00:42:43,400 --> 00:42:47,310 Jeg ønsker ikke at kalde getString, naturligvis, men snarere getint. 923 00:42:47,310 --> 00:42:49,060 Nogen argumenter? 924 00:42:49,060 --> 00:42:49,350 Nej. 925 00:42:49,350 --> 00:42:51,870 Så det er åbent paren tæt paren straks, og derefter en 926 00:42:51,870 --> 00:42:53,440 semikolon slutter linjen. 927 00:42:53,440 --> 00:42:54,930 >> Lad mig nu gøre det igen. 928 00:42:54,930 --> 00:42:57,070 Giv mig en int. 929 00:42:57,070 --> 00:43:01,850 Denne gang vil jeg gøre int, lad os kalder det y, lig getint. 930 00:43:01,850 --> 00:43:05,060 Og lad mig nu gøre noget super-simple ligesom nogle matematik. 931 00:43:05,060 --> 00:43:14,340 Så printf er summen af% d er pladsholder for en int. 932 00:43:14,340 --> 00:43:20,030 Og% d, periode, backslash-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 matematik. 935 00:43:21,670 --> 00:43:25,500 Men hvis jeg ønsker at sige summen af ​​dette plus denne værdi er lig med dette 936 00:43:25,500 --> 00:43:29,320 anden værdi, hvor mange argumenter i alt skal jeg give printf, 937 00:43:29,320 --> 00:43:30,520 i sidste ende? 938 00:43:30,520 --> 00:43:31,420 Så fire, right? 939 00:43:31,420 --> 00:43:33,790 Denne streng og derefter de tre værdier. 940 00:43:33,790 --> 00:43:37,560 Så x er den første jeg ønsker at være tilsluttet først til% d. 941 00:43:37,560 --> 00:43:39,270 y bliver den næste. 942 00:43:39,270 --> 00:43:42,030 >> Og nu vil jeg slags ønsker at sige z, men z findes ikke. 943 00:43:42,030 --> 00:43:43,190 Men det er ikke en big deal. 944 00:43:43,190 --> 00:43:45,440 For hvad ville du gøre instinktivt, især hvis du havde en 945 00:43:45,440 --> 00:43:47,820 grafregneren, hvad du skriver? 946 00:43:47,820 --> 00:43:48,760 Hvordan omkring x plus y? 947 00:43:48,760 --> 00:43:50,200 Så det er ikke en egentlig variabel. 948 00:43:50,200 --> 00:43:51,820 Det er blot summen af ​​to andre variabler. 949 00:43:51,820 --> 00:43:53,170 Og det er helt legitim. 950 00:43:53,170 --> 00:43:56,630 C sikkert forstår simpelt aritmetik som dette. 951 00:43:56,630 --> 00:43:58,450 >> Semikolon gemme. 952 00:43:58,450 --> 00:44:02,080 Lad mig nu gå herned og skriv lave adder, Enter. 953 00:44:02,080 --> 00:44:04,100 Ingen fejl, så det er fremskridt også. 954 00:44:04,100 --> 00:44:04,890 Indtast adder. 955 00:44:04,890 --> 00:44:07,100 Og endnu en tastaturgenvej, hvis du begynder at kede sig 956 00:44:07,100 --> 00:44:08,760 med alle kommandoerne - 957 00:44:08,760 --> 00:44:12,650 hvis du begynder at skrive en kommando, ligesom dot slash annonce, og det er, hvor din 958 00:44:12,650 --> 00:44:16,020 kedsomhed spark i, kan du normalt hit Tab for at have computeren afslutte 959 00:44:16,020 --> 00:44:20,510 resten af ​​sætningen for dig, hvis det ikke er tvetydig hvad skal komme efter annonce. 960 00:44:20,510 --> 00:44:23,950 >> Så lad mig gå videre nu og du klikker på Enter. 961 00:44:23,950 --> 00:44:27,490 Giv mig en int, 1, 2, og heldigvis, det er 3.. 962 00:44:27,490 --> 00:44:29,900 Men som altid, test programmer bør ikke reduceres til 963 00:44:29,900 --> 00:44:30,820 bare prøve det én gang. 964 00:44:30,820 --> 00:44:35,560 Lad mig prøve et hjørne tilfælde som negative 1, giv mig 1, og at en 965 00:44:35,560 --> 00:44:36,210 tjekker så godt. 966 00:44:36,210 --> 00:44:38,870 Og jeg sandsynligvis ønsker at gøre nogle flere streng afprøvning, men jeg er temmelig 967 00:44:38,870 --> 00:44:40,630 komfortabel med hvor det er på. 968 00:44:40,630 --> 00:44:43,110 >> Nå, lad os nu prøve et andet program at denne gang anvender et 969 00:44:43,110 --> 00:44:44,620 bit af andet syntaks. 970 00:44:44,620 --> 00:44:46,100 Lad mig med at oprette en ny fil. 971 00:44:46,100 --> 00:44:51,050 Jeg ringer denne conditions0.c til linje op med nogle eksempler på kode online. 972 00:44:51,050 --> 00:44:55,550 Og lad mig gå videre og gøre omfatte cs50.h omfatter 973 00:44:55,550 --> 00:45:00,320 stdio.h i main tomrum - 974 00:45:00,320 --> 00:45:01,030 OK. 975 00:45:01,030 --> 00:45:01,850 Der går vi. 976 00:45:01,850 --> 00:45:03,010 Vi har vores standard standardtekst. 977 00:45:03,010 --> 00:45:08,170 >> Og denne gang jeg har tænkt mig at sige printf, "Jeg vil gerne en int, please," bare for at 978 00:45:08,170 --> 00:45:10,030 gør prompt lidt mere venlige. 979 00:45:10,030 --> 00:45:11,620 Og nu vil jeg få en int fra brugeren. 980 00:45:11,620 --> 00:45:15,010 Jeg har tænkt mig at kalde det n denne gang, bare fordi n lyder som nummer. 981 00:45:15,010 --> 00:45:18,140 getint, og nu, hvad gør Jeg ønsker at gøre med det? 982 00:45:18,140 --> 00:45:21,640 Tja, hvis n er - og jeg vil zoome ind - 983 00:45:21,640 --> 00:45:25,930 Hvis n er større end 0, vil jeg at gøre følgende - 984 00:45:25,930 --> 00:45:36,060 printf "Du valgte et positivt tal." Else, jeg vil skrive printf "You 985 00:45:36,060 --> 00:45:37,870 plukket en negativ 986 00:45:37,870 --> 00:45:39,650 nummer. "Okay. 987 00:45:39,650 --> 00:45:44,410 Så dette program, selv om jeg gjorde det hurtigt, ser ret syntaktisk. 988 00:45:44,410 --> 00:45:45,010 Lad mig prøve dette. 989 00:45:45,010 --> 00:45:46,890 Gør tilstand 0. 990 00:45:46,890 --> 00:45:47,710 Synes at køre. 991 00:45:47,710 --> 00:45:49,230 Tilstand 0, ind. 992 00:45:49,230 --> 00:45:51,910 Lad os give det en int på 50. 993 00:45:51,910 --> 00:45:53,160 Jeg plukket et positivt tal. 994 00:45:53,160 --> 00:45:54,230 Lad os prøve det igen. 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 tal. 998 00:45:57,290 --> 00:46:00,350 >> Men nu, lad mig vælge, hvad vi vil holde kalde et hjørne tilfælde er der mere 999 00:46:00,350 --> 00:46:04,702 et interessant tilfælde, at du tror kan give dig nogle problemer, 0. 1000 00:46:04,702 --> 00:46:07,940 Nu er jeg temmelig sikker på det er en af de hjørne tilfælde, hvor nul er 1001 00:46:07,940 --> 00:46:12,330 hverken positiv eller negativ, så min program, men i syntaktisk 1002 00:46:12,330 --> 00:46:15,440 korrigere - det kompilerer, det kører - er ikke logisk korrekte. 1003 00:46:15,440 --> 00:46:21,050 Så hvad er den simple fix her, hvis jeg vil have at opdage, hvis jeg ønsker at håndtere n 1004 00:46:21,050 --> 00:46:23,840 lig 0 separat? 1005 00:46:23,840 --> 00:46:32,980 >> Så hvis n er lig med 0, så vil jeg sige noget som printf "Du valgte 0". 1006 00:46:32,980 --> 00:46:33,990 Lad mig prøve det nu. 1007 00:46:33,990 --> 00:46:38,320 Lad mig gå tilbage her, ryd mit vindue, og kompilere. 1008 00:46:38,320 --> 00:46:38,690 Hm. 1009 00:46:38,690 --> 00:46:39,770 Én fejl genererer. 1010 00:46:39,770 --> 00:46:41,630 Men jeg ønsker du at kontrollere hvis n er lig med 0. 1011 00:46:41,630 --> 00:46:44,230 1012 00:46:44,230 --> 00:46:47,720 >> Så igen en anden dum ting at vænne sig til, lighedstegnet er 1013 00:46:47,720 --> 00:46:48,910 opgaven operatør. 1014 00:46:48,910 --> 00:46:52,240 Så dette er faktisk fejl i det, teknisk, selvom compiler 1015 00:46:52,240 --> 00:46:56,450 beskyttede mig fra mig selv, vi havde teknisk kan kopiere 0 til n, som 1016 00:46:56,450 --> 00:46:57,590 er ikke, hvad jeg vil. 1017 00:46:57,590 --> 00:47:00,950 Jeg ønsker at teste for ligestilling med lig ligemænd. 1018 00:47:00,950 --> 00:47:03,390 Og så der nu kunne være min bedre løsning. 1019 00:47:03,390 --> 00:47:07,810 >> Lad mig faktisk gem dette som, siger, forhold1, for at være nyt og forbedret. 1020 00:47:07,810 --> 00:47:10,480 Så nu, hvis jeg kompilere det, det ville gøre forhold - 1021 00:47:10,480 --> 00:47:16,960 hovsa - gør forhold1 dot skråstreg forhold1, Enter, "Jeg vil gerne en int, 1022 00:47:16,960 --> 00:47:18,760 please. "Jeg har tænkt mig at gå fremad og skriv 50 år. 1023 00:47:18,760 --> 00:47:19,660 Det er stadig godt. 1024 00:47:19,660 --> 00:47:21,200 Negativ 50, stadig godt. 1025 00:47:21,200 --> 00:47:24,920 0, og det, ja, opdages at jeg plukket 0. 1026 00:47:24,920 --> 00:47:28,200 >> Så hvad mere kan jeg nu gøre med dette? 1027 00:47:28,200 --> 00:47:32,280 Nå, kan vi helt sikkert gøre mere komplekse ting. 1028 00:47:32,280 --> 00:47:37,240 Men hvad jeg gerne vil foreslå, er at vi ender på denne note her. 1029 00:47:37,240 --> 00:47:41,680 Hvis vi trækker op på denne, vil du se, måske, en favorit tegneserie af jeres 1030 00:47:41,680 --> 00:47:43,326 indtil i dag du måske aldrig har forstået. 1031 00:47:43,326 --> 00:47:46,550 1032 00:47:46,550 --> 00:47:49,520 Og det er om kvaliteten af ​​latter du bør få med CS vittigheder. 1033 00:47:49,520 --> 00:47:51,060 Så det er om ret. 1034 00:47:51,060 --> 00:47:54,900 >> Men mere overbevisende, jeg troede, jeg ville give os lidt teaser til mandag. 1035 00:47:54,900 --> 00:47:56,430 Så vi er begyndt at bruge heltal. 1036 00:47:56,430 --> 00:47:57,510 Vi har nævnt flåd. 1037 00:47:57,510 --> 00:48:00,120 Vi har endda nævnt doubler, som igen giver dig tal 1038 00:48:00,120 --> 00:48:01,390 efter decimaler. 1039 00:48:01,390 --> 00:48:04,230 >> Men det viser sig, at flåd og doubler, og virkelig, computere, 1040 00:48:04,230 --> 00:48:08,470 fundamentalt, kan ikke udtrykke nogle værdier præcist. 1041 00:48:08,470 --> 00:48:12,840 Vi ved fra matematiske klasser, som du kan have et vilkårligt antal numre efter 1042 00:48:12,840 --> 00:48:13,510 kommaet. 1043 00:48:13,510 --> 00:48:16,460 Og du kan endda sætte en lodret streg at sige disse gå på evigt. 1044 00:48:16,460 --> 00:48:18,810 >> Desværre, du kan ikke rigtig gøre det på en computer. 1045 00:48:18,810 --> 00:48:20,400 Og så hjørne sager opstår. 1046 00:48:20,400 --> 00:48:23,120 For eksempel antage, at du er gør noget økonomisk. 1047 00:48:23,120 --> 00:48:25,700 Du gør matematik med procenter, og 1048 00:48:25,700 --> 00:48:27,030 med dollars og cents. 1049 00:48:27,030 --> 00:48:29,230 Og de cents ikke nødvendigvis line up. 1050 00:48:29,230 --> 00:48:34,120 Tja, det viser sig, at fraktioner af øre kan begynde at tilføje op, når 1051 00:48:34,120 --> 00:48:37,250 modelleret med et edb-system på en sådan måde, at smart 1052 00:48:37,250 --> 00:48:39,100 mennesker kan drage fordel. 1053 00:48:39,100 --> 00:48:42,650 >> Og dem af jer der ikke har set, jeg havde gerne give dig en 30-sekunders teaser af 1054 00:48:42,650 --> 00:48:48,290 en vidunderlig film kaldet Office Space, hvilket vil male et billede af en 1055 00:48:48,290 --> 00:48:51,205 problem, vi skal tage fat første ting på mandag. 1056 00:48:51,205 --> 00:48:53,960 Hvis vi kunne hæve lydstyrken en lille smule, jeg giver dig 30 1057 00:48:53,960 --> 00:48:55,495 sekunder af kontorplads. 1058 00:48:55,495 --> 00:48:55,770 >> [VIDEO AFSPIL] 1059 00:48:55,770 --> 00:48:59,000 >> -Jeg mener, du, har du ikke været der viser op, og du får til at holde dit job. 1060 00:48:59,000 --> 00:49:00,620 >> -Faktisk, jeg blive forfremmet. 1061 00:49:00,620 --> 00:49:03,240 >> -Jeg kunne programmere en virus, der ville rip dette sted fra big tid. 1062 00:49:03,240 --> 00:49:04,430 >> -Nå, hvordan virker det? 1063 00:49:04,430 --> 00:49:06,782 >> -Hver gang der er en bank transaktion hvor renten er beregnet, og der 1064 00:49:06,782 --> 00:49:10,160 er tusindvis om dagen, computeren slutter op med disse brøkdele af en cent. 1065 00:49:10,160 --> 00:49:12,030 >> -Men jeg har ikke tænkt mig at gøre noget ulovligt. 1066 00:49:12,030 --> 00:49:12,660 >> -Ulovligt? 1067 00:49:12,660 --> 00:49:15,075 Samir dette er Amerika. 1068 00:49:15,075 --> 00:49:16,570 >> -Vi er nødt til at sværge til Gud. 1069 00:49:16,570 --> 00:49:19,070 >> -Hvis ingen kender dette men os, okay? 1070 00:49:19,070 --> 00:49:21,920 Ingen familiemedlemmer, ingen veninder, ingen. 1071 00:49:21,920 --> 00:49:22,700 >> -Selvfølgelig. 1072 00:49:22,700 --> 00:49:23,320 >> -Aftalt. 1073 00:49:23,320 --> 00:49:24,280 >> -Don 't bekymre, mand. 1074 00:49:24,280 --> 00:49:25,640 Jeg vil ikke sige det til nogen enten. 1075 00:49:25,640 --> 00:49:26,504 >> [END VIDEOAFSPILNING] 1076 00:49:26,504 --> 00:49:30,030 >> DAVID MALAN: Så dette er altså CS50, der var Office Space, og det vil alle 1077 00:49:30,030 --> 00:49:31,465 mening på mandag. 1078 00:49:31,465 --> 00:49:33,940 Se dig derefter. 1079 00:49:33,940 --> 00:49:37,880 >> Fortæller: På det næste CS50, Rob justerer til at være væk fra 1080 00:49:37,880 --> 00:49:39,130 Harvard madplan. 1081 00:49:39,130 --> 00:49:56,160