Buscar

Aulas algoritmos e programacao

Prévia do material em texto

Conteúdo das aulas: 
 
 
 
 
 
 
 
 
 
 
 
Algoritmos e Programação 
 
 
Prof. Leandro Brito 
 
 
 
 
Material acadêmico adaptado/melhorado de: Instituto CERTI Amazônia. 
Treinamento para Sistemas Embarcados
L
in
gu
ag
e
m
 C
 
 
 
 
Bibliografia 
 
 
 
 
• LOPES, Anita; GARCIA, Guto. Introdução à 
programação: 500 algoritmos resolvidos. Rio 
de Janeiro: Campus, 2002. 
• MANZANO, Jose Augusto N. G.; OLIVEIRA, 
Jayr Figueredo de. Algoritmos: lógica para o 
desenvolvimento de programação . 13. ed. 
São Paulo: Érica, 2002. 
• NORTON, Peter. Introdução à informática. 
São Paulo: Makron Books do Brasil, 1997. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2 
L
in
gu
ag
e
m
 C
 
 
 
 
 
 
 
 
 
• Introdução 
• Operadores e Expressões 
• Funções de E/S 
• Estruturas de Controle 
• Vetores e Matrizes 
 
 
 
 
Conteúdo da Disciplina 
L
in
gu
ag
e
m
 C
 
 
 
 
Introdução 
 
 
 
• Histórico 
 
• C é resultado de um processo iniciado com a 
linguagem BCPL. BCPL influenciou a linguagem 
de nome B, que evoluiu posteriormente para C. 
 
• Projetada em 1972, nos laboratórios da BELL 
(empresa de desenvolvimento de software 
básico), por Brian Kerninghan e Dennis Ritchie 
para o UNIX do PDP-11. 
 
• A simplicidade de sua implementação permitiu a 
extensão da linguagem e a criação de compila- 
dores C para praticamente todas as plataformas 
de hardware e sistemas operacionais. 
• Em 1983 estabeleceu-se o padrão ANSI. 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Introdução 
 
 
• Características 
 
• Portabilidade 
 
• Linguagem estruturada e modular 
 
• Geração de código eficiente 
 
• Simplicidade 
 
• Possui apenas 32 palavras chaves 
 
• Uso de biblioteca de funções que implementam 
os recursos de alto nível para o programador 
• Linguagem de médio nível 
• Combina facilidades de uma linguagem de alto nível com a 
versatilidade e potencialidade do Assembly. 
• Não efetua verificações em tempo de execução. 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Introdução 
 
 
 
 
• Aplicação 
 
– Sistemas Operacionais 
 
– Compiladores 
 
– Planilhas Eletrônicas 
 
– Editores de Texto 
 
– Banco de Dados 
 
 
 
 
 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Introdução 
 
 
• Linguagem de máquina: única linguagem que o 
computador entende, ou seja, que pode ser 
diretamente executada pelo hardware. Ela é formada 
por códigos binários que representam as instruções e 
dados. Tem uso difícil e tedioso. Pode-se dizer que, 
para se programar em linguagem de máquina é 
necessário um amplo conhecimento do hardware 
utilizado. 
• Linguagem de alto nível: conjunto de instruções 
mais compatíveis com a linguagem humana e com o 
modo do ser humano pensar. Estas linguagens, na 
sua maioria, são de uso genérico e não é necessário 
ter conhecimento do hardware utilizado. 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Introdução 
 
 
• Todo programa escrito em linguagem de alto nível é 
chamado de programa-fonte ou código fonte. 
• O programa em linguagem de máquina, escrito ou 
resultante, é chamado de programa-objeto ou 
código objeto. 
• Todo o programa-fonte, para ser executado, deve 
obrigatoriamente, de alguma forma, ser traduzido para 
programa-objeto. Neste momento é que são 
utilizados os compiladores e/ou interpretadores. 
 
 
 
 
 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Introdução 
 
 
