UNIPLI
Linguagem de Programação I
Professora Simoni Rangel de Freitas Oliveira
Estruturas e tipos definidos pelo usuário (continuação)
4. Estruturas e funções (passagem de estruturas para funções)
Suponha as seguintes declarações de estruturas:
struct data{
int dia, mes, ano;
};
struct funcionario{
char nome[50];
double salario;
struct data nascimento;
}x;
1. Passagem de alguns elementos da estrutura para funções
A passagem de um ou mais elementos de uma estrutura para uma função é feita
por valor.
Sintaxe: func(estrutura.elemento);
Exemplo: altera_salario(x.salario);


altera_salario - identificador da função
x.salario - elemento da estrutura x
Função “altera_salario”
double altera_salario (double salario)
{
double novo_salario;
novo_salario= salario*1.1;
return novo_salario;
}
Chamada à função “altera_salario”, passando o elemento “x.salário”:
x.salario=altera_salario(x.salario);
2. Passagem de toda a estrutura para funções
A passagem de toda uma estrutura para uma função pode ser feita por valor. Na
definição da função o parâmetro declarado deve ser do tipo da estrutura que está
sendo passada.
Exemplo:
void imprime(struct funcionario p) // o parâmetro é do tipo struct funcionario
{
puts(p.nome);
printf("Salario: %.2lf", p.salario);
printf("\nData de nascimento: %d/%d/%d\n\n", p.nascimento.dia,
p.nascimento.mes, p-.nascimento.ano );
1
UNIPLI
Linguagem de Programação I
Professora Simoni Rangel de Freitas Oliveira
}
Exemplo 1:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//Declaração das estruturas
struct data
{
int dia, mes, ano;
};
struct funcionario
{
char nome[50];
double salario;
struct data nascimento;
};
//Protótipo da função
void imprime(struct funcionario p);
//Função principal
int main()
{
int i;
struct funcionario x, y;
strcpy(x.nome,"Adriana Martins");
x.salario=500.00;
x.nascimento.dia=10;
x.nascimento.mes=5;
x.nascimento.ano=1982;
strcpy(y.nome,"Luciano Araujo de Lima");
y.salario=540.00;
y.nascimento.dia=23;
y.nascimento.mes=8;
y.nascimento.ano=1983;
puts("\nFuncionarios:\n");
imprime(x);
imprime(y);
system("pause");
return 0;
}
//Função
void imprime(struct funcionario p)
{
puts(p.nome);
printf("Salario: %.2lf", p.salario);
printf("\nData de nascimento: %d/%d/%d\n\n", p.nascimento.dia,
p.nascimento.mes, p.nascimento.ano);
}
2
UNIPLI
Linguagem de Programação I
Professora Simoni Rangel de Freitas Oliveira
No programa do Exemplo 1,
• as estruturas x e y são do tipo struct funcionário
• imprime(x); // passagem por valor
• mprime(y); // passagem por valor
Saída:
Funcionarios:
Adriana Martins
Salario: 500.00
Data de nascimento: 10/5/1982
Luciano Araujo de Lima
Salario: 540.00
Data de nascimento: 23/8/1983
Pressione qualquer tecla para continuar. . .
5. Tipos definidos pelo usuário
A linguagem C permite a criação de novos nomes de tipo de dado usando o comando
typedef.
Sintaxe:
typedef tipo novo-nome;
Exemplos:
typedef float real;
real a, b, c[10];
typedef int inteiro;
inteiro d, e[5];
typedef struct reg_aluno Raluno;
Raluno aluno_Manha[2000];
Raluno aluno_Noite[5000];
// struct reg_aluno é o tipo
3
UNIPLI
Linguagem de Programação I
Professora Simoni Rangel de Freitas Oliveira
Exemplo 2:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 20
//Definição de novos tipos
typedef int inteiro;
typedef float real;
typedef char caracter;
//Declaração das estruturas
typedef struct data
{
inteiro dia, mes, ano;
}Data;
typedef struct funcionario
{
caracter nome[50];
real salario;
Data nascimento;
}Funcionario;
//Protótipo da função
void imprime(Funcionario p[N], real media);
//Função principal
int main()
{
inteiro i;
real m=0.0;
Funcionario x[N];
for(i=0; i<N; i++)
{
puts("\nEntre com o nome:\n");
fflush(stdin);
gets(x[i].nome);
fflush(stdin);
puts("\nEntre com o salario:\n");
scanf("%f", &x[i].salario);
m+=x[i].salario;
puts("\nEntre com a data de nascimento:\n");
scanf("%d %d %d", &x[i].nascimento.dia, &x[i].nascimento.mes,
&x[i].nascimento.ano );
}
m=m/N;
puts("\nFuncionarios:\n");
imprime(x, m);
system("pause");
return 0;
}
4
UNIPLI
Linguagem de Programação I
Professora Simoni Rangel de Freitas Oliveira
//Função
void imprime(Funcionario p[N], real media)
{
inteiro i;
for(i=0; i<N; i++)
{
puts(p[i].nome);
printf("Salario: R$%.2f", p[i].salario);
printf("\nData de nascimento: %d/%d/%d\n\n",
p[i].nascimento.dia,p[i].nascimento.mes, p[i].nascimento.ano );
}
printf(" Media de salario: R$%.2f\n", media);
}
Bibliografia
HICKSON, Rosângela. Aprenda a programar em C, C++ e C#. Ed. Campus, 2002.
GOTTFRIED, B. S. Programando em C. Editora LTC, 1993.
KERNIGHAN, B. W., RITCHIE, D. M. C: A linguagem de programação – Padrão ANSI.
Ed. Campus, 1989.
5
Download

Estrutura pt2