Buscar

Apostila Linguagem de Programação C Modificada (1)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 36 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 36 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 36 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

CENTRO UNIVERSITÁRIO UNIFACVEST 
 
CIÊNCIA DA COMPUTAÇÃO E ENGENHARIAS 
 
 
 
 
 
 
 
 
APOSTILA DE: 
 
LINGUAGEM DE PROGRAMAÇÃO C 
 
 
 
 
 
 
 
 
PROF. Msc. NEYZA BIBIANA GUZMÁN M. 
 
 
 
 
 
 
 
 
Fevereiro de 2014 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
2 
Linguagem de Programação C 
 
A linguagem C foi criada inicialmente por Dennis M. Ritchie e Ken Thompson no laboratório 
Bell em 1972, baseada na linguagem B, de Thompson, evolução da antiga linguagem BCPL. 
A linguagem B foi nomeada com a primeira letra de BCPL e a C com a segunda. 
 
C é uma linguagem vitoriosa como ferramenta na programação de qualquer tipo de sistema 
(sistemas operacionais, planilhas eletrônicas, processadores de texto, gerenciadores de banco 
de dados, processadores gráficos, sistemas de transmissão de dados e telefonia, aparelhos de 
medicina, aparelhos de segurança para solução de problemas de engenharia ou física, etc.). 
Como exemplo, o sistema operacional UNIX é desenvolvido em C. 
 
A linguagem C é uma das mais importantes e populares, principalmente por ser muito 
poderosa, portátil, flexível e pela padronização dos compiladores existentes. 
 
Um compilador lê a primeira instrução do programa, faz uma consistência de sua sintaxe e, se 
não houver erro, converte-a para linguagem de máquina; segue para a próxima instrução, 
repetindo o processo até que a ultima instrução seja atingida ou a consistência aponte algum 
erro. 
 
Se não houver erros, o compilador cria um programa em disco com o sufixo .OBJ, contendo 
as instruções já traduzidas. Este programa não pode ser executado ate que sejam agregadas a 
ele as funções em linguagem de maquina que foram utilizadas no programa e estão em 
arquivos de bibliotecas. Este trabalho é feito por um programa chamado linkeditor, que, alem 
de juntar as funções necessárias ao programa .OBJ, cria um produto final em disco com o 
sufixo .EXE, o qual pode ser executado diretamente do sistema operacional. Um compilador 
não criara um programa em linguagem de maquina antes que este esteja absolutamente livre 
de erros. 
 
1. Programas Sequenciais 
 
As primeiras aulas ministradas no quadro são indispensáveis para a compreensão dos 
exercícios que constam nesta apostila. 
 
Ex2. Desenvolver em linguagem C um programa que efetue o calculo do salário liquido de 
um profissional que trabalhe por hora. Os dados de entrada são valor da hora de trabalho, 
numero de horas trabalhadas no mês e o percentual de desconto do INSS. 
 
/* Calculo de Salário */ 
#include <stdio.h> 
int main(void) 
{ 
 float HT, VH, PD, TD, SB, SL; 
 printf("Quantas horas de trabalho? "); scanf("%f", &HT); 
 printf("Qual o valor da hora? "); scanf("%f", &VH); 
 printf("Qual o percentual de desconto? "); scanf("%f", &PD); 
 SB = HT * VH; 
 TD = (PD/100) * SB; 
 SL = SB - TD; 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
3 
 printf("Salario Bruto ....: %f\n", SB); 
 printf("Desconto .........: %f\n", TD); 
 printf("Salario liquido ..: %f\n", SL); 
 return(0); 
} 
 
Código Especial Finalidade 
\n Gera uma nova linha a partir do ponto que é indicado. 
\t Gera um espaço de tabulação do ponto que é indicado. 
\b Executa um retrocesso de espaço do ponto que é indicado. 
\” Apresenta o símbolo de aspas no ponto em que é indicado. 
\\ Apresenta o símbolo de aspas no ponto em que é indicado. 
\f Gera um salto de pagina de formulário (uso de uma impressora). 
\0 Gera um nulo. 
 
/* Calculo de Salario */ 
#include <stdio.h> 
int main(void) 
{ 
 float HT, VH, PD, TD, SB, SL; 
 printf("Quantas horas de trabalho? "); scanf("%f", &HT); 
 printf("Qual o valor da hora? "); scanf("%f", &VH); 
 printf("Qual o percentual de desconto? "); scanf("%f", &PD); 
 SB = HT * VH; 
 TD = (PD/100) * SB; 
 SL = SB - TD; 
 printf("Salario Bruto ....: %7.2f\n", SB); 
 printf("Desconto .........: %7.2f\n", TD); 
 printf("Salario liquido ..: %7.2f\n", SL); 
 return(0); 
} 
 
1.1. Decisão simples: if 
 
if (condição) 
 <instrução para condição verdadeira>; 
<instrução para condição falsa ou após condição ser verdadeira>; 
 
 ou 
 
if (condição) 
 { 
 <instrução1 para condição verdadeira>; 
 <instrução2 para condição verdadeira>; 
 } 
<instrução para condição falsa ou após condição ser verdadeira>; 
 
 
 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
4 
Ex3.Escrever um programa em linguagem C que faca a leitura de dois valores numéricos, 
efetuar a adição e apresentar o seu resultado caso o valor somado seja maior que 10. 
 
/* Adiciona Numeros */ 
#include <stdio.h> 
int main(void) 
{ 
 int A, B, X; 
 printf("Informe um valor para a variavel A: "); scanf("%d", &A); 
 printf("Informe um valor para a variavel B: "); scanf("%d", &B); 
 X = A + B; 
 if (X > 10) 
 printf("\no valor da variavel X equivale: %d", X); 
 return(0); 
} 
 
Ex4. Escrever um programa em linguagem C que efetue a leitura de dois valores inteiros e 
independentemente da ordem em que foram encontrados, eles devem ser impressos na ordem 
crescente, ou seja, se forem fornecidos 5 e 3 respectivamente devem ser apresentados 3 e 5. 
 
/* Ordena */ 
#include <stdio.h> 
int main(void) 
{ 
 int A, B, X; 
 printf("Informe um valor para a variavel A: "); scanf("%d", &A); 
 printf("Informe um valor para a variavel B: "); scanf("%d", &B); 
 if (A > B) 
 { 
 X = A; 
 A = B; 
 B = X; 
 } 
 printf("\nos valores ordenados sao: %d e %d", A, B); 
 return(0); 
} 
 
1.2. Operadores Relacionais 
 
Símbolo Significado 
== Igual a 
!= Diferente de 
> Maior que 
< Menor que 
>= Maior ou igual que 
<= Menor ou igual que 
 
 
 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
5 
1.3. Decisão composta: if... else 
 
if (condição) 
 <instrução para condição verdadeira>; 
else 
 <instrução para condição falsa >; 
 
 ou 
 
if (condição) 
 { 
 <instrução1 para condição verdadeira>; 
 <instrução2 para condição verdadeira>; 
 } 
else 
 { 
 <instrução1 para condição falsa>; 
 <instrução2 para condição falsa>; 
 } 
 
Ex5. Escrever um programa em linguagem C que faca a leitura de quatro valores numéricos 
referentes a quatro notas bimestrais de um aluno, efetuar o calculo da media e apresenta-la 
junto com uma das seguintes mensagens: caso o valor da media seja maior ou igual a 5, 
apresentar “aluno aprovado” ; caso contrario, apresentar “ aluno reprovado”. 
 
/* Calcula Media Escolar */ 
#include <stdio.h> 
int main(void) 
{ 
 float N1, N2, N3, N4, MD; 
 printf("\nEntre a Nota 1 ...: "); scanf("%f", &N1); 
 printf("Entre a Nota 2 ...: "); scanf("%f", &N2); 
 printf("Entre a Nota 3 ...: "); scanf("%f", &N3); 
 printf("Entre a Nota 4 ...: "); scanf("%f", &N4); 
 MD = (N1 + N2 + N3 + N4) / 4; 
 if (MD >= 5) 
 printf("Aluno aprovado com media = "); 
 else 
 printf("Aluno reprovado com media = "); 
 printf("%5.2f\n", MD); 
 return(0); 
} 
 
