You are on page 1of 103

Linguagem C

Disciplina: Introduo a Algoritmos e Programao


Curso: Engenharia de Energia
Prof. Alexandre Gonalves
Aula 9

Introduo





A linguagem C foi criada por Dennis Ritchie, em


1972, no centro de Pesquisas da Bell
Laboratories.
Sua primeira utilizao importante foi a reescrita
do Sistema Operacional UNIX, que at ento era
escrito em Assembly.
Em meados de 1970 o UNIX saiu do laboratrio
para ser liberado para as universidades.
Com isso a linguagem se popularizou e no incio
de 1980 j existiam vrias verses de
compiladores C.

Introduo


O C uma linguagem de propsito geral, sendo


adequada programao estruturada. No
entanto mais utilizada para escrever aplicativos
bsicos, tais como, compiladores, analisadores
lxicos, bancos de dados, editores de texto, etc..

A linguagem C pertence a uma famlia de


linguagens cujas caractersticas so:
portabilidade, modularidade, compilao
separada, recursos de baixo nvel, gerao de
cdigo eficiente, confiabilidade, simplicidade e
facilidade de uso.

Viso geral de um programa C







A gerao do programa executvel a partir do


programa fonte obedece a uma seqncia de
operaes antes de tornar-se um executvel.
Depois de escrever o mdulo fonte em um editor
de textos, necessrio utilizar um compilador C.
Essa ao desencadeia uma seqncia de
etapas, cada qual traduzindo a codificao do
usurio para uma forma de linguagem de nvel
inferior, que termina com o executvel criado
pelo lincador.

Viso geral de um programa C


Editor (mdulo fonte em C)
Pr-processador (novo fonte expandido)
Compilador (arquivo objeto)
Lincador (executvel)

Estrutura de um programa C


Estrutura
#include <nome_da_biblioteca>
main() {
bloco de comandos;
}

Exemplo
#include <stdio.h>
main() {
printf("Meu primeiro programa em C");
}

Estrutura de um programa C


Bibliotecas so arquivos contendo vrias


funes que podem ser incorporadas aos
programas escritos em C;

A diretiva #include faz com que o texto contido


na biblioteca especificada seja inserido no
programa;

Por exemplo, as bibliotecas iostream.h e conio.h


permitem a utilizao de diversos comandos de
entrada e sada;

Estrutura de um programa C


A linguagem C sensvel a letras maisculas e


minsculas. Por exemplo, duas variveis
definidas como total e Total sero de maneira
distinta;

Variveis


As variveis so declaradas aps a especificao de


seus tipos;

Os tipos mais utilizados so: int (para nmeros inteiros),


float (para nmeros reais) e char (para caractere);

A linguagem C no possui tipo de dados boolean (que


pode assumir valores verdadeiro ou falso), pois
considera verdadeiro qualquer valor diferente de 0 (zero);

A linguagem C no possui um tipo especial para


armazenar cadeias de caracteres (strings). Para tal,
deve-se utilizar vetores de tipo char;

Variveis - Exemplos


float X;


float Y, Z;


Declara uma varivel chamada Y e Z em que podem ser


armazenados dois nmero reais.

char estado_civil;


Declara uma varivel chamada X em que pode ser armazenado


um nmero real.

Declara uma varivel chamada estado_civil em que pode ser


armazenado um caractere.

char nome[40];


Declara uma varivel chamada nome em que podem ser


armazenados at 40 caracteres.

Variveis - Exemplos


A linguagem C possui cinco tipos bsicos que podem ser


utilizados na declarao de variveis: int, float, double,
void e char;

A partir desses tipos bsicos, podem ser definidos


outros, por exemplo, unsigned char, unsigned int, long
double (80 bits).

Comando de atribuio


O comando de atribuio utilizado para conceder


valores ou operadores a variveis, sendo representado
pelo caractere =

Exemplos:





x = 4;
x = x + 4;
y = 2.5;
estado_civil = S;

Comando de atribuio


Em C, os caracteres so representados entre apstrofos


( ). As cadeias de caracteres devem ser representadas
por ( );

Caso seja necessrio armazenar uma cadeia de


caracteres dentro de uma varivel, deve-se utilizar uma
funo para manipulao de caracteres


strcpy(nome, Programao);

Para que seja possvel a utilizao da biblioteca strcpy


deve-se importar (incluir) a biblioteca string.h;

Comando de entrada


O comando de entrada utilizado para receber dados


digitados pelo usurio. Os dados recebidos so
armazenados em variveis.

Os comandos de entrada mais utilizados so cin, gets e


scanf;

cin >> X;


Um valor digitado pelo usurio ser armazenado na varivel X

gets(nome);


Um ou mais caracteres digitados pelo usurio sero


armazenados na varivel nome.

