1 00:00:00,000 --> 00:00:05,140 2 00:00:05,140 --> 00:00:05,640 Всичко е наред. 3 00:00:05,640 --> 00:00:08,330 Така че сега нека да поговорим за нещо, наистина полезно в programming-- 4 00:00:08,330 --> 00:00:09,914 условни конструкции. 5 00:00:09,914 --> 00:00:11,830 Така условни изрази позволите на вашите програми 6 00:00:11,830 --> 00:00:14,538 да вземат решения и да вземе различно вилици в пътната, нещо, 7 00:00:14,538 --> 00:00:17,670 Аз споменах за малко по-рано, в зависимост от стойностите на променливите, 8 00:00:17,670 --> 00:00:20,990 или на базата на това, което потребителят не въведе в програмист, в командния ред, 9 00:00:20,990 --> 00:00:23,130 или ако имате бърза или нещо такова. 10 00:00:23,130 --> 00:00:26,690 C има няколко различни начина за изразят условни изрази, които 11 00:00:26,690 --> 00:00:29,911 ние също ще понякога наричаме условно клон в програмите си. 12 00:00:29,911 --> 00:00:32,910 И някои от тях ще разгледаме доста запознат с теб от самото начало, 13 00:00:32,910 --> 00:00:35,190 така че ние ще дори и да ги дръпнете един до друг, просто 14 00:00:35,190 --> 00:00:38,170 можете да направите тази аналогия в главата ти. 15 00:00:38,170 --> 00:00:41,250 >> Така че, ако if-- е доста просто условно. 16 00:00:41,250 --> 00:00:43,560 Ако си спомняте от нулата отдясно тук 17 00:00:43,560 --> 00:00:50,000 можете да попълните, че е шестоъгълник със синя изразяване, ако мишката надолу 18 00:00:50,000 --> 00:00:53,010 или ако X е по-малко от 10, или нещо такова. 19 00:00:53,010 --> 00:00:57,390 И тогава, ако х е по-малко от 10, или ако мишката е в действителност, надолу, 20 00:00:57,390 --> 00:01:01,140 целият код вътрешността на пъзел парче ще се изпълни. 21 00:01:01,140 --> 00:01:03,720 Всички неща, които се вписват вътре, че C форма. 22 00:01:03,720 --> 00:01:07,200 >> По същия начин, имаме ли ако в ляво има. 23 00:01:07,200 --> 00:01:09,210 Ако Булев израз, които аз съм само с помощта 24 00:01:09,210 --> 00:01:13,010 като заместител на едно от Boolean изрази, които обсъдихме по-рано, 25 00:01:13,010 --> 00:01:15,240 отворена фигурна скоба, близо фигурна скоба. 26 00:01:15,240 --> 00:01:17,720 Така че мисля, че на открито къдрава презрамки и затворена фигурна скоба 27 00:01:17,720 --> 00:01:22,720 като вид, аналогичен на сандвича ефект на блок, ако отдясно 28 00:01:22,720 --> 00:01:24,070 от нулата. 29 00:01:24,070 --> 00:01:28,680 >> Ако Булев израз в отчета, ако е вярно, 30 00:01:28,680 --> 00:01:30,900 след това всички линии на код между фигурните скоби 31 00:01:30,900 --> 00:01:33,870 ще се изпълни, за от горе до долу. 32 00:01:33,870 --> 00:01:35,700 Ако Булев израз е невярна, ние ще 33 00:01:35,700 --> 00:01:38,610 прескочим всичко между тях фигурните скоби, защото ние само 34 00:01:38,610 --> 00:01:44,570 Искам да сляза, че разклонение на пътя ако Булев израз е вярно. 35 00:01:44,570 --> 00:01:48,540 >> Ние можем да използваме тази една стъпка допълнително, ако друго. 36 00:01:48,540 --> 00:01:50,820 Така че това е Scratch блок доста подобна на 37 00:01:50,820 --> 00:01:55,884 видяхме само преди секунди, с изключение на това отнема две различни пътеки, основаващи 38 00:01:55,884 --> 00:01:56,550 върху това, което се случва. 39 00:01:56,550 --> 00:02:00,420 Така че, ако мишката е намалял, или ако X е по-малко от 10, 40 00:02:00,420 --> 00:02:04,780 ние ще направим всичко, което е по средата че първата вилица, че първата C., 41 00:02:04,780 --> 00:02:08,430 >> В противен случай, ако мишката е нагоре, или х е не по-малко от 10, 42 00:02:08,430 --> 00:02:10,460 ние ще направим всичко във втория сет. 43 00:02:10,460 --> 00:02:15,010 И това е аналогично на това, което виждате тук за C. Ако Булев израз, 44 00:02:15,010 --> 00:02:17,910 направя нещата между изходното Първият набор от фигурни скоби. 45 00:02:17,910 --> 00:02:20,550 Else, направете нещата между изходното Вторият комплект от фигурни скоби. 46 00:02:20,550 --> 00:02:22,080 Така че, ако Boolean изразяване е вярно, ние ще 47 00:02:22,080 --> 00:02:23,580 направи каквото е между първия сет. 48 00:02:23,580 --> 00:02:27,480 Ако Булев израз е невярно, че ще задейства друго, 49 00:02:27,480 --> 00:02:30,100 и ние ще направим каквото и в вторият набор от фигурни скоби. 50 00:02:30,100 --> 00:02:34,190 Отново горе до долу, всичко, линии в между скобите. 51 00:02:34,190 --> 00:02:38,130 >> В C, това е възможно да се създаде един, ако-иначе, ако веригата-друго. 52 00:02:38,130 --> 00:02:42,000 В действителност може да има, ако-иначе, ако-иначе ако иначе, ако, и така нататък, и така нататък и така 53 00:02:42,000 --> 00:02:42,720 на. 54 00:02:42,720 --> 00:02:44,660 В Scratch, това изисква гнездене на блоковете. 55 00:02:44,660 --> 00:02:48,280 Вие добавяте ако-иначе, и ти трябваше да Казано по друг един вътре в друго, 56 00:02:48,280 --> 00:02:51,110 и така нататък, и да го имам вид на вложените и сложно. 57 00:02:51,110 --> 00:02:52,450 Но C, ние не трябва да го направя. 58 00:02:52,450 --> 00:02:55,300 Ние всъщност може просто да тя да бъде като тази верига. 59 00:02:55,300 --> 00:02:58,350 Отново, както може да се очаква, всички тези отрасли са взаимно изключващи се. 60 00:02:58,350 --> 00:03:00,750 Можете да отидете само всякога определяне на един от бранша. 61 00:03:00,750 --> 00:03:02,270 Ако това е вярно. 62 00:03:02,270 --> 00:03:03,930 В противен случай, ако това е вярно. 63 00:03:03,930 --> 00:03:05,700 В противен случай, ако това е вярно. 64 00:03:05,700 --> 00:03:07,120 В противен случай, да направите това. 65 00:03:07,120 --> 00:03:11,010 Така че всички четири от клоновете в тази Например са взаимно изключващи се. 66 00:03:11,010 --> 00:03:14,900 Това е, ако-иначе, ако веригата-друго. 67 00:03:14,900 --> 00:03:17,580 >> Възможно е обаче, а понякога и много полезно, 68 00:03:17,580 --> 00:03:20,950 да се създаде верига на не взаимно изключващи клонове. 69 00:03:20,950 --> 00:03:24,600 В този пример, само третото и четвърто клонове са взаимно изключващи се. 70 00:03:24,600 --> 00:03:27,450 Тя може да бъде, че бихте могли да отговарят на първото условие, 71 00:03:27,450 --> 00:03:29,396 и вие може да задоволи второто условие, 72 00:03:29,396 --> 00:03:31,770 и може да задоволи Третият condition-- в който случай 73 00:03:31,770 --> 00:03:35,270 бихте слизат на първата част, тогава слизат втори клон, 74 00:03:35,270 --> 00:03:37,000 тогава ще слезем на третата част. 75 00:03:37,000 --> 00:03:40,450 Или може би ви задоволи първата състояние, и второ състояние, 76 00:03:40,450 --> 00:03:42,770 но вие не отговарят третото условие. 77 00:03:42,770 --> 00:03:46,230 В този случай трябва да се понижат първият клон и втората част, 78 00:03:46,230 --> 00:03:48,040 и след четвъртия клон, 79 00:03:48,040 --> 00:03:51,392 >> Причината за това е, че друго ще се свърже само с точност дали. 80 00:03:51,392 --> 00:03:53,100 Така че, въпреки че има на друго тук, че 81 00:03:53,100 --> 00:03:56,490 не е задължително да се създаде взаимно изключителната верига от всичко. 82 00:03:56,490 --> 00:04:00,890 Това е само израз там с Булева 83 00:04:00,890 --> 00:04:05,040 изразяване 3-- това е взаимно изключващи се с друг. 84 00:04:05,040 --> 00:04:07,580 Така че е възможно, и понякога е доста полезно, 85 00:04:07,580 --> 00:04:11,772 както казах, за да се създаде верига от не изключват взаимно клонове. 86 00:04:11,772 --> 00:04:14,230 Нека да разгледаме най-различен вид условна, които 87 00:04:14,230 --> 00:04:17,392 не сте виждали преди в Scratch. 88 00:04:17,392 --> 00:04:19,369 Има нещо, наречено отчета за преминаване. 89 00:04:19,369 --> 00:04:21,410 Отчетът за превключване е чист вид, защото това е 90 00:04:21,410 --> 00:04:25,930 условен израз, който позволява можете да зададете отделни случаи, 91 00:04:25,930 --> 00:04:28,926 вместо да разчита на Булева изрази, за да вземат решения за вас. 92 00:04:28,926 --> 00:04:31,050 Така например, да речем че имам тази програма, 93 00:04:31,050 --> 00:04:34,110 и аз питам потребителя да даде своя принос за мен. 94 00:04:34,110 --> 00:04:37,170 Затова казвам, инт х = Get Int (), и ако все още не сте запознати, 95 00:04:37,170 --> 00:04:40,190 получите инт е функция, която е Също така са включени в библиотеката CS50, 96 00:04:40,190 --> 00:04:44,610 така че ако #include CS50.H ще трябва достъп до Get Int () и цялото му 97 00:04:44,610 --> 00:04:46,840 cousins-- GetFloat, GetString, и така нататък. 98 00:04:46,840 --> 00:04:52,590 По принцип една Вземи функция за всеки тип данни, който вече сме обсъдени. 99 00:04:52,590 --> 00:04:53,970 >> Така Int х равнява GetInt. 100 00:04:53,970 --> 00:04:56,390 Основно това, което се случва е, че съм в терминала. 101 00:04:56,390 --> 00:04:58,790 Питам на потребителя да въведете в редица. 102 00:04:58,790 --> 00:05:02,300 >> И тук аз съм превключване какво правя, в зависимост 103 00:05:02,300 --> 00:05:05,060 върху това, което потребителят въведе в командния ред. 104 00:05:05,060 --> 00:05:09,147 Така че, ако те написали една, аз отпечатвате една. 105 00:05:09,147 --> 00:05:09,855 И тогава аз се счупят. 106 00:05:09,855 --> 00:05:12,590 107 00:05:12,590 --> 00:05:15,510 Ако те написали две, I отпечатате две. 108 00:05:15,510 --> 00:05:16,690 И тогава аз се счупят. 109 00:05:16,690 --> 00:05:19,060 Важно е да се пробие между всеки случай 110 00:05:19,060 --> 00:05:20,890 защото в противен случай ще падне сам. 111 00:05:20,890 --> 00:05:23,380 Така че, ако не разполагат с никакви почивки там, и потребителят 112 00:05:23,380 --> 00:05:31,380 напечатан един, какво би станало, това е ще отпечата един, два, три, съжалявам. 113 00:05:31,380 --> 00:05:33,099 Това е вид странно поведение, нали? 114 00:05:33,099 --> 00:05:33,890 Може би си мислите така. 115 00:05:33,890 --> 00:05:36,480 Но всъщност има някои случаи, когато това може да е доста полезно нещо. 116 00:05:36,480 --> 00:05:39,730 Така че тук е още един пример за преминаване Декларация където аз пропуснете почивките. 117 00:05:39,730 --> 00:05:42,030 Но аз го правя нарочно. 118 00:05:42,030 --> 00:05:43,030 >> Така че това, което се случва тук? 119 00:05:43,030 --> 00:05:43,821 Помислете за секунда. 120 00:05:43,821 --> 00:05:45,960 Може дори да искате да направите пауза във видеото. 121 00:05:45,960 --> 00:05:48,230 >> Какво се случва тук, ако типовете потребителски четири? 122 00:05:48,230 --> 00:05:51,190 123 00:05:51,190 --> 00:05:53,860 Така че аз съм попита потребителя за вход. 124 00:05:53,860 --> 00:05:56,560 И те предоставят на стойност 4. 125 00:05:56,560 --> 00:05:59,545 Какво получава печатни когато го правя? 126 00:05:59,545 --> 00:06:02,170 На предишния слайд, имаше паузи между всички случаи. 127 00:06:02,170 --> 00:06:04,750 И така би просто отпечатате четири и след това да спре. 128 00:06:04,750 --> 00:06:06,610 Но в този случай, това няма да стане. 129 00:06:06,610 --> 00:06:10,700 Какво ще се случи ли е ще падне през всеки отделен случай. 130 00:06:10,700 --> 00:06:14,890 >> Така че в този случай аз съм организирана моите случаи по такъв начин, че ако потребителят 4, 131 00:06:14,890 --> 00:06:20,070 Аз ще отпечата четири, три, две, едно, излитам. 132 00:06:20,070 --> 00:06:22,780 И ако те написали 5, бих започнете в пет и да направи същото нещо. 133 00:06:22,780 --> 00:06:26,410 Ако те написали 1, бих Просто направете едно, излитам. 134 00:06:26,410 --> 00:06:28,715 >> Така че в този случай, аз съм с помощта превключвател вид хитро така 135 00:06:28,715 --> 00:06:30,804 че аз нямам намерение да падат през всички случаи. 136 00:06:30,804 --> 00:06:33,720 Но като цяло най-вероятно ти ще искате да се прекъсне между всички тях, 137 00:06:33,720 --> 00:06:36,090 освен ако имате ситуация като този, когато сте 138 00:06:36,090 --> 00:06:40,081 вид деблокирането на факта, че вие ​​ще падне чрез случаите без прекъсване. 139 00:06:40,081 --> 00:06:42,830 Така че това е вторият от майора видове условни конструкции. 140 00:06:42,830 --> 00:06:47,139 Последната от които е:? Така че аз има две откъси от C код тук. 141 00:06:47,139 --> 00:06:48,680 Една от ляво и една от дясно. 142 00:06:48,680 --> 00:06:52,330 Онзи, в ляво трябва Вероятно е доста запознат с теб. 143 00:06:52,330 --> 00:06:55,110 >> Имам Int х. 144 00:06:55,110 --> 00:06:57,167 И аз може би трябва да са поискали от потребителя 145 00:06:57,167 --> 00:07:00,250 for-- това вероятно трябва да бъде Int х равнява GetInt, или нещо подобно. 146 00:07:00,250 --> 00:07:03,030 147 00:07:03,030 --> 00:07:05,240 И тогава аз съм вземане на решение. 148 00:07:05,240 --> 00:07:11,700 Ако някои Булев израз е Вярно, присвоява х стойността 5. 149 00:07:11,700 --> 00:07:13,590 В противен случай, присвоява х стойността 6. 150 00:07:13,590 --> 00:07:16,548 >> Това в ляво може би трябва да бъде доста познати от нашата дискусия 151 00:07:16,548 --> 00:07:18,160 Ако на Else само преди миг. 152 00:07:18,160 --> 00:07:20,535 Бихте ли се изненадате да знаете че линията отдясно 153 00:07:20,535 --> 00:07:22,310 прави точно същото нещо? 154 00:07:22,310 --> 00:07:26,140 >> Така че това се нарича:? Или понякога наречен третичния оператор. 155 00:07:26,140 --> 00:07:27,450 И това е много готино. 156 00:07:27,450 --> 00:07:29,110 Това обикновено се използва като един сладък трик. 157 00:07:29,110 --> 00:07:35,777 >> Но това, което ви позволява да направите, е да симулира Ако Else с много малък, 158 00:07:35,777 --> 00:07:37,610 наистина банално кратко условни клонове. 159 00:07:37,610 --> 00:07:41,470 Вие като цяло няма да използва: ако имаше шест реда код между всяка серия 160 00:07:41,470 --> 00:07:42,569 на фигурни скоби. 161 00:07:42,569 --> 00:07:44,360 Но ако сте просто вземане на бързо решение, 162 00:07:44,360 --> 00:07:47,520 ако ти започваш да се направи едно нещо, или другата и това е много проста, 163 00:07:47,520 --> 00:07:52,240 това може да бъде пример за това как да го направя с:? третичния оператор. 164 00:07:52,240 --> 00:07:56,940 Така Int х е равно на изразяване? 165 00:07:56,940 --> 00:07:59,470 Нещото, след въпрос марка е това, което х имат стойност 166 00:07:59,470 --> 00:08:02,690 ще бъде, ако словото е вярно. 167 00:08:02,690 --> 00:08:05,330 >> Нещото, след като на дебелото черво е каква стойност Х 168 00:08:05,330 --> 00:08:07,990 би било, ако изразът е невярна. 169 00:08:07,990 --> 00:08:11,510 Така че аз съм се питам, е вярно израз? 170 00:08:11,510 --> 00:08:13,870 Ако е така, присвоява х стойността 5. 171 00:08:13,870 --> 00:08:16,619 Ако не е, да възложат х стойността 6. 172 00:08:16,619 --> 00:08:17,410 Отново, както казах. 173 00:08:17,410 --> 00:08:18,670 Това обикновено е само един сладък трик. 174 00:08:18,670 --> 00:08:20,430 И понякога, ако станете наистина удобно с него, 175 00:08:20,430 --> 00:08:22,820 вие ще направите това, защото изглежда някак страхотно в своите програми. 176 00:08:22,820 --> 00:08:25,710 Като цяло аз съм го представи пред вие сега така че сте запознат с нея 177 00:08:25,710 --> 00:08:26,990 ако го виждате. 178 00:08:26,990 --> 00:08:30,080 Но със сигурност знам, че не е нужно да го напиша в някоя от кода си. 179 00:08:30,080 --> 00:08:33,246 Но това е нещо, за да бъдат запознати с, защото вие със сигурност ще се сблъскате 180 00:08:33,246 --> 00:08:36,130 откъси от код тук и там, където това:? синтаксис, 181 00:08:36,130 --> 00:08:39,120 AKA третичния оператор, се използва. 182 00:08:39,120 --> 00:08:40,960 >> Така бързо обобщение на какви са условни, 183 00:08:40,960 --> 00:08:44,210 и какви са наличните опции при вас в C. Трябва Ако и ако-иначе, 184 00:08:44,210 --> 00:08:46,860 и ако друго, ако и така нататък. 185 00:08:46,860 --> 00:08:50,880 Можете да използвате булеви изрази за тези, които да се вземат решения. 186 00:08:50,880 --> 00:08:53,720 >> С ключ изявления използвате дискретни случаи да вземат решения. 187 00:08:53,720 --> 00:08:57,540 Ще кажа по-специално, ако това е една, или ако това е две, или ако това е три, 188 00:08:57,540 --> 00:09:00,870 Ще направя това нещо, или това нещо, или това нещо. 189 00:09:00,870 --> 00:09:04,660 И: може да се използва за заместване много прости, ако-друг клони, 190 00:09:04,660 --> 00:09:08,490 или ако-друг вериги да правят кода си изглежда малко фантазия. 191 00:09:08,490 --> 00:09:09,250 >> Аз съм Дъг Лойд. 192 00:09:09,250 --> 00:09:11,410 И това е CS50. 193 00:09:11,410 --> 00:09:12,959