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
yno 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 + 4M1 + 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 tipocharocupa1 byte, do tipointocupa2 bytes, do tipofloatocupa4 bytese do tipodoubleocupa8 bytes.- Qual o valor de
vet+1,vet+2evet+3se:vetfor declarado comochar?vetfor declarado comoint?vetfor declarado comofloat?vetfor 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
fore 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.