Comando de entrada
scanf("%d",&X);


Um valor digitado pelo usurio ser armazenado na varivel X

O comando gets e scanf armazenam toda a cadeia de


caractere at que seja pressionada a tecla ENTER. No
caso de cin possvel armazenar os caracteres at que
seja encontrado o primeiro espao em branco;

Esses comando exigem a incluso da biblioteca stdio.h,


ou seja, #include <stdio.h>

Comando de sada


O comando de sada utilizado para mostrar dados na


tela ou envi-los a uma impressora;

Os comandos de sada mais utilizados na linguagem C


so cout e printf;

cout << X;


Mostra o valor armazenado na varivel X.

cout << Contedo de X = << X;




Mostra a mensagem Contedo de X = e em seguida o valor


armazenado na varivel X.

Comando de sada
printf(%d,Y);


Mostra o nmero inteiro armazenado na varivel Y.

printf(Contedo de Y = %d, Y);




Mostra a mensagem Contedo de Y = e em seguida o


valor armazenado na varivel Y.

printf(%f, X);


Mostra o nmero real armazenado na varivel x.

printf(%5.2f, X);


Mostra o nmero real armazenado na varivel X utilizando


cinco casas para a parte inteira e duas casas decimais.

Comando de sada


No comando printf necessrio indicar o tipo de varivel


que ser mostrada:





%f para variveis reais


%d para variveis inteiras
%c para variveis que armazenam um nico caractere
%s para variveis que armazenam uma conjunto de caracteres

Comentrios


Comentrios so textos que podem ser inseridos em


programas com o objetivo de document-los;

No so analisados pelo compilador;

Podem englobar vrias linhas


/*
linha de comentrio
linha de comentrio
*/
Ou
// comentrio

Operadores e funes predefinidas




Operadores de atribuio e clculo matemtico

Op
era
dor
=
+
*
/
%

Exem Comentrio
plo
x=y
x+y
xy
x*y
x/y
x%y

O contedo da varivel x atribudo varivel x.


Soma o contedo de x e y.
Subtrai o contedo de y do contedo de x
Multiplica o contedo de x pelo contedo de y.
Obtm o quociente da diviso de x e y.
Obtm o resto da diviso de x e y.

Operadores e funes predefinidas




Operadores lgicos
Operador
and
or
not

Na linguagem C
&&
||
!

Comentrio
Conjuno
Disjuno
Negao

Operadores e funes predefinidas




Operadores matemticos de atribuio

Operador
+=
-=
*=
/=
%=
++

Exemplo
x += y
x -= y
x *= y
x /= y
x %= y
x++

Comentrio
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
Equivale a x = x + 1

Operadores e funes predefinidas




Operadores matemticos de atribuio

Operador
++
++
----

Exemplo
y=++x
y=x++
x-y=--x
y=x--

Comentrio
Equivale a x=x+1 e depois y = x
Equivale a y=x e depois x=x+1
Equivale a x=x-1
Equivale a x=x-1 e depois y=x
Equivale a y=x e depois x=x-1

Operadores e funes predefinidas




Operadores de comparao

Op
era
dor
==
!=
<=

Exemp Comentrio
lo
x == y
x != y
x <= y

>= x >= y
<
>

x<y
x>y

O contedo de x igual ao contedo de y


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

Operadores e funes predefinidas




Funes matemticas

Fun Exempl Comentrio


o o
ceil ceil(x) Arredonda um nmero real para cima. Por
exemplo, ceil(3.2) 4
cos cos(x) Calcula o co-seno de x
exp exp(x) Obtm o logaritmo natural e elevado potncia
x
abs abs(x) Obtm o valor absoluto de x
floor floor(x) Arredonda um nmero real para baixo. Por
exemplo, floor(3.2) 3

Operadores e funes predefinidas




Funes matemticas

Fun
o
log
log1
0
modf

