Buscar

Livro_Algoritimos_Programacao_II

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 236 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 236 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 236 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

Algoritimos e 
Programação II
Vanessa Lindemann
Algoritimos e 
Programação II
E
sta disciplina dá continuidade ao estudo de lógica de programação 
iniciado em Algoritmos e Programação I e introduz o aluno no universo 
da programação, de forma que no final do semestre ele estará capacitado 
a construir programas em linguagem C. Para isso, vamos estudar variáveis 
indexadas, estruturas, ponteiros, funções e arquivos.
Só é possível aprender a programar, programando! Portanto, resolver 
os exercícios propostos no final de cada capítulo, utilizando um compilador 
C, é fundamental para atingir o objetivo desta disciplina. Optou-se por 
usar o Dev-C++, que é um ambiente de desenvolvimento integrado, com 
enorme potencial para desenvolver programas em linguagem C e C++ no 
sistema operacional Windows. 
Diante do exposto, sugere-se que o aluno vá direto ao Capítulo 10 
para instalar e configurar o Dev-C++ no seu computador. Assim, a cada 
capítulo estudado, será possível executar os exemplos e realizar os exercí-
cios propostos. A disciplina possui conteúdos cumulativos, ou seja, no final 
do semestre, ainda estaremos utilizando conceitos estudados nas primeiras 
semanas de aula. Portanto, é importante organizar o estudo, resolver os 
problemas propostos periodicamente e não deixar as dúvidas para depois.
As referências bibliográficas sugerem obras de autores que fundamen-
tam os estudos realizados e oferecem ao aluno possibilidades de aprofun-
damento com leituras complementares.
Introdução
Sumário
 1 Introdução à Linguagem C ....................................................5
 2 Estruturas Básicas de Controle ............................................35
 3 Variáveis Indexadas Unidimensionais ..................................61
 4 Strings ................................................................................81
 5 Variáveis Indexadas Bidimensionais ..................................101
 6 Estruturas .........................................................................122
 7 Ponteiros ..........................................................................134
 8 Funções ............................................................................144
 9 Arquivos ...........................................................................172
 10 Dev-C++: instalação e configuração ................................198
* Doutora em Informática na Educação pela UFRGS (2008); professora dos cursos 
da Computação da ULBRA
Introdução à Linguagem C
ÂÂ
A 
linguagem C, criada por Dennis Ritchie na década 
de 70, resultou de um processo evolutivo de lingua-
gens e, durante alguns anos, teve seu padrão baseado 
na versão 5 do sistema operacional UNIX. Com a po-
pularização dos microcomputadores, várias versões de C 
foram criadas, gerando muitas discrepâncias entre elas. 
Para resolver essa situação, em 1983, o ANSI (American 
National Standards Institute) estabeleceu um comitê para 
definir um padrão que guiasse todas as implementações 
da linguagem C. 
A popularização da linguagem C deve-se a vários fa-
tores, dentre os quais destacam-se (a) o conjunto de ope-
Vanessa Lindemann
Capítulo 1
6 Algoritmos e Programação II
radores e tipos de dados disponíveis; (b) a portabilidade, 
podendo ser usada em máquinas de portes e de sistemas 
operacionais diferentes; (c) as características de lingua-
gens de alto nível, aliadas às características de linguagens 
de baixo nível (também conhecidas como linguagem de 
máquina, manipulam bits, bytes e endereços).
C é uma linguagem de propósitos gerais, estruturada e 
compilada (o compilador lê o código-fonte do programa 
inteiro e converte-o em um código executável). Ela é utili-
zada para a construção de sistemas operacionais, compi-
ladores, interpretadores, editores de textos, planilhas ele-
trônicas, aplicativos para dispositivos móveis, programas 
para a automação industrial, gerenciadores de bancos de 
dados etc. 
As próximas seções são dedicadas à apresentação de 
conceitos e definições importantes e necessárias para o 
início da programação em linguagem C. 
Capítulo 1 Introdução à Linguagem C 7
1.1 Estrutura básica de um programa em 
linguagem C
Um programa em linguagem C consiste em uma ou mais fun-
ções. A função principal, denominada main, indica onde o 
programa inicia. A estrutura básica de um programa em C é 
apresentada a seguir. 
 #include <nome da biblioteca>
 main( ) {
 // declaração de variáveis 
 // bloco de comandos
 } 
Bibliotecas são arquivos contendo várias funções que po-
dem ser incorporadas aos programas escritos em C (esses ar-
quivos são chamados arquivos de cabeçalho − cabeçalho em 
inglês é header, o que explica a extensão .h usada logo 
após o nome dos arquivos). A diretiva #include faz com 
que as funções inseridas na biblioteca especificada possam ser 
utilizadas no programa. As bibliotecas stdio.h e conio.h, 
por exemplo, permitem a utilização de funções de entrada 
e saída padrão e de funções de tela, respectivamente. São 
exemplos de funções de tela, os comandos usados para limpar 
a tela, posicionar o cursor em uma determinada posição na 
tela, trocar a cor da fonte e/ou do fundo. 
A diretiva #include pode ser usada de duas formas: 
#include "nome da biblioteca" ou #include 
8 Algoritmos e Programação II
<nome da biblioteca>. A diferença entre se usar " " e 
< > é somente a ordem de procura pelo arquivo especificado 
nos diretórios. Usa-se " " para informar o nome do arquivo 
com o caminho completo, ou se o arquivo estiver no diretório 
de trabalho. Quando o arquivo estiver no caminho padrão 
do compilador (como é o caso de arquivos como stdio.h e 
string.h, por exemplo), usa-se os símbolos < e >. 
Os parênteses ao lado da palavra main indicam que ela 
é uma função, enquanto as chaves delimitam o seu início e 
o seu fim. O bloco de comandos que estiver entre as chaves 
é executado sequencialmente quando a função for chamada. 
Uma boa prática de programação do padrão ANSI é declarar 
a função main como int main(void) e, no seu final, an-
tes de fechar a chave que delimita o corpo da função, incluir 
a instrução return 0; − essa prática evita que, ao executar 
os programas, alguns compiladores emitam uma mensagem 
do tipo A função deve retornar um valor. Como o compilador 
do Dev-C++, utilizado nesta disciplina, não emite esta men-
sagem, optou-se por não adotar essa prática nos exemplos 
deste livro.
É importante salientar que a linguagem C é case sensitive, 
ou seja, é sensível a letras maiúsculas e minúsculas (por exem-
plo, uma variável declarada como a é diferente de A) e todos 
os programas devem, obrigatoriamente, ser escritos em letras 
minúsculas. Outro detalhe importante é que cada instrução 
primitiva é finalizada com um ponto-e-vírgula (vale destacar 
que não há ponto e vírgula após as diretivas de compilação 
#include e #define, nem após as estruturas de controle 
apresentadas no próximo capítulo). 
Capítulo 1 Introdução à Linguagem C 9
1.2 Identificadores 
Em linguagem C, os nomes utilizados para referenciar variá-
veis, constantes e funções definidas pelo usuário são chama-
dos de identificadores. 
A criação de um identificador deve seguir as seguintes regras: 
podem ser formados por letras, números e sublinhado; devem 
iniciar com uma letra ou com o sublinhado; letras minúsculas 
e maiúsculas são consideradas caracteres distintos; não podem 
ser palavras reservadas; podem conter qualquer tamanho, po-
rém apenas os 32 primeiros caracteres são significativos. 
Além disso, é importante criar identificadores consideran-
do a sua aplicação para facilitar a leitura do código-fonte e, 
consequentemente, o trabalho do programador. A quantidade 
de horas trabalhadas por uma pessoa durante uma semana de 
trabalho, por exemplo, pode ser armazenada em uma variável 
chamada qtde_horas; enquanto uma função que irá verifi-
car se uma data é válida ou não pode ter como identificador 
valida_data.
1.3 Tipos de dados 
Os tipos de dados básicos emlinguagem C são: int (número 
inteiro), float (número real, representado em ponto flutuante), 
double (número real, representado em ponto flutuante com 
maior precisão), char (caractere) e void (vazio, sem valor). A 
linguagem C não possui tipo de dado lógico (que pode assu-
10 Algoritmos e Programação II
mir verdadeiro ou falso), pois considera qualquer valor diferen-
te de 0 (zero) como verdadeiro; e também não possui um tipo 
especial para armazenar cadeias de caracteres (strings), 
estas são armazenadas em um vetor de caracteres. A Tabela 
1.1 apresenta a lista de tipos básicos utilizados em C. 
Tipo Faixa de valores Tamanho 
char -127 a 127 8 bits
int -32.767 a 32.767 16 bits
float 3.4 E-38 a 3.4 E+38 32 bits
double 1.7 E-308 a 1.7 E+308 64 bits
void vazio, sem valor 0
Tabela 1.1 − Tipos de dados básicos da linguagem C
A faixa de valores apresentada está de acordo com o pa-
drão ANSI, e é considerada a faixa mínima. Dependendo do 
processador e do compilador C que estiver sendo utilizado, o 
tamanho e a faixa de valores podem variar. 
1.4 Modeladores
É possível forçar que o resultado de uma expressão seja de um 
tipo específico usando o conceito de modelador. A forma geral 
de um modelador é (tipo)expressão onde tipo é um 
dos tipos padrão da linguagem C. 
Sendo r uma variável declarada do tipo float, as ex-
pressões a seguir resultam em valores diferentes. A primeira 
Capítulo 1 Introdução à Linguagem C 11
expressão resulta 4, enquanto que a segunda, com o uso do 
modelador, resulta 4.5.
 r=9/2; 
	 r=(float)9/2;				
1.5 Declaração, inicialização e escopo de 
variáveis
Variável é uma posição de memória, identificada por um nome 
(identificador), usada para armazenar um dado de um deter-
minado tipo por vez. As variáveis são declaradas após a espe-
cificação de seus tipos, como pode ser observado nos exem-
plos a seguir. 
	 float	total;
 int idade, cont;
A primeira linha da declaração de variáveis do exemplo 
cria uma variável chamada total, que irá armazenar valores 
do tipo real; na segunda linha, são criadas duas variáveis para 
armazenar valores do tipo inteiro, idade e cont. Cada uma 
dessas variáveis armazenará um único valor por vez. 
As variáveis podem ser inicializadas no momento da sua 
declaração, colocando o sinal de atribuição seguido da in-
formação desejada, como no exemplo apresentado a seguir, 
em que cont é inicializada com 0 e resposta com S. É im-
12 Algoritmos e Programação II
portante destacar que os dados atribuídos a variáveis do tipo 
caractere são envolvidos por apóstrofes. 
 int cont=0;
 char resposta='S';
