Вы находитесь на странице: 1из 5

UNIPLI

Linguagem de Programao I
Professora Simoni Rangel de Freitas Oliveira

Estruturas e tipos definidos pelo usurio (continuao)

4. Estruturas e funes (passagem de estruturas para funes)

Suponha as seguintes declaraes 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 funes

A passagem de um ou mais elementos de uma estrutura para uma funo feita


por valor.
Sintaxe: func(estrutura.elemento);

Exemplo: altera_salario(x.salario);

altera_salario - identificador da funo


x.salario - elemento da estrutura x

Funo altera_salario
double altera_salario (double salario)
{
double novo_salario;
novo_salario= salario*1.1;
return novo_salario;
}

Chamada funo altera_salario, passando o elemento x.salrio:

x.salario=altera_salario(x.salario);

2. Passagem de toda a estrutura para funes

A passagem de toda uma estrutura para uma funo pode ser feita por valor. Na
definio da funo o parmetro declarado deve ser do tipo da estrutura que est
sendo passada.

Exemplo:

void imprime(struct funcionario p) // o parmetro 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 Programao I
Professora Simoni Rangel de Freitas Oliveira

Exemplo 1:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//Declarao das estruturas


struct data
{
int dia, mes, ano;
};
struct funcionario
{
char nome[50];
double salario;
struct data nascimento;
};

//Prottipo da funo
void imprime(struct funcionario p);

//Funo 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;
}

//Funo
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 Programao I
Professora Simoni Rangel de Freitas Oliveira

No programa do Exemplo 1,
as estruturas x e y so do tipo struct funcionrio
imprime(x); // passagem por valor
mprime(y); // passagem por valor

Sada:

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 usurio

A linguagem C permite a criao 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; // struct reg_aluno o tipo


Raluno aluno_Manha[2000];
Raluno aluno_Noite[5000];

3
UNIPLI
Linguagem de Programao I
Professora Simoni Rangel de Freitas Oliveira

Exemplo 2:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 20

//Definio de novos tipos


typedef int inteiro;
typedef float real;
typedef char caracter;

//Declarao das estruturas


typedef struct data
{
inteiro dia, mes, ano;
}Data;

typedef struct funcionario


{
caracter nome[50];
real salario;
Data nascimento;
}Funcionario;

//Prottipo da funo
void imprime(Funcionario p[N], real media);

//Funo 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 Programao I
Professora Simoni Rangel de Freitas Oliveira

//Funo
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, Rosngela. 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 programao Padro ANSI.
Ed. Campus, 1989.