1 00:00:00,000 --> 00:00:05,140 2 00:00:05,140 --> 00:00:05,640 Tudo certo. 3 00:00:05,640 --> 00:00:08,330 Então agora vamos falar sobre algo realmente útil em programming-- 4 00:00:08,330 --> 00:00:09,914 instruções condicionais. 5 00:00:09,914 --> 00:00:11,830 Então expressões condicionais permitir que os seus programas 6 00:00:11,830 --> 00:00:14,538 para tomar decisões e diferente garfos na estrada, algo 7 00:00:14,538 --> 00:00:17,670 Eu aludiu a pouco mais cedo, dependendo dos valores das variáveis, 8 00:00:17,670 --> 00:00:20,990 ou com base no que o usuário insere na o programador, na linha de comando, 9 00:00:20,990 --> 00:00:23,130 ou se você tiver um prompt ou algo assim. 10 00:00:23,130 --> 00:00:26,690 C tem um casal de diferentes maneiras expressar expressões condicionais, que 11 00:00:26,690 --> 00:00:29,911 nós também, por vezes, vai chamar um desvio condicional em seus programas. 12 00:00:29,911 --> 00:00:32,910 E alguns deles vão olhar muito familiar para você a partir do zero, 13 00:00:32,910 --> 00:00:35,190 por isso vamos mesmo retirá-los -se lado a lado, apenas 14 00:00:35,190 --> 00:00:38,170 você pode fazer essa analogia em sua cabeça. 15 00:00:38,170 --> 00:00:41,250 >> Então, se-- se é uma bonita simples condicional. 16 00:00:41,250 --> 00:00:43,560 Se você se lembrar de zero à direita aqui 17 00:00:43,560 --> 00:00:50,000 você poderia preencher esse é hexágono com uma expressão de azul se mouse para baixo 18 00:00:50,000 --> 00:00:53,010 ou se X for menor que 10, ou algo assim. 19 00:00:53,010 --> 00:00:57,390 E, em seguida, se x era inferior a 10, ou se o rato foi, de facto, para baixo, 20 00:00:57,390 --> 00:01:01,140 todo o código dentro do parte do enigma seria executado. 21 00:01:01,140 --> 00:01:03,720 Todas as coisas que se encaixam interior que forma C. 22 00:01:03,720 --> 00:01:07,200 >> Da mesma forma, temos se no lado esquerdo lá. 23 00:01:07,200 --> 00:01:09,210 Se a expressão booleana, que eu só estou usando 24 00:01:09,210 --> 00:01:13,010 como um substituto para um dos booleano expressões que anteriormente discutidos, 25 00:01:13,010 --> 00:01:15,240 chaveta aberta, perto chaveta. 26 00:01:15,240 --> 00:01:17,720 Então pense encaracolado aberto cinta e chaveta fechado 27 00:01:17,720 --> 00:01:22,720 como uma espécie de análogo ao sanduíche efeito do se bloco à direita 28 00:01:22,720 --> 00:01:24,070 do princípio. 29 00:01:24,070 --> 00:01:28,680 >> Se a expressão booleana no caso afirmação é verdadeira, 30 00:01:28,680 --> 00:01:30,900 em seguida, todas as linhas de código entre as chaves 31 00:01:30,900 --> 00:01:33,870 executará a fim a partir de cima para baixo. 32 00:01:33,870 --> 00:01:35,700 Se a expressão booleana é falso, vamos 33 00:01:35,700 --> 00:01:38,610 saltar sobre tudo in-between as chaves, porque nós só 34 00:01:38,610 --> 00:01:44,570 quer ir para baixo que bifurcação na estrada se a expressão booleana é verdadeira. 35 00:01:44,570 --> 00:01:48,540 >> Podemos dar um passo ainda mais com se outra coisa. 36 00:01:48,540 --> 00:01:50,820 Portanto, este bloco Scratch é muito semelhante ao que 37 00:01:50,820 --> 00:01:55,884 vimos apenas um segundo atrás, excepto leva dois caminhos diferentes com base 38 00:01:55,884 --> 00:01:56,550 sobre o que acontece. 39 00:01:56,550 --> 00:02:00,420 Portanto, se o mouse foi para baixo, X ou se foi inferior a 10, 40 00:02:00,420 --> 00:02:04,780 vamos fazer tudo o que está no meio que o primeiro garfo, que primeiro C., 41 00:02:04,780 --> 00:02:08,430 >> Caso contrário, se o mouse é up, ou x é igual ou superior a 10, 42 00:02:08,430 --> 00:02:10,460 vamos fazer de tudo no segundo set. 43 00:02:10,460 --> 00:02:15,010 E isso é análogo ao que você vê aqui para expressão C. Se booleano, 44 00:02:15,010 --> 00:02:17,910 fazer as coisas entre o primeiro conjunto de chaves. 45 00:02:17,910 --> 00:02:20,550 Else, fazer as coisas entre o Segundo conjunto de chaves. 46 00:02:20,550 --> 00:02:22,080 Portanto, se o booleano expressão é verdadeira, vamos 47 00:02:22,080 --> 00:02:23,580 fazer tudo o que é entre o primeiro set. 48 00:02:23,580 --> 00:02:27,480 Se a expressão booleana é false, que provocaria a mais, 49 00:02:27,480 --> 00:02:30,100 e gostaríamos de fazer tudo o que está em o segundo conjunto de chaves. 50 00:02:30,100 --> 00:02:34,190 Mais uma vez, de cima para baixo, todos linhas entre as chaves. 51 00:02:34,190 --> 00:02:38,130 >> Em C, é possível criar uma cadeia de if-else if-else. 52 00:02:38,130 --> 00:02:42,000 Na verdade, você pode ter if-else if-else -se mais, se, e assim por diante e assim por diante e assim 53 00:02:42,000 --> 00:02:42,720 ligar. 54 00:02:42,720 --> 00:02:44,660 Em risco, isto exigiu aninhando os blocos. 55 00:02:44,660 --> 00:02:48,280 Você adiciona um else if-, e você tinha que colocar outro dentro do mais, 56 00:02:48,280 --> 00:02:51,110 e assim por diante, e ele ficou tipo de aninhada e complicado. 57 00:02:51,110 --> 00:02:52,450 Mas C, não temos de fazer isso. 58 00:02:52,450 --> 00:02:55,300 Nós podemos realmente só tem que seja uma cadeia como este. 59 00:02:55,300 --> 00:02:58,350 Mais uma vez, como você poderia esperar, todos estes ramos são mutuamente exclusivas. 60 00:02:58,350 --> 00:03:00,750 Você só pode nunca ir descer um do ramo. 61 00:03:00,750 --> 00:03:02,270 Se isso é verdade. 62 00:03:02,270 --> 00:03:03,930 Caso contrário, se isso é verdade. 63 00:03:03,930 --> 00:03:05,700 Caso contrário, se isso é verdade. 64 00:03:05,700 --> 00:03:07,120 Caso contrário, fazer isso. 65 00:03:07,120 --> 00:03:11,010 Então, todos os quatro ramos neste exemplo são mutuamente exclusivas. 66 00:03:11,010 --> 00:03:14,900 É uma cadeia de if-else if-else. 67 00:03:14,900 --> 00:03:17,580 >> É possível, porém, e por vezes muito úteis, 68 00:03:17,580 --> 00:03:20,950 para criar uma cadeia de não ramos mutuamente exclusivos. 69 00:03:20,950 --> 00:03:24,600 Neste exemplo, apenas o terceiro e quarta partes são mutuamente exclusivas. 70 00:03:24,600 --> 00:03:27,450 Pode ser que você poderia satisfazer a primeira condição, 71 00:03:27,450 --> 00:03:29,396 e você poderia satisfazer a segunda condição, 72 00:03:29,396 --> 00:03:31,770 e você poderia satisfazer o terceiro caso em que condition-- 73 00:03:31,770 --> 00:03:35,270 você iria para baixo o primeiro ramo, em seguida, você vai para baixo um segundo ramo, 74 00:03:35,270 --> 00:03:37,000 então você deve ir para baixo o terceiro ramo. 75 00:03:37,000 --> 00:03:40,450 Ou talvez você satisfazer a primeira condição, e à segunda condição, 76 00:03:40,450 --> 00:03:42,770 mas você não satisfaz a terceira condição. 77 00:03:42,770 --> 00:03:46,230 Nesse caso você vai para baixo o primeiro ramo eo segundo ramo, 78 00:03:46,230 --> 00:03:48,040 e, em seguida, o quarto ramo, 79 00:03:48,040 --> 00:03:51,392 >> A razão para isto é que a outra só irá ligar-se ao mais próximo se. 80 00:03:51,392 --> 00:03:53,100 Assim, mesmo que não haja uma outra pessoa aqui, que 81 00:03:53,100 --> 00:03:56,490 não cria necessariamente um mutuamente cadeia exclusiva de tudo. 82 00:03:56,490 --> 00:04:00,890 É apenas a expressão lá com booleana 83 00:04:00,890 --> 00:04:05,040 3-- expressão que é a mutuamente exclusivos com a outra pessoa. 84 00:04:05,040 --> 00:04:07,580 Por isso, é possível, e às vezes bastante útil, 85 00:04:07,580 --> 00:04:11,772 como eu disse, para criar uma cadeia de ramos não mutuamente exclusivas. 86 00:04:11,772 --> 00:04:14,230 Vamos dar uma olhada em um diferente tipo de condicional, que 87 00:04:14,230 --> 00:04:17,392 você não tenha visto antes no Scratch. 88 00:04:17,392 --> 00:04:19,369 Há algo chamado a instrução switch. 89 00:04:19,369 --> 00:04:21,410 A instrução switch é tipo de limpo, porque é 90 00:04:21,410 --> 00:04:25,930 uma instrução condicional que permite você especifique casos distintos, 91 00:04:25,930 --> 00:04:28,926 em vez de depender booleana expressões de tomar decisões por você. 92 00:04:28,926 --> 00:04:31,050 Assim, por exemplo, vamos dizer que eu tenho este programa, 93 00:04:31,050 --> 00:04:34,110 e eu estou pedindo ao usuário a contribuir para mim. 94 00:04:34,110 --> 00:04:37,170 Então eu digo, int x = Obter Int (), e se você não estiver familiarizado ainda, 95 00:04:37,170 --> 00:04:40,190 obter int é uma função que é Também incluídos na biblioteca de CS50, 96 00:04:40,190 --> 00:04:44,610 por isso, se você # include CS50.H você terá Obter acesso a Int () e toda a sua 97 00:04:44,610 --> 00:04:46,840 cousins-- GetFloat, GetString, e assim por diante. 98 00:04:46,840 --> 00:04:52,590 Basicamente um Get função para cada tipo de dados que nós já discutimos. 99 00:04:52,590 --> 00:04:53,970 >> Então Int x é igual a GetInt. 100 00:04:53,970 --> 00:04:56,390 Basicamente o que está acontecendo é que estou no terminal. 101 00:04:56,390 --> 00:04:58,790 Estou pedindo que o usuário digite um número. 102 00:04:58,790 --> 00:05:02,300 >> E aqui eu estou comutando o que estou fazendo, dependendo 103 00:05:02,300 --> 00:05:05,060 em que o usuário digitou no prompt. 104 00:05:05,060 --> 00:05:09,147 Então, se eles digitado um, eu imprimir um. 105 00:05:09,147 --> 00:05:09,855 E então eu quebrar. 106 00:05:09,855 --> 00:05:12,590 107 00:05:12,590 --> 00:05:15,510 Se eles tipo dois, eu imprimir dois. 108 00:05:15,510 --> 00:05:16,690 E então eu quebrar. 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ão você vai cair. 111 00:05:20,890 --> 00:05:23,380 Então, se eu não tinha qualquer breaks lá, eo usuário 112 00:05:23,380 --> 00:05:31,380 um digitado, o que aconteceria é que iria imprimir um, dois, três, desculpe. 113 00:05:31,380 --> 00:05:33,099 Esse é um tipo de comportamento estranho, certo? 114 00:05:33,099 --> 00:05:33,890 Você pode pensar assim. 115 00:05:33,890 --> 00:05:36,480 Mas na verdade existem alguns casos em que esta poderia ser uma coisa muito útil. 116 00:05:36,480 --> 00:05:39,730 Então aqui está outro exemplo de um interruptor declaração onde eu omitir as pausas. 117 00:05:39,730 --> 00:05:42,030 Mas eu faço isso de propósito. 118 00:05:42,030 --> 00:05:43,030 >> Então o que acontece aqui? 119 00:05:43,030 --> 00:05:43,821 Pense por um segundo. 120 00:05:43,821 --> 00:05:45,960 Você pode até querer fazer uma pausa no vídeo. 121 00:05:45,960 --> 00:05:48,230 >> O que acontece aqui se o usuário digita quatro? 122 00:05:48,230 --> 00:05:51,190 123 00:05:51,190 --> 00:05:53,860 Então eu perguntei ao usuário a entrada. 124 00:05:53,860 --> 00:05:56,560 E eles fornecem o valor 4. 125 00:05:56,560 --> 00:05:59,545 O que será impresso quando eu faço isso? 126 00:05:59,545 --> 00:06:02,170 No slide anterior, houve rupturas entre todos os casos. 127 00:06:02,170 --> 00:06:04,750 E assim seria apenas imprimir quatro e depois parar. 128 00:06:04,750 --> 00:06:06,610 Mas, neste caso, ele não vai. 129 00:06:06,610 --> 00:06:10,700 O que vai acontecer é você cairá através de cada caso. 130 00:06:10,700 --> 00:06:14,890 >> Portanto, neste caso Eu organizei meus casos de tal forma que, se o utilizador 4, 131 00:06:14,890 --> 00:06:20,070 Vou imprimir quatro, três, dois, um, decolar. 132 00:06:20,070 --> 00:06:22,780 E se eles digitado 5, gostaria de começar às cinco e fazer a mesma coisa. 133 00:06:22,780 --> 00:06:26,410 Se eles digitado 1, eu o faria basta fazer um, explosão fora. 134 00:06:26,410 --> 00:06:28,715 >> Portanto, neste caso, eu estou usando um interruptor tipo de inteligentemente de modo 135 00:06:28,715 --> 00:06:30,804 que eu pretendo cair através de todos os casos. 136 00:06:30,804 --> 00:06:33,720 Mas geralmente você provavelmente vai quer quebrar entre todos eles, 137 00:06:33,720 --> 00:06:36,090 a menos que você tem uma situação como esta, onde você está 138 00:06:36,090 --> 00:06:40,081 tipo de alavancar o fato de que você vai cair através dos casos sem interrupção. 139 00:06:40,081 --> 00:06:42,830 Então esse é o segundo do major tipos de declarações condicionais. 140 00:06:42,830 --> 00:06:47,139 A última das quais é:? Então eu tem dois trechos de código C aqui. 141 00:06:47,139 --> 00:06:48,680 Um à esquerda e outro à direita. 142 00:06:48,680 --> 00:06:52,330 O da esquerda deveria provavelmente ser muito familiar para você. 143 00:06:52,330 --> 00:06:55,110 >> Eu tenho Int x. 144 00:06:55,110 --> 00:06:57,167 E eu provavelmente deveria pediram ao usuário 145 00:06:57,167 --> 00:07:00,250 for-- isso provavelmente deve 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ão eu estou fazendo uma decisão. 148 00:07:05,240 --> 00:07:11,700 Se alguma expressão booleana é verdade, atribuir o valor x 5. 149 00:07:11,700 --> 00:07:13,590 Caso contrário, atribuir o valor x 6. 150 00:07:13,590 --> 00:07:16,548 >> Que à esquerda, provavelmente, deve ser bastante familiar a partir de nossa discussão 151 00:07:16,548 --> 00:07:18,160 Se Else de apenas um momento atrás. 152 00:07:18,160 --> 00:07:20,535 Você ficaria surpreso de saber que a linha à direita 153 00:07:20,535 --> 00:07:22,310 faz exatamente a mesma coisa? 154 00:07:22,310 --> 00:07:26,140 >> Então, isso é chamado de:? Ou às vezes chamado o operador ternário. 155 00:07:26,140 --> 00:07:27,450 E é muito legal. 156 00:07:27,450 --> 00:07:29,110 É geralmente usado como um truque bonito. 157 00:07:29,110 --> 00:07:35,777 >> Mas o que ele permite que você a fazer é simular um If Else com muito pequeno, 158 00:07:35,777 --> 00:07:37,610 realmente trivialmente curta desvios condicionais. 159 00:07:37,610 --> 00:07:41,470 Você geralmente não usaria:? Se você tinha seis linhas de código entre cada conjunto 160 00:07:41,470 --> 00:07:42,569 cintas de encaracolado. 161 00:07:42,569 --> 00:07:44,360 Mas se você é apenas tomar uma decisão rápida, 162 00:07:44,360 --> 00:07:47,520 se você estiver indo para fazer uma coisa ou o outro e é muito simples, 163 00:07:47,520 --> 00:07:52,240 este pode ser um exemplo de como a fazê-lo com:? o operador ternário. 164 00:07:52,240 --> 00:07:56,940 Então Int x é igual a expressão? 165 00:07:56,940 --> 00:07:59,470 A coisa após a pergunta marca é o valor de x 166 00:07:59,470 --> 00:08:02,690 será se a expressão é verdadeira. 167 00:08:02,690 --> 00:08:05,330 >> A coisa após a cólon é o valor de x 168 00:08:05,330 --> 00:08:07,990 seria se a expressão era falsa. 169 00:08:07,990 --> 00:08:11,510 Então, eu estou me perguntando, é a expressão verdadeira? 170 00:08:11,510 --> 00:08:13,870 Se for, atribuir o valor x 5. 171 00:08:13,870 --> 00:08:16,619 Se não é, atribuir o valor x 6. 172 00:08:16,619 --> 00:08:17,410 Mais uma vez, como eu disse. 173 00:08:17,410 --> 00:08:18,670 Isso geralmente é apenas um truque bonito. 174 00:08:18,670 --> 00:08:20,430 E, por vezes, se você se tornar realmente confortável com isso, 175 00:08:20,430 --> 00:08:22,820 você vai fazer isso porque parece tipo de fresco em seus programas. 176 00:08:22,820 --> 00:08:25,710 Geralmente eu estou apresentando-a você agora para que você estiver familiarizado com ele 177 00:08:25,710 --> 00:08:26,990 se você vê-lo. 178 00:08:26,990 --> 00:08:30,080 Mas certamente sabe que você não tem escrevê-lo em qualquer um dos seu código. 179 00:08:30,080 --> 00:08:33,246 Mas é algo para estar familiarizado com, porque você definitivamente vai encontrar 180 00:08:33,246 --> 00:08:36,130 trechos de código aqui e lá onde isso:? 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 tão rápido em o que são condicionais, 183 00:08:40,960 --> 00:08:44,210 e quais são as opções disponíveis para você em C. Se você tem e if-else, 184 00:08:44,210 --> 00:08:46,860 e se outra pessoa se, et cetera. 185 00:08:46,860 --> 00:08:50,880 Você pode usar expressões booleanas para aqueles que tomar decisões. 186 00:08:50,880 --> 00:08:53,720 >> Com declarações switch você usa casos discretos para tomar decisões. 187 00:08:53,720 --> 00:08:57,540 Você poderia dizer especificamente, se é um, ou se é dois, ou se é três, 188 00:08:57,540 --> 00:09:00,870 Eu vou fazer essa coisa, ou essa coisa, ou esta coisa. 189 00:09:00,870 --> 00:09:04,660 E:? Podem ser usadas para substituir muito simples ramos if-else, 190 00:09:04,660 --> 00:09:08,490 ou if-else cadeias para fazer seu código parece um pouco extravagante. 191 00:09:08,490 --> 00:09:09,250 >> Eu sou Doug Lloyd. 192 00:09:09,250 --> 00:09:11,410 E este é CS50. 193 00:09:11,410 --> 00:09:12,959