Вы находитесь на странице: 1из 97

Unigranrio

Escola de Cincia e Tecnologia

Fundamentos de
Programao II
(

Prof Ana Lusa Duboc


alduboc@unigranrio.edu.br

Ementa do Curso
Implementar programas na linguagem C utilizandose dos seguintes recursos:
Variveis, operadores e estruturas de controle (aprendidos
em Fundamentos de Programao I)
Vetores
Matrizes
Strings
Ponteiros
Funes
Arquivos

Ambiente de Programao
ECLIPSE

Eclipse
http://www.eclipse.org/downloads/
Buscar por Eclipse IDE for C/C++ Developers
Eclipse Mars (4.5) a verso mais nova.
Faa o download da verso que desejar e instale em
c:\bin\eclipse.
Crie um atalho na rea de Trabalho apontando para
c:\bin\eclipse\eclipse.exe.
Para verificar se as configuraes esto corretas, basta
executar o Eclipse.

Eclipse
Caso j tenha o Eclipse instalado em sua mquina mas no
tenha o plugin de C/C++ instalado, faa:
V em Help, Install New Software
Escolha no Combo "Work With" o update site de sua
verso de eclipse:
http://download.eclipse.org/releases/Mars

Marque o checkbox Programming Languages, C/C++


Development Tools.

Clique em Next, Next, concorde com os termos e clique


em Finish.

Compilador C / C++
Aps o download do Eclipse necessrio
instalar algum compilador de C e ou C++.
Windows: http://sourceforge.net/projects/mingww64/
Linux: $sudo apt-get install g++ gcc

Variveis de Ambiente
Para que o Sistema Operacional consiga acessar os
compiladores instalados pelo MinGW (se esse for o
compilador escolhido), preciso definir o caminho da pasta
que contm os binrios dos compiladores na varivel de
ambiente PATH.
Ir em [Painel de Controle], cone [Sistema], guia
[Avanado], boto [Variveis de Ambiente].
Para as configuraes possam valer para qualquer usurio
do computador, trabalhe com o painel [Variveis do
Sistema].
Procure a varivel PATH e a selecione. Clique no boto
[Editar].
No valor da varivel, acrescente o seguinte contedo:
;C:\MinGW\bin (se voc no modificou o caminho
padro na instalao).

Introduo ao Eclipse
Ambiente extensvel, portvel e aberto que permite a integrao de
vrias ferramentas de desenvolvimento (no somente codificao!).
Plug-in: Mdulos que permitem a extenso das funcionalidades do Eclipse
Perspectiva : Conjunto de vises e editores organizados para apoiar um
certo tipo de atividade.
Principais perspectivas: C/C++, Java, Debug, Resources, CVS (Sistema
de Controle de Verses).
Ao instalar novos plug-ins, novas perspectivas podem ficar
disponveis.
Workspace: Pasta que contm um ou mais projetos
Projeto: Pasta dentro do workspace que representa um programa ou um
mdulo. Pode conter cdigo e outros recursos.

Primeiro Exemplo Projeto no Eclipse


Crie um workspace em seu computador e abra o eclipse para
este workspace.
Habilite a perspectiva C/C++.
Criando um projeto:
[File][New][Project] e no assistente marcar [C Project] e
[Next]
Project Name: ProjetoC
Project Type: Empty Project
ToolChains: MinGW GCC
Clique em [Finish]

Primeiro Exemplo Projeto no Eclipse

Primeiro Exemplo Projeto no Eclipse


Criando um programa em C:

Crie uma pasta de cdigo fonte clicando com o boto direito sobre o projeto
e acessando [New] [Source Folder] .
Folder Name: src

Agora, crie um arquivo fonte chamado main.c clicando com o boto direito
do mouse sobre a pasta src e selecionando [New] [Source File]. No
esqueam de colocar a extenso na definio do nome do arquivo.

Escreva o cdigo abaixo e salve:

Primeiro Exemplo Projeto no Eclipse


Executando um programa em C:

Primeiramente compile o seu programa clicando no cone do martelo:

A seguir, clique no cone abaixo para executar:

A entrada/sada da execuo se d atravs da [View][Console]

Reviso de Fundamentos de
Programao I

Algoritmos

Formas de Expresso de um Algoritmo


Linguagem natural: clculo do zero da equao
ax+b=0
1. Incio de programa
2. ler a, b
3. se a diferente de 0 ento
calcula o valor de x (ax+b=0)
imprimir valor de x
seno
imprimir No h zero
4. Fim de programa

Formas de Expresso de um Algoritmo


Linguagem de Programao C: clculo do zero
da equao ax+b=0

Estrutura Bsica de Programa C


#include <stdio.h>
definio de constantes e declarao de variveis
funes
int main()
{
declarao de variveis
....
sentenas
....
}

Sintaxe
Incio do programa -> main()

Identificadores

-> utilizados para referenciar


variveis, funes e outros objetos

Declaraes
programa,
identificador

Tipos

->

expressam partes
podendo dar significado

de
a

um
um

-> definem as propriedades dos dados

(atributos)

Funes -> especificam


programa (mtodos)

as

aes

de

um

Exemplo de Programa Simples


Comando para
pr-processador

Definies de bibliotecas
de entrada e sada

#include <stdio.h>
Funo main
retorna um
inteiro
Incio de
bloco
Final de
bloco

Nome da
funo main

int main()
Definio de
uma funo
{
printf(Bem-vindo ao C!!!\n");
return 0;
}
Chamada
Parmetro
para printf

Termina a funo
main e retorna
valor 0

funo printf

Identificadores
Primeiro caractere -> uma letra ou sublinhado.
Caracteres subsequentes -> letras, nmeros ou
sublinhados.
Exemplos:
Correto
test23
_num
nome

Incorreto
1count
hi!here
teste...1

Case sensitive
-> maisculas se diferem de
minsculas . (count, Count e COUNT so diferentes)
As instrues terminam com ;.

Variveis
Espao na memria do computador para
armazenar um determinado tipo de dado;
Todas as variveis devem ser declaradas;
Associao a um determinado tipo de
dados;
Declarao -> definio de valor inicial.
tipo

lista_de_variaveis;

Tipos de Dados Bsicos


Caracteres: char (1 byte)
char letra = a;
Numricos:
Inteiros: int (2 bytes)
longos: long (4 bytes)
curtos: short (2 bytes)
no-negativos: unsigned (int, long, short, char) aumenta
a faixa de representao. O inteiro com sinal que vai de 32768 a 32768, passa a ir de 0 a 65535.
Ponto Flutuante:
- simples: float (6 dgitos de preciso) (4 bytes)
- duplo: double (12 dgitos de preciso) (8 bytes)

Exemplos de tipos numricos:


int a;

float x;

double y;

int b = 0;

unsigned int m = 100;


long N = 1000000;
short rodas = 4;
double pi_aprox = 3.14;
float e_aprox1 = 2.7;
double c_aprox = 3e8;
unsigned long degrau = 1;

Declarao de Variveis
Neste exemplo, as declaraes:
char ch, letra;
long count;
float pi;
declaram duas variveis do tipo char (ch e letra),
uma variavel long int (count) e um float. pi.

Declarao de Variveis
As variveis so declaradas em trs lugares:
Fora de todas as funes -> variveis globais
Na definio dos parmetros das funes
Dentro de uma funo -> variveis locais

Declarao de Variveis
Exemplo:
#include <stdio.h>
int contador;
int func1(int j)
{ ...
}
int main()
{
char condicao; int i;
for (i=0; ...)
{
/* Bloco do for */
float f2;
...
func1(i);}
...
return 0;
}

Global
Definio de Parmetro de funo

Local

Declarao de Variveis
Variveis Locais
S podem ser referenciadas por comandos que
esto dentro do bloco no qual as variveis foram
declaradas.
Estas variveis existem apenas enquanto o bloco
de cdigo em que foram declaradas est sendo
executado.
Void func1(void){
int x;
x=10;
}

void func2(void){
int x;
x=-199;
}

A varivel x em func1() no tem nenhuma relao


com a varivel x em func2().

Declarao de Variveis
Parmetros Formais
So variveis que recebero
argumentos de uma funo.

os

valores

dos

Essas variveis se comportam como qualquer


outra varivel local dentro da funo.
O tipo de varivel dos parmetros formais devem
ser informados e deve-se lembrar desses tipos ao
chamar a funo em outras partes do programa.

Declarao de Variveis
Variveis Globais
So reconhecidas pelo programa inteiro e podem
ser utilizadas por qualquer pedao de cdigo.
Armazenam seus valores durante toda a execuo
do programa.
Para serem reconhecidas como globais devem ser
declaradas fora de qualquer funo.
So teis quando o mesmo dado utilizado em
muitas funes do programa.
Deve-se evitar
utiliz-las desnecessariamente, j que ocupam
memria durante todo o tempo de execuo do
programa.

Declarao de Variveis
Variveis Globais
Exemplo:

Como temos uma varivel global


e local com o mesmo nome
ento todas as referncias ao
nome da varivel dentro do bloco
em que a varivel local foi
declarada dizem respeito
varivel local e no produz
nenhum efeito sobre a varivel
global.

#include <stdio.h>
int count; /* count global */
void func1(void){
int temp;
temp=count;
func2();
printf(Count %d, count); /* imprimir 100 */
}
void func2(){
int count;
for(count=1; count<10; count++)
printf(.);
}
void main(void){
count = 100;
func1();
}

Constantes
O valor permanece o mesmo durante toda a execuo
Definio por duas formas:
Comando
#define do pr-processador
Palavra-chave
const na declarao

Constantes
Exemplo:
#define PI 3.1416
const float pi = 3.1416;
int main()
{
double r = 2.5;
double area1, area2;
area1 = PI * r * r;
area2 = pi * r * r;
return 0;
}

Operadores
Operador de Atribuio
Forma geral:
nome_da_variavel = expresso
Atribuio Mltipla
x = y = z= 0;
Operadores Aritmticos
Operador
+
*
/
%
--

Ao
Subtrao, menos unrio
Adio
Multiplicao
Diviso
Mdulo da Diviso (resto)
Decremento

O menos unrio multiplica seu nico operando por -1.


No h operadores de potenciao.

Operadores
Operadores Aritmticos
Incremento e Decremento
x= x+1 o mesmo que x++; ou ++x;
x = x-1 o mesmo que x--;
Porm,
x= 10;
y = ++x;

ento y = 11

Mas, se y= x++ ento y = 10.


Em ambos os casos, x recebe 11. A diferena est em quando
isso acontece.

Operadores
- Incremento e Decremento
Quando numa expresso, o operador ps-fixado indica
que a varivel ser incrementada ao final da expresso.
m = 1;
c= 2 * m++; // c = 2, m=2
m = 1;
m = 2 * m++; // m = 3
O pr-fixado sempre feito antes da expresso.

Operadores
Operadores Aritmticos
Incremento e Decremento
int n = 0, m = 0, a, b, c, d;
n++;
/* n = 1 */
++m;
/* m = 1 */
n--; --n;
/* n = -1 */
a = n++;
/* a = -1; n = 0 */
b = ++m;
/* b = 2; m = 2 */
c = 2*(m++); /* c = 4; m = 3 */
d = 3*(++n); /* d = 3; n = 1 */

Operadores
Operadores Aritmticos
Exemplos:
int n = 10, d = 7;
double x, y=10, z;/* declaraes do mesmo tipo */
int i, j, k;
i = 25;
/* atribuio */
j=d+i;
/* j = 32 */
k=i/n;
/* k = 2 (diviso inteira) */
i = n % d;
/* i = 3 (resto)*/
z = x / y;
/* z = 2.5 */
j = z + y;
/* j = 12 (converso) */

Operadores
Operadores Aritmticos
Precedncia das operaes

Mais alta

++ -- (menos unrio)
*/%
Mais baixa + Operadores do mesmo nvel de precedncia so avaliados
pelo compilador da esquerda para a direita. Porm,
parnteses podem ser utilizados para alterar a ordem de
avaliao.
Parnteses foram uma operao, ou um conjunto de
operaes a ter um nvel de precedncia maior.

Exemplos de Precedncia
a = b + c;

/* atribuio < soma */

d = (a + b) * c;

/* determinada por parntesis */

e = a + b * c;

/* multiplicao > soma */

f = a + b c;

/* esquerda para direita*/

g = f/e*g;

/* (f/e)*g - esquerda para direita*/

f = a + b * c d / e;

/* (a + (b*c)) (d/e) */

Operadores
Operadores Aritmticos
Atribuio e Operao
Operao combinada com atribuio em um mesmo
operador
+=, -=, *=, /=, %=, entre outros

a += b;
/* a = a + b */
c -= b*a; /* c = c (b*a) */
d *= a - b; /* d = d * (a - b) */

Operadores
Operadores Relacionais e Lgicos
Operador
>
<
>=
<=
==
!=

Ao
Maior que
Menor que
Maior ou igual a
Menor ou igual a
Igual a
Diferente de

Retorna verdadeiro se ambas as partes da


expresso lgica forem verdadeiras.
Basta que uma parte da expresso lgica seja
VERDADEIRA para retornar VERDADEIRO.
Inverte o estado de uma expresso lgica, ou
!
seja, de VERDADEIRO passa para FALSO e
(NOT) vice-versa.

&&
(AND)
||
(OR)

Operadores
Operadores Relacionais e Lgicos
Exemplo de utilizao:
if (x >= 0 && x < 5)
printf("dentro \n");
else
if (x < 0)
printf("muito pequeno \n");
else
printf("muito grande \n");

Operadores
Operadores Relacionais e Lgicos
Precedncia dos Operadores

Maior

Menor

!
> >= < <=
== !=
&&
||

Assim como no caso das expresses aritmticas,


possvel utilizar parnteses para alterar a ordem
natural de avaliao de uma expresso relacional
e/ou lgica.

ENTRADA E SADA DE
DADOS

Impresso de Valores
Funo printf -> insero de comandos que indiquem os
tipos dos valores e o formato da impresso.
Formato geral: printf(expresso de controle,arg1,arg2);
Baixar
esta verso
Arg: pode ser varivel, const, expresses, chamadas
de
funes,...

Principais cdigos de formato de impresso


%d -> varivel inteira com sinal
%u inteiro sem sinal
%f -> varivel ponto flutuante
%e -> ponto flutuante em notao cientfica
%c -> caractere
%s -> String de caracteres
%p -> Apresenta um ponteiro

Impresso de Valores
#include <stdio.h>
int main()
{
int a=1;
a++;
printf("Valor de a: %d,a);
return 0;
}

Preciso e tamanho
No caso geral temos:
%[-] [tamanho] [.precisao] { tipos de dados}
printf("123456789012345678901234567890\n");
printf("%10s%10c%10s\n", "Ano", ' ', "Valor");
printf("%9d%11c%10d\n", 1, ' ', 1000);
printf("%9d%11c%10d\n", 2, ' ', 2560);
printf("%9d%11c%10d\n", 3, ' ', 6553);

Preciso e tamanho
No caso em que o numero real, o parmetro de preciso define
com quantas casas decimais o nmero deve ser escrito:

Leitura de Valores
Utiliza-se freqentemente a funo scanf.
Insero de tipos de valores e formato.
scanf(expresso de controle, end1, end2,...);

} Especificadores de Formato:

%d
%f
%c
%s

inteiros
ponto flutuante
caractere
string

As variveis de leitura devem ser precedidas pelo operador


& na chamada funo scanf, pois representam endereos.
O especificador %s l caracteres at que seja encontrado
um espao em branco. Logo, a string isto um teste no
pode ser lida pelo mesmo. Na leitura de variveis desse tipo,
no usa-se & antes do nome da varivel.

Leitura de Valores
Exemplo:
int main() {
setbuf(stdout, NULL);
int a;
int b;
} int soma;
printf(Digite dois nmeros:\n);
scanf("%d %d", &a, &b);
soma = a + b;
printf("Soma = %d\n", soma);
return 0;
}
Os nmeros podem ser separados por um ou mais espaos
em branco,tabs, ou enters . O primeiro nmero lido
atribudo varivel a, e o segundo varivel b.

Leitura de Valores
Observe o comando setbuf(stdout, NULL) no incio do
programa.
Este comando necessrio para que o programa em C
funcione corretamente no Eclipse.

} Este comando responsvel por desabilitar o buffer de