1.4. Operadores Lógicos 
 
Operador Função 
&& Conector lógico e 
|| Conector lógico ou 
! Conector lógico nao 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
6 
Ex6. Desenvolver em linguagem C um programa que aceite valoresnuméricos inteiros entre 0 
(zero) e 9 (nove). Se o programa estiver dentro da faixa, o programa deve apresentar a 
mensagem “Valor valido”. Caso o valor esteja fora da faixa, o programa deve apresentar a 
mensagem “Valor invalido”. 
 
/* Operador AND (E) - && */ 
#include <stdio.h> 
int main(void) 
{ 
 int NUMERO; 
 printf("\nEntre um numero entre 0 e 9: "); 
 scanf("%d", &NUMERO); 
 if (NUMERO >= 0 && NUMERO <= 9) 
 printf("Valor valido"); 
 else 
 printf("Valor invalido"); 
 return(0); 
} 
 
Ex7. Escrever um programa em linguagem C que efetue a leitura de três valores referentes as 
medidas dos lados de um triangulo, considerando lados como: A, B, C. Verificar se os lados 
fornecidos formam realmente um triangulo. Se for esta condição verdadeira, deve ser indicado 
qual o tipo de triangulo foi formado: Isósceles, escaleno ou eqüilátero. 
 
/* Checa Triangulo */ 
#include <stdio.h> 
int main(void) 
{ 
 float A, B, C; 
 printf("\nInforme o lado A: "); scanf("%f", &A); 
 printf("Informe o lado B: "); scanf("%f", &B); 
 printf("Informe o lado C: "); scanf("%f", &C); 
 printf("\n"); 
 if (A<B+C && B<A+C && C<A+B) 
 if (A==B && B==C) 
 printf("Triangulo Equilatero\n"); 
 else if (A==B || A==C || C==B) 
 printf("Triangulo Isosceles\n"); 
 else printf("Triangulo Escaleno\n"); 
 else printf("Os valores fornecidos nao formam um triangulo\n"); 
 return(0); 
} 
 
 
 
 
 
 
 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
7 
2. Looping - Laços de Repetição 
 
2.1 Looping com condição no inicio: while 
 
while <(condição)> 
 { 
 <instruções para condição verdadeira>; 
 } 
 
Ex8. Elaborar um programa em linguagem C que execute cinco vezes a solicitação de dois 
números para o calculo e apresentação de uma adição. 
 
/* Looping do tipo While Versao 1A */ 
#include <stdio.h> 
int main(void) 
{ 
 int A, B, R, I; 
 I = 1; 
 while (I <= 5) 
 { 
 printf("\n\nEntre um valor para A: "); scanf("%d", &A); 
 printf("Entre um valor para B: "); scanf("%d", &B); 
 R = A + B; 
 printf("\nO resultado corresponde a: %d", R); 
 I = I + 1; /* ou poderia ser usado I + +; */ 
 } 
 return(0); 
} 
 
OBS. O uso de contadores na linguagem C pode ser escrito de outra forma. No programa 
anterior, é encontrada a linha I = I + 1 que poderia ter sido escrita como I + +; 
 
Ex9. No exercício 8, imagine ainda outra situação na qual o usuário deseja executar a rotina 
do programa varias vezes, mas ele não sabe quantas vezes ao certo deve executar o trecho de 
programa. Neste caso, não seria conveniente manter um contador para controlar o laço. Seria 
melhor que o programa fizesse ao usuário uma pergunta, solicitando se ele deseja ou não 
continuar executando o programa. 
 
/* Looping do tipo While Versao 3A */ 
#include <stdio.h> 
int main(void) 
{ 
 int A, B, R, RESP = 1; 
 while (RESP == 1) 
 { 
 printf("\n\nEntre um valor para A: "); scanf("%d", &A); 
 printf("Entre um valor para B: "); scanf("%d", &B); 
 R = A + B; 
 printf("\nO resultado corresponde a: %d", R); 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
8 
 printf("\n\nDeseja continuar?"); 
 printf("\nTecle [1] para SIM / [0] para NAO: "); 
 scanf("%d", &RESP); 
 } 
 return(0); 
} 
 
2.2. Looping com condição no fim : do...while 
 
do 
 { 
 <instrução1 enquanto condição verdadeira>; 
 <instrução2 enquanto condição verdadeira>; 
 <instruçãoN enquanto condição verdadeira>; 
 } 
while <(condição)>; 
 
Ex10. Igual ao Ex8. Elaborar um programa em linguagem C que execute cinco vezes a 
solicitação de dois números para o calculo e apresentação de uma adição. 
 
/* Looping do tipo Do...While Versao 1B */ 
#include <stdio.h> 
int main(void) 
{ 
 int A, B, R, I = 1; 
 do 
 { 
 printf("\n\nEntre um valor para A: "); scanf("%d", &A); 
 printf("Entre um valor para B: "); scanf("%d", &B); 
 R = A + B; 
 printf("\nO resultado corresponde a: %d", R); 
 I += 1; /* equivalente a I=I+1 ou poderia ser usado I + +; */ 
 } 
 while (I <= 5); 
 return(0); 
} 
 
Ex11. O mesmo programa que o anterior, porem considere que o usuário encerrara o 
processamento segundo sua vontade, respondendo a pergunta deseja continuar?. 
 
/* Looping do tipo Do...While Versao 2B */ 
#include <stdio.h> 
int main(void) 
{ 
 int A, B, R, RESP = 1; 
 do 
 { 
 printf("\n\nEntre um valor para A: "); scanf("%d", &A); 
 printf("Entre um valor para B: "); scanf("%d", &B); 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
9 
 R = A + B; 
 printf("\nO resultado corresponde a: %d", R); 
 printf("\n\nDeseja continuar?"); 
 printf("\nTecle [1] para SIM / [0] para NAO: "); 
 scanf("%d", &RESP); 
 } 
 while (RESP == 1); 
 return(0); 
} 
 
2.3. Loopings Finitos: for 
 
for (<inicio>; <fim>; <incremento>) 
 { 
 <instruções1>; 
 <instrucoes2>; 
 <instrucoesN>; 
 } 
 
Ex12. Elaborar em linguagem C um programa que solicite a leitura de dois valores para as 
variáveis A e B. O programa deve efetuar a adição dos dois valores e apresentar o valor do 
resultado obtido, repetindo esta seqüência por cinco vezes. 
 
/* Looping do tipo For 1C */ 
#include <stdio.h> 
int main(void) 
{ 
 int A, B, R, I; 
 for(I = 1; I <= 5; I++) 
 { 
 printf("\n\nEntre um valor para A: "); scanf("%d", &A); 
 printf("Entre um valor para B: "); scanf("%d", &B); 
 R = A + B; 
 printf("\nO resultado corresponde a: %d", R); 
 } 
 return(0); 
} 
 
Ex13. Elaborar em linguagem C um programa que escreva na tela os valores 1, 2, 3, 4, 5, 6, 7, 
8, 9 e 10. 
/* Looping crescente de 1 em 1 */ 
#include <stdio.h> 
int main(void) 
{ 
 int I; 
 for (I = 1; I <= 10; I++) 
 printf("I = %2d\n", I); 
 return(0); 
} 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
10 
Ex14 Programa contagem decrescente. Elaborar um programa em linguagem C que escreva 
na tela os valores 10, 9, 8, 7, 6, 5, 4, 3, 2 e 1. 
 
/* Looping decrescente de 1 em 1 */ 
#include <stdio.h> 
int main(void) 
{ 
 int I; 
 for (I = 10; I >= 1; I--) 
 printf("I = %2d\n", I); 
 return(0); 
} 
 
