ameliara freire [email protected]. dividir para conquistar
TRANSCRIPT
![Page 2: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/2.jpg)
Modularização
![Page 3: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/3.jpg)
Dividir para Conquistar
![Page 4: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/4.jpg)
Situação
Modularização
Parte 1
Parte 2
Parte 3
Parte 4
Problema
![Page 5: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/5.jpg)
Solução
Modularização
Parte 1
Parte 2
Parte 3
Parte 4
Parte 1Parte 2
Parte 3
Parte 4
Problema
![Page 6: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/6.jpg)
Solução
Modularização::Subprograma
Parte 1
Parte 2
Parte 3
Parte 4
Subprograma 1Subprograma 2
Subprograma 3
Subprograma 4
Programa
![Page 7: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/7.jpg)
A solução do problema original é implementada através da composição dos subprogramas.
Subprogramas podem ser vistos como blocos de construção com os quais montamos um programa.
Esta técnica de construção de programas é chamada de MODULARIZAÇÃO.
Modularização::Subprograma
![Page 8: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/8.jpg)
Um bloco consiste em um conjunto de declarações e um conjunto de comandos delimitados por indicadores de início e fim de bloco.
Em C, os delimitadores de bloco são { e }.
Modularização::Bloco
Comandos
Declarações de variáveis
![Page 9: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/9.jpg)
Um subprograma é um bloco de programa constituído por um conjunto de declarações e por um conjunto de comandos e identificado por um nome.
Exemplo:
Modularização::Subprograma
Comandos
Declarações de variáveis
![Page 10: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/10.jpg)
Existem dois tipos de subprograma:
◦ Procedimentos Executam tarefas
◦ Funções Calculam Valores
Modularização::Subprograma
![Page 11: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/11.jpg)
Funções e Procedimentos◦ Toda função ou procedimento deve ser pelo
menos declarada antes da função principal main(). Declara a função/procedimento antes da main() e a
implementa depois. Implementa a função/procedimento diretamente
antes da main().
Modularização::Subprograma
![Page 12: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/12.jpg)
Funções e Procedimentos◦ Exemplo: Procedimento que não recebe
parâmetros e não retorna valor.
Modularização::Subprograma
#include <stdio.h>
void desenha();
main(){ printf(”Usando procedimento."); desenha( );}
void desenha(){ int i; for (i = 0; i <= 10; i++) printf("--\n");}
Assinatura ou protótipo
do procediment
o
Implementacao do
procedimento
![Page 13: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/13.jpg)
Procedimento
![Page 14: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/14.jpg)
Sintaxe:void nome_procedimento(lista_parâmetros){ declarações_de_variáveis_do_procedimento; lista_de_comandos_do_procedimento;}
Procedimento
![Page 15: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/15.jpg)
Exemplo:◦ Exibir na tela uma linha com 20 asteriscos.
Procedimento
void linha(){ int i; for (i = 1; i <= 20; i++) printf(‘*’); printf(‘\n’); }
![Page 16: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/16.jpg)
A definição de um procedimento associa um nome a um bloco de declarações e comandos.
Os comandos que compõem o bloco do procedimento têm a “missão” de executar uma determinada tarefa para o programa.
Procedimento
![Page 17: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/17.jpg)
Exemplo de chamada a um procedimentovoid main(){ int i; linha(); /* escreve uma linha de asteriscos */ puts(“Numeros entre 1 e 5”); linha(); /* escreve outra linha de asteriscos */ for(i = 1; i <= 5; i++) printf(“%d\n”, i); linha(); /* escreve outra linha de asteriscos */}
Procedimento
![Page 18: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/18.jpg)
Chamada (Execução) de um Procedimento
◦ Uma referência a um nome de procedimento dentro de um programa provoca a execução do bloco de comandos do procedimento.
◦ Ao término da execução do procedimento, a execução do programa continua a partir do ponto onde este foi chamado.
Procedimento
![Page 19: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/19.jpg)
Chamada (Execução) de um Procedimento
Procedimento
void linha(){ int i; for (i = 1; i <= 20; i++) printf(‘*’); printf(‘\n’); }
void main(){ int i; linha(); puts(“Numeros entre 1 e 5”); linha(); for(i = 1; i <= 5; i++) printf(“%d\n”, i); linha();}
![Page 20: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/20.jpg)
Função
![Page 21: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/21.jpg)
Sintaxe:tipo_retorno nome_função (lista_parâmetros){ declarações_de_variáveis_da_função; lista_de_comandos_da_função;}
Exemplo:◦ Calcular o valor da soma de dois números reais.
float soma(float a, float b) { float aux; aux = a + b; return aux; }
Função
![Page 22: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/22.jpg)
Chamada a uma funçãofloat soma(float a, float b) { float aux; aux = a + b; return aux; }void main () { float x,y,z; printf(“Digite X:”); scanf (“%f”, &x); printf(“Digite Y:”); scanf (“%f”, &y); z = soma(x,y); printf(“Soma: %f”,z);}
Função
![Page 23: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/23.jpg)
Definição:
◦ A definição de uma função associa um nome a um bloco de declarações e comandos.
◦ Os comandos que compõem o bloco da função têm a “missão” de calcular um valor que deve ser informado pela função.
Função
![Page 24: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/24.jpg)
Chamada (execução) de Função:
◦ Uma referência a um nome de função dentro de um programa provoca a execução do bloco de comandos da função.
◦ Ao término da execução da função, a execução do programa continua a partir do ponto onde a função foi chamada.
Função
![Page 25: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/25.jpg)
Escopo de variáveis
![Page 26: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/26.jpg)
Definição de Escopo◦ O escopo de uma variável é a parte do código do
programa onde a variável é visível e, portanto, pode ser utilizada.
◦ Com relação ao escopo, as variáveis se dividem em: Globais Locais
Escopo de variáveis
![Page 27: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/27.jpg)
Variáveis Globais:◦ São as variáveis declaradas fora dos
procedimentos e das funções;◦ São visíveis e podem ser utilizadas em toda a
extensão do programa; Variáveis Locais:
◦ São as variáveis declaradas dentro dos procedimentos e das funções;
◦ São visíveis e podem ser utilizadas apenas dentro do subprograma que as declarou.
Escopo de variáveis
![Page 28: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/28.jpg)
Exemplo de Escopo em uma Função:
Escopo de variáveis
![Page 29: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/29.jpg)
Parâmetros
![Page 30: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/30.jpg)
Parâmetros são utilizados em computação para possibilitar a construção de subprogramas genéricos.
Parâmetros
![Page 31: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/31.jpg)
Parâmetros Formais◦ Parâmetros formais são as variáveis declaradas
no cabeçalho do subprograma.
Parâmetros Reais◦ Parâmetros reais são as variáveis passadas no
instante da chamada do subprograma.
Parâmetros
![Page 32: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/32.jpg)
Exemplo:
Parâmetros
Parâmetros Formais
Parâmetros Reais
![Page 33: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/33.jpg)
Passagem de parâmetro por valor
![Page 34: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/34.jpg)
No instante da chamada do subprograma, o parâmetro formal recebe uma cópia do valor do parâmetro real correspondente.
Alterações feitas nos parâmetros formais não refletem nos parâmetros reais correspondentes.
Caracteriza-se por ser um mecanismo de entrada de dados para o subprograma.
Passagem de parâmetro por valor
![Page 35: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/35.jpg)
Exemplo:
Passagem de parâmetro por valor
![Page 36: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/36.jpg)
Introdução a Ponteiro
![Page 37: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/37.jpg)
Organizacao da memória (variável inteira)
Memória
int x; 0000000
(0xFF02)x
![Page 38: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/38.jpg)
Organizacao da memória (variável inteira)
Memória
int x;x = 5;
5
(0xFF02)x
![Page 39: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/39.jpg)
Ponteiros (ou apontadores) são variáveis que, ao invés de guardar um dado (valor), guardam um endereço de memória, associada a outra variável;
Dessa forma, ponteiros fazem referência a uma outra variável;
Exemplo:
Abstração:
Ponteiros (apontadores)
0x3287ABx
40x3287AB
x
![Page 40: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/40.jpg)
Sintaxe: ◦ Variáveis que são ponteiros são representadas da
seguinte forma: tipo *nome_variavel;◦ Exemplo:
Ponteiros (apontadores)
NULLxint *x;
![Page 41: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/41.jpg)
Sintaxe: ◦ Variáveis que são ponteiros são representadas da
seguinte forma: tipo *nome_variavel;◦ Exemplo:
Ponteiros (apontadores)
NULLxint *x;int y = 5;
5(0xAD036)y
![Page 42: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/42.jpg)
Sintaxe: ◦ Variáveis que são ponteiros são representadas da
seguinte forma: tipo *nome_variavel;◦ Exemplo:
Ponteiros (apontadores)
0xAD036xint *x;int y = 5;x = &y; 5(0xAD036)y
![Page 43: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/43.jpg)
Toda declaração de ponteiros, inicia o ponteiro com o valor default NULL;
É sempre bom testar se o ponteiro na é NULL antes de acessá-lo;
x – representa o endereço armazenado no ponteiro;
Trabalhando com ponteiros
NULL(0x3847CD)xint *x;
int *x;printf(“Endereco da variavel x: %d”,&x);printf(“Endereco guardado em x: %d”,x);
if (x != NULL) { ...}
![Page 44: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/44.jpg)
Atribuição de ponteiros.◦ Só podemos jogar dentro do ponteiro um
endereço;
*x – representa o conteúdo final do ponteiro;
Trabalhando com ponteiros
0x32496(0x3847CD)xint *x;int y = 35;x = &y;
int *x;printf(“Conteudo final de x: %d”,*x);*x = 28;printf(“Conteudo final de x: %d”,*x);
35(0x32496)y
![Page 45: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/45.jpg)
O que acontece no seguinte programa?
Trabalhando com ponteiros
int y = 5;int *x;x = &y;printf("Valor armazenado na variavel y: %d\n", y);printf("Endereco de y: %d\n",&y);printf("Valor do conteudo do ponteiro x: %d\n",*x);printf("Valor do endereco armazenado no ponteiro x: %d\n", x);printf("Valor do endereco de x: %d\n",&x); printf("Alterando o valor armazenado na variavel x\n");*x = *x + 1;printf("Novo valor do conteudo do ponteiro x: %d\n",*x);printf("Valor do endereco armazenado no ponteiro x: %d\n", x);printf("Valor via y: %d\n",y);
![Page 46: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/46.jpg)
Passagem de parâmetro por
referência
![Page 47: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/47.jpg)
Caracteriza-se por ser um mecanismo de comunicação bidirecional com o subprograma, ou seja, é um mecanismo de entrada e saída de dados.
Qualquer modificação feita em um parâmetro formal implica em alteração no parâmetro real correspondente.
Passagem de parâmetro por referência
![Page 48: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/48.jpg)
Na passagem por referência utiliza-se um tipo de dados especial chamado ponteiro, que representa o endereço da variável passada por parâmetro. Representado pelo * após o tipo da variável e antes do seu nome.
Exemplo:
Passagem de parâmetro por referência
![Page 49: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/49.jpg)
Passagem de parâmetro por referência
![Page 50: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/50.jpg)
Passagem de parâmetro por referência
![Page 51: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/51.jpg)
Crie um programa na linguagem C que define a estrutura de um carro, altere seus dados através de uma função (use passagem por referência e o operador ->) bem como use outra função para exibir os membros da struct.
Ponteiros com registros
![Page 52: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/52.jpg)
#include <stdio.h>
#include <conio.h>
typedef struct
{
char modelo[30];
float potenciaMotor;
int anoFabricacao,
numPortas;
}CARRO;
void Exibe(CARRO car)
{
printf("\n\tExibindo carro\n");
printf("Modelo: %s\n", car.modelo);
printf("Motor: %.1f\n", car.potenciaMotor);
printf("Ano: %dn", car.anoFabricacao);
printf("%d portas\n", car.numPortas);
}
void Preenche(CARRO *car)
{
printf("Modelo do carro: ");
gets( car->modelo );
printf("Motor: ");
scanf("%f", &car->potenciaMotor);
printf("Ano: ");
scanf("%d", &car->anoFabricacao);
printf("Numero de portas: ");
scanf("%d", &car->numPortas);
}
main(void)
{
CARRO fusca;
Preenche(&fusca);
Exibe(fusca);
getche();
}
![Page 53: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/53.jpg)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct {
char Rua[100], Bairro [20], Cidade [20];
int num, cep;
} tipo_endereco;
typedef struct { int mat, serie, irmao;
char nome[20];
float mens;
tipo_endereco ender;
} tipo_aluno;
![Page 54: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/54.jpg)
void relatorio_geral(tipo_aluno v_alunos[20],int q )
{
int j;
printf("Colegio Legal\n");
printf("\n\nRelatorio Geral\n");
printf("\n________________________________");
printf("\nMat.\tNome\tSerie\tIrmao\tMens.\tRua\tBairro\tCidade\tNumero\tCep");
printf("\n________________________________");
for(j = 0; j < q; j++)
{
printf("\n %5d %-10s %5d %5d %5.2f %-10s %-10s %-10s %5d %5d ",
v_alunos[j].mat, v_alunos[j].nome, v_alunos[j].serie,
v_alunos[j].irmao, v_alunos[j].mens, v_alunos[j].ender.Rua,
v_alunos[j].ender.Bairro, v_alunos[j].ender.Cidade,
v_alunos[j].ender.num, v_alunos[j].ender.cep);
printf("\n_______________________________");
}
}
![Page 55: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/55.jpg)
int preencher(tipo_aluno A[20])
{
int qa, i, resp;
qa =0;
do{
printf("Colegio Legal\n");
printf("\n\nCadastro de Alunos\n\n");
printf("\nMatricula.: ");
scanf("%d",&A[qa].mat);
printf("\nNome......: ");
fflush(stdin);
gets(A[qa].nome);
printf("\nSerie(1-4): ");
scanf("%d",&A[qa].serie);
printf("\nIrmao na escola(1-sim/0-nao):");
scanf("%d",&A[qa].irmao);
switch(A[qa].serie){
case 1: A[qa].mens = 110; break;
case 2: A[qa].mens = 130; break;
case 3: A[qa].mens = 160; break;
case 4: A[qa].mens = 170; break;
}
if (A[qa].irmao == 1)
A[qa].mens = A[qa].mens*0.8;
printf("\n digite o endereco: ");
printf("\n Rua : ");
fflush(stdin);
gets(A[qa].ender.Rua);
printf("\n Bairro: ");
fflush(stdin);
gets(A[qa].ender.Bairro);
printf("\n Cidade : ");
fflush(stdin);
gets(A[qa].ender.Cidade);
printf("\n numero: ");
;
scanf("%d",&A[qa].ender.num);
printf("\n cep: ");
scanf("%d",&A[qa].ender.cep);
qa++;
printf("\n\nDeseja cadastrar outro aluno(1-sim/0-nao)? ");
scanf("%d",&resp);
}while ((resp == 1) && (qa <20));
return qa;
}
![Page 56: Ameliara Freire Ameliara.fjn@gmail.com. Dividir para Conquistar](https://reader035.vdocuments.net/reader035/viewer/2022062512/552fc130497959413d8d476e/html5/thumbnails/56.jpg)
main(){
int qa;
tipo_aluno alunos[20];
qa=preencher(alunos);
relatorio_geral(alunos,qa);
printf("\nTecle enter para sair...");
getche();
}