Computação 1  —   Linguagem C   —  2022/1

Página principal

Informações


Conteúdo das aulas

12/04


Conversa inicial sobre o curso. Apresentação da ementa. Linguagens compiladas e interpretadas. Alguns prós e contras da linguagem C.  
 

14/04


LAB 1.
Variáveis do tipo int. Saída de dados via printf(). Declarando funções que retornam algo e funções que nada retornam (void).

Programando sem muitos recursos num editor de texto como o vi e compilando pelo terminal: "gcc -o arquivo_executavel codigo_fonte.c"
A função main(). Exemplo de programa simples: o famigerado "Hello World", depois um simples cálculo de Índice de Massa Corporal.

Código feito em sala de aula no GitHub.  
 

26/04


Um pouco mais sobre declaração de variáveis e atribuições. Escopo das variáveis.
Condicional com if e com if...else.
Operadores ==, >, >=, <, <=.  
 

28/04


LAB 2.
Exercitando condicionais, entrada via scanf e saída via printf.
Laços com o while. As instruções break e continue dentro de um laço.  
 

30/04


Sexta-Feira Remota de código com o professor: exercitando tudo que vimos até aqui, e introduzindo comentários (em linha e em bloco) no código.

Gravação da aula no Google Drive.
Código escrito durante a aula no GitHub.  
 

03/05


Loops com for.
Operadores ++, --, +=, -=.

Exercício em sala de aula: Fizz-Buzz. Comparando soluções.  
 

05/05


LAB 3.
(1) Escreva uma função que diga se um número inteiro, passado como parâmetro, é um número primo.
(2) Escreva a função main(), pedindo números para o usuário, e classificando-os como primo ou não-primo.
(3) Liste todos os primos menores ou iguais ao número digitado pelo usuário.

Solução proposta em sala de aula no GitHub.  
 

06/05


Comentários sobre como melhorar a performance da função que descobre se um número é primo: testando divisibilidade apenas por 2 e pelos ímpares menores que a raiz quadrada do número. Obtendo a raiz quadrada via sqrt(), da biblioteca math.h (que precisa ser incluída via #include).

Arrays estáticos e dinâmicos. Declaração, alocação de memória e devolução da memória.
Como "crescer" um array? Não é possível. Não dá pra fazer um "puxadinho"; é preciso alocar novo array e copiar tudo do velho para o novo.  
 

10/05


Ponteiros.
Passagem de parâmetros para funções por valor versus por referência.  
 

12/05


LAB 4.
Treinando passagem por valor versus passagem por referência.

Para casa: escrever uma função que receba um array como parâmetro e inverta as k primeiras posições desse array, para um k dado.  
 

13/05


Três maneiras de se atribuir valor a uma variável declarada como um ponteiro:
(1) copiando o endereço de outra variável já existente;
(2) alocando memória explicitamente;
(3) copiando outro ponteiro.

Exercício ilustrando passagem de parâmetros por valor e por referência.
Solução do problema final do LAB 4.
Gravação da aula no Google Drive.  
 

20/05


LAB 5 (execpcionalmente numa sexta-feira, devido às duas aulas perdidas na semana).

Treinando quase tudo.
O problema dos armários.

Fazendo com que uma mesma função retorne mais de um valor, via parâmetros passados por referência.
O problema das temperaturas.

Gravação da aula no Google Drive.  
 

24/05


Arrays sendo passados como parâmetros. Arrays multidimensionais.
Código escrito durante a aula.

Gravação da aula no Google Drive.  
 

26/05


LAB 6.
Um sisteminha bancário. Enunciado no próprio arquivo.  
 

27/05


Solução do LAB 6 (vide arquivo apresentado na aula anterior).
Arrays "paralelos".
Variáveis globais.

Gravação da aula no Google Drive.  
 

31/05


Arrays multidimensionais dinâmicos.

Gravação da aula no Google Drive.  
 

02/06


Resolução da lista de exercícios (prova de 2014).

Aprendendo a gerar números aleatórios com o rand(), e inicializando o gerador com srand(time(NULL)).

Gravação da aula no Google Drive.  
 

03/06


Aula de exercícios. Diversos exercícios curtos.

Gravação da aula no Google Drive.  
 

07/06


Recursão: funções que chamam a si próprias. Definindo a base da recursão. Usando memoização para evitar resolver o mesmo subproblema repetidas vezes. Exemplos: fatorial, Fibonacci.
Outros exercícios incluíram cálculo do número de combinações de n, k a k, Triângulo de Pascal.

Gravação da aula no Google Drive.  
 

09/06


LAB 7.
Como inicializar corretamente o gerador de números aleatórios.
Usando o switch..case. Exercício: um trio contra dois pares consecutivos.  
 

10/06


P1.  
 

Segunda parte do curso, de 14/06 15/07


Infelizmente não fiz o registro aula-a-aula aqui, por conta de diversas complicações de saúde, minha e de minha esposa, como é do conhecimento de todos.

A matéria coberta durante essa segunda parte compreendeu:
- strings em C: arrays de caracteres, byte 0 como terminação; as principais funções da biblioteca strings.h;
- structs: definindo tipos de dados compostos; passagem de structs por valor e por referência; uso do typedef; structs que referem-se a si próprias; ponteiros para structs e o uso do p->campo ao invés de (*p).campo, onde p é um ponteiro para uma struct;
- argumentos passados na linha de comando;
- redirecionamento da entrada e da saída do programa para arquivos.

Voltar ao topo