3. Vetores, Matrizes, String e Estruturas (Registros) 
3.1. Vetores 
 
Ex15. Elaborar em linguagem C um programa que efetue a leitura do vetor MD, o qual ira 
guardar a media de 8 alunos. O programa solicita também que seja calculada a media geral da 
turma. 
 
/* Calculo de Media : 8 alunos */ 
#include <stdio.h> 
int main(void) 
{ 
 float MD[8]; 
 float MEDIA, SOMA = 0; 
 int I; 
 printf("\nCalculo de media escolar\n\n"); 
 for (I = 0; I <= 7; I++) 
 { 
 printf("Informe a %da. nota: ", I+1); scanf("%f", &MD[I]); 
 SOMA += MD[I]; 
 } 
 MEDIA = SOMA / 8; 
 printf("\nA media do grupo equivale a: %6.2f\n\n", MEDIA); 
 return(0); 
} 
 
Obs. Tanto com vetores como com matrizes o primeiro índice é o 0 (zero). No exercício 
anterior foi lido um vetor de 8 elementos, iniciando com índice 0 até o índice 7. Em se 
tratando de uma matriz de 4x4, o índice da linha variaria de 0 (zero) até 3 e o da linha de 0 
(zero)até 3. 
 
Ex16. Desenvolver um programa que efetue a leitura de cinco elementos de um vetor A. No 
final apresente o total da soma de todos os elementos que sejam impares. 
 
/* Soma os elementos impares de um vetor */ 
#include <stdio.h> 
 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
11 
int main(void) 
{ 
 int A[5]; 
 int I, SOMA = 0; 
 printf("\nSomatorio de elementos impares\n\n"); 
 
 /* Entrada de dados */ 
 
 for (I = 0; I <= 4; I++) 
 { 
 printf("Informe um valor para o elemento nr. %2d: ", I); 
 scanf("%d", &A[I]); 
 } 
 
 /* Processamento elemento impar */ 
 
 for (I = 0; I <= 4; I++) 
 if (A[I] % 2 == 1) 
 SOMA += A[I]; 
 
 /* Apresentacao das matrizes */ 
 
 printf("\nA soma dos elementos equivale a: %4d\n\n", SOMA); 
 return(0); 
} 
 
3.2. Matrizes 
 
Ex17. Desenvolver um programa em C que leia os dados de uma matriz, os dados a serem 
lidos são as notas de 8 alunos, sendo que para cada aluno serão lidas 4 notas. Posteriormente 
escrever as notas dos 8 alunos. 
 
/* Calculo de Media de 8 alunos com 4 notas */ 
#include <stdio.h> 
int main(void) 
{ 
 float MD[8][4], NUMERO; 
 int I, J; 
 printf("\nLeitura e apresentacao de notas\n"); 
 
 /* Entrada das notas */ 
 
 for (I = 0; I <= 7; I++) 
 { 
 printf("\nInforme as notas do %do. aluno: \n\n", I+1); 
 for (J = 0; J <= 3; J++) 
 { 
 printf("Nota %d: ", J+1); 
 scanf("%f", &NUMERO); 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
12 
 MD[I][J] = NUMERO; 
 } 
 } 
 
 /* Saida das notas */ 
 
 for (I = 0; I <= 7; I++) 
 { 
 printf("\nAs notas do aluno %d sao : \n\n", I+1); 
 for (J = 0; J <= 3; J++) 
 printf("Nota %d: %5.2f\n", J+1, MD[I][J]); 
 } 
 return(0); 
} 
 
OBS. Veja que a entrada de valores reais na matriz MD ocorre com a utilização de uma 
variável de apoio (tipo float) representada pelo rotulo NUMERO. Note que a entrada não esta 
sendo efetuada diretamente na matriz MD, e sim por intermédio da variável de apoio 
NUMERO. Isto se faz necessário, pois a entrada direta de valores reais em matrizes não é 
aceita corretamente pelos compiladores de linguagem C. É ideal sempre utilizar uma variável 
de apoio para a entrada de valores reais em vetores ou matrizes. 
 
3.3 String 
 
String é um dos mais importantes tipos de dados utilizados em uma linguagem de 
programação, pois é usado para a manipulação e o armazenamento de textos. Na linguagem 
C, este tipo de dado recebe um tratamento diferente de outras linguagens, pois caracteriza-se 
por ser um vetor do tipo char o qual é terminado com o caractere null “\0”. 
 
Ex18. Implementar um programa que peça o nome e o sobrenome, escreva um cumprimento e 
apresente o nome completo. 
 
/* Pede dados pessoais */ 
#include <stdio.h> 
int main(void) 
{ 
 char NOME[10], SB_NOME[15]; 
 printf("Informe seu nome ........: "); scanf("%s", NOME); 
 printf("Informe seu sobre nome ..: "); scanf("%s", SB_NOME); 
 printf("Seja bem vindo, %s %s\n\n", NOME, SB_NOME); 
 return(0); 
} 
 
Obs. Um detalhe a ser observado é a ausência do operador &, precedendo o segundo 
argumento das instruções de entrada com a função scanf(). A função scanf() é bastante 
limitada para a leitura de strings, por exemplo no programa anterior se ao ler o valor da 
primeira string for digitado um espaço em branco, por exemplo, Bibiana Guzmán, o programa 
armazenara no primeiro vetor Bibiana e no segundo vetor Guzmán, pois entende que o espaço 
em branco é o fim do vetor. 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
13 
A seguir é apresentada a função fgets() que pertence a biblioteca stdio.h, esta função possui o 
propósito de efetuar a leitura de dados do tipo string fornecidos via teclado. Ela aceita 
caracteres em branco no meio da string, colocando o caractere de controle “\0” apenas quando 
for pressionada a tecla <Enter>. 
 
Para utilizar esta função, é preciso informar três parâmetros, sendo o nome da variável string, 
o tamanho do vetor string e informar o nome do buffer em uso. 
 
fgets(VARIAVEL, tamanho, stdin); 
 
Ex19. Resolver o exercício anterior usando a função fgets() 
 
/* Pede dados pessoais - fgets() */ 
#include <stdio.h> 
int main(void) 
{ 
 char NOME[20], SB_NOME[20]; 
 printf("Informe seu nome ........: "); fgets(NOME, 20, stdin); 
 printf("Informe seu sobre nome ..: "); fgets(SB_NOME, 20, stdin); 
 printf("Seja bem vindo, %s %s\n\n", NOME, SB_NOME); 
 return(0); 
} 
 
3.4. Aplicações praticas com vetores e matrizes 
 
Ex20. Implemente um programa que leia e apresente os nomes de 10 pessoas. O programa em 
questão fará a leitura e em seguida a escrita dos 10 nomes. Considerar que cada nome tenha 
até 40 caracteres de comprimento. 
 
/* Leitura e escrita de 10 nomes */ 
#include <stdio.h> 
int main(void) 
{ 
 int I; 
 char NOME[10][40]; 
 printf("\n\nListagem de nomes\n\n"); 
 
 /* Entrada dos dados */ 
 
 for (I = 0; I <= 9; I++) 
 { 
 printf("Digite o %2do. nome: ", I+1); 
 fflush(stdin); fgets(NOME[I], 40, stdin); 
 } 
 
 /* Apresentacao dos nomes */ 
 
 for (I = 0; I <= 9; I++) 
 printf("Nome: %2d --> %s", I+1, NOME[I]); 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
14 
 return(0); 
} 
 
Obs. Repare que antes de efetuar a entrada de um nome com a função fgets(NOME[I], 40, 
stdin), esta sendo utilizada a função fflush() com o parâmetro stdin. 
 
A função fflush() caracteriza-se por ser um comando de limpeza de buffer (stream), em que 
stdin (standard input) é o stream a ser limpo, ou seja, o stream de entrada padrão, no caso 
representado pelo teclado. 
 