sada.

Outra opo colocar o comando fflush(stdout) depois de


cada printf.

Exemplo de Leitura de Valores


#include <stdio.h>
int main()
{
int idade, matr;
}
char sexo;

setbuf(stdout, NULL);

printf(Matrcula: );
scanf(%d,&matr);
printf(Idade: );
scanf(%d,&idade);
printf(Sexo: (f ou m));
scanf(%c,&sexo);
printf(Matrcula: %d\n,matr);
printf(Idade: %d\n,idade);
printf(Sexo %c,sexo);
return 0;

Bibliotecas do C
stdio.h - funes padronizadas de entrada e sada.
fclose fgetc fgets fopen fprintf fputc
fputs fread fseek fwrite printf scanf sprintf

}
string.h - operaes com strings.
strcat strcmp strcpy strdup strlen strstr
math.h - trigonometria e exponenciao.
cos exp fabs log pow sin sqrt tan
time.h gerenciamento de data e hora.
ctime gmtime mktime

Exemplos de Funes Matemticas


Funes matemticas de math.h
}

Trigonomtricas
sin, cos, tan, asin, acos, atan, atan2
Relacionadas a exponenciao

exp, pow, sqrt, log, log10, sinh, cosh, tanh

Exemplos de Funes Matemticas


#include <stdio.h>
#include <math.h>
} int main()
{
float x = 10.0, y = 2.0, z;
z = sqrt(pow(y,y)*pow(x,y));
printf(O valor de z : %f,z);
}