O local em que as variáveis são declaradas definem o seu 
escopo, que pode ser global ou local. As variáveis de escopo 
global, denominadas variáveis globais, são declaradas fora de 
qualquer função, inicializadas automaticamente com 0 (zero) 
e podem ser usadas em qualquer ponto do programa. As va-
riáveis locais são declaradas dentro de uma função, não são 
inicializadas automaticamente e valem enquanto essa função 
estiver ativa. As variáveis de escopo local têm preferência em 
relação às de escopo global. 
1.6 Definição de constantes 
Uma constante irá representar um valor fixo, previamente 
definido pelo programador e inalterável no programa. Uma 
das formas de definir constantes em C é a partir da diretiva 
#define, seguida do nome da constante e do valor que esta 
representará no programa. No exemplo a seguir, apresenta-
-se a declaração da constante pi cujo valor é definido como 
3.141516. Dessa forma, o programador usará pi no progra-
ma ao invés de usar 3.141516. 
	 #define	pi	3.141516
Capítulo 1 Introdução à Linguagem C 13
1.7 Códigos de formato 
Os códigos de formato são constantes que definem o formato 
dos dados a serem lidos e exibidos na tela. A Tabela 1.2 apre-
senta alguns dos códigos de formato disponíveis em C.
Código Formato
%c Caractere
%i Inteiro
%f Ponto flutuante 
%lf Ponto flutuante longo (double)
%s Cadeia de caracteres (string)
Tabela 1.2 − Códigos de formatação
Eles são usados em funções de entrada e de saída de da-
dos (descritas na seção 1.12). A função de entrada scanf, 
por exemplo, possui dois argumentos: o código de formato e 
uma variável. No exemplo apresentado a seguir, o valor digi-
tado pelo usuário será armazenado na variável denominada 
peso, declarada e formatada como float. 
 scanf("%f",&peso);
A função printf, exemplificada a seguir, também contém 
dois argumentos: o primeiro é uma mensagem, apresentada 
entre aspas; o segundo é uma variável, denominada dias. O 
valor armazenado na variável dias será exibido na posição 
em que aparece o código de formato usado na mensagem, 
nesse caso o %i.
14 Algoritmos e Programação II
 printf("Sua idade em dias e: %i", dias);
Os códigos de formato podem ter modificadores que espe-
cifiquem o tamanho do campo, o número de casas decimais e 
um indicador de justificação à esquerda. 
Especificador de largura mínima do campo: um valor 
entre o símbolo % e o caractere de formato indica a largura 
mínima do campo, preenchendo a saída com brancos (pa-
drão) ou com zeros (coloca-se um 0 antes do especificador de 
tamanho). Quando um valor é maior que o mínimo definido, 
este será impresso por completo. Exemplos: %05d preencherá 
um número com menos de cinco dígitos com zeros à esquerda, 
de maneira que seu tamanho total seja cinco. 
Especificador do número de casas decimais: para defi-
nir o número de casas decimais a serem exibidas em um ponto 
flutuante, usa-se um ponto entre o especificador de tamanho e 
o número de casas decimais desejadas. Por exemplo: %6.2f 
exibirá um valor com, no mínimo, seis dígitos de comprimento 
no total, com duas casas decimais (o ponto usado antes das 
casas decimais ocupa o espaço de um dígito, como pode ser 
observado nos exemplos apresentados na Tabela 1.3). 
Especificador para justificar informação à esquerda: 
por definição, toda saída é justificada à direita. O uso do 
sinal – depois do % faz com que a saída seja justificada à 
esquerda. Exemplo: %-6.2f justificará à esquerda um valor 
de ponto flutuante, com no mínimo seis dígitos no total, com 
duas casas decimais. 
Capítulo 1 Introdução à Linguagem C 15
A Tabela 1.3 apresenta exemplos da utilização dos especi-
ficadores de tipos. O caractere especial \n, usado nos exem-
plos, inicia uma nova linha antes de exibir o valor na tela. 
Código Resultado
float	valor=136.472; 
printf("\n %f",valor);
printf("\n	%8.1f",valor);
printf("\n	%08.1f",valor);
printf("\n	%-8.1f",valor);
136.472000
			136.5
000136.5
136.5
int	valor=790;
printf("\n %i",valor);
printf("\n	%5i",valor);
printf("\n	%05i",valor);
printf("\n	%-5i",valor);
790
	 	 790 
