Você está na página 1de 155

Prof.

Camilo Carmo dos Santos

Lgica de Programao

Introduo Linguagem C
Tcnico em informtica

Traduo
TRADUTOR CDIGO FONTE
... LET SOMA = VAR1 + TOTAL ...

CDIGO OBJETO
... 00010110111001011001011010 ...

(linguagem de prog.)

(executvel)

MONTADOR (assembler)
Tradutor para linguagens de 2a gerao.

COMPILADOR:
Traduz todo o programa de uma vez.

INTERPRETADOR:
Traduz o programa instruo por instruo.

Histrico da Linguagem C
Criada por Denis Ritchie, na dcada de 1970, para uso em um computador DEC PDP-11 em Unix C++ uma extenso da linguagem C O sistema Unix escrito em C e C++

Estrutura bsica de um programa C


diretivas para o pr-processador declarao de variveis globais main () { declarao de variveis locais da funo main comandos da funo main }

Lgica de Programao Prof. Camilo Carmo dos Santos

Diretiva #include permite incluir uma biblioteca Bibliotecas contm funes prdefinidas, utilizadas nos programas Exemplos
#include <stdio.h> Funes de entrada e sada

Diretivas para o processador Bibliotecas

#include <stdlib.h> Funes padro #include <math.h> Funes matemticas

#include <string.h> Funes de texto

Cap. 1 - Viso Geral

O ambiente Dev-C++

O Dev-C++ um ambiente de desenvolvimento de programas em C e C++ (editor, compilador, bibliotecas...) Pode ser baixado de:
http://www.bloodshed.net/devcpp.html

Lgica de Programao Prof. Camilo Carmo dos Santos

Usando o Dev-C++
Inicie o Dev-C++ pelo cone ou pelo menu Crie um novo arquivo, com o comando File, New Source File Edite o programa da pgina seguinte

Cap. 1 - Viso Geral

Usando o Dev-C++ (3)


#include <stdio.h> #include <stdlib.h> main() { printf ("Alo mundo!"); system("PAUSE"); }

Usando o Dev-C++ (4)


Salve o programa com o nome exemplo.cpp Compile o programa com o comando Executar, Compilar ou com a tecla Ctrl-F9 Se houver algum erro de sintaxe, aparece uma ou mais mensagens no rodap da janela. Neste caso, corrija o programa e repita. Se no houver erros, execute o programa com o comando Executar, Executar ou com a tecla Ctrl-F10

Dicas
Termine todas as linhas com ; Sempre salve o programa antes de compilar Sempre compile o programa antes de executar Quando ocorrer um erro de compilao, d um duplo clique sobre a mensagem de erro para destacar o comando errado no programa Verifique tambm a linha anterior, que pode ser a responsvel pelo erro, especialmente se faltar o ; Use comentrios, iniciados por //

10

Template (Exemplo 1)
#include <stdio.h> #include <stdlib.h> main() { printf ("Alo mundo!"); system("PAUSE"); }

11

DETALHE:
TODO o programa vai comear com bibliotecas no topo, em C as principais so: #include <stdio.h> #include <stdlib.h>

Stdlib.h : um arquivo cabealho da biblioteca de propsito geral padro da liguagem de programao C. Ela possui funes envolvendo alocao de memria, controle de processos, converses e outras. Ela compatvel com C++ e chamada cstdlib em C++. O nome "stdlib" vem de standard library (standard library biblioteca padro em ingls). Stdio.h: um cabealho da biblioteca padro do C. Seu nome vem da expresso inglesa standard input-output header (cabealho padro de entrada/sada). Possui definies de subrotinas relativas s operaes de entrada/sada, como leitura de dados digitados no teclado e exibio de informaes na tela do programa de computador. Tambm possui numerosas definies de constantes, variveis e tipos. um dos cabealhos mais populares da linguagem de programao C, intensivamente utilizado tanto por programadores iniciantes como por experientes.

Arrumando o programa:
#include <stdio.h> #include <stdlib.h> main() { printf ("Alo mundo!"); printf("\n");// PULA UMA LINHA system("PAUSE"); }

14

EXERCCIO

FAA UM PROGRAMA QUE ESCREVA O SEU NOME NA TELA DO COMPUTADOR.


15

Declaraes
Declaram as variveis e seus tipos Os nomes das variveis devem conter apenas letras, dgitos e o smbolo _ Os principais tipos so: int, float, double e char Exemplos
int n; int quantidade_valores; float x, y, somaValores; char sexo; char nome[40];

C diferencia letras maisculas de minsculas!


int n, N; n diferente de N!

16

Algoritmo......

Na Linguagem C...

Real: n1, n2, n3, media

#include <stdio.h> #include <stdlib.h> main() { double n1, n2, n3, media;

system("PAUSE"); } 17

Comando de atribuio
Atribui o valor da direita varivel da esquerda O valor pode ser:
uma constante, uma varivel ou uma expresso

Exemplos
x = 4; --> lemos x recebe 4 y = x + 2; y = y + 4; valor = 2.5; sexo = 'F'

18

Entrada e Sada de Dados

19

Entrada de Dados
Funo scanf
scanf ("formatos", &var1, &var2,...) Exemplos: int i, j; float x; char c; scanf("%d", &i); scanf("%d %f", &j, &x); scanf("%c", &c); scanf("%s", nome);

%d %f %lf %c %s

inteiro float double char palavra

20

Entrada de Dados (Exemplo 2)


Algoritmo Na Linguagem C... #include <stdio.h> #include <stdlib.h> main() { double n1, n2, n3, media; scanf ("%lf",&n1); scanf ("%lf",&n2); scanf ("%lf",&n3);
scanf ("%lf %lf %lf",&n1, &n2, &n3);

Real: n1, n2, n3, media ler n1 ler n2 ler n3 ler n1, n2, n3

system("PAUSE"); } 21

Operadores Matemticos
Operador Exemplo Comentrio
+ * / % ++ -x + y x y x * y x / y x % y x++ x-Soma x e y Subtrai y de x Multiplica x e y Divide x por y Resto da diviso de x por y Incrementa em 1 o valor de x Decrementa em 1 o valor de x

22

Entrada de Dados (exemplo 3) Algoritmo << --- Parou Aqui


Na Linguagem C... #include <stdio.h> #include <stdlib.h> main() { double n1, n2, n3, media;
scanf ("%lf %lf %lf",&n1, &n2, &n3);

Real: n1, n2, n3, media

ler n1, n2, n3


media=(n1+n2+n3)/3

media=(n1+n2+n3)/3; printf(a media : %lf, media); system("PAUSE"); } 23

Sada de Dados
Funo printf
printf ("formatos", var1, var2,...) Exemplos: int i, j; float x; char c; printf("%d", i); printf("%d, %f", j, x); printf("%c", c); printf("%s", nome);

%d %f %lf %c %s

inteiro float double char palavra

24

Sada de Dados (Exemplo 4)


#include <stdio.h> #include <stdlib.h> main() { int i, j; float x; char c; char nome [10]; i = 1; j = 2; x = 3; printf("%d", i); printf(,"); printf("%d, %f", j, x); system("PAUSE"); }

25

Sada de Dados (Exemplo 5)


#include <stdio.h> #include <stdlib.h> main() { double n1, n2, n3, media; // definicao de variaveis scanf ("%lf %lf %lf",&n1, &n2, &n3); // entrada de dados media=(n1+n2+n3)/3; // operacao matemtica printf("%f", n1); // saida de dados na tela printf("%f", n2); // saida de dados na tela printf("%f", n3); // saida de dados na tela printf("%f", media); // saida de dados na tela system("PAUSE"); qualquer tecla } // pausa do sistema, pressione

26

Sada de Dados (Exemplo 5)