Quando se efetua a entrada de dados numéricos, o buffer de teclado não necessita ser limpo, 
porém, quando se trata de dados do tipo string, esta ação se torna necessária, pois se não fizer 
essa limpeza, o programa não funciona corretamente. Por esta razão é que a função fflush() 
precede a funcao fgets(). 
 
Nada impede também de utilizar a funcao fflush() antes de uma função scanf(). Daqui para 
frente todos os programas vão utilizar fflush() tanto para dados do tipo string, como também 
para dados do tipo numéricos. 
 
Ex21. Classificação de elementos. Ler um vetor de 5 elementos numéricos. Ordenar o vetor e 
apresentar o vetor ordenado. 
 
/* Escreve numeros ordenados */ 
#include <stdio.h> 
int main(void) 
{ 
 int NUMERO[5], I, J, X; 
 printf("Classificacao de elementos numericos\n\n"); 
 
 /* Entrada de dados */ 
 
 for (I = 0; I <= 4; I++) 
 { 
 printf("Informe o %do. valor: ", I+1); 
 fflush(stdin); scanf("%d", &NUMERO[I]); 
 } 
 
 /* Classificacao */ 
 
 for (I = 0; I <= 3; I++) 
 for (J = I+1; J <= 4; J++) 
 { 
 if (NUMERO[I] > NUMERO[J]) 
 { 
 X = NUMERO[I]; 
 NUMERO[I] = NUMERO[J]; 
 NUMERO[J] = X; 
 } 
 } 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
15 
 /* Apresentacao dos dados */ 
 
 printf("\n\n"); 
 for (I = 0; I <= 4; I++) 
 printf("Agora o %do. valor e': %3d\n", I+1, NUMERO[I]); 
 return(0); 
} 
 
Ex22. Implementar um programa em C que leia os nomes de 10 pessoas, o tamanho dos 
nomes das pessoasnão pode passar de 40. Após lidos os nomes, ordená-los e apresentar os 
nomes ordenados. 
 
/* Leitura, ordenacao e escrita */ 
#include <stdio.h> 
#include <string.h> 
int main(void) 
{ 
 int I, J; 
 char NOME[10][40], X[40]; 
 printf("Listagem de nomes\n\n"); 
 
 /* Entrada dos dados */ 
 
 for (I = 0; I <= 9; I++) 
 { 
 printf("Digite o %2do. nome: ", I+1); 
 fflush(stdin); fgets(NOME[I], 40, stdin); 
 } 
 
 /* Ordenacao de strings */ 
 
 for (I = 0; I <= 8; I++) 
 for (J = I+1; J <= 9; J++) 
 if (strcmp(NOME[I], NOME[J]) > 0) 
 { 
 strcpy(X, NOME[I]); 
 strcpy(NOME[I], NOME[J]); 
 strcpy(NOME[J], X); 
 } 
 
 /* Apresentacao dos nomes */ 
 
 printf("\n"); 
 for (I = 0; I <= 9; I++) 
 printf("Nome: %2d --> %s", I+1, NOME[I]); 
 return(0); 
} 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
16 
Obs. Como será feita a ordenação de valores do tipo string, serão utilizadas as funções 
strcmp() e strcpy() pertencentes a biblioteca string.h, que são especificas para o tratamento 
do tipo de dado string. 
 
A função strcmp() processa a comparação de duas strings, retornando um de três valores 
possiveis: 
 
 Maior que zero (>0), caso a primeira string seja maior que a segunda string; 
 Igual a zero (=0), caso a primeira string seja igual a segunda string; 
 Menor que zero (0), caso a primeira string seja menor que a segunda string. 
 
Depois de executada a comparação, a função strcpy() fará a copia da cadeia de caracteres da 
segunda string para a primeira string, ou seja uma operação semelhante a troca de valores de 
duas variáveis. 
 
Ex.23. Pesquisa de elementos. Implementar um programa que efetue a leitura de uma matriz 
de 10 nomes, após a leitura efetuar uma pesquisa na referida matriz. Encerrar o programa 
quando o usuário assim o desejar. 
 
/* Pesquisa */ 
#include <stdio.h> 
#include <string.h> 
 
int main(void) 
{ 
 int I, ACHA; 
 char NOME[10][40], PESQ[40], RESP; 
 printf("\nPesquisa sequencial de nomes\n\n"); 
 
 /* Entrada dos dados */ 
 
 for (I = 0; I <= 9; I++) 
 { 
 printf("Digite o %2do. nome: ", I+1); 
 fflush(stdin); fgets(NOME[I], 40, stdin); 
 } 
 
 /* Processamento da pesquisa enquanto RESP = S */ 
 
 RESP = 'S'; 
 while (RESP == 'S' || RESP == 's') 
 { 
 printf("\nEntre o nome a ser pesquisado: "); 
 fflush(stdin); fgets(PESQ, 40, stdin); 
 I = 0; 
 ACHA = 0; 
 
 
 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
17 
 while (I <= 9 && ACHA == 0) 
 if (strcmp(PESQ, NOME[I]) == 0) 
 ACHA = 1; 
 else 
 I += 1; 
 if (ACHA == 1) 
 printf("%s foi localizado na posicao %d",PESQ, I+1); 
 else 
 printf("%s nao foi localizado", PESQ); 
 printf("\n\nContinua? [S]IM/[N]AO + <Enter>: "); 
 fflush(stdin); RESP = getchar(); 
 } 
 return(0); 
} 
 
A variável ACHA exerce um papel importante dentro da rotina de pesquisa, pois ela serve 
como um pivô, estabelecendo um valor verdadeiro quando uma determinada informação é 
localizada. Este tipo de tratamento de variável é conhecido de FLAG (bandeira). 
 
Ex24. Pesquisa seqüencial com números. Leia um vetor com 5 elementos. Ordenar o vetor e 
apresentar os elementos ordenados. 
 
/* Pesquisa 2 */ 
#include <stdio.h> 
int main(void) 
{ 
 int NUMERO[5], I, ACHA, PESQ; 
 char RESP; 
 printf("\nPesquisa sequencial de numeros\n\n"); 
 
 /* Entrada de dados */ 
 
 for (I = 0; I <= 4; I++) 
 { 
 printf("Informe o %do. numero: ", I+1); 
 fflush(stdin); scanf("%d", &NUMERO[I]); 
 } 
 
 /* Processamento da pesquisa enquanto RESP = S */ 
 
 RESP = 'S'; 
 while (RESP == 'S' || RESP == 's') 
 { 
 printf("\nEntre o numero a ser pesquisado: "); 
 fflush(stdin); scanf("%d", &PESQ); 
 I = 0; 
 ACHA = 0; 
 
 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
18 
 while (I <= 4 && ACHA == 0) 
 if (PESQ == NUMERO[I]) 
 ACHA = 1; 
 else 
 I += 1; 
 if (ACHA == 1) 
 printf("%d foi localizado na posicao %d",PESQ, I+1); 
 else 
 printf("%d nao foi localizado", PESQ); 
 printf("\n\nContinua? [S]IM/[N]AO + <Enter>: "); 
 fflush(stdin); RESP = getchar(); 
 } 
 return(0); 
} 
 
3.5. Struct ( Estruturas ou Registros –Matrizes Heterogêneas ) 
 
Provavelmente você já tenha deparado com um problema de programação no qual deseje 
agrupar sob um único nome um conjunto de tipos de dados similares. O problema de agrupar 
dados desiguais em C é resolvido pelo uso de Struct. Estruturas (struct) são tipos de variáveis 
que agrupam dados geralmente desiguais; ao passo que matrizes e vetores agrupam dados 
similares. Os itens de dados da estrutura são chamados de membros, e os da matriz e vetor, de 
elementos. Em algumas linguagens de programação, estruturas são chamadas de registros. 
 
O exemplo tradicional de uma estrutura é o registro de uma folha de pagamento: um 
funcionário é descrito por um conjunto de atributos, tais como nome (string), o numero do 
seu departamento (inteiro), salário (float), e assim por diante. Possivelmente, haverá outros 
funcionários, e você vai querer que seu programa os guarde, formando um vetor de estruturas. 
 
 
 
