• Nenhum resultado encontrado

#include <stdio.h> #define n 10 int vetor[n]; void inicializar_vetor() { int i; for(i='\0';i<n;++i) { printf("\nentre com o elemento v[%d]: ",i+1);

N/A
N/A
Protected

Academic year: 2022

Share "#include <stdio.h> #define n 10 int vetor[n]; void inicializar_vetor() { int i; for(i='\0';i<n;++i) { printf("\nentre com o elemento v[%d]: ",i+1);"

Copied!
30
0
0

Texto

(1)

#include <stdio.h>

#define n 10 int vetor[n];

void inicializar_vetor() {

int i;

for(i='\0';i<n;++i) {

{

printf("\nEntre com o elemento v[%d]: ",i+1);

scanf("%d",vetor+i);

} }

(2)

void imprimir_vetor() {

int i;

for(i='\0';i<n;++i) if(!i)

printf("vetor = { %d, ", vetor[i]);

else

if(i==n-1) if(i==n-1)

printf("%d }", vetor[i]);

else

printf("%d, ", vetor[i]);

}

(3)

int main() {

inicializar_vetor();

imprimir_vetor();

}

(4)

- Passagem de parâmetros por valor e passagem por referência

Vimos que quando chamamos uma função os parâmetros formais da função recebem uma copia dos valores dos parâmetros que são passados

Funções

dos valores dos parâmetros que são passados para a função. Isto quer dizer que não são alterados os valores que os parâmetros têm fora da função.

(5)

- Passagem de parâmetros por valor e passagem por referência (continuação)

Este tipo de chamada de função é denominado chamada por valor. Isto ocorre, porque são passados para a função apenas os valores dos

Funções

passados para a função apenas os valores dos parâmetros e não os próprios parâmetros. Veja o exemplo a seguir:

(6)

#include <stdio.h>

float sqr (float num) {

num=num*num;

return num;

}

main () {

{

float num,sq;

printf ("Entre com um numero: ");

scanf ("%f",&num);

sq=sqr(num);

printf ("\n\nO numero original e: %f\n",num);

printf ("O seu quadrado vale: %f\n",sq);

}

(7)

- Passagem de parâmetros por valor e passagem por referência (continuação)

Outro tipo de passagem de parâmetros para uma função ocorre quando alterações nos parâmetros formais, dentro da função, alteram os

Funções

parâmetros formais, dentro da função, alteram os valores dos parâmetros que foram passados para a função. Este tipo de chamada de função tem o nome de "chamada por referência".

(8)

- Passagem de parâmetros por valor e passagem por referência (continuação)

A linguagem C só permite chamadas por valor.

Isto é bom quando queremos usar os parâmetros formais à vontade dentro da função, sem termos que nos preocupar em estar alterando

Funções

sem termos que nos preocupar em estar alterando os valores das variáveis que tiveram seus valores passados aos parâmetros da função.

Mas, isto também pode ser ruim, porque, às vezes, podemos querer que mudanças nos valores dos parâmetros formais reflitam nos variáveis que foram passadas com parâmetros para a função.

(9)

- Passagem de parâmetros por valor e passagem por referência (continuação)

Quando queremos alterar as variáveis que são passadas para uma função, nós podemos declarar seus parâmetros formais como sendo ponteiros.

Os ponteiros são a "referência" que precisamos

Funções

Os ponteiros são a "referência" que precisamos para poder alterar a variável fora da função. O único inconveniente é que, quando usarmos a função, teremos de lembrar de colocar um & na frente das variáveis que estivermos passando para a função.

Veja um exemplo:

(10)

#include <stdio.h>

void incrementa (int *a,int b) {

*a+=b;

}

main () {

int num;

num=100;

num=100;

printf (“\nValor de num antes da chamada %s%d”,

“da funcao: ”, num);

incrementa (&num,50);

printf (“\nValor de num depois da chamada %s%d”,

“da funcao: ”, num);

}

(11)

Exercício:

Construa um programa em ‘C’ que possua uma função responsável por fazer a troca de valores entre duas variáveis. O programa deve receber

Funções

dois valores inteiros, através da entrada padrão, armazená-los em variáveis, e com a utilização da função mencionada trocar o conteúdo das variáveis e depois retorná-las na saída padrão.

(12)

#include <stdio.h>

void Swap (int *a,int *b) {

int temp;

temp=*a;

*a=*b;

*b=temp;

}

main () {

{

int num1,num2;

printf("\nEntre com o primeiro valor: ");

scanf ("%d",&num1);

printf("\nEntre com o segundo valor: ");

scanf ("%d",&num2);

Swap (&num1,&num2);

printf ("\n\nEles agora valem %d %d\n", num1,num2);

(13)

Exercício:

Escreva o código fonte de um programa, na linguagem C, que manipule um vetor de inteiros com dez elementos. O programa deve possuir uma função responsável pela inicialização do vetor e

Funções

função responsável pela inicialização do vetor e outra função que efetue a impressão do vetor na saída padrão. Por meio das funções mencionadas, o programa deve inicializar o vetor e em seguida retorná-lo no monitor. Obs. o programa não pode possuir variáveis globais.

(14)

#include <stdio.h>

#define tamanho 10 void inicializar(int *v) {

int i;

for(i=0;i<tamanho;i++) {

printf ("\nEntre com v[%i]: ",i+1);

scanf("%i",v+i);

} } }

(15)

void imprimir(int *v) {

int i;

for(i=0;i<tamanho;i++) if (!i)

printf ("\nvetor[ %i, ",v[0]);

else

if (i==tamanho-1) printf ("%i ]",v[i]);

else else

printf ("%i, ",v[i]);

}

main () {

int vetor[tamanho];

inicializar(vetor);

imprimir(&vetor[0]);

}

(16)

- Protótipos de funções

Protótipos são declarações de funções. Isto é, você declara uma função que irá usar. O compilador toma então conhecimento do formato daquela função antes de compilá-la. Possibilitando assim, antes da compilação da função, a

Funções

assim, antes da compilação da função, a validação da utilização da mesma.

Um protótipo tem o seguinte formato:

TipoDeRetorno NomeDaFunção (DeclaraçãoDeParâmetros);

onde o TipoDeRetorno, o NomeDaFunção e a DeclaraçãoDeParâmetros são os mesmos que você pretende usar quando realmente escrever a

(17)

#include <stdio.h>

float Square (float a);

int main () {

float num;

printf ("Entre com um numero: ");

scanf ("%f",&num);

num=Square(num);

num=Square(num);

printf ("\n\nO seu quadrado vale: %f\n",num);

return 0;

}

float Square (float a) {

return (a*a);

(18)

- Arquivos headers

Arquivos headers, ou arquivos cabeçalhos, são aqueles que temos mandado o compilador incluir no início de nossos

Funções

compilador incluir no início de nossos exemplos e que sempre terminam em .h.

Estes arquivos não contêm os códigos das

funções. Eles só contêm protótipos de

funções.

(19)

O corpo das funções cujos protótipos estão no arquivo-cabeçalho, no caso das funções do próprio C, já estão compilados e normalmente são incluídos no programa no instante da "linkagem". Este é o instante em

Funções

instante da "linkagem". Este é o instante em

que todas as referências a funções cujos

códigos não estão nos arquivos fontes são

resolvidas, buscando este código nos

arquivos de bibliotecas.

(20)

- Arquivos headers (continuação)

Se você criar algumas funções que queira aproveitar em vários programas futuros, você pode escrever arquivos-cabeçalhos e incluí-los também.

Funções

incluí-los também.

Vamos supor que a função 'int EPar(int a)',

vista anteriormente, seja importante em

vários programas, e desejemos declará-la

num módulo separado.

(21)

- Arquivos headers (continuação)

No arquivo de cabeçalho chamado por exemplo de “funcao.h” teremos a seguinte declaração:

Funções

declaração:

int EPar(int a);

(22)

- Arquivos headers (continuação)

O código da função será escrito num arquivo a parte. Vamos chamá-lo de

“funcao.c”. Neste arquivo teremos a definição da função:

Funções

definição da função:

int EPar (int a) {

return (a%2?0:1);

}

(23)

- Arquivos headers (continuação)

Por fim, no arquivo do programa principal teremos a função main(). Vamos chamar este arquivo aqui de “principal.c”.

Funções

#include <stdio.h>

#include "funcao.h"

main () {

int num;

printf ("Entre com numero: ");

if (EPar(num))

printf ("\nO numero e par.\n");

else

printf ("\nO numero e impar.\n");

}

(24)

- Arquivos headers (continuação)

Este programa poderia ser compilado usando a seguinte linha de comando para o gcc:

Funções

gcc principal.c funcao.c -o saida

onde “saida” seria o nome do arquivo

executável gerado.

(25)

Exercício:

Escreva um programa que faça uso da função EDivisivel(int a, int b), criada anteriormente. Além desta função o programa deverá usar: Max(int a, int b), que retorna o maior dos parâmetros;

VMedio(int a, int b), que retorna o valor médio

Funções

VMedio(int a, int b), que retorna o valor médio (inteiro) entre a e b, você deverá escrever estas funções. Organize o seu programa em três arquivos: o arquivo exercicio.c, conterá o programa principal que deve se utilizar das funções descritas; o arquivo func.c conterá o corpo das funções; o arquivo func.h conterá os protótipos das

(26)

- Os Argumentos argc e argv

A função main() pode ter parâmetros formais. Mas, o programador não pode escolher quais serão eles.

Funções

escolher quais serão eles.

A declaração mais completa que se pode ter para a função main() é:

int main (int argc, char *argv[]);

(27)

Os parâmetros argc e argv dão ao programador acesso à linha de comando com a qual o programa foi chamado.

O argc (argument count) é um inteiro e possui o número de argumentos com os quais a função main() foi chamada na linha

Funções

quais a função main() foi chamada na linha de comando.

O argv (argument values) é um vetor de

strings. Cada string deste vetor é um dos

parâmetros da linha de comando. É para

saber quantos elementos temos em argv

(28)

- Os Argumentos argc e argv

(continuação)

Exemplo: O programa a seguir faz uso dos parâmentros argv e argc. O programa recebe da linha de comando o dia, mês e ano correntes, e imprimi a data em formato apropriado. Veja o exemplo, supondo que o

Funções

apropriado. Veja o exemplo, supondo que o executável se chame “data”:

data 19 04 06 O programa imprimirá:

19 de abril de 2006

(29)

#include <stdio.h>

int main(int argc, char *argv[]) {

int mes;

char *nomemes [] = {"Janeiro", "Fevereiro", "Março",

"Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro",

"Outubro", "Novembro", "Dezembro"};

if(argc == 4) {

mes = atoi(argv[2]); /*poderia ter usado sscanf()*/

if (mes<1 || mes>12) if (mes<1 || mes>12)

printf("Erro!\nMes invalido!");

else

printf("\n%s de %s de 20%s", argv[1], nomemes[mes-1], argv[3]);

}

else

printf("Erro!\nUso: data dia mes ano, todos inteiros");

(30)

Exercício:

Construa um programa que receba da linha de comando, com a qual o programa é executado, um número natural, e retorne

Funções

executado, um número natural, e retorne

seu fatorial na saída padrão.

Referências

Documentos relacionados

Um apartamento nº 212, situado nesta cidade e comarca de Franca/SP, localizado no 2º pavimento ou 1º andar do Bloco 02, Condomínio Residencial Dom Bosco, com frente para a Av.. 2.2

A's reperguntas do representante do Ministério Publico, res- pondeu, a folhas 28, que a esposa do denunciante estava, com effeito, no estado allegado pelo seu marido, vindo a dar á

Ocorrência País(es): Brasil São necessários ajustes nos Jobs para processar apenas entidades que trabalham via TOTVS

Como ciência que processa dados com o fim de gerar informações de natureza fiscal e gerencial a partir da existência de um patrimônio, a conta- bilidade possui, dentre suas

41, bloco E, localizado no 3º andar ou 4º pavimento, no Condomínio de Interesse Social Residencial Rubi I, para a Rua Paulo Archetti, nº 2.500, possui as seguintes

Foram aplicados os modelos de adsorção de Langmuir e Freundlich nos dados obtidos das soluções de tensoativo de 6 x 10 -4 e 8 x 10 -4 g/ml na rocha calcária (Figuras 32 e

O Projeto “Xadrez e Educação para todos” tem como objetivo, complementar o processo educacional para evitar evasão escolar e oferecer alternativas através da

A resposta para esse comando segue o mesmo formato da resposta ao comando get_input_status, sendo que difere apenas no nome de um dos campos que foi alterado de