Você está na página 1de 30

Introduo

Programao
IntroduoLinguagemC

Prof.Dr.AdrianoCaminha
adriano@puvr.uff.br
Profa.Dra.VeraCaminha
veracaminha@puvr.uff.br

ICEx/UFF
VoltaRedondaRJ
19992011
IntroduoProgramaoIntroduoLinguagemC

Sumrio

ComandosCondicionaisAninhados........................................................ 03
SeleodeMltiplaEscolha.................................................................... 05
Exerccios.................................................................................................. 08
ComandodeRepetiofor....................................................................... 09
Exerccios.................................................................................................. 11
ContadoreseAcumuladores.................................................................... 12
ComandodeRepetiowhile.................................................................. 13
ComandodeRepetiodo...while.......................................................... 14
OperadorCondicionalouTernrio......................................................... 15
Exerccios.................................................................................................. 16
VetoresouArraysUnidimensionais....................................................... 16
InicializaodeVetores........................................................................... 17
Diretiva#define........................................................................................ 19
VetoresdeCaracteres.............................................................................. 21
FunesparaManipulaodeStrings................................................... 22
Exerccios.................................................................................................. 26
MatrizesBidimensionais......................................................................... 27
Exerccios.................................................................................................. 30

Downloaddaapostila:www.templojava.org(cadastreseevisiteApostilaseLivros)

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 2
IntroduoProgramaoIntroduoLinguagemC

ComandosCondicionaisAninhados

Muitas vezes, os programas podero envolver vrias condies


excludentes(if...else...if...).

Sintaxe: if (condio 1) {
bloco de cdigo 1
} else if (condio 2){
bloco de cdigo 2
}
...
else if (condio n){
bloco de codigo n
}
else {
bloco de cdigo
}

Se condio 1 for verdadeira bloco de cdigo 1 ser


executado.
Caso contrrio, as condies sero avaliadas sucessivamente at
queumasejaverdadeiraouchegueaoltimoelse,ondeoblocodecdigo
serexecutado.
Observequeapenasumblocodecdigoserexecutado.

Exemplo1:Lerumnmerointeiroemostrarsemenorque200,
maiorque500ouestentre200e500.

#include <stdio.h>
main()
{ int n;

printf("Inteiro: ");
scanf("%d", &n);

if (n < 200){
printf("Menor que 200.\n");
} else if (n > 500) {
printf("Maior que 500.\n");
} else {
printf("Entre 200 e 500.\n");
}

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 3
IntroduoProgramaoIntroduoLinguagemC

Exemplo2:Lertrsnmerosinteiroseimprimiromaiorvalorlido
(suponhanmerosdiferentes).

#include <stdio.h>
main()
{ int a, b, c;
printf("Entre com trs nmeros inteiros: ");
scanf("%d, %d, %d", &a, &b, &c);
if (a>b && a>c)
{ printf("Maior: %d.\n", a);
} else if (b>c) {
printf("Maior: %d.\n", b);
} else {
printf("Maior: %d.\n", c);
}
}

Exerccio: Escreva um programa que leia um nmero inteiro e


imprimaumadasmensagens:Maiorque20,Iguala20ouMenorque
20.

Exerccio27(ListadeExerccios1):LeramatrculaeasnotasV1
eV2deumaluno.Imprimaamatrcula,asnotaseamdiaaritmticado
alunoeumadasmensagens:

Aprovado,seamdiaformaiorque6.0;
Reprovadoseamdiaformenorque4.0;
FazerVScasocontrrio.

Exemplo3(leituradecaractereapsumvalornumrico):Ler
aidadeeosexodeumapessoaeimprimeaidadeeosexocasoapessoaseja
dosexomasculino.

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

printf("Idade: ");
scanf("%d", &idade);

//Esvazia o buffer de entrada antes de ler o caractere


fgetc(stdin);
printf("Sexo (M ou F): ");
scanf("%c", &sexo);

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 4
IntroduoProgramaoIntroduoLinguagemC

if (sexo=='m' || sexo=='M'){
printf("%d - Sexo masculino.", idade);
} else if (sexo=='f' || sexo=='F'){
printf("Sexo feminino .\n");
}
}

SeleodeMltiplaEscolha

switchcaseumaestruturaquesimplificaoprogramanousode
deciso de mltiplos blocos quando a expresso de controle (condio)
envolvertiposintouchar.
Oresultadodaexpresso comparadoaovalor decada um dos
rtulosdecadacaseeoscomandossoexecutadosapartirdessertulo.