00790
790
printf("\n	O	total	é	%2i.",350);
printf("\n	O	total	é	%4i.",350);
printf("\n	O	total	é	%5i.",350);
O	total	é	350.
O	total	é		350.
O	total	é			350.
Tabela 1.3 − Exemplo da utilização dos especificadores de tipos
1.8 Caracteres especiais 
Os caracteres especiais são usados para representar alguma 
formatação em particular e caracteres especiais que seriam 
impossíveis de usar diretamente no código-fonte. Esses carac-
16 Algoritmos e Programação II
teres devem ser precedidos da barra invertida, como o \n que 
representa nova linha. A Tabela 1.4 apresenta os caracteres e 
seus significados.
Código Significado Código Significado
\a alerta (beep) \v tab vertical
\b retrocesso (backspace) \\ exibe barra invertida
\f avanço de página \’ exibe aspa única
\n nova linha \“ exibe aspas duplas
\r retorna ao início da linha \? exibe ponto de interrogação
\t tab horizontal \0 nulo 
Tabela 1.4 Códigos de caracteres especiais
1.9 Comando de atribuição 
O comando de atribuição, representado pelo sinal de igual-
dade, é utilizado para atribuir valores a variáveis. É importante 
lembrar que os valores atribuídos a uma variável devem ser 
compatíveis com o seu tipo. Alguns exemplos de atribuição 
podem ser observados a seguir. 
	 total=345.60;					
 resp='s';
	 cont=cont+1;Os caracteres são representados entre apóstrofes ( ' ) e as 
cadeias de caracteres entre aspas ( " ). Entretanto, caso seja 
necessário atribuir uma cadeia de caracteres a uma variável, 
utiliza-se a função strcpy, como ilustra o exemplo a seguir. 
 strcpy(nome,“Ana Paula Rocha”);
Capítulo 1 Introdução à Linguagem C 17
Para utilizar strcpy (abreviação de string copy) é preciso 
inserir no programa, a partir da diretiva #include, a biblio-
teca string.h. Essa e outras funções para manipulação de 
strings serão descritas no capítulo 4. 
É possível atribuir um valor a duas ou mais variáveis a partir 
de um único comando, como na instrução primitiva x=y=10, 
em que as variáveis x e y recebem 10.
1.10 Operadores e funções
A linguagem C possui operadores e funções predefinidas des-
tinadas a cálculos matemáticos e à manipulação de caracte-
res. Os operadores aritméticos e relacionais são apresenta-
dos nas Tabelas 1.5 e 1.6, respectivamente. Os operadores 
lógicos são apresentados na Tabela 1.7 e os operadores re-
duzidos na Tabela 1.8. 
Operador Exemplo Descrição
+ a + b Soma o conteúdo de a e de b.
- a – b Subtrai o conteúdo de b do conteúdo de a.
* a * b Multiplica o conteúdo de a pelo conteúdo de b.
/ a / b Divide o conteúdo de a pelo conteúdo de b.
% a % b Obtém o resto da divisão de a por b.*
Tabela 1.5 − Operadores aritméticos
* O operador % só pode ser utilizado com operandos do tipo inteiro. 
18 Algoritmos e Programação II
Operador Exemplo Descrição
== a==b Testa se o conteúdo de a é igual ao conteúdo de b.
!= a!=b Testa se o conteúdo de a é diferente do conteúdo de b.
<= a<=b Testa se o conteúdo de a é menor ou igual que o 
conteúdo de b.
>= a>=b Testa se o conteúdo de a é maior ou igual que o 
conteúdo de b.
< a<b Testa se o conteúdo de a é menor que o conteúdo de b.
> a>b Testa se o conteúdo de a é maior que o conteúdo de b.
Tabela 1.6 − Operadores relacionais
Operador Símbolo Descrição
e && Conjunção
ou || Disjunção
não ! Negação
Tabela 1.7 − Operadores lógicos
Expressão Equivalente com operadores reduzidos
total=total+valor; total+=valor;
num=num*5; num*=5;
d=d-valor; d-=valor;
x=x/5; x/=5;
Tabela 1.8 − Operadores reduzidos
Além dos operadores apresentados anteriormente, a lin-
guagem C disponibiliza operadores de pré e pós incremento e 
decremento, descritos na Tabela 1.9. 
Capítulo 1 Introdução à Linguagem C 19
Operador Descrição Pré-fixado Pós-fixado
++ Incrementa ++n n++
-- Decrementa --n n--
Tabela 1.9 − Operadores pré e pós-fixado
O operador ++ incrementa um ao valor do seu operando, 
enquanto –- decrementa um. Esses operadores podem ser 
usados antes (pré-fixados) ou depois (pós-fixados) do nome 
da variável. Em ambos os casos a variável é incrementada ou 
decrementada. Entretanto, ++n incrementa o valor da variá-
vel n antes que n seja usada e n++ usa o valor de n e depois 
o incrementa. 
Resumindo:
++i → incrementa o valor de i em um e depois o utiliza; 
i++ → utiliza o valor de i e depois incrementa-o em um. 
Logo, conclui-se que: 
z=a;				a=a+1; é equivalente a z=a++; 
z=a;				a=a-1; é equivalente a z=a--;
a=a+1;		z=a; é equivalente a z=++a; 
a=a-1;		z=a;	 é equivalente a z=--a; 
20 Algoritmos e Programação II
1.11 Comentários
Os comentários são textos que podem ser inseridos no pro-
grama com o objetivo de documentá-lo e não são analisados 
pelo compilador. Os comentários de uma linha são precedi-
dos do símbolo //, enquanto o comentário de várias linhas 
é envolvido por /* e */, conforme pode ser observado nos 
exemplos a seguir. 
 // Este é um comentário de uma linha.
 /* Este é um comentário
 com mais de uma linha. */
1.12 Funções de entrada e saída de dados
As funções de entrada e saída de dados garantem a comuni-
cação do programa com o usuário e/ou outros dispositivos. 
Nesta seção, serão abordadas apenas algumas funções de 
entrada e saída de dados necessárias para prover a comuni-
cação do usuário com o programa, considerando o teclado 
como periférico de entrada e a tela como periférico de saída. 
As funções de saída de dados são utilizadas para exibir da-
dos na tela, seja uma mensagem, o resultado de uma expres-
são ou o conteúdo armazenado em uma variável. A função 
de saída mais utilizada em C para este fim é a printf, cuja 
sintaxe é apresentada a seguir. 
Capítulo 1 Introdução à Linguagem C 21
printf(<string de controle>,<lista de argu-
mentos>);
A string de controle possui uma descrição de tudo que a 
função vai exibir na tela, incluindo não apenas a mensagem, 
mas também o formato de variáveis e/ou resultado de expres-
sões e suas respectivas posições nessa mensagem. Isso é feito 
por meio do uso dos códigos de formatação vistos na Tabela 
1.2. Para cada código de formatação incluído na mensagem, 
é necessário ter um argumento na lista de argumentos, confor-
me ilustram os exemplos do Quadro 1.1. 
Variáveis Exemplos de função de saída
float	media;
char	nome[60];
01	printf("%.1f",media);
02 printf("Digite o nome do aluno: ");
03 printf("Média	final	=	%.1f",media);
04 printf("%s obteve média 
%.1f",nome,media);
Quadro 1.1 − Exemplos da sintaxe da função printf
No exemplo 01 do Quadro 1.1, a função printf possui 
a string de controle onde aparece o código de formatação 
%.1f e a variável media como argumento. Nesse caso, o 
comando de saída exibirá apenas o valor armazenado na va-
riável media, formatado a partir do código de formato %.1f. 
O código de formato %f indica que será exibido um valor do 
tipo float, e o modificador .1 define que esse valor será 
exibido com uma casa decimal. Se a variável media estiver 
armazenando 8, por exemplo, o valor será exibido como 8.0. 
22 Algoritmos e Programação II
No segundo exemplo, o comando de saída contém apenas 
um literal na string de controle, que será reproduzido no dis-
positivo de saída. 
No exemplo 03, a string de controle contém um literal e um 
código de formatação ("Média	final	=	%.1f") e a lista 
de argumentos possui uma variável (media), resultando em 
Média final = 9.3 (considerando que a variável media esteja 
armazenando 9.333). O valor armazenado na variável media 
é exibido na posição em que aparece o código de formato 
%.1f, considerando apenas a primeira casa decimal. 
Por fim, supondo que a variável nome armazene Joana e 
a variável media armazene 5.77, a saída do exemplo 04 se-
ria Joana obteve média 5.8 (o valor 5.77 será arredondado 
para 5.8). Nesse caso, a string de controle da função printf 
contém um literal com dois códigos de formato (%s e	%.1f) 
e, consequentemente, a lista de argumentos possui duas vari-
áveis (nome e media). Essas variáveis devem ser listadas na 
mesma ordem em que seus respectivos códigos de formato 
aparecem na string de controle. 
As funções de entrada de dados são utilizadas para receber 
dados digitados pelo usuário. Os dados recebidos são arma-
zenados em variáveis já declaradas no programa. As funções 
de entrada mais utilizadas em C são scanf, getch, getche 
e fgets. Em geral, a função scanf é utilizada para ler dados 
numéricos, as funções getch e getche para ler um único 
caractere por vez e a função fgets para ler cadeias de carac-
teres (strings). A sintaxe dessas funções é apresentada a seguir. 
Capítulo 1 Introdução à Linguagem C 23
 scanf(<string de controle>,<lista de 
argumentos>);
 <variável> = getch();
 <variável> = getche();
 fgets(<variável>,<tamanho máximo da 
variável>,stdin);
Na função scanf, a string de controle irá indicar o for-
mato dos dados a serem armazenados nas variáveis contidas 
na lista de argumentos. Isso é feito a partir do uso dos códi-
gos de formatação vistos na Tabela 1.2. Para cada código 
de formatação incluído na string de controle, é necessário ter 
uma variável na lista de argumentos, precedida do símbolo 
&, conforme ilustram os exemplos do Quadro 1.2. O símbolo 
&, chamado operador de endereço, associa a variável a um 
endereço de memória. 
Variáveis Exemplos defunção de entrada
float	peso;
int idade;
01 scanf("%f",&peso);
02 scanf("%i",&idade);
Quadro 1.2 Exemplos da sintaxe da função scanf
No exemplo 01 do Quadro 1.2, a função scanf possui a 
string de controle onde aparece o código de formatação %f e 
o endereço da variável peso como argumento. Nesse caso, 
o comando de entrada fará a leitura do valor digitado pelo 
usuário e armazenará na variável peso. O código de formato 
24 Algoritmos e Programação II
%f indica que será armazenado um valor do tipo float. O 
segundo exemplo faz a leitura da variável idade, que é do 
tipo int. 
As funções getch e getche retornam um caractere. Nos 
exemplos apresentados no Quadro 1.3, a variável letra re-
ceberá o caractere digitado pelo usuário. A diferença entre os 
exemplos é que a função getche, além de capturar o carac-
tere digitado, o escreve na tela. Em ambos os casos, o usuário 
não terá que teclar <ENTER> depois de digitar o caractere. 
Variáveis Exemplos de função de entrada
char letra; 01 letra=getch();
02 letra=getche();
Quadro 1.3 − Exemplos da sintaxe das funções getch e getche
A função fgets é usada para ler uma cadeia de caracte-
res, ou seja, uma string. Ela possui três argumentos: o primeiro 
argumento é a variável que irá armazenar a string digitada 
pelo usuário; o segundo indica o tamanho máximo da string; 
e o terceiro, nesse caso o stdin, indica que a entrada de da-
dos será realizada via teclado (std = standard + in = input, ou 
seja, entrada padrão). Os exemplos apresentados no Quadro 
1.4 ilustram o uso da função fgets. 
Capítulo 1 Introdução à Linguagem C 25
Variáveis Exemplos de função de entrada
char	fone[15];
char	nome[60];
01 fflush(stdin);
				fgets(fone,15,stdin);
02 fflush(stdin);
				fgets(nome,60,stdin);
Quadro 1.4 − Exemplos da sintaxe da função fgets
Como pode ser observado nos exemplos do Quadro 1.4, 
a função fflush é usada antes da função fgets, com o 
objetivo de liberar o buffer do teclado. O primeiro exemplo 
lê a variável fone, que terá no máximo 14 caracteres, en-
quanto o exemplo 02 lê a variável nome, que terá no máximo 
59 caracteres. Ao definir o tamanho máximo de uma string, 
é preciso considerar que o espaço de um dos seus caracteres 
será reservado para o \0 (caractere nulo), necessário para in-
dicar seu final. Mais detalhes sobre essa função, bem como 
outras funções específicas para a manipulação de strings, se-
rão abordados no capítulo 4. 
As funções printf, scanf e fgets pertencem à biblio-
teca stdio.h, enquanto as funções getch e getche fazem 
parte da biblioteca conio.h. 
1.13 Funções de tela
A Tabela 1.10 apresenta algumas funções de tela, utilizadas 
para organizar a interface do programa com o usuário. Essas 
funções fazem parte da biblioteca conio.h.
26 Algoritmos e Programação II
Sintaxe da função Descrição
clrscr()
Limpa a tela e posiciona o cursor no 
canto superior esquerdo.
clreol() Limpa a linha.
gotoxy(col,lin)
Posiciona o cursor na coluna e linha 
determinadas (a tela padrão possui 80 
colunas e 25 linhas).
textcolor(cor) Seleciona a cor do texto. 
textbackground(cor)
Seleciona a cor do fundo da tela 
(para que todo o fundo fique da cor 
selecionada, deve-se utilizar a função 
para limpar a tela logo após esta).
delline()
Exclui a linha em que o cursor está 
posicionado, movendo todas as linhas 
que estiverem abaixo desta, uma 
posição para cima.
insline()
Insere uma linha na posição em que o 
cursor está posicionado, movendo todas 
as linhas que estiverem abaixo desta, 
uma posição para baixo.
Tabela 1.10 − Funções de tela
A lista de cores básicas, disponíveis para serem utilizadas 
nas funções textcolor e textbackground é exibida na 
Tabela 1.11. É possível utilizar tanto o código da cor, quanto 
seu nome em inglês, como parâmetro das funções. Exemplos: 
textcolor(4) ou textcolor(RED). Nos dois exemplos, 
a cor selecionada para o texto é a mesma, o vermelho.
Capítulo 1 Introdução à Linguagem C 27
Código Cor Código Cor Código Cor
0 Preto 6 Marrom 12 Alaranjado
1 Azul 7 Cinza claro 13 Magenta claro
2 Verde 8 Cinza escuro 14 Amarelo
3 Ciano 9 Azul claro 15 Branco
4 Vermelho 10 Verde claro
5 Magenta 11 Ciano claro
Tabela 1.11 − Lista de cores
1.14 Exemplo do uso das funções de 
entrada e saída e de tela
A Figura 1.1 apresenta um programa que lê duas notas forne-
cidas pelo usuário, calcula e escreve a média entre elas. Nesse 
exemplo, é possível observar o uso de vários dos conceitos e 
funções estudados neste capítulo.
28 Algoritmos e Programação II
Figura 1.1 − Exemplo do uso das funções de tela, entrada e saída 
Na linha 2, um comentário foi usado para descrever o pro-
blema que o programa resolve. Em seguida, nas linhas 4 e 5, 
são listadas as bibliotecas necessárias para executar as fun-
ções utilizadas na solução do problema. A função principal 
(main) aparece entre as linhas 7 e 23. No início da função, 
tem-se a declaração de variáveis de escopo local (todas do 
tipo float), seguida das funções que selecionam a cor do 
texto e do fundo de tela, e do comando de limpar a tela. A 
função gotoxy é utilizada várias vezes, antes das funções de 
saída, para posicionar as mensagens em determinadas posi-
Capítulo 1 Introdução à Linguagem C 29
ções da tela. No final do programa, usa-se o getch para que, 
ao executar, o programa mantenha a tela de exibição dos re-
sultados até que o usuário digite qualquer tecla para retornar 
à tela de edição do compilador. 
Referências Bibliográficas
DEITEL, Paul; DEITEL, Harvey. C: como programar. 6.ed. São 
Paulo: Pearson Prentice Hall, 2011.
FORBELLONE, André Luiz Villar; EBERSPÄCHER, Henri Frederi-
co. Lógica de Programação: a construção de algoritmos 
e estruturas de dados. 3.ed. São Paulo: Prentice Hall, 2005.
ISAIA FILHO, Eduardo; LINDEMANN, Vanessa. Algoritmos e 
Programação I. Canoas: Ed. ULBRA, 2013.
Atividades
Parte I - Questões objetivas
1) A sintaxe da declaração de uma variável em C inclui o nome 
da variável seguido de um tipo.
a) Certo b) Errado
30 Algoritmos e Programação II
2) São nomes válidos para variáveis na linguagem C:
a) if, a*b_2, H789, &ya
b) A, b, Y, count
c) 9xy, a36, x*y, --j
d) 2_ou_1, \fim, h, j 
e) i, j, int, obs
3) Em C, os nomes cont e Cont não podem ser emprega-
dos para representar a mesma variável ao longo de um 
programa. 
a) Certo b) Errado
4) Uma string é uma sequência de caracteres armazenada em 
um vetor de caracteres.
a) Certo b) Errado
5) O que faz o seguinte programa em C ? 
 #include <stdio.h>
 main( ){ 
 int i=2; 
 printf("Valor de i = %i\n",i); 
 }
Capítulo 1 Introdução à Linguagem C 31
a) imprime: Valor de i = 2 e pula para a próxima linha;
b) imprime: Valor de i = 2\n;
c) pula para a próxima linha e imprime: Valor de i = 2;
d) imprime: Valor de i = 2;
e) nenhuma das alternativas anteriores.
6) Qual o resultado das variáveis j, k e l depois da seguinte 
sequência de operações? 
		int	j,k,l;		j=k=10;	l=++j;		j=-j;		k++;	