Exempl
o
log(x)
log10(x
)
z=(mod
f(x,&y)

pow pow(x,
y)
sin sin(x)

Comentrio
Obtm o logaritmo natural de x
Obtm o logaritmo de base 10 de x
Decompe o nmero real armazenado em x em
duas partes: y recebe a parte fracionria e z, a
parte inteira do nmero
Calcula a potncia de x elevado a y
Calcula o seno de x

Operadores e funes predefinidas




Funes matemticas

Fun
o
sqrt
tan
M_PI

Exempl
o
sqrt(x)
tan(x)
M_PI

Comentrio
Calcula a raiz quadrada de x
Calcula a tangente de x
Retorna o valor de pi

Exemplo 1


Faa um programa que receba quatro nmeros inteiros,


calcule e mostre a soma desses nmeros:

#include <stdio.h>
#include <conio.h>
int main () {
int n1, n2, n3, n4, soma;
// Recebe os quatro nmeros
printf("Informe o primeiro nmero: ");
scanf("%d",&n1);
printf("Informe o segundo nmero: ");
scanf("%d",&n2);
printf("Informe o terceiro nmero: ");
scanf("%d",&n3);

printf("Informe o quarto nmero: ");


scanf("%d",&n4);
// Soma os nmeros digitados
soma = n1 + n2 + n3 + n4;
// Mostra o resultado da soma
printf("O resultado foi %d", soma);
// Para o programa a espera de um ENTER
getch();
}

Exemplo 2


Faa um programa que receba trs notas, calcule e


mostre a mdia aritmtica entre elas:

#include <stdio.h>
#include <conio.h>
main() {
float n1, n2, n3, media;
// Recebe as trs notas
printf("Informe a primeira nota: ");
scanf("%f",&n1);
printf("Informe a segunda nota: ");
scanf("%f",&n2);

printf("Informe a terceira nota: ");


scanf("%f",&n3);
// Calcula a mdia
media = (n1 + n2 + n3) / 3;
// Mostra o resultado da soma
printf("O resultado foi %5.2f", media);
// Para o programa a espera de um ENTER
getch();
}

Exemplo 3


Faa um programa que receba o salrio base de um


funcionrio, calcule e mostre o salrio a receber,
sabendo-se que o funcionrio tem gratificao de 5%
sobre o salrio base e paga imposto de 7% sobre esse
salrio:

#include <stdio.h>
#include <conio.h>

// Calcula o imposto
imp = sal * 7/100;
// Calcula o salrio a receber
main() {
salreceber = sal + grat - imp;
float sal, salreceber, grat, imp;
// Mostra o salrio a receber
// Mostra mensagem antes da leitura
printf("O salrio final de %.2f", salreceber);
//
do salrio
// Para o programa a espera de um ENTER
printf("Informe o salrio: ");
getch();
scanf("%f",&sal);
}
// Calcula a gratificao
grat = sal * 5/100;

Exemplo 4


Sabe-se que o quilowatt de energia custa um quinto do


salrio mnimo. Faa um programa que receba o valor do
salrio mnimo e a quantidade de quilowatts consumida
por uma residncia, calcule e mostre:
 O valor de cada quilowatt
 O valor a ser pago por essa residncia
 O valor a ser pago com desconto de 15%

Exemplo 4
#include <stdio.h>
#include <conio.h>
main () {
float vlr_sal, qtd_kw, vlr_kw,
vlr_reais, desc, vlr_desc;
printf("Informe o salrio mnimo: ");
scanf("%f",&vlr_sal);
printf("Informe a qtde de Kws consumidos: ");
scanf("%f",&qtd_kw);
// Calcula o valor de cada Kw
vlr_kw = vlr_sal / 5;
// Calcula o valor a ser pago pelo residncia
vlr_reais = vlr_kw * qtd_kw;
// Calcula o desconto de 15%
desc = vlr_reais * 0.15;

// Calcula valor a ser pago com desconto de 15%


vlr_desc = vlr_reais - desc;
// Mostra o valor do Kw
printf("Valor do Kw %f", vlr_kw);
// Mostra valor a ser pago
printf("\nValor a ser pago %f", vlr_reais);
//Mostra valor com desconto
printf("\nValor a ser pago com desconto %.2f", vlr_desc);
// Para o programa a espera de um ENTER
getch();
}

Estrutura Condicional

Estrutura condicional simples


SE condio
ENTO comando

if (n1 > n2)


printf("\nO maior nmero %d", n1);

O comando SE passa para if;

Estrutura condicional simples


SE condio
ENTO INCIO
comando1
comando2
FIM

if (n1 > n2) {


printf("\nNmeros informados: %d e %d", n1, n2);
printf("\nO maior nmero %d", n1);
}

Caso sejam necessrios vrios comandos em


um comando if torna-se obrigatrio o uso do
caractere { para abrir o bloco de comando e }
para fechar o bloco de comando;

Estrutura condicional simples


SE condio
ENTO comando1
SENO comando2

if (n1 > n2)


printf("\nO maior nmero %d", n1);
else
printf("\nO maior nmero %d", n2);

Caso a condio inicial no seja satisfeita devese utilizar o comando else para a realizao de
novos testes;

Estrutura condicional composta


SE condio
ENTO INCIO
comando1
comando2
FIM
SENO INCIO
comando3
comando4
FIM


if (var = 1) {
printf("\nExemplo com dois comandos");
printf("\nValor da varivel igual a 1");
} else if (var = 2) {
printf("\nExemplo com dois comandos");
printf("\nValor da varivel igual a 2");
} else {
printf("\nExemplo com dois comandos");
printf("\nOutro valor");
}

Estrutura condicional com mltiplos comandos if;

Estrutura de seleo mltipla


ESCOLHA expresso
CASO expr11, expr12, ..., expr1n
comando1
CASO expr21, expr22, ..., expr2n
comando2
OUTROCASO
comando adicional
FIM


Caso expr11, expr12, ..., expr1n sejam


verdadeiras, o comando1 executado; caso
expr21, expr22, ..., expr2n sejam verdadeiras o
comando2 executado. Se nenhuma expresso
for satisfeita os comandos inclusos em
OUTROCASO so executados.

Estrutura de seleo mltipla

switch(num) {
case 1 :
case 2 : printf("O nmero informado foi 1 ou 2");
break;
case 3 : printf("O nmero informado foi 3");
break;
default:
printf("O nmero informado foi %d", num);
}
Deve utilizar o comando break para finalizar o teste em
cada comando case. No exemplo, case 1 e case 2, seriam
equivalentes ao comando if com um operador lgico ||
(OR). Se nenhuma expresso for satisfeita a opo default
ser executada.

Operadores lgicos

Exemplo 1
A nota final de um estudante calculada a partir de
trs notas atribudas, respectivamente, a um
trabalho de laboratrio, a uma avaliao semestral
e a um exame final. A mdia das trs notas
mencionadas obedece aos pesos abaixo. Faa um
programa que receba as trs notas, calcule e
mostre a mdia ponderada e o conceito que segue
abaixo:

Exemplo 1
#include <stdio.h>
#include <conio.h>

if (media < 5.0) {


printf("\nConceito E");
printf("\nConceito E");

main () {
float nota1, nota2, nota3, media;
printf("Informe a primeira nota: ");
scanf("%f",&nota1);
printf("Informe a segunda nota: ");
scanf("%f",&nota2);
printf("Informe a terceira nota: ");
scanf("%f",&nota3);
media = (nota1*2+nota2*3+nota2*5)/10;
printf("\nMdia final: %.2f ",media);

} else if (media < 6.0)


printf("\nConceito D");
else if (media < 7.0)
printf("\nConceito C");
else if (media < 8.0)
printf("\nConceito B");
else
printf("\nConceito A");
getch();
}

Estruturas de Repetio
Disciplina; Introduo a Algoritmos e Programao
Curso: Engenharia de Energia
Prof. Alexandre Gonalves
Aula 4

Introduo





Uma estrutura de repetio utilizada quando


um trecho do algoritmo ou at mesmo o
algoritmo inteiro precisa ser repetido;
O nmero de repeties pode ser fixo ou estar
atrelado a uma condio;
Existem algumas estruturas para executar tais
situaes:
 Nmero

definido de repeties (estrutura FOR)


 Nmero indefinido de repeties e teste no incio
(estrutura WHILE)
 Nmero indefinido de repeties e teste no final
(estrutura DO-WHILE)

Nmero definido de
repeties


Estrutura FOR

Nmero definido de repeties


Estrutura FOR


Essa estrutura de repetio utilizada quando


se sabe o nmero de vezes que um trecho do
algoritmo deve ser repetido;
Formato geral da estrutura:

for (i = valor inicial; condio; incremento ou decremento de i)


comando;

Nmero definido de repeties


Estrutura FOR


A primeira parte atribui um valor inicial varivel


i, que tem como funo controlar o nmero
necessrio de repeties;
A segunda parte corresponde a uma expresso
relacional que, quando assumir valor falso,
determinar o fim da repetio;
A terceira parte responsvel por alterar o valor
da varivel i (incremento ou decremento) com o
objetivo de, em algum momento, fazer com que
a condio assuma valor falso;

Nmero definido de repeties


Estrutura FOR


No exemplo abaixo, varivel a atribudo


inicialmente inicialmente o valor 1 e depois vai sendo
incrementada em uma unidade. A cada incremento o
comando printf se repete;

for (int a=1; a<=20;a++)


printf("\no valor de a : %d",a);
for (int a=1; a<=20;a=a+1)
printf("\no valor de a : %d",a);

ou incremento em 2 unidades
for (int a=1; a<=20;a=a+2)
printf("\no valor de a : %d",a);

Nmero definido de repeties


Estrutura FOR


Para o decremento na estrutura for deve-se inicializar a


varivel com um valor maior (primeira parte) e
decrementar em n unidades (terceira parte);

for (int a=20; a>=1;a--)


printf("\no valor de a : %d",a);
for (int a=20; a>=1;a=a-1)
printf("\no valor de a : %d",a);

ou incremento em 2 unidades
for (int a=20; a>=1;a=a-2)
printf("\no valor de a : %d",a);

Nmero indefinido de
repeties
e teste no incio


Estrutura WHILE

Nmero indefinido de repeties


e teste no incio - Estrutura WHILE


Essa estrutura utilizada quando no se sabe o


nmero de vezes que um trecho do algoritmo
deve ser repetido;

Embora, tambm possa ser utilizada quando se


conhece esse nmero;

Baseia-se na anlise de uma condio;

A repetio ser feita enquanto a condio


mostrar-se verdadeira;

Nmero indefinido de repeties


e teste no incio - Estrutura WHILE


Existem situaes em que o teste condicional da


estrutura de repetio, que fica no incio, resulta
em um valor falso na primeira comparao;

Nesses casos, os comandos de dentro da


estrutura de repetio no sero executados;

while (condio)
comando;


Enquanto a condio for verdadeira, o comando


ser executado;

Nmero indefinido de repeties


e teste no incio - Estrutura WHILE
while (condio) {
comando1;
comando2;
comando3;
}


Enquanto a condio for verdadeira, os


comandos que esto dentro das chaves sero
executados (comando1, comando2, comando3)

Nmero indefinido de repeties


e teste no incio - Estrutura WHILE
Exemplo

int x = 1, y = 5;
while (x < y) {
printf("\nx=%d e y=%d", x, y);
x=x+2;
y=y+1;
}
printf("\nx=%d e y=%d", x, y);

Nmero indefinido de
repeties
e teste no final


Estrutura DO-WHILE

Nmero indefinido de repeties


e teste no final - Estrutura DO-WHILE


A diferena em relao a estrutura WHILE que


em DO-WHILE, os comandos sero repetidos
pelo menos uma vez, j que a condio de
parada se encontra no final;
do
comandos;
while (condio);

Os comandos sero repetidos at a condio


assumir o valor falso.

Nmero indefinido de repeties


e teste no final - Estrutura DO-WHILE


Exemplo

int x = 1, y = 1;
do {
printf("\nx=%d e y=%d", x, y);
y=y*x;
x=x+1;
} while (x != 6);
printf("\nx=%d e y=%d", x, y);

Exemplo 1


Faa um sistema que receba duas notas de cinco


alunos, calcule e mostre:



A mdia aritmtica das duas notas de cada aluno;


Uma mensagem de acordo com a tabela abaixo:

MDIA ARITMTICA
At 3
Entre 3 e 7
De 7 para cima




MENSAGEM
Reprovado
Exame
Aprovado

O total de alunos aprovados;


O total de alunos em exame;
O total de alunos reprovados.

Exemplo 1
if (media <= 3) {
tr = tr + 1;
printf("\n\nReprovado");
} else if (media <= 7) {
te = te + 1;
printf("\n\nEm exame");
} else {
ta = ta + 1;
printf("\n\nAprovado");
}
total_classe = total_classe + media;

#include <stdio.h>
#include <conio.h>
int main () {
float n1, n2, media,
total_classe, media_classe;
int num_alunos, tr, te, ta;
num_alunos = 5;
tr=te=ta=0;
total_classe=media_classe=0.0;

}
printf("\nTotal de reprovados: %d", tr);
printf("\nTotal em exame: %d", te);
printf("\nTotal de aprovados: %d", ta);
media_classe = total_classe / num_alunos;
printf("\nMdia da classe: %.2f",
media_classe);
getch();

for (int i=1; i<=num_alunos; i++) {


printf("\n\nInforme a nota 1: ");
scanf("%f",&n1);
printf("Informe a nota 2: ");
scanf("%f",&n2);
media = (n1 + n2) / 2;
printf("\nMdia: %.2f",media);
}

Vetores

Definio de Vetor


Vetor conhecido como varivel composta homognea


unidimensional

Que trata de um conjunto de variveis de mesmo tipo,


que possuem o mesmo identificador (nome) e so
alocadas seqencialmente na memria

Como as variveis tm o mesmo nome, o que as


distingue um ndice que referencia sua localizao
dentro da estrutura

Os ndices utilizados na linguagem C para identificar as


posies de um vetor comeam sempre em 0 (zero) e
vo at o tamanho do vetor menos uma unidade

Declarao de Vetor
int vet[10];
vet

10 5
0 1

3
2

8
3

1 19 44 21 2
4 5 6 7 8

3
2

$
3

j
4

char x[5];
x

A
0

*
1

7
9

Atribuindo Valores ao Vetor




As atribuies em vetor exigem que seja


informada em qual de suas posies o valor
ficar armazenado.

vet[0] = 1;
 Atribui

o valor 1 primeira posio do vetor (o


vetor comea na posio 0).

x[3] = b;
 Atribui

a letra b quarta posio do vetor (o


vetor comea na posio 0).

Preenchendo um Vetor



Preencher um vetor significa atribuir valores a


todas as suas posies
Deve-se implementar um mecanismo que
controle o valor do ndice

int vet[10];
for (int i=0; i<10; i++) {
printf("Informe o %d. valor do vetor: ",i+1);
scanf("%d",&vet[i]);
}

Preenchendo um Vetor


No exemplo do slide anterior, a estrutura de


repetio for foi utilizada para garantir que a
varivel i assuma todos os valores possveis
para o ndice do vetor (de 0 at 9)

Desse modo a posio do vetor varia de acordo


com a variao da repetio iniciando em 0

Mostrando os Elementos do Vetor




Para mostrar os valores contidos em um vetor


tambm necessrio a utilizao de um ndice

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


printf("\nO %d. valor do vetor : %d",i+1, vet[i]);
}

