Engenharia de CONTROLE e AUTOMAÇÃO Introdução à Linguagem C Aula 03 DPEE 1038 – Estrutura de Dados para Automação Curso de Engenharia de Controle e Automação Universidade Federal de Santa Maria Prof. Rafael Concatto Beltrame [email protected] 1/5 Sumário • Matrizes – Unidimensional (vetor) – Multidimensional – Limites de matrizes • Manipulação de strings – gets( ); puts( ); strcat( ); strcpy (); strcmp( ); • Ponteiros – Declaração e manipulação • Funções – Funções sem retorno e com retorno de dados – Chamada por referência (ponteiros) • Classe de variáveis Prof. Rafael Concatto Beltrame 2 1/5 Matrizes • Matriz Unidimensional (Vetor) tipo nome[tamanho] – As matrizes empregam o índice 0 para o primeiro elemento – Os índices de uma matriz de 10 elementos variam, então, de 0 a 9 – Exemplo main() { int t, x[10]; for(t=0; t<=9; t++) } Prof. Rafael Concatto Beltrame { x[t]=t + 10; } 3 1/5 Matrizes • Matriz Multidimensional tipo nome[tamanho][tamanho]... – Funciona como uma “pilha” de vetores – Exemplo main() { int t, p=0, x[10][10]; for(t=0; t<=9; t++, p++) { x[t][p]=t*p; printf("%d \n", x[t][p]); } } Prof. Rafael Concatto Beltrame 4 1/5 Matrizes • Limites de Matrizes – A verificação de limites não é realizada automaticamente em C – Não são emitidas mensagens de alerta – O programa deve testar os limites de modo correto main() { int i, erro[10]; // Cuidado! Uso indevido da memória for(i=0; i<100; i++) { erro[i]=1; printf("%d \n", erro[i]); } } Prof. Rafael Concatto Beltrame 5 1/5 Manipulação de Strings • Em C não existe um tipo de dado “string” – Usa‐se, então, uma matriz de characteres “char” – Uma string é uma matriz do tipo char que termina com ‘\0’ • O ‘\0’ é colocado pelo compilador • Deve conter uma posição a mais que o nº de caracteres desejado main() { static re[]="engenharia"; puts(re); // Escreve na tela puts(&re[0]); // Endereço inicial putchar('\n'); // Quabra linha } Prof. Rafael Concatto Beltrame 6 1/5 Manipulação de Strings • gets( ) gets(nome_matriz); – Utilizada para a leitura de uma string após o ENTER – Não testa limites da matriz! main() { char str[80]; gets(str); // Lê e salva em "str" printf("%s", str); } Prof. Rafael Concatto Beltrame 7 1/5 Manipulação de Strings • puts( ) puts(nome_vetor_caracteres); – Escreve seu argumento do dispositivo de saída (tela) – Coloca um ‘\n’ ao final – Reconhece os códigos de barra invertida main() { char str[80]; gets(str); // Lê e salva em "str" puts(str); // Escreve na tela } Prof. Rafael Concatto Beltrame 8 1/5 Manipulação de Strings • strcpy( ) strcpy(destino, origem); – Copia o conteúdo de uma string (origem) e salva na string destino – “origem” pode ser uma “string explícita” main() { char str[80]; strcpy(str, "alo"); // Copia "alo" puts(str); } Prof. Rafael Concatto Beltrame 9 1/5 Manipulação de Strings • strcat( ) strcat(string_1, string_2); – Concatena (une) duas strings – Salva o resultado em “string_1” main() { char str1[20], str2[10]; strcpy(str1, "bom"); // Dimensão 20 strcpy(str2, " dia"); // Dimensão 10 strcat(str1, str2); // Concatenação printf("%s \n", str1); } Prof. Rafael Concatto Beltrame 10 1/5 Manipulação de Strings • strcmp( ) strcmp(string_1, string_2); – Compara duas strings. Se forem iguais, retorna 0 main() { char senha[80]; printf("Digite a senha: "); gets(senha); if ( strcmp(senha, "engenharia") ) printf("Senha inválida \n"); else printf("Senha correta! \n"); } Prof. Rafael Concatto Beltrame 11 1/5 Ponteiros • Sintaxe tipo *nome_variavel; – É uma variável que conterá o endereço de outra variável – Úteis em alocação dinâmica de dados (a partir do endereço inicial) – Maneira pela qual as funções podem modificar argumentos • Declaração int x, *pnt_x; pnt_x = &x; – Se uma variável irá conter um ponteiro, ela deve ser explicitamente declarada como tal Prof. Rafael Concatto Beltrame 12 1/5 Ponteiros • Observação // Notar que y = x; // É a mesma coisa que y = *pnt_x; Prof. Rafael Concatto Beltrame 13 1/5 Ponteiros • Manipulação de ponteiros – Podem ser manipulados como qualquer variável – Exemplos main() { int x,*pnt_x,*pnt_y; // Declarações x=9; // Atribuições pnt_x=&x; pnt_y=pnt_x; printf("x=%d \n", x); // Val. printf("&x=%d \n", &x); // End. printf("pnt_x=%d \n", pnt_x); // End. printf("*pnt_x=%d \n", *pnt_x); // Val. } Prof. Rafael Concatto Beltrame x x x x 14 1/5 Funções • Características – É uma unidade autônoma de código do programa – É projetada para cumprir uma tarefa particular – Geralmente os programas em C consistem em várias pequenas funções – A declaração do tipo da função é obrigatória no C – Os parâmetros de recepção de valores são separados por vírgulas • Sintaxe tipo nome_funcao(parametro1, parametro2, etc) { comandos; } Prof. Rafael Concatto Beltrame 15 1/5 Funções • Função sem retorno – Quando uma função não retorna valor, ela é declarada como void void fc_inverso(a) // Função inverso // Declaração float a; { printf("Resultado = %f \n", 1/a); } //----------------------------------------// main() // Função main { float x; fc_inverso(x); ... } Prof. Rafael Concatto Beltrame 16 1/5 Funções • Função com retorno – Quando uma função retorna valor. Declarar seu tipo float fc_inverso(a) // Função inverso // Declaração float a; { return(1/a); // Dado retornado } //----------------------------------------// main() // Função main { float x, z; z = fc_inverso(x); ... } Prof. Rafael Concatto Beltrame 17 1/5 Funções • Chamada por referência (emprego de ponteiros) – Quando uma função altera variáveis externas a ela void fc_inverso(a) // Função inverso float *a; // Declaração { *a = 1/(*a); // Dado alterado } //----------------------------------------// main() // Função main { float x; fc_inverso(&x) printf("O valor inversor é %f", x); ... } Prof. Rafael Concatto Beltrame 18 1/5 Classe de Variáveis • Considerações – Uma função pode chamar outras funções • • • O código que compreende o corpo de uma função ( bloco { } ) está oculto ao restante do programa Não pode afetar nem ser afetado por outras partes do programa Variáveis locais – São declaradas dentro de uma função – Existem apenas localmente (na função) e são armazenadas na pilha main() { float x; ... } Prof. Rafael Concatto Beltrame // Variável local 19 1/5 Classe de Variáveis • Variáveis globais – São declaradas fora de uma função – São conhecidas por todo o programa – São armazenadas em uma região fixa da memória int cont; void function_1() { ... } // Variável global // Todas as funções tem // acesso à “int” void function_2() { ... } main() { ... } Prof. Rafael Concatto Beltrame 20 1/5 Revisão • Matrizes – Vetores e matriz multidimensional – Verificar os limites! • Manipulação de strings – gets( ); puts( ); strcat( ); strcpy (); strcmp( ); • Ponteiros – “Aponta” para um endereço de memória – Usados para acessar o conteúdo de variáveis de outras funções • Funções – Funções sem retorno (void) e com retorno de dados (tipo) • Classe de variáveis – Locais e globais Prof. Rafael Concatto Beltrame 21