locais ao bloco for. Isto quer dizer que so sao conhecidas dentro deste bloco for esao desconhecidas no resto da funcao main(). Quando usarmos a variavel a dentro do blocofor estaremos usando a variavel a local ao for e nao a variavel a da funcao main().Parametros formaisO segundo tipo de variavel que veremos sao os parametros formais. Estes sao declaradoscomo sendo as entradas de uma funcao. Nao ha motivo para se preocupar com o escopo deles.E facil: o parametro formal e uma variavel local da funcao. Voce pode tambem alterar o valorde um parametro formal, pois esta alteracao nao tera efeito na variavel que foi passada afuncao. Isto tem sentido, pois quando o C passa parametros para uma funcao, sao passadasapenas copias das variaveis. Isto e, os parametros formais existem independentemente dasvariaveis que foram passadas para a funcao. Eles tomam apenas uma copia dos valorespassados para a funcao.Variaveis globaisVariaveis globais sao declaradas, como ja sabemos, fora de todas as funcoes doprograma. Elas sao conhecidas e podem ser alteradas por todas as funcoes do programa.Quando uma funcao tem uma variavel local com o mesmo nome de uma variavel global afuncao dara preferencia a variavel local. Vamos ver um exemplo:int z,k;func1 (...){int x,y;...}func2 (...){int x,y,z;...60z=10;...}main (){int count;...}No exemplo acima as variaveis z e k sao globais. Veja que func2() tem uma variavellocal chamada z. Quando temos entao, em func2(), o comando z=10 quem recebe o valor de10 e a variavel local, nao afetando o valor da variavel global z.Evite ao maximo o uso de variaveis globais. Elas ocupam memoria o tempo todo (as locais soocupam memoria enquanto estao sendo usadas) e tornam o programa mais dificil de ser entendido emenos geral.AUTO AVALIACAOVeja como voce esta. Estude o seguinte programa e aponte o valor de cada variavelsempre que solicitado:#include <stdio.h>int num;int func(int a, int b){a = (a+b)/2; /* Qual e o valor de a apos a atribuicao? */num -= a;return a;}main(){int first = 0, sec = 50;num = 10;num += func(first, sec); /* Qual e o valor de num, first e sec *//* antes e depois da atribuicao? */printf("\n\nConfira! num = %d\tfirst = %d\tsec = %d",num, first, sec);Passagem de parametros por valor e passagem por referenciaJa vimos que, na linguagem C, quando chamamos uma funcao os parametros formais dafuncao copiam os valores dos parametros que sao passados para a funcao. Isto quer dizer quenao sao alterados os valores que os parametros tem fora da funcao. Este tipo de chamada defuncao e denominado chamada por valor. Isto ocorre porque sao passados para a funcaoapenas os valores dos parametros e nao os proprios parametros. Veja o exemplo abaixo:#include <stdio.h>float sqr (float num);void main (){float num,sq;61printf ("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);}float sqr (float num){num=num*num;return num;}No exemplo acima o parametro formal num da funcao sqr() sofre alteracoes dentro dafuncao, mas a variavel num da funcao main() permanece inalterada: e uma chamada porvalor.Outro tipo de passagem de parametros para uma funcao ocorre quando alteracoes nosparametros formais, dentro da funcao, alteram os valores dos parametros que foram passadospara a funcao.