j=j+k-l--;
a) j = -10, k = 10, l = 10 
b) j = -11, k = 11, l = 10 
c) j = -10, k = 11, l = 10 
d) j = 11, k= 11, l = 11 
e) nenhuma das alternativas anteriores
7) Na Linguagem C, os códigos de formatação de tipo de 
dados NÃO estão corretamente associados na alternativa: 
a) int - %i
b) double - %d
c) float - %f
32 Algoritmos e Programação II
d) char - %c
e) nenhuma das respostas anteriores
Parte II - Resolução de problemas
Resolva os problemas descritos a seguir, utilizando a Lin-
guagem C.
1) O custo final de um carro novo para o consumidor é a soma 
do custo de fábrica, dos impostos e da porcentagem do 
distribuidor. Supondo que os impostos totalizam 45% so-
bre o custo de fábrica e a porcentagem do distribuidor seja 
de 20% sobre o valor total, escreva um programa que leia 
o custo de fábrica de um carro, calcule e escreva o custo 
final ao consumidor.
2) Sabe-se que, para iluminar de maneira correta os cômodos 
de uma casa, para cada m2, deve-se usar 18W de potên-cia. Faça um programa que receba as duas dimensões de 
um cômodo (em metros), calcule e apresente a sua área (em 
m2) e a potência de iluminação que deverá ser utilizada.
3) Uma empresa que promove espetáculos teatrais precisa de 
um programa para definir o valor mínimo para o convite, 
considerando o custo total do espetáculo e o número de lu-
gares disponíveis para o público no local da apresentação.
4) Sabe-se que:
1 pé = 12 polegadas;
Capítulo 1 Introdução à Linguagem C 33
1 jarda = 3 pés;
1 milha = 1760 jardas.
Faça um programa que receba uma medida em pés, faça 
as conversões conforme a descrição acima e mostre os re-
sultados em polegadas, jardas e milhas.
5) Considerando uma aplicação de P reais à taxa de juros i 
constante por um período de N meses, calcule e escreva 
qual será o montante M após o término da aplicação, sen-
do M = P * (1 + i) N.
Respostas dos exercícios da Parte I
1) b; 2) b; 3) a; 4) a; 5) a; 6) b; 7) b.
* Doutora em Informática na Educação pela UFRGS (2008); professora dos cursos 
da Computação da ULBRA
Estruturas Básicas de 
Controle
ÂÂ Ao criar um programa, tem-se como objetivo a solução de um determinado problema. Para que esse proble-
ma seja resolvido, as instruções primitivas devem estar or-
ganizadas de forma a representar um conjunto de ações, 
que seguirá um fluxo de execução determinado por três 
estruturas básicas de controle: sequencial, condicional e 
repetitiva - temas abordados nas próximas seções.
Vanessa Lindemann
Capítulo 2
Capítulo 2 Estruturas Básicas de Controle 35
2.1 Estrutura sequencial
A estrutura sequencial contém um conjunto de instruções que 
serão executadas de forma linear, de cima para baixo, da es-
querda para a direita, sem nenhum desvio entre os símbolos 
de início e fim do programa. 
Figura 2.1 Exemplo da estrutura de controle sequencial
36 Algoritmos e Programação II
A Figura 2.1 apresenta um programa que calcula o salário 
de um funcionário, cuja estrutura é sequencial. O programa 
inicia com um comentário, que descreve o problema a ser re-
solvido, seguido da lista de bibliotecas necessárias. A função 
principal (main) vai da linha 6 à 27, onde são declaradas as 
variáveis (linhas 7, 8 e 9), ocorre a entrada de dados (entre 
as linhas 12 e 17), o processamento (linhas 18, 19 e 20) e a 
saída de dados (entre as linhas 22 e 25). Essas instruções são 
executadas sequencialmente, do início ao final do programa, 
sem nenhum desvio.
2.2 Estrutura condicional
A estrutura condicional é utilizada para desviar o fluxo de exe-
cução do algoritmo para diferentes partes da solução. Tam-
bém chamada de estrutura de seleção, ela divide-se em estru-
tura SE e estrutura ESCOLHA. 
A estrutura SE é mais flexível, podendo utilizar na sua con-
dição todos os operadores relacionais (<, >, <=, >=, =, 
<>) e, quando forem necessárias, mais de uma condição 
com os operadores lógicos (E e OU) entre elas. Essa estrutura 
também é classificada como estrutura condicional SE simples, 
composta ou encadeada.
A sintaxe da estrutura condicional SE simples, em lingua-
gem C, é apresentada a seguir. 
if(<condição ou lista de condições>)
Capítulo 2 Estruturas Básicas de Controle 37
 <instrução ou bloco de instruções>
A condição é avaliada e, se retornar zero, que nessa si-
tuação em C significa falso, a instrução não será executada. 
Quando resultar qualquer valor diferente de zero, que em C 
nessa situação é considerado verdadeiro, a instrução será exe-
cutada. Essa estrutura pode conter mais de uma condição com 
operadores lógicos entre elas e, também, pode conter um blo-
co de instruções a ser executado, ao invés de uma instrução 
única. Vale lembrar que um bloco é composto por duas ou 
mais instruções, delimitado por início e fim (em C, representa-
dos pelos símbolos { e }). O Quadro 2.1 apresenta três exem-
plos da estrutura condicional SE simples em linguagem C. 
Com instrução única Com bloco de instruções Mais de uma condição e bloco
if(a>b)
printf("%i",a);
if(a>b){
a=a-b;
printf("%i",a);
}
if(a>b && a<>0 && 
b<>0){
 a=a/b;
 printf("%i",a);
}
Quadro 2.1 − Exemplos da sintaxe da estrutura condicional SE simples em C
A sintaxe da estrutura condicional SE composta, em lingua-
gem C, pode ser observada a seguir. 
if(<condição ou lista de condições>)
 <instrução ou bloco de instruções>
38 Algoritmos e Programação II
 else
 <instrução ou bloco de instruções>
Quando a condição avaliada resultar qualquer valor di-
ferente de zero, a instrução da cláusula if será executada; 
caso contrário, quando resultar zero, é a instrução da cláusula 
else que será executada. 
O Quadro 2.2 exemplifica a utilização da estrutura condi-
cional SE composta em linguagem C. O programa apresenta-
do lê um valor inteiro e verifica se ele é par ou ímpar. Na colu-
na da esquerda, a solução aparece em português estruturado, 
enquanto a coluna da direita apresenta a mesma solução em 
linguagem C. 
Capítulo 2 Estruturas Básicas de Controle 39
Problema: ler um valor do tipo inteiro e verificar se ele é par ou ímpar.
Português estruturado – SE Linguagem C - if
algoritmo exemplo
variáveis 
 valor: inteiro
início 
 escrever("Digite um valor: ")
 ler(valor)
 
 se(valor mod 2 = 0)então
 escrever(valor," é par.")
 senão
 escrever(valor," é ímpar.")
