Programação II
Vanessa Lindemann
Algoritimos e
Programação II
Introdução
Capítulo 1
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-
main( ) {
// declaração de variáveis
// bloco de comandos
1.2 Identificadores
1.4 Modeladores
r=9/2;
r=(float)9/2;
float total;
int cont=0;
char resposta='S';
#define pi 3.141516
Capítulo 1 Introdução à Linguagem C 13
Código Formato
%c Caractere
%i Inteiro
%f Ponto flutuante
%lf Ponto flutuante longo (double)
%s Cadeia de caracteres (string)
scanf("%f",&peso);
Código Resultado
float valor=136.472;
total=345.60;
resp='s';
cont=cont+1;
Resumindo:
1.11 Comentários
/* Este é um comentário
scanf(<string de controle>,<lista de
argumentos>);
<variável> = getch();
<variável> = getche();
fgets(<variável>,<tamanho máximo da
variável>,stdin);
Referências Bibliográficas
Atividades
b) A, b, Y, count
d) 2_ou_1, \fim, h, j
e) i, j, int, obs
#include <stdio.h>
main( ){
int i=2;
printf("Valor de i = %i\n",i);
}
Capítulo 1 Introdução à Linguagem C 31
d) imprime: Valor de i = 2;
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
b) double - %d
c) float - %f
32 Algoritmos e Programação II
d) char - %c
4) Sabe-se que:
1 pé = 12 polegadas;
Capítulo 1 Introdução à Linguagem C 33
1 jarda = 3 pés;
Capítulo 2
Estruturas Básicas de
Controle
ÂÂ
A o 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.
Com instrução única Com bloco de instruções Mais de uma condição e bloco
if(a>b) if(a>b){ if(a>b && a<>0 &&
b<>0){
printf("%i",a); a=a-b;
printf("%i",a);
a=a/b;
}
printf("%i",a);
else
início
clrscr();
gotoxy(10,10);
escrever("Digite um valor: ") printf("Digite um valor:
ler(valor) ");
scanf("%i",&valor);
getch();
}
else
Capítulo 2 Estruturas Básicas de Controle 41
else
switch(<variável>){
default: <instruções>
gotoxy(10,18);
printf("Resultado = %3.2f",
r);
getch();
}
while(<condição>)
do{
} while(<condição>)
for(v=vi;v<vf;v++)
Problema: ler 10 valores do tipo inteiro, calcular e escrever a média desses valores.
Português estruturado – ENQUANTO Linguagem C – while
#include <stdio.h>
#include <conio.h>
Referências Bibliográficas
Atividades
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
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
#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) n3
b) (n2–n)/2
c) n
d) n(n+1)/2
e) n-1
Capítulo 2 Estruturas Básicas de Controle 59
5! = 1 x 2 x 3 x 4 x 5 = 120
Por definição, 0! = 1
Capítulo 3
Variáveis Indexadas
Unidimensionais
ÂÂ
U ma 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.
#include <stdio.h>
#include <conio.h>
fim
3.1 Estrutura
Algoritmo Linguagem C
notas notas
1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9
Índices: 1 a 10 Índices: 0 a 9
3.2 Declaração
<tipo> <identificador>[<tamanho>];
3.3 Manipulação
notas
9,5
0 1 2 3 4 5 6 7 8 9
notas
9 8.3 5.1 6 7.9 5.2 9 8 9.7 5
0 1 2 3 4 5 6 7 8 9
 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
#include <stdio.h>
#include <conio.h>
 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.
 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
Vetor v
2 4 9 12 6 98 7 35 11 42 55 1 3 64 13 5 20 8 14 24
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Vetor v modificado
24 14 8 20 5 13 64 3 1 55 42 11 35 7 98 6 12 9 4 2
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Teste-de-mesa Saída
Variáveis A = 2
Instruções B = 2
A B
5 2
A = B 2 NÃO FUNCIONOU!
B = A 2
Quadro 3.3 − Troca de conteúdo entre duas variáveis, sem usar variável auxiliar
Teste-de-mesa Saída
A = 2
Variáveis
Instruções B = 5
AUX A B
5 2
AUX = A 5
A = B 2
B = AUX 5
 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.
P 16 5 13 99 25 2 77 4 8 12 9 24 52 83 10 6 18 45 21 9
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Menor elemento = 2
Posição do menor elemento = 5
Quantidade de elementos múltiplos de 5 = 4
Figura 3.7 − Ilustração do resultado do exemplo 3.4
76 Algoritmos e Programação II
Referências Bibliográficas
Atividades
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'}.
a) primeiro elemento;
b) segundo elemento;
c) terceiro elemento;
d) quarto elemento;
vet[j] = j*j;
a) Sim b) Não
x 8 4 6 12 7 9 3 1 2 6
y 4 5 5 10 1 3 3 5 9 1
z 4 -1 1 2 6 6 0 -4 -7 5
Capítulo 4
Strings
ÂÂ
S
trings 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.
char nome[21];
nome
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
char nome[21]={'A','n','a','
','C','l','a','r','a','\0'};
nome
A n a C l a r a \0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
nome[0] = 'x';
printf("%c", nome[4]);
fgets(<variável>,<tamanho máximo da
variável>,stdin);
puts(<argumento>);
strcpy(<string_destino>,<string_origem>)
Descrição Exemplos de aplicação
Copia o 01 char nome[20];
conteúdo de strcpy(nome,"Ana Clara");
uma string 02 char str1[10]="Teste",str2[10];
para outra. strcpy(str2,str1);
strcmp(<string1>,<string2>)
Descrição Exemplos de aplicação
Compara duas 01 if(strcmp(str1,str2)==0)
strings e retorna printf("Strings iguais!");
zero quando else
estas forem printf("Strings diferentes.");
idênticas.
02 if(strcmp(senha,"xP1eR"))
printf("Acesso negado.");
strlen(<string>)
Descrição Exemplos de aplicação
Retorna o 01 char nome[35]="João Pedro";
tamanho de printf("%i",strlen(nome));
uma string. 02 char frase[50]="Conta letra a";
for(i=0;i<strlen(frase);i++){
if(frase[i]=='a')
cont++;
}
Referências Bibliográficas
Atividades
b) scanf
c) puts
d) printf
e) getche
98 Algoritmos e Programação II
6) Considerando a declaração
char frase[50];
for(i=0;i<=50;i++)
printf("%c",frase[i]);
a) Sim
b) Não
Capítulo 4 Strings 99
Exemplo
Tamanho: 4
Tamanho: 5
Total de caracteres: 9
Capítulo 5
Variáveis Indexadas
Bidimensionais
ÂÂ
N
o capítulo 3, uma variável indexada unidimensional
foi definida como um conjunto de dados ordenados e
homogêneos, armazenado de forma contínua na memória,
acessível a partir de um único nome e um índice. A única
diferença entre essa definição e a de uma variável indexada
bidimensional, diz respeito aos índices que, nesse caso, são
dois − um para representar as linhas e outro para repre-
sentar as colunas. Essas variáveis também são conhecidas
como arranjos bidimensionais, matrizes bidimensionais ou,
simplesmente, matrizes (nome que será adotado neste livro).
5.1 Estrutura
Algoritmo Lingagem C
notas notas
1 0
2 1
3 2
4 3
5 4
6 5
7 6
8 7
9 8
10 9
1 2 3 0 1 2
Índices das linhas: 1 a 10 Índices das linhas: 0 a 9
5.2 Declaração
<tipo> <identificador>[<linhas>][<colu-
nas>];
5.3 Manipulação
c 1 c=0;
c 2 c=1;
c 3 c=2;
notas
0
1 7.7 7.9 7.8
2
3
4
5
6
7
8
9
0 1 2
Figura 5.3 − Variável notas depois das instruções de atribuição, em
Linguagem C
ler(notas[3,1]) scanf("%f",¬as[2][0]);
ler(notas[3,2]) scanf("%f",¬as[2][1]);
gotoxy(10,5);
gotoxy(c*4+10,l*2+8);
ler(notas[l,c]) scanf("%f",¬as[l]
[c]);
notas
0 5.9 3.1 4.5
1 8.5 6.5 7.5
2 7.7 7.9 7.8
3 9.0 8.2 8.6
4 8.1 9.2 8.7
5 6.2 6.4 6.3
6 4.1 5.0 4.6
7 7.9 8.1 8.0
5.4 Exemplos
 Exemplo 5.1
Problema: ler uma matriz 3x4 do tipo inteiro, somar seus
elementos e apresentar o resultado.
Capítulo 5 Variáveis Indexadas Bidimensionais 109
Problema: ler uma matriz 3x4 do tipo inteiro e somar seus elementos.
Português estruturado Linguagem C
#include <stdio.h>
#include <conio.h>
 Exemplo 5.2
Problema: ler uma matriz 2x3 do tipo inteiro, encontrar e
escrever o maior elemento e sua posição na matriz.
 Exemplo 5.3
Problema: ler uma matriz 3x3 do tipo caractere, trocar os
elementos da primeira com a última linha e escrever a matriz
modificada. A Figura 5.6 ilustra um exemplo de dados de en-
trada e saída para esse problema.
0 a a a 0 c c c
1 b b b 1 b b b
2 c c c 2 a a a
0 1 2 0 1 2
 Exemplo 5.4
Problema: ler duas matrizes 2x4, criar e escrever uma ter-
ceira matriz com a soma dos elementos das duas primeiras.
Referências Bibliográficas
Atividades
b) int m[5][5]={0};
c) int mat[2][4]={{12,43},{78,10},{25,01},{29,18}};
d) char letras[3][3]={'a','b','c','d','e','f','g','h','i'};
e) char respostas[4][6]={'s'}.
int m[2][2]={{2,7},{5,8}},i=0,j=0;
printf("%05i \n",m[i++][j]);
Capítulo 5 Variáveis Indexadas Bidimensionais 119
printf("%-4i %-4i",i,++j);
a) 2, 1 e 0
b) 2, 0 e 0
c) 00002, 1 e 0
d) 00002, 1 e 1
e) 2, 0001 e 0001
for(l=0;l<2;l++)
for(c=0;c<5;c++)
m[l][5]+=m[l][c];
Capítulo 6
Estruturas
ÂÂ
A
s estruturas, também denominadas registros, são
variáveis compostas heterogêneas que permitem ar-
mazenar um conjunto de dados na memória, agrupados
sob um mesmo nome, gerando novos tipos de dados. A
estrutura serve para organizar de forma lógica um dado
cujo valor é composto por mais de uma variável como,
por exemplo, uma data que é composta por três valores,
correspondentes a dia, mês e ano.
6.1 Declaração
fim
variáveis
<variavel>: <identificador_tipo_novo>
Aluno
Matrícula: 01200
Nome: Ana Sonan
Nota 1: 7.5
Nota 2: 8.5
Média: 8.0
Figura 6.1 − Exemplo de estrutura que armazena dados de um aluno
6.2 Manipulação
gotoxy(20,7);
escrever("Nome do aluno: ")
printf("Nome do aluno: ");
ler(aluno.nome)
fflush(stdin);
fgets(aluno.nome,60,stdin);
gotoxy(20,9);
escrever("Nota 1: ") printf("Nota 1: ");
ler(aluno.g1) scanf("%f",&aluno.n1 );
0 1 ... 9
Figura 6.3 − Exemplo de um vetor de estruturas
Referências Bibliográficas
Atividades
a) Certo b) Errado
132 Algoritmos e Programação II
struct reg{
int cod,ano;
char modelo[15],cor[15],placa[9];
float preco;
};
struct reg automovel = {114,2014,"Gol","IXU
8912","preto",35000.00};
a) Certo b) Errado
Capítulo 7
Ponteiros
ÂÂ
P
onteiro é uma variável que armazena um endereço de
memória. Essa é a razão para o seu nome: ele aponta
para outra variável. Como qualquer variável em C, um
ponteiro deve ser declarado antes de ser usado. Para de-
clarar um ponteiro, basta inserir * entre o tipo e o nome
da variável. No exemplo a seguir, o ponteiro declarado irá
apontar para uma variável do tipo inteiro.
int *ptr;
valor=35;
pt=&valor;
Memória
valor
35
8711
pt
8711
9376
Figura 7.1 − Exemplo da manipulação de ponteiros
136 Algoritmos e Programação II
int x=10,y=2,z,*pt1,*pt2;
pt1=&x;
pt2=&y;
z=*pt1+*pt2;
Memória
4902 6321
pt1 z
9120 12
ptr = vet;
printf("%i", *ptr);
Referências Bibliográficas
Atividades
Está(ão) correta(s):
Capítulo 7 Ponteiros 141
a) apenas I e III
b) apenas I e II
c) apenas II e III
d) apenas a I
e) I, II e III
d) a variável pt;
a) 12 b) 8 c) 14 d) 3 e) 6
142 Algoritmos e Programação II
#include<stdio.h>
int main(void){
int n[]={2,4,6,8,10};
int *p;
p=&n[0];
p+=3;
printf(“Valor: %d”,*p);
(*p)++;
printf(“Valor: %d”,*p);
}
A saída do programa é:
a) Valor: 6 Valor: 8
b) Valor: 8 Valor: 9
c) Valor: 4 Valor: 5
d) Valor: 8 Valor: 10
e) Valor: 6 Valor: 7
#include<stdio.h>
main(){
int x[]={9,10,11,12,13};
int *p;
p=&x[2];
Capítulo 7 Ponteiros 143
p++;
printf("Valor 1: %d", *p);
(*p)+=2;
printf("Valor 2: %d \n",*p);
A saída do programa é:
a) Valor 1: 11 Valor 2: 12
b) Valor 1: 12 Valor 2: 14
c) Valor 1: 11 Valor 2: 13
d) Valor 1: 11 Valor 2: 15
e) Valor 1: 12 Valor 2: 13
Capítulo 8
Funções
ÂÂ
A
lém da função main e das diversas funções pré-defi-
nidas das bibliotecas padrões da linguagem, um pro-
grama em C pode conter funções definidas pelo próprio
programador, que só serão executadas se forem, direta ou
indiretamente, chamadas pela função principal.
main( ){ main( ){
int i, int i,v1[5]={0,0,0,0,0};
v1[5]={0,0,0,0,0};
incrementa(v1);
incrementa(v1);
for(i=0;i<5;i++)
for(i=0;i<5;i++) printf("%i ",v1[i]);
printf("%i }
",v1[i]);
}
void incrementa(int *v2){
int i;
void incrementa(int
for(i=0;i<5;i++){
v2[5]){
*v2=*v2+1;
int i;
v2++;
for(i=0;i<5;i++)
}
v2[i]++;
}
}
main( ){ main( ){
struct notas aluno; struct notas aluno;
aluno.med=8; aluno.med=8;
aluno.result='A'; aluno.result='A';
printf("Dados iniciais:"); printf("Dados iniciais:);
printf("%.1f ",aluno.med); printf("%.1f ",aluno.med);
printf("%c",aluno.result); printf("%c",aluno.result);
modifica(aluno); modifica(&aluno);
Referências Bibliográficas
Atividades
Está(ão) correta(s):
a) V V V V
b) V V F V
c) V V F F
d) F V F V
e) V V V F
a) por estrutura
b) por ponteiro
c) recursiva
d) por referência
e) por valor
a) 12
b) 8
c) 14
d) 3
e) 6
168 Algoritmos e Programação II
a) r = 2 s = 3 retorno = 5
b) r = 8 s = 3 retorno = 11
c) r = 1 s = 4 retorno = 5
d) r = 5 s = 3 retorno = 8
e) r = 5 s = 2 retorno = 7
*g = *g / ++(*k);
return *g + *k;
}
main(){
float x=9,y=2,retorno;
retorno=fcalcula(&x,&y);
printf(“%i”,retorno);
}
c) r = 3 s = 3 retorno = 6
d) r = 5 s = 3 retorno = 8
e) r = 3 s = 2 retorno = 5
Capítulo 9
Arquivos
ÂÂ
E
ste capítulo é dedicado à apresentação de um progra-
ma em linguagem C que exemplifica a manipulação de
registros e arquivos. O programa implementa um sistema
gerenciador de dados de alunos, disponibilizando as se-
guintes opções aos usuários: gravar dados, gerar listagem
de alunos, consultar dados de um aluno específico, editar
ou excluir registros de alunos.
São armazenados os seguintes dados referentes aos
alunos: código, nome, nota 1, nota 2 e média. Esses da-
dos são manipulados a partir do uso de uma struct, cria-
da entre as linhas 21 e 25 da Figura 9.1, cuja variável foi
Função: fopen
Exemplo
de aplicação: arq=fopen("cad_aluno.
txt","ab") − função incluir, linha 70 da Figura 9.3. O
Capítulo 9 Arquivos 175
Função: fclose
Função: rewind
Função: feof
Função: fread
Função: fwrite
Função: fseek
Parâmetro Descrição
SEEK_SET Posiciona a partir do início do arquivo.
SEEK_CUR Relativo à posição atual.
SEEK_END Retrocede do final do arquivo.
Referências Bibliográficas
Atividades
(2) fclose()
(3) feof ()
(4) fread()
194 Algoritmos e Programação II
(5) fwrite()
(6) fseek()
(7) rewind()
( ) Fecha arquivos.
( ) Lê dados do arquivo.
a) 6 - 7 - 3 - 5 - 2 - 4 - 1
b) 3 - 1 - 6 - 5 - 2 - 4 - 7
c) 3 - 1 - 7 - 5 - 2 - 4 - 6
d) 7 - 1 - 6 - 5 - 2 - 4 - 3
e) 3 - 1 - 5 - 6 - 2 - 4 - 7
2) A função
fopen("teste.txt","ab");
Capítulo 9 Arquivos 195
4) O operador sizeof:
a) especifica o tamanho de uma struct.
Capítulo 10
Dev-C++: instalação e
configuração
ÂÂ
P
ara atingir os objetivos de aprendizagem da disciplina
de Algoritmos e Programação II, é imprescindível que o
aluno utilize um compilador para compilar e executar os
exemplos e exercícios propostos neste livro. Apenas ler os
exemplos não basta, para aprender a programar é preciso
"colocar a mão na massa"!
Nesta disciplina, optou-se por usar o Dev-C++, que
é um ambiente de desenvolvimento integrado (IDE − Inte-
grated Development Environment), com grande potencial
Referências Bibliográficas