2. Vetores
• Variaveis compostas homogeneas unidimensionais
• Os índices começam em zero
• A quantidade de elementos que o vetor pode armazenar deve
ser um valor inteiro fixo
• DECLARAÇÃO
• Exemplo1: int vet[10];
• Começa na posição zero e termina na posição 9 (tamanho do
vetor – 1);
• Exemplo 2: char x[5];
• Começa na posição zero e termina na posição 4
2
3. Vetores
•
•
•
•
Exemplo 3:
#define tam 5;
char z[tam];
Começa na posição zero e termina na posição 4
• ATRIBUIÇÃO
• Exemplo 1:
• vet[0] = 1; //atribui o valor 1 à primeira posição do vetor
• X*3+ = ‘b’; //atribui a letra b à quarta posição do vetor
3
5. Matriz
• Variaveis homogeneas bidimensionais ou multidimensionais
• Pode ter até 12 dimensões de acordo com o padrão ANSI
• Para cada dimensão, um índice deve ser usado
• DECLARAÇÃO
• float x[2][6]; //uma matriz com duas linhas e seis colunas
• char mat[4][3]; //uma matriz com quatro linhas e tres colunas
• float y[2][4][3]; //uma matriz com duas linhas, quatro colunas
e três profundidades
5
6. MATRIZES
• ATRIBUIÇÃO
• X[1][4] = 5; //atribui o valor 5 ao espaço identificado pelo
indice 1 (linha 2) e índice 4 (coluna 5)
• Mat*3+*2+ = ‘d’; //atribui o valor d à quarta linha e à terceira
coluna
• Y[0][3][1] = 12; //atribui o valor 12 à primeira linha, quarta
coluna e segunda profundidade.
6
7. Matrizes
• PREENCHENDO
for(i=0; i<7; i++){ //linha
for(j=0; j<3; j++) //coluna
scanf( “ %d ”, &mat*i+*j+ );
}
Preenche primeiro todas as colunas da linha 0
Depois todas as colunas da linha 1
E assim por diante
7
9. Matrizes
• Exemplo
for(i=0; i<3; i++){
printf( “ Elementos da linha %d ”, i);
for(j=0; j<4; j++){
printf( “ %d ”, x* i , j + );
}
MEMÓRIA TELA
}
i
j
0
Elementos da linha 0
0
0
4
0
1
5
0
2
1
0
3
10
1
Elementos da linha 1
9
10. Matrizes
• Exemplo
for(j=0; j<4; j++){
printf( “ Elementos da coluna %d ”, j);
for(i=0; i<3; i++){
printf( “ %d ”, x* i , j + );
}
MEMÓRIA TELA
}
j
i
0
Elementos da coluna 0
0
0
4
0
1
5
0
2
1
1
1
Elementos da coluna 1
0
6
10
11. Sub rotinas
• Sub-rotinas ou subprogramas são blocos de instruções que
realizam tarefas específicas
• Como o problema pode ser subdividido em pequenas
tarefas, os programas tendem a ficar menores e mais
organizados
• Programas são executados linha após linha, mas quando se
usa subrotina, um desvio é realizado na execução do programa
• Uma subrotina pode ou não receber um parametro
• Uma subrotina pode ou não retornar um valor
• Uma subrotina pode ter variaveis locais, variaveis que são
criadas apenas para uso interno da subrotina
11
12. Sub rotinas
• Modularização do programa por meio de funções
• Variaveis globais: são aquelas variaveis conhecidas por todo o
programa e são declaradas fora das funções
• FUNÇÕES SEM PASSAGEM DE PARAMETROS E SEM RETORNO
• Não recebe nenhuma informação no momento de sua
chamada
• Não repassa nenhum valor para quem a chamou
12
13. Sub rotinas
#include <stdio.h>
int a, b, s; //variáveis globais
void soma(){
printf(“Digite dois números”);
scanf(“%d %d”, &a, &b);
s = a + b;
printf(“ a soma é %d”, s);
}
int main(){
soma();
getchar();
return 0;
}
13
14. Sub rotinas
• FUNÇÕES COM PASSAGEM DE PARAMETROS E SEM
RETORNO
• Recebem valores no momento em que são chamadas
• Não devolvem nenhum valor para quem as chamou
14
15. Sub rotinas
#include <stdio.h>
void soma(int a, int b){
int s; //variável local da subrotina
s = a + b;
printf('a soma é %d', s);
}
int main(){
int a, b; //variável local do programa principal
printf('Digite dois valores');
scanf(' %d %d ', &a, &b);
soma(a, b);
getchar();
return 0;
}
15
16. Sub rotinas
• FUNÇÕES SEM PASSAGEM DE PARAMETROS E COM
RETORNO
• Não recebem nenhum valor no momento em que são
chamadas
• Devolvem um valor para quem as chamous
16
17. Sub rotinas
#include <stdio.h>
int soma(){
int a, b, s; //variável local da subrotina
printf('Digite dois valores');
scanf(' %d %d ', &a, &b);
s = a + b;
return s;
}
int main(){
int s; //variável local do programa principal
s = soma(); //chamada da sub rotina
printf(' a soma é: %d', s);
getchar();
return 0;
}
17
18. Sub rotina
• FUNÇÕES COM PASSAGEM DE PARAMETROS E COM
RETORNO
• Recebem valores no momento em que são chamadas
• Devolvem um valor para quem as chamou
18
19. Sub rotina
#include <stdio.h>
int soma(int a, int b){
return a+b;
}
int main(){
int a, b, s; //variável local do programa principal
printf('Digite dois números');
scanf(' %d %d ', &a, &b);
s = soma(a, b); //chamada da sub rotina
printf(' a soma é: %d', s);
getchar();
return 0;
}
19
20. Sub rotina
• Se você quiser, pode escrever todas as funções antes do MAIN
• Se quiser escrevê-las após MAIN, deverá utilizar os protótipos
de funções
• PASSAGEM DE PARAMETROS POR VALOR
• Significa que a função trabalhará com cópias dos valores
passados no momento de sua chamada
20
21. Sub rotina
#include <stdio.h>
int soma_dobro(int a, int b);
int main(){
int x, y, res; //variável local do programa principal
printf('Digite dois números');
scanf(' %d %d ', &x, &y);
res = soma_dobro(x, y); //chamada da sub rotina
printf(' a soma do dobro dos números %d e %d = %d', x, y, res);
getchar();
return 0;
}
Quando a função chega ao fim, as
int soma_dobro(int a, int b){
variaveis criadas são completamente
int soma;
destruídas e as alterações realizadas são
a = a * 2;
perdidas. X continuara valendo 5 e y
b = b * 2;
continuara valendo 3.
soma = a + b;
return soma;
}
21
22. Sub rotina
#include <stdio.h>
int soma_dobro(int a, int b);
int main(){
int x, y, res; //variável local do programa principal
printf('Digite dois números');
scanf(' %d %d ', &x, &y);
FUNÇÃO MAIN y); //chamada da sub rotina FUNÇÃO SOMA_DOBRO
res = soma_dobro(x,
A
X
5
printf(' a soma do dobro dos números %d e %d = %d', x, y, res); 5
getchar();
B
3
Y
3
return 0;
SOMA
16
RES
16
}
int soma_dobro(int a, int b){
int soma;
a = a * 2;
b = b * 2;
soma = a + b;
return soma;
}
22
23. Sub rotina
• PASSAGEM DE PARAMETROS POR REFERENCIA
• Significa que os parametros passados para a função
correspondem a endereços de memória ocupados por
variáveis
• Toda vez que for necessário acessar determinado valor, isso
será feito por meio de referencia, apontamento ao seu
endereço de memória
23
24. Sub rotina
#include <stdio.h>
int soma_dobro(int *a, int *b);
int main(){
int x, y, res; //variável local do programa principal
printf('Digite dois números');
scanf(' %d %*c %d %*c', &x, &y);
res = soma_dobro(x, y); //chamada da sub rotina
printf(' a soma do dobro dos números %d e %d = %d', x, y, res);
getchar();
return 0;
}
Quando a função chega ao fim, as
int soma_dobro(int *a, int *b){
variaveis criadas são completamente
int soma;
*a = 2 * (*a);
destruídas, mas as alterações realizadas
*b = 2 * (*b);
não se perdem. X valerá 10 e Y 6, isto
soma = *a + *b;
porque as alterações fizeram referencia
return soma;
a endereços de memória
}
24
26. Sub rotinas
• Matrizes e vetores só podem ser passadas para funções por
referencia
void soma_linhas(float m[][5], float v[]){ //um vetor com
colchetes vazios ou uma matriz com colchetes da primeira
dimensão vazios significa que são variáveis ponteiros que
guardam os endereços iniciais das variáveis
}
int main(){
soma_linhas(mat, vet); //isto indica que esta sendo
usado o endereço de memória ocupado pela posição 0 do vetor
ou pela posição 0x0 da matriz
}
26
27. Sub rotinas
• SUBROTINAS EM ARQUIVOS SEPARADOS – BIBLIOTECAS
• Uma biblioteca é gerada a partir de um arquivo .H
• Esse arquivo .H não contém o programa principal
• O programa principal irá utilizar as funções definidas nesse
arquivo .H
• Chame seu arquivo .H usando a diretiva #INCLUDE
“caminhonome_da_biblioteca”, em que caminho, é o local
onde está salva sua biblioteca
27
28. Sub rotinas
MYBIBLIO.H
#include <stdio.h>
void sub_rotina1(), printf(“mostrando uma mensagem”); void sub_rotina2(){ }
void sub_rotina3(){ }
MYPROGRAM.C
#include <stdio.h>
#include “c:testeMYBIBLIO.H”
int main(){
sub_rotina1();
sub_rotina2();
}
28