Aula 18: Funções em C Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Funções em C Programação de Computadores IV 1 / 38
Agenda 1 Revisão e Contexto 2 Módulos 3 Funções 4 Vetores/Matrizes como Parâmetros 5 Parâmetros do Programa Fernanda Passos (UFF) Funções em C Programação de Computadores IV 2 / 38
Agenda 1 Revisão e Contexto 2 Módulos 3 Funções 4 Vetores/Matrizes como Parâmetros 5 Parâmetros do Programa Fernanda Passos (UFF) Funções em C Programação de Computadores IV 3 / 38
Aula Anterior: Ponteiros: Vimos como ponteiro está relacionado a memória. Ponteiro é uma variável que guarda endereço de outra variável. Ele serve para referenciar uma outra variável. Operações com ponteiros: operadores (* e &), atribuição e aritméticas de ponteiros. Alocação dinâmica: Podemos alocar dinamicamente memória. Funções vistas: malloc() e free(). Usamos ponteiro para referenciar a área alocada. Fernanda Passos (UFF) Funções em C Programação de Computadores IV 4 / 38
Foco da Aula de Hoje Funções: Rever conceitos de funções e procedimentos em algoritmos. Conhecer como eles são implementados em C. Estudar a passagem de parâmetros em C. Por valor e referência. Retorno de valor em funções. Parâmetros do programa: pela função main. Objetivos: Aprender como usar funções: declaração e chamada. Como passar diversos tipos de parâmetros. Fernanda Passos (UFF) Funções em C Programação de Computadores IV 5 / 38
Agenda 1 Revisão e Contexto 2 Módulos 3 Funções 4 Vetores/Matrizes como Parâmetros 5 Parâmetros do Programa Fernanda Passos (UFF) Funções em C Programação de Computadores IV 6 / 38
Módulos Ao estudarmos algoritmo, vimos noções de módulos: Funções: retornam um valor. Procedimentos: sem retorno. Módulos recebem parâmetros e a passagem pode ser: por valor: cópia do valor do parâmetro e por referência: referência ao parâmetro. Na passagem por valor, as alterações nos parâmetros sofridas dentro do módulo não causam efeito fora dele. Na passagem por referência, as alterações nos parâmetros permanecem nas variáveis passadas após processamento do módulo. Fernanda Passos (UFF) Funções em C Programação de Computadores IV 7 / 38
Agenda 1 Revisão e Contexto 2 Módulos 3 Funções 4 Vetores/Matrizes como Parâmetros 5 Parâmetros do Programa Fernanda Passos (UFF) Funções em C Programação de Computadores IV 8 / 38
Funções em C declarações globais Em aulas anteriores, vimos que um programa em C é formado por uma ou mais funções. Função principal (requerida): main. Pode possuir mais N funções. As funções devem ser escritas uma após a outra. Não existe a escrita de funções dentro de outras. tipo retorno f1(lista de parâmetros){ sequência de comandos } tipo retorno f2(lista de parâmetros){ sequência de comandos }. tipo retorno fn(lista de parâmetros){ sequência de comandos } tipo retorno main(lista de parâmetros){ sequência de comandos } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 9 / 38
Implementação de Funções em C Forma geral da escrita de uma função: tipo retorno nome da função(lista de parâmetros) { corpo da função } tipo retorno: é o tipo de retorno da função. nome da função: é um identificador para a função. lista de parâmetros: lista de parâmetros da função composta pelo tipo e nome de variáveis separados por vírgula. A lista pode conter quantos parâmetros forem necessários e pode ser vazia também. Exemplo: int f1(char a, int n, float f){ // corpo da funcao } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 10 / 38
Implementação de Funções em C (II) No corpo da função, podemos inserir código que ela irá executa quando for chamada. Uma função só é executada se for chamada direta ou indiretamente na função main. No corpo, podemos fazer declaração de variáveis. Convenciona-se realizá-la no início. Mas é possível declarar variáveis em qualquer lugar do código em C. Todas as variáveis declaradas dentro da função são locais. Isto quer dizer que só valem dentro da função. Quando a função termina, elas deixam de existir: memória é desalocada automaticamente. Se houver tipo a ser retornado, deve-se usar o comando return. Este comando faz com que o programa saia da função e retorne para a função que o chamou. O valor retornado deve condizer com o valor indicado na declaração da função. Fernanda Passos (UFF) Funções em C Programação de Computadores IV 11 / 38
Implementação de Funções em C: Exemplo 1 Função que realiza a potência de número real através de multiplicações sucessivas. Ela retorna o valor de n e para e 0. 1 float potencia(float n, int e){ 2 int i; 3 float resultado = 1; 4 5 for(i=0; i<e; i++){ 6 resultado = resultado * n; 7 } 8 return(resultado); 9 } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 12 / 38
Procedimentos em C Procedimentos não são puramente suportados em C. Para produzi-lo, deve-se especificar um tipo de retorno void para uma função. Dentro da função, o retorno pode ser feito através de um return vazio. Ou simplesmente não usá-lo, se o retorno é no fim da função. Exemplo: 1 void imprimetabuadan(int n){ 2 int i; 3 4 for(i=1; i<=10; i++){ 5 printf(" %2d x %2d = %3d\n", n, i, n*i); 6 } 7 return; // Esta linha pode ser removida. 8 } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 13 / 38
Chamada de Funções A chamada de uma função pode ser realizada dentro de qualquer função. Podemos, inclusive, ter uma hierarquia de chamadas. Isto é, chamar uma função dentro de outra em vários níveis. Toda vez que uma função é chamada, um novo escopo é criado para ela. Escopo é a região de memória definida no bloco da função. Portanto, a cada chamada da função, um novo bloco é alocado com novas variáveis locais. Mas para ser executada, deve-se começar a chamada pelo main. Pois o main é a função iniciada quando o programa começa a executar. Fernanda Passos (UFF) Funções em C Programação de Computadores IV 14 / 38
Chamada de Funções: Exemplo 2 Chamando a função potencia(): 1 #include <stdio.h> 2 3 float potencia(float n, int e){ 4 int i; 5 float resultado = 1; 6 7 for(i=0; i<e; i++){ 8 resultado = resultado * n; 9 } 10 return(resultado); 11 } 12 13 int main(int argc, char * argv[]){ 14 15 printf("%.2fˆ%d = %.2f\n", 3.0, 4, potencia(3.0, 4)); 16 printf("%.2fˆ%d = %.2f\n", 2.5, 2, potencia(2.5, 2)); 17 return(0); 18 } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 15 / 38
Passagem Parâmetros Em C, toda passagem de parâmetro é por valor. Os parâmetros são variáveis locais que identificam os argumentos das funções. Assim sendo, é realizada uma cópia do valor passado para a função nas variáveis declaradas na função. Produz o efeito desejado da passagem por valor. Isto é, não alterar o parâmetro passado. Na chamada de uma função, qualquer expressão pode ser passada. Expressões podem ser quaisquer combinações de: constantes, expressões numéricas ou lógicas, variáveis, funções. Fernanda Passos (UFF) Funções em C Programação de Computadores IV 16 / 38
Passagem Parâmetros: Exemplo 3 Exemplo de passagens de parâmetros diversas: 1 #include <stdio.h> 2 3 int f1(int a, int b){ 4 return(a+2*b); 5 } 6 void f2(int a, int b, int c){ 7 printf("a: %d, b: %d e c: %d\n", a, b, c); 8 } 9 10 int main(int argc, char *argv[]){ 11 int val1, val2; 12 13 printf("digite um inteiro: "); 14 scanf("%d", &val1); 15 val2 = f1(val1, 10); 16 f2(val1, val2-val1, f1(5, val1)); 17 return(0); 18 } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 17 / 38
Passagem Parâmetros: Exemplo 3 Se entrada for o número 0, saída será: Digite um inteiro: 0 a: 0, b: 20 e c: 5 Se entrada for o número 2, saída será: Digite um inteiro: 2 a: 2, b: 20 e c: 9 Se entrada for o número -1, saída será: Digite um inteiro: -1 a: -1, b: 20 e c: 3 Fernanda Passos (UFF) Funções em C Programação de Computadores IV 18 / 38
Passagem Parâmetros: Tipos dos Valores Os valores passados para uma função devem casar com os tipos dos parâmetros declarados na função. Caso contrário, serão convertidos ou truncados. Pode causar resultado inesperado, se não respeitado. 1 #include <stdio.h> 2 3 int f1(int a, int b){ 4 return(a+2*b); 5 } 6 int main(int argc, char *argv[]){ 7 int val; 8 9 val = f1(1, 7.0/2.0); 10 // Se b fosse float, resultado seria 8 (1+2*3.5) 11 // Como b é int, resultado é 7 (1 + 2*3). 12 printf("val: %d\n", val); 13 return(0); 14 } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 19 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); void f2(int a, int b) f3(f4(a), b); int f4(int a) Suponha o seguinte esboço de código: return(a*2); void f3(int a, int b) printf("%d %d\n", a, b); Fernanda Passos (UFF) Funções em C Programação de Computadores IV 20 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); void f2(int a, int b) f3(f4(a), b); Execução: int f4(int a) return(a*2); void f3(int a, int b) printf("%d %d\n", a, b); Fernanda Passos (UFF) Funções em C Programação de Computadores IV 21 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); Execução: void f2(int a, int b) f3(f4(a), b); int f4(int a) return(a*2); void f1(int a) f2(a+1, a-1); a = 2 void f3(int a, int b) printf("%d %d\n", a, b); Fernanda Passos (UFF) Funções em C Programação de Computadores IV 21 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); void f2(int a, int b) f3(f4(a), b); int f4(int a) return(a*2); void f3(int a, int b) printf("%d %d\n", a, b); void f1(int a) f2(a+1, a-1); Execução: a = 2 void f2(int a, int b) a = 3, b = 1 f3(f4(a), b); Fernanda Passos (UFF) Funções em C Programação de Computadores IV 21 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); void f2(int a, int b) f3(f4(a), b); int f4(int a) return(a*2); void f3(int a, int b) printf("%d %d\n", a, b); void f1(int a) f2(a+1, a-1); Execução: a = 2 void f2(int a, int b) a = 3, b = 1 f3(f4(a), b); int f4(int a) return(a*2); a = 3 Fernanda Passos (UFF) Funções em C Programação de Computadores IV 21 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); void f2(int a, int b) Execução: f3(f4(a), b); int f4(int a) void f1(int a) f2(a+1, a-1); a = 2 return(a*2); void f3(int a, int b) void f2(int a, int b) a = 3, b = 1 f3(f4(a), b); 6 printf("%d %d\n", a, b); Fernanda Passos (UFF) Funções em C Programação de Computadores IV 21 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); void f2(int a, int b) Execução: f3(f4(a), b); int f4(int a) void f1(int a) f2(a+1, a-1); a = 2 return(a*2); void f3(int a, int b) printf("%d %d\n", a, b); void f2(int a, int b) a = 3, b = 1 f3(f4(a), b); 6 void f3(int a, int b) a = 6, b = 1 printf("%d %d\n", a, b); Saída: 6 1 Fernanda Passos (UFF) Funções em C Programação de Computadores IV 21 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); void f2(int a, int b) Execução: f3(f4(a), b); int f4(int a) void f1(int a) f2(a+1, a-1); a = 2 return(a*2); void f3(int a, int b) void f2(int a, int b) a = 3, b = 1 f3(f4(a), b); 6 printf("%d %d\n", a, b); Saída: 6 1 Fernanda Passos (UFF) Funções em C Programação de Computadores IV 21 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); void f2(int a, int b) Execução: f3(f4(a), b); int f4(int a) return(a*2); void f1(int a) f2(a+1, a-1); a = 2 void f3(int a, int b) printf("%d %d\n", a, b); Saída: 6 1 Fernanda Passos (UFF) Funções em C Programação de Computadores IV 21 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); void f2(int a, int b) Execução: f3(f4(a), b); int f4(int a) return(a*2); void f3(int a, int b) printf("%d %d\n", a, b); Saída: 6 1 Fernanda Passos (UFF) Funções em C Programação de Computadores IV 21 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); void f2(int a, int b) f3(f4(a), b); int f4(int a) Execução: void f2(int a, int b) a = 3, b = 2 f3(f4(a), b); return(a*2); void f3(int a, int b) printf("%d %d\n", a, b); Saída: 6 1 Fernanda Passos (UFF) Funções em C Programação de Computadores IV 21 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); void f2(int a, int b) f3(f4(a), b); int f4(int a) Execução: void f2(int a, int b) a = 3, b = 2 f3(f4(a), b); return(a*2); int f4(int a) a = 3 void f3(int a, int b) return(a*2); printf("%d %d\n", a, b); Saída: 6 1 Fernanda Passos (UFF) Funções em C Programação de Computadores IV 21 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); void f2(int a, int b) f3(f4(a), b); int f4(int a) return(a*2); void f3(int a, int b) Execução: void f2(int a, int b) a = 3, b = 2 f3(f4(a), b); 6 void f3(int a, int b) a = 6, b = 2 printf("%d %d\n", a, b); printf("%d %d\n", a, b); Saída: 6 1 6 2 Fernanda Passos (UFF) Funções em C Programação de Computadores IV 21 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); void f2(int a, int b) f3(f4(a), b); int f4(int a) Execução: void f2(int a, int b) a = 3, b = 2 f3(f4(a), b); return(a*2); void f3(int a, int b) printf("%d %d\n", a, b); Saída: 6 1 6 2 Fernanda Passos (UFF) Funções em C Programação de Computadores IV 21 / 38
Entendendo Chamadas de Funções Hierárquicas void f1(int a) f2(a+1, a-1); void f2(int a, int b) Execução: f3(f4(a), b); int f4(int a) return(a*2); void f3(int a, int b) printf("%d %d\n", a, b); Saída: 6 1 6 2 Fernanda Passos (UFF) Funções em C Programação de Computadores IV 21 / 38
Passagem de Parâmetros por Referência A linguagem C permite simular a passagem de parâmetro por referência. Permite estipular outra forma de saída de dados da função. Isto é feito através de ponteiros. Na verdade, o valor de uma variável ponteiro é passada para a função. Ainda é passagem por valor: passa-se o valor endereço. Mas através dele, podemos referenciar uma outra variável. Fernanda Passos (UFF) Funções em C Programação de Computadores IV 22 / 38
Passagem de Parâmetros por Referência: Exemplo 4 Trocar o valor de duas variáveis. 1 #include <stdio.h> 2 3 void troca(int *x, int *y){ 4 int temp; 5 6 temp = *x; // Salva o valor que está em x 7 *x = *y; // põe o valor de y em x 8 *y = temp; // põe o valor de temp (x) em y 9 } 10 int main(int argc, char * argv[]){ 11 int a = 0, b = 1; 12 13 // Deve-se passar o endereço das variáveis. 14 printf("a: %d e b: %d\n", a, b); 15 troca(&a, &b); 16 printf("a: %d e b: %d\n", a, b); 17 return(0); 18 } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 23 / 38
Passagem de Parâmetros por Referência: Exemplo 5 Retornando resultado de uma função em um parâmetro: 1 #include <stdio.h> 2 3 void potencia(float *r, float n, int e){ 4 int i; 5 float resultado = 1; 6 7 for(i=0; i<e; i++) 8 resultado = resultado * n; 9 *r = resultado; 10 } 11 int main(int argc, char * argv[]){ 12 float res; 13 14 potencia(&res, 3.0, 4); 15 printf("%.2fˆ%d = %.2f\n", 3.0, 4, res); 16 return(0); 17 } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 24 / 38
Agenda 1 Revisão e Contexto 2 Módulos 3 Funções 4 Vetores/Matrizes como Parâmetros 5 Parâmetros do Programa Fernanda Passos (UFF) Funções em C Programação de Computadores IV 25 / 38
Vetores/Matrizes como Parâmetros Podemos passar vetores e matrizes como parâmetro para funções. Quando passamos um vetor ou matriz como parâmetro, o ponteiro é o valor copiado para a função. Deste modo, o vetor não é copiado. Modificar um vetor dentro de uma função altera o valor fora. Existem duas maneiras de declarar vetores/matrizes de acordo como elas foram declaradas: ou estaticamente, ou dinamicamente. Fernanda Passos (UFF) Funções em C Programação de Computadores IV 26 / 38
Declarar Vetores Estáticos como Parâmetros Existem 3 formas similares de se declarar uma função com vetor como parâmetro. com colchetes e tamanho definido: void mostravetor(int vet[10]){ int i; for(i=0; i<10; i++) printf("%d ", vet[i]); printf("\n"); } com colchetes vazio: void mostravetor(int vet[]){ int i; for(i=0; i<10; i++) printf("%d ", vet[i]); printf("\n"); } como ponteiro (asterisco): void mostravetor(int *vet){ int i; for(i=0; i<10; i++) printf("%d ", vet[i]); printf("\n"); } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 27 / 38
Declarar Matrizes Estáticas como Parâmetros Para matriz, existem 2 maneiras similares: com colchetes e dimensões definidas: void mostramatriz(int mat[5][5]){ int i, j; for(i=0; i<5; i++){ for(j=0; j<5; j++) printf("%d ", mat[i][j]); printf("\n"); } com primeiro colchetes vazio e segundo com dimensão definida: void mostramatriz(int mat[][5]){ int i, j; for(i=0; i<5; i++){ for(j=0; j<5; j++) printf("%d ", mat[i][j]); printf("\n"); } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 28 / 38
Passando Vetor como Parâmetro: Exemplo 6 Função que imprime um vetor. 1 #include <stdio.h> 2 3 void mostravetor(int vet[]){ 4 int i; 5 6 for(i=0; i<5; i++){ 7 printf("%d ", vet[i]); 8 } 9 printf("\n"); 10 } 11 int main(int argc, char * argv[]){ 12 int A[5], B[5], i; 13 14 for(i=0; i<5; i++){ 15 A[i] = i; 16 B[i] = 4 - i; 17 } 18 printf("vetor A:\n"); 19 mostravetor(a); 20 printf("vetor B:\n"); 21 mostravetor(b); 22 return(0); 23 } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 29 / 38
Passando Matriz como Parâmetro: Exemplo 7 Função que imprime uma matriz. 1 #include <stdio.h> 2 3 void mostramatriz(int mat[][5]){ 4 int i, j; 5 6 for(i=0; i<5; i++){ 7 for(j=0; j<5; j++) 8 printf("%4d ", mat[i][j]); 9 printf("\n"); 10 } 11 } 12 int main(int argc, char * argv[]){ 13 int A[5][5], B[5][5], i, j; 14 15 for(i=0; i<5; i++) 16 for(j=0; j<5; j++){ 17 A[i][j] = i*5 + j; 18 B[i][j] = 2*(i*5 + j); 19 } 20 21 printf("matriz A:\n"); 22 mostramatriz(a); 23 printf("matriz B:\n"); 24 mostramatriz(b); 25 26 return(0); 27 } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 30 / 38
Modificando Parâmetro Vetor: Exemplo 8 Exemplo em que modificamos o valor de um vetor (leitura de vetor de arquivo). 1 #include <stdio.h> 2 3 int levetor(char * nomearq, int vet[], int *tam_vet){ 4 FILE * arq; 5 int i = 0, valor; 6 7 arq = fopen(nomearq, "r"); 8 if(arq == NULL){ 9 printf("arquivo nao pode ser aberto\n"); 10 return(1); // Nao conseguiu ler. 11 } 12 while (fscanf(arq, "%d", &valor) > 0){ 13 vet[i] = valor; i++; 14 } 15 fclose(arq); 16 *tam_vet = i; 17 return(0); // Conseguiu ler. 18 } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 31 / 38
Vetor como Parâmetro: Exemplo 8 (cont.) 19 void mostravetor(int vet[], int tam){ 20 int i; 21 22 printf("vetor de tamanho %d:", tam); 23 for(i=0; i<tam; i++){ 24 printf(" %d", vet[i]); 25 } 26 printf("\n"); 27 } 28 29 int main(int argc, char * argv[]){ 30 int A[100], tama; // Vetor tem, no maximo, tamanho 100. 31 32 if(levetor("vetor.txt", A, &tama) == 0){ 33 mostravetor(a, tama); 34 } 35 return(0); 36 } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 32 / 38
Agenda 1 Revisão e Contexto 2 Módulos 3 Funções 4 Vetores/Matrizes como Parâmetros 5 Parâmetros do Programa Fernanda Passos (UFF) Funções em C Programação de Computadores IV 33 / 38
Parâmetros do Programa Algumas vezes é útil passar informação para um programa quando o executamos. Por exemplo, o nosso compilador gcc: gcc é um programa: o compilador que transforma código fonte em executável. Quando chamamos ele, passamos alguns argumentos para ele: gcc codigo.c -o executavel codigo.c, -o e executavel são parâmetros do programa gcc. Podemos passar, via console, argumentos para nosso programa também. Isto é feito através dos argumentos especiais argc e argv. São parâmetros para a função main. Fernanda Passos (UFF) Funções em C Programação de Computadores IV 34 / 38
argc e argv argc: é um inteiro que indica quantos argumentos tem o programa. Inclui o próprio nome do programa. Os argumentos são separados por espaço. argv: é um vetor de strings. Cada palavra é uma string. O argv[0] é o nome do programa. A partir da posição 1, temos os argumentos. Fernanda Passos (UFF) Funções em C Programação de Computadores IV 35 / 38
argc e argv: Exemplo 9 Imprimir Ola e o seu nome, passando ele como argumento do programa. Para rodar:./ola Maria 1 #include <stdio.h> 2 3 int main(int argc, char *argv[]){ 4 5 if(argc < 2){ 6 printf("modo de uso:\n\t%s <seu nome>\n", argv[0]); 7 return(1); 8 } 9 printf("ola %s!\n", argv[1]); 10 return(0); 11 } Fernanda Passos (UFF) Funções em C Programação de Computadores IV 36 / 38
Conversão de String para Valor Numérico O argv é um vetor de strings. Portanto, só podemos passar string para o programa. E se quisermos passar um valor numérico? Fernanda Passos (UFF) Funções em C Programação de Computadores IV 37 / 38
Conversão de String para Valor Numérico O argv é um vetor de strings. Portanto, só podemos passar string para o programa. E se quisermos passar um valor numérico? Para isso, existem funções de conversão de string para int, float, e outros. Na stdlib.h, temos: atoi: converte string para int. atol: converte string para long. atof : converte string para double. Na stdio.h, temos: sprintf: converte de acordo com o formato. Fernanda Passos (UFF) Funções em C Programação de Computadores IV 37 / 38
Exercícios Escreva um programa que receba por parâmetro (pelo console) o nome de dois arquivos. O primeiro é um arquivo que contém um vetor de inteiros. O segundo é um arquivo de saída. O programa deve: ler o arquivo com o vetor, calcular a média dos valores e escrever o resultado de cada valor dividido pela média no arquivo de saída. Fernanda Passos (UFF) Funções em C Programação de Computadores IV 38 / 38