Mostrando os Elementos do Vetor




No exemplo do slide anterior, a estrutura de


repetio for foi utilizada para garantir que a
varivel i assuma todos os valores possveis
para o ndice do vetor (de 0 a 9)

Assim, para cada execuo da repetio, ser


utilizada uma posio diferente e, dessa forma,
todos os valores do vetor sero mostrados

Exemplo
#include <stdio.h>
#include <conio.h>
main () {
int vet[10];
for (int i=0; i<10; i++) {
printf("Informe o %d. valor do vetor: ",i+1);
scanf("%d",&vet[i]);
}
printf("\n");
for (int i=0; i<10; i++) {
printf("\nO %d. valor do vetor : %d",i+1, vet[i]);
}
getch();
}

Matrizes

Definio de Matriz


Matriz uma varivel composta homognea


multidimensional;

Ela formada por uma sequncia de variveis de


mesmo tipo, que possuem o mesmo identificador
(mesmo nome) e so alocadas sequencialmente na
memria;

Como as variveis tm o mesmo nome, o que as


distingue so ndices que referenciam sua localizao
dentro da estrutura;

Definio de Matriz


Uma varivel do tipo matriz precisa de um ndice para


cada uma de suas dimenses. Assim como vetor o cada
ndice inicia em 0;

Declarao de Matriz
tipo_dos_dados nome_varivel
[dimenso1][dimenso2][...][dimensoN];


