Apostila C UFU
85 pág.

Apostila C UFU


DisciplinaIntrodução à Tecnologia da Computação26 materiais155 seguidores
Pré-visualização19 páginas
as colunas de cada linha da matriz */ 
 *(matriz+i) = (int *) malloc(col * sizeof (int)); 
 if(! *(matriz+i) ){ 
 printf("Erro! Memoria Insuficiente!"); 
 exit(1); 
 } 
 } 
 
 printf("Entre com os elementos da matriz\n"); 
 for(int i = 0; i < lin; i++) 
 { 
 for(int j = 0; j < col; j++) 
 { 
 printf(&quot;\nElemento %d %d: &quot;, i, j); 
 scanf(&quot;%d&quot;, *(matriz +i) +j); 
 } /* recebe os elementos */ 
 } 
 
 system(&quot;cls&quot;); 
 printf(&quot;Os elementos da sua matriz sao\n\n&quot;); 
 
 for(int i = 0; i < lin; i++) 
 { 
 for(int j = 0; j < col; j++) 
 printf(&quot;%d &quot;, *(*(matriz +i) +j)); 
 printf(&quot;\n&quot;); /* imprime os elementos na tela */ 
 } 
 
 free(matriz); 
 _getch(); 
} 
Universidade Federal De Uberlândia 
Faculdade de Engenharia Elétrica e Biomédica 
 44
Capítulo 6 \u2013 Funções 
 
 Funções são os blocos de construção de C, e é o local onde toda atividade 
ocorre. Elas são umas das características mais importantes de C. 
 
A forma geral de uma função é 
 
 especificador_de_tipo nome_da_funções(lista_de_parâmetros) 
{ 
corpo da função 
} 
 
especificador_de_tipo se refere ao tipo de valor que a função retorna. Este pode 
ser qualquer tipo válido em C. 
 
lista_de_parâmetros é uma lista de variáveis separadas por vírgulas e seus tipos 
associados, se caso a sua função não precisar de parâmetros, a lista será vazia. No 
entanto, os parênteses ainda são necessários. Exemplos: 
 
 
 
 
 
 
 
 
 
 
 
Também pode ocorrer, como já foi discutido no capítulo 2, a necessidade da 
declaração de variáveis internamente, esse tipo de variável é chamada de variável local, 
essas variáveis vem a existir na entrada da função e são destruídas ao sair, ou seja, não 
podem ser acessadas após o fim da função. 
 
Em geral os argumentos podem ser passados de duas maneiras, chamada por 
valor ou chamada por referência. No primeiro caso, é copiado o valor de um argumento 
para o parâmetro de uma função, assim alterações feitas nos parâmetros formais não 
possuem efeito nas variáveis utilizadas. No segundo caso, chamada por referência, é 
repassada para a função o endereço da variável como argumento, assim as operações 
ocorrem diretamente no argumento, ou variável global. 
 
 
 
 
 
 
 
 
 
 
void funcao1(char y, int h) 
{ 
bloco 
} 
 
float funcao2(float x, double *z) 
{ 
bloco 
} 
Universidade Federal De Uberlândia 
Faculdade de Engenharia Elétrica e Biomédica 
 45
Funções Recursivas 
 
Um tipo especial de função é a função recursiva, ou recursão, que ocorre quando 
um comando no corpo da função a chama. Um exemplo clássico de função recursiva é o 
calculo de fatorial. Veja o exemplo abaixo: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
O mesmo exemplo pode ser feito de forma não-recursiva, veja o trecho do programa: 
 
 int fatorial(int x) 
 { 
 int resultado = 1; 
 
 for(int t = 1; t <= x; t++) 
 resultado = resultado*(t); 
 
 return resultado; 
 } 
 
 
 
 
 
 
 
#include <stdio.h> 
#include <conio.h> 
 
int fatorial(int x); 
 
void main () 
{ 
 int num; 
 
 do{ 
 printf(&quot;Entre com um numero natural para o calculo do 
fatorial: &quot;); 
 scanf(&quot;%d&quot;, &num); 
 }while(num < 0); 
 
 printf(&quot;\n\nO fatorial de %d e %d&quot;, num, fatorial(num)); 
 _getch(); 
} 
 
int fatorial(int x) 
{ 
 int resultado; 
 if(x == 1) 
 return 1; 
 else if(x == 0) 
 return 1; 
 else 
 return resultado = x*fatorial(x-1); 
} 
Universidade Federal De Uberlândia 
Faculdade de Engenharia Elétrica e Biomédica 
 46
Funções que retornam ponteiros 
 
 As funções que devolvem ponteiros são manipuladas da mesma forma, embora 
