Programação
Folha de Consulta
Variáveis
Operadores
Operador | Descrição | Exemplo | Operador | Descrição | Exemplo |
---|---|---|---|---|---|
+ | Soma | a + b | == | Igual | a == b |
- | Subtração | a - b | != | Diferente | a != b |
* | Multiplicação | a * b | > | Maior | a > b |
/ | Divisão | a / b | < | Menor | a < b |
% | Resto da divisão | a % b | >= | Maior ou igual | a >= b |
++ | Incremento | a++ | && | E | a && b |
– | Decremento | a– | || | OU | a || b |
= | Atribuição | a = b | ! | NÃO | !a |
+= | Atribuição com soma | a += b | |||
-= | Atribuição com subtração | a -= b | |||
*= | Atribuição com multiplicação | a *= b | |||
/= | Atribuição com divisão | a /= b |
I/O Formatado
scanf("%descritor", &variavel); // lê um dado do tipo tipo_dado e armazena em variavel
printf("%descritor", variavel); // escreve um dado do tipo tipo_dado e armazena em variavel
Descritor | Tipo de dado |
---|---|
%d | int |
%f | float |
%c | char |
%s | string |
%lf | double |
%u | unsigned int |
%ld | long int |
%lu | unsigned long int |
I/O Não Formatado na consola
Estruturas de controlo
Ciclos
for
Funções
Declaração de função
Chamada de função
Vetores
Declaração de vetor
Acesso a posição do vetor
Vetores e funções
Vetores multidimensionais
int matriz[10][10]; // declara matriz de inteiros com 10 linhas e 10 colunas
matriz[0][0] = 1; // acessa a primeira linha e primeira coluna da matriz e atribui 1
int b = matriz[0][0]; // acessa a primeira linha e primeira coluna da matriz e atribui a b
void funcao(int matriz[][10][10]) { // recebe a matriz como parâmetro
// obrigatório indicar o tamanho de todas as dimensões menos a primeira
// alterações à matriz são persistentes
}
// VLAs (Variable Length Arrays)
void funcao(int x, int y, int z, int matriz[x][y][z]) {
// alterações à matriz são persistentes
}
// exemplo a percorrer uma matriz
void print_vec(int size, int array[size]){
pritnf("Conteúdo do vector: ");
for(int i = 0; i < size; i++){
printf("%d ", array[i]);
}
printf("\n");
}
Strings
char string[10]; // declara string de 10 caracteres
char string[10] = "ola"; // declara e inicializa string
char string[10] = {'o', 'l', 'a', '\0'}; // declara e inicializa string
Função | Descrição |
---|---|
strlen(string) | retorna o tamanho da string |
strcpy(string1, string2) | copia string2 para string1 |
strcat(string1, string2) | concatena string2 a string1 |
strcmp(string1, string2) | compara string1 com string2, devolve 0 se forem iguais, < 0 se string1 < string2 e > 0 se string1 > string2 |
Apontadores
Estruturas
Declaração de estrutura
Acesso a campo da estrutura
Estruturas e apontadores
typedef
Ficheiros
Abertura e fecho de ficheiro
Modos de abertura de ficheiro
- Para ficheiros binários, acrescentar b ao modo de abertura, e.g. “rb”, “wb”, “ab”, “rb+”, “wb+”, “ab+”.
Modo | Leitura | Escrita | Criação | Posicionamento |
---|---|---|---|---|
r | Sim | Não | Não | Início |
w | Não | Sim | Sim | Início |
a | Não | Sim | Sim | Fim |
r+ | Sim | Sim | Não | Início |
w+ | Sim | Sim | Sim | Início |
a+ | Sim | Sim | Sim | Fim |
Leitura e escrita formatada
int a = 10; float b = 3.14; char c = 'a'; // escreve no ficheiro os valores de a, b e c fprintf(ficheiro, "%d %f %c", a, b, c); // lê do ficheiro os valores de a, b e c // devolve EOF se apanhar o fim do ficheiro fscanf(ficheiro, "%d %f %c", &a, &b, &c); char linha[100]; // lê uma linha do ficheiro (ou um máximo de 100 char) e guarda em linha // devolve NULL se apanhar o fim do ficheiro fgets(linha, 100, ficheiro); fgetc(ficheiro); // lê um char do ficheiro fputc('a', ficheiro); // escreve um char no ficheiro fputs("ola", ficheiro); // escreve uma string no ficheiro
Leitura e escrita ficheiros binários
int a = 10; int n_lidos, n_escritos; FILE *ficheiro = fopen("nome_ficheiro", "wb"); n_escritos=fwrite(&a, sizeof(int), 1, ficheiro); // escreve no ficheiro o valor de a fclose(ficheiro); ficheiro = fopen("nome_ficheiro", "rb"); n_lidos=fread(&a, sizeof(int), 1, ficheiro); // lê do ficheiro o valor de a fclose(ficheiro);
Posicionamento no ficheiro
// posiciona o cursor no ficheiro na posição 10 fseek(ficheiro, 10, SEEK_SET); // posiciona o cursor no ficheiro 10 posições à frente da posição atual fseek(ficheiro, 10, SEEK_CUR); // posiciona o cursor no ficheiro 10 posições antes do fim do ficheiro fseek(ficheiro, -10, SEEK_END); ftell(ficheiro); // devolve a posição atual do cursor no ficheiro rewind(ficheiro); // posiciona o cursor no início do ficheiro
Alocação dinâmica de memória
// usar malloc
int *p;
p = malloc(2 * sizeof(int)); // aloca memória para 2 int
free(p); // libera a memória alocada para ponteiro
// usar calloc
int *p;
p = calloc(3, sizeof(int)); // aloca memória para 3 int e inicializa a zero
free(p);
// alocar dinâmicamente um vector bidimencional (10 linhas por 20 colunas)
int **matriz;
matriz = (int **) malloc(10 * sizeof(int *));
for (int i = 0; i < 10; i++) {
matriz[i] = (int *) malloc(20 * sizeof(int));
}
// libertar a memória alocada
for (int i = 0; i < 10; i++) {
free(matriz[i]);
}
free(matriz);
Estruturas de Dados Dinâmicas
Adicionar novo nó no final a lista ligada
Node *new_node = malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
if (head == NULL) { // lista vazia
head = new_node;
} else { // lista não vazia
Node *current = head, *prev = NULL;
while (current->next != NULL) {
prev = current;
current = current->next;
}
prev->next = new_node;
}
Fila
Funciona como FIFO (First In First Out) e pode ser implementada como uma lista ligada, em que um novo item é adicionado na cauda da lista, e qualquer item é sempre removido da cabeça da lista.
Pilha
Funciona como LIFO (Last In First Out) e pode ser implementada como uma lista ligada, em que um novo item é adicionado na cabeça da lista, e qualquer item é sempre removido da cabeça da lista.