•Interpretador: lê o código-fonte linha-a-linha, 
faz uma consistência de sua sintaxe e se não 
houver erro, converte-a para linguagem de 
máquina para executá-la. Este processo é 
realizado até que a última linha seja 
executada ou a consistência apresente algum 
erro. O interpretador precisa estar presente 
todas as vezes que vamos executar o nosso 
programa e o trabalho de checagem da 
sintaxe deverá ser repetido. 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Introdução 
 
 
 
• Compilador: lê o programa inteiro, faz uma 
consistência de sua sintaxe e se não houver erro, 
gera o código-objeto em disco com a extensão .OBJ. 
Este programa não pode ser executado até que 
sejam agregadas a ele rotinas em linguagem de 
máquina (biblioteca da linguagem) que lhe permitirão 
a sua execução. Este trabalho é feito por um 
programa chamado linkeditor, que cria o código- 
executável final em disco com a extensão .EXE. 
Neste momento não é mais necessária a presença 
do compilador, pois todo o programa já esta 
traduzido para linguagem de máquina e armazenado 
em disco, basta rodá-lo. 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Introdução 
 
 
 
 
• C é uma linguagem compilada 
 
 
 
 
 
 
Fontes C 
Executável 
 
 
 
Compilação Ligação 
 
 
 
 
 
 
+ 
Arquivos OBJ Bibliotecas 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Estrutura de um programa em C 
 
 
 
 
• Declaração das bibliotecas de funções (#include) 
• Declarações de constantes e seus valores (#define) 
• Declaração das variáveis globais (públicas) 
• Declaração das funções 
• Única função obrigatória e primeira a ser executada 
é a função main() 
• O corpo das funções fica entre { } 
 
 
main() /* função obrigatória */ 
{ 
printf(“Hello World”); 
} 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Estrutura de um programa em C 
 
 
/* declaração dos arquivos de cabeçalho e definições */ 
#include <stdio.h> 
#define PI 3.1415 
 
 
/* definição das variáveis globais */ 
 
 
 
/* função principal do programa */ 
void main() 
{ 
/* definição das variáveis locais */ 
printf (“Hello World”); 
} 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
L
in
gu
ag
e
m
 C
 
 
 
 
 
Tipos básicos de dados 
 
 
TIPO BITs BYTEs DESCRIÇÃO DOMÍNIO 
 
void 0 0 sem argumento e não retorna 
valor 
Sem valor 
 
char 8 1 caractere isolado -128 a 127 
 
int 16 2 valor inteiro -32.768 a 32.767 
 
float 32 4 número ponto-flutuante (no 
contendo um ponto decimal 
e/ou um expoente) 
3.4E-38 a 3.4E+38 
 
 
double 64 8 número ponto-flutuante de 
dupla precisão (mais 
algarismos significativos e um 
expoente que pode ter mais 
magnitude) 
1.7E-308 a 
1.7E+308 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Modificadores de tipos básicos 
 
 
 
signed cha -128 a 127 signed 
int -32.768 a 32.767 
unsigned char 0 a 255 
unsigned int 0 a 65.535 
short int = int -32.768 a 32.767 
 
unsigned short int = unsigned int a 65.535 
 
long int -2.147.483.648 a 2.147.483.647 (quatro bytes) 
 
unsigned long int a 4.294.967.295 
long float = double (padrão ANSI) 
long double dez dígitos de precisão ( 80 bits) 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Identificadores 
 
 
 
Identificadores são os nomes das variáreis, 
funções, rótulos e outros objetos definidos 
pelo usuário. 
• O primeiro caracter deve ser uma letra ou sublinhado 
• Apenas os 32 primeiros caracteres são significativos 
• É case sensitive, ou seja, maiúsculas se diferem das 
minúsculas 
• int x; /* é diferente de int X; */ 
• As instruções terminam com “;” 
• Comentários devem ficar entre /* e */ 
• Palavras-chave são minúsculas 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Declaração 
 
 
int i; 
 
float f;unsigned int inteiro_sem_sinal; 
 
char ch; 
 
double balanco, lucro, prejuizo; 
 
int i, j, k; 
 
int _exemplo_de_um_nome_longo; 
 
long int A5k; 
 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Primeiro Programa 
 
 
 
 
1. Use o IDE Dev C++ para editar, 
compilar, linkar e executar o 
programa Hello.c 
2. Qual o tamanho dos arquivos C, OBJ 
e EXE do programa Hello.c ? 
 
3. Que conclusões você tira da 
resposta da questão 2? 
 
 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
L
in
gu
ag
e
m
 C
 
 
 
 
 
Operadores 
 
 
 
• Operador de Atribuição 
• Em C o operador de atribuição é o sinal de igual “=”. 
• É erro comum em programadores iniciantes confundir 
o “=” com o operador relacional de igualdade “==”. 
• Exemplos: 
 
a = 1; 
 
delta = b * b – 4 * a * c; 
 
i = j; 
• O operando esquerdo deve ser um identificador de 
variável, isto é, não pode ser uma constante ou 
expressão. São atribuições inválidas: 
 
1 = a; // constante! 
 
b + 1 = a; // expressão! 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Conversões de tipos 
 
 
• Se os dois operandos de uma atribuição não são do 
mesmo tipo, o valor da expressão ou operador da direita 
será convertido para o tipo do identificador da esquerda. 
• Exemplo 1: 
int i; 
float r; 
i = 5; // valor de i: 5 
r = i; // valor de r: 5.0 
• Exemplo 2: 
 
int i; 
float r = 654.321; 
 
i = r; // i será truncado para 654 
 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Conversões de tipos 
 
 
 
 
• Pode-se dizer que as conversões potencialmente perigo- 
sas (onde há possibilidade de perda de informação) são: 
 
char int float double 
• Observe que o compilador C ao encontrar esta operação 
não gera nenhum aviso de atenção para o programador. 
Assim este detalhe pode gerar um erro de programação 
(bug) que passe desapercebido ao programador 
inexperiente. É possível dizer que a linguagem C possui 
tipos ”macios” (soft types) pois a operação com variáveis 
de tipos diferentes é perfeitamente possível. Esta 
característica do C se contrapõe a algumas linguagens em 
que isto não é possível. Estas linguagens possuem tipos 
“duros” (hard types). 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Operadores 
 
 
 
 
• Atribuição Múltipla 
É possível atribuir um valor a muitas variáveis em 
uma única instrução. 
 
int i, j, k; 
double max, min; 
i = j = k = 1; 
max = min = 0.0; 
• Operadores Aritméticos 
Operador Operação 
+ adição 
- subtração 
* multiplicação 
/ divisão 
% módulo (resto da divisão inteira) 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Conversão de tipo (casting) 
 
 
• O operador cast permite forçar uma expressão a 
ser de determinado tipo: 
 
int num; 
float valor = 13.0; 
num = valor % 2; // inválido 
num =(int) valor % 2; // válido 
 
 
A conversão de tipo é usada para que o dado 
armazenado em valor fosse transformado no 
tipo int assim a operação módulo pode ser 
efetuada. 
• Regra geral de conversão de tipos: 
 
char int float double 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Incremento/Decremento 
 
 
Utilizados para incrementar e/ou decrementar em uma 
unidade o valor de uma variável. Eles podem ser 
utilizados antes (prefixo) ou após (posfixo) a variável, 
dando resultados ligeiramente diferentes. 
 
Ex.: 
 
Y = X ++; “Y recebe o valor de X e depois X é incrementado” 
Y = X --; “Y recebe o valor de X e depois X é decrementado” 
Y = ++ X; “X é incrementado e depois Y recebe o valor de X” 
Y = -- X; “X é decrementado e depois Y recebe o valor de X” 
 
 
 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Operadores Relacionais 
 
 
 
 
• As expressões compostas com operadores 
relacionais comparam dois valores e 
retornam 0 em caso de expressões falsas e 
1 se forem verdadeiras. 
 
Operador Operação 
< Menor que 
> Maior que 
< = Menor que ou igual a 
> = Maior que ou igual a 
= = Igual a 
! = Diferente de 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Operadores Lógicos 
 
 
 
• Os operadores lógicos comparam duas expressões 
e retornam o valor 0 (falso) ou 1 (verdadeiro). 
Operador Operação 
 
&& AND (E) 
 
|| OR (OU) 
 
! NOT (NÃO) 
 
• O operador unário ! tem maior precedência, seguido 
do operador E lógico. O operador OU lógico tem a 
menor precedência dentre os operadores lógicos. 
 
 
 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Operadores Bit a Bit 
 
 
 
 
• Os operadores de bit só podem ser 
utilizados com valores do tipo 
caracter ou inteiro. 
Operador Operação 
<< Deslocamento à esquerda 
>> Deslocamento à direita 
 
& E bit a bit 
| OU bit a bit 
^ XOU bit a bit 
~ Não bit a bit (complemento de um) 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Operadores Bit a Bit 
 
 
 
Ex.: a = 15 0 0 0 0 1 1 1 1 
a << 1 0 0 0 1 1 1 1 0 
a >> 3 0 0 0 0 0 0 1 1 
 
 
 
Ex.: a = 15 0 0 0 0 1 1 1 1 
b = 56 0 0 1 1 1 0 0 0 
a & b 0 0 0 0 1 0 0 0 
a | b 0 0 1 1 1 1 1 1 
 
a ^ b 0 0 1 1 0 1 1 1 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Operador Condicional (Ternário) 
 
 
 
 
• O operador condicional (ou ternário) consiste de um 
ponto de interrogação (?) e um dois pontos (:) 
usados juntos e requer três operandos. 
 
V 
 
resultado = modo > 0 ? 1 : 0; 
F 
 
 
 
 
a variável resultado receberá valor 1 se modo for 
maior que 0, caso contrário receberá 0. 
 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Expressões Reduzidas 
 
 
 
 
Expressão normal Expressão reduzida 
soma = soma + cont; soma += cont; 
 
d = d – 3; d-= 3; 
 
 
y = y * (z+1); y*= z+1; 
 
 
i = i / j; i/= j; 
 
a = a & b; a &= b; 
 
 
a = a << 3; a <<= 3; 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Precedência dos Operadores 
 
 
Maior ( ) [ ] -> 
 
! ~ ++ -- - (tipo) * & sizeof 
 
* / % 
 
+ - 
 
<< >> 
 
< <= > >= 
 
== != 
 
& 
 
^ 
 
| 
 
&& 
 
|| 
 
?: 
= += -= *= /= etc. 
Menor , 
L
in
gu
ag
e
m
 C
 
 
 
 
Problemas 
 
 
 
1. Escreva quatro instruções diferentes em C, cada uma subtraindo 
1 da variável n. 
2. Escreva um bloco de código C que tem o mesmo efeito da 
instrução 
n = 100 + m++; 
sem utilizar o operador de pós-incremento 
3. Escreva um bloco de código C que tem o mesmo efeito da 
instrução 
n = 100 + ++m; 
sem utilizar o operador de pré-incremento 
4. Escreva uma instrução única em C que subtraia de z a soma de 
x e y e depois incremente y. 
5. Se m=5 e n=2, quais serão os valores de m e n após cada uma 
das expressões: 
a. m *= n++; 
b. m += --n; 
 
 
 
 
L
in
gu
ag
e
m
 C
 
L
in
gu
ag
e
m
 C
 
 
 
 
 
E/S pelo console 
 
 
 
FUNÇÃO printf(): 
 
A função printf() é utilizada para escrever na 
tela. O protótipo desta função está descrito no 
arquivo de cabeçalho <stdio.h>. 
printf("string de controle", lista de argumentos); 
A string de controle contém caracteres que 
serão exibidos na tela, comandos de 
formatação que dizem a printf() como exibir 
os argumentos restantes ou ambos. Quando 
encontra um comando de formatação, a 
funçãoliga os comandos aos argumentos. 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
E/S pelo console 
 
 
Código Significado 
 
%d Exibe um inteiro no formato decimal com 
sinal 
%uExibe um inteiro no formato decimal sem sinal 
 
%f Exibe um tipo float no formato decimal 
 
%c Exibe um caractere 
 
%s Exibe uma string 
 
%oExibe um número octal sem sinal 
 
%x Exibe um número hexadecimal sem sinal (letras 
minúsculas) 
%X Exibe um número hexadecimal sem sinal (letras 
maiúsculas) 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
E/S pelo console 
 
 
Exemplos: 
printf("%s %d", "Esta é uma string ", 100); 
exibe: 
Esta é uma string 100 
printf("esta é uma string %d", 100); 
exibe: 
esta é uma string 100 
printf("o número %d é decimal, %f é ponto flutuante.",10, 110.79); 
exibe: 
o número 10 é decimal, 110.79 é ponto flutuante. 
printf("%s", "Alô\n"); 
exibe: 
Alô 
e avança uma linha 
printf(“%c, %d”,65,”C”); 
exibe: 
A, 67 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
E/S pelo console 
 
 
 
 
FUNÇÃO scanf(): 
 
A função scanf() é utilizada para leitura de dados 
pelo teclado. O protótipo desta função está descrito 
no arquivo de cabeçalho <stdio.h>. 
scanf("string de controle", lista de argumentos); 
 
A string de controle determina como os valores são 
lidos para as variáveis apontadas na lista de 
argumentos. 
Todas as leituras devem ser finalizadas por 
<ENTER>. 
 
A lista de argumento deve conter os endereços das 
variáveis a que devem ser atribuídos os valores. 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
 
 
 
 
Exemplos: 
E/S pelo console 
#include <stdio.h> 
main(){ 
int idade; 
printf(“Digite um número: ”); 
scanf(“%d”, &idade); 
printf ("\nA minha idade é %d", idade) ; 
} 
#include <stdio.h> 
main(){ 
int pes; 
float metros; 
printf("Informe o número de pes: "); 
scanf("%d", &pes); 
 
 
metros = pes * 0.3048; 
 
 
printf("\n%d pés é %f metros", pes, metros); 
} 
L
in
gu
ag
e
m
 C
 
 
 
 
E/S pelo console 
 
 
 
 
Instruções Descrição 
 
getchar() lê um caracter do teclado aguardando 
<Enter> 
getche() lê um caracter do teclado e prossegue 
getch() lê um caracter sem eco na tela e 
prossegue 
 
putchar() escreve um caracter na tela 
gets() lê uma string do teclado 
puts() escreve uma string na tela 
 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
E/S pelo console 
 
 
Exemplos: 
#include <stdio.h> 
main(){ char 
ch; 
ch=getchar(); 
putchar(ch); 
} 
Comando printf() Resultado 
(“%-5.2f”, 123.234) 123.23 
(“%5.2f”, 3.234) 3.23 
(“%10s”, “alo”) alo 
(“%-10s”, “alo”) alo 
(“%5.7s”, “123456789”) 1234567 
(“%04d”, 21) 0021 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Exercícios 
 
 
 
1. Utilize o operador sizeof para exibir quanto 
espaço em bytes ocupa cada um dos tipos básicos 
de C (char, int, float e double). 
 
2. Leia uma temperatura em graus Centígrados e 
apresentá-la convertida em graus Fahrenheit. A 
fórmula de conversão é: F = (9 * C + 160) / 5. Exiba 
o resultado com 3 casas decimais. 
3. Faça um programa que leia um caractere e exiba 
seu código ASCII equivalente. 
 
4. Leia e exiba uma string com seu nome completo 
usando a função scanf(). Qual o resultado obtido? 
Justifique. 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
L
in
gu
ag
e
m
 C
 
 
 
 
 
 
 
Estruturas de Controle 
 
 
 
• Governam o fluxo de execução do 
programa. Se dividem em três 
categorias: 
– Desvios Condicionais: if, operador 
ternário (?:) e switch. 
– Loop: while(), do-while(), for() e os 
comandos continue e break. 
– Desvio Incondicional: goto. 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
 
if 
 
 
Sintaxe: if (expressão) comando; 
 
else comando; 
 
 
 
 
onde, comando poder ser um único, um bloco de 
comandos e, neste caso, usa-se os delimitadores 
de bloco de comandos ( { } ) ou nenhum comando. 
A cláusula else é opcional. 
 
V 
if (expressão) 
comando; 
F 
else comando; 
próximo comando; 
L
in
gu
ag
e
m
 C
 
 
 
 
if 
 
 
Exemplo: 
 
 
 
main() 
 
{ 
 
int a, b; 
 
printf(“Digite dois números”); 
 
scanf(“%d,%d”,&a,&b); 
 
if (b) printf(“%f\n”,(float)a/b); 
 
else printf(“divisão por zero\n”); 
 
} 
 
 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
if aninhados 
 
 
 
 
Ocorre quando um comando if é um objeto de um 
outro if ou else. 
 
Sintaxe exemplo: 
 
if ( i ) 
 
{ 
 
if ( k ) comando1; 
if ( j ) comando2; 
else comando3; 
} 
 
else comando4; 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
 
 
 
 
Sintaxe exemplo: 
if – else - if 
 
if (expressão) comando; 
 
else if (expressão) comando; 
 
else if (expressão) comando; 
 
else if (expressão) comando; 
 
else comando; 
 
Neste caso, as expressões são avaliadas de cima para 
baixo. Assim que uma expressão for diferente de zero 
(verdadeira), o comando associado a ela é executado e a 
estrutura encerrada. Se nenhuma expressão for verdadeira, 
será executado o comando associado ao último else e, se 
ele não for declarado, nenhum comando será executado. 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
if – else - if 
 
 
 
main(){ 
 
int magico, adivinhacao; 
 
randomize(); 
 
magico= random(10); 
printf(“ADIVINHE: ”); 
scanf(“%d”,&adivinhacao); 
if (adivinhacao == magico){ 
 
printf(“ACERTOU”); 
 
printf(“%d é o número mágico\n”, magico); 
} else if (adivinhacao > magico) 
printf(“—errado– muito alto\n’); 
else (“—errado– muito baixo\n’);} 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Operador Ternário 
 
 
 
 
 
main(){ 
 
int x = 3, y = 7, max; 
max = (x>y)?1:0; 
printf(“max = %d\n”,max); 
} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
switch 
 
 
O comando de seleção switch é utilizado em caso de seleção múltipla. Ele 
testa o valor de uma expressão contra uma lista de constantes inteiras ou 
caracter. Quando o valor é igual, os comandos associados àquela 
constante são executados. Se nenhuma coincidência for encontrada os 
comandos de default são executados. 
 
 
switch(expressão) 
{ 
case constante1: 
comandos; 
break; 
case constante2: 
comandos; 
break; 
. default: 
comandos; 
} 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
switch 
 
 
O comando break causa a saída imediata do switch. Se não existir um 
comando break seguindo os comandos de um case, o programa segue 
executando os comandos dos cases abaixo. Exemplo: 
void main() { 
int dia; 
clrscr(); 
printf(“Digite um dia da semana: “); 
scanf(“%d”,&dia); 
switch(dia) { 
case 1: printf(“\nDomingo\n”); 
break; 
case 2: printf(“\nSegunda\n”); 
break; 
. 
case 7: printf(“\nSábado\n”); 
break; 
default: printf(“\nNúmero inválido!!!\n”); 
}} 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Comandos de repetição 
 
 
 
 
O comando de repetição é utilizado nos casos 
em que queremos repetir determinados 
comandos. 
 
 
 
Laço for 
Sintaxe: 
for(inicialização;condição;incremento) comando; 
ou 
for(inicialização;condição;incremento) 
{ 
comandos; 
} 
 
L
in
gu
ag
e
m
 C
 
 
 
 
for 
 
 
 
 
Inicialização:é geralmente uma atribuição 
que determina o valor inicial da variável de 
controle. Esta declaração pode ser feita 
antes do laço e, desta forma, não necessita 
ser declarada no escopo do comando. 
 
Condição: é uma expressão que determina o 
final do laço ou o valor final da variável de 
controle. 
 
Incremento: define como a variável de 
controle do laço varia cada vez que o laço é 
repetido. 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
 
 
 
 
Exemplo: 
int x; 
for 
for(x=1;x<=100;x++) printf(“%d”,x); 
for(x=100;x!=65;x-=5) { 
z=x*x; 
printf(“o quadrado de %d é %f”,x,z); 
} 
O laço infinito: 
for( ; ; ) printf(“este laço é infinito\n”); 
 
 
ch=”\0”; 
for( ; ; ){ 
ch=getchar(); 
if (ch==”A”) break; o comando break causa 
o término imediato do laço 
} 
printf(“Você digitou A”); 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
while 
 
 
 
 
Sintaxe: while(condição) comando; 
ou 
while(condição) 
{ 
comandos; 
} 
 
A condição pode ser qualquer expressão, e 
verdadeiro é qualquer valor não-zero. Quando a 
condição é falsa, o controle do programa passa para 
o primeiro comando após o bloco de código do 
comando while. 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
while 
 
Exemplo: 
void main(){ 
int t=1, dia; 
while(t) { 
printf(“Digite um dia da semana, ou <99> para encerrar: 
“); 
scanf(“%d”,&dia); 
switch(dia) { 
case 1: printf(“\nDomingo\n”); 
break; 
. 
case 7: printf(“\nSábado\n”); 
break; 
case 99: printf(“\nEncerrando\n”); 
t=0; 
break; 
default: printf(“\nNúmero inválido!!!\n”); 
} /* fim switch*/ 
} /* fim while */ 
} /* fim main() */ 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
do-while 
 
 
 
 
Ao contrário dos laços for e while, que testam as 
condições no início, o do-while testa a condição no 
final. Este laço sempre será executado pelo menos uma 
vez e repete até que a condição se torne falsa. 
Sintaxe: do 
{ 
comando 
} while (condição); 
Exemplo: 
do 
{ 
 
 
 
 
 
 
 
 
scanf(“%d”,&num); 
}while(num!=99); 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Comandos de desvio 
 
 
 
 
São utilizados para realizar desvios dentro de um 
programa. 
• break: 
 
O comando break tem duas finalidades. A primeira é 
de terminar um case num comando switch e a 
segunda é de forçar o término imediato de um laço 
de repetição. 
 
Exemplo: 
for(t=0;t<100;t++){ 
print(“%d \n”,t); 
if(t==10) break; } 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Comandos de desvio 
 
 
 
 
 
• continue: 
 
Força a repetição (retorna ao início do laço 
e testa a condição). 
 
 
Exemplo: 
for(x=0;x<100;x++){ 
if (x%2) continue; 
print(“%d \n”,x); 
 
} 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Comandos de desvio 
 
 
 
• goto: 
 
Apesar das linguagens possuírem estruturas de 
controle eficientes, também é disponibilizado o 
comando de desvio. Deve-se ter um cuidado muito 
grande, pois a sua utilização em demasia ou de forma 
incorreta tende a tornar os programas ilegíveis. 
A sua utilização é simples, basta declarar um rótulo 
(identificador aceito pela linguagem C seguido de dois 
pontos) e, de algum ponto do programa estabelecer o 
desvio através da declaração goto rótulo; 
Sintaxe: goto rótulo; 
 
 
 
rótulo: 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Comandos de desvio 
 
 
 
 
Exemplo: 
int x=1; 
retorno: 
printf(“%d”,x); 
 
x++; 
 
if(x<=100) goto retorno; 
 
 
 
 
 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Comandos de desvio 
 
 
 
 
• exit(): 
 
Assim como o comando break força o término de um 
laço, a função exit() força o término de execução de 
um programa, retornando ao sistema operacional. 
Sintaxe: 
void exit(código_de_erro); 
 
onde código_de_erro é utilizado para indicar o 
estado de retorno. Quando for zero, indica término 
normal de execução e outros valores são utilizados 
para indicar algum tipo de erro (retornado para a 
variável ERRORLEVEL em arquivos “batch” do 
DOS). 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Lista de Exercícios 
 
 
 
 
1. Anacleto tem 1,50 metro e cresce 2 centímetros por 
ano, enquanto Felisberto tem 1,10 metro e cresce 3 
centímetros por ano. Calcule e exiba quantos anos 
serão necessários para que Felisberto seja maior 
que Anacleto. 
 
2. Imprima os números perfeitos menores de 100. 
 
Nota: Número perfeito é aquele cuja soma de seus 
divisores, exceto ele próprio, é igual ao número. 
Exemplo: 6 é perfeito porque 1 + 2 + 3 = 6. 
 
3. Calcule e apresente o valor de S no seguinte 
somatório: 
S = 1/225 – 2/196 + 4/169 – 8/144 + ... + 16384/1 
 
 
 
L
in
gu
ag
e
m
 C
 
L
in
gu
ag
e
m
 C
 
 
 
 
 
 
 
Vetor 
 
 
 
• Um vetor é uma matriz de uma dimensão 
capaz de armazenar um conjunto de variáveis 
de mesmo tipo, referenciadas pelo seu nome e 
por um índice. 
 
• Sintaxe: tipo nome[tamanho]; 
 
• As variáveis são alocadas seqüencialmente 
na memória. 
 
• tamanho representa o número de elementos 
suportado pelo vetor. 
 
• O índice do vetor varia de 0 a (tamanho-1). 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Vetor 
 
 
Exemplo: 
 
 
main(){ 
 
int notas[5], i, soma=0; 
 
for (i=0; i<5 ; i++) { 
printf(“Digite a nota %d:”,i); 
scanf(“%d”,&notas[i]); } 
for (i=0; i<5 ; i++) soma = soma + notas[i]; 
 
printf(“Media = %f”, (float) soma/5); 
 
} 
 
Vetor notas 10 5 0 7 2 
 
índices 0 1 2 3 4 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Verificação de Limites 
 
 
• A linguagem C não faz verificação automática dos 
limites dos vetores. 
 
• O teste dos limites deve ser realizado pelo programa 
e é erro comum de programação: 
 
 
main() 
{ 
 
int a[10],i; 
 
for (i=1;i<=10;i++) 
 
scanf(“%d”,&a[i]); 
 
} 
 
 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
 
Exercícios 
 
 
 
 
1. Leia dois vetores A e B com 5 elementos inteiros 
cada, calcule e escreva: 
– O vetor S = A + B; 
– O vetor W com os elementos intercalados de A e 
B; 
– O vetor Z obtido pela inversão da ordem de A; 
– O vetor Q com os elementos comuns de A e B; 
– O vetor Y correspondente à união de A e B; 
– Coloque A em ordem crescente de seus 
elementos. 
 
 
 
 
 
 
 
L
in
gu
ag
e
m
 C
 
 
 
Conteúdo das aulas: 
 
 
 
 
 
 
 
 
 
 
 
Algoritmos e Programação 
 
 
Prof. Leandro Brito 
 
 
 
Material acadêmico adaptado/melhorado de: Instituto CERTI Amazônia. 
Treinamento para Sistemas Embarcados

Continue navegando