Você está na página 1de 22

LINGUAGEM C

Estrutura bsica de um programa


Um programa em linguagem C constitudo por uma sequncia de funes
(mdulos) que em conjunto iro permitir resolver o problema proposto. Estas
funes contm instrues que especificam as tarefas que o processador deve
executar.
A execuo de um programa comea por uma funo de nome main que
dever existir sempre num programa escrito em linguagem C. Todas as
instrues terminam com ;.
Directivas de Pr-Compilao
#include <stdio.h>
#include prog1.h
#define ALUNOS 15
Declarao de novos tipos e de variveis globais
typedef float numero_real;
int a;
Definio das funes
int ler() {
int x;
scanf(%d,&x); return(x);
}
void escreve(x) {
printf(%d,x);
}
Funo Principal - main
main()
{
int valor;
valor=ler();
escreve(valor);
}

Tipos de dados
A declarao de uma varivel em linguagem C implica a sua atribuio a um
dado tipo de dados. Essa especificao para alm de caracterizar o contedo da
varivel perante a informao que ela ir conter permite tambm ao compilador
reservar um espao de memria condizente com o tamanho necessrio para o
seu armazenamento.

Tipo de dados
char
int
float
double
short int
long int
signed char/int
unsigned char/int

Informao
Caracter
Inteiro
Virgula flutuante
Virgula flutuante
Inteiro
Inteiro
Com sinal
Sem sinal

Tamanho reservado
1 byte
2 bytes
4 bytes
8 bytes
1 byte
4 bytes
1/2 bytes
1/2 bytes

Desta forma numa varivel do tipo short int poder ser armazenado um
qualquer valor entre 0 e 255, j que com um byte o maior valor 11111111(2) =
255.
Um signed char armazenam-se toma valores entre 127 e 127, e um int tem
por valor mximo de armazenamento 32767.

Exemplos:
int a,b;
char v;
unsigned int valor;

Operaes de Entrada/Sada (E/S)


A linguagem C por si s no possui comandos para efectuar a entrada e a
sada de informao num programa. portanto necessrio fazer uso de funes
externas que efectuem estas tarefas.
Tais funes esto definidas numa biblioteca da linguagem de nome stdio.h
(Standard Input/Output header file) pelo que qualquer programa que faa uso
delas ter de incluir a directiva ao pr-compilador
#include <stdio.h>
Funes de E/S
getchar - Permite ler o prximo caracter do teclado
int c;
c=getchar();
putchar Escreve um caracter no ecran
putchar(c)
scanf Entrada formatada
int a;
char b;
scanf(%d %c,&a,&b);

Endereo de memria

printf Sada formatada


printf(A nota do aluno %ld %d\n,numero,nota);

Especificadores de Converso
Especificador

Descritivo

%d
%f
%c
%s
%ld

Inteiro
Vrgula Flutuante
Caracter
String
Inteiro longo

Caracteres especiais
Caracter

Descritivo

\n
\t
\b

newline
tab
backspace

Atribuio
O operador atribuio representa-se pelo = e a sua sintaxe :
varivel = expresso
Numa perspectiva mais tcnica a representao acima poderia ser lida da
seguinte forma:
O contedo do endereo da varivel ser preenchido com o valor da
expresso
Exemplos:
a = 5;
b = a;
c = sin(x)+ln(23+abs(y)%5);
a = b = c = 0;

Operadores
Aritmticos:
+
*
/
%

Adio
Subtraco
Multiplicao
Diviso
Mdulo

Exemplos:
2+4.5 = 6.5
43=1
2*3=6

15 / 2 = 7
15.0 / 2 = 7.5

Incremento e Decremento:
++
--

Incremento
Decremento

Estes operadores podem ser usados de forma prefixa e de forma sufixa.


Forma prefixa: a actualizao do valor acontece antes da utilizao
da varivel;
Forma sufixa:

a actualizao do valor feito aps a utilizao da


varivel.

Exemplos:
y = x++
y = --x

y=x; x=x+1;
x=x-1; y=x;

Relacionais:
x<y
x <= y
x>y

Menor que
Menor ou igual
Maior que

x >= y
x == y
x != y

Maior ou igual
Igual
Diferente

&&
||
!

e (and)
ou (or)
negao (not)

Lgicos:

Manipulao de bits:
~
<<
>>
&
|
^

Complemento
Shift para esquerda
Shift para direita
Conjuno
Dijuno
Ou exclusivo

Estruturas de Deciso
A implementao algortmica da resoluo de um problema implica eventuais
tomadas de deciso sobre o modo como este dever ser solucionado. As
instrues da linguagem que permitem implementar estas construes so
chamadas Estruturas de Deciso.

