1 00:00:00,000 --> 00:00:05,140 2 00:00:05,140 --> 00:00:05,640 Todo ben. 3 00:00:05,640 --> 00:00:08,330 Entón agora imos falar de algo realmente útil en programming-- 4 00:00:08,330 --> 00:00:09,914 instrucións condicionais. 5 00:00:09,914 --> 00:00:11,830 Entón expresións condicionais permitir que os seus programas 6 00:00:11,830 --> 00:00:14,538 para tomar decisións e diferente garfos na estrada, algo 7 00:00:14,538 --> 00:00:17,670 Eu aludiu a pouco máis cedo, dependendo dos valores das variables, 8 00:00:17,670 --> 00:00:20,990 ou a base do que o usuario introduce na o programador, na liña de comandos, 9 00:00:20,990 --> 00:00:23,130 ou se ten un prompt ou algo así. 10 00:00:23,130 --> 00:00:26,690 C ten un par de diferentes xeitos expresar expresións condicionais, que 11 00:00:26,690 --> 00:00:29,911 nós tamén, por veces, vai chamar un desvío condicional nos seus programas. 12 00:00:29,911 --> 00:00:32,910 E algúns deles van ollar moi familiar para ti a partir de cero, 13 00:00:32,910 --> 00:00:35,190 así que imos mesmo retirala los Se xeito conxunto, só 14 00:00:35,190 --> 00:00:38,170 pode facer esa analoxía na súa cabeza. 15 00:00:38,170 --> 00:00:41,250 >> Entón, se-- se é unha fermosa simple condicional. 16 00:00:41,250 --> 00:00:43,560 Se se lembrar de cero á dereita aquí 17 00:00:43,560 --> 00:00:50,000 podería cubrir ese é hexágono cunha expresión de azul se rato abaixo 18 00:00:50,000 --> 00:00:53,010 ou se X é menor que 10, ou algo así. 19 00:00:53,010 --> 00:00:57,390 E, a continuación, se x é inferior a 10, ou se o rato foi, de feito, para abaixo, 20 00:00:57,390 --> 00:01:01,140 todo o código no parte do enigma sería executado. 21 00:01:01,140 --> 00:01:03,720 Todas as cousas que se encaixan interior que forma C. 22 00:01:03,720 --> 00:01:07,200 >> Do mesmo xeito, temos se na parte esquerda alí. 23 00:01:07,200 --> 00:01:09,210 Se a expresión booleana, que eu só estou usando 24 00:01:09,210 --> 00:01:13,010 como un substituto para un dos booleano expresións que anteriormente discutidos, 25 00:01:13,010 --> 00:01:15,240 chaveta aberta, preto chaveta. 26 00:01:15,240 --> 00:01:17,720 Entón pense rizado aberto cinta e chaveta pechado 27 00:01:17,720 --> 00:01:22,720 como unha especie de análogo ao bocadillos efecto do que bloque á dereita 28 00:01:22,720 --> 00:01:24,070 a partir de cero. 29 00:01:24,070 --> 00:01:28,680 >> Se a expresión booleana no caso afirmación é certa, 30 00:01:28,680 --> 00:01:30,900 a continuación, todas as liñas de código entre as chaves 31 00:01:30,900 --> 00:01:33,870 executará a fin dende arriba cara abaixo. 32 00:01:33,870 --> 00:01:35,700 Se a expresión booleana é falso, imos 33 00:01:35,700 --> 00:01:38,610 ir sobre todo in-entre as chaves, porque só 34 00:01:38,610 --> 00:01:44,570 quere ir para abaixo que bifurcación na estrada a expresión booleana é certa. 35 00:01:44,570 --> 00:01:48,540 >> Podemos dar un paso aínda máis con outra cousa. 36 00:01:48,540 --> 00:01:50,820 Polo tanto, este bloque Scratch é moi semellante ao que 37 00:01:50,820 --> 00:01:55,884 vimos só un segundo atrás, agás leva dous camiños diferentes en base 38 00:01:55,884 --> 00:01:56,550 sobre o que pasa. 39 00:01:56,550 --> 00:02:00,420 Polo tanto, se o rato foi para abaixo, X ou se foi inferior a 10, 40 00:02:00,420 --> 00:02:04,780 imos facer todo o que está no medio que o primeiro garfo, que primeiro C., 41 00:02:04,780 --> 00:02:08,430 >> Se non, se o rato é up, ou x é igual ou superior a 10, 42 00:02:08,430 --> 00:02:10,460 imos facer de todo no segundo set. 43 00:02:10,460 --> 00:02:15,010 E iso é análogo ao que ve aquí para expresión C. Se booleano, 44 00:02:15,010 --> 00:02:17,910 facer as cousas entre o primeiro conxunto de claves. 45 00:02:17,910 --> 00:02:20,550 Else, facer as cousas entre o Segundo conxunto de claves. 46 00:02:20,550 --> 00:02:22,080 Polo tanto, se o booleano expresión é certa, imos 47 00:02:22,080 --> 00:02:23,580 facer todo o que é entre o primeiro set. 48 00:02:23,580 --> 00:02:27,480 Se a expresión booleana é false, que provocaría a máis, 49 00:02:27,480 --> 00:02:30,100 e queremos facer todo o que está o segundo conxunto de claves. 50 00:02:30,100 --> 00:02:34,190 Unha vez máis, de arriba abaixo, todos liñas entre as chaves. 51 00:02:34,190 --> 00:02:38,130 >> En C, é posible crear unha cadea de if-else if-else. 52 00:02:38,130 --> 00:02:42,000 En realidade, pode que if-else if-else Se máis, se, e así por diante e así por diante e así 53 00:02:42,000 --> 00:02:42,720 no. 54 00:02:42,720 --> 00:02:44,660 En risco, isto esixe aninhando os bloques. 55 00:02:44,660 --> 00:02:48,280 Engade un else if-, e tiña que poñer outro dentro do máis, 56 00:02:48,280 --> 00:02:51,110 etc., e quedou tipo de aniñada e complicado. 57 00:02:51,110 --> 00:02:52,450 Pero C, non debemos facelo. 58 00:02:52,450 --> 00:02:55,300 Podemos realmente só ten que sexa unha cadea como este. 59 00:02:55,300 --> 00:02:58,350 Unha vez máis, como podería esperar, todo estes ramos son mutuamente exclusivas. 60 00:02:58,350 --> 00:03:00,750 Só podes nunca ir baixar un do sector. 61 00:03:00,750 --> 00:03:02,270 Se iso é verdade. 62 00:03:02,270 --> 00:03:03,930 Se non, se iso é verdade. 63 00:03:03,930 --> 00:03:05,700 Se non, se iso é verdade. 64 00:03:05,700 --> 00:03:07,120 Se non, facelo. 65 00:03:07,120 --> 00:03:11,010 Entón, todos os catro ramas neste exemplo son mutuamente exclusivas. 66 00:03:11,010 --> 00:03:14,900 É unha cadea de if-else if-else. 67 00:03:14,900 --> 00:03:17,580 >> Pode, con todo, e por veces moi útiles, 68 00:03:17,580 --> 00:03:20,950 para crear unha cadea de non ramas mutuamente exclusivos. 69 00:03:20,950 --> 00:03:24,600 Neste exemplo, só o terceiro e cuarta partes son mutuamente exclusivas. 70 00:03:24,600 --> 00:03:27,450 Pode ser que podería satisfacer a primeira condición, 71 00:03:27,450 --> 00:03:29,396 e podería satisfacer a segunda condición, 72 00:03:29,396 --> 00:03:31,770 e podería satisfacer o terceiro caso de que condition-- 73 00:03:31,770 --> 00:03:35,270 ía para abaixo o primeiro sector, a continuación, vai para abaixo un segundo sector, 74 00:03:35,270 --> 00:03:37,000 entón ten que ir para abaixo o terceiro sector. 75 00:03:37,000 --> 00:03:40,450 Ou que satisfacer a primeira condición, e á segunda condición, 76 00:03:40,450 --> 00:03:42,770 pero non satisfai a terceira condición. 77 00:03:42,770 --> 00:03:46,230 Nese caso vai para abaixo o primeiro rama eo segundo sector, 78 00:03:46,230 --> 00:03:48,040 e, a continuación, o cuarto sector, 79 00:03:48,040 --> 00:03:51,392 >> A razón para isto é que a outra só pode conectar-se ao máis próximo se. 80 00:03:51,392 --> 00:03:53,100 Así, aínda que non haxa outra persoa aquí, que 81 00:03:53,100 --> 00:03:56,490 non crea necesariamente un mutuamente cadea exclusiva de todo. 82 00:03:56,490 --> 00:04:00,890 É só a expresión alí con booleana 83 00:04:00,890 --> 00:04:05,040 3-- expresión que é a mutuamente exclusivos coa outra persoa. 84 00:04:05,040 --> 00:04:07,580 Por iso, é posible, e ás veces moi útil, 85 00:04:07,580 --> 00:04:11,772 como dixen, para crear unha cadea de ramas non mutuamente exclusivas. 86 00:04:11,772 --> 00:04:14,230 Imos dar un ollo a un diferente tipo de condicional, que 87 00:04:14,230 --> 00:04:17,392 non teña visto antes na Scratch. 88 00:04:17,392 --> 00:04:19,369 Hai algo chamado a instrución switch. 89 00:04:19,369 --> 00:04:21,410 A instrución switch é tipo de limpo, porque é 90 00:04:21,410 --> 00:04:25,930 unha instrución condicional que permite especifique casos distintos, 91 00:04:25,930 --> 00:04:28,926 en vez de depender booleana expresións de tomar decisións por ti. 92 00:04:28,926 --> 00:04:31,050 Así, por exemplo, imos dicir que eu teño este programa, 93 00:04:31,050 --> 00:04:34,110 e eu estou pedindo ao usuario contribuíndo para min. 94 00:04:34,110 --> 00:04:37,170 Entón eu digo, int x = Obter Int (), e se non está familiarizado aínda, 95 00:04:37,170 --> 00:04:40,190 obter int é unha función que é Tamén incluídos na biblioteca de CS50, 96 00:04:40,190 --> 00:04:44,610 por iso, se # include CS50.H terá Acceder a Int () e toda a súa 97 00:04:44,610 --> 00:04:46,840 cousins-- GetFloat, GetString, e así por diante. 98 00:04:46,840 --> 00:04:52,590 Basicamente un Get función para cada tipo de datos que nós xa discutir. 99 00:04:52,590 --> 00:04:53,970 >> Entón Int x é igual a GetInt. 100 00:04:53,970 --> 00:04:56,390 Basicamente o que está pasando é que estou no terminal. 101 00:04:56,390 --> 00:04:58,790 Estou pedindo que o usuario introduza un número. 102 00:04:58,790 --> 00:05:02,300 >> E aquí estou comutando o que estou facendo, dependendo 103 00:05:02,300 --> 00:05:05,060 en que o usuario introduciu no poder. 104 00:05:05,060 --> 00:05:09,147 Entón, se eles ingresaran un, eu imprimir un. 105 00:05:09,147 --> 00:05:09,855 E entón eu romper. 106 00:05:09,855 --> 00:05:12,590 107 00:05:12,590 --> 00:05:15,510 No caso de que tipo dous, eu imprimir dous. 108 00:05:15,510 --> 00:05:16,690 E entón eu romper. 109 00:05:16,690 --> 00:05:19,060 É importante intervalo entre cada caso 110 00:05:19,060 --> 00:05:20,890 porque senón vai caer. 111 00:05:20,890 --> 00:05:23,380 Entón, se eu non tiña ningunha breaks alí, eo usuario 112 00:05:23,380 --> 00:05:31,380 un escrito, o que acontecería se que ía imprimir un, dous, tres, desculpe. 113 00:05:31,380 --> 00:05:33,099 Ese é un tipo de comportamento estraño, non? 114 00:05:33,099 --> 00:05:33,890 Pode pensar así. 115 00:05:33,890 --> 00:05:36,480 Pero en realidade hai algúns casos en que esta podería ser unha cousa moi útil. 116 00:05:36,480 --> 00:05:39,730 Entón aquí está outro exemplo dun interruptor declaración onde omitir as pausas. 117 00:05:39,730 --> 00:05:42,030 Pero eu fago iso de propósito. 118 00:05:42,030 --> 00:05:43,030 >> Entón o que ocorre aquí? 119 00:05:43,030 --> 00:05:43,821 Pense por un segundo. 120 00:05:43,821 --> 00:05:45,960 Pode querer facer unha pausa no video. 121 00:05:45,960 --> 00:05:48,230 >> Que pasa aquí se o usuario escribe catro? 122 00:05:48,230 --> 00:05:51,190 123 00:05:51,190 --> 00:05:53,860 Entón eu pregunta ao usuario a entrada. 124 00:05:53,860 --> 00:05:56,560 E fornecen o valor 4. 125 00:05:56,560 --> 00:05:59,545 O que será impreso cando fago iso? 126 00:05:59,545 --> 00:06:02,170 No slide anterior, houbo roturas entre todos os casos. 127 00:06:02,170 --> 00:06:04,750 E así sería só imprimir catro e despois parar. 128 00:06:04,750 --> 00:06:06,610 Pero, neste caso, non vai. 129 00:06:06,610 --> 00:06:10,700 O que vai ocorrer é que caerá a través de cada caso. 130 00:06:10,700 --> 00:06:14,890 >> Polo tanto, neste caso eu organizei meus casos de tal forma que, se vostede 4, 131 00:06:14,890 --> 00:06:20,070 Vou imprimir catro, tres, dous, un, despegar. 132 00:06:20,070 --> 00:06:22,780 E no caso de que ingresaran 5, quere comezar ás cinco e facer o mesmo. 133 00:06:22,780 --> 00:06:26,410 No caso de que ingresaran 1, eu o faría basta facer un, explosión fóra. 134 00:06:26,410 --> 00:06:28,715 >> Polo tanto, neste caso, eu estou usando un interruptor tipo de intelixentemente para 135 00:06:28,715 --> 00:06:30,804 que eu pretendo caer a través de todos os casos. 136 00:06:30,804 --> 00:06:33,720 Pero xeralmente probablemente vai quere romper entre todos eles, 137 00:06:33,720 --> 00:06:36,090 a menos que ten unha situación como esta, onde está 138 00:06:36,090 --> 00:06:40,081 tipo de alavancar o feito de que vai caer a través dos casos sen interrupción. 139 00:06:40,081 --> 00:06:42,830 Entón este é o segundo do major tipo de declaracións condicionais. 140 00:06:42,830 --> 00:06:47,139 A última das cales é :? Entón eu ten dous fragmentos de código C aquí. 141 00:06:47,139 --> 00:06:48,680 Un á dereita e outro á dereita. 142 00:06:48,680 --> 00:06:52,330 O da esquerda debería probablemente ser moi familiar para ti. 143 00:06:52,330 --> 00:06:55,110 >> Teño Int x. 144 00:06:55,110 --> 00:06:57,167 E eu probablemente debería pediron ao usuario 145 00:06:57,167 --> 00:07:00,250 for-- iso probablemente debe ser Int x é igual a GetInt, ou algo parecido. 146 00:07:00,250 --> 00:07:03,030 147 00:07:03,030 --> 00:07:05,240 E entón eu estou facendo unha decisión. 148 00:07:05,240 --> 00:07:11,700 Se algunha expresión booleana é realidade, asignar o valor x 5. 149 00:07:11,700 --> 00:07:13,590 Se non, asignar o valor x 6. 150 00:07:13,590 --> 00:07:16,548 >> Que á esquerda, probablemente, debe ser moi familiar a partir da nosa discusión 151 00:07:16,548 --> 00:07:18,160 Se Else de só un momento atrás. 152 00:07:18,160 --> 00:07:20,535 Vostede quedaría sorprendido saber que o texto á dereita 153 00:07:20,535 --> 00:07:22,310 fai exactamente o mesmo? 154 00:07:22,310 --> 00:07:26,140 >> Entón, iso é chamado de :? Ou ás veces chamado o operador ternário. 155 00:07:26,140 --> 00:07:27,450 E é moi legal. 156 00:07:27,450 --> 00:07:29,110 É xeralmente usado como un truco bonito. 157 00:07:29,110 --> 00:07:35,777 >> Pero o que permite que a facer é simular un If Else con moi pequeno, 158 00:07:35,777 --> 00:07:37,610 realmente trivialmente curta desvíos condicionais. 159 00:07:37,610 --> 00:07:41,470 Normalmente non usaría :? Se tiña seis liñas de código entre cada conxunto 160 00:07:41,470 --> 00:07:42,569 cintas de rizado. 161 00:07:42,569 --> 00:07:44,360 Pero se é só tomar unha decisión rápida, 162 00:07:44,360 --> 00:07:47,520 se está indo para facer unha cousa ou outro e é moi simple, 163 00:07:47,520 --> 00:07:52,240 este pode ser un exemplo de como a facelo con :? o operador ternário. 164 00:07:52,240 --> 00:07:56,940 Entón Int x é igual a expresión? 165 00:07:56,940 --> 00:07:59,470 O logo da pregunta marca é o valor de x 166 00:07:59,470 --> 00:08:02,690 será a expresión é certa. 167 00:08:02,690 --> 00:08:05,330 >> O logo da colon é o valor de x 168 00:08:05,330 --> 00:08:07,990 sería a expresión era falsa. 169 00:08:07,990 --> 00:08:11,510 Entón, eu estou me pregunta, é a expresión verdadeira? 170 00:08:11,510 --> 00:08:13,870 Se é, asignar o valor x 5. 171 00:08:13,870 --> 00:08:16,619 Se non é, asignar o valor x 6. 172 00:08:16,619 --> 00:08:17,410 Unha vez máis, como dixen. 173 00:08:17,410 --> 00:08:18,670 Isto xeralmente é só un truco bonito. 174 00:08:18,670 --> 00:08:20,430 E, ás veces, se facer realmente cómodo con iso, 175 00:08:20,430 --> 00:08:22,820 vai facelo porque parece tipo de fresco nos seus programas. 176 00:08:22,820 --> 00:08:25,710 Xeralmente estou presentando a agora para que estea familiarizado con el 177 00:08:25,710 --> 00:08:26,990 se velo. 178 00:08:26,990 --> 00:08:30,080 Pero certamente sabe que non ten gravala-lo en calquera dos seu código. 179 00:08:30,080 --> 00:08:33,246 Pero é algo para estar familiarizado con, porque sempre vai atopar 180 00:08:33,246 --> 00:08:36,130 fragmentos de código aquí e alí onde iso :? sintaxe, 181 00:08:36,130 --> 00:08:39,120 AKA o operador ternário, é usado. 182 00:08:39,120 --> 00:08:40,960 >> Resumo tan rápido en o que son condicionais, 183 00:08:40,960 --> 00:08:44,210 e cales son as opcións dispoñibles para que en C. Se tes e if-else, 184 00:08:44,210 --> 00:08:46,860 e se alguén se, etcétera. 185 00:08:46,860 --> 00:08:50,880 Podes usar expresións booleanas para os que tomar decisións. 186 00:08:50,880 --> 00:08:53,720 >> Con declaracións rede usa casos discretos para tomar decisións. 187 00:08:53,720 --> 00:08:57,540 Podería dicir especificamente, se é un, ou se é dous, ou se é tres, 188 00:08:57,540 --> 00:09:00,870 Vou facer esa cousa, ou esa cousa, ou esta cousa. 189 00:09:00,870 --> 00:09:04,660 E :? Poden usarse para substituír moi sinxelo ramas if-else, 190 00:09:04,660 --> 00:09:08,490 ou if-else cadeas para facer seu código parece un pouco extravagante. 191 00:09:08,490 --> 00:09:09,250 >> Eu son Doug Lloyd. 192 00:09:09,250 --> 00:09:11,410 E este é CS50. 193 00:09:11,410 --> 00:09:12,959