1 00:00:07,370 --> 00:00:09,760 [Powered by Google Translate] TOMMY MACWILLIAM: Låt oss tala om slingor, en i den gemensamma 2 00:00:09,760 --> 00:00:13,380 programmering konstruerar vi får se hela CS50. 3 00:00:13,380 --> 00:00:15,570 Vi kommer att använda loopar när vi vill utföra en 4 00:00:15,570 --> 00:00:17,200 uppgift mer än en gång. 5 00:00:17,200 --> 00:00:20,700 Till exempel kan vi vill skriva ut "hej" 100 gånger eller skriva ut 6 00:00:20,700 --> 00:00:22,700 ut alla bokstäver i alfabetet. 7 00:00:22,700 --> 00:00:26,030 I båda dessa fall har vi en sak vi vill göra 8 00:00:26,030 --> 00:00:28,700 flera gånger, skriva något. 9 00:00:28,700 --> 00:00:31,970 Men vad vi skriver ut varje gång kan variera. 10 00:00:31,970 --> 00:00:34,530 Så vi kan göra något lite annorlunda på varje 11 00:00:34,530 --> 00:00:37,820 iteration, eller köra igenom, av slingan. 12 00:00:37,820 --> 00:00:41,280 Vi får se tre olika typer av slingor i C, medan 13 00:00:41,280 --> 00:00:44,700 slingor, loopar och göra medan slingor. 14 00:00:44,700 --> 00:00:47,850 Även om dessa tre typer av slingor har en annan syntax, 15 00:00:47,850 --> 00:00:50,630 idéerna bakom dem är desamma. 16 00:00:50,630 --> 00:00:53,930 Vi kommer definiera vissa kodblock inom klammerparenteser, 17 00:00:53,930 --> 00:00:57,810 kallas kroppen av slingan, att vi vill att exekveras 18 00:00:57,810 --> 00:00:59,790 visst antal gånger. 19 00:00:59,790 --> 00:01:03,370 Genom att ändra värdena för variabler som används i kroppen, vi 20 00:01:03,370 --> 00:01:07,570 kan göra vår slinga göra något annorlunda varje gång det körs. 21 00:01:07,570 --> 00:01:10,750 Med någon slinga vi skriver, vi måste också bestämma när 22 00:01:10,750 --> 00:01:12,400 slinga slutar köra. 23 00:01:12,400 --> 00:01:15,650 Om vi ​​inte gör det, då vår trogna dator kommer att fortsätta 24 00:01:15,650 --> 00:01:19,040 att köra den slinga tills vi dödar programmet. 25 00:01:19,040 --> 00:01:22,490 I Scratch kan vi använda upprepa n gånger 26 00:01:22,490 --> 00:01:24,600 blockera att skapa en slinga. 27 00:01:24,600 --> 00:01:28,200 Alla bitar inuti ett block som sagt upprepar 10 28 00:01:28,200 --> 00:01:30,130 skulle köras 10 gånger. 29 00:01:30,130 --> 00:01:34,160 Och då skulle vi gå vidare till bitarna efter det slingan. 30 00:01:34,160 --> 00:01:38,140 Så vår stoppvillkor var helt enkelt har detta block har 31 00:01:38,140 --> 00:01:39,830 kör 10 gånger. 32 00:01:39,830 --> 00:01:43,900 Så låt oss återskapa denna i C. För Scratch att säkerställa 33 00:01:43,900 --> 00:01:46,920 att bitarna inom upprepa blocket exekveras 34 00:01:46,920 --> 00:01:51,180 exakt 10 gånger måste Scratch att hålla reda på varje 35 00:01:51,180 --> 00:01:53,750 genomförandet av upprepade blocket. 36 00:01:53,750 --> 00:01:56,790 För att hålla reda på hur många gånger vi slingan har 37 00:01:56,790 --> 00:02:00,360 utförs, låt oss skapa en variabel som heter jag. 38 00:02:00,360 --> 00:02:03,400 Vi börjar jag av vid noll, eftersom vår slinga 39 00:02:03,400 --> 00:02:04,650 har inte körts ännu. 40 00:02:10,009 --> 00:02:10,949 OK 41 00:02:10,949 --> 00:02:15,560 Nu ska vi använda tiden nyckelordet att börja vår slinga. 42 00:02:20,100 --> 00:02:24,180 Nu ska vi måste ta reda på när vår slinga stannar, men 43 00:02:24,180 --> 00:02:26,730 låt oss lämna detta för nu och sedan komma tillbaka till det. 44 00:02:30,970 --> 00:02:32,150 Okej. 45 00:02:32,150 --> 00:02:35,260 Inuti vår slinga, låt oss bara skriva ut ett budskap, som 46 00:02:35,260 --> 00:02:38,535 "Hej." Vi kan använda printf funktionen för detta. 47 00:02:48,400 --> 00:02:49,230 Okej. 48 00:02:49,230 --> 00:02:54,210 Så nu ska vi spela att en iteration av slingan har 49 00:02:54,210 --> 00:02:55,750 utförts. 50 00:02:55,750 --> 00:03:00,320 Vi kan göra det genom att lägga till 1 till eller uppräkning, vår disk 51 00:03:00,320 --> 00:03:01,740 variabel,. i. 52 00:03:01,740 --> 00:03:09,180 För att göra det, kan vi säga jag är lika med I plus 1, eller mer 53 00:03:09,180 --> 00:03:16,520 enkelt, jag plus plus. 54 00:03:16,520 --> 00:03:17,320 Jättebra. 55 00:03:17,320 --> 00:03:21,810 Så nu kan vi se att varje gång vi slinga körs, vår 56 00:03:21,810 --> 00:03:24,500 räknevariabeln går upp med ett. 57 00:03:24,500 --> 00:03:29,410 Så vi vet exakt hur många iterationer vi har kört hittills. 58 00:03:29,410 --> 00:03:31,630 Efter en iteration av slingan, vårt värde 59 00:03:31,630 --> 00:03:34,270 av jag kommer att vara 1. 60 00:03:34,270 --> 00:03:37,460 Efter två iterationer, jag kommer att vara 2. 61 00:03:37,460 --> 00:03:42,640 Och efter 10 iterationer, jag kommer att vara 10. 62 00:03:42,640 --> 00:03:46,780 Så, om vi vill köra denna slinga exakt 10 gånger, sedan 63 00:03:46,780 --> 00:03:49,240 detta är när vi vill stoppa. 64 00:03:49,240 --> 00:03:53,860 Så vi vill köra denna slinga medan jag är mindre än 10, och 65 00:03:53,860 --> 00:03:57,630 det är precis vad vi ska skriva, medan jag 66 00:03:57,630 --> 00:04:02,450 är mindre än 10. 67 00:04:02,450 --> 00:04:06,380 Detta tillstånd ser ut precis som de villkor som vi använt i om 68 00:04:06,380 --> 00:04:07,830 annars block. 69 00:04:07,830 --> 00:04:11,690 Efter kropp vår slinga har utförts, vårt program 70 00:04:11,690 --> 00:04:14,690 hoppar tillbaka till öglorna villkoret. 71 00:04:14,690 --> 00:04:17,290 Om villkoret är sant, då kroppen av 72 00:04:17,290 --> 00:04:18,990 slinga ska köras igen. 73 00:04:18,990 --> 00:04:22,190 Om tillståndet inte längre är sant, då vår slinga inte kommer att 74 00:04:22,190 --> 00:04:25,700 kör längre och kommer att gå vidare till nästa kodrad 75 00:04:25,700 --> 00:04:27,876 under vår slinga. 76 00:04:27,876 --> 00:04:28,550 Okej. 77 00:04:28,550 --> 00:04:30,740 Så låt oss ta en titt på en annan typ av 78 00:04:30,740 --> 00:04:33,000 slinga, for-slingan. 79 00:04:33,000 --> 00:04:37,310 Bredvid tag sökord, inom parentes, hade vi en sak, 80 00:04:37,310 --> 00:04:39,840 villkoret som krävs för att vara sant för 81 00:04:39,840 --> 00:04:42,010 slingan ska köras. 82 00:04:42,010 --> 00:04:45,440 Det innebär att vi var tvungna att skapa vår disk variabel utanför 83 00:04:45,440 --> 00:04:48,760 av slingan och kom ihåg att öka det någon gång 84 00:04:48,760 --> 00:04:51,050 insidan av slingan. 85 00:04:51,050 --> 00:04:54,320 Huvudet för våra för slinga, å andra sidan, har tre 86 00:04:54,320 --> 00:04:58,510 delar, som var och en kommer att separeras med ett semikolon. 87 00:04:58,510 --> 00:05:01,950 I vår första tredjedelen kan vi förklara någon disk eller hjälpare 88 00:05:01,950 --> 00:05:05,000 variabler som vi vill använda i vår slinga. 89 00:05:05,000 --> 00:05:07,350 I praktiken kan detta vara riktigt bra. 90 00:05:07,350 --> 00:05:10,590 Vi behöver verkligen inte den variabeln, jag efter vår samtidigt 91 00:05:10,590 --> 00:05:13,650 slinga har kört, så vi borde verkligen inte behöva förklara den 92 00:05:13,650 --> 00:05:15,810 utanför slingan. 93 00:05:15,810 --> 00:05:19,080 Den andra tredjedelen är villkoret som måste vara sant 94 00:05:19,080 --> 00:05:21,850 för kroppen att utföras igen, precis som 95 00:05:21,850 --> 00:05:23,330 i vår while-slinga. 96 00:05:23,330 --> 00:05:26,350 I vår sista tredjedelen kan vi köra ett uttalande som kommer att vara 97 00:05:26,350 --> 00:05:30,270 utförs efter varje iteration av slingan, så att vi inte har 98 00:05:30,270 --> 00:05:32,710 att bygga in det i slingan. 99 00:05:32,710 --> 00:05:38,390 Så låt oss skriva en for-slinga som räknar ner från 5 till 1. 100 00:05:38,390 --> 00:05:41,790 Vi börjar med den för sökord. 101 00:05:41,790 --> 00:05:44,680 Vi kan skapa en räknare variabel först, som vi ska 102 00:05:44,680 --> 00:05:47,840 satt till 5 denna gång eftersom vi räknar ner, 103 00:05:47,840 --> 00:05:50,110 följt av ett semikolon. 104 00:05:50,110 --> 00:05:53,660 Nästa är vårt tillstånd, som vi ska återkomma till. 105 00:05:53,660 --> 00:05:57,540 Tredje vill vi dekrementera vår disk variabel efter 106 00:05:57,540 --> 00:05:59,620 varje iteration av slingan. 107 00:05:59,620 --> 00:06:04,740 Så istället för att säga jag plus plus, vi säga att jag minus minus. 108 00:06:04,740 --> 00:06:05,300 Okej. 109 00:06:05,300 --> 00:06:09,490 Så vi vill att slingan ska köras medan jag fortfarande är 110 00:06:09,490 --> 00:06:11,960 större än 0. 111 00:06:11,960 --> 00:06:16,160 I kroppen av slingan, låt oss skriva ut värdet av jag. 112 00:06:16,160 --> 00:06:20,480 För att göra det använder vi den printf-funktionen med hjälp av% d 113 00:06:20,480 --> 00:06:21,650 platshållare. 114 00:06:21,650 --> 00:06:24,820 Kom ihåg att denna platshållaren ersätts med 115 00:06:24,820 --> 00:06:27,040 värdet av i. 116 00:06:27,040 --> 00:06:32,060 Slutligen, låt oss lägga ett uttalande efter vår för slinga. 117 00:06:32,060 --> 00:06:35,850 När vi kör denna slinga kommer jag börja på 5, 118 00:06:35,850 --> 00:06:38,070 så 5 kommer att skrivas ut. 119 00:06:38,070 --> 00:06:42,000 När jag kommer till 0, fortsatta tillståndet är i 120 00:06:42,000 --> 00:06:44,450 större än 0, inte längre håller. 121 00:06:44,450 --> 00:06:47,330 Så vår slinga slutar köra, och vi kommer att se 122 00:06:47,330 --> 00:06:49,850 uttalande efter slingan. 123 00:06:49,850 --> 00:06:51,340 Så låt oss köra denna kod. 124 00:06:51,340 --> 00:06:52,700 Först ska vi sammanställa en 125 00:06:52,700 --> 00:06:56,460 countdown.c med make nedräkning. 126 00:06:56,460 --> 00:06:59,320 Nu kan vi köra kod med. / Nedräkning. 127 00:07:02,340 --> 00:07:06,040 I båda medan slingor och slingor, vår fortsatta 128 00:07:06,040 --> 00:07:09,010 tillstånd kommer att kontrolleras innan kroppen 129 00:07:09,010 --> 00:07:10,960 av slingan exekveras. 130 00:07:10,960 --> 00:07:13,840 Det betyder att om vårt tillstånd är inte inledningsvis 131 00:07:13,840 --> 00:07:18,100 sant, då kroppen av vår slinga aldrig kommer att köras. 132 00:07:18,100 --> 00:07:22,060 Så det är ibland bra att kontrollera tillståndet efter 133 00:07:22,060 --> 00:07:25,150 kropp av slingan snarare än innan den. 134 00:07:25,150 --> 00:07:28,270 Så låt oss skriva en slinga för att uppmana användaren för ett antal 135 00:07:28,270 --> 00:07:30,990 tills ett positivt tal tillförs. 136 00:07:30,990 --> 00:07:34,740 Om användaren matar ett negativt tal, vi vill be dem 137 00:07:34,740 --> 00:07:36,260 för ett annat nummer. 138 00:07:36,260 --> 00:07:38,940 Så vi kommer att vilja detta uppmaning att vara inne i 139 00:07:38,940 --> 00:07:41,050 kropp av slingan. 140 00:07:41,050 --> 00:07:44,730 Emellertid, när slingan körs för första gången, måste användaren 141 00:07:44,730 --> 00:07:46,750 har inte gett oss numret ännu. 142 00:07:46,750 --> 00:07:49,640 Så det inte vettigt att kontrollera om det är positivt. 143 00:07:49,640 --> 00:07:54,020 Istället kommer vi att vilja kolla numret efter kroppen 144 00:07:54,020 --> 00:07:55,720 slingan körs. 145 00:07:55,720 --> 00:08:00,310 Vi kan göra detta med en gör while-slinga. 146 00:08:00,310 --> 00:08:03,560 Först skapar vi en variabel, n, som kommer att hålla 147 00:08:03,560 --> 00:08:05,230 användarens inmatning. 148 00:08:05,230 --> 00:08:09,960 Nu ska vi använda göra sökord, följt av klammerparenteser som 149 00:08:09,960 --> 00:08:12,930 kommer att börja kropp vår slinga. 150 00:08:12,930 --> 00:08:16,230 I kroppen, kan vi fråga användaren för ett antal med 151 00:08:16,230 --> 00:08:18,480 GetInt funktion. 152 00:08:18,480 --> 00:08:23,230 Nu ska vi ha kroppen av denna slinga att köra igen om 153 00:08:23,230 --> 00:08:28,370 användaren skrivit ett negativt tal, så vi ska säga när N 154 00:08:28,370 --> 00:08:30,420 är mindre än 0. 155 00:08:30,420 --> 00:08:33,140 Lägg märke till semikolon här efter while. 156 00:08:38,909 --> 00:08:40,679 Så låt oss köra denna kod. 157 00:08:40,679 --> 00:08:44,780 Först ska vi sammanställa detta med att positiva. 158 00:08:44,780 --> 00:08:49,340 Nu kan vi köra programmet med. / Positivt. 159 00:08:49,340 --> 00:08:52,660 Om vi ​​ger det här programmet ett negativt tal, liksom negativ 160 00:08:52,660 --> 00:08:56,560 4, då vi blir ombedd igen för ett antal sedan 161 00:08:56,560 --> 00:09:00,490 villkoret för vår göra medan slinga var sant. 162 00:09:00,490 --> 00:09:04,690 När vi ger ett positivt tal, liksom 8, sedan 163 00:09:04,690 --> 00:09:08,560 villkoret för vår göra medan slinga kommer inte längre att vara sant. 164 00:09:08,560 --> 00:09:12,080 Så slingan kommer inte att genomföras på nytt. 165 00:09:12,080 --> 00:09:15,290 Och det är det för de tre typerna av loopar vi använder i C. 166 00:09:15,290 --> 00:09:18,840 Mitt namn är Tommy, och detta är CS50.