return 0;

Exerccios
1) Faa um programa que leia a base e altura de um
tringulo
e
calcule
a
rea
do
mesmo.
2) Faa um programa que efetue o clculo do salrio lquido
de um professor. Os dados fornecidos sero: valor da
hora/aula, nmero de aulas dadas no ms e percentual de
desconto do INSS.

ESTRUTURAS DE CONTROLE

Estruturas de Controle
Controlam
programa;

fluxo

de

execuo

Duas categorias principais:


Seleo
If, operador ternrio, switch.
Iterao
While, do-while, for.

do

Seleo
If/else atravs dessa estrutura, os
comandos
podem
ser
executados
condicionalmente.
Se a condio for verdadeira ento o comando
ou bloco de comandos executado.
Em C, verdadeiro qualquer valor diferente de
0 (zero).
Um bloco de comandos a serem executados
ficam delimitados entre { }
Cada comando termina com ;

Seleo
Exemplo:
Condio
Parntesis so
necessrios

Comando a executar
se condio for
verdadeira

if (saldo > 0)
printf("credor");
else
printf("devedor");

Comando a executar
se condio for falsa

Seleo
Exemplo:
#include <stdio.h>
int main(){
int a,b;
float div;

setbuf(stdout, NULL);
printf("Digite dois numeros: ");
scanf("%d %d",&a, &b);
if (b) { //testa apenas o valor de b
div = (float)a/b;
printf("A diviso d: %f\n", div);}
else printf("diviso por 0 no permitida\n");
return 0;
}