Instruo IF
Esta instruo permite executar um conjunto de tarefas em funo da avaliao
do valor lgico de uma condio.
As duas construes possveis so:

Falso

expresso
lgica

if( expresso )
Bloco de Instrues;

if( expresso )
Bloco de Instrues 1;
else
Bloco de Instrues 2;

Verdadeiro
Bloco de
Instrues

Falso
Bloco de
Instrues 2

expresso
lgica

Verdadeiro
Bloco de
Instrues 1

Exemplo 1:
Elaborar em Linguagem C um programa que permita calcular a raiz
quadrada de um qualquer nmero real.

#include<stdio.h>
main()
{
float x;
int complexo=0;
scanf(%f,&x);
if( x<0 )
{
x =-x;
complexo=1;
}
printf(a raiz quadrada %f,sqrt(x));
if(complexo==1)
printf(i);
}

Exemplo 2:
Elaborar em Linguagem C um programa que permita verificar se um
dado nmero inteiro par ou mpar.

#include<stdio.h>
main()
{
int numero;
scanf(%d,&numero);
if( numero%2 == 0)
printf(%d par\n,numero);
else
printf(%d impar\n,numero);
}

Instruo SWITCH
Esta estrutura de deciso mltipla dever ser utilizada quando a tarefa a realizar
pelo programa depende do valor de uma varivel (ou expresso.
A sintaxe geral :
switch (varivel) {
case hiptese 1:

case hipotese 2:

bloco de instrues 1;
break;
bloco de instrues 2;
break;

()
case hipotese n:

bloco de instrues n;
break;

default:

bloco de instrues;

}
Esta instruo avalia uma expresso do tipo inteiro (ou caracter) e compara o
valor obtido com as hipteses afectas aos diversos cases se alguma das
comparaes suceder ento executa o respectivo bloco de instrues. Se
nenhuma das comparaes for verdadeira a instruo faculta a existncia de
uma hiptese default com o respectivo bloco de instrues.
A instruo break necessria para terminar a execuo do bloco de instrues
que se pretende executar. Caso esta fosse omitida todas as instrues de todos
os blocos abaixo do pretendido seriam executadas.

Exemplo:
Elaborar em Linguagem C um programa que escreva o nome do ms
introduzido na forma numrica.

#include<stdio.h>
main()
{
int mes;
scanf(%d,&mes);
switch(mes){
case 1 : printf("Janeiro");break;
case 2 : printf("Fevereiro");break;
case 3 : printf("Maro");break;
case 4 : printf("Abril");break;
case 5 : printf("Maio");break;
case 6 : printf("Junho");break;
case 7 : printf("Julho");break;
case 8 : printf("Agosto");break;
case 9 : printf("Setembro");break;
case 10 : printf("Outubro");break;
case 11 : printf("Novembro");break;
case 12 : printf("Dezembro");break;
default : printf("Ms Invalido");
}
}

Estruturas de Controlo do Fluxo


CICLOS

A implementao de um problema leva muitas vezes a uma anlise


mais ou menos exaustiva de um bloco de informao. A referida
anlise implica a repetio de um conjunto de tarefas para cada
elemento da informao.
As instrues da linguagem que permitem implementar estes raciocnios
so denominadas de ciclos.

Os ciclos subdividem-se em:


Ciclos Contados:

So estruturas cclicas onde o nmero de


repeties das instrues que constituem o bloco
de aco est a partida definido.
Em linguagem C este tipo de ciclo
implementado pela instruo FOR.

Ciclos Condicionais:

Nestas estruturas o nmero de repeties das


instrues do bloco de aco est dependente de
factores externos, pelo que no conhecido
partida.
Em linguagem C este tipo de ciclo
implementado pelas instrues WHILE e DO ...
WHILE.

Ciclo FOR:
Este ciclo possui uma construo muito verstil.
A sintaxe mais usual :

for(varivel=valor ; expresso lgica ; actualizao do valor)


Bloco de Instrues

varivel=valor

Expresso
lgica

Falso

Verdadeiro

Bloco de
Instrues
Actualizao do valor

A instruo suporta trs parmetros embora nenhum deles seja


obrigatrio. No primeiro usual fazer-se a inicializao da varivel
controladora do ciclo, no segundo estipula-se qual a condio de fim de
ciclo, e no ltimo actualiza-se a varivel controladora.
Como futuramente veremos esta estrutura pudera transforma-se
facilmente numa estrutura do tipo ciclo WHILE ...

Existem duas instrues que permitem alterar a execuo normal do


ciclo.

BREAK
Interrompe definitivamente a execuo do ciclo.
Tambm utilizado na instruo Switch.

CONTINUE
Interrompe a execuo do bloco de aco do ciclo iniciando a
iterao seguinte.

Exemplo 1:
Imprimir todos os nmeros de 1 at 10000.
#include <stdio.h>
main()
{
int a;
for(a=1;a<=10000;a++)
printf(%d\n,a);
}

Exemplo 2:
Verificar se um dado nmero inteiro primo.
#include <stdio.h>
main()
{
int a,b,primo=0;
scanf(%d,&a);
for(b=2;b<=a/2;b++)
if( a%b == 0){
primo=1;
break;
}
if(primo==0)
printf(%d primo,a);
else
printf(%d no primo,a);
}

Versatilidade da sintaxe do ciclo FOR

4.
1.

(...)
int a;

(...)
int a;

for(a=1;a<10;
printf(%d",a++));
()

printf(Insira um valor:);
scanf(%d,&a);
for(;a<1000;a++)
printf(%d\t%d",a,2*a);
(...)
2.

5.
(...)
int a;

(...)
int a;

for(a=1;;a+=5){
if(sin(a)==ln(a)*sin(a))
break;
printf(%d",a);
()

for(;;)
printf(%d",a++);
()

3.

6.
(...)
int a;
for(a=1;a<500;)
printf(%d",a++);
()

(...)
int a=1;
for(;a<10;)
printf(%d",a++);
()

Ciclo WHILE

Esta instruo da linguagem permite executar um conjunto de instrues


enquanto uma dada condio lgica for verdadeira.
A sintaxe :
while(expresso lgica)
Bloco de Instrues

Expresso
lgica

Falso

Verdadeiro

Bloco de
Instrues

A avaliao do valor da condio lgica feita no inicio do ciclo, pelo que, se a


condio for partida falsa o bloco de instrues nunca ser executado.

EXEMPLO:
Elaborar um programa em linguagem C que permita calcular a mdia de uma
sequncia de valores inseridos pelo utilizador. A sequncia termina
obrigatoriamente com a insero de um 0 que no dever contar para a
avaliao da mdia.
Ex: 2 45 6 1 78 9 0 mdia=23.16667

#include <stdio.h>
main()
{
int contador=0, soma=0, valor;
float mdia;
scanf(%d,&valor);
while(valor != 0){
contador++;
soma += valor;
scanf(%d,&valor);
}
if(contador==0)
mdia=0;
else
mdia=(float)soma/contador;
printf(A mdia da sequncia inserida %f\n,media);
}

Ciclo DO ... WHILE

Esta instruo da linguagem permite executar um conjunto de instrues at


que uma dada condio lgica fr verdadeira.

A sintaxe :
do
Bloco de Instrues
while(expresso lgica)

Bloco de
Instrues

Verdadeiro

Expresso
lgica

Falso

A avaliao do valor da condio lgica feita no fim do ciclo, pelo que, o bloco
de instrues ser sempre executado pelo menos uma vez.

EXEMPLO:
Elaborar um programa em linguagem C que permita calcular a mdia de uma
sequncia de valores inseridos pelo utilizador. A sequncia termina
obrigatoriamente com a insero de um 0 que no dever contar para a
avaliao da mdia.
Ex: 2 45 6 1 78 9 0 mdia=23.16667

#include <stdio.h>
main()
{
int contador=0, soma=0, valor;
float mdia;
do{
scanf(%d,&valor);
contador++;
soma += valor;
} while(valor != 0)
if((--contador)==0)
mdia=0;
else
mdia=(float)soma/contador;
printf(A mdia da sequncia inserida %f\n,media);
}

CICLOS EMBUTIDOS
Um ciclo diz-se embutido se faz parte integrante do bloco de
instrues de outro ciclo.
Por exemplo:
(...)
for(i=1;i<4;i++)
for(j=1;j<4;j++)
printf(%d\n,i-j);
(...)
i

sada

-1

-2

-1

As instrues break e continue da linguagem C actuam sobre o


ciclo do qual fazem parte.

EXEMPLO:
Encontrar todos os nmeros capicua entre 10 e 10000.
Defina-se por capicua um nmero que lido da mesma forma de
trs para a frente e de frente para trs.

#include<stdio.h>
main()
{
int numero, valor, digito, inverso;
for(numero=10; numero<=10000; numero++)
{
valor=numero;
inverso=0;
while(valor)
{
digito=valor%10;
inverso=10*inverso+digito;
valor=valor/10;
}
if(inverso==numero)
printf(%d\n,numero);
}
}