>> [Música tocando]
>> DAVID MALAN: Tudo bem.
Bem-vindo de volta.
Isto é CS50, e este é Uma semana, continuação.
Então, uma das razões que estamos passando em torno de tecnologias como
Google Glass é que eles vêm com algo conhecido como uma API, um
Interface de Programação de Aplicativos.
E o que isto significa é que, com o arquivos certo e com o direito
documentação, você pode realmente escrever software para dispositivos até mesmo como estes.
>> E assim, o que temos em mente para semestres final é, se um projeto
envolvendo, por exemplo, vidro Google pode recurso, vamos ver o que podemos fazer em
termos de ligar-te com alguns emprestado hardware, bem como o
API publicamente acessível para que você possa realmente começar a criar software
que corre no mesmo vidro Google.
>> Outro dispositivo que temos vindo a jogar com de tarde que nós pensamos que poderia ser
diversão no final do semestre é esta coisinha aqui.
É chamado Leap Movimento, e que você está prestes a ver é tecnicamente um
anúncio para o dispositivo, mas ele fala o que neste particular
dispositivo é capaz de fazer.
E, também, vem com uma API via que você pode escrever software para
controlar seu próprio computador de forma gosto muito deste filme de um minuto aqui.
>> [REPRODUÇÃO]
>> [FIM REPRODUÇÃO DE VÍDEO]
>> Então, agora, este dispositivo passa a ser implementada como um pequeno USB
conector que você pode ligar para o seu computador, mas eu não ficaria surpreso
se antes de tempo que tem esses tipos de tecnologias no próximo lote de PCs
e Macs para que você possa, de fato, interagir com ela
de forma semelhante.
Na verdade, o que eu pensei que eu ia fazer, também, é Puxei uma pequena demonstração
programa que vem com este software.
Então eu coloquei o pequeno sensor de na frente do meu laptop.
>> E como você pode ver, ele já percebe que minha mão está lá
controlá-la.
E toda esta aplicação faz é maravilhas pequenas coisas como esta.
Mas você pode ver que, de fato, Eu tenho cinco dedos lá.
Se conseguirmos que ele faça todos os 10, você pode imaginar um piano limpo
aplicação ou semelhante.
Então, se você gostaria de vir até depois da aula hoje e brincar com isso como
bem, você é bem-vindo.
Então, mais sobre isso mais para o final do semestre.
>> Assim, um par de administrativa anúncios.
Um deles, por fazer parte desta sexta-feira ao meio-dia cs60.net/section.
Essa URL é sobre o curso de página inicial também.
Nesse meio tempo, porém, supersections vai estrear neste domingo.
Supersections são uma coisa de uma só vez, porque nos leva algum tempo para trabalhar
quem está em qual seção e onde.
>> Portanto, este próximo domingo, haverá uma seção para aqueles menos confortável,
uma seção para aqueles mais confortável.
E aqueles de vocês em algum lugar entre são bem-vindos para ir para
um ou ambos ou nenhum.
Ambos serão filmadas.
Eles vão estar em um auditório maior do que uma secção normalmente estaria dentro
Mas o objetivo aqui é equipá-lo com algum conforto com um conjunto de problemas,
com C, com o aparelho CS50, esta fim de semana, antes mesmo de você descobrir o seu
atribuição formal de seção.
Então, você vai conhecer o seu TF e sua menor grupo de sectionmates em cerca de
tempo de uma semana.
>> Horário de expediente, por sua vez, foram acontecendo.
Fazer aproveitá-las hoje à noite ou amanhã à noite, se você gostaria.
Problema set 0 é devido na sexta-feira.
Este é um dia mais tarde do que o regular-programado quinta-feira.
Mas, com um conjunto de problemas, você verá que inclui alguns warm-up
exercícios com o qual você se pode estender sua
Quinta-feira prazo para sexta-feira.
Um conjunto de problemas, entretanto, vai estrear no site da Claro no próximo
Sexta-feira, se você gostaria de se enroscar com como eu fiz era uma vez atrasado
Sexta à noite no seu quarto.
>> Então cs50.net/appliance é o lugar onde você pode obter o aparelho CS50
que começamos a usar na segunda-feira.
Vamos usá-lo um pouco mais hoje.
Mas a certeza de que o problema definido um especificação irá orientá-lo através
precisamente os passos que você precisa para obter esse instalado e funcionando.
Então não se preocupe em fazer isso antes Pset 1, se você não preferir.
>> Tudo bem.
Então, nós olhamos na segunda-feira no código-fonte, mas, no contexto de uma nova
linguagem de programação, isto é, C. e C, ao contrário de risco, não é gráfica.
Não é Puzzle Pieces.
É mais Inglês-como sintaxe.
E há um par de passos envolvidos realmente em escrever e executar um
programa em C, pois além de fonte código como este, você precisa de algo
chamado compilador.
E, em termos leigos, o que não um compilador fazer por nós?
Sim.
>> ALUNO: Ele converte o código que você escreve para 0s e 1s.
>> DAVID MALAN: Ótimo.
Por isso, o código que converte nós escrevemos para 0s e 1s.
Ele converte o chamado código fonte para código objeto, o último dos quais parece
um pouco algo como isto.
E é a sua CPU, os cérebros dentro de o computador, que, por causa da
pessoas que criaram esses computadores, sabe o que essas sequências
média de 0s e 1s.
>> Talvez isso signifique impressão.
Talvez isso signifique disso.
Talvez isso significa subtração.
Talvez isso signifique exibir um gráfico.
Existem padrões predefinidos de bits que o mundo decidiu dizer
certas coisas.
Mas para a maior parte deste curso, nós vamos trabalhar em um nível superior, e
vamos tomar como certo que existem coisas como compiladores que podem
fazer a nossa função de código fonte na forma como pretendemos.
>> Assim, o programa que escreveu pela primeira vez na semana passada e, em seguida, começaram a porta, de modo a
falar, C esse passado Segunda-feira, foi isso.
Quando a bandeira verde clicado, dizer Olá.
Este foi, claro, escrito em risco.
E afirmou que o equivalente programa em C parecia um pouco
algo como isto.
>> Então o que eu pensei que iria fazer em primeiro lugar é, vamos desmembrar o que parece, à primeira
vista, na verdade, como bastante misterioso sintaxe, mas você vai começar a notar
padrões muito rapidamente.
O que nós também vamos fazer hoje é fornecer lo com um modelo mental para alguns
canônico, algumas construções padrão na programação.
E então nós vamos realmente chegar em nossas mãos sujo com alguns exemplos bem.
>> Portanto, para aqueles de vocês mais confortável, perceber que esta semana e, em seguida, ao lado
semana pode muito bem ser um pouco de crítica.
Mas, sobretudo quando a edição hackers de um problema conjunto sai no
site do curso na sexta-feira, eu acho que você vai descobrir que, mesmo que você preencher
algumas lacunas ao longo da próxima semana ou duas, você vai começar a ficar cada vez mais
desafiado e encontrar coisas novas e mais recentes.
>> Então, vamos provocar este programa para além algumas linhas de cada vez.
No topo, temos o que há de tecnicamente chamado de
diretiva de pré-processamento.
Esta é apenas uma linha de código que diz para incluir o conteúdo de um ficheiro,
chamado padrão I / N, entrada padrão - ou, desculpe, padrão I / O, padrão
de entrada / saída. h, para dentro do meu próprio programa.
>> Portanto, em outras palavras, se eu escrevi isso programa com um editor de texto simples como
gedit, o equivalente a mais simples de algo como o Microsoft Word, que
instrução # include stdio.h, é apenas vai dizer ao compilador, pegue o
conteúdo do que outro arquivo, stdio.h, e colá-los aqui.
>> Agora, por que eu me importo?
O que nós reivindicamos é dentro deste arquivo stdio.h chamado, que é armazenado
em algum lugar no meu disco rígido, ou neste caso, em algum lugar do aparelho CS50?
Alguém colocou lá para mim.
Mas o que está nele?
>> Sim, por isso é uma declaração de uma função chamada printf.
Então printf recorda a função que exibe palavras e caracteres e
números na tela de meu lance.
Mas eu não queria escrever.
CS50 não escrevê-lo.
Anos atrás alguém escreveu, e eles essencialmente nos deu a receita para isso
em um arquivo chamado stdio.h.
Assim que a primeira linha apenas me dá acesso às funções que alguém
escreveu anos atrás, entre que são printf.
>> Agora, a próxima linha que eu vou acenar minha mão em, pelo menos até a próxima semana.
Mas, por agora, saiba que int main (void) é essencialmente o equivalente desta
peça do puzzle amarelo quando bandeira verde clicado.
O mundo, há anos, decidiu que, se você está escrevendo um programa no
linguagem chamada C, você começa o seu programa com uma linha
que se parece com isso.
Em apenas cerca de uma semana, ele vai fazer sentido que int é, o que é vazio.
Mas, por agora, apenas pense nisso como esta peça do puzzle amarelo.
>> Agora seguinte, temos uma chaveta seguido por outro perto encaracolados cinta,
por assim dizer.
E vamos ver ao longo destes programas em C, bem como a
JavaScript e PHP.
E estes apenas encapsular linhas afins de código.
O aberto chaveta essencialmente diz, aí vem um código.
E a chaveta fechada, o que é inclinado na direção contrária, apenas
significa, isso é tudo para o código correspondente.
>> Assim, a linha suculento neste primeiro programa é a última, printf,
entre aspas, Olá mundo.
E eu chamei a coisa entre citações que da última vez?
Então é uma string.
E uma corda é apenas o tecnólogo prazo para uma seqüência de
personagens, uma palavra, uma frase.
Mesmo uma única letra pode ser o dobro citado.
Mas é uma seqüência de zero ou mais caracteres.
>> Barra-n, no entanto, parece um pouco estranho.
Mas simplesmente dizer algo simples para o computador.
O que é barra-n?
Nova linha.
Então, isso é apenas a sequência especial de personagens que o mundo decidiu
significa colocar uma quebra de linha ali, porque o compilador vai realmente começar
confusa, geralmente, se você, muito compreensivelmente, mas incorretamente, apenas
começar a bater Enter para colocar novas linhas em seu código.
Você precisa ser um pouco mais explícita com barra-n.
>> E nós vamos ver que há alguns outros, tais padrões para caracteres especiais.
Por exemplo, se você quiser deixar o seu mente vagar a um caso de canto,
supor que eu queria imprimir uma aspas na tela para
qualquer razão, pareceria que ser um pouco problemático, certo?
Porque se eu colocar aspas no meio do "Olá, mundo", para o que
razão, por que é que isso parece potencialmente problemáticos?
Ele quebra a string.
>> O compilador é apenas um programa.
Um programa como um compilador é só ir de ler o seu top código para baixo,
esquerda para a direita.
E se vê três aspas duplas em vez de dois filhos, ele não vai saber
Se você quer dizer que a coisa à esquerda deve ser a string, ou a coisa a
à direita, ou a coisa toda.
É ambíguo, e assim o que um típico compilador fazer é surtar,
e dar-lhe alguma mensagem de erro, e fazer você lidar com o problema.
>> Assim, dado que a barra-n significa uma nova linha, o que faria seus instintos agora
começar a ser se você quiser incluir algo anômalo como um duplo
citar dentro deste caso contrário citado corda?
Citação barra-dupla.
E então vamos ver isso tipo de padrão também.
>> Se você quiser fazer algo um pouco estranho, você vai descobrir que o
soluções muitas vezes seguem um padrão, ea barra invertida
denota uma seqüência de escape.
E isso significa apenas algo especial que precisamos para representar em uma
maneira diferente.
Quanto à forma como você representa uma barra invertida, bem, vamos
voltar a isso.
Mas a resposta também é verdade um pouco óbvio.
>> Então, vamos agora introduzir algum outro construções de programação
que você viu em risco.
Você provavelmente já tida como certa já se você já mergulhou
conjunto de problemas 0.
Mas vamos agora introduzir a sintaxe em C para estes caso contrário bastante intuitiva
ideias, pelo menos alguns deles.
>> Portanto, esta noção de uma condição ou um ramo, ao passo que anteriormente nós
representado com um código que olhou como esta à esquerda em Risco -
Se x é menor que y, então diga -
em vez agora em C - deixe-me aperfeiçoar em no caso mais simples -
estamos indo simplesmente para dizer que, se, abra parênteses, algo é verdadeiro - um
Expressão booleana está a ir onde eu disse condição -
Fechar parênteses, em seguida, fazer o que é dentro dessas chaves.
>> Então, aqui, também, as chaves é tipo como de risco da
Peças de quebra-cabeça em forma de U.
Faça o que tem dentro dessas chaves.
Neste caso, slash slash.
E perceber isso é um atacante slash, não uma barra invertida.
Barra, barra, para aqueles que já programou
antes, apenas significa -
é apenas um comentário.
Um comentário não é uma linha de código, de per si.
É uma linha de Inglês que você, humano, ter escrito a si mesmo para
talvez lembrá-lo de fazer algo, explicar para si mesmo, para explicar a
outra pessoa, o que o código está fazendo.
É apenas um comentário descritivo.
>> Agora, é claro, podemos ter uma de duas vias bifurcação na estrada, apenas por isso, um
três vias bifurcação na estrada, fazendo isso, e se você continuar esta
padrão, você pode ter de quatro vias, cinco vias, seis vias garfos na estrada se
você precisa lidar, de fato, que muitas condições.
E, em seguida, observe o paralelismo aqui -
if (condição), else if (condição), eo único que é um pouco
estranho é a última, que É justo que os outros.
Mas, novamente, esta é idêntica, conceitualmente, para o que fizemos
já, embora a sintaxe vontade demorar um pouco para se acostumar.
>> Agora, no presente exemplo, existem alguma outra sintaxe estranha.
Vemos printf novamente, parêntese aberto, e parêntesis.
E lá dentro é uma string.
Os parênteses, no contexto de printf, vá à esquerda
e direito de quê?
O que nós descrevemos que citada string como mais geral?
>> Então é um argumento.
Toda vez que você tem uma função, como printf, e, em seguida, um parêntese aberto e um
perto parêntese e algo dentro de que, se é uma string, ou um
inteiro, ou qualquer outra coisa, a coisa em entre os parênteses é chamado
um argumento.
>> E um argumento só influencia comportamento da função.
Neste caso, é bastante claro como.
x <y é o que está sendo transmitido, por assim dizer, como um argumento.
E printf vai imprimir exatamente isso.
Porque, certamente, a pessoa de anos atrás que implementou printf não tinha idéia
o que sucessores humanos foram vai usar printf para.
É por isso que existem argumentos, a influenciar o comportamento depois de uma função de
foi escrito.
>> Agora, a expressão booleana.
Nós já vimos isso antes em risco.
Acontece em C, você também pode "ou" los juntos, por assim dizer.
Duas barras verticais significa que este bloco de código, este fizer isso, vai
executar, se a primeira condição é verdadeira ou a segunda condição é verdadeira.
E mesmo que você não poderia ter feito esta em risco, você poderia de fato
fazer isso em risco, e você também pode expressar-se de forma diferente -
Se o primeiro estado e o segundo condição é verdadeira, então o que é
dentro das chaves.
>> E assim como um aparte, a razão é um duplo e comercial e um duplo
barra vertical, vamos ver, eventualmente, que uma única barra vertical e uma
único e comercial, na verdade, têm diferentes significado em C. Então, por agora,
que a duplicação de símbolos é intencional.
>> Então, vamos apresentar, resumidamente, este outro pouco de sintaxe.
Isso não chega a transitar para Zero, mas eu afirmo que eu puder
implementar a noção de uma pessoa se, se então, se mais, se else usando
algo chamado uma instrução switch.
E a única razão pela qual isso realmente existe é apenas para dar a você, programador, um
maneira um pouco diferente de resolver alguns problema, embora logicamente
não lhe dá quaisquer novas capacidades.
>> Por isso quero dizer isso.
Quando você diz interruptor, e, em seguida, um espaço, e, em seguida, um par de parênteses, para dentro
dos quais passa uma expressão -
e isso pode ser um pouco não-óbvio num primeiro momento, mas isso não é um argumento,
tecnicamente, porque interruptor não é uma função.
Então, por agora, apenas supor que estamos usando parênteses em locais diferentes
por razões diferentes.
>> Então ligue expressão significa que eu posso colocar uma variável dentro dos
parênteses, onde se lê a expressão.
E então, se essa variável -
Suponho que é chamado x, e é apenas um inteiro -
Posso, então, enumerar em meu slide aqui algo parecido com isso.
Se x é a minha variável, e eu quer fazer alguma coisa, se x
é igual a 1, não posso fazer isso.
>> Se eu quiser, em vez de fazer alguma coisa Se x é 2, eu posso fazer isso.
Outra coisa, se eu quiser fazer outra coisa totalmente, eu posso ter um caso default em
caso em que eu faço isso outra coisa.
Então, nesse sentido, é equivalente a um Se x é igual a igual a 1, então se mais,
mas eu falar isso agora só porque vamos vê-lo novamente.
Mas, por enquanto, só sei que ele existe.
>> Tudo bem.
Então, esses dois últimos são um pouco mais complexo à primeira vista, mas eles
algo bastante simples.
Um laço for em C é um pedaço de código que apenas faz algo de novo e
uma e outra vez.
E a única coisa irritante sobre ele é isso é que é um pouco enigmática
para se expressar neste cíclico padrão, mas o mundo padronizado em
da seguinte forma.
>> Quando você usa um loop for, você tem um par de parênteses novamente.
E observe as duas vírgulas lá dentro.
Esses dois vírgula três separados expressões diferentes dentro do
parênteses.
Um deles é o chamado inicializações.
Uma delas é a condição chamada.
E é um dos chamados actualizações.
>> Olhou em abstrato, isto é completamente não-óbvio, então vamos olhar
um exemplo concreto.
Em risco tivemos um bloco de repetição.
E este bloco disse repita 10 vezes, digamos "Olá, mundo". Deixe-me reivindicar para
agora, e nós vamos voltar a este, e isso, também, vai ficar mais familiar para
você em pouco tempo, o equivalente C código pode ser dito ser este -
uma instrução e um espaço, um par de parênteses, observe as vírgulas em
ali, que separam três distintas coisas, a inicialização, o
condição ea atualização.
>> E dar um palpite que a primeira está fazendo.
Int i = 0.
Em termos leigos áspero, o que é que está fazendo por nós, provavelmente?
Então, sim.
Ele está declarando uma variável chamada i, e está dando o valor?
0.
Por isso, está criando uma variável chamada i, armazenando o valor em que 0.
É o chamado inicialização.
>> Tudo bem, agora eu reivindiquei antes que a coisa meio, i
<10, é a condição.
Então o que está fazendo?
Bem, o que o loop for faz quando um programa com um loop é executado, é
cada vez que o computador é executado através de este loop, de cima para baixo, de cima para
inferior, assim como vocês fizeram quando contando-se e sentar-se,
novo e de novo e de novo, o computador vai
para verificar essa condição.
E se for inferior a 10, ele vai fazê-lo novamente.
Se i for inferior a 10, ele vai fazê-lo novamente.
Se i for inferior a dez, ele vai fazê-lo novamente.
Assim que parece sugerir que Espero está mudando.
Caso contrário, teríamos um loop infinito.
E, de fato, eu está mudando, porque a última coisa após o ponto e vírgula não
é a sintaxe um tanto enigmática de i + +.
Mas aqueles de vocês que já fez isso antes, isso apenas significa
simplesmente o quê?
>> ESTUDANTES: [interpondo VOZES].
>> DAVID MALAN: Adicione 1 para i.
Incrementar i.
Então vimos um quebra zero peça para que, na verdade.
Ele não se parecia com i + +, mas isso só significa, muito simplesmente, aumentar o
Valorizamos i por 1 a cada vez que você faz isso.
Então, literalmente, você começa i inicializar a 0.
Você, então, verificar o seu estado.
É 0 a menos de 10?
Sim.
Vamos através do loop.
>> A próxima coisa que eu afirmo que o computador de vai fazer é que vai
incrementar i.
Então eu é agora 1.
Ele verifica a condição.
É um inferior a 10?
Claro.
Então faz isso de novo.
Em seguida, ele incrementa i + + para 2.
2 é inferior a 10?
Sim.
E de novo e de novo e de novo.
E, finalmente, em virtude da plus-plussing, temos de i é igual a 10.
É 10 a menos do que 10?
Bem, obviamente que não.
E esse é o ponto em que o loop for simplesmente pára.
E se você tiver mais de código no tela abaixo, o computador
recursos para executar esse código em vez.
>> Então, novamente, mesmo que isso vai olhar e sentir um pouco estranho no
em primeiro lugar, certamente, para aqueles de vocês que nunca programou antes,
literalmente reduz conceitualmente o que é uma outra forma muito
quebra-cabeça simples peça em risco.
>> Tudo bem, eu prometi que não tinha ser outros análogos em risco.
Há um presente também.
E vimos isso brevemente última vez.
Mas lembre-se sempre o bloquear em zero?
Ele só faz algo para sempre?
Eu afirmava que você poderia implementar isto desta maneira.
E você pode realmente implementar esta em um grupo de diferentes maneiras.
>> Mas o loop while é apenas uma diferente forma em C de se expressar.
No final do dia, você não pode fazer qualquer coisa com um loop while que você
não pode com um loop for.
Então, eles estão no final da funcionalmente o mesmo dia.
Mas ele permite que você se expresse um pouco diferente em
da seguinte forma.
>> Com o loop while, é o que está em parênteses que está verificados novamente e
uma e outra vez.
E tão logo que a expressão é falsa, em seguida, interrompe o ciclo de execução,
e o computador prossegue executar qualquer outro código
tem em seu arquivo.
>> Mas o que é interessante aqui é que eu literalmente digitado verdade.
E verdade é um tipo de valor booleano, um valor verdadeiro ou falso.
Assim, poderia se tornar verdade nunca false se eu tenho literalmente
codificado-lo em meu programa?
Então, não.
É um pouco estranho que eu fiz isso.
Mas verdade é verdade.
Não há nenhuma mais-plussing.
Não há uso de variáveis ​​aqui.
Então porque eu codificado enquanto verdadeiro, este loop é sempre indo para avaliar
novo e de novo e de novo.
>> Então, quantas vezes é Olá mundo vai imprimir na tela?
Forever.
Um número infinito de vezes, até que o bateria morre ou algum outro externas
evento acontece.
Portanto, este não é provavelmente o melhor programa para escrever, porque se o usuário
nunca pode sair do seu programa, é provavelmente não é o que você pretende.
>> Mas, às vezes, os programas devem ter um loop infinito.
Por exemplo, se o seu computador tem um relógio nele, ele certamente seria
bom se o seu relógio ele manter a atualização si para sempre, mesmo que uma vez por
segundo ou uma vez por minuto ou algo parecido.
Assim, mesmo laços infinitos têm o seu lugar.
>> Tudo bem.
Por último, um presente.
E este é um pouco diferente funcionalmente, e nós vamos voltar para
isso provavelmente em Pset 1.
Mas há outro tipo de loop chamado de fazer enquanto loop.
E a única diferença aqui entre um fazer loop while e, digamos, um loop while,
é que a condição é verificada não antes de executar o código, mas depois
você executar o código.
Então, na parte superior para o tempo loop, enquanto o fazer enquanto
verifica-lo na parte inferior.
>> E isso significa apenas que o loop while tipicamente executar mais vezes
ou menor número de vezes que um loop while?
Potencialmente mais vezes, porque a fazer while está dizendo claramente isso,
só depois que ponto você verifique se o estado no interior do
parênteses é verdadeiro.
>> Então, vamos ver isso de novo provavelmente em Pset 1.
Se você quiser fazer alguma coisa em menos uma vez e, em seguida, talvez um pouco mais
vezes, este é um bom construir a utilizar.
Mas um loop while, pelo contrário, vai verificar a sua condição de primeira.
E isso é tudo para loops em C, não enquanto, ao mesmo tempo, e para loops.
E, novamente, eles mapeiam muito bem de volta a zero, exceto este não
consegue ter o mesmo analógico em risco.
>> Bem, que tal, agora, as variáveis?
Então é assim que eu declarei uma variável sintaticamente no outro dia.
Eu tive um int, que alegou é um número inteiro.
Então eu tive uma variável chamada contador, e, em seguida, um ponto e vírgula.
Então o que é esta linha de código está fazendo?
Este é, simplesmente, declarando uma variável -
isto é, pedindo o computador, dá-me um pouco de memória, dá-me alguns bits - em
que posso armazenar o quê?
Um int.
E o ponto e vírgula significa apenas final da linha de código.
>> Agora, a segunda linha é provavelmente muito adivinhação.
O que é contador = 0; fazendo?
É a atribuição de 0 a combater.
E por isso esta é a outra coisa isso é um pouco chato
contra, digamos, álgebra.
Considerando que, em álgebra, o sinal de igual significa iguais, aqui em C, a igual
sinal significa atribuição.
Então isso significa colocar o que está à direita em que está na esquerda.
E nós vamos ver um outro símbolo, é igual a iguais, quando queremos realmente testar
de qualidade, um pouco irritante.
>> Mas isso é um pouco ineficiente.
É o tipo de chato que eu tenho para declarar uma variável e
em seguida, dar-lhe um valor.
Então C realmente nos permite simplificar este e apenas fazê-lo de uma vez.
Você pode declarar a variável no lado esquerdo.
Você ainda pode fazer a atribuição a direito, colocando o sinal igual em
meio.
Assim, no final do dia, estes são dois equivalente, mas este, francamente,
é provavelmente o melhor hábito de entrar só porque ele é um pouco menos
código, que é um pouco mais fácil de ler, e ele só aperta
seu código, por assim dizer.
>> Qualquer dúvida, até agora, sobre os loops, sobre variáveis, em condições de, em
Booleanos, seja tecnicamente ou conceitual?
Tudo bem.
Então, agora o próximo obtém-se uma pouco mais interessante.
E este é o exemplo que eu colocar última vez que apenas mapeia um exemplo do risco
sobre a C.
>> Assim, uma função.
Em termos leigos, o que é uma função?
Tem que ser mais ousado com a sua resposta.
O que é uma função?
>> ALUNO: Será que alguma coisa.
>> DAVID MALAN: O que é isso?
>> ALUNO: Será que alguma coisa.
>> DAVID MALAN: Faz alguma coisa.
OK.
Vamos começar por aí.
Assim, uma função faz alguma coisa.
Portanto, é um pedaço de código que é essencialmente implementado em outro lugar que
realmente faz alguma coisa.
Agora, o que é interessante sobre a função é que ele pode receber a entrada de,
e pode produzir uma saída.
E vamos realmente tomar uma olhada nisso.
>> Então, o homem por trás da cortina foi deliberado um momento atrás.
Aqui temos uma tabela.
Mas suponha que isso realmente representa uma grande caixa.
Portanto, esta é uma chamada caixa preta.
E, em geral, no design, no computador ciência, caixas-pretas apenas se referir a
partes de uma funcionalidade que alguém implementou, e você não
necessariamente saber ou se importar como é implementado sob o capô.
Você só se importa que essa caixa preta, que agora vai começar a chamar a
função, faz alguma coisa.
>> Assim, por exemplo, se esta caixa negra o estágio aqui representa printf, uma
função, eu sei que a partir de exemplos anteriores que leva uma ou mais printf
argumentos, eo primeiro daqueles argumentos deve ser uma string, como
"Olá, mundo". Bem, se eu sou a pessoa escrever o programa, e eu quero
usar printf, eu, por exemplo, pode pegue um pedaço de papel em branco aqui e um
marcador preto e escrever sobre ela -
Eu grafada "mundo" -
H-E-L-L-S.
>> Então, eu vou levar o meu marcador preto e eu vou escrever, tão grande e legível quanto possível em
este pedaço de papel: "Olá, mundo", e agora eu reivindico este é o meu argumento.
Isto é uma string representado com um pedaço de papel branco.
E agora a minha entrada para a função printf vai ser isso.
Então, eu estou chamando printf, passando esse argumento como entrada para ele.
>> E agora, eu não sei como a pessoa que escreveu printf fez isso anos atrás, mas
Eu sei de sua documentação seu propósito na vida é para imprimir o que eu
fornecer a ele como entrada.
E assim, mesmo que esta implementação é desconhecido para mim
debaixo do capô, agora Eu vejo, oh, ele é feito.
Tem algo impresso no ecrã.
E agora, o controle do programa, se houver foram mais linhas de código, iria
já voltaram para mim.
E assim o fato de que Colton -
abençoe seu coração, está se escondendo aqui em uma mesa na frente de todos vocês -
é deliberada em que eu não sei e eu não me importo como printf é
implementadas.
Eu só sei que, mais uma vez, desde a sua documentação, o que ele faz e como eu
devo usá-lo.
>> Agora, lembre-se que printf poderia começar um pouco mais sofisticadas.
Mais uma vez, estamos apenas falando sobre o equivalente do bloco Say do zero.
Mas eu também fiz isso da última vez.
Eu queria fazer o meu programa Olá a pouco mais dinâmica e não apenas difícil
código algo como "mundo", e definitivamente não é algo rígido código
arbitrária como o D-A-V-I-D no programa.
Eu queria pedir ao usuário para o seu nome, e, em seguida, fazer algo com
essa seqüência que eles fornecem.
>> Portanto, há algo um pouco diferente aqui. printf, há pouco,
se, de fato, fazer alguma coisa, mas não retornou nada para mim.
Certo?
Colton não me entregar nada para trás, nenhum pedaço de papel.
Havia apenas um efeito colateral.
Meu fornecendo "Olá, mundo" como um argumento a Colton resultou na
efeito colateral de uma palavra, algumas palavras, que aparece na tela.
>> getstring, porém, é um pouco diferente. getstring também um
funcionar, mas retorna algum valor.
Ele não tem apenas um efeito colateral estética.
Na verdade, me dá, a pessoa chamada ou utilizar a função,
algo de volta.
Portanto, neste caso, é getstring chamado com getstring aberto
parêntese, perto parêntese.
Será getstring, portanto, tomar quaisquer argumentos ou entrada?
Não, não parece.
Seu objetivo na vida é só para ter uma string.
Ela não precisa de mais detalhes do que isso.
Então deixe-me ir em frente e fingir que, novamente, desta caixa preta não é printf,
mas getstring, e deixe-me, a pessoa escrever este programa, chamar ou utilizar
getString por apenas escrever G-E-T-S-T-R-I-N-G, aberto parêntese, perto
parêntese, getstring.
>> Agora, eu não tenho nenhuma idéia de como a equipe CS50 implementado getstring, mas eu sei que
se eu esperar o tempo suficiente, ele vai fazer o seu coisa debaixo do capô, talvez usando
algumas variáveis, talvez usando algum condições, talvez o uso de alguns loops,
talvez usando algumas funções, talvez usando -
apenas tentando tenda - talvez usando alguns outros recursos de programação.
Mas se eu esperar o tempo suficiente - na realidade, em que o computador, isto acontece
super rápido -
se eu esperar o tempo suficiente, esta função getstring vai receber uma string
do utilizador, que é presumivelmente digitando lo em seu teclado, e
então, se quando você getstring é feito os personagens do usuário
e armazená-los em uma string, que função, getstring, vai ter
pronto para me alguma saída que eu sou indo para recuperar por meio do
operador de atribuição.
>> E se eu for, de fato, para a saída aqui, Obosi tem generosamente
participaram, sem saber isso em avançar, escrevendo seu nome para esta
variável, que está representando uma corda.
Agora, o operador de atribuição significa que, mesmo embora isso possa se sentir um pouco
redundante, eu realmente preciso para fazer a minha própria cópia deste.
Porque na mão esquerda lado - gritos! -
notar que essencialmente tem cadeia nome no lado esquerdo.
Então, eu também vou fazer minha própria cópia deste.
E isso é um pouco de uma mentira branca, porque nós vamos ver em uma semana ou duas de
tempo que as cordas não são realmente o que parecem ser.
>> Mas, por agora, aqui está o valor de retorno.
Aqui é a minha própria cópia do mesmo após usando o operador de atribuição.
E agora, o que eu quero fazer a seguir?
Temos agora a segunda de duas linhas de código.
Então, agora eu quero chamar printf.
Vamos fingir que agora que o preto caixa está de volta novamente a ser
printf e não getstring.
>> Printf este tempo vai tomar quantos argumentos?
Então olhe, é como dois.
Há duas vírgulas ali, mas uma daquelas vírgulas, é
dentro das aspas.
Assim, o primeiro argumento é literalmente vai ser isso.
H-E-L-L-S, vírgula por cento s, barra-n.
E agora eu estou oferecendo não um argumento, mas dois argumentos para printf.
>> E o que printf deve fazer com estas duas entradas depois passá-las em
como argumentos?
É suposto tomar a segunda de eles, que eu chamei de nome, de modo que o
segundo pedaço de papel que eu escrevi um momento atrás é chamado nome.
Vai ficha do valor dentro dessa variável no espaço reservado,
% S, de modo que, mais uma vez, em apenas um momento de tempo, veremos um efeito colateral de
ter chamado printf, pelo qual agora temos não vêem "Olá, mundo", mas "Olá,
Obosi. "
>> Assim, uma grande salva de palmas para os dois nossos voluntários, dos quais apenas um sabia
disso estaria acontecendo.
Tudo bem.
Então, talvez, simples como isso era, Certamente, se você já está familiarizado
com tal, espero que você nunca vai esquecer que o visual particular de como
funções de trabalho.
>> Portanto, não há mais do que apenas getstring.
Dentro da biblioteca CS50, há uma bando inteiro de funções, todos os quais
são capitalizados apenas para deixar claro que escrevemos estas funções.
Tipicamente, em C, quase todos os outros função que você vai usar é minúsculas.
Mas nós deliberadamente usar letras maiúsculas só para deixar claro que estes
são rodinhas de tipos que nós vamos utilizar por apenas algumas semanas que
simplificar o processo de obtenção de entrada do usuário.
>> A biblioteca CS50 não faz nada que vós mesmos não podiam fazer por
apenas usando o código C a partir de uma livro oldschool.
Mas, novamente, usá-los como treinamento rodas de tipos para apenas um par de
semanas para que possamos livrar-se do complexidade que em breve você vai entender
-se de fazer algo como relativamente simples como a obtenção de
de entrada a partir de um utilizador.
>> Então saiba que você terá acesso a getchar, GetDouble -
dobrar.
What's - e, em seguida GetFloat.
O que é um float?
Vamos começar por aí.
>> Estudante: [inaudível].
>> DAVID MALAN: Yeah.
É um número com um ponto decimal.
Assim, enquanto um inteiro é um inteiro, o qual é apenas um número de 0 a 9,
um certo número de repetições do mesmo, um flutuador é algo
com um ponto decimal.
E um duplo, por sua vez, também é um número com um ponto decimal, mas mais
números após o decimal ponto, potencialmente.
>> Então, nós vamos voltar a este antes do tempo.
Porém, em geral, cada um desses tipos de de dados, cada um destes tipos de variáveis
que uma biblioteca como a nossa, pode retornar ao você, use números diferentes de bits para
armazenar informações.
Normalmente, um Char, que significa apenas um personagem, usa 8 bits.
E isso é realmente consistente com nossa byte de voluntários na semana passada que
veio e representou um Caracteres ASCII de cada vez.
Assim, um Char é de 8 bits.
>> Um flutuador passa a ser 32 bits, tipicamente.
E um duplo, como você pode imaginar, é na verdade 64 bits, o que é apenas mais,
o que significa que você pode ter maior números ou mais precisão.
Mas, novamente, mais sobre isso outra hora.
GetLongLong, entretanto, embora estupidamente nome, é realmente apenas uma
inteiro que é duas vezes maior, o dobro tempo, potencialmente, como uma forma regular
número inteiro, 64 bits em vez de 32.
E GetString estamos usando.
>> Mas acontece que, na biblioteca CS50, que é implementado, como veremos, em
sob a forma dos dois ficheiros, um dos quais é chamado cs50.h, tem outros dois
tipos de dados nele.
Booleanos não existem em C. Você pode simulá-los usando apenas 0s e 1s
ao longo de seus programas.
Mas na biblioteca CS50 criaram os símbolos de "verdadeiro" e "falso"
para representar 1 e 0 para que você não tem que codificar algo
literalmente como 1 e 0.
Mas vamos ver os novamente.
>> String, também, não existe.
E é por isso que eu mencionei é um pouco de mentira para agora.
Mas vamos descascar que camada antes do tempo.
Mas, por agora, uma string é um seqüência de caracteres.
>> Enquanto isso, em C, é de fato têm diferentes tipos de dados.
Observe estes são minúsculas.
Assim, as funções que você viu há pouco são funções escritas por CS50 que
tornarei para vós um valor que cai em uma dessas categorias.
>> A cheat sheets casal apenas para plantar a semente aqui. printf não apenas
levar% s como espaços reservados.
Leva% d para inteiros decimais, ou% i iria funcionar tão bem.
% F está valores de ponto flutuante. % C é para um char, se você quer apenas ligar um
caracteres em uma seqüência pré-formatado como temos vindo a fazer, você pode usar% c.
>> E então, um pouco irritante,% LLD é por um longo, longo inteiro decimal,
o que só significa que se você realmente precisa de um grande número e que você está usando algo
chamado de um longo, que virá de volta para em um pset, você pode usar% para LLD
dizer printf, conecte realmente uma grande inteiro aqui sob a forma do seu segundo ou
algum outro argumento.
>> E, finalmente, eu prometi que Há algumas outras fuga
seqüências que printf suporta.
Nós vimos barra-n.
Barra-r você pode ver.
É uma espécie de uma coisa old-school.
Se você já usou uma verdadeira máquina de escrever anos atrás e você puxou a manivela
que não só a rotação do volante mover a linha, ele também mudou a
tudo isso por todo o caminho de volta para à esquerda, bem, barra-r apenas
essencialmente move o cursor de volta para o início da linha
sem movê-lo para baixo.
Mas, novamente, mais sobre isso, talvez, no futuro.
>> Barra-citações, barra-double, barra-barra invertida é o
solução para o pequenino mistério Aludi anteriormente.
E barra-0 é realmente bastante interessante.
Mas vamos voltar ao que em pouco tempo.
>> Então deixe-me entrar, agora, o CS50 aparelho, e vamos realmente fazer uma
rápida aquecer com um dos exemplos já e depois se moveu para
algo um pouco mais complexo.
Então, se eu abrir o meu programa chamado gedit -
este é o meu editor gráfico.
E eu posso fazer isso -
deixe-me fechar a janela lá -
por meio deste ícone aqui em baixo, gedit, no canto inferior esquerdo
canto ao lado do menu.
>> Eu estou indo para ir em frente e avançar, e salvar este exemplo em, digamos, John
Pasta de Harvard.
Pasta de John Harvard é apenas a sua casa diretório onde todos os seus arquivos de viver
por padrão.
E eu vou guardá-lo como um arquivo chamado Olá-0.C.
E eu escolhi esse nome só por isso alinha com o código de exemplo na
site do curso e na YouTube vídeos online.
>> Então agora eu vou começar a escrever o meu primeiro programa.
Deixe-me aproximar para legibilidade.
E eu estou indo para ir em frente e dizer int void main, que é assim mesmo
amarelo peça do puzzle que inicia um programa.
Eu comecei o hábito ao longo do anos de abertura meu chaveta, em seguida,
também fechá-lo e, em seguida, voltar para onde eu quero colocar o meu código, basta
porque isso me ajuda a manter tudo equilibrada, especialmente meu
programa fica muito tempo.
>> E agora, aqui, eu estou indo para ir em frente e dizer, printf, citar unquote,
Olá mundo, barra-n, perto citação, Fechar parênteses, ponto e vírgula.
Então, eu estou apenas repetindo tudo o que temos tomado como certo até agora.
Agora vou para diminuir o zoom.
>> E essa janela de terminal aqui em baixo, o que estou autorizado a fazer nesta preto
ea janela de branco?
O que eu posso usá-lo?
Portanto, este é o lugar onde eu executar comandos e onde eu possa compilar as coisas.
E eu vou mantê-lo simples.
Eu vou usar um programa chamado Make, o que não é
tecnicamente um compilador.
Chamado Clang do compilador, mas vamos voltar a isso em um
semana ou tempo de dois.
>> Por agora, eu só vou digitar fazer Olá-0, mas aqueles que foram
comparando em suas mentes o que eu digitado com o que eu deveria ter digitado pode
já sei que eu fiz algo errado aqui.
Agora, há claramente alguns erros.
Antes mesmo de olhar para o que eles são, de qualquer pensamentos sobre o que eu fiz de errado?
>> ESTUDANTES: [interpondo VOZES].
>> DAVID MALAN: Yeah.
Eu estou sentindo falta de arquivo de cabeçalho da biblioteca.
Qualquer um desses arquivos h. São chamados de cabeçalho arquivos, e eles coletivamente
pertencem a coisas chamadas bibliotecas.
Bibliotecas são apenas pedaços de código que outras pessoas escreveram.
Assim, o padrão de [? i?] é uma biblioteca coleção de arquivos que contenham código
que outras pessoas escreveram.
>> Então, eu estou sentindo falta disso.
Então por que estou recebendo um erro?
Bem, deixe-me voltar para cima em minha janela do terminal aqui.
E, infelizmente, no C, como em um monte de linguagens de programação, especialmente
se é tudo novo para você, o erro mensagens são precisos, mas eles também são
bastante enigmática.
E o erro aqui, em vermelho, é "Função de biblioteca implicitamente declarando
printf com o tipo ", e então rola para a próxima linha, "int const char *,
... "Ele só fica realmente esmagadora rapidamente.
>> Mas o que você deve começar a fazer, se, novo, novo para tudo isso, é apenas para
começar a procurar palavras-chave.
Obviamente, eu não poderia entender a metade as palavras que eu estou vendo ainda.
Você vai, no entanto, dentro de uma semana.
Mas vejo printf.
E isso deve começar, em pouco tempo, a refrescar sua memória, tudo bem, printf.
Algo está errado com printf.
Será que eu soletrar errado?
Não, ele não se parece com - oh.
Eu não posso usá-lo, a menos que eu ensino o compilador que ele existe.
E assim, mais uma vez, vá com seus instintos, mesmo se você realmente não entendo
as mensagens de erro reais.
>> E, de fato, a solução aqui é apenas incluí-lo na parte superior do arquivo
assim, resaving meu arquivo com Control-S ou no menu Arquivo.
E se eu agora voltar aqui, Vou esclarecer isso.
Control-L é apenas uma maneira agradável para limpar a tela.
E então eu vou escrever "Olá fazer 0 "Enter, e agora eu ainda vejo um
seqüência enigmática de símbolos, mas vamos voltar a isso.
Isso é o que fazem está fazendo por você.
É a automatização o processo de tomada um comando bastante chato envolvendo
Clang, o compilador real.
Mas o fato de que eu não tenho erros significa que essa coisa deve funcionar.
>> Então, eu estou indo agora para fazer - deixe-me aproximar novamente -
./hello-0 Enter, e, na verdade, eu vejo "Olá, mundo". Então, vamos agora melhorar
este nunca tão pouco apenas para replicar os passos que pretendia.
Vou mudar o nome deste com Salvar como para hello1.c.
E agora eu vou declarar uma variável chamou o nome, por isso o nome string,
e eu vou colocar nele o valor entre aspas
D-A-V-I-D close-quote ponto e vírgula.
E agora eu estou indo para substituir o "mundo" com o espaço reservado para uma string?
% S.
>> E agora, quantos argumentos devem printf aproveitar este momento?
Assim, dois.
Então eu ir para fora das aspas.
Eu digito "nome" depois de uma vírgula.
Mas eu fiz algo mais errado neste momento.
Mas vamos supor que eu não fiz perceber isso ainda.
Deixe-me ir até aqui.
>> E notem, também, eu estou ficando um pouco cansar de digitar "fazer Olá 0" todo o
tempo, "fazer" e tudo isso.
Assim, verifica-se, na Linus você pode muitas vezes bater a seta para cima no seu
teclado, e você pode realmente rolar através de todos os comandos que eu
executado anterior para agora.
Então, se eu fizer isso, Cima, Cima, há fazer Olá 0.
Eu não quero isso.
Eu só quero mudar isso para Olá 1 neste momento, Enter.
Eventualmente, isso vai poupar algum tempo.
>> Tudo bem.
Infelizmente, não é um erro.
Então deixe-me ir para cima.
Este parece que eu realmente massacrado este programa.
Quero dizer, meu Deus, é duas linhas de código, e suas 10 linhas de erros.
Mas olhe para o alto primeiro.
Uso de cadeia do identificador não declarado.
Será que eu quero dizer padrão i n?
Não, eu não fiz.
Eu quis dizer string.
>> Mas onde está a variável de cadeia tipo declarado, DD podemos dizer?
Portanto, é no CS50 da biblioteca.
Por isso, não é suficiente, nesses primeiros par de semanas, apenas para usar
C o que nos dá.
Eu também estou indo para ir até aqui, e eu poderia colocá-lo acima ou abaixo, mas vou
apenas mantê-lo alfabética para manter as coisas em ordem.
Eu estou indo para incluir cs50.h, que é pré-instalado para
você no aparelho CS50.
E é open source, por isso mesmo as pessoas na internet pode usá-lo na sua
computadores próprios.
Mas ele vem com o aparelho CS50.
>> Então, agora deixe-me voltar e recompilar Olá fazer isso com um.
Droga.
Ainda outro erro.
Deixe-me ir até o primeiro, no entanto.
Essa é um pouco complexo.
Constante carácter multi-caráter.
Isso não está me ajudando.
Mas aviso, Clang é pelo menos um pouco pouco decente, em que com um pouco de
verde símbolo de acento circunflexo, ele está dizendo aqui é onde eu estraguei tudo.
Por que é apontar, com esse pequeno Arqueiro Verde, para o apóstrofo próximo
para o meu nome?
>> Portanto, esta é uma das coisas que você apenas se acostumar, especialmente se você tiver sido
programação em Python, ou JavaScript, ou outras línguas onde este detalhe
não importa.
Em C, ele não importa.
Se você declarar uma string, que é uma seqüência de 0 ou mais caracteres,
você realmente deve usar aspas duplas.
Então, eu realmente preciso mudar isso de volta para abrir citação, feche citação, com
aspas duplas.
As aspas simples têm o seu lugar, mas somente quando você estiver usando indivíduo
caracteres, mas mais sobre isso outra hora.
Por enquanto, as aspas duplas são necessárias.
>> Então, agora, deixe-me voltar ao meu terminal janela, faça Olá 1.
E quem é confiante?
É este programa agora vai para compilar corretamente?
OK.
Assim, três de nós pensamos isso.
Tudo bem.
Enter.
E ele realmente fez.
Portanto, não há nenhum erro desta vez, mesmo que este programa está ficando um pouco
mais complexa.
Se eu agora fazer ponto barra 1 Olá, Enter ele vai dizer "Olá, David."
>> Mas vamos fazer a terceira iteração Daí que, quando a
programa é realmente dinâmica.
Deixe-me ir em frente e mudar o arquivo nome, apenas por coerência com a
arquivos que você terá disponível para você depois online.
Enter.
E agora eu estou indo para ir e não armazenar "David" codificado aqui.
O que eu poderia fazer para muito simplesmente melhorar este programa?
>> Eu poderia chamar getstring.
Ele pode ser um pouco o que não é óbvio prestes a acontecer, então eu vou
para realmente adicionar outra linha, printf, e dizer o nome, cólon, próximo citação, apenas
para dar ao usuário um prompt no ecrã.
E agora eu estou indo para ir aqui, e eu estou vai usar o meu atalho de teclado.
Eu estou indo para ir para cima, para cima, e mudar Olá Olá 1 a 2, Enter.
E, felizmente, estou fazendo progresso.
>> E agora eu vou subir a ponto barra Olá e
mudar isso a 2, Enter.
E agora o meu programa -
Eu vou fazer zoom in - está ficando um pouco mais bonita.
Nome vai ser, digamos Rob Neste momento, entra, Olá, Rob.
Nós podemos fazê-lo novamente.
Nome, Lauren, Enter.
Nome: José, Enter.
Nome, vamos tentar ser difícil, Enter.
Eh.
Não é realmente um bug.
Então é um pouco feio.
Então talvez possamos resolver este no futuro, não agora.
>> Mas como é que você instintivamente percorrer cerca de endereçamento
esse desafio particular?
Ele apenas parece estúpido.
Como você evita coisas olhar estúpido?
Assim nós poderíamos fazer, OK, eu ouvi um casal coisas, uma condição e um loop.
Nós poderíamos usar, uma, uma condição, para verificar o que é o comprimento da cadeia
o usuário nos deu?
E se for 0, ele é apenas citar unquote, eles apenas pressione Enter, em seguida,
talvez eu deveria gritar com eles e levá-los novamente.
Mas como a levá-los de novo?
Bem, eu também ouvi loop, e eu podia fazer isso de novo e de novo e de novo
avisar o usuário para a mesma coisa.
>> Bem, vamos fazer um outro exemplo usando uma diferente
função na biblioteca CS50.
Deixe-me encerrar este processo.
Deixe-me criar um novo.
E eu vou chamá-lo de adder.c, só porque é fácil de fazer aritmética simples,
mesmo que isso será completamente abaixo do esperado com o que você poderia fazer
com qualquer computador moderno.
>> Mas deixe-me ir em frente agora e -
Eu aprendi minha lição última vez - incluem cs50.h, include stdio.h, int
void main, que, por enquanto, eu vou assumir uma fé cega, mas vamos assumir
que vai entender o que isso significa que antes do tempo.
E eu vou dizer uma coisa como "dá-me um int."
>> E agora, como faço para obter um int?
Quero, finalmente, declarar uma variável chamada x de tipo int e
nela armazenar um número inteiro a partir do utilizador.
Então isso foi um bocado.
Mas se alguém quer propor, como faço para declarar um inteiro chamado x?
X INT.
>> Então, ele realmente é tão simples.
Dê-me um int.
Chame-x.
Agora eu uso o operador de atribuição.
E como faço para armazenar a partir do deixado um valor do utilizador?
Eu não quero chamar getstring, obviamente, mas sim getInt.
Quaisquer argumentos?
Não.
Por isso, é aberto parêntese, perto paren de imediato, e em seguida, uma
vírgula termina a linha.
>> Agora, deixe-me fazer isso de novo.
Dê-me outra int.
Desta vez eu vou fazer int, vamos chamá-lo de y, é igual a getInt.
E agora deixe-me fazer uma coisa super-simples como um pouco de matemática.
Assim printf, a soma das% d é o espaço reservado para um int.
E% d, período, barra-n.
>> Tudo bem.
Então, isso não é verdade matemática.
Mas se eu quero dizer que a soma deste valor mais este valor é igual a este
outro valor, quantos argumentos em total de que eu deveria estar dando printf,
em última instância?
Assim, quatro, certo?
Esta cadeia e, em seguida, os três valores.
Então x é o primeiro que eu quero ser conectados pela primeira vez ao% d.
y vai ser o próximo.
>> E agora eu meio que quero dizer z, z, mas não existe.
Mas isso não é um grande negócio.
Porque o que você faz instintivamente, especialmente se você tivesse um
calculadora gráfica, o que você digita?
Como cerca de x + y?
Portanto, não é uma variável real.
É apenas a soma de dois outras variáveis.
E isso é perfeitamente legítimo.
C certamente entende simples aritmética assim.
>> Ponto e vírgula, salve.
Agora, deixe-me ir para baixo aqui e digite make víbora, Enter.
Nenhum erro, de modo que é um progresso também.
Digite víbora.
E um outro atalho de teclado, se você começar a se cansar
com todos os comandos -
Se você começa a digitar um comando, como ponto reduzir anúncio, e é aí que o seu
tédio entra em ação, você geralmente pode bater Tab para que o computador terminar a
descansar da frase para você, se não é ambíguo que deve vir depois do anúncio.
>> Então deixe-me ir em frente agora e clicar em Enter.
Dê-me um int, 1, 2, e Felizmente, é 3.
Mas, como sempre, os programas de testes não deve reduzir a
apenas experimentá-lo uma vez.
Deixe-me tentar um caso extremo, como negativo 1, dá-me um, e que um
verifica também.
E eu provavelmente vai querer fazer um pouco mais testes rigorosos, mas estou bastante
confortável com o local onde isso está.
>> Bem, agora vamos tentar outro programa que desta vez utiliza um
bit de outra sintaxe.
Deixe-me criar um novo arquivo.
Vou chamar esta conditions0.c para alinhar com um código de exemplo online.
E deixe-me ir em frente e fazer incluem cs50.h incluem
stdio.h, em void main -
OK.
Lá vamos nós.
Temos o nosso clichê padrão.
>> E dessa vez eu vou dizer printf, "Eu gostaria de um int, por favor", apenas para
fazer o prompt de um pouco mais amigável.
E agora eu quero ter uma int do usuário.
Vou chamá-lo de n este tempo, apenas porque n soa como número.
getInt, e agora, o que fazer Eu quero fazer com ele?
Bem, se n é - e eu vou fazer zoom in -
se n for maior do que 0, quero fazer o seguinte -
printf "Você escolheu um número positivo." Senão, eu vou digitar printf "Você
escolheu um negativo
número. "Tudo bem.
Portanto, este programa, embora eu fiz isso rápido, parece certo sintaticamente.
Deixe-me tentar isso.
Faça condição 0.
Parece estar a correr.
Condição 0, entrar.
Vamos dar-lhe um int de 50.
Eu escolhi um número positivo.
Vamos tentar novamente.
Estado 0.
Negativo 50.
Eu escolhi um número negativo.
>> Mas agora, deixe-me escolher o que vamos continuar chamando um caso de canto, que é mais
um caso interessante que você pensa pode dar-lhe alguns problemas, 0.
Agora, eu tenho certeza que este é um dos Nesses casos canto onde zero é
nem positivo nem negativo, então minha programa, embora em sintaticamente
corrigir - ele compila, ele roda - não é logicamente correta.
Então qual é a solução simples aqui se eu quiser para detectar, se eu quiser manipular n
é igual a 0 separadamente?
>> Assim, se n é igual a 0, então eu quero dizer algo como printf "Você escolheu a 0."
Deixe-me tentar isso agora.
Deixe-me voltar aqui, desmarque minha janela, e recompilar.
Hm.
Um erro gerar.
Mas eu quiser verificar se n for igual a 0.
>> Então, novamente, outra coisa estúpida para se acostumar, é sinal de igual
o operador de atribuição.
Portanto, este é realmente erro em que, tecnicamente, embora o compilador
protegeu-me de mim mesmo, nós ser tecnicamente copiar 0 em n, que
não é o que eu quero.
Eu quero testar a igualdade com iguais iguais.
E para que agora pode ser o meu melhor solução.
>> Deixe-me realmente salve isso como, por exemplo, conditions1, para ser novo e melhorado.
Portanto, agora se eu recompilar isso, faria condições -
gritos - fazer conditions1 dot barra conditions1, Enter, "Eu gostaria de um int,
por favor. "Eu estou indo para ir frente e digite 50.
Ele ainda é bom.
Negativo 50, ainda bem.
0, e, de facto, detectaram que eu peguei 0.
>> Então, o que mais pode agora eu faço com isso?
Bem, nós certamente podemos fazer cada vez mais coisas complexas.
Mas o que eu gostaria de propor é que vamos acabar com esta nota aqui.
Se puxar isso, você vai ver, talvez, uma caricatura sua favorita
até hoje você pode nunca entendi.
E isso é sobre a qualidade do riso você deve começar com piadas CS.
Então, isso é certo.
>> Mas o mais convincente, eu pensei que tinha nos dar um pouco de provocação para segunda-feira.
Então nós começamos com números inteiros.
Nós já referido carros alegóricos.
Temos ainda referido duplas, que, mais uma vez, dar-lhe números
após os pontos decimais.
>> Mas acontece que os carros alegóricos e duplas, e, realmente, computadores,
fundamentalmente, não pode expressar alguns valores precisamente.
Sabemos de aulas de matemática que você pode ter qualquer número de números após o
ponto decimal.
E você ainda pode colocar uma barra vertical para dizer que estes vão para sempre.
>> Infelizmente, você não pode realmente fazer isso em um computador.
E assim surgem casos de canto.
Por exemplo, suponha que você está fazendo algo financeira.
Você está fazendo matemática com porcentagens e
com dólares e centavos.
E os centavos não linha necessariamente up.
Pois bem, verifica-se que as frações de tostões pode começar a somar quando
modelado com um sistema de computador de tal forma que inteligente
os seres humanos podem tirar proveito.
>> E aqueles de vocês que ainda não viram, eu gostaria de lhe dar um teaser de 30 segundos de
um filme maravilhoso, conhecido como Office Space, que vai pintar um retrato de um
problema que deve enfrentar primeira coisa que na segunda-feira.
Se pudéssemos aumentar o volume um pouco, dou-lhe 30
segundos de espaço de escritório.
>> [REPRODUÇÃO]
>> -Quero dizer, você, você não se mostrando e você consegue manter o seu emprego.
>> -Na verdade, estou sendo promovido.
>> -Eu poderia programar um vírus que tinha rasgar aquele lugar fora um grande momento.
>> -Bem, como é que funciona?
>> -Toda vez que há uma transação bancária onde o interesse é calculado, e não
são milhares por dia, o computador termina com essas frações de um centavo.
>> -Mas eu não vou fazer qualquer coisa ilegal.
>> -Ilegal?
Samir, este é a América.
>> -Temos de juro por Deus.
>> -Se ninguém sabe sobre isso mas nós, certo?
Nenhum membro da família, sem namoradas, ninguém.
>> -Claro.
>> -Concordo.
>> -Não se preocupe, cara.
Eu não vou contar a ninguém quer.
>> [FIM REPRODUÇÃO DE VÍDEO]
>> DAVID MALAN: Então este é, então, CS50, que era Office Space, e tudo vai
fazer sentido na segunda-feira.
Vejo vocês depois.
>> Narrador: Na próxima CS50, Rob ajusta-se estar fora do
Harvard plano de refeição.