4. Funções (definidas pelo programador) e suas bibliotecas 
 
Ex25. Desenvolver um programa que implemente uma calculadora, o programa deve 
apresentar um menu de seleções no programa principal. Esse menu deve dar ao usuário a 
possibilidade de escolher uma entre quatro operações aritméticas. Escolhida a opção desejada, 
deve ser solicitada a entrada de dois números, e processada a operação, deve ser exibido o 
resultado. 
 
Tendo uma idéia da estrutura geral do programa, será escrito em separado cada algoritmo com 
seus detalhes de operação. Primeiro o programa principal e depois as outras rotinas. 
 
Programa Principal 
 
1. Apresente um menu de seleção com cinco opções: 
a. Adição 
b. Subtração 
c. Multiplicação 
d. Divisão 
e. Fim de programa 
 
2. Ao ser selecionado um valor, a rotina correspondente deve ser executada; 
3. Ao escolher o valor 5, o programa deve ser encerrado. 
 
Rotina 1 –Adição 
1. Ler dois valores, no caso variáveis A e B; 
2. Efetuar a soma das variáveis A e B, implicando o seu resultado na variável R; 
3. Apresentar o valor da variável R; 
4. Voltar ao programa principal. 
 
Rotina 2 –Subtração 
1. Ler dois valores, no caso variáveis A e B; 
2. Efetuar a subtração das variáveis A e B, implicando o seu resultado na variável R; 
3. Apresentar o valor da variável R; 
4. Voltar ao programa principal. 
 
Rotina 3 –Multiplicação 
1. Ler dois valores, no caso variáveis A e B; 
2. Efetuar a multiplicação das variáveis A e B, implicando o seu resultado na variável R; 
3. Apresentar o valor da variável R; 
4. Voltar ao programa principal. 
 
Rotina 4 –Divisão 
1. Ler dois valores, no caso variáveis A e B; 
2. Efetuar a divisão das variáveis A e B, implicando o seu resultado na variável R; 
3. Apresentar o valor da variável R; 
4. Voltar ao programa principal. 
 
 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
20 
Observe que em cada rotina serão utilizadas as mesmas variáveis, porem elas não serão 
executadas ao mesmo tempopara todas as operações. Serão utilizadas em separado e somente 
a rotina escolhida. 
 
/* Programa Calculadora */ 
 
#include <stdio.h> 
 
float R, A, B; 
 
int rotadicao(void); 
int rotsubtracao(void); 
int rotmultiplicacao(void); 
int rotdivisao(void); 
 
int main(void) 
{ 
 char TECLA; 
 int OPCAO = 0; 
 while (OPCAO != 5) 
 { 
 printf("\n\nMenu Principal\n"); 
 printf("--------------\n\n"); 
 printf("1 - Adicao\n"); 
 printf("2 - Subtracao\n"); 
 printf("3 - Multiplicacao\n"); 
 printf("4 - Divisao\n"); 
 printf("5 - Fim de Programa\n\n"); 
 printf("Escolha uma opcao: "); fflush(stdin); scanf("%d", &OPCAO); 
 if (OPCAO != 5) 
 { 
 if (OPCAO == 1) 
 rotadicao(); 
 if (OPCAO == 2) 
 rotsubtracao(); 
 if (OPCAO == 3) 
 rotmultiplicacao(); 
 if (OPCAO == 4) 
 rotdivisao(); 
 } 
 } 
 return(0); 
} 
 
int rotadicao(void) 
{ 
 char TECLA; 
 printf("\n\nRotina de Soma\n"); 
 printf("--------------\n\n"); 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
21 
 printf("Entre um valor para A: "); 
 fflush(stdin); scanf("%f", &A); 
 printf("Entre um valor para B: "); 
 fflush(stdin); scanf("%f", &B); 
 R = A + B; 
 printf("\nO resultado entre A e B = %6.2f\n", R); 
 printf("\nTecle <Enter> para acessar o menu: "); 
 fflush(stdin); 
 while ((TECLA = getchar()) != '\r') 
 return(0); 
} 
 
int rotsubtracao(void) 
{ 
 char TECLA; 
 printf("\n\nRotina de Subtracao\n"); 
 printf("-------------------\n\n"); 
 printf("Entre um valor para A: "); 
 fflush(stdin); scanf("%f", &A); 
 printf("Entre um valor para B: "); 
 fflush(stdin); scanf("%f", &B); 
 R = A - B; 
 printf("\nO resultado entre A e B = %6.2f\n", R); 
 printf("\nTecle <Enter> para acessar o menu: "); 
 fflush(stdin); 
 while ((TECLA = getchar()) != '\r') 
 return(0); 
 
} 
 
int rotmultiplicacao(void) 
{ 
 char TECLA; 
 printf("\n\nRotina de Multiplicacao\n"); 
 printf("-----------------------\n\n"); 
 printf("Entre um valor para A: "); 
 fflush(stdin); scanf("%f", &A); 
 printf("Entre um valor para B: "); 
 fflush(stdin); scanf("%f", &B); 
 R = A * B; 
 printf("\nO resultado entre A e B = %6.2f\n", R); 
 printf("\nTecle <Enter> para acessar o menu: "); 
 fflush(stdin); 
 while ((TECLA = getchar()) != '\r') 
 return(0); 
} 
 
int rotdivisao(void) 
{ 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
22 
 char TECLA; 
 printf("\n\nRotina de Divisao\n"); 
 printf("-----------------\n\n"); 
 printf("Entre um valor para A: "); 
 fflush(stdin); scanf("%f", &A); 
 printf("Entre um valor para B: "); 
 fflush(stdin); scanf("%f", &B); 
 if (B == 0) 
 printf("\nErro de divisao\n"); 
 else 
 { 
 R = A / B; 
 printf("\nO resultado entre A e B = %6.2f\n", R); 
 } 
 printf("\nTecle <Enter> para acessar o menu: "); 
 fflush(stdin); 
 while ((TECLA = getchar()) != '\r') 
 return(0); 
} 
 
Note a definição inicial dos nomes das funções criadas manualmente antes da função main(). 
Esta ação estabelece os protótipos das funções a serem utilizadas no programa. 
 
O uso de protótipos de função faz com que haja uma verificação mais forte dos tipos em uso, 
desta forma o compilador pode encontrar e apresentar quaisquer conversões de tipos que 
sejam ilegais. Estabelecer os protótipos de funções é uma exigência da norma ANSI para a 
linguagem C, mesmo quando o compilador diretamente não exige esta definição. 
 
Note que as quatro funções criadas (rotsoma(), rotsubtracao(), rotmultiplicacao() e 
rotdivisao() são do tipo int e não retornam para o programa principal nenhum tipo de valor, 
por essa razão esta sendo colocada a instrução return(0). Cada função definida no programa 
manualmente tem por finalidade ler dois valores e processar o referido calculo, apresentando 
o respectivo resultado. 
 
Observe que dentro de cada função existe a definição da variável TECLA como sendo uma 
string. Esta variável se caracteriza por ser local, valida somente dentro de cada função, por 
isso ela estará sendo definida cinco vezes, incluindo a sua definição também na função main() 
(rotina principal). 
 
As variáveis A, B e R são globais (variáveis publicas), e para tal condição foram definidas 
acima da função main(), por esta razão são reconhecidas pelas funções que estão 
subordinadas a função main() (rotina principal). 
 
Perceba que ao final de cada rotina de calculo estão sendo utilizadas antes da instrução 
return(), as seguintes linhas de código: 
 
printf("\nTecle <Enter> para acessar o menu: "); 
fflush(stdin); 
while ((TECLA = getchar()) != '\r') 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
23 
 
As linhas de código em uso efetuam, respectivamente, a apresentação da mensagem “tecle 
<ENTER> para acessar o menu:” , a limpeza do buffer que esta carregado com os valores 
da rotina informados via teclado (isto é necessário para interceptar a tecla <ENTER>) e 
mantem um laço de repetição com o comando while que verifica se a tecla pressionada é a 
<ENTER>. Se esta condição for verdadeira, o laço é encerrado. 
 
Note que a condição do laço se caracteriza por ser: ((TECLA = getchar()) != '\r')). Ou seja, 
enquanto a tecla pressionada for diferente de <ENTER> representado por '\r' , o laço se 
mantém em operação. 
 
