Linguagem C
UnB-\(\gamma\)
Table of Contents
1. Preâmbulo
Este é um material em construção a respeito de dicas e material sobre a Linguagem C.
Nesta página você encontrará links para vídeos e materiais de ajuda, bem como exercícios relacionado ao conteúdo.
Este material começou a ser feito e por isso será atualizado constantemente.
Tenho disponibilizado vários materiais em meu canal no YouTube, por favor, considere assinar o canal e deixar o joinha :)
2. SCANF
O SCANF
é uma poderosa função capaz de ler dados da entrada padrão
(e de outros arquivos com suas aliases como fscanf(3)
.
Na série Detonando o SCANF temos, além do uso básico da função abordo algumas curiosidades sobre as funções.
3. Strings em C
Aqui um apanhando geral em como se manipula strings na linguagem C. Em uma série que chamei de "Umas Palavras sobre String"
4. Ponteiros
Segue abaixo a playlist da revisão de ponteiros no Youtube. Por ora são 5 vídeos que exploram o que é necessário saber para a disciplina de EDA-2.
4.1. Introdução
4.1.1. Exercícios
- Responda as perguntas abaixo. Se achar necessário, faça testes no
computador.
- Explique a diferença entre
p++
;(*p)++
;*(p++)
;
- O que quer dizer
*(p+10)
;? - Explique o que você entendeu da comparação entre ponteiros
- Explique a diferença entre
Qual o valor de
y
no final do programa? Tente primeiro descobrir e depois verifique no computador o resultado.int main(void) { int y, *p, x; y = 0; p = &y; x = *p; x = 4; (*p)++; x; (*p) += x; printf ("y = %d\n", y); return 0; }
Diga quais expressões abaixo são válidas ou não. Considere as declarações:
int vetor[10]; int *ponteiro;
vetor = vetor +2;
vetor++;
vetor = ponteiro;
ponteiro = vetor;
ponteiro = vetor+2;
Explique o que faz o programa abaixo
int main(void){ float vet[5] = {1.1,2.2,3.3,4.4,5.5}; float *f; int i; f = vet; printf("contador/valor/valor/endereco/endereco\n"); for(i = 0 ; i <= 4 ; i++){ printf("i = %d",i); printf(" vet[%d] = %.1f",i, vet[i]); printf(" *(f + %d) = %.1f",i, *(f+i)); printf(" &vet[%d] = %X",i, &vet[i]); printf(" (f + %d) = %X\n",i, f+i); } return 0; }
- Assumindo que
M1[]
é um vetor do tipoint
, quais das seguintes expressões referenciam o valor do terceiro elemento deM1
?*(M1 + 2)
*(M1 + 4)
M1 + 4
M1 + 2
- Seja vet um vetor de 4 elementos:
TIPO vet[4]
. Supor que depois da declaração, vet esteja armazenado no endereço de memória4092
(ou seja, o endereço devet[0]
). Supor também que na máquina usada uma variável do tipochar
ocupa1 byte
, do tipoint
ocupa2 bytes
, do tipofloat
ocupa4 bytes
e do tipodouble
ocupa8 bytes
.- Qual o valor de
vet+1
,vet+2
evet+3
se:vet
for declarado comochar
?vet
for declarado comoint
?vet
for declarado comofloat
?vet
for declarado comodouble
?
- Qual o valor de
Verifique o programa abaixo. Encontre o seu erro e corrijao para que escreva o numero \(10\) na tela.
#include <stdio.h> int main(void) { int x, *p, **q; p = &x; q = &p; x = 10; printf("%d\n", &q); return 0; }
- Exercícios inspirados da lista http://www.inf.ufes.br/~santos/files/active/0/lista-3.pdf
4.2. Alocação de Memória
4.2.1. Exercícios
- Resolva os exercícios de http://www.ime.usp.br/~pf/algoritmos/aulas/aloca.html
- Faça uma rotina que aloque memória dinamicamente e atribua o
endereço alocado à uma variável
pt
. Em seguida mostre no monitor o endereço alocado (use%p
, de pointer).- Coloque a linha de alocação e impressão dentro de um
for
e observe:- os endereçoes alocados;
- o estouro de memória disponível quanto
pt=0
- Coloque a linha de alocação e impressão dentro de um
- Escreva um programa que leia da entrada padrão um vetor de notas (números reais) e imprima a média aritmética das notas. Importante: Não deve ocorrer desperdício de memória; e após ser utilizada a memória deve ser devolvida.
- Escreva um programa que calcule a soma de duas matrizes MxN de números reais (double). A implementação deste programa deve considerar as dimensões fornecidas pela entrada padrão. (Dica: aloque a matriz usando alocação dinâmica de memória).
- Implemente uma função
concat()
que concatena 2 (dois) strings recebidos como argumentos. A função deve retornar um ponteiro para o string resultante da concatenação. O espaço para o resultado deve ser alocado dinamicamente pela função. Use ponteiros o máximo possível. - O programa matsoma01.c calcula a soma de duas matrizes 5x5 de
números reais (double). Mude a implementação deste programa de forma
que a dimensão da matriz seja fornecida pelo usuário na linha de
comando e que a matriz seja representada no programa através de
variáveis do tipo
double **
, usando alocação dinâmica de memória.