Blocos
Utilizados para execuo de uma sequncia de
comandos.

Delimitadores: { e }
Exemplo:
if (saldo > 0) {
total_credores += saldo;
printf("credor=%d \n,total_credores);
} //no tem ;
else {
total_devedores += saldo;
printf("devedor=%d \n,total_devedores);
} //no tem ;

Condicional if/else
Pode-se utilizar o comando if sem usar o
else correspondente.
Neste caso, se a condio for falsa, nada
ser executado.
Exemplo:
if (x<0)
x= -x;

Escada if-else-if
Forma Geral:
if (expresso) comando;
else
if (expresso) comando;
else
if (expresso) comando;

else comando;

Se no tiver o else,
nenhuma ao
ocorre se todas as
condies forem
falsas.

Se a expresso for
verdadeira, executa
comando e desvia
do resto da escada.

Se nenhuma
condio for
verdadeira, esse
else executado

Escada if-else-if
Geralmente recuada da forma:
if (expresso)
comando;
else if (expresso)
Comando;
else if (expresso)
Comando;

else
comando;

Exemplo Escada if-else-if


#include <stdio.h>
Cuidado para no
int main(){
usar o = de
int magic;
atribuio
int guess;
setbuf(stdout, NULL);
magic = rand();
printf("Adivinhe o nmero mgico: ");
scanf("%d",&guess);
if (guess == magic) {
printf("Certo\n");
printf("%d o nmero mgico\n",magic);
}
else if (guess > magic)
printf("Errado, muito alto\n");
else printf("Errado, muito baixo\n");
return 0;
}

Operador Ternrio
Modo compacto de expressar if/else.
condio ? expresso1 : expresso2
Exemplo:
max = (a>b) ? 1 : 0
max receber 1 se (a>b) for verdadeiro e
receber 0 se (a>b) for falso.

Exemplo
int main()
{
int x,y,max;

setbuf(stdout, NULL);
printf("Entre com dois nmeros: ");
scanf(%d %d \n,&x,&y);
max=(x > y)?1:0;
printf("max = %d \n",max);
return 0;
}

EXERCCIOS
1. Construa um programa em C que leia um nmero e
imprima se o nmero mltiplo de 3 ou no.
2. Faa um programa em C que leia a idade de uma pessoa
e informe se a mesma:
Est entre 18 e 65;
menor de idade; ou
maior de 65 anos.

Switch
Comando
de
seleo
mltipla
que
testa
sucessivamente o valor de uma expresso sobre
uma lista de constantes inteiras ou de caracteres;
Caso haja uma coincidncia entre a expresso e
um valor, a sequncia de comandos associada
quele case ser executada.
Caso contrrio, o comando default executado.

O comando switch frequentemente utilizado para


processar uma entrada via teclado, como em uma
seleo por menu.

Switch
Sintaxe:

Seqncia de comandos executada


at que o comando break
seja encontrado.

switch (varivel) {
case constante 1:
seqncia de comandos
break;
case constante 2:
seqncia de comandos
break;
opcional .
.
.
default:
seqncia de comandos
}

Switch
Exemplo:
int main()
{
char x;
Se no tivesse o break e
setbuf(stdout, NULL);
fosse digitado o '1',
printf("1. incluso\n");
imprimiria a frase do
printf("2. alterao\n");
segundo case tambm.
printf("3. excluso\n");
printf(" Digite sua opo:");
scanf("%c",&x);
switch(x) {
case '1': printf ("escolheu incluso \n");
break;
case '2': printf ("escolheu alterao \n");
break;
case '3': printf ("escolheu excluso \n");
break;
default: printf("opo invlida\n");
}
return 0;
}

Posso ter cases sem comandos associados.


int main()
{
int x;
setbuf(stdout, NULL);
printf(" Digite um numero:");
scanf("%d",&x);
switch(x) {
case 1:
case 2:
case 3: printf("teste");
break;
}
return 0;
}
- Se o x for 1,2 ou 3, vai fazer o que est no case 3.

Voc pode ter um switch como parte da sequncia


de comandos de outro switch. Mesmo se as
constantes dos cases dos switchs interno e externo
possurem valores comuns, no d conflito.
int main()
{
int x,y;
setbuf(stdout, NULL);
printf(" Digite um numero:");
scanf(%d,&x);
switch(x) {
case 1:
printf(" Digite um numero:");
Esse break no
scanf(%d,&y);
impede de
switch(y) {
entrar no case
case 1: printf(teste1);
2 do switch
break;
externo
default: printf(outro);
}
case 2: printf(teste2);
break;
Default: ...
}
}

Exerccio switch
1. Faa um programa que leia dois nmeros, apresente um menu
com as opes de operao (soma, subtrao, multiplicao e
diviso), e execute a operao escolhida, mostrando na tela o
resultado.

Iterao
1. Estrutura de Repetio While

Permite repetir um comando enquanto a condio


for verdadeira.

Comando pode ser vazio, simples ou bloco;

Executado desde que a condio seja verdadeira;

A condio pode ser qualquer expresso,


verdadeiro qualquer valor no-zero.

Testa a condio antes de executar o lao

Sintaxe:
while (condio) {
bloco de comandos;
}

Exemplo:

Iterao

#include <stdio.h>
int main() {
int valor = 1;
while (valor <= 10) {
printf("%d ", valor);
valor++;
}
printf("\n\n");
return 0;
}

Iterao
Estrutura de Repetio Do .. While
Tambm executa comandos repetitivos.
Comando pode ser vazio, simples ou bloco.
Repete o bloco de comandos at que a
condio seja falsa.
Testa a condio depois de executar o lao
Sintaxe:
do {
bloco de comandos;
}
while (condio);

Exemplo:

Iterao

#include <stdio.h>
int main() {
int valor = 1;
do{
printf("%d ", valor);
valor++;
}
while(valor <= 10);
printf("\n\n");
return 0;
}

Iterao

while ou do..while ?

Ex: escrever um programa que leia valores


inteiros a partir do teclado e calcule a mdia dos
nmeros quer forem mpares. O programa deve
terminar a leitura se o usurio digitar um nmero
negativo. Imprima a mdia pedida e o total de
nmeros mpares digitados (desconsiderando o
negativo)
Qual das duas estruturas melhor usar neste
caso?

Iterao

#include <stdio.h>
int main(){
setbuf(stdout, NULL);
int total=0,num;
float media=0;
printf("Digite um numero: \n");
scanf("%d",&num);
while (num >=0) {
if (num%2) {
media += num;
total++;
}
printf("Digite um numero: \n");
scanf("%d",&num);
}
if (total) {
media = media/total;
printf("media: %0.1f, Total: %d",media, total);
}
else printf("nenhum numero impar foi digitado");
return 0;
}

#include <stdio.h>

Iterao

main(){
setbuf(stdout, NULL);
int total=0,num,t=0;
Vai fazer os comandos
float media=0;
antes de testar se o
do {
nmero positivo.
printf("Digite um numero: \n");
Vai incrementar o t.
scanf("%d",&num);
if (num%2) {
media += num;
total++;
}
t++;
} while (num >=0);
if (total) {
media = media/total;
printf("media: %0.1f",media);
}
else printf("nenhum numero impar foi digitado\n");
printf("total de numeros digitados: %d",t);
return 0;
}

Exerccios
1) Faa um programa que imprima a soma de dois nmeros lidos
da tela at que ocorra de uma soma ser mpar.
2) Faa um programa que leia um nmero pelo teclado e repita a
operao de multiplicar ele por trs (imprimindo o novo valor) at
que ele seja maior do que 100. Ex.: se o usurio digita 5,
deveremos observar na tela a seguinte sequncia: 5 15 45 135.