A seguir, é apresentado o mesmo programa, porém fazendo com que a variável TECLA seja 
usada como global. 
 
Ex.26 
 
/* Programa Calculadora */ 
 
#include <stdio.h> 
 
char TECLA; 
float R, A, B; 
 
int rotadicao(void); 
int rotsubtracao(void); 
int rotmultiplicacao(void); 
int rotdivisao(void); 
 
int main(void) 
{ 
 int OPCAO = 0; 
 while (OPCAO != 5) 
 { 
 printf("\n\nMenu Principal\n"); 
 printf("--------------\n\n"); 
 printf("1 - Adicao\n"); 
 printf("2 - Subtracao\n"); 
 printf("3 - Multiplicacao\n"); 
 printf("4 - Divisao\n"); 
 printf("5 - Fim de Programa\n\n"); 
 printf("Escolha uma opcao: "); fflush(stdin); scanf("%d", &OPCAO); 
 if (OPCAO != 5) 
 { 
 if (OPCAO == 1) 
 rotadicao(); 
 if (OPCAO == 2) 
 rotsubtracao(); 
 if (OPCAO == 3) 
 rotmultiplicacao(); 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
24 
 if (OPCAO == 4) 
 rotdivisao(); 
 } 
 } 
 return(0); 
} 
 
int rotadicao(void) 
{ 
 char TECLA; 
 printf("\n\nRotina de Soma\n"); 
 printf("--------------\n\n"); 
 printf("Entre um valor para A: "); 
 fflush(stdin); scanf("%f", &A); 
 printf("Entre um valor para B: "); 
 fflush(stdin); scanf("%f", &B); 
 R = A + B; 
 printf("\nO resultado entre A e B = %6.2f\n", R); 
 printf("\nTecle <Enter> para acessar o menu: "); 
 fflush(stdin); 
 while ((TECLA = getchar()) != '\r') 
 return(0); 
} 
 
int rotsubtracao(void) 
{ 
 char TECLA; 
 printf("\n\nRotina de Subtracao\n"); 
 printf("-------------------\n\n"); 
 printf("Entre um valor para A: "); 
 fflush(stdin); scanf("%f", &A); 
 printf("Entre um valor para B: "); 
 fflush(stdin); scanf("%f", &B); 
 R = A - B; 
 printf("\nO resultado entre A e B = %6.2f\n", R); 
 printf("\nTecle <Enter>para acessar o menu: "); 
 fflush(stdin); 
 while ((TECLA = getchar()) != '\r') 
 return(0); 
 
} 
 
int rotmultiplicacao(void) 
{ 
 char TECLA; 
 printf("\n\nRotina de Multiplicacao\n"); 
 printf("-----------------------\n\n"); 
 printf("Entre um valor para A: "); 
 fflush(stdin); scanf("%f", &A); 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
25 
 printf("Entre um valor para B: "); 
 fflush(stdin); scanf("%f", &B); 
 R = A * B; 
 printf("\nO resultado entre A e B = %6.2f\n", R); 
 printf("\nTecle <Enter> para acessar o menu: "); 
 fflush(stdin); 
 while ((TECLA = getchar()) != '\r') 
 return(0); 
} 
 
int rotdivisao(void) 
{ 
 char TECLA; 
 printf("\n\nRotina de Divisao\n"); 
 printf("-----------------\n\n"); 
 printf("Entre um valor para A: "); 
 fflush(stdin); scanf("%f", &A); 
 printf("Entre um valor para B: "); 
 fflush(stdin); scanf("%f", &B); 
 if (B == 0) 
 printf("\nErro de divisao\n"); 
 else 
 { 
 R = A / B; 
 printf("\nO resultado entre A e B = %6.2f\n", R); 
 } 
 printf("\nTecle <Enter> para acessar o menu: "); 
 fflush(stdin); 
 while ((TECLA = getchar()) != '\r') 
 return(0); 
} 
 
4.1. Estrutura de controle com múltipla escolha 
O programa anterior apresenta o modo de seleção das funções feito com instruções if. Perceba 
que se o programa possuir um menu com 15 opções, devem ser definidas 15 opções do tipo if 
para verificar a escolha do operador. Apesar de a forma apresentada ser valida, ela pode ser 
simplificada com a utilização da instrução switch, que possui a sintaxe: 
 
Switch <variavel> 
 { 
 Case <opcao1>: <operacao1>; break; 
 Case <opcao2>: <operacao2>; break; 
 Case <opcao3>: <operacao3>; break; 
 Default : <operacao default>; break; 
 } 
Em que : 
<variavel> -o nome da variável a ser controlada na decisão; 
<opcao> -o conteúdo da variável a ser verificado; 
<operacao> -a execução de alguma instrução especifica. 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
26 
 
A instrução default de switch e qualquer operação a ela subordinada são opcionais, não 
caracterizando uma obrigatoriedade o seu uso. A instrução break tem a finalidade de desviar 
o processamento para fora do comando switch. Isto é necessário, uma vez que após o 
processamento da função, ele retornara para a primeira instrução após sua chamada, que neste 
caso sera break. 
 
A rotina principal do programa calculadora pode ser escrita fazendo uso da instrução switch 
no selecionamento de uma opção escolhida pelo operador, perceba que o programa principal 
ficou menor em numero de linhas, confira a seguir. 
 
Ex27. 
 
/* Programa Calculadora */ 
 
#include <stdio.h> 
 
char TECLA; 
float R, A, B; 
 
int rotadicao(void); 
int rotsubtracao(void); 
int rotmultiplicacao(void); 
int rotdivisao(void); 
 
int main(void) 
{ 
 int OPCAO = 0; 
 while (OPCAO != 5) 
 { 
 printf("\n\nMenu Principal\n"); 
 printf("--------------\n\n"); 
 printf("1 - Adicao\n"); 
 printf("2 - Subtracao\n"); 
 printf("3 - Multiplicacao\n"); 
 printf("4 - Divisao\n"); 
 printf("5 - Fim de Programa\n\n"); 
 printf("Escolha uma opcao: "); fflush(stdin); scanf("%d", &OPCAO); 
 if (OPCAO != 5) 
 { 
 switch (OPCAO) 
 { 
 case 1 : rotadicao(); break; 
 case 2 : rotsubtracao(); break; 
 case 3 : rotmultiplicacao(); break; 
 case 4 : rotdivisao(); break; 
 default : printf("Opcao invalida - Tecle <Enter>"); 
 fflush(stdin); 
 while ((TECLA = getchar()) != '\r') 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
27 
 break; 
 } 
 } 
 } 
 return(0); 
} 
 
int rotadicao(void) 
{ 
 char TECLA; 
 printf("\n\nRotina de Soma\n"); 
 printf("--------------\n\n"); 
 printf("Entre um valor para A: "); 
 fflush(stdin); scanf("%f", &A); 
 printf("Entre um valor para B: "); 
 fflush(stdin); scanf("%f", &B); 
 R = A + B; 
 printf("\nO resultado entre A e B = %6.2f\n", R); 
 printf("\nTecle <Enter> para acessar o menu: "); 
 fflush(stdin); 
 while ((TECLA = getchar()) != '\r') 
 return(0); 
} 
 