#include <stdio.h> #include <stdlib.h> main() { double n1, n2, n3, media; // definicao de variaveis printf(DIGITE 3 NMERO PARA CALCULAR A MEDIA"); scanf ("%lf %lf %lf",&n1, &n2, &n3); // entrada de dados: Leia &n1, &n2, &n3 media=(n1+n2+n3)/3; // operacao printf("%f", n1); // saida de dados 1 valor printf(","); // colocando uma virgula printf("%f", n2);// saida de dados 2 valor printf(",");//colocando outra virgula printf("%f", n3);// saida de dados 3 valor printf("\n"); // pulando uma linha printf("A media e: "); // Exibindo a frase a mdia e: printf("%f",media); // Exibindo o valor da varivel mdia; printf("\n"); // pulando outra linha system("PAUSE"); // Parada do sistema }

27

Sada de Dados (Exemplo 6)


#include <stdio.h> #include <stdlib.h> main() { // definicao de variaveis int i, j; // variavel do tipo inteiro float x; // variavel do tipo real ou ponto flutuante char c; // variavel do tipo caracter char nome[30]; // variavel do tipo caracter com vrias posies ou string....... //entrada de dados scanf("%d", &i); // lendo 1 valor do tipo inteiro scanf("%d %f", &j, &x); // lendo 1 valor tipo inteiro e 1 valor real scanf("%s", &c); // Ler um caractere qualquer scanf("%s", nome); // Ler um nome qualquer com no mximo 30 posies // exibindo os dados printf("%d", i); // exibindo o inteiro printf("%d, %f", j, x); // exibindo o inteiro eo real printf("%c", c); // exibindo caractere printf("%s", nome); // exibindo a varivel com vrios caracteres system("PAUSE"); // uma paradinha bsica }

28

{ int i, j; float x; char c; char nome[30];

ARRUMANDO... (Exemplo 6) << --- Parou aqui.

printf("DIGITE UM NUMERO INTEIRO\n"); scanf("%d", &i); printf("DIGITE UM NUMERO INTEIRO E UM REAL\n"); scanf("%d %f", &j, &x); printf("DIGITE UM CARACTER\n"); scanf("%s",&c); printf("DIGITE UMA PALAVRA\n"); scanf("%s",nome); printf("\n O numero inteiro e:%d", i); printf("\n o inteiro e o real sao:%d, %f", j, x); printf("\n o caracter e:%c", c); printf("\na Palavra e:%s", nome); system("PAUSE"); }

29

//PROGRAMINHA BOBO QUE SOMA VALORES #include <stdio.h> #include <stdlib.h> main() { //declaracao de variaveis int n; int quantidade_valores; float x, y, somaValores; char sexo; char nome[40]; // operacao somaValores =1+1; //saida de dados printf("somaValores=%f", somaValores); system("PAUSE"); }

Exemplo 7

30

#include <stdio.h> #include <stdlib.h> main() { // definicao de vairiaveis int n; int quantidade_valores; float x, y, somaValores; char sexo; char nome[40]; x = 1; y = 2; // valores passados pelas variaveis //atribuicao somaValores = x + y; // mostra mensagem de texto na tela printf("alo mundo \n"); // mostra valor na tela printf("somaValores=%f", somaValores); printf("\n"); system("PAUSE"); }

Exemplo 8

31

Entrada e Sada
Exemplo 9
#include <stdio.h> #include <stdlib.h> main() { double n1, n2, n3, media; scanf ("%lf %lf %lf",&n1, &n2, &n3); media=(n1+n2+n3)/3; printf ("%lf",media);

Exemplo 10
#include <stdio.h> #include <stdlib.h> main() { double n1, n2, n3, media; printf("Digite 3 notas: "); scanf ("%lf %lf %lf",&n1, &n2, &n3); media=(n1+n2+n3)/3; printf ("Media: %.2lf",media); printf (\n); system("PAUSE"); }

system("PAUSE"); }

32

Exemplo 11
1) Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um programa que calcule seu peso ideal, utilizando a seguinte frmula: peso ideal = (72.7*h) 58

#include <stdio.h> #include <stdlib.h> #include <conio.h> // conio.h uma biblioteca que serve para manipular caracteres na tela main() { float altura, pesoIdeal; char sexo; printf ("\nDigite sua altura em metros: "); scanf ("%f",&altura); printf ("\nDigite seu sexo (F/M): "); sexo=getche(); // evento da biblioteca conio.h pega a tecla digitada pesoIdeal=(72.7*altura)-58; printf ("\nO sexo digitado foi %c e o peso ideal desta pessoa eh %.2f quilos\n", sexo, pesoIdeal); // Valor das variaveis jogado dentro do testo system("PAUSE"); }

33

PROGRAMA I.M.C.
#include <stdio.h> #include <stdlib.h> main() { float altura, peso, imc; printf ("\nDigite sua altura em metros: \n"); scanf ("%f",&altura); printf ("\nDigite seu peso: \n"); scanf ("%f",&peso); imc = peso /(altura*altura); printf ("\n O SEU IMC E: %.2f",imc ); printf("\n"); // aqui introduziremos o "IF"... system("PAUSE"); }

#include <stdio.h> #include <stdlib.h> main() { float altura, peso, imc; printf ("\nDigite sua altura em metros: \n"); scanf ("%f",&altura); printf ("\nDigite seu peso: \n"); scanf ("%f",&peso); imc = peso /(altura*altura); printf ("\n O SEU IMC E: %.2f",imc ); printf("\n"); // aqui introduziremos o "IF"... if (imc<19) {printf ("Voce esta abaixo do peso \n"); } if (imc>19&&imc<25) {printf ("Voce esta no peso ideal \n"); } if (imc>25 ) {printf ("Voce esta acima do peso \n"); } system("PAUSE"); }

PROGRAMA I.M.C.

Operadores de Atribuio
Operador Exemplo Comentrio
= += -= *= /= %= x = y x += y x -= y x *= y x /= y x %= y Atribui o valor de y a x Equivale a x = x + y Equivale a x = x y Equivale a x = x * y Equivale a x = x / y Equivale a x = x % y

36

Funes Matemticas
Funo ceil cos exp fabs floor log log10 pow sin sqrt tan Exemplo ceil(x) cos(x) exp(x) fabs(x) floor(x) log(x) log10(x) pow(x,y) sin(x) sqrt(x) tan(x) Comentrio
Arredonda o nmero real para cima; ceil(3.2) 4

Cosseno de x (x em radianos) e elevado potencia x Valor absoluto de x


Arredonda o nmero Real para baixo; floor(3.2) 3

Logaritmo natural de x Logaritmo decimal de x Calcula x elevado potncia y Seno de x Raiz quadrada de x Tangente de x

#include <math.h> 37

// LAGORITMO PARA FUNES MATEMTICAS #include <conio.h> // necessria para getch() #include <math.h> // necessria para pow() e sqrt() #include <stdio.h> // necessria para printf() int main() { int a = 2, b = 3; printf("%d + %d = %d\n", a, b, a + b); printf("%d - %d = %d\n", a, b, a - b); printf("%d x %d = %d\n", a, b, a * b); printf("%d / %d = %0.1f\n", a, b, (float) a / b); // resultado fracionrio printf("%d elevado a %d = %0.1f\n", a, b, pow(a, b)); // pow(base, expoente) printf("raiz quadrada de %d = %0.1f\n", a, sqrt(a)); getch(); return 0; }

Exemplo 12 2) Construa um programa que tendo como entrada dois pontos quaisquer < --PAROU AQUI do plano P(x1,y1) e Q(x2,y2), imprima a distncia entre eles. A
frmula da distncia :
#include <stdio.h> #include <stdlib.h> #include <math.h> main() { float x1, y1, x2, y2; float distancia; printf ("\nDigite o valor de x1: "); scanf ("%f",&x1); printf ("\nDigite o valor de y1: "); scanf ("%f",&y1); printf ("\nDigite o valor de x2: "); scanf ("%f",&x2); printf ("\nDigite o valor de y2: "); scanf ("%f",&y2); distancia=sqrt(pow((x2-x1),2)+pow((y2-y1),2)); printf ("\nA distancia entre os pontos P1 e P2 eh %.2f\n", distancia); system("PAUSE"); }