fim		
#include <stdio.h> 
#include <conio.h>
main() { 
 int valor;
 clrscr(); 
		gotoxy(10,10);	
 printf("Digite um valor: 
"); 
 scanf("%i",&valor);
		gotoxy(10,14);						
 if(valor%2==0)
 printf("%i é par.", 
valor);
 else 
 printf("%i é ímpar.", 
valor);
 
 getch(); 
}
Quadro 2.2 − Exemplo da estrutura de controle condicional SE
Outro exemplo do uso da estrutura condicional SE com-
posta pode ser observado na Figura 2.2, onde o programa lê 
duas notas, calcula a média do aluno e emite uma mensagem 
de aprovado ou reprovado. 
40 Algoritmos e Programação II
 Figura 2.2 − Exemplo da estrutura de controle condicional SE 
composta, em linguagem C
A aplicação da estrutura condicional SE encadeada, cuja 
sintaxe em linguagem C é apresentada a seguir, pode ser ob-
servada na Figura 2.3 que verifica se um valor digitado pelo 
usuário é positivo, negativo ou nulo. 
 if(<condição ou lista de condições>)
 <instrução ou bloco de instruções>
 else
Capítulo 2 Estruturas Básicas de Controle 41
 if(<condição ou lista de condições>)
 <instrução ou bloco de instruções>
 else
 <instrução ou bloco de instruções> 
Figura 2.3 − Exemplo da estrutura de controle condicional SE 
encadeada, em linguagem C
Em situações de igualdade para uma mesma variável, em 
que é necessário comparar a variável com vários valores, utiliza-
-se a estrutura condicional SE encandeada (por exemplo, com-
parar uma variável op com as quatro operações básicas + - * e 
/). Nesse caso, tem-se uma seleção de múltipla escolha.
42 Algoritmos e Programação II
O uso da estrutura condicional ESCOLHA, apresentado a 
seguir, pode simplificar bastante a "cascata" de estruturas SE 
necessária nessas situações. A estrutura ESCOLHA pode ser 
utilizada nesses casos desde que a variável avaliada seja do 
tipo inteiro ou caractere. A sintaxe da estrutura condicional 
ESCOLHA, em linguagem C, é apresentada a seguir.
 switch(<variável>){
	 			case	<1>:	<instruções>	break;
 case <2>: <instruções> break;
 case <n>: <instruções> break;
 default: <instruções> 
 }
Se a variável avaliada tiver um dos valores listados nas op-
ções, as instruções correspondentes ao respectivo case serão 
executadas. Quando a variável for diferente de todas as op-
ções listadas, a instrução (ou bloco de instruções) da cláusula 
default será executada. A cláusula default é opcional 
nessa estrutura. No final de cada case, aparece o break, 
usado para encerrar a execução da estrutura condicional. 
Para demonstrar a aplicação da estrutura condicionalES-
COLHA em linguagem C, o Quadro 2.3 apresenta um exem-
plo que executa as operações básicas de uma calculadora. Na 
coluna da esquerda, a solução aparece em português estrutu-
rado e na da direita em linguagem C. 
Capítulo 2 Estruturas Básicas de Controle 43
Problema: construir uma calculadora que contenha as operações: +, - , * e /.
Português estruturado - ESCOLHA Linguagem C - switch
algoritmo exemplo
variáveis
		valor1,valor2,r:	real	
 operador: caractere
início
escrever("Digite	o	1º	valor:	")
		ler(valor1)
escrever("Digite o operador: ")
 ler(operador)
escrever("Digite	o	2º	valor:	")
 ler(valor2)
 escolha(operador)
 caso "+": r 	valor1+valor2
 caso "-": r 	valor1-valor2
 caso "*": r 	valor1*valor2
 caso "/": se(valor2<>0)então
 r 	valor1/valor2
 senão 
 r 0 
 senão 
 início
 escrever("Operador 
inválido") 
 r 0
				fim
		fim
 escrever ("Resultado = ", r)
fim	
#include <stdio.h> 
#include <conio.h>
main(){
		float	valor1,valor2,	r;
 char operador;
 clrscr(); 
		gotoxy(10,5);	
 printf("Digite o primeiro 
valor:"); 
		scanf("%f",&valor1);																			
		gotoxy(10,8);			
 printf("Digite o operador: "); 
 gotoxy(29,8); operador=getc
he(); 
		gotoxy(10,11);		
 printf("Digite o segundo valor: 
"); 
 scanf("%f",&valor2); 
 switch(operador){ 
	 	 	 	 case'+':	 r=valor1+valor2;	
break;
	 	 	 	 case'-':	 r=valor1-valor2;	
break;
	 	 	 	 case'*':	 r=valor1*valor2;	
break;
 case'/': if(valor2!=0)
	 	 				r	=	valor1	/	
valor2;
 else
 r = 0;
 break;
					default:	gotoxy(10,15);
 printf("Operador 
inválido!");
 r=0;
 }
 
			gotoxy(10,18);
	 	 	 printf("Resultado	 =	 %3.2f",	
r);
 getch(); 
}
Quadro 2.3 − Exemplo da estrutura de controle condicional ESCOLHA, em 
linguagem C
44 Algoritmos e Programação II
Outro exemplo do uso da estrutura condicional ESCOLHA 
pode ser observado na Figura 2.4. Neste exemplo, o usuário 
digita o código de um produto e a quantidade adquiria e o 
programa calcula o total a pagar.
Figura 2.4 − Exemplo da estrutura de controle condicional ESCOLHA, 
em linguagem C
Capítulo 2 Estruturas Básicas de Controle 45
2.3 Estrutura de repetição 
Enquanto as estruturas condicionais, estudadas na seção ante-
rior, têm como objetivo escolher entre diferentes fluxos de exe-
cução a partir da avaliação de uma expressão, as estruturas 
de repetição possibilitam que uma ou mais instruções sejam 
executadas mais de uma vez no programa. 
As estruturas de controle de repetição dividem-se em EN-
QUANTO, REPITA/ATÉ e PARA. Elas diferenciam-se em relação 
ao momento em que a condição de interrupção será avaliada, 
que pode ser antes ou depois da primeira iteração. 
A estrutura de controle de repetição ENQUANTO permi-
te executar uma ou mais instruções repetidamente enquanto 
sua condição de interrupção resultar verdadeiro. A sintaxe da 
estrutura de repetição ENQUANTO, em linguagem C, é apre-
sentada a seguir.
 while(<condição>)
 <instrução ou bloco de instruções>
Como pode ser observado, a condição de interrupção é 
verificada antes da execução da instrução ou bloco de instru-
ções a ser repetido. Se o resultado dessa condição for dife-
rente de zero (que, em linguagem C, significa verdadeiro), a 
instrução ou bloco de instruções é executado e, logo após essa 
iteração, o fluxo de execução retorna para o início da estrutura 
while e a condição de interrupção é avaliada novamente. 
Esse processo é repetido até que a condição avaliada resulte 
zero (ou seja, falso em linguagem C). Nesse caso, o fluxo de 
46 Algoritmos e Programação II
execução do programa continuará a partir da instrução ime-
diatamente após à estrutura while. Vale destacar que, como 
a condição de interrupção é avaliada no início da estrutura de 
controle, quando esta resultar zero na primeira vez em que for 
verificada, a instrução ou bloco de instruções da estrutura não 
será executado nenhuma vez. 
Ao contrário da estrutura ENQUANTO, a condição de in-
terrupção da estrutura REPITA/ATÉ é verificada no final de cada 
iteração. Em linguagem C, a sintaxe da estrutura de repetição 
equivalente à estrutura REPITA/ATÉ, considerando o fato de 
que a condição de interrupção é avaliada no final de cada 
iteração, é apresentada a seguir. 
do{
 <instrução ou bloco de instruções>
} while(<condição>)
Uma ou mais instruções serão executadas repetidamente 
enquanto a condição de interrupção da estrutura resultar ver-
dadeiro (em linguagem C, verdadeiro significa qualquer valor 
diferente de zero). Como a condição só é avaliada no final de 
cada iteração, a instrução ou bloco de instruções a ser repeti-
do será executado pelo menos uma vez, independente do valor 
inicial da condição de interrupção. Depois de cada iteração, 
se o resultado da condição for verdadeiro, o fluxo de execução 
retorna para o início da estrutura. Esse processo é repetido 
enquanto a condição de interrupção resultar verdadeiro. 
Capítulo 2 Estruturas Básicas de Controle 47
A estrutura de repetição PARA, diferente das anteriores, é 
controlada por uma variável de controle, como pode ser ob-
servado na sintaxe apresentada a seguir, em linguagem C. 
 for(v=vi;v<vf;v++)
 <instrução ou bloco de instruções>
Onde: v representa a variável de controle; vi indica o valor 
inicial da variável de controle; vf indica o valor final da variável 
de controle; e v++ indica que a variável será incrementada 
em um a cada iteração.
As estruturas de controle de repetição são exemplificadas 
nos quadros a seguir. Para facilitar o entendimento, a coluna 
da esquerda dos Quadros 2.4, 2.5 e 2.6 apresenta a solução 
em português estruturado e a da direita em linguagem C. 
48 Algoritmos e Programação II
Problema: ler 10 valores do tipo inteiro, calcular e escrever a média desses valores.
Português estruturado – ENQUANTO Linguagem C – while 
algoritmo exemplo
variáveis 
 valor, soma, cont: inteiro
 media: real 
início 
 cont 0
 soma 0
			enquanto(cont<10)faça
 início 
 
 escrever("Digite um 
valor:")
 ler(valor)
 cont 	cont	+	1
 soma soma + valor
			fim
 media 	soma	/	10
 escrever("Média = ", media)
fim		
#include <stdio.h> 
#include <conio.h>
main() { 
 int valor, soma, cont;
		float	media;
 cont = 0;
 soma = 0;
		while(cont<10)
 {
clrscr(); 
gotoxy(10,10);	
printf("Digite um valor: 
"); 
scanf("%i",&valor); 
cont	=	cont	+	1;
soma = soma + valor;
 }
		media	=	soma	/	10;
		gotoxy(10,14);						
 printf("Media = %.2f", 
media); 
 getch(); 
}
Quadro 2.4 − Exemplo da estrutura de controle de repetição ENQUANTO
Capítulo 2 Estruturas Básicas de Controle 49
Problema: ler 25 valores, calcular e escrever o percentual de valores negativos.
Português estruturado – REPITA Linguagem C – do while 
algoritmo exemplo
variáveis 
 cont: inteiro
 valor, negativo, perc: real 
início 
 cont 0
 negativo 0
 repita 
 
 
 escrever("Digite um valor: 
")
 ler(valor)
 cont 	cont	+	1
 se (valor < 0) então
 negativo 	negativo	+	1
			até(cont=25)
 perc 	(negativo*100)/25
 escrever("% negativos= 
",perc)
fim
#include <stdio.h> 
#include <conio.h>
main() { 
 int cont;
		float	valor,	negativo,	perc;
 cont = 0;
 negativo = 0;
 do{
clrscr(); 
gotoxy(10,10);	
printf("Digite um valor: 
"); 
scanf("%f",&valor); 
cont	=	cont	+	1;
if(valor < 0)
 negativo = negativo 
+	1;
		}	while(cont<25);
		perc	=	(negativo*100)/25;
		gotoxy(10,14);						
 printf("%% negativos= %.2f", 
perc); 
 getch(); 
}
Quadro 2.5 − Exemplo da estrutura de controle de repetição REPITA
O exemplo utilizando a estrutura for, do Quadro 2.6, 
apresenta a solução de um problema em que o número de 
repetições é conhecido previamente. Nesses casos,na estrutu-
ra for(cont=1;cont<=10;	 cont++), a primeira instru-
ção inicializa a variável de controle (cont=1), a segunda ve-
rifica a condição de interrupção avaliando a mesma variável 
(cont<=10) e a terceira incrementa a variável de controle em 
um a cada iteração (cont++). É importante destacar que a pri-
50 Algoritmos e Programação II
meira instrução, usada para inicializar a variável de controle, é 
executada uma única vez, no início da execução da estrutura. 
Problema: ler um valor inteiro, entre 1 e 10, e escrever a sua tabuada.
Português estruturado – PARA Linguagem C – for
algoritmo exemplo
variáveis 
 valor, cont: inteiro
início 
 escrever("Digite um valor: 
")
 ler(valor)
			se(valor>=1)e(valor<=10)
					para	cont	de	1	até	10	faça	
 escrever(cont*valor)
 senão 
 escrever("Valor inválido.")
fim		
#include <stdio.h> 
#include <conio.h>
main() { 
 int valor, cont;
 
 clrscr(); 
		gotoxy(10,5);		
 printf("Digite um valor: ");
 scanf("%i",&valor);
		if(valor>=1	&&	valor<=10)		
				for(cont=1;cont<=10;cont++)
{
		gotoxy(10,cont+7);		
 printf(" 
%i",cont*valor); 
 }
 else{
				gotoxy(10,7);
 printf("Valor inválido."); 
 }
 getch(); 
}
Quadro 2.6 − Exemplo da estrutura de controle de repetição PARA
Em português estruturado, a estrutura PARA só pode ser 
utilizada para resolver problemas em que o número de repeti-
ções é previamente conhecido, como no exemplo anterior. Em 
linguagem C, entretanto, a estrutura for é mais flexível, po-
dendo ser utilizada em outras situações, como exemplificado 
nas Figuras 2.5 e 2.6. 
O exemplo apresentado na Figura 2.5 lê vários valores e calcu-
la a média dos mesmos. A entrada de dados é encerrada quando 
Capítulo 2 Estruturas Básicas de Controle 51
o usuário digitar zero. Na linha 14 do programa apresentado na 
Figura 2.5, a estrutura for(cont=1;valor!=0;cont++) 
inicializa a variável cont, que é usada para contar a quantida-
de de valores digitados pelo usuário; na segunda instrução da 
estrutura, que verifica a condição de interrupção, é a variável 
valor que é avaliada; e, por fim, a variável cont é incremen-
tada em um a cada iteração. Diferentemente do exemplo ante-
rior, nessa situação, a estrutura for manipula duas variáveis: 
cont e valor.
Figura 2.5 − Exemplo da estrutura PARA, em linguagem C
52 Algoritmos e Programação II
No exemplo apresentado na Figura 2.6, o enunciado do 
problema não define quantos valores serão lidos, nem indi-
ca a condição de interrupção. Nessa situação, é necessário 
perguntar ao usuário, ao final de cada iteração, se ele deseja 
continuar a execução do programa − por isso, foi criada a 
variável resp para armazenar a resposta do usuário. A estru-
tura for(cont=1;resp!='N'||resp!='n';cont++), 
linha 11, inicializa a variável cont, que é usada para contar 
a quantidade de valores digitados pelo usuário; na segunda 
instrução, que verifica a condição de interrupção, é a variável 
resp que é avaliada; e, por fim, a variável cont é incremen-
tada em um a cada iteração. 
Capítulo 2 Estruturas Básicas de Controle 53
Figura 2.6 − Exemplo da estrutura PARA, em linguagem C
Além dos exemplos apresentados até aqui, a linguagem 
C permite muitas outras possibilidades para a estrutura for, 
como demonstram os exemplos do Quadro 2.7. 
54 Algoritmos e Programação II
Flexibilidade Exemplo de aplicação
Qualquer uma das três 
partes da estrutura for 
pode conter uma ou mais 
instruções, separadas por 
vírgula. 
//Escreve nos. de 0 a 98 em incremento 
de 2.
main() { 
 int x,y;
		for(x=0,y=0;x+y<100;x=x+1,y=y+1)
 printf("%i ",x+y);
}
É possível utilizar 
caracteres para definir 
valores iniciais e seus 
limites, ao invés de 
inteiros.
/* Imprime as letras minúsculas do 
alfabeto e seus respectivos códigos 
decimais da tabela ASCII. */
main() { 
 char ch;
 for(ch='a';ch<'z';ch++)
 printf("Valor ASCII de %c é %d.\
n",ch,ch);
}
É possível fazer chamada 
a funções em qualquer 
uma das partes da 
estrutura.
/* Lê caracteres, um a um até que seja 
digitado X, e imprime o caractere 
seguinte a partir do código ASCII. */
main() { 
 char ch;
 for(ch=getch();ch!='X';ch=getch())
				printf("%c	",ch+1);
}
Qualquer uma das três 
partes da estrutura pode 
ser omitida, embora os 
pontos-e-vírgulas per-
maneçam. Se a parte de 
inicialização ou a de in-
cremento forem omiti-das, 
elas serão desconside-ra-
das. Quando a segunda 
parte é omitida, a condi-
ção de teste é considerada 
sempre verdadeira.
/* Lê caracteres, um a um até que seja 
digitado X, e imprime o caractere 
seguinte a partir do código ASCII. */
main() { 
 char ch;
 for( ; (ch=getch())!='X'; )
				printf("%c	",ch+1);
}
/*	Entra	em	laço	infinito	*/
main() { 
for( ; ; )
				printf("Laço	infinito./n");
}
Quadro 2.7 − Exemplos da flexibilidade da estrutura for
Capítulo 2 Estruturas Básicas de Controle 55
Referências Bibliográficas
DEITEL, Paul; DEITEL, Harvey. C: como programar. 6.ed. São 
Paulo: Pearson Prentice Hall, 2011.
FORBELLONE, André Luiz Villar; EBERSPÄCHER, Henri Frederi-
co. Lógica de Programação: a construção de algoritmos 
e estruturas de dados. 3.ed. São Paulo: Prentice Hall, 2005.
ISAIA FILHO, Eduardo; LINDEMANN, Vanessa. Algoritmos e 
Programação I. Canoas: Ed. ULBRA, 2013.
Atividades
Parte I - Questões objetivas
1) Na programação estruturada, são necessárias apenas três es-
truturas de controle para implementar algoritmos. São elas:
a) seleção, repetição e aninhamento
b) empilhamento, aninhamento e operação
c) sequência, aninhamento e seleção
d) sequência, seleção e repetição
e) função, operação e programa
56 Algoritmos e Programação II
2) if(var) é equivalente a if(var!=0).
a) Certo b) Errado
3) Para que faixa de valores da variável x o seguinte segmento 
de código imprime a letra C?
if(x<=200)
		if(x<=100)
 if(x<0) printf("A")
 else printf("B")
 else printf("C")
else printf("D")
a) 0<x<100
b) x<=100
c) 100<x<=200 
d) x>200 
e) 100<=x<=200
4) Tendo em vista a sintaxe da linguagem de programação C, 
e supondo que todas as variáveis da expressão 
while(9<=H && P!=0 || F%2==0) 
Capítulo 2 Estruturas Básicas de Controle 57
sejam do tipo inteiro, o laço de repetição NÃO será exe-
cutado se:
a) H < 9 e P ≠ 0 e F for par
b) H = 9 e P = 0 e F for ímpar
c) H ≥ 9 e P ≠ 0 e F ≠ 0
d) H > 9 e P = 0 e F = 0
e) Nenhuma das respostas anteriores
5) Considerando que x e y são números inteiros positivos, as-
sinale a alternativa que descreve a tarefa executada pelo 
programa em C descrito a seguir. 
#include<stdio.h>
main(){
int x,y,z,w;
printf("Digite os valores de x e y: ");
scanf("%d %d",&x,&y);
z=1;
while(z*y<=x)
z=z+1;
z=z-1;
w=x-z*y;
printf("%d %d \n",z,w);
} 
a) Exibe, respectivamente, o valor correspondente às vari-
áveis x e y. 
58 Algoritmos e Programação II
b) Exibe, respectivamente, o quociente e o resto da variável 
x pela variável y.
c) Exibe, respectivamente, os dois primeiros números pri-
mos menores que x e y.
d) Exibe, respectivamente, o resto e o quociente da variável 
x pela variável y. 
e) Exibe, respectivamente, o valor correspondente às vari-
áveis x e y.
6) Quanto vale k no final da execução do seguinte trecho de 
código?
 k=0;
	 for(i=1;	i<=n;	i++)
 for(j=i; j<=n; j++)
								k=k+1;