int rotsubtracao(void) 
{ 
 char TECLA; 
 printf("\n\nRotina de Subtracao\n"); 
 printf("-------------------\n\n"); 
 printf("Entre um valor para A: "); 
 fflush(stdin); scanf("%f", &A); 
 printf("Entre um valor para B: "); 
 fflush(stdin); scanf("%f", &B); 
 R = A - B; 
 printf("\nO resultado entre A e B = %6.2f\n", R); 
 printf("\nTecle <Enter> para acessar o menu: "); 
 fflush(stdin); 
 while ((TECLA = getchar()) != '\r') 
 return(0); 
 
} 
 
int rotmultiplicacao(void) 
{ 
 char TECLA; 
 printf("\n\nRotina de Multiplicacao\n"); 
 printf("-----------------------\n\n"); 
 printf("Entre um valor para A: "); 
 fflush(stdin); scanf("%f", &A); 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
28 
 printf("Entre um valor para B: "); 
 fflush(stdin); scanf("%f", &B); 
 R = A * B; 
 printf("\nO resultado entre A e B = %6.2f\n", R); 
 printf("\nTecle <Enter> para acessar o menu: "); 
 fflush(stdin); 
 while ((TECLA = getchar()) != '\r') 
 return(0); 
} 
 
int rotdivisao(void) 
{ 
 char TECLA; 
 printf("\n\nRotina de Divisao\n"); 
 printf("-----------------\n\n"); 
 printf("Entre um valor para A: "); 
 fflush(stdin); scanf("%f", &A); 
 printf("Entre um valor para B: "); 
 fflush(stdin); scanf("%f", &B); 
 if (B == 0) 
 printf("\nErro de divisao\n"); 
 else 
 { 
 R = A / B; 
 printf("\nO resultado entre A e B = %6.2f\n", R); 
 } 
 printf("\nTecle <Enter> para acessar o menu: "); 
 fflush(stdin); 
 while ((TECLA = getchar()) != '\r') 
 return(0); 
} 
 
Observe que antes da utilização da instrução switch, esta sendo verificado com a instrução 
if... se o valor da opção informado é realmente diferente de 5. Sendo, sera verificado se é 
1,2,3 ou 4; não sendo nenhum dos valores validos, a instrução default de switch executa a 
apresentação da mensagem “opção invalida- tecle algo” , informando que a alternativa foi 
invalida. 
 
4.2. Utilização de parâmetros 
O uso de parâmetros em uma função tem por finalidade efetuar uma comunicação entre as 
rotinas do programa. Muito útil quando se trabalha apenas com variáveis locais, que são mais 
vantajosas por ocuparem um espaço menor em memória do que as variáveis globais. As 
variáveis locais só ocupam espaço em memória quando estão sendo utilizadas. 
 
Quando se trabalha com funções na linguagem C, é possível passar valores de uma função 
para outra função, geralmente a função chamadora e vice-versa. Isto se chama passagem de 
parâmetro. 
 
4.2.1. Passagem de parâmetros por valor 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
29 
A passagem de parâmetro por valor caracteriza-se por funcionar apenas como um mecanismo 
de entrada de valor para uma determinada função. Desta forma, o processamento é executado 
somente dentro da função chamada, ficando o resultado obtido “preso” dentro da função. Este 
é o tipo de função que não retorna valor. A seguir, é apresentado um exemploutilizando 
passagem de parâmetro por valor: 
 
Ex28. 
 
/* Fatorial sem retorno de valor – FATOR_1 */ 
 
#include <stdio.h> 
 
int fatorial(int N); 
 
int main(void) 
{ 
 int LIMITE; 
 char TECLA; 
 printf("\n\nCalculo de fatorial\n"); 
 printf("\nQual fatorial: "); 
 fflush(stdin); scanf("%d", &LIMITE); 
 fatorial(LIMITE); 
 printf("\nTecle <Enter> para finalizar: "); 
 fflush(stdin); while ((TECLA = getchar()) != '\r') 
 return(0); 
} 
 
int fatorial(int N) 
{ 
 int I, FAT; 
 FAT = 1; 
 for (I = 1; I <= N; I++) 
 FAT *= I; 
 printf("\nFatorial de %d equivale a: %d\n", N, FAT); 
 return(0); 
} 
 
Observe que é indicado no programa o uso da passagem de parâmetro por valor, no caso, a 
variável N da função fatorial recebe o valor fornecido pela variável LIMITE. Esse valor 
estabelece o numero de vezes que o laço de repetição deve ser executado. Observe que a 
função esta definida como int fatorial(int N), sendo fatorial uma função do tipo inteiro. 
 
Dentro da função é encontrada a variável FAT que sera utilizada para calcular o valor do 
fatorial dentro do laço. Ao termino do laço de repetição o valor calculado é apresentado pela 
variável FAT, que somente é valida dentro da sua função, e por esta razão o valor desta 
variável fica “ preso“ em rotina. A passagem de parâmetro por valor é utilizada somente para 
a entrada de um determinado valor em uma sub-rotina. 
 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
30 
Anteriormente, quando foi definida a função, foi dito que uma função sempre retorna um 
valor e apenas um valor. Também foram trabalhadas funções cujos valores de retorno não 
foram definidos, pois sempre foram indicados como retorno zero (quando da utilização do 
comando reeturn(0) – retorno zero). O retorno de um valor é efetuado pelo comando return 
e é devolvido para o nome da função. O comando return pose ser escrito das seguintes 
formas: 
 