39

Exercicio I
3) Construa um programa que calcule a quantidade de latas de tinta necessrias e o custo para pintar tanques cilndricos de combustvel, onde so fornecidos a altura e o raio desse cilindro. Sabendo que: - a lata de tinta custa R$20,00 - cada lata contm 5 litros - cada litro de tinta pinta 3 metros quadrados. Sabendo que: rea do cilindro=3.14*raio2 + 2*3.14*raio*altura e que raio e altura so dados de entrada.

40

Resposta do Exerccio I
#include <stdio.h> #include <stdlib.h> #include <math.h> main() { float altura, raio, areaCilindro, qtdadeLitros, qtdadeLatas, custo; printf ("\nDigite o valor da altura em metros: "); scanf ("%f",&altura); printf ("\nDigite o valor do raio em metros: "); scanf ("%f",&raio); areaCilindro=3.14*raio*raio + 2*3.14*raio*altura; printf ("\nA area do cilindro eh %.2f metros quadrados", areaCilindro); qtdadeLitros=areaCilindro/3; printf ("\nA qtidade de litros necessaria eh de %.2f ", qtdadeLitros); qtdadeLatas=qtdadeLitros/5; printf ("\nA qtidade de latas necessaria eh de %.2f ", qtdadeLatas); custo=qtdadeLatas*20; printf ("\nO valor total das tintas eh de R$ %.2f \n", custo); system("PAUSE"); }

41

Operadores Relacionais
Operador
== != <= >= < >

Exemplo
x == y x != y x <= y x >= y x < y x > y

Comentrio
O contedo de x igual ao de y O contedo de x diferente do de y
O contedo de x menor ou igual ao de y

O contedo de x maior ou igual ao de y O contedo de x menor que o de y O contedo de x maior que o de y

As expresses relacionais em C retornam : 1 se verdadeiro e; 0 se falso.

42

Operadores Lgicos
&& (E lgico): retorna verdadeiro se ambos os operandos so verdadeiros e falso nos demais casos. Exemplo: if( a>2 && b<3). || (OU lgico): retorna verdadeiro se um ou ambos os operandos so verdadeiros e falso se ambos so falsos. Exemplo: if( a>1 || b<2). ! (NO lgico): usada com apenas um operando. Retorna verdadeiro se o operando falso e vice-versa. Exemplo: if( !var ).

43

#include<stdio.h> main() { float x = 3.0; int n = 55; int i = 0; int resultado;

PROGRAMINHA COM LGICA:

#include<stdlib.h>

// operadores lgicos "0" e falso, e "1" e verdadeiro

system(PAUSE); }

.......

CONTINUANDO....
resultado = (i != 0); printf("\nO resultado e %d", resultado); resultado = (x == 0); printf("\nO resultado e %d", resultado); resultado = (n < 100); printf("\nO resultado e %d", resultado); resultado = ((i != 0) || (x == 0)); printf("\nO resultado e %d", resultado); resultado = ((i != 0) || (x == 0) || (n < 100)); printf("\nO resultado e %d", resultado); printf("\n"); system("PAUSE");

// operadores lgicos "0" e falso e "1" e verdadeiro

PROGRAMA COMPLETO:
#include<stdio.h> #include<stdlib.h> main() { float x = 3.0; int n = 55; int i = 0; int resultado; // operadores lgicos "0" e falso e "1" e verdadeiro resultado = (i != 0); printf("\nO resultado e %d", resultado); resultado = (x == 0); printf("\nO resultado e %d", resultado); resultado = (n < 100); printf("\nO resultado e %d", resultado); resultado = ((i != 0) || (x == 0)); printf("\nO resultado e %d", resultado); resultado = ((i != 0) || (x == 0) || (n < 100)); printf("\nO resultado e %d", resultado); printf("\n"); system("PAUSE"); }

Relembrando: Operadores Lgicos


Tabela E VeVV VeFF FeVF FeFF Tabela OU V ou V V V ou F V F ou V V F ou F F
47

Tabela NO No V F No F V

EXERCCIO:
Dadas as declaraes abaixo, indique cada um dos itens na seqncia: int i=1, j=2, k= 3, n=2; float x= 3.3, y =4.4;

Comando if...else
if (condio) comando; else comando; if (condio) { comando1; comando2; } else { comando3; comando4; }

Estrutura condicional composta


Executa o comando se a condio for qualquer coisa diferente de zero!

if (peso= =peso_ideal) printf (Vc est em forma!); else printf (Necessrio fazer dieta!);

em pseudo-cdigo:
se (peso= =peso_ideal) entao exibir Vc est em forma! senao exibir Necessrio fazer dieta!

Estrutura SWITCH
switch (numero){ case 1: printf ("Janeiro\n"); break; case 2: printf ("Fevereiro\n"); break; case 3: printf ("Marco\n"); break; case 4: printf ("Abril\n"); break; case 5: printf ("Maio\n"); break; case 6: printf ("Junho\n"); break; case 7: printf ("Julho\n"); break; case 8: printf ("Agosto\n"); break; case 9: printf ("Setembro\n"); break; case 10: printf ("Outubro\n"); break; case 11: printf ("Novembro\n"); break; case 12: printf ("Dezembro\n"); break; default: printf (Mes invalido\n"); }

Exerccio 1
1) Dados dois nmeros A e B, identifica o maior nmero. #include <stdio.h> #include <stdlib.h> main(){ int A, B, maior; printf ("Digite o valor de A: "); scanf ("%d", &A); printf ("Digite o valor de B: "); scanf ("%d", &B); if (A>B) maior=A; else maior=B; printf ("O maior valor e: %d\n", maior); system("pause"); }

Exerccio 2
2) Escreva um algoritmo para determinar se uma pessoa maior ou menor de idade. #include <stdio.h> #include <stdlib.h> main (){ int idade; printf ("Digite a idade da pessoa: "); scanf ("%d", &idade); if (idade>=18) printf ("Pessoa eh maior de idade.\n"); else printf ("Pessoa eh menor de idade.\n"); system("pause"); }

Exerccio 3
Ou utilizando boolean: #include <stdio.h> #include <stdlib.h> main (){ int idade; bool status; printf ("Digite a idade da pessoa: "); scanf ("%d", &idade); if (idade>=18) status=true; else status=false; if (status) printf ("Pessoa eh maior de idade.\n"); else printf ("Pessoa eh menor de idade.\n"); printf(%b,status); system("pause"); }

Exerccios
4) Faa um algoritmo que leia a quantidade comprada de um produto e o preo unitrio deste produto. - Se o preo total a ser pago for inferior a R$ 100, ento fornea um desconto de 5%. - Se o preo total a ser pago ficar entre 100 e 1000, ento fornea um desconto de 5% e armazene um bnus de 5% em cima do valor total. - Se o preo total a ser pago for superior a 1000, ento fornea um desconto de 10%, armazene um bnus de 5% em cima do valor total e escreva na tela que o cliente ser cadastrado como Cliente Vip.

#include <stdio.h> #include <stdlib.h> main(){ int qtdade; float preco, valorTotal, descontado, bonus; printf ("\nDigite a qtdade: "); scanf ("%d", &qtdade); printf ("\nDigite o preco unitario: "); scanf ("%f", &preco); valorTotal=qtdade*preco; if (valorTotal<100) descontado=valorTotal*0.95; else if (valorTotal>=100 && valorTotal<=1000) { descontado=valorTotal*0.95; bonus=valorTotal*0.05; } else if (valorTotal>1000)//poderia ser soh: else { descontado=valorTotal*0.90; bonus=valorTotal*0.05; printf ("\n Cliente vip!\n"); } printf ("\n Valor Total eh %.2f\n", valorTotal); printf ("\n Valor com desconto eh %.2f\n", descontado); printf ("\n Bonus eh %.2f\n", bonus); system("pause"); }