Onde:
tipo_dos_dados o tipo de dados que sero armazenados
na matriz;
 nome_varivel o nome dado varivel do tipo matriz;
 [dimenso1] representa o tamanho da 1 dimenso da
matriz;
 [dimenso2] representa o tamanho do 2 dimenso da
matriz;
 [dimensoN] representa o tamanho da n-sima dimenso
da matriz;


Exemplo de Matriz
int X[2][6];

0 1 2
0 10 5 3
1 45 22 2

3
8
1

4 5
1 19
5 6

Atribuindo valores a uma Matriz




Cada elemento de uma matriz pode armazenar um valor

Para fazer este armazenamento, necessrio executar


uma atribuio, informando o nmero das dimenses
X[2][5] = 33
X[1][10] = 15
X[3][5][4] =-11

Preenchendo uma Matriz




Para preencher uma matriz, necessrio identificar


todas as suas posies;

Isto exige a utilizao de um ndice para cada dimenso


da matriz;

No exemplo a seguir, uma matriz bidimensional com trs


linhas e cinco colunas mostrada. Observe que a
varivel i varia dentro do intervalo de 0 a 2, ou seja,
exatamente nas linhas. Para cada valor de i, a varivel j
varia de 0 a 4, ou seja, as cinco colunas que cada linha
possui.