return(<expressao>; -retorna o valor da expressão; 
return; -não retorna valor. 
 
Como exemplo deste tipo de função considere o programa seguinte: 
 
Ex29. 
 
/* Fatorial com retorno de valor – FATOR_2 */ 
 
#include <stdio.h> 
 
int fatorial(int N); 
 
int main(void) 
{ 
 int LIMITE; 
 char TECLA; 
 printf("\n\nCalculo de fatorial\n"); 
 printf("\nQual fatorial: "); 
 fflush(stdin); scanf("%d", &LIMITE); 
 printf("\nFatorial de %d equivale a: %d\n", LIMITE, fatorial(LIMITE)); 
 printf("\nTecle <Enter> para finalizar: "); 
 fflush(stdin); while ((TECLA = getchar()) != '\r') 
 return(0); 
} 
 
int fatorial(int N) 
{ 
 int I, FAT; 
 FAT = 1; 
 for (I = 1; I <= N; I++) 
 FAT *= I; 
 return(FAT); 
} 
 
No exemplo acima, é indicado o uso da instrução return da função fatorial(int N) com 
retorno de FAT, a qual faz o retorno do valor do fatorial para fora da função, devolvendo o 
valor para a rotina chamadora. 
 
Compare o código da função fatorial() dos dois programas. Observe que no primeiro 
exemplo a saída da informação(resultado do calculo do fatorial) esta colocada dentro da 
função fatorial(), a qual forçosamente retorna o valor zero. 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
31 
 
No segundo exemplo a saída do resultado do calculo do fatorial é conseguido fora da função 
fatorial(), a qual faz o retorno pelo comando return(FAT), devolvendo o valor para a função 
fatorial(LIMITE), quando do uso da linha de comando printf(“\nFatorial de %d equivalente 
a: %d\n”, LIMITE, fatorial(LIMITE)). 
 
Após obter o conhecimento de como efetuar o retorno de um valor, será implementada no 
programa calculadora uma função que deve retornar o valor do calculo solicitado. Veja a 
seguir, um exemplo desta função. 
 
float calculo(float X, float Y, char OPERADOR) 
{ 
 float RESULTADO; 
 switch (OPERADOR) 
 { 
 case '+' : RESULTADO = X + Y; break; 
 case '-' : RESULTADO = X - Y; break; 
 case '*' : RESULTADO = X * Y; break; 
 case '/' : RESULTADO = X / Y; break; 
 } 
 return(RESULTADO); 
} 
 
A seguir é apresentado o programa calculadora com as novas modificações após ter 
acrescentado os novos detalhes. 
 
Ex30. 
 
/* Programa Calculadora – CALCULA5 */ 
 
#include <stdio.h> 
 
char TECLA; 
float R, A, B; 
 
int rotadicao(void); 
int rotsubtracao(void); 
int rotmultiplicacao(void); 
int rotdivisao(void); 
void antrada(void); 
void saida(void); 
float calculo(float X, float Y, char OPERADOR); 
 
int main(void) 
{ 
 int OPCAO = 0; 
 while (OPCAO != 5) 
 { 
 printf("\n\nMenu Principal\n"); 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
32 
 printf("--------------\n\n"); 
 printf("1 - Adicao\n"); 
 printf("2 - Subtracao\n"); 
 printf("3 - Multiplicacao\n"); 
 printf("4 - Divisao\n"); 
 printf("5 - Fim de Programa\n\n"); 
 printf("Escolha uma opcao: "); fflush(stdin); scanf("%d", &OPCAO); 
 if (OPCAO != 5) 
 { 
 switch (OPCAO) 
 { 
 case 1 : rotadicao(); break; 
 case 2 : rotsubtracao(); break; 
 case 3 : rotmultiplicacao(); break; 
 case 4 : rotdivisao(); break; 
 default : printf("Opcao invalida - Tecle <Enter>"); 
 fflush(stdin); 
 while ((TECLA = getchar()) != '\r') 
 break; 
 } 
 } 
 } 
 return(0); 
} 
 
void entrada(void) 
{ 
 printf("Entre um valor para A: "); 
 fflush(stdin); scanf("%f", &A); 
 printf("Entre um valor para B: "); 
 fflush(stdin); scanf("%f", &B); 
 return; 
} 
 
void saida(void) 
{ 
 printf("\nO resultado entre A e B = %6.2f\n", R); 
 printf("\nTecle <Enter> para acessar o menu: "); 
 fflush(stdin); while ((TECLA = getchar()) != '\r') 
 return; 
} 
 
float calculo(float X, float Y, char OPERADOR) 
{ 
 float RESULTADO; 
 switch (OPERADOR) 
 { 
 case '+' : RESULTADO = X + Y; break; 
 case '-' : RESULTADO = X - Y; break; 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
33 
 case '*' : RESULTADO = X * Y; break; 
 case '/' : RESULTADO = X / Y; break; 
 } 
 return(RESULTADO); 
} 
 
int rotadicao(void) 
{ 
 printf("\n\nRotina de Soma\n"); 
 printf("--------------\n\n"); 
 entrada(); 
 R = calculo(A, B, '+'); 
 saida(); 
 return(0); 
} 
 
int rotsubtracao(void) 
{ 
 printf("\n\nRotina de Subtracao\n"); 
 printf("-------------------\n\n"); 
 entrada(); 
 R = calculo(A, B, '-'); 
 saida(); 
 return(0); 
} 
 
int rotmultiplicacao(void) 
{ 
 printf("\n\nRotina de Multiplicacao\n"); 
 printf("-----------------------\n\n"); 
 entrada(); 
 R = calculo(A, B, '*'); 
 saida(); 
 return(0); 
} 
 
int rotdivisao(void) 
{ 
 printf("\n\nRotina de Divisao\n"); 
 printf("-----------------\n\n"); 
 entrada(); 
 if (B == 0) 
 { 
 printf("\nErro de divisao\n"); 
 printf("\nTecle <Enter> para acessar o menu: "); 
 fflush(stdin); while ((TECLA = getchar()) != '\r') 
 return(0); 
 } 
 else 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
34 
 { 
 R = A / B; 
 saida(); 
 } 
 return(0); 
}Observe que em cada rotina de calculo, as linhas que possuíam a formula R=A+B, por 
exemplo, foram substituídas pela função R=formula(A ,B,’+’); .Outro detalhe a ser observado 
é a colocação do protótipo da função de calculo antes da função main(). A colocação do 
protótipo de uma funcao é exigida por alguns compiladores para efetivar o reconhecimento e 
validação da função pelo programa. 
 
4.2.2. Passagem de parâmetro por referencia. 
 
A passagem de parâmetro por referencia caracteriza-se por funcionar como um mecanismo de 
entrada e saída de valor para uma determinada função. Desta forma, a alteração efetuada é 
devolvida para a rotina chamadora por meio dos parâmetros e não da função propriamente 
dita. 
 
O exemplo anterior fez o retorno de um valor, mas não utilizou passagem de parâmetro por 
referencia. Lembre-se que quando se utiliza o comando return, somente é possível retornar 
um valor para a função. Havendo a necessidade de retorna mais de um valor, então utiliza-se a 
passagem de parâmetro por referencia. 
 
Para demostrar o uso de funções com passagem de parâmetro por referencia, considere a 
leitura de dez valores inteiros em um vetor e coloque-os em ordem crescente. A ordenação 
deve ser executada com uma função apropriada a este fim. 
 
1. Criar uma função que compare e faça a troca dos elementos; 
2. Para a troca, estabelecer três variáveis: X como auxiliar e A, B como valores; 
3. Para verificação de condição comparar com duas variáveis A e B; 
4. Pelo fato de as subrotinas retornarem uma resposta, seus parâmetros serão por 
referencia. 
 
O programa seguinte especifica as funções de troca e de verificação da condição para a troca 
de valores, com a passagem de parâmetro feita por referencia. Note que para fazer a passagem 
de parâmetro por referencia, utiliza-se como referencia o endereço da variável, por meio do 
operador & dentro da função principal ou na função chamadora. 
 
Dentro da função de ordenação, estão sendo feitas referencias a ponteiros pelo símbolo * 
(asterisco). Para cada variável que é utilizada existe um endereço a ela relacionado, indicando 
a posição de memória com o inicio do armazenamento dos bytes relativos ao valor dessa 
variável. 
 
A linguagem C permite que em uma variável seja armazenado o endereço de uma outra 
variável. Para que isto seja possível, é necessário trabalhar com uma variável sendo um 
ponteiro, um apontador. A declaração de um ponteiro ocorre de forma semelhante a de uma 
variável simples, tendo como diferencial o asterisco antes da variável. 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
35 
 
Como o programa faz uso da passagem de parâmetro por referencia, os valores dos endereços 
de &VETOR[I] e &VETOR[J] são passados para os apontadores *A e *B, 
respectivamente, que após a troca devolvem os valores trocados. 
 
Ex31. 
 
/* Passagem de parametro por referencia - ORDNUM*/ 
 
#include <stdio.h> 
 
int troca(int *A, int *B); 
 
int main(void) 
{ 
 int VETOR[9], I, J; 
 char TECLA; 
 printf("\n\nOrdenacao de vetor\n\n"); 
 
 /* Entrada de dados */ 
 
 for (I = 0; I <= 9; I++) 
 { 
 printf("Entre o %2d. elemento: ", I+1); 
 fflush(stdin); scanf("%d", &VETOR[I]); 
 } 
 
 /* Ordenacao do vetor */ 
 
 for (I = 0; I <= 8; I++) 
 for (J = I+1; J <= 9; J++) 
 troca(&VETOR[I], &VETOR[J]); 
 
 /* Apresentacao do vetor ordenado */ 
 
 printf("\n"); 
 for (I = 0; I <= 9; I++) 
 printf("Agora o %2do. elemento e': %d\n", I+1, VETOR[I]); 
 printf("\nTecle <Enter> para finalizar: "); 
 fflush(stdin); while ((TECLA = getchar()) != '\r') 
 return(0); 
} 
 
int troca(int *A, int *B) 
 
/* Definicao dos ponteiros que receberao os valores dos vetores */ 
 
{ 
 int X; 
Linguagem de Programação - C 
Profª Msc. Neyza Bibiana Guzmán Mercado 08/02/14 
36 
 if (*A > *B) 
 { 
 X = *A; 
 *A = *B; 
 *B = X; 
 } 
 return(0); 
} 
 
Note que o retorno da função troca() é zero, mas em contrapartida os valores dos apontadores 
“*A” e “*B” são alterados internamente e devolvidos para fora pelos mesmos apontadores 
“*A” e “*B”, utilizados para a entrada dos valores na função.

Outros materiais