a) n3 
b) (n2–n)/2
c) n
d) n(n+1)/2
e) n-1
Capítulo 2 Estruturas Básicas de Controle 59
Parte II - Resolução de problemas
Resolva os problemas descritos a seguir, utilizando a Lingua-
gem C.
1) Escreva um programa que leia 20 valores, encontre e escre-
va o maior entre eles.
2) Construa um programa que leia um valor inteiro e positivo, 
calcule e escreva o seu fatorial. 
Exemplos: 4! = 1 x 2 x 3 x 4 = 24 
 5! = 1 x 2 x 3 x 4 x 5 = 120 
 Por definição, 0! = 1
3) Em uma eleiçãopresidencial, existem 4 candidatos. Os vo-
tos são informados a partir de códigos, que obedecem a 
seguinte regra: 1, 2, 3, 4 = voto para os respectivos can-
didatos; 5 = voto nulo; 6 = voto branco. Elabore um pro-
grama que leia o voto de cada um dos eleitores, calcule e 
escreva: total de votos para cada candidato; total de votos 
nulos; total de votos em branco. Como finalizador do con-
junto de dados tem-se o valor 0 (zero).
4) Elabore um programa que repita a leitura de uma data até 
que ela seja válida. Para cada data incorreta, escrever a 
mensagem "DATA INVÁLIDA". Quando a data for informa-
da corretamente, deve ser impressa a mensagem "DATA 
VÁLIDA" e o programa deve ser encerrado. Para resolver 
60 Algoritmos e Programação II
esse problema, use três variáveis para representar a data: 
dia, mês e ano; não esqueça de considerar ano bissexto, 
quando o mês de fevereiro tem 29 dias.
5) Durante uma pesquisa realizada entre os habitantes de uma 
região, foram coletados os seguintes dados: idade, gêne-
ro e salário. Faça um programa que calcule e informe: a 
média salarial do grupo; a maior idade do grupo; a quan-
tidade de mulheres com salário superior a R$ 5.000,00.
Respostas dos exercícios da Parte I
1) d; 2) a; 3) c; 4) b; 5) b; 6) d.
Variáveis Indexadas 
Unidimensionais
ÂÂUma variável simples representa um espaço da memó-ria do computador onde é possível armazenar um úni-
co valor por vez. Os dados armazenados podem ser do 
tipo inteiro, real, caractere ou cadeia de caracteres. Esses 
conceitos, aliados às instruções primitivas de entrada e sa-
ída de dados e às estruturas de controle de fluxo sequen-
cial, condicionais e repetitivas, estudados nos capítulos 
anteriores, permitem resolver diversos problemas como 
visto até aqui. O uso de variáveis simples, entretanto, gera 
algumas limitações como a exemplificada a seguir. 
Vanessa Lindemann*
Capítulo 3
* Doutora em Informática na Educação pela UFRGS (2008); professora dos cursos 
da Computação da ULBRA
62 Algoritmos e Programação II
Problema: ordenar três valores do tipo inteiro.
Português estruturado Linguagem C
algoritmo exemplo
variáveis 
 a, b, c: inteiro