Iterao
1. Estrutura de Repetio For
Comando de repetio com condio prdefinida.
Sintaxe:
for (inicializao;condio;incremento){
bloco de comandos;
}
Uma vez que a condio se torne falsa, a
execuo do programa continua no comando
seguinte ao for.

Iterao

Exemplo:

#include <stdio.h>
int main()
{
int x;
for (x = 1; x <=100; x++)
printf (" %d \n ", x);
return 0;
}

Iterao

O lao pode ser executado de forma inversa:

#include <stdio.h>
int main()
{
int x;
float z;
for (x = 100; x !=65; x-=5){
z = x*x;
printf ("O quadrado de %d, %f \n ", x,z);
}
return 0;
}

Iterao
Laos FOR aninhados:
int main() {
int i,j;
for (i=1; i<10; i++)
for (j=1; j<10; j++)
printf("%d x %d = %d \n", i,j, i*j);
return 0;
}

Iterao

Variaes do lao FOR

Qualquer expresso do comando FOR pode ficar


em branco.
for (x = 0; x != 123;) scanf("%d",&x);

- Cada vez que o lao se repetir x ser testado para


verificar se igual a 123, mas nenhuma atitude
adicional ser tomada. Se voc digitar 123 no
teclado, o lao termina.

Exerccios
1) Faa um programa que conte de 1 a 100 e a
cada mltiplo de 5, emita uma mensagem:
Mltiplo de 5.
2) Faa um programa que leia os catetos de 10
tringulos, calcule a hipotenusa de cada um
deles e imprima esses valores.