Preenchendo uma Matriz


#include <stdio.h>
#include <conio.h>
main () {
int mat[3][5];
for (int i=0; i<3; i++) {
for (int j=0; j<5; j++){
printf("Informe um valor para a %d. linha e %d. coluna: ",i+1,j+1);
scanf("%d",&mat[i][j]);
}
}
getch();
}

Simulao do exemplo

Apresentando a Matriz
#include <stdio.h>
#include <conio.h>
main () {
int mat[3][5];
for (int i=0; i<3; i++) {
for (int j=0; j<5; j++){
printf("Informe um valor para a %d. linha e %d. coluna: ",i+1,j+1);
scanf("%d",&mat[i][j]);
}
}
printf("\n");
for (int i=0; i<3; i++) {
for (int j=0; j<5; j++){
printf("\nO valor da %d. linha e %d. coluna : %d",i+1,j+1,mat[i][j]);
}
}
getch();
}
mat

Registros

Definio


Registros so estruturas de dados capazes de agregar


vrias informaes.

Dessa maneira novas estruturas podem ser criadas, no


limitando os desenvolvedores aos tipos primitivos
fornecidos por determinada linguagem de programao;

Cada informao contida em um registro chamada de


campo.

Os campos podem ser de diferentes tipos primitivos, ou