Sintaxe: switch(expresso)
{ case constante1:
bloco de cdigo 1;
break;
case constante2:
bloco de cdigo 2;
break;

...

case constanteN:
bloco de cdigo n;
break;
default:
bloco de cdigo;
break;
}

Onde:
expressodotipointouchar;
constante1,, constanteN soconstantes(variveisouvalores)
intouchar;

Ousodocomando break forarasadadocomando switch ea


execuodoprximocomandodoprograma.
A clusula default forar a execuo do bloco de cdigo se
nenhumdosoutroscasos(case)forexecutado.

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 5
IntroduoProgramaoIntroduoLinguagemC

Exemplo1:Lerumnmerorealeexecutarumadasopesabaixo:
1Dobro;
2Metade;
3Quadrado.
Paraqualqueroutraopo,imprimirOpoinvlida.

#include <stdio.h>
#include <math.h> //compilar com gcc nome -lm
main()
{ int op;
float n;
printf("\nNmero real: ");
scanf("%f", &n);
printf("\n\n1 - Dobro.\n2 - Metade.\n3 -
Quadrado.\n\nOpo: ");
scanf("%d", &op);

switch (op)
{ case 1:
printf("\nDobro = %f.\n\n", n*2);
break;
case 2:
printf("\nMetade = %f.\n\n", n/2);
break;
case 3:
printf("\nQuadrado=%f.\n\n", pow(n,2));
break;
default:
printf("\nOpo invlida.\n\n");
}
}

Exerccio:Lerdoisinteirosemostrarasopes:
1Soma;
2Subtrao;
3Produto;
4Divisointeiro;
5Divisoreal;
6Restodadiviso;

Apsaseleodaopodesejada,imprimaoresultadonatela.Para
qualqueroutraopoimprimaOpoinvlida.

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 6
IntroduoProgramaoIntroduoLinguagemC

Exemplo2:Lerocdigodeumdeterminadoprodutoemostrarasua
classificao.Utilizaraseguintereferncia:

Cdigo Classificao
1 Alimentonoperecvel
2,3ou4 Alimentoperecvel
5ou6 Vesturio
7 Higienepessoal
8,9ou10 Limpezaeutensliosdomsticos
Qualqueroutrocdigo Invlido

#include <stdio.h>
#include <math.h>
main()
{ int op;
printf("\nEscolha o cdigo do produto: ");
scanf("%d", &op);

switch (op)
{ case 1:
printf("\nAlimento no perecvel.\n\n");
break;
case 2: //sem break = unio dos cases
case 3:
case 4:
printf("\nAlimento perecvel.\n\n");
break;
case 5:
case 6:
printf("\nVesturio.\n\n");
break;
case 7:
printf("\nHigine pessoal.\n\n");
break;
case 8:
case 9:
case 10:
printf("\nLimpeza e utenslios
domsticos.\n\n");
break;
default:
printf("\nOpo invlida.\n\n");
}
}

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 7
IntroduoProgramaoIntroduoLinguagemC

Exerccios

1EscrevaumprogramaqueleiatrsnmerosinteirosA,BeC,
calculeeimprimaovalordaseguinteexpresso:
D=(R+S)/2,ondeR=(a+b)^2eS=(B+C)^2

2 Escreva um programa que leia um nmero real e mostre as


opesabaixo:
aCalcularaizquadrada;
bCalculaaraizcbica;
cCalculaoquadrado;

Apsaseleodaopo,imprimaoresultado.Paraqualqueroutra
opoimprimaamensagemOpoInvlida.

3Escrevaumprogramaqueleiaamdiadeumalunoeimprimao
valordeseuconceitosegundoatabelaabaixo:

Mdia Conceito
De0.04.9 D
De5.0a6.9 C
De7.0a8.9 B
De9.0a10.0 A

4EscrevaumprogramaqueleiaoraioRdeumaesferaecalculeo
volumeearea.
V=4/3*pi*r^3

A=4*pi*r^2

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 8
IntroduoProgramaoIntroduoLinguagemC

ComandodeRepetiofor

aestruturaderepetiomaissimpleseusadapararepetirum
ouvrioscomandosquantasvezesforemnecessrias.
a estrutura mais indicada quando o nmero de repeties for
conhecido.
Ocontroledonmeroderepetiesfeitoatravsdeumavarivel
contadora.

Sintaxe: for(inicializao; condio; incremento)


{ bloco de cdigo
}

Onde:
inicializao uma expresso que contm o valor inicial da
varivelcontadoraesexecutadaumaveznoincio.
condio uma expresso lgica e/ou relacional de controle de
repetio.
bloco de cdigooconjuntodeinstruesaserexecutado.

Exemplo1:Imprimirosnmerosde0a100.

#include <stdio.h>
main()
{
int i; //varivel de controle (ndice do lao)
for(i=0; i<=100; i++) //crescente
{ printf("%d \t", i);
}
printf("\n");
}

Exemplo2:Imprimirosnmerosde100a0.

#include <stdio.h>
main()
{ int i;
for(i=100; i>=0; i--) //decrescente
{ printf("%d \t", i);
}
printf("\n");
}

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 9
IntroduoProgramaoIntroduoLinguagemC

Exemplo3:Imprimirosnmerosparesentre0e100,inclusive.

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

Exemplo4:Imprimirosnmerosmparesentre0e100,inclusive.

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

Exemplo5:Ler10nmerosinteiroseimprimirovalordodobrode
cadanmerocasoonmerosejapar.

#include <stdio.h>
main()
{ int i, n;
for(i=0; i<10; i++)
{ printf("Entre com um nmero: ");
scanf("%d", &n);
if(n%2==0){
printf("%d.\n",n*2);
} else {
printf("Impar.\n");
}
}
}

Exemplo6:Ler10nmerosreaiseparacadanmerotestar:seo
nmeroforpositivo,imprimiraraizquadrada,seno,imprimiroquadrado
donmero.

#include <stdio.h>
#include <math.h>
main()
{
19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 10
IntroduoProgramaoIntroduoLinguagemC

int i;
float n;
for(i=0; i<10; i++)
{ printf("Entre com um nmero real: ");
scanf("%f", &n);
if(n>0){
printf("Raiz = %.2f.\n", sqrt(n));
} else if (n<0){
printf("Quadr = %.2f.\n", pow(n,2));
} else {
printf("Zero ;D\n");
}
}
}

Exerccios

Faaosexerccios3a24daLista2.

ProcurerevisarosseusalgoritmosemPortugolcorrespondentesa
estesexercciosetentereescrevlosemlinguagemC,esteo
processonormaldeescritadeumbomprograma.

Comeceescrevendoosprogramasnocaderno,sdepoispassepara
oseueditorparaentooscompilareexecutar,anotandonocaderno
ospossveiserrosecorrees.

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 11
IntroduoProgramaoIntroduoLinguagemC

ContadoreseAcumuladores

Contador umavarivelusadapara contar onmerodevezes


queumcertoclculooublocodecomandos executado,ouseja,calcular
umacertaquantidade.

Exemplo1(contador):Ler10nmerosinteirosecontarquantos
paresforaminformados.

#include <stdio.h>
main()
{ int i, n, cont;

//para contar em loop necessrio


//inicializar o contador
cont = 0;

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


{ printf("\nInteiro: ");
scanf("%d", &n);

if( n % 2 == 0) //se for par


cont++; //conta (incrementa o contador)
}

printf("\nInformados %d pares.", cont);


}

Acumulador uma varivel usada para guardar a soma dos


contedosouvaloresdeoutrasvariveis.

Exemplo2(acumulador):Mostrarasomadosinteirosde0a100.

#include <stdio.h>
main()
{ int i, soma;

soma=0; //necessrio inicializar acumulador


for( i=0 ; i<=100 ; i++)
soma = soma + i; //soma ou acumula

printf("\nSoma = %d.\n\n", soma);


}

Exerccio: Ler 10 inteiros. Exibir a soma dos positivos e a


quantidadedosnegativos.
19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 12
IntroduoProgramaoIntroduoLinguagemC

ComandodeRepetiowhile

O comando while repete o bloco, enquanto a condio for


verdadeira.
Primeiro, a condio testada. Se for verdadeira, o bloco
executado.
Seforfalsalogonoincio,obloconuncaserexecutado.
CUIDADO: As variveis usadas na condio devem ser
inicializadasantesdowhile.
CUIDADO:Ovalordavariveldecontroledacondio deveser
alterado dentro do bloco de cdigo. Caso contrrio, entrar em loop
infinitoquandoforexecutado.

Sintaxe: while( condio )


{ bloco de cdigo
}

Onde:
condio uma expresso relacional e/ou lgica (o resultado
deverserverdadeirooufalso).

Exemplo1:(mostrarosinteirosde0a100)
#include <stdio.h>
main()
{ //inicializao da varivel de controle
int i = 0;

while( i <= 100 )


{ printf("%d \t ", i);
i++; //muda o valor da varivel da condio
}

printf("\n\n");
}

Exemplo2:(mostrarosinteirosde100a0)
#include <stdio.h>
main()
{ //inicializao da varivel de controle
int i = 100;

while( i >= 0 )
{ printf("%d \t ", i);
i--; //muda o valor da varivel da condio
}
printf("\n\n");
}
19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 13
IntroduoProgramaoIntroduoLinguagemC

Exerccio1:Ler vrios nmeros inteiros eimprimiro triplo do


nmerocasosejapositivo.Casocontrrio,imprimirodobrodonmero.O
programaencerraquandofordigitadoovalor0(zero).

Exercicio 2: Ler vrios nmeros inteiros positivos. Imprimir


quantos nmeros foram digitados e a soma dos nmeros. Condio de
parada:0ounegativo.

ComandodeRepetiodo...while

Parecidocomorepita,doPortugol,ondeoblocoexecutado
pelomenosumavez,poistestaacondionofinal.
Executaoblocoumavezerepeteoblocoenquantoacondio
forverdadeira.

Sintaxe: <inicializao varivel de controle>


do
{ bloco de cdigo
} while ( condio );

Exemplo1:Ler10nmerosreaiseimprimiroquadradodecadaum.

#include<stdio.h>
main()
{ int i=10; //inicializao
float n;

do
{ printf(\n Real: );
scanf(%f, &n);
printf(\t quadrado= %f, n*n);
i--; //muda a varivel de controle
} while ( i > 0 ); //verdadeiro = repete do
}

Exercicio:Leruminteiroemostrarasseguintesopes:
1dobro
2cubo
3raizquadrada
4sair
Usedo...whiletestandoseaoponoadesada.
Use switch...case emostrecadaresultadodeacordocomcada
opoatquesejaescolhidaaopodesair.
19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 14
IntroduoProgramaoIntroduoLinguagemC

OperadorCondicionalouTernrio

Ooperadorternrio?usadoemexpressescondicionais.
Necessitadetrsoperandoseseuusopodersimplificarocomando
if...elsesimples.

Sintaxe:condio ? expresso1 : expresso2;

Leia: Se condio for verdadeira ento expresso1, seno


expresso2.

Exemplo:
int a = 200, b = 100, c;
c = ( a > b ) ? a : b;
//a maior que b, ento c = 200

Exemplo1:Lerdoisinteiroseimprimiromenor.

#include <stdio.h>
main()
{ int a, b, c;
printf("\n\nInforme dois inteiros: ");
scanf("%d, %d", &a, &b);

c = ( a < b ) ? a : b;

printf("\n\nMenor = %d.\n\n", c);


}

Exemplo2:Lertrsinteiroseimprimiromenor.

#include <stdio.h>
main()
{ int a, b, c, d;
printf("Entre com trs nmeros inteiros: ");
scanf("%d, %d, %d", &a, &b, &c);

d = ( a<b && a<c ) ? a : ( b<c ) ? b : c;

printf("\n\nMenor = %d\n\n", d);


}

Exemplo3:Lerdoisinteiroseimprimiromenor.
#include <stdio.h>
main()
{ int a, b;

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 15
IntroduoProgramaoIntroduoLinguagemC

printf("\n\nInforme dois inteiros: ");


scanf("%d, %d", &a, &b);

//uso no printf para selecionar a impresso


printf("\n\nMenor = %d.\n\n", (a<b)? a : b);
}

Exerccios

Faa os exerccios 1 a 35 da Lista 2 reescrevendo verses das


soluescomwhileedo...whilesemprequepossvel.

ProcurerevisarosseusalgoritmosemPortugolcorrespondentesa
estes exerccios e tente reescrevlos em linguagem C, este o
processonormaldeescritadeumbomprograma.

Comeceescrevendoosprogramasnocaderno,sdepoispassepara
oseueditorparaentooscompilareexecutar,anotandonocaderno
ospossveiserrosecorrees.

VetoresouArraysUnidimensionais

Umvetor umconjuntodevariveisreferenciadoporum nico


nome,ondecada varivel tem omesmo tipoe acessada atravs deum
ndice.
Otamanho,nadeclarao,eosndices,nosacessosaosvalores,so
escritossempreentrecolchetes.
EmC,ondicecomeapelo0(zero).

Declaraodeumvetor:

tipo nome[tamanho];

Exemplo: int vetor[10];

ndices 0 1 2 3 4 5 6 7 8 9
vetor

Aloca memria para armazenar 10 inteiros e declara a varivel


vetorcomoumvetorde10elementos.
Paraacessarumdeterminadoelementodovetor,devesechamaro
elementopelonomedavarivelepeloseundice(entrecolchetes).
19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 16
IntroduoProgramaoIntroduoLinguagemC

Exemplo: vetor[0] = 7;
...
vetor[9] = 3;

Exemplo1:Lereimprimirumvetorcom5inteiros.

#include <stdio.h>
main()
{ int vet[5], i; //declara vetor vet tamanho 5

printf("\n\nLeitura:\n");
for(i=0; i<5; i++)
{ printf("\nInforme o elemento %d: ", i);
scanf("%d", &vet[i]); //vet posio i
}

printf("\n\nImpressao:\n\n");
for(i=0; i<5; i++)
printf("%d\t", vet[i]);

printf("\n\n");
}

InicializaodeVetores

Osvetoresocupamespaonamemria.
Ainicializaopodeserfeitaatravsdeleituraouatribuiode
valores.

Exemplo:Declaraoseminicializao.

float v[20]; //reserva espao para 20 elementos float

Exemplo:Declaraocominicializao,parapequenosvetores.

int numDias[12] ={31,28,31,30,31,30,31,31,30,31,30,31};

Ser inicializada uma varivel chamada numDias contendo o


nmerodediasdecadamsdoano.
Nestescasos,onmerodeelementospodeseromitido:

Exemplo: Na inicializao de pequenos vetores o tamanho est


implcitononmerodeelementos.

int numDias[] ={31,28,31,30,31,30,31,31,30,31,30,31};


19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 17
IntroduoProgramaoIntroduoLinguagemC

possvel declarar variveis para vetores do mesmo tipo numa


nicadeclarao.

Exemplo: int x[10], y[20], z[30];

Exerccio:Oquefazoprogramaabaixo?

#include <stdio.h>
main()
{ int i, v[10];

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


v[i] = 0;

printf("Elementos do vetor:\n\n");
for(i=0; i<10; i++)
printf("%d\t", v[i]);

printf("\n");
}

Resposta:Atribuizeroparatodasasposiesdovetoreoimprime.

Exemplo 1: Ler um vetor com 10 elementos inteiros. Imprimir o


vetornaordeminversa.

#include <stdio.h>
main()
{ int i, x[10];

printf("\n\nLeitura:\n\n");
for(i=0; i<10; i++) //incrementando
{ printf("Digite um valor inteiro: ");
scanf("%d", &x[i]);
}
printf("\nInverso:\n");
for(i=9; i>=0; i--) //decrementando
printf("%d\t", x[i]); //apenas imprime invertido
//CUIDADO: desta forma NO gera um novo vetor!!

printf("\n\n");
}

Exemplo 2: Ler e imprimir um vetor com 10 posies. Imprimir


tambmasomaeamdiadoselementosdovetor.

#include <stdio.h>
main()
19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 18
IntroduoProgramaoIntroduoLinguagemC

{ int x[10], soma=0, i;

printf("\nLeitura:\n\n");
for(i=0; i<10; i++)
{ printf("\nElemento %d: ", i);
scanf("%d", &x[i]);
}

printf("\n\nImpressao: "); //e soma


for(i=0; i<10; i++)
{ printf("%d\t", x[i]);
soma += x[i];
}

printf("\nSoma = %d", soma);


printf("\nMdia = %.2f\n", (float)soma/10);
}

Exerccio:Lereimprimirumvetorcom10nmerosinteiros.Logo
aps,calculareimprimir:
Amdiaentreosvaloresdoselementosdovetor.
Aquantidadedepareseaquantidadedempares.

Diretiva#define

Adiretiva #define dopreprocessador usadaparadefiniruma


constantesimblica.
Umaconstantesimblicaumidentificadorquesubstitudopor
um valor pelo preprocessador na linguagem C, antes do programa ser
compilado.
Quando preprocessado, todas as ocorrncias da constante
simblicasosubstitudaspelovaloroutextodesubstituio.

Exemplo: #define MAX 10

Exemplo 1: Ler e imprimir dois vetores a e b com 10 elementos


inteiroscada.Logoaps,gerarovetorsomaeovetordifapartirdosdois
vetoreslidos.

#include <stdio.h>
#define MAX 10 //tamanho dos vetores
main()
{ int i, a[MAX], b[MAX], soma[MAX], dif[MAX];

printf("\n\nLeitura:");
19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 19
IntroduoProgramaoIntroduoLinguagemC

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


{ printf("\nElemento a[%d]: ", i);
scanf("%d", &a[i]);
}

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


{ printf("\nElemento b[%d]: ", i);
scanf("%d", &b[i]);

//vetores soma e diferena


soma[i] = a[i] + b[i];
dif[i] = a[i] - b[i];
}

//impresses
printf("\n\nVetor a: ");
for(i=0; i<MAX; i++)
printf("%d\t", a[i]);

printf("\nVetor b: ");
for(i=0; i<MAX; i++)
printf("%d\t", b[i]);

printf("\nVetor soma: ");


for(i=0; i<MAX; i++)
printf("%d\t", soma[i]);

printf("\nVetor diferena: ");


for(i=0; i<MAX; i++)
printf("%d\t", dif[i]);
}

printf("\n\n\n");
}

Exerccio:Lereimprimirdoisvetoresdeinteirosdemesmotamanho
(use #define paracriaraconstantecomotamanho).Logoaps,gerare
imprimir:
Ovetorprodutoentreosvetoreslidos;
Ovalordoprodutointernoentreeles;

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 20
IntroduoProgramaoIntroduoLinguagemC

VetoresdeCaracteres

Umvetordecaracteres,tambm conhecido como string,usado


paramanipulartextos,palavras,nomes,frases,etc.
Cadaelementodovetortambmpodeseracessadoindividualmente
atravsdecolchetes.
Uma varivel do tipo string declarada como um vetor de
caracteres.

Sintaxe: char nome_vetor[tamanho];

Exemplo: char nome[80];

Estadeclaraocriaumavarivelnomecomoumastringouvetor
de caracteres, permitindo um comprimento de 79 caracteres, mais o
caracteredefimdestring\0.

nome
\0
0 1 2 ... 78 79

Sempre que o computador encontra qualquer valor entre aspas


duplas ele reconhece que se trata de uma string constante, ou seja, os
caracteresentreaspasmaisocaracterenulo\0.

Exemplo2: char nome[5] = Pedro;


DECLARAOINVLIDA!!!

Altimaposiodeveserreservadaparaocaractere\0,ento,s
possvel utilizar 4 caracteres na string acima, ou seja, tamanho 1
caracteres.
Est errado atribuir 5 caracteres a um vetor de caracteres de
tamanho5(nosedeveesqueceroespaoparacaracteredefimdestring).

Exemplo3: char nome[5] = Caio;


Essasim,umadeclaraovlida!!!

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 21
IntroduoProgramaoIntroduoLinguagemC

FunesparaManipulaodeStrings

1gets(bibliotecastdio.h)
Lumastringviateclado.
Estecomandogeraumawarning(aviso),ignoreoaviso.

Sintaxe: gets(nome_vetor);

Exemplo:

#include <stdio.h>
main()
{ char nome[50];
printf("\nSeu nome: ");
gets(nome); //%s para strings
printf("\n\nOl, %s !\n\n",nome);
//%s para strings
}

2strcpy(biblioteca:string.h)
Copiaastringorigemparaastringdestino.

Sintaxe: strcpy(destino, origem);

Exemplo:

#include <stdio.h>
#include <string.h>
main()
{ char s1[100], s2[100], s3[100];
printf("\nInforme uma string qualquer: ");
gets(s1);
//copiar o valor de s1 para s2
strcpy(s2, s1);
//copiar texto entre aspas para s3
strcpy(s3,"string informada: ");
//mostrar
printf("\n\n%s %s\n\n",s3 ,s2);
}

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 22
IntroduoProgramaoIntroduoLinguagemC

3strcat (bibliotecastring.h)
Concatenaduasstrings.
Astringorigemficarinalteradaeseranexadaaofinalda
stringdestino.
Mascuidado,otamanhodastringdestinotemquesersuficiente
paraconterastringresultadodaconcatenao.

Sintaxe: strcat(destino, origem);

Exemplo:(fonte:www.cplusplus.com)

#include <stdio.h>
#include <string.h>
main()
{ char s1[100], s2[100];
printf("\nInforme uma string: ");
gets(s1);
strcpy(s2,"string informada: ");
strcat(s2, s1); //concatena
printf("\n\n%s\n\n", s2);
}

4strlen (biblioteca:string.h)
Retornaotamanhodastringfornecida,semcontarocaractere
\0.
Sintaxe:int nomeVar = strlen(string_nome);

Exemplo:

#include <stdio.h>
#include <string.h>
main()
{ char s1[100];
int tam;
printf("\nInforme uma string qualquer: ");
gets(s1);
tam = strlen(s1);
//mostrar
printf("\n\nA string \"%s\" tem %d caracteres.\n\n", s1,
tam);
}

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 23
IntroduoProgramaoIntroduoLinguagemC

5strcmp(bibliotecastring.h)
Compara duas strings. Se as duas forem idnticas, a funo
retorna0(zero),seforemdiferentes,afunoretornaumvalordiferentede
zero.

Sintaxe: strcmp(destino, origem) //comparao

Exemplo:

#include <stdio.h>
#include <string.h>
main()
{ char s1[100], s2[100];
printf("\nInforme uma string: ");
gets(s1);
gets(s2);

//comparando
if( strcmp(s1, s2) ) //se iguais 0(executa o else)
printf("\nDiferentes.\n");
else
printf("\nIguais.\n");
}

6toupper(biblioteca:ctype.h)
Retornaocaractereconvertidoparamaisculo.

Sintaxe: char nome = toupper (caractere);

Exemplo:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
main()
{ char s[100];
int i, tam;
printf("\nInforme uma string qualquer: ");
gets(s);
tam = strlen(s);

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 24
IntroduoProgramaoIntroduoLinguagemC

//maiusculas
for(i=0; i<tam; i++)
s[i] = toupper(s[i]); //um por um

//mostrar
printf("\n\n%s\n\n", s);
}

ExerccioResolvido:Escrevaumprogramaqueexecuteas
seguintesaes,naordemabaixo:
Lerduasstringsdenomximo10caracteres,
Mostrarotamanhodecadauma,
Copiaraprimeiraparaumaterceirastringeimprimirestaterceira,
Compararasduaslidasemostrarumamensagem"iguais"ou
"diferentes",
Concatenarasegundalidaparaaterceirastringemostrar,
Converteraterceirastringparamaisculasemostrar.

Soluo:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
main()
{ char s1[0], s2[10], s3[20];
int i, tam1, tam2, tam3;
//leitura
printf("\nInforme uma string qualquer: ");
gets(s1);
printf("\nInforme outra string qualquer: ");
gets(s2);
//tamanhos
tam1 = strlen(s1);
tam2 = strlen(s2);

//mostrar tamanhos
printf("\n\n%s = %d caracteres", s1, tam1);
printf("\n%s = %d caracteres", s2, tam2);

//copiar o valor de s1 para s3


strcpy(s3, s1);

//mostrar copiada
printf("\ns3 (copiada) = %s", s3);

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 25
IntroduoProgramaoIntroduoLinguagemC

//comparar
if( strcmp(s1, s2) ) //iguais 0 else
printf("\ns1 e s2 so diferentes.");
else
printf("\ns1 e s2 so iguais.");

//concatenar o valor de s2 com s3


strcat(s3, s2);

//mostrar concatenada
printf("\ns3 (concatenada) = %s", s3);

//maiusculas
tam3 = strlen(s3);
for(i=0; i<tam3; i++)
s3[i] = toupper(s3[i]);

//mostrar maiusculas
printf("\nMaisculas: %s\n\n", s3);
}

Exerccios

Faaosexerccios35a40daLista2.

ProcurerevisarosseusalgoritmosemPortugolcorrespondentesa
estesexercciosetentereescrevlosemlinguagemC,esteo
processonormaldeescritadeumbomprograma.

Comeceescrevendoosprogramasnocaderno,sdepoispassepara
oseueditorparaentooscompilareexecutar,anotandonocaderno
ospossveiserrosecorrees.

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 26
IntroduoProgramaoIntroduoLinguagemC

MatrizesBidimensionais

Umamatrizumvetorcujoselementossooutrosvetores.

Sintaxe:

tipo nome_matriz [num_linhas][num_colunas];

Exemplos:
int matriz[5][4]; //5 lin, 4 col
int a[5][3]; //5 lin, 3 col
float b[3][5]; //3 lin, 5 col

ExemplocomEsbooGrfico:
int m[4][5]; //4 lin, 5 col

m 0 1 2 3 4
0
1
2
3

Exemplo1:Lereimprimirumamatrizdeinteiros3x3.

#include <stdio.h>
main()
{ int a[3][3], l, c;
//leitura
for(l=0; l<3; l++) //linhas
for(c=0; c<3; c++) //colunas
{ printf("\n[%d][%d]:", l, c);
scanf("%d",&a[l][c]);
}
//impresso
printf("\n\nMatriz lida: \n\n");
for(l=0; l<3; l++)
{ for(c=0; c<3; c++)
{ printf("\t%d", a[l][c]);
}
printf("\n"); //prox linha da matriz
}
printf("\n\n");
}
19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 27
IntroduoProgramaoIntroduoLinguagemC

ExerccioResolvido1:Escrevaumprogramaqueleiaeimprima
umamatriz3x4.Logoaps,gereamatrizdobro.Nofinal,imprimaamatriz
dobro.

Soluo:
#include <stdio.h>
main()
{ int a[3][4], dobro[3][4], l, c;
//leitura
for(l=0; l<3; l++)
for(c=0; c<4; c++)
{ printf("\n[%d][%d]:", l, c);
scanf("%d", &a[l][c]);
}

//impresso
printf("\n\nMatriz lida: \n\n");
for(l=0; l<3; l++)
{ for(c=0; c<4; c++)
printf("\t%d", a[l][c]);
printf("\n"); //prox linha da matriz
}

//gerar matriz dobro e imprimir


printf("\n\nMatriz dobro: \n\n");
for(l=0; l<3; l++)
{ for(c=0; c<4; c++)
{ dobro[l][c] = 2 * a[l][c];
printf("\t%d", dobro[l][c]);
}
printf("\n"); //prox linha da matriz
}

printf("\n\n");
}

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 28
IntroduoProgramaoIntroduoLinguagemC

ExercicioResolvido2:Lereimprimirduasmatrizes3x2.Calcular
eimprimiramatrizsoma.

Soluo:
#include <stdio.h>
main()
{ int a[3][2], b[3][2], soma[3][2], l, c;

//leitura
for(l=0; l<3; l++)
for(c=0; c<2; c++)
{ printf("\na[%d][%d]:", l, c);
scanf("%d", &a[l][c]);
}
for(l=0; l<3; l++)
for(c=0; c<2; c++)
{ printf("\nb[%d][%d]:", l, c);
scanf("%d", &b[l][c]);
}

//impresso
printf("\n\nMatriz A: \n\n");
for(l=0; l<3; l++)
{ for(c=0; c<2; c++)
printf("\t%d", a[l][c]);
printf("\n"); //prox linha da matriz
}

printf("\n\nMatriz B: \n\n");
for(l=0; l<3; l++)
{ for(c=0; c<2; c++)
printf("\t%d", b[l][c]);
printf("\n"); //prox linha da matriz
}

//gerar matriz soma e imprimir


printf("\n\nMatriz Soma: \n\n");
for(l=0; l<3; l++)
{ for(c=0; c<2; c++)
{ soma[l][c] = a[l][c] + b[l][c];
printf("\t%d", soma[l][c]);
}
printf("\n"); //prox linha da matriz
}
printf("\n\n");
}
19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 29
IntroduoProgramaoIntroduoLinguagemC

Exerccio1:Lereimprimirumamatriz4x4deinteiros.Logoaps,
imprimir:
Oselementosdadiagonalprincipal
Oselementosacimadadiagonalprincipal
Oselementosabaixodadiagonalprincipal

Exerccio 2: Declare a matriz a[4][4] de inteiros e preencha da


seguinteforma:
a[l][c]=(l*4)+c+1

Logoaps,imprimaamatriz a ea mdia aritmtica dos valores


gerados.

Exerccio3:Leiaduasmatrizesdeinteiros4x4.Calculea matriz
produto,seguindoasregrasmatemticas,emostreastrsmatrizes.

Exerccios

FaaosexercciosdaLista3.

ProcurerevisarosseusalgoritmosemPortugolcorrespondentesa
estesexercciosetentereescrevlosemlinguagemC,esteo
processonormaldeescritadeumbomprograma.

Comeceescrevendoosprogramasnocaderno,sdepoispassepara
oseueditorparaentooscompilareexecutar,anotandonocaderno
ospossveiserrosecorrees.

19992011Prof.Dr.AdrianoCaminhaeProfa.Dra.VeraLciaPrudnciadosSantosCaminhaICEx/UFFVoltaRedondaRJ 30