início 
		escrever("Digite	3	valores:	
")
 ler(a, b, c)
 escrever("Valores ordenados: 
")
 se(a<b)então
 se(b<c)então
 escrever(a,b,c)
 senão 
 se(a<c) então 
 escrever(a,c,b)
 senão
 escrever(c,a,b)
 senão
 se(b<c)então
 se(a<c)então
 escrever(b,a,c)
 senão 
 escrever(b,c,a)
 senão 
 escrever(c,b,a)
fim
#include <stdio.h> 
#include <conio.h>
main() { 
 int a, b, c;
 
 clrscr(); 
		gotoxy(10,5);	
		printf("Digite	3	valores:	");			
 scanf("%i %i %i",&a,&b,&c); 
		gotoxy(10,8);
 printf("Valores ordenados: ");
 if(a<b)
 if(b<c)
 printf("%i %i %i",a,b,c);
 else 
 if(a<c) 
 printf("%i %i %i",a,c,b);
 else
 printf("%i %i %i",c,a,b);
 else
 if(b<c)
 if(a<c)
 printf("%i %i %i",b,a,c);
 else 
 printf("%i %i %i",b,c,a);
 else
 printf("%i %i %i",c,b,a);
 getch(); 
}
Quadro 3.1 − Exemplo da limitação do uso de variáveis simples
O programa descrito no Quadro 3.1 ordena três valo-
res do tipo inteiro. Nesse método de ordenação, utilizando 
variáveis simples, ordenar n elementos implica em gerar 
Capítulo 3 Variáveis Indexadas Unidimensionais 63
n! resultados diferentes. Logo, é impossível, por exemplo, 
utilizar o mesmo método para ordenar 10 valores armaze-
nados em variáveis simples − além de ter que utilizar 10 
variáveis com nomes diferentes, seriam necessários exibir 
10! (3.628.800) resultados.
Uma forma de resolver esse problema é utilizar uma 
variável indexada unidimensional, que representa um 
conjunto de dados ordenados e homogêneo, armazena-
do de forma contínua na memória, acessível por um único 
nome e um índice. Essas variáveis também são conhecidas 
como matrizes unidimensionais, arranjos unidimensionais 
ou vetores (nome que será adotado neste livro). 
64 Algoritmos e Programação II
3.1 Estrutura 
A estrutura de um vetor, cujo tamanho é 10, é ilustrada na Fi-
gura 3.1. À esquerda, a representação do vetor em algoritmo, 
onde os índices variam de 1 a 10; à direita, a representação 
em linguagem C, em que os índices variam de 0 a 9. 
Algoritmo 
1 102 23 34 45 56 67 78 89 910
Linguagem C
notas 
Índices: 1 a 10 Índices: 0 a 9
notas 
Figura 3.1 − Exemplos da estrutura de um vetor de tamanho 10
3.2 Declaração 
Para declarar um vetor, é necessário definir o tipo dos dados 
que serão armazenados nele, o nome (identificador) a partir do 
qual ele será manipulado e o tamanho da variável, que indica 
quantos valores ele poderá armazenar. A sintaxe da declara-
ção de um vetor, em linguagem C, é apresentada a seguir. 
<tipo>	<identificador>[<tamanho>];
Onde: tipo representa um dos tipos básicos; identificador 
é o nome que será usado para manipular a variável; tamanho 
indica a quantidade de elementos que a variável irá armazenar.
Capítulo 3 Variáveis Indexadas Unidimensionais 65
A Tabela 3.1 exemplifica como declarar um vetor para ar-
mazenar 10 elementos do tipo real, em português estruturado 
e o equivalente em Linguagem C. 
Português estruturado Linguagem C
notas:	vetor	[1..10]	de	real float	notas[10];
Tabela 3.1 − Exemplo da declaração de um vetor
Um vetor pode ser inicializado no momento de sua decla-
ração. Ao executar int	vet[5]={0} a variável vet é criada e 
terá todas as suas posições inicializadas com zero; ao executar 
int	vet[5]={1,2,3,4,5} a variável será inicializada com um 
valor diferente em cada posição. 
3.3 Manipulação 
Para acessar um elemento de um vetor, além de referenciar o 
seu nome, é necessário indicar a posição do elemento deseja-
do. A posição do elemento do vetor, denominada índice, deve 
ser indicada entre colchetes e pode ser uma constante, uma 
expressão aritmética ou uma variável. Ao isolar um elemento 
do vetor, é possível realizar instruções primitivas de entrada, de 
saída e de atribuição. Alguns exemplos da instrução primitiva 
de atribuição são apresentados na Tabela 3.2 e ilustrados na 
Figura 3.2.
66 Algoritmos e Programação II
Português estruturado Linguagem C
notas[3]	←	9.5	 notas[2]	=	9.5;
i ←	3	
notas[i]	←	9.5
i = 2;
notas[i]	=	9.5;
Tabela 3.2 − Exemplo de atribuição a um elemento específico do vetor
10 2 3 4 5 6 7 8 9
9,5
notas 
Figura 3.2 − Variável notas depois da instrução de atribuição, em 
Linguagem C
Português estruturado Linguagem C
escrever	(“Informe	os	10	
elementos do vetor: ”)
para	i	de	1	até	10	faça
 
			ler(notas[i])
gotoxy(10,5);
printf(“Informe	os	10	elementos	do	
vetor: “);
for(i=0;	i<10;	i++){
			gotoxy(i*5+10,8);
			scanf(“%f”,&notas[i]);	
} 
Tabela 3.3 − Exemplo da entrada de dados em um vetor
A Tabela 3.3 exemplifica a entrada de dados da variável 
notas, declarada na Tabela 3.1. A Figura 3.3 ilustra o resul-
tado dessa variável, supondo que o usuário tenha digitado 9, 
8.3, 5.1, 6, 7.9, 5.2, 9, 8, 9.7 e 5, nessa ordem.
Capítulo 3 Variáveis Indexadas Unidimensionais 67
10 2 3 4 5 6 7 8 9
5.1 7.9 5.28.3 8 9.7 569 9
notas 
Figura 3.3 − Ilustração da variável notas depois da entrada de dados, 
em Linguagem C
A função gotoxy(coluna,linha) é utilizada para po-
sicionar o cursor em uma determinada posição da tela. Ela é 
usada antes de instruções primitivas de entrada e saída para 
organizar os dados na tela. No exemplo de entrada de dados 
da Tabela 3.3, em linguagem C, a função gotoxy(10,5) 
posiciona o cursor na coluna 10 e na linha 5, antes da instru-
ção de saída, que irá imprimir na tela a mensagem "Informe 
os 10 elementos do vetor: ". Essa mensagem será exibida uma 
única vez, a partir da coluna 10, na linha 5. 
Nesse mesmo exemplo, a função gotoxy(i*5+10,8) 
aparece novamente, antes da instrução primitiva de entrada 
de dados. Nesse caso, ela é usada para definiro local em que 
os dados de entrada, digitados pelo usuário, serão exibidos 
na tela. Como o usuário irá digitar 10 notas, para que todas 
sejam exibidas na tela uma ao lado da outra, o primeiro parâ-
metro da função, que representa a coluna, não pode ser uma 
constante (ou seja, não pode ser um valor fixo). 
No exemplo, utiliza-se a expressão i*5+10 para definir a 
coluna em que cada valor digitado pelo usuário será exibido. 
Considerando que a variável i varia entre 0 e 9, os valores 
seriam lidos nas colunas: 10, 15, 20, 25, 30, 35, 40, 45, 50 
e 55 − sempre na linha 8. Observa-se, portanto, que o valor 
que multiplica a variável i na expressão define o intervalo en-
68 Algoritmos e Programação II
tre as colunas (no exemplo, o intervalo entre um valor e outro 
é de 5), enquanto o valor que é somado à variável i na ex-
pressão, define a primeira coluna a ser utilizada (no exemplo, 
coluna 10). 
3.4 Exemplos do uso de vetores
Esta seção é dedicada à resolução de alguns problemas, cujas 
soluções utilizam variáveis indexadas unidimensionais, ou seja, 
vetores. No primeiro exemplo, a solução é apresentada em 
português estruturado e, em seguida, o equivalente em lingua-
gem C. Nos demais exemplos, utiliza-se apenas a representa-
ção em linguagem C. 
 Â Exemplo 3.1
Problema: o professor de Algoritmos e Programação pre-
cisa de um programa que leia a nota final de 10 alunos, cal-
cule e escreva a média geral da turma. 
Capítulo 3 Variáveis Indexadas Unidimensionais 69
Problema: ler a nota final de 10 alunos, calcular e escrever a média geral da turma.
Português estruturado Linguagem C 
algoritmo	exemplo31
variáveis 
		notas:	vetor[1..10]	de	real
 soma, media: real
 i: inteiro
início 
 soma 0
 
		escrever("Digite	as	10	notas:	
")
		para		i	de	1	até	10	faça
 início
					ler(notas[i])
 soma 	soma	+	notas[i]
		fim
 media 	soma/10
 escrever("Média turma 
=",media)
fim
#include <stdio.h> 
#include <conio.h>
main() { 
		float	notas[10];
		float	soma,	media;		
 int i;
 
 soma=0;
 clrscr(); 
		gotoxy(10,5);	
		printf("Digite	as	10	notas:	
"); 
		for(i=0;i<10;i++)
 {
				gotoxy(i*5+10,8);
				scanf("%f",&notas[i]);		
				soma	=	soma	+	notas[i];
 } 
		media	=	soma/10;
		gotoxy(10,14);						
 printf("Média turma = 
%.1f",media);		
 getch(); 
}
Quadro 3.2 − Solução para o problema do exemplo 3.1
Na solução apresentada no Quadro 3.2, criou-se um ve-
tor, com capacidade para armazenar 10 valores do tipo real. 
Para realizar a entrada de dados e, em seguida, somar as no-
tas digitadas pelo usuário, foi utilizada a estrutura de repetição 
PARA. Por fim, a média da turma foi calculada (dividindo a va-
70 Algoritmos e Programação II
riável que acumulou todas as notas pela quantidade de notas, 
nesse caso, 10) e exibida para o usuário. 
 Â Exemplo 3.2
Problema: o professor de Algoritmos e Programação pre-
cisa de um programa que leia a nota final de 10 alunos, calcu-
le a média geral da turma e, a seguir, informe quantos alunos 
obtiveram nota superior à média da turma. 
Figura 3.4 Solução, em linguagem C, para o problema do exemplo 3.2
Capítulo 3 Variáveis Indexadas Unidimensionais 71
Até a linha 18, a solução apresentada na Figura 3.4 é a 
mesma do exemplo anterior: o programa emite uma mensa-
gem ao usuário solicitando que ele digite 10 notas, estas são 
lidas e armazenadas em um vetor, acumuladas na variável 
soma e, em seguida, a média é calculada. Entre as linhas 19 
e 21, o programa percorre o vetor novamente, comparando 
cada elemento com a variável media e, sempre que o valor 
comparado for maior que a média calculada, incrementa a 
variável cont em um. Por fim, o programa exibe a média da 
turma e a quantidade de alunos com nota superior a ela. 
Os exemplos 3.1 e 3.2 também podem ser usados para 
justificar o uso de variáveis indexadas. No primeiro caso, até 
seria possível resolver o problema sem utilizar um vetor: uma 
variável simples poderia ser lida dez vezes, acumulando cada 
valor lido na variável soma para, no final, calcular a média. No 
exemplo 3.2, entretanto, essa solução não seria possível, já 
que, para verificar a quantidade de alunos com nota superior 
à média da turma, é necessário ter a nota de todos os alunos 
para comparar com a variável media e, nesse caso, o progra-
ma só teria a nota do último aluno armazenada.
 Â Exemplo 3.3
Problema: faça um algoritmo que leia um vetor de 20 po-
sições, com elementos do tipo inteiro. A seguir, troque os ele-
mentos de lugar: o 1º com o 20º, o 2º com o 19º, o 3º com 
o 18º, ... Finalmente, escreva o vetor modificado. A entrada e 
a saída de dados desse exemplo são ilustradas na Figura 3.5.
72 Algoritmos e Programação II
1
1
11
11
0
0
10
10
2
2
12
12
3
3
13
13
4
4
14
14
5
5
15
15
6
6
16
16
7
7
17
17
8
8
18
18
9
9
19
19
9
8
3
35
6
5
13
98
98
13
5
6
4
14
1
11
35
3
8
9
11
1
14
4
42
55
24
2
12
20
64
7
2
24
55
42
7
64
20
12
Vetor v
Vetor v modificado
Figura 3.5 Ilustração do resultado do exemplo 3.3
Como pode ser observado na Figura 3.6, esse problema 
foi resolvido em três etapas: a entrada de dados, que ocorre 
entre as linhas 10 e 14; a troca dos elementos do vetor, rea-
lizada pelas instruções entre as linhas 15 e 20; e, por fim, a 
saída de dados, que apresenta o vetor modificado, executada 
entre as linhas 23 e 27. 
Capítulo 3 Variáveis Indexadas Unidimensionais 73
Figura 3.6 − Solução, em linguagem C, para o problema do exemplo 3.3
Para realizar a troca, é necessário que todos os dados te-
nham sido armazenados no vetor, já que o primeiro elemento 
será trocado com o último, o segundo com o penúltimo e assim 
sucessivamente. Além disso, deve-se criar uma variável auxiliar.
O Quadro 3.3 ilustra a necessidade da variável auxiliar no 
processo de troca. No exemplo, foram utilizadas duas variáveis 
simples, A e B. Supondo que A armazena 5 e B 2, se forem 
74 Algoritmos e Programação II
executadas as instruções A=B e B=A, o resultado será A e B ar-
mazenando 2. Logo, sem a variável auxiliar, as duas variáveis 
ficariam com o mesmo valor. A solução correta, utilizando a 
variável auxiliar, é apresentada no Quadro 3.4, onde AUX=A, 
A=B e B=AUX. 
Instruções
Variáveis
A B
5 2
A = B 2
B = A 2
A = 2
B = 2
NÃO FUNCIONOU!
Teste-de-mesa Saída
Quadro 3.3 − Troca de conteúdo entre duas variáveis, sem usar variável auxiliar
Instruções
Variáveis
AUX A B
 5 2
AUX = A 5
A = B 2 
B = AUX 5
A = 2
B	=	5
Teste-de-mesa Saída
Quadro 3.4 − Troca de conteúdo entre duas variáveis, usando uma 
variável auxiliar
Capítulo 3 Variáveis Indexadas Unidimensionais 75
É importante observar que, nas etapas de entrada e saí-
da de dados do exemplo 3.3, o número de iterações é 20, 
enquanto na etapa de trocas é 10. Isso ocorre porque o ve-
tor possui 20 elementos e, a cada iteração, dois elementos 
são trocados. As trocas ocorrem entre os elementos v[i] e 
v[19-i]. Assim, quando i for 0, 19-i será 19, de forma 
que serão trocados os elementos v[0] com v[19]; quando 
i for 1, 19-i será 18, então serão trocados os elementos 
v[1] com v[18]; quando i for 2, 19-i será 17, trocando 
v[2] com v[17]; esse processo será repetido até a variável 
i chegar em 9, quando 19-i será 10 e serão trocados os 
elementos v[9] com v[10]. 
 Â Exemplo 3.4
Problema: escreva um programa que leia um vetor (P) de 
20 posições, com elementos do tipo inteiro. A seguir, encontre 
a posição do menor elemento do vetor, conte e informe quan-
tos dos elementos do vetor são múltiplos desse valor. 
A entrada e a saída de dados desse exemplo são ilustradas 
na Figura 3.7, e a solução para o problema é descrita na Fi-
gura 3.8.
1 110 102 123 134 145 156 167 178 189 19
13 5225 102 65 244 458 2112 999 8316 977 18P
Menor elemento = 2
Posição do menor elemento = 5
Quantidade de elementos múltiplos de 5 = 4
 Figura 3.7 − Ilustração do resultadodo exemplo 3.4
76 Algoritmos e Programação II
Figura 3.8 − Solução, em linguagem C, para o problema do exemplo 3.4
Considerando que os índices do vetor não são exibidos 
para o usuário, e que ele não sabe que os índices em lingua-
gem C iniciam em zero, o resultado apresentado no exemplo 
de entrada e saída da Figura 3.7 pode parecer estranho para 
ele. O menor elemento do vetor é o valor dois, entretanto, 
para o usuário, ele está na posição seis em vez da cinco. Para 
resolver essa questão, basta alterar a instrução que armazena 
Capítulo 3 Variáveis Indexadas Unidimensionais 77
a posição do menor elemento de posicao=i (linha 16 − Fi-
gura 3.8) para posicao=i+1. 
Referências Bibliográficas
DEITEL, Paul; DEITEL, Harvey. C: como programar. 6.ed. São 
Paulo: Pearson Prentice Hall, 2011.
FORBELLONE, André Luiz Villar; EBERSPÄCHER, Henri Frederi-
co. Lógica de Programação: a construção de algoritmos 
e estruturas de dados. 3.ed. São Paulo: Prentice Hall, 2005.
ISAIA FILHO, Eduardo; LINDEMANN, Vanessa. Algoritmos e 
Programação I. Canoas: Ed. ULBRA, 2013.
Atividades
Parte I - Questões objetivas 
1) Sobre variáveis indexadas unidimensionais, é CORRETO 
afirmar:
I. Representam conjuntos ordenados de valores homogêneos, 
que podem ser de qualquer um dos tipos básicos de dados.
II. São armazenadas na memória de forma contínua e 
acessadas a partir de um único nome e um índice.
III. Também são conhecidas como vetores, arranjos ou 
matrizes unidimensionais. 
78 Algoritmos e Programação II
a) apenas II e III estão corretas;
b) apenas I e II estão corretas;
c) apenas a II está correta;
d) apenas I e III estão corretas;
e) todas estão corretas.
2) Para declarar um vetor, é necessário definir o tipo dos da-
dos que serão armazenados nele, o identificador pelo qual 
ele será manipulado; e o tamanho da variável, que indica 
quantos valores ele poderá armazenar.
a) Certo b) Errado
3) Considerando a declaração e a inicialização de variáveis 
indexadas, assinale a alternativa INCORRETA.
a) float notas[30];
b) int n[10]={0};
c) int n[8]={12,43,78,10,25,01,29,18};
d) char letras[5]={a,b,c,d,e};
e) char respostas[12]={'x'}.
 