precisem de atenção especial. Ponteiros para variáveis não são variáveis, eles são o 
endereço na memória de um certo tipo de dado. Para se retornar um ponteiro, a função 
deve ter o tipo de retorno igual a um ponteiro. Veja um exemplo de uma função que 
devolve um ponteiro para a primeira ocorrência do caractere c na string s 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Lembrando que quando se incrementa um ponteiro, ele aponta para o próximo 
elemento da memória. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#include <stdio.h> 
#include <conio.h> 
 
char *match(char c, char *s); 
 
void main () 
{ 
 char ch, *s = &quot;ola mundo&quot;, *string; 
 
 printf(&quot;Entre com um caractere: &quot;); 
 scanf(&quot;%c&quot;, &ch); 
 
 string = match(ch, s); 
 printf(string); 
 
 _getch(); 
} 
 
char *match(char c, char *s) 
{ 
 while(c != *s) 
 s++; 
 return s; 
} 
Universidade Federal De Uberlândia 
Faculdade de Engenharia Elétrica e Biomédica 
 47
Capítulo 7 \u2013 Estruturas 
 
 Em C, uma estrutura é uma coleção de variáveis referenciadas por um nome, 
fornecendo uma maneira conveniente de se ter informações relacionadas agrupadas. 
Uma definição de estrutura forma um modelo que pode ser usado para criar variáveis de 
estruturas. As variáveis que compreendem a estrutura são chamadas elementos da 
estrutura. 
 
 Por exemplo, se quisermos uma estrutura com dados de um aluno, com 
informação deste como seu nome, número de matrícula, entre outros, devemos usar o 
seguinte fragmento de código que mostra como criar um modelo de estrutura. A 
palavra-chave struct informa ao compilador que um modelo de estrutura está sendo 
definido. 
 
 struct alunos 
{ 
 char nome[80]; 
 char numero_matricula[15]; 
 int numero_de_faltas; 
 float notas[4]; 
}; 
 
Note que a definição termina com um ponto-e-vírgula. Isso ocorre porque uma 
definição de estrutura é um comando. Além disso, o nome (ou rótulo) da estrutura 
alunos identifica essa estrutura de dados em particular e é o seu especificador de tipo. 
 
Com este código, nenhuma variável foi de fato declarada. Foi feito apenas uma 
definição do formato da estrutura. Para declarar uma variável com essa estrutura escreva 
 
struct alunos informacao; 
 
Isso declara uma variável do tipo estrutura alunos chamada informacao. 
O compilador C aloca automaticamente memória suficiente para acomodar todas 
as variáveis que formam a variável estrutura. Neste caso, esta estrutura ocupa na 
memória o espaço de 113 bytes. 
 
Você também pode declarar uma ou mais variáveis enquanto a estrutura é 
definida. Por exemplo, 
 
struct alunos 
{ 
 char nome[80]; 
 char numero_matricula[15]; 
 int numero_de_faltas; 
 float notas[4]; 
} informacao, dados, variavel; 
 
 
 
 
 
 
Universidade Federal De Uberlândia 
Faculdade de Engenharia Elétrica e Biomédica 
 48
O nome da estrutura pode ser omitido se você precisar apenas de uma variável 
estrutura. Isso significa que 
 
struct alunos 
{ 
 char nome[80]; 
 char numero_matricula[15]; 
 int numero_de_faltas; 
 float notas[4]; 
} informacao; 
 
Declara uma variável chamada informacao como definido pela estrutura que a precede. 
 
 Portanto, a forma geral de uma definição de estrutura é 
 
 struct nome 
 { 
 tipo nome_da_variável1; 
 tipo nome_da_variável2; 
 . 
 . 
 . 
 tipo nome_da_variávelN; 
 }variáveis_estrutura; 
 
Onde nome ou variáveis_estrutura podem ser omitidos, mas não ambos. 
 
Refereciando Elementos de Estruturas 
 
 Os elementos individuais de estruturas são referenciados através do operador 
ponto (.). Por exemplo, digamos que você deseja acessar o número de faltas de um 
aluno, atribuindo a esse um valor, escreva 
 
 informacao.numero_de_faltas = 2; 
 
 O nome da variável estrutura seguido por um ponto e pelo nome do elemento 
referencia esse elemento individual da estrutura. A forma geral para acessar um 
elemento de estrutura é 
 
 nome_da_variável_estrutura.nome_do_elemento 
 
 Portanto, para escrever o numero de faltas na tela escreva 
 
 printf(&quot;%d&quot;,infomrmacao.numero_de_faltas); 
 
 Analogamente, pode ser usada a função gets() para receber o nome do aluno 
 
 gets(informacao.nome); 
 
 
 
 
 
 
Universidade Federal De Uberlândia