Lao While (Enquanto)


O lao while usado quando queremos que um bloco de instrues seja executado ENQUANTO uma condio for verdadeira (true).

ex.: int valor = 1; while(valor <= 10) { printf("%d ", valor); valor++; }

Lao While
Lembre-se de que a condio testada em um lao while deve resultar em um valor boolean (true ou false). O trecho de cdigo seguinte deixa isso mais claro:

#include <stdio.h> #include <stdlib.h> main() { int continuar = 1; // 1 true em C int valor = 1; while(continuar) // estou dizendo enquanto "continua" for verdadeiro { printf("%d ", valor); valor++; if(valor > 10) continuar = 0; // 0 false em C } printf("\n"); system("PAUSE"); }

Passo a passo....
#include <stdio.h> #include <stdlib.h> main() { int valor = 1; while(valor <= 10) { printf("%d ", valor); valor++; } system("PAUSE"); }

Lao While
Este trecho de cdigo exibe os nmeros de 1 10 na pgina. Veja agora o mesmo trecho de cdigo, desta vez contando de 10 1:

int valor = 10; while(valor >= 1) { printf("%d ", valor); valor--; // decrementando }

Lao While
#include <stdio.h> #include <stdlib.h> main() { int valor = 10; while(valor >= 1) { printf("%d ", valor); valor--; // decrementando _sleep(1000); // funo nova _sleep, faz a espera de tempo } system("PAUSE"); }

Usando o lao for em C


O lao for usado quando queremos executar um bloco de instrues um determinado nmero de vezes. Este lao composto de trs partes: for(inicializao;teste;incremento/decremento) { bloco de instrues }

Usando o lao for em C


a parte inicializao ns definimos o valor inicial da varivel de controle. Na parte teste ns usamos o valor da varivel de controle para testar a continuidade ou interrupo do lao. inalmente, na parte incremento/decremento ns alteramos o valor da varivel de controle para cima ou para baixo. Veja um exemplo:

Lao For
main() { int i; for(i = 1; i <= 10; i++) { printf("%d ", i); } printf("\n\n"); system("PAUSE"); }

Lao For : Mostrar os nmeros pares de 0 a 20.


int main(
{ int i; for(i = 0; i <= 20; i += 2) { printf("%d ", i); } printf("\n\n"); system("PAUSE"); } // Observe que "i += 2" o mesmo que "i = i + 2".

Lao For
om exceo da parte de testes, podemos inserir mltiplas expresses nas demais partes de um lao for. Veja:

#include <stdio.h> #include <stdlib.h> main() { int i, x; for(i = 0, x = 2; i <= 10; printf("%d ", i * x), i++); // agora com expresses matemticas printf("\n\n"); system("PAUSE"); }

Lao For
main() { int a; for ( a = 0; a <= 10; a = a + 1 ) { int b; printf("\nDigite um valor para b: "); scanf("%d", &b); printf("\na = %d, b = %d e sua soma = %d.", a, b, a + b); } printf("\nA variavel a ainda existe e vale %d.", a); system("PAUSE"); }

Loop Infinito erro clssico de programao

Loop infinito
#include <stdio.h> #include <stdlib.h> main() { int valor = 1; while(valor >= 1) { printf("%d valor ++ ; } system("PAUSE"); } ", valor);

Loop infinito (Caso mais comum, falta de ateno)


#include <stdio.h> #include <stdlib.h> main() { int valor = 1; while(valor != 10) // { printf("%d ", valor); valor = valor + 2 ; } system("PAUSE"); } // o valor vai pular o "10" e continuar compilando... Aqui mora o perigo

Lendo com cin e o operador de extrao >>


O objeto cin (C in) manipula toda entrada do teclado por meio do operador de extrao >> que conecta a entrada de dados varivel que a conter.

EXERCCIOS
Faa um programa que pega um nmero digitado e imprime na tela esse nmero de asteriscos. Ex: o usurio digita 7 e o programa imprime *******

#include <stdio.h> #include <stdlib.h> main() { int valor,cont; printf("DIGITE UM NUMERO: "); scanf("%d",&valor); cont=0; while(cont<= valor) { printf("*"); cont = cont+1; } printf("\n"); system("PAUSE"); }

EXERCCIOS
2) Escreva um programa que apresente a srie de Fibonacci at o dcimo quinto termo. A srie de Fibonacci formada pela seqncia: 1, 1, 2, 3, 5, 8, 13, 21, 34, ... .

#include <stdio.h> #include <stdlib.h> int num, f1, f2, f3, cont; main() { printf("Digite um numero:\n "); scanf("%i", &num); f1=0;f2=1; // inicia com esses valore para comear a sequencia.. num=num-1; // para no fazer mais voltas que o pedido. // uma sequencia a mais ele vai fazer de qualquer jeito //devido aos valores iniciais "0" e "1" for(cont=0;cont<=num;cont++) { f3=f2+f1; printf("%i - ",f3); f1=f2;f2=f3; } system("PAUSE"); }

EXERCCIOS
Em uma eleio presidencial existem 4 candidatos. Os votos so informados por cdigo. Os dados utilizados para a contagem obedecem seguinte codificao:
1, 2, 3, 4 = voto para os respectivos candidatos 5 = nulo 6 = voto em branco

Elabore um programa em C que calcule e escreva:


O total de votos para cada candidato e seu percentual sobre o total O total de votos nulos e seu percentual sobre o total O total de votos brancos e seu percentual sobre o total

Como finalizador do conjunto de votos, tem-se o valor 0.

#include<stdlib.h> #include<stdio.h> int voto,cand1,cand2,cand3,cand4,ttal; main() {voto = 13;// ou qualquer numero diferente de 0 while (voto!= 0) { printf("1-Candidato LulaMolusco;\n"); printf("2-Candidato MotoSerra;\n"); printf("3-Candidato DilmaVez;\n"); printf("4-Candidato Siqueirido;\n"); printf("DIGITE O NUMERO DO SEU CANDIDATO: "); scanf("%d",&voto); if (voto == 1) cand1 = cand1+1; if (voto == 2) cand2 = cand2+1; if (voto == 3) cand3 = cand3+1; if (voto == 4) cand4 = cand4+1; system("cls"); // limpar a tela } // falta fazer os calculos printf("\n1-Candidato LulaMolusco; %d",cand1); printf("\n2-Candidato MotoSerra;%d",cand2); printf("\n3-Candidato DilmaVez;%d",cand3); printf("\n4-Candidato Siqueirido;%d",cand4); system("PAUSE"); }

#include<stdio.h> int voto,cand1,cand2,cand3,cand4,ttal; float aux; main() {voto = 13;// ou qualquer numero diferente de 0 while (voto!= 0) { printf("1-Candidato LulaMolusco;\n"); printf("2-Candidato MotoSerra;\n"); printf("3-Candidato DilmaVez;\n"); printf("4-Candidato Siqueirido;\n"); printf("DIGITE O NUMERO DO SEU CANDIDATO: "); scanf("%d",&voto); if (voto <= 4) { if (voto == 1) cand1 = cand1+1; if (voto == 2) cand2 = cand2+1; if (voto == 3) cand3 = cand3+1; if (voto == 4) cand4 = cand4+1; system("cls"); // limpar a tela ttal = ttal+1; } else { printf("\nVOTO INVALIDO \n"); system("PAUSE"); system("cls"); } } printf("\n1 O Total de votos foi: %d",ttal); printf("\n1-Candidato LulaMolusco; %d, %.1f'%%%'dos votos",cand1, aux = (cand1*100/ttal) ); printf("\n2-Candidato MotoSerra;%d, %.1f'%%%'dos votos",cand2, aux = (cand2*100/ttal)); printf("\n3-Candidato DilmaVez;%d, %.1f'%%%'dos votos",cand3, aux = (cand3*100/ttal)); printf("\n4-Candidato Siqueirido;%d, %.1f'%%%'dos vostos",cand4, aux = (cand4*100/ttal)); printf("\n"); system("PAUSE"); }

EXERCCIO:
PROGRAMA DESPENCOL 1- PARAFUSO R$ 05,00 A CAIXA 2- TROLHA R$ 15,65 A UNIDADE 3- PORCAS R$ 06,50 A CAIXA 4- PREGOS R$ 04,30 A CAIXA 5- MARTELO R$ 10,00 A UNIDADE 6- CERROTE R$ 30,00 A UNIDADE 7- CIMENTO R$ 99,99 O SACO 8- TIJOLO R$ 300,00 O MILHEIRO VALOR 0 PRA ENCERRAR O PROGRAMA DEVE MOSTRAR A QUANTIDADE DE ITENS VENDIDOS E O VALOR TOTAL DE CADA ITEM E O VALOR TOTAL DA VENDA.

Mltiplas entradas com cin


#include<iostream.h> main() { printf("\nDigite as notas das 4 provas: "); float p1,p2,p3,p4; cin >>p1>>p2>>p3>>p4; float media=(p1+p2+p3+p4)/4; printf("\nMedia: %.2f",media); system("PAUSE"); }

Tabela ASCII

Cdigo pra gerar a tabela ASCII


#include <stdio.h> #include <stdlib.h> int main() { char c = 32; do printf("[%d] %c\n", c, c); while (++c <= 126); system("Pause"); }

Converses de tipo e o operador de molde


Suponhamos que desejemos imprimir o valor numrico de um caractere da tabela ASCII. Para isso, usaremos um novo operador chamado operador de molde, que consiste em escrever o nome do tipo desejado e em seguida o valor ou a expresso a ser avaliada entre parnteses. Char ch = A; Cout << int(ch); //Imprime 65

As funes getche() e getch()


#include <stdlib.h> #include <stdio.h> #include <iostream.h> #include <conio.h> main() { char ch; printf("\nPressione uma tecla "); ch = getche(); printf("\nA tecla sucessora ASCII e: %d", char(ch)); printf("\n"); system("PAUSE"); }

As funes getche() e getch()


A funo getche() retorna o caractere lido no teclado. O valor retornado de uma funo pode ser chamado de valor da funo ou resultado da funo. A expresso ch=getche(); atribui o valor da funo getche varivel ch.

As funes getche() e getch()


A funo getch() similar funo getche(), exceto pelo fato de que o caractere digitado no impresso no vdeo. As duas necessitam da biblioteca conio.h.

Operadores de incremento e de decremento


A instruo x=x+1; equivalente a ++x; que equivalente a x++;

Operadores de incremento e de decremento


n=5; x=++n; printf(\nN= <<n<< X= <<x); A sada ser N=6 X=6

Operadores de incremento e de decremento


n=5; x=n++; cout<<\nN= <<n<< X= <<x; A sada ser N=6 X=5

Operadores de incremento e de decremento


x=x-1; equivalente a --x; que equivalente a x--;

Operadores aritmticos de atribuio


i+=2; equivale a X*=y+1; equivale t/=2.5; equivale P%=5; equivale D-=3; equivale a i=i+2; a x=x*(y+1) a t=t/2.5; a p=p%5; d=d-3;

Operadores relacionais
> maior >= maior ou igual < menor <= menor ou igual == igual != diferente

Programa exemplo
#include<iostream.h> main(){ int verdadeiro, falso; verdadeiro = (15<20); falso = (15==20); cout<<\nVerdadeiro <<verdadeiro; cout<<\nFalso <<falso; }

Operadores lgicos: && || !


C++ oferece trs operadores lgicos. So eles: && lgico e || lgico ou ! Lgico no

O operador condicional ternrio: ?:


Sua sintaxe geral possui a seguinte construo:
exp1 ? exp2 : exp3

A exp1 avaliada primeiro. Se seu valor for diferente de zero (verdadeira) a exp2 avaliada e seu resultado ser o valor da expresso condicional com um todo. Se exp1 for zero, a exp3 avaliada e ser o valor da expresso condicional com um todo.

O operador condicional ternrio: ?:


Na expresso: max = (a>b) ? a : b A varivel que contm o maior valor numrico entre a e b ser atribuda a max.

Comandos de deciso
Os comandos de deciso permitem determinar qual a ao a ser tomada com base no resultado de uma expresso condicional.

O comando if
A instruo if consiste na palavra-chave if seguida de uma expresso de teste entre parnteses. Se a expresso de teste for verdadeira, a instruo executada; do contrrio, nada feito.

O comando if
if (expresso de teste) { Instruo; Instruo; }

O comando if-else
O comando if-else uma expanso de um simples comando if. O comando if permite que executemos algo somente se a sua expresso de teste for verdadeira, caso contrrio nada executado.

O comando if-else
Suponhamos que voc queira executar alguma coisa se a expresso de teste for verdadeira e outra coisa se a expresso de teste for falsa. Neste caso, voc deve usar o comando if-else.

O comando if-else
if (expresso de teste) { instruo; instruo; } else { instruo; instruo; }

O comando if-else
if (expresso de teste 1) { instruo; instruo; } else if (expresso de teste 2) { instruo; instruo; } else { instruo; instruo; }

Laos
O lao for
Geralmente usado quando queremos repetir algo um nmero fixo de vezes. Isto significa que utilizamos um lao for quando sabemos de antemo o nmero de vezes a repetir.

Laos
#include<iostream.h>
#include<conio.h>

main(){ int i; for(i=1;i<=10;i++) { cout<<i; // mostra o valor getch(); // pega a tecla _sleep(1000); // a espera } system(PAUSE); }

Laos
#include<iostream.h>
#include<conio.h>

main(){ int i; for(i=10;i<=1;i--) { cout<<i; // mostra o valor getch(); // pega a tecla _sleep(1000); // a espera } system(PAUSE); }

EXERCCO
Faa um programa que calcule o valor fatorial de um nmero inteiro.

EXERCCO
2) Escreva um programa que apresente a srie de Fibonacci at o dcimo quinto termo. A srie de Fibonacci formada pela seqncia: 1, 1, 2, 3, 5, 8, 13, 21, 34, ... .

O lao while
A segunda estrutura de lao em C++ o lao while. primeira vista, o lao while parece simples se comparado ao lao for; utiliza os mesmos elementos, mas eles so distribudos de maneira diferente no programa.

O lao while
expresso de inicializao; while (expresso de teste) { . . expresso de incremento (passo); . }

O lao do-while
A terceira e ltima estrutura de lao em C++ o lao do-while. Este lao bastante similar ao lao while e utilizado em situaes em que necessrio executar o corpo do lao uma primeira vez e depois avaliar a expresso de teste e criar um ciclo repetido.

O lao do-while
do { instruo; instruo; } while (teste);

MATRIZES
Estruturas de Dados Homogneas Multidimensionais Matrizes

Matrizes em Linguagem C
Matrizes so Estruturas de Dados Homegneas Multidimensionais Necessitam de dois (ou mais) ndices de acesso. Declarao: tipo nomedamatriz[DimMax_x][DimMax_y]; Onde: tipo:um dos tipos primitivos de dados em C (char, int, float, double) nomedamatriz: segue as mesmas regras das variveis bsicas DimMax_x, DimMax_y: define o tamanho da rea de armazenamento pode ser uma expresso constante inteira

Matrizes em Linguagem C
#include <stdio.h> #include <stdlib.h> void main() { float matriz [2][2]; float media, quant; matriz[0][0] = 9.0; matriz[0][1] = 8.0; matriz[1][0] = 7.0; matriz[1][1] = 7.0; quant = matriz[0][0] + matriz[0][1] + matriz[1][0] + matriz[1][1]; media = quant / 4.0; printf ( A mdia dos 4 nmeros : %f., media); system (PAUSE); }

Matrizes em Linguagem C
Exemplos:

int main() { float parc_aluno[2]; float notas_alunos[5][2]; char nome[40]; char nomes_turma[5][40]; return 0; }

(Importante: Indexao no estilo [Linha][Coluna])

Matrizes em Linguagem C
#include <stdio.h> #include <stdlib.h> void main () { float matriz [2][2]; float media, quant; printf ( Digite o 1o nmero: ); scanf ( %f, &matriz [0][0] ); printf ( Digite o 2o nmero: ); scanf ( %f, &matriz [0][1] ); printf ( Digite o 3o nmero: ); scanf ( %f, &matriz [1][0] ); printf ( Digite o 4o nmero: ); scanf ( %f, &matriz[1][1] ); quant = matriz[0][0] + matriz[0][1] + matriz[1][0] + matriz[1][1]; media = quant / 4.0; printf( A mdia dos 4 nmeros : %f., media); system (pause); }

Matrizes em Linguagem C
#include <stdio.h> #include <stdlib.h> void main () { float matriz [2][4]; float media[2], soma; int cont1, cont2; for ( cont1 = 0; cont1 < 2; cont1 = cont1 + 1 ) { soma = 0.0f; for ( cont2 = 0; cont2 < 4; cont2 = cont2 + 1 ) { printf ( Digite a nota posio %i, %i da matriz: , cont1, cont2 ); scanf ( %f, &matriz[cont1][cont2] ); soma = soma + matriz[cont1][cont2] ; } media[cont1] = quant / 4.0; printf ( A mdia dos nmeros da linha %d da matriz : %f., cont1, media[cont1]); } printf(\nE a mdia geral entre todos os nmeros : %2.2f\n, (media[0]+media[1])/2.0f); system (pause); }

Matrizes em Linguagem C Exerccios


a) Uma matriz M pode ser transposta em uma matriz N onde o nmero de linhas/colunas da primeira passa a ser o nmero de colunas/linhas da segunda. Faa um programa que: - Leia uma matriz M (o usurio deve fornecer a quantidade de linhas e a quantidade de colunas que no devero exceder 50 linhas e 50 colunas). - Calcule a transposta N da matriz M. - Imprima a transposta calculada. b) Elabore um programa que multiplique duas Matrizes M e N (10x10) fornecidas pelo usurio. O programa deve: - Ler as matrizes M e N. - Calcular a multiplicao e armazenar na matriz Mult. - Imprimir o resultado. c) Elabore um programa que manipule os dados para uma sala de 40 alunos. O programa deve receber como entrada (via leitura de teclado): - Os nomes dos alunos (mximo 50 caracteres). - As duas notas parciais. O programa deve calcular e imprimir, numa mesma linha, para cada aluno: - O nome, a mdia final e a freqncia. E tambm deve apresentar: - A maior mdia da turma, e a menor mdia da turma. - A quantidade de alunos aprovados, reprovados e em exame. - Uma listagem com o nome dos alunos que iro para a final.

#include<stdio.h> main() { int vet1[5]={1,2,3,4,5}; /*declarao e inicializao do vetor vet1*/ int vet2[5]={6,1,2,2,5}; /*declarao e inicializao do vetor vet2*/ int vetSoma[5]; /*declarao do vetor vetSoma que vai guardar o resutado da soma dos dois vetores(vet1 e vet2).*/ int x; printf("Este programa soma os dois vetores abaixo:\n"); printf("vet1={1,2,3,4,5}\n"); printf("vet2={6,1,2,2,5}\n"); printf("\n"); printf("vetor resultante da soma:\n"); for(x=0; x<5; x++) { vetSoma[x]=vet1[x]+vet2[x]; /*soma os valores*/ printf("vetSoma[%d]:%d\n",x,vetSoma[x]); /*exibe na tela*/ } /*fim do for*/ } /*fim do programa*/

main() { int mat[2][2]; float det; int x,y; printf("Este programa calcula a determinante de uma matriz quadrada de ordem 2"); printf("\n\nEntre com os valores a da matriz:\n"); for(x=0;x<2;x++) { for(y=0;y<2;y++) { printf("mat[%d][%d]=",x+1,y+1); scanf("%d",&mat[x][y]); } /*fim do for*/ } /*fim do for*/ det=mat[0][0]*mat[1][1]-mat[1][0]*mat[0][1]; /*formula para calcular a determinante */ printf("Determinante da matriz = %f\n",det); } /*fim do programa*/

Linguagem C++

Vetores, Matrizes e Funes

Reviso de Funes
O que so Funes? (ou subprogramas ou subrotinas)

So trechos de cdigo fonte agrupados sob um nome, que podem ser chamados sempre que for necessrio executar uma determinada ao programada neste trecho;
Como usar funes?

Atribui-se um nome uma seqncia de comandos, e faz-se referncia a este nome nos vrios lugares do programa onde a seqncia em questo deveria ser repetida.

Reviso de Funes
Por que usar funes?
Evita escrita repetida de cdigo (uma certa seqncia de comandos deve ser repetida em vrios lugares de um programa). Economiza o tempo gasto com o trabalho de copiar estas seqncias; Evitar a necessidade de mudar em mltiplos lugares caso deseje alterar o seu funcionamento; Dividir grandes tarefas de computao em tarefas menores: Facilita o gerenciamento de grandes sistemas e Aumenta a confiabilidade dos mesmos.

Resumo: Principais motivaes para uso das funes! Evitar repetio de cdigo

Modularizao

Reviso de Vetores
Vetores so Estruturas de Dados Homegneas, isto , capazes de armazenar uma quantidade pr-definida de valores do mesmo tipo Necessitam de apenas um ndice de acesso. Declarao:

tipo nomedovetor[DimMax]; Onde:


tipo:um dos tipos primitivos de dados em C (char, int, float, double) nomedovetor: segue as mesmas regras das variveis bsicas DimMax: define o nmero mximo de elementos do vetor pode ser uma expresso constante inteira

Reviso de Vetores
#include <stdio.h> #include <stdlib.h> #define NUM_ALUNOS 3 int main( ) { float notas [NUM_ALUNOS]; float media_turma = 0.0; int i; for ( i = 0; i < NUM_ALUNOS; i++ ) { printf ("Digite a nota do %d o. aluno: ", i+1); scanf ("%f", &notas[i]); } for ( i = 0; i < NUM_ALUNOS; i++ ) { media_turma += notas[i]; } media_turma = media_turma / NUM_ALUNOS ; printf ("A media da turma eh %.2f \n", media_turma); system ("Pause"); return 0; }

Vetores e Funes
#include <stdio.h> #include <stdlib.h> #define NUM_ALUNOS 3 float media ( float notas[], int n ) { int i = 0; float m = 0.0; for ( i = 0; i < n; i++ ) { m = m + notas[i] ; } m = m / n; return m; } } int main( ) { float notas [NUM_ALUNOS]; float media_turma; int i; for ( i = 0; i < NUM_ALUNOS; i++ ) { printf ("Digite a nota do %d o. aluno: ", i+1); scanf ("%f", &notas[i]); } media_turma = media ( notas, NUM_ALUNOS ); printf ("A media da turma eh %.2f \n", media_turma); system ("Pause"); return 0;

Vetores e Funes
E para calcular o nmero de alunos com notas acima da mdia? A funo de clculo de mdia pode ser a mesma j utilizada..... E agora criamos a funo de clculo da quantidade de alunos acima da mdia!
#include <stdio.h> #include <stdlib.h> #define NUM_ALUNOS 3 float media ( float notas[], int n ) { int i = 0; float m = 0.0; for ( i = 0; i < n; i++ ) { m = m + notas[i] ; } m = m / n; return m; }

Vetores e Funes
int conta_alunos_acima_da_ media ( float notas[], int n, float media) { int i, conta = 0; for ( i = 0; i < n; i++ ) { if (notas[i] > media) { conta += 1; } } return conta; }

Vetores e Funes
int main( ) { float notas [NUM_ALUNOS]; float media_turma; int i, melhores_alunos; for ( i = 0; i < NUM_ALUNOS; i++ ) { printf ("Digite a nota do %d o. aluno: ", i+1); scanf ("%f", &notas[i]); } media_turma = media ( notas, NUM_ALUNOS ); printf ("A media da turma eh %.2f \n", media_turma); melhores_alunos=conta_alunos_acima_da_ media(notas, NUM_ALUNOS, media_turma); printf (E o numero de alunos com nota acima da media foi: %d .\n, melhores_alunos); system ("Pause"); return 0; }

Vetores e Funes
Desafio 1: Alterar o programa anterior para:
Receber duas notas bimestrais de cada aluno; Verificar se cada nota est entre 0.0 e 10.0; Calcular a mdia de cada aluno (e armazenar o valor em um vetor); Modificar o programa para apresentar os seguintes resultados: mdia geral da turma; nmero de alunos com mdia individual acima da mdia da turma.

Matrizes e Funes
Ser que possvel passar matrizes por parmetro? Se sim, como?

Matrizes e Funes
#include <stdio.h> #include <stdlib.h> #define NUM_ALUNOS 3

int main() {
float notas [NUM_ALUNOS][2], media_turma; int i; for ( i = 0; i < NUM_ALUNOS; i++ ) { printf ("Digite a 1a. nota do %d o. aluno \n: ", i+1); scanf ("%f", &notas[i][0]); printf ("Digite a 2a. nota do %d o. aluno \n: ", i+1); scanf ("%f", &notas[i][1]); }

media_turma = media_geral ( notas, NUM_ALUNOS );


printf ( "A media da turma eh %.2f \n", media_turma); system ("Pause"); return 0; }

Matrizes e Funes
float media_geral ( float notas[][2], int n ) { int i = 0; float m = 0.0; float notaaluno = 0.0; for ( i = 0; i < n; i++ ) { notaaluno = ( notas[i][0] + notas[i][1] )/2; m = m + notaaluno; } m = m / n; return m; }

Exerccio Complementar:

-

Elabore um programa que manipule os dados para uma sala de 40 alunos. O programa deve receber como entrada (via leitura de teclado):
Os nomes dos alunos (mximo 50 caracteres). As duas notas parciais.

O programa deve calcular e imprimir, numa mesma linha, para cada aluno: - O nome e a mdia final. E tambm deve apresentar:
A maior mdia da turma, e a menor mdia da turma. A quantidade de alunos aprovados, reprovados e em exame. Uma listagem com o nome dos alunos que iro para a final.

LINGUAGEM DE PROGRAMAO LINGUAGEM C


Funes, Matrizes, Vetores e Strings

2010/1

#include <stdio.h> float area(float r); /* declaracao do prototipo da funcao */ float potencia(float num, int pot); /* declaracao do prototipo da funcao */

Funes em C : Exemplo

float area(float r) /* Funcao que retorna a area da esfera*/ { return (4*3.14159*potencia(r,2)); /* retorna a area em um tipo float */ } float potencia(float num, int pot) /*Funcao que Eleva a uma potencia positiva um dado */ { float result = 0; /* declaracao de var. local */ int i = 0; if(pot < 0) return 0; /* Indica que houve erro */ if(pot == 0) return 1; result = num; for(i = 1; i < pot; i++) result *= num; return result; } void main(void) { char a; float raio = 0; printf("Digite o raio da esfera: "); scanf("%f", &raio); printf("A area da esfera e' %.2f", area(raio)); a=getchar(); a=getchar(); }

Funes recursivas em C
Em C, todos os argumentos de funes so passados por valor. A funo chamada recebe uma cpia dos valores dos argumentos e cria outras variveis temporrias para armazenar estes valores. A funo chamada no pode alterar o valor de uma varivel da funo que a chamou; ela s pode alterar sua cpia temporria.

C permite a criao de funes recursivas, isto , uma funo que possui dentro do seu corpo de instrues uma chamada a si prpria.

long int Fatorial(long int i) { if(i > 1) return i*Fatorial(i-1); else return 1; }

No exemplo, cada chamada recursiva da funo fatorial coloca mais uma varivel i do tipo long int na pilha (stack).

Funes recursivas em C: Exemplo


#include <ansi_c.h> #include <stdio.h> long Fatorial(long n); long Fatorial(long N) { if (N==0) return(1); else return(N*Fatorial(N-1)); } void main(void) { int num; long result; printf("Digite o nmero para calcular o fatorial"); scanf("%d", &num); result=Fatorial(num); printf("Resultado:%ld",result); getchar(); getchar(); }

Matrizes Unidimensionais: Vetores


Vetores: So tipos de dados estruturados mais conhecidos como arrays. Correspondem a conjuntos de elementos de um mesmo tipo representados por um nico nome. Vetor Cada elemento do array V[0] = 4 pode ser referenciado atravs de ndices. V[1] = 7
Declarao <Tipo><Nome_da_Var>[<tamanho>]; Ex: int v[30]; float n[10]; Atribuio v[i] = 10; v[2] = 12 + x; v[i+2] = 14;

V[4] = 3

Leitura for (i=0; i<30; i++) { printf("\n\nElemento %d: ",i+1); scanf(%d,&v[i]); }

Impresso printf("\n\nVetor: "); for (i=0; i<30; i++) printf(" %d ",v[i]);

Declarando e inicializando vetores


Inicializaco: float x[7]={-1.1,0.2,33.0,4.4,5.05,0.0,7.7}; x[0] x[1] x[2] x[3] x[4] x[5] x[6] = = = = = = = -1.1 0.2 33.0 4.4 5.05 0.0 7.7 Inicializador: seqncia de valores separados por virgula. O nmero de bytes para armazenar um vetor igual ao tamanho do tipo base (short = 2 bytes, double = 8 bytes, ) vezes o nmero de elementos. Para armazenar 100 elementos do tipo float so necessrios 100 * 32 = 3200 bits ou 400 bytes.

Vetores: Exemplo
#include <ansi_c.h> #include <stdio.h> #define N 5 void main(void) { int i=0, soma=0; int a[N]; // aloca cinco espacos de memoria for (i=0; i<N; i++) // armazena os valores nos espacos de memoria a[i]=7+i*i; for (i=0; i<N; i++) // Le os valores nos espacos de memoria printf("a[%d]=%d ", i, a[i]); for (i=0; i<N; i++) soma+=a[i]; printf("\nsoma=%d\n", soma); getchar(); }

Diretiva de pr-processamento usada para definir constantes simblicas.

Matrizes Unidimensionais: Strings


Em C, uma string uma matriz unidimensional (vetor) de caracteres e terminada por um caracter nulo \0. Strings so usadas para armazenar e manipular textos, palavras ou sentenas.
Ao lado temos as Funes suportadas em C para a manipulao de Strings. Elas usam o cabealho padro string.h

Strings: exemplo
#include <ansi_c.h> #include <stdio.h> #include <string.h> void main(void) { char s1[80]; char s2[80]; gets(s1); gets(s2); printf("Comprimentos: %d %d \n", strlen(s1), strlen(s2)); if (!strcmp(s1,s2)) printf("As strings sao iguais \n"); strcat(s1,s2); printf("%s\n", s1); strcpy(s1 "Isso e um teste\n"); printf("s1"); if (strchar("alo",'o')) printf("o esta em alo\n"); if (strstr("ola aqui","ola")) printf("\ola encontrado"); getchar(); getchar(); }

Registros
So conjuntos de dados logicamente relacionados, mas de tipos diferentes (inteiro, real, char, etc.).

Exemplo: Numa dada aplicao, podem-se ter os Matricula, Nota1 seguintes dados sobre os alunos de uma turma:
Nota2 , Mdia

Cada conjunto de informaes do aluno pode ser referenciado por um mesmo nome, por exemplo, ALUNO. Tais estruturas so conhecidas como registros, e aos elementos do registro d-se o nome de campos. Declarao Exemplo: Atribuio:

typedef struct { variaveis typedef struct { int mat; Nome-do-registro.campo = valor; }nome_do_tipo; float n1, n2, med; aluno.n1 = 5.0; }TAlunos; TAlunos aluno; scanf("%d", &aluno.mat);

Vetor de Registros
Podem-se ter conjunto de registros referenciveis por um mesmo nome e individualizados por ndices, atravs da utilizao de um vetor de registros.
Exemplo: Atribuio: typedef struct { int mat; nome-do-vetor[indice].campo = float n1, n2, med; valor; }TAlunos; aluno[3].n1 = 5.0; TAlunos aluno[30]; scanf("%d", &aluno[i].mat);

Vetor de Registros: Exemplo


#include <ansi_c.h> #include <stdio.h> void main(void) { { typedef struct {int mat,serie,irmao,mens; }Tescola; Tescola escola[30]; int i, qa; qa=2; for (i=0; i<qa; i++) { printf("\n\nDados do Aluno %d\n\n",i+1); printf("\n\tNumero de Matricula do Aluno: "); scanf("%d",&escola[i].mat); printf("\n\tSerie (1-4): "); scanf("%d",&escola[i].serie); printf("\n\tTem irmao na escola (1-sim, 2-nao)? "); scanf("%d",&escola[i].irmao); switch(escola[i].serie) {case 1: escola[i].mens = 110; break; case 2: escola[i].mens = 130; break; case 3: escola[i].mens = 160; break; case 4: escola[i].mens = 170; break; } if (escola[i].irmao == 1) escola[i].mens = escola[i].mens*0.8; printf("%d",escola[i].mens); } } getchar(); getchar();

Matrizes Bidimensionais:
A linguagem C suporta matrizes multidimensionais;
Para declarar uma matriz bidimensional de inteiros d com dimenses 10x20, temos: Para acessar o elemento 1,2 da matriz d, usamos: O nmero de bytes necessrios para armazenar uma matriz bidimensional dado por: Exemplo: carrega a matriz num de 1 a 12 e escreve linha por linha.
#include <ansi_c.h> #include <stdio.h> void main(void) { int t, i, num[3][4]; // Salve os numeros na matriz num for (t=0; t<3;++t) for (i=0; i<4;++i) num[t][i]=(t*4)+i+1; // Leia e escreva os numeros da matriz num for (t=0; t<3;++t) {printf("\t"); printf("\n"); for (i=0; i<4;++i) printf("%3d\t", num[t][i]);} printf("\n"); getchar(); }

Matrizes de Strings
Para criar uma matriz de strings usa-se uma matriz bidimensional de caracteres. O tamanho do ndice esquerdo indica o nmero de strings e o tamanho do ndice direito indica o comprimento mximo de cada string. O cdigo seguinte declara uma matriz de 30 strings onde cada uma tem um comprimento mximo de 79 caracteres: Para acessar uma string, especifica-se no comando de gets() apenas o ndice esquerdo:

Matrizes de Strings : Exemplo


O programa ao lado usa a matriz de strings como base para um pequeno editor de textos. O programa recebe linhas de texto at que uma linha em branco seja inserida. Em seguida ele mostra cada linha com um caracter por vez.
#include <ansi_c.h> #include <stdio.h> #define MAX 100 #define LEN 100 char texto[MAX][LEN]; //Um editor de textos muito simpls void main(void) { register int t, i, j; printf("Digite uma linha vazia para sair. \n"); for (t=0; t<MAX; t++) { printf("%d", t); gets(texto[t]); if(!*texto[t]) break; //sai com linha em branco } for (i=0; i<t; i++){ for (j=0; texto[i][j]; i++) putchar(texto[i][j]); putchar('\n'); } getchar(); }

Exerccios(1)
1. Ler um conjunto de nmeros e imprimi-los na ordem inversa da leitura. A quantidade de nmeros tambm ser lida e ser no mximo 20. 2. Ler o tamanho e os elementos de dois vetores e em seguida, caso os vetores tenham o mesmo tamanho, gere e imprima um vetor SOMA, onde seus elementos sero formados pela soma dos elementos de mesmos ndices dos dois vetores lidos 3. Ler um vetor de nmeros e imprimir os nmeros das posies PARES e em seguida os nmeros das posies MPARES. 4. Ler dois vetores e caso tenham tamanhos iguais armazene seus elementos alternadamente em um terceiro vetor. 5. Ler um vetor de nmeros inteiros e imprimir as posies do maior e do menor elemento do vetor. Assuma que no existem elementos repetidos no vetor. 6. Ler um conjunto de matrcula e notas dos alunos de uma turma e imprima a matricula dos alunos de tiveram nota acima da mdia das notas da turma. 10. Ler dois vetores de nmeros e gerar um terceiro vetor formado pela INTERSECO dos dois vetores lidos. 11. Ler dois vetores de nmeros e gerar um terceiro vetor formado pela DIFERENA dos dois vetores lidos. 12. Ler dois vetores de nmeros e gerar um terceiro vetor formado pela UNIO dos dois vetores lidos. 13. Ler um vetor e gerar um segundo vetor com os elementos do vetor lido menos os elementos repetidos. Ex : VetorLido = 5 1 2 7 5 3 7 5 9 3; VetorGerado = 5 1 2 7 3 9 14. Ler um vetor de nmeros e imprimir os nmeros que se repetem nesse vetor.

Exerccios(2)
15. Escreva uma funo que indique quantas vezes aparece um determinado caractere em uma dada string. 16. Escreva uma funo que localize um caractere em uma string, substituindo-a por outro. 17. Escreva uma funo que insira um determinado caractere em uma determinada posio de uma string. 18. Escreva uma funo que retire todos os caracteres brancos, tabulaes ou nova linha [enter] de uma dada string. 19. Escreva um programa que converta todas os caracteres minsculos de uma string para o correspondente caractere maisculo. 20. Escreva um programa para criar uma tabela com os seus horrios ocupados e compromissos na semana. Armazene o valor de cada compromisso atravs de uma tabela de strings. Inicialize a tabela com valor 0, e solicite ao usurio que fornea o seu horrio. Por fim, apresente na tela o resultado obtido.

Exerccios (3)
21. Use uma matriz bidimensional para armazenar as notas de cada aluno. O professor tem trs turmas e um mximo de 30 alunos por turma. Use a sugesto:

22. Crie um programa para calcular a matriz transposta de uma dada matriz. Aloque uma memria para uma matriz bidimensional com dimenso mxima de 10x10. Crie uma funo para inicializar a matriz com zeros. Depois questione o usurio para sob a dimenso da matriz que ele deseja calcular a transposta, considerando a dimenso mxima permitida. Em seguida, adquira os valores dos termos que compem a matriz, solicitando ao usurio que fornea estes dados. Por fim, calcule a transporta da matriz e escreva na tela o resultado final da matriz.

Exerccios (4)
23. Fazer um programa para a companhia de energia eltrica da cidade. Para cada consumidor so fornecidos os seguintes dados: matrcula do consumidor, nome, tipo do consumidor (1-comercial, 2-industrial, 3residencial), quantidade de KWh consumidos no ms. O programa ir calcular o valor da conta. O programa ir ler uma quantidade de consumidores e armazenar os dados dos consumidores em um vetor de registro. Imprimir um relatrio contendo os dados do consumidor e o valor que o mesmo deve pagar e no final, imprimir o relatrio estatstico: Total a ser arrecadado pela empresa de energia Media de consumo das industrias Total de consumo das residncias Quantidade de estabelecimentos comerciais OBS: Valor de 1 KWh Residncia: R$ 5,00 Comrcio: R$ 3,00 Indstria: R$ 2,00