4) Seja um vetor declarado como int	vet[10]; qual ele-
mento desse vetor é acessado por	vet[2]?
Capítulo 3 Variáveis Indexadas Unidimensionais 79
a) primeiro elemento;
b) segundo elemento;
c) terceiro elemento;
d) quarto elemento;
e) nenhuma das respostas anteriores.
5) Considerando a declaração a seguir:	int	vet[30]; 
a instrução abaixo acessa corretamente os elementos do 
vetor?
for(j=0;	j<=30;	j++)						
			vet[j]	=	j*j;
a) Sim b) Não
Parte II - Resolução de problemas
Resolva os problemas descritos a seguir, utilizando a Lin-
guagem C.
1) Elabore um programa em C que leia um vetor de 15 po-
sições com elementos do tipo caractere. Conte e escreva 
quantas vezes a letra “a” aparece no vetor.
2) Faça um programa em C que leia um vetor de 20 posi-
ções do tipo real. Troque a 1ª posição com a 11ª, a 2ª 
80 Algoritmos e Programação II
com a 12ª, a 3ª com a 13ª, ..., 10ª com a 20ª. Escreva 
o vetor modificado.
 
3) Construa um programa que crie um vetor de 16 posições, 
colocando 1 nas posições cujos índices são múltiplas de 4 
e 0 nas demais posições. Escreva o vetor criado.
 
4) Escreva um programa que crie um vetor U, com 10 ele-
mentos, cujo conteúdo é formado a partir da expressão P 
+ Q * 2, sendo que P e Q são lidas toda vez em que um 
elemento de U é criado. Escreva o vetor criado.
 
5) Faça um programa que leia dois vetores X(10) e Y(10). Crie 
e escreva um vetor Z que seja a diferença entre X e Y.
8 4 6 12 7 9 3 1 2 6x
y 4 5 5 10 1 3 3 5 9 1
z 4 -1 1 2 6 6 0 -4 -7 5
6) Elabore um programa em C que leia um vetor de 12 posições 
com elementos do tipo inteiro. A seguir, ordene os elemen-
tos do vetor (ordem crescente) e escreva o vetor modificado.
Respostas dos exercícios da Parte I
1 - e; 2 - a; 3 - d; 4 - c; 5 - b.
Strings
ÂÂ Strings são cadeias de caracteres, usadas para arma-zenar e manipular dados textuais como, por exemplo, 
nomes, endereços e senhas com caracteres alfanuméri-
cos. Em linguagem C, diferente de outras linguagens de 
programação, string não é um tipo de dado formal, mas, 
sim, um vetor de caracteres terminado pelo caractere \0 
(caractere nulo, cujo código ASCII decimal é zero). Essa 
terminação é importante, pois é a única forma das ou-
tras funções da linguagem reconhecerem o final de uma 
string. Os fundamentos necessários para manipular strings 
são apresentados nas próximas seções. 
Vanessa Lindemann*
Capítulo 4
* Doutora em Informática na Educação pela UFRGS (2008); professora dos cursos 
da Computação da ULBRA
82 Algoritmos e Programação II
4.1 Declaração e inicialização
Uma string deve ser declarada como um vetor de caracteres, 
definindo um identificador e o seu tamanho. Por exemplo, 
char	nome[21];
declara uma string que poderá armazenar no máximo 20 
caracteres, mais o caractere \0. A Figura 4.1 ilustra a estrutura 
criada na memória para armazenar a string declarada.
0 1 95 132 106 143 117 15 184 128 16 1917 20
nome
Figura 4.1 − Estrutura da variável nome declarada como string
Uma string pode ser inicializada na sua declaração, como 
ilustram os exemplos a seguir.
char	 nome[21]={'A','n','a','		
','C','l','a','r','a','\0'};
char	nome[21]="Ana	Clara";
No primeiro exemplo, os caracteres são inicializados um a 
um entre apóstrofes e o conjunto de caracteres é envolto por 
chaves. O segundo exemplo apresenta uma forma de iniciali-
zação equivalente e consideravelmente mais simples, onde a 
string aparece entre aspas e o caractere especial \0 é incluído 
automaticamente. Essas duas instruções têm o mesmo efeito, 
cujo resultado é ilustrado na Figura 4.2.
Capítulo 4 Strings 83
0 1 95 132 106 143 117 15 184 128 16 1917 20
nome
A n a a a \0rC l
Figura 4.2 − Variável nome após de ser declarada e inicializada
Como uma string é um vetor de caracteres, essa pode ser 
manipulada como tal. Para acessar um determinado caractere 
de uma string, por exemplo, basta utilizar o seu índice, como 
ilustram os exemplos a seguir. 
	 nome[0]	=	'x';	
printf("%c",	nome[4]);
4.2 Entrada de dados
A função scanf é bastante limitada para a leitura de strings, 
como ilustra o exemplo do Quadro 4.1, onde o usuário digita 
seu nome e sobrenome e o programa exibe apenas seu nome. 
Exemplo: leitura de uma string Resultado
#include <stdio.h>
#include <conio.h>
main() {
		char	nome[21];
 clrscr();
		gotoxy(10,5);
 printf("Digite seu nome: ");
 scanf("%s",nome);
		gotoxy(10,8);
 printf("Olá %s!", nome);
 getch();
}
Digite seu nome: 
Marcos Sereno
Olá Marcos! 
Quadro 4.1 − Entrada de dados de uma string usando a função scanf
84 Algoritmos e Programação II
Isso acontece porque a função scanf("%s",nome) lê 
cada caractere não branco e os armazena a partir do endere-
ço nome. O processo termina quando um caractere branco é 
encontrado. Nesse momento, o caractere \0 é incluído auto-
maticamente na primeira posição livre do vetor. 
Então, no exemplo do Quadro 4.1, quando o usuário di-
gita um espaço em branco entre seu nome e sobrenome, a 
função scanf inclui o caractere \0 na variável nome, exata-
mente na posição em que este foi digitado. O sobrenome não 
é armazenado na variável e, consequentemente, não é exibido 
na tela. Por isso, a função scanf não é indicada para a leitura 
de strings. 
Um detalhe a ser observado na instrução 
scanf("%s",nome) é a ausência do operador de en-
dereço (&) antes do segundo argumento da função. Esse 
operador não é utilizado com vetor e matriz porque os no-
mes dessas variáveis já representam seus endereços iniciais 
(exemplo: a instrução scanf("%s",nome) é equivalente a 
scanf("%s",&nome[0])). 
Uma função adequada para a leitura de strings é a fgets,

Outros materiais