Desvios
Break
O comando break pode ser tanto usado
para terminar um teste case dentro de
um comando switch quanto para
interromper a execuo de um lao.
Quando for encontrado no corpo do
comando:
 trmino imediato;
 controle do programa muda o fluxo
para o cdigo imediatamente aps o
loop.

Desvios

Exemplo:

for (i = 0; i < 100; i++)


{
scanf("%d", &num );
if (num < 0)
break;
printf ("%d\n", num );
}

Desvios
Continue
O comando continue parecido com o comando
break.
A

diferena que o comando continue


simplesmente interrompe a execuo da
iterao corrente, passando para a prxima
iterao do lao, se houver uma.

Desvios

Exemplo:

for (i = 0; i < 10; i++)


{
scanf("%d", &num );
if (num < 0)
continue ;
printf("%d\n", num );
}

Exercicios
1) Faa um programa que verifique se um dado nmero digitado
pelo usurio ou no potncia de 2. A sada do programa deve
ser assim(imagine que o numero digitado foi 44):
44 divisivel por 2
22 divisivel por 2
11 no divisvel por 2
No potncia de 2

Mais Exerccios
1.Escreva um programa em C que leia trs valores, a, b,
c e calcula:
a rea do tringulo que tem a como base e b como
altura;
a rea do crculo de raio c;
a rea do trapzio de bases a e b e altura c;
a rea do quadrado de lado b;
a rea do retngulo de lados a e b.
2. Faa um programa em C que leia a idade de uma
pessoa em anos, calcule e escreva essa idade em:
Meses;
Dias;
Horas;
segundos.

Exerccios
3. Dados trs valores X,Y e Z, verificar se eles podem ser os
comprimentos dos lados de um tringulo, e se forem,
verificar se um tringulo equiltero, isceles ou
escaleno. Se eles no formarem um tringulo, escrever
uma mensagem.
Obs.: O comprimento de cada lado de um tringulo
menor do que a soma dos comprimentos dos outros dois
lados.
4. Faa um programa em C que calcula as razes de uma
equao do 2 grau, sendo que os valores A, B e C so
fornecidos pelo usurio.

Exercicios
5. Escreva um programa que exiba uma mensagem com as opes
"1-multiplicar" ,"2-somar" "3-Subtrair", "4-Dividir", "5-Sair".
Leia a opo desejada (1, 2, 3, 4,5), leia dois valores, execute
a operao escolhida e exiba o resultado. O programa deve
ficar repetindo sua execuo, at que seja escolhida a opo
sair.
6. Escreva um algoritmo que leia um conjunto de 10 nmeros
inteiros e mostre qual foi o maior e o menor nmero fornecido.