ainda, podem representar outros registros. Desse modo,
registros so conhecidos como variveis compostas
heterogneas.

Declarao


Os registros em C so definidos por meio da utilizao


da palavra reservada struct:

struct nome_do_registro
{ tipo campo1;
tipo campo2;
...
tipo campoN;
};
struct REGISTRO
{ int num;
char nome[5];
float saldo;
};

Declarao em C


Em alguns momentos, possvel fazer a


declarao da varivel com a definio da
estrutura, no mesmo bloco de comandos;

struct REGISTRO
{ int num;
char nome[5];
float saldo;
} x[5][8];

Nesse caso, est sendo declarada uma varivel


x com 5 linhas e 8 colunas, onde cada posio
do tipo REGISTRO e, portanto, contm num,
nome e saldo.

Acesso Registros
Exemplo1

Depois de a varivel ser declarada, o programa precisa


manipular o contedo de cada campo individualmente. Para
tanto, preciso informar da varivel e o do campo
desejado, separados por um ponto.
struct produto
{int codigo;
char descricao[30];
}
produto x;
x.codigo = 1;
strcpy(x.descricao,Geladeira);

Acesso Registros
Exemplo

Para armazenar os valores 5 e fogo na quarta posio de


um vetor, deve-se fazer as atribuies a seguir:
struct produto
{int codigo;
char descricao[30];
}
produto x[12];
x[3].codigo = 5;
strcpy(x[3].descricao,fogo);

Acesso Registros
Exemplo

Para armazenar os valores 11 e televiso na terceira


coluna da sexta linha de uma matriz, deve-se fazer as
atribuies a seguir:
struct produto
{int codigo;
char descricao[30];
}
produto x[8][4];
x[5][2].codigo = 11;
strcpy(x[5][2].descricao,televiso);

Sub-rotinas

Definio


Um importante recurso apresentado nas linguagens de


programao a modularizao, onde um programa
pode ser particionado em sub-rotinas especficas;

A linguagem C possibilita a modularizao por meio de


funes;

Um programa escrito em C tem, no mnimo, uma funo


chamada main, por onde a execuo comea;

Existem tambm muitas outras funes predefinidas na


linguagem C, por exemplo, clrscr(); printf(), scanf(). Estas
funes so adicionadas aos programas pela diretiva
#include, no momento da linkedio;

Definio


Alm das funes predefinidas, vrias outras podem ser


criadas conforme a necessidade;

As funes s vezes precisam receber valores externos,


chamados parmetros, e tambm podem devolver algum
valor produzido para o ambiente externo, denominado
retorno;

Os parmetros so representados por uma lista de


variveis colocadas dentro de parnteses, logo aps o
nome da funo;

Caso haja retorno deve-se incluir o comando return;

Definio


O tipo do valor retornado dever ser exatamente igual ao


tipo informado antes do nome da funo;

Caso no haja retorno, dever ser digitada a palavra


void.

Funes sem passagem de parmetros e sem


retorno


Considerado o tipo mais simples de funo;

#include <stdio.h>
#include <conio.h>
void soma() {
int a, b, s;
printf("Digite o primeiro nmero: ");
scanf("%d",&a);
printf("\nDigite o segundo nmero: ");
scanf("%d",&b);
s = a + b;
printf("\nResultado: %d",s);
}
main () {
soma();
getch();
}

Funes com passagem de parmetros e sem


retorno


Esse tipo de funo recebe parmetros no momento em que


chamada (parmetros), mas que, ao final, no retorna valor para
quem a chamou;
#include <stdio.h>
#include <conio.h>
void media(float a, float b) {
float s;
s = (a + b) / 2;
printf("\nResultado: %.2f", s);
}
main () {
float a, b;
printf("Digite o primeiro nmero: ");
scanf("%f",&a);
printf("\nDigite o segundo nmero: ");
scanf("%f",&b);
media(a, b);
getch();
}

Funes sem passagem de parmetros e com


retorno


Esse tipo de funo no recebe parmetros no momento em que


chamada, mas que, ao final, retorna valor para quem a chamou;
#include <stdio.h>
#include <conio.h>
float multiplicacao() {
float multiplicando, multiplicador, produto;
printf("Digite o multiplicando: ");
scanf("%f",&multiplicando);
printf("\nDigite o multiplicador: ");
scanf("%f",&multiplicador);
produto = multiplicando * multiplicador;
return produto;
}
main () {
float resposta;
resposta = multiplicacao();
printf("\nResultado: %.2f", resposta);
getch();
}

Funes com passagem de parmetros e com


retorno


Esse tipo de funo recebe parmetros no momento em que


chamada, e ao final, retorna valor para quem a chamou;
#include <stdio.h>
#include <conio.h>
float divisao(float dividendo, float divisor) {
float q;
q = dividendo / divisor;
return q;
}
main () {
float n1, n2, resposta;
printf("Digite o dividendo: ");
scanf("%f",&n1);
printf("\nDigite o divisor: ");
scanf("%f",&n2);
resposta = divisao(n1, n2);
printf("\nResultado: %.2f", resposta);
getch();
}

Passagem de parmetros por valor


#include <stdio.h>
#include <conio.h>
int dobro(int a, int b) {
int soma;
a = a * 2;
b = b * 2;
soma = a + b;
return soma;
}
main () {
int x, y, res;
printf("Digite o 1. nmero: ");
scanf("%d",&x);
printf("\nDigite o 2. nmero: ");
scanf("%d",&y);
res = dobro(x, y);
printf("\nResultado: %d", res);
getch();
}

Passagem de parmetro por valor

Funo dobro

Funo main

a=a*2

b=y*2

res

16

soma
return soma

res = dobro(5, 3)

16

Passagem de parmetros por referncia




Passagem de parmetro por referncia significa que os


parmetros passados para a funo correspondem a
endereos de memria ocupados por variveis;

Dessa maneira, toda vez que for necessrio acessar


determinado valor, isso ser feito por meio de referncia,
ou seja, apontamento ao seu endereo;

Passagem de parmetros por referncia


#include <stdio.h>
#include <conio.h>
int dobro(int *a, int *b) {
int soma;
*a = (*a) * 2;
*b = (*b) * 2;
soma = *a + *b;
return soma;
}
main () {
int x, y, res;
printf("Digite o 1. nmero: ");
scanf("%d",&x);
printf("\nDigite o 2. nmero: ");
scanf("%d",&y);
res = dobro(&x, &y);
printf("\nResultado: %d", res);
getch();
}

Passagem de parmetro por referncia


10

Funo main

Funo soma

6
x

5
800

800

*a = (*a) * 2;

300

*b = (*b) * 2;

3
300

res = dobro(800, 300)

soma
res

16
return soma

16

Passagem de parmetros por referncia




A linguagem C no permite que vetores e matrizes sejam


passados na ntegra como parmetros para uma funo;

Portanto, deve-se passar apenas o endereo da posio


inicial do vetor ou da matriz;

O endereo obtido utilizando-se o nome do vetor (ou


da matriz) sem o ndice entre colchetes;

Passagem de parmetros por referncia


#include <stdio.h>
#include <conio.h>
void soma_linhas(float m[][5], float v[]) {
for (int i=0; i<3; i++) {
for (int j=0; j<5; j++) {
v[i] += m[i][j];
}
}
}
main () {
float m[3][5], v[3];
for (int i=0; i<3; i++) {
v[i] = 0;
for (int j=0; j<5; j++){
printf("Informe um valor para a %d. linha e %d. coluna: ",i+1,j+1);
scanf("%f",&m[i][j]);
}
}
soma_linhas(m, v);
for (int i=0; i<3; i++) {
printf("\nSoma da linha %d: %.2f",i+1, v[i]);
}
getch();
}

Exerccio 1
Uma empresa armazena informaes sobre vendas
clientes. Cada uma dessas vendas tem as seguintes
informaes: nmero da venda, cdigo do cliente, data de
vencimento, data de pagamento, valor da venda, juro e
desconto.
Faa um programa para cadastrar vendas com as seguintes
caractersticas:
- Utilize uma estrutura composta heterognea como varivel
global do sistema;
- Implemente uma sub-rotina (funo) para o cadastro da
venda;

Exerccio 1
- Implemente uma sub-rotina para baixa da venda em que,

caso a data do pagamento seja maior que a data do


vencimento deve-se cobrar 0.2% de juro ao dia e caso a data
do pagamento seja menor que a data do vencimento
oferecer um desconto de 5%;
Obs: O clculo de juro e desconto devem ser tambm
sub-rotinas;
- Implemente uma sub-rotina para listar todas as vendas;
- Implemente uma sub-rotina para listar as vendas com seu
valor total (valor + juro desconto);

Exerccio 1
#include <stdio.h>
#include <conio.h>
struct venda {
int numero;
int cliente;
int vencto;
int pagto;
float valor;
float juro;
float desconto;
};
int TAM_VETOR = 2;
float DESCONTO = 0.05, JURO = 0.002;
void cadastro(venda x[]) {
}

void lista(venda x[]) {


}
float calcula_juro(int vencto, int pagto, float valor) {
}
float calcula_desconto(float valor) {
}
void baixa(int numero, int pagto, venda x[]) {
}
void lista_total(venda x[]) {
}
main () {
venda x[TAM_VETOR];
cadastro(x);
baixa(1, 13, x);
baixa(2, 8, x);
lista(x);
lista_total(x);
getch();
}

You might also like