Você está na página 1de 11

Disciplina: LINGUAGENS DE PROGRAMAÇÃO

Professor: Paulo Percio Mota Magro

1. Estrutura de um programa

Na definição de sua forma, a linguagem C possui padrões que regem a


preparação de um programa. A sintaxe da linguagem C diferencia letras
maiúsculas de minúsculas. Assim, os termos “main”, “Main” e “MAIN” são
considerados diferentes.
Uma prática padronizada é o uso de letras minúsculas para a formação de
variáveis, funções e comandos, utilizando-se letras maiúsculas somente para a
formação dos nomes de constantes simbólicas definidas para serem
manipuladas pelo pré-processador. Para o nome das funções também tem-se
utilizado a letra maiúscula na primeira letra. Uma particularidade interessante
no programa em C é seu aspecto modular e funcional, em que, o próprio
programa principal é uma função.
Um programa em C, qualquer que seja seu tamanho, consiste de funções e
variáveis. Essa forma de apresentação da linguagem facilita o desenvolvimento
de programas, pois permite o emprego de formas estruturadas e modulares.
Os delimitadores “/*” e “*/” identificam começo e fim do comentário em um
programa em C. Todo texto que estiver entre eles será ignorado pelo
compilador. Outra forma de comentar é com o identificador “//”. Tudo que
estiver entre este identificador e o final da linha é ignorado.
A execução do programa é feita através da função principal, chamada main ()
que acessa, direta ou indiretamente, todas as funções do programa.
A seguir, na Figura 3, apresenta-se a forma geral de um programa em C, com a
definição de cada um de seus elementos. Usa-se a notação [ ] para indicar que
o que está entre os colchetes é opcional e < > para indicar uma forma
específica.
Figura 3 - Estrutura de um programa.

Normalmente a criação do programa começa com as definições de pré-


processamento e com a declaração das variáveis globais (variáveis que valem
para todo o programa, podendo ser acessadas por todas as funções), seguidas
das declarações das funções a serem utilizadas.
Funções em C são formadas inicialmente pela declaração de tipo e de seu
nome, seguido de uma lista de parâmetros (que pode ser vazia) entre
parênteses. Após o cabeçalho da função começa o seu corpo, ou seja, o
conjunto de declarações, comandos e chamadas às funções.
O bloco de comandos correspondente à função é delimitado por chaves “{” e
“}”, sendo que a primeira ocorrência de { indica o início de execução da função,
onde devem ser declaradas as variáveis locais (variáveis com o escopo
definido somente para a função na qual ela foi declarada), além de serem
executados comando e eventuais chamadas às funções. Para cada início de
abertura de bloco “{” deve haver um fechamento “}” correspondente. O término
da execução da função se dá quando chegamos ao último “}” ou quando
encontramos um comando que explicita o retorno “para fora” da função
(comando return).
2. PRIMEIRO PROGRAMA
Usando o ambiente do Devcpp, edite o programa abaixo, salve-o com o nome
teste.cpp, compile e execute-o:

#include <stdio.h>

int main ()
{
printf ( “Oi !!!\n” );
return ( 0 );
}

A primeira linha informa ao compilador onde encontrar os comandos para


executar a função printf que não está definida no programa principal. A função
main retorna um valor do tipo int (inteiro), por isso a palavra int está escrita
antes da palavra main. A instrução return ( 0 ) força o retorno (ou o fim) da
função main. O valor que a função retorna é 0 (valor zero). Este valor é
retornado para o sistema operacional DOS que foi quem executou o comando
para que o programa teste.exe fosse executado. Note que o parâmetro da
função printf é uma sequência de caracteres, denominada string (“Oi !!!\n”).
O objetivo desta função é mostrar todos esses caracteres na tela. O caractere
‘\n’ é um caractere especial que força a mudança para a próxima linha na tela.

3. PESQUISA
Consulte na internet a página https://pt.wikipedia.org/wiki/ASCII
Esta página descreve a tabela ASCII. Esta tabela mostra como converter
grande parte dos caracteres encontrados no teclado em código binário. Por
exemplo, o caractere A corresponde ao código binário 65 ou 4116 (base
hexadecimal).
4. VARIÁVEIS E CONSTANTES

Nomes das Variáveis


Os valores que são processados por um programa em C são guardados em
variáveis que podem possuir diversos tipos, ou seja, diversas formas de
armazenamento. A formação dos nomes destas variáveis, assim como nas
funções e nas constantes simbólicas, se dá a partir de algumas regras básicas:
 todo nome deve começar com uma letra ou com um caractere sublinha
_;
 Os próximos caracteres podem ser letras, sublinhas ou números.
Nota: evitem usar cedilha e acentos, pois muitos compiladores não permitem.

Tipos de Dados
Conforme citado anteriormente, cada variável possui um tipo. Em C, toda
variável a ser utilizada no programa deve ser previamente declarada.
A declaração de variáveis é feita da seguinte forma:
<tipo> <lista de variáveis>;

Os principais tipos de variáveis em C são:

a) char
Variáveis que contém um valor inteiro na faixa de -128 e 127 (somente um byte
de espaço na memória). Podem ser usadas para representar um caractere
ASCII.

b) int
Variáveis que contém um valor inteiro na faixa de -32768 a 32767. São
armazenadas em dois bytes)

c) long
Inteiros longos são utilizados quando é necessária a representação de valores
inteiros muito grandes que não podem ser armazenados em variáveis do tipo
int. São armazenados em quatro bytes e representam valores entre
-2147483648 e 2147483647.

d) float
Números reais em ponto flutuante. Também são armazenados em quatro
bytes. Representam valores entre -3,4x1038 a 3,4x1038 e tem precisão de 7
dígitos.

e) double
Números reais em ponto flutuante. São armazenados em oito bytes.
Representam valores entre -1,7x10308 a 1,7x10308 e tem precisão de 16 dígitos.

Nota: tipos que representam valores inteiros podem assumir apenas valores
positivos (sem representação do sinal) utilizando-se o adjetivo unsigned. Por
exemplo, unsigned int representa valores entre 0 e 65535.

Representação de constantes:
a) Caracteres
Constantes caracteres ficam entre plicas ().
\n - caractere newline (passa para a próxima linha da tela ou impressora);
\t - caractere tabulação (passa para a próxima coluna de tabulação).

b) Cadeias de caracteres
Além dos caracteres isolados, podemos representar cadeias de caracteres
(strings) que são dispostas entre aspas.
“abacaxi”
“pula linha\n”

c) Inteiros
Valores numéricos que podem ou não ser precedidos de sinal.
d) Longos
Para diferenciá-los das constantes do tipo int, os valores do tipo long têm
como sufixo a letra L (maiúscula ou minúscula). A preferência é pela maiúscula
para não ocorrer confusão com o dígito 1.
1300000000L 0L -3241L

e) Hexadecimal
Os valores hexadecimais são representados com prefixo 0x ou 0X.
0x41 0xffff 0XC1da

g) Ponto flutuante
Os números reais possuem ponto decimal e podem ou não ser acompanhados
de sinal. Sua representação pode usar a notação exponencial com
especificadores de conversão e e E que é equivalente à notação científica.
3.14 2.71 -5423.7265 1. 3.286E2 6.01e-23
3.286E2 é a representação de 3,286 x 102
6.01e-23 é a representação de 6,01 x 10-23

Declaração e Inicialização de Variáveis


Para declarar uma variável, basta indicar seu tipo e seu nome na forma
<tipo> <lista de variáveis>;
conforme mostrado no programa abaixo

int rendimento, gastos;


char resp;

int main ()
{
int aplicacao;
char carac_atual;
...
}
onde foram declaradas as seguintes variáveis:
rendimento – é do tipo inteiro. Por ter sido declarada fora de qualquer função,
é considerada global, ou seja, pode ser acessada por qualquer função do
programa.
gastos – tem as mesmas características da variável rendimento.
resp – é do tipo caractere e também é global.
aplicação – é do tipo inteiro e só pode ser acessada pela função main (), pois
é considerada local, por ter sido declarada dentro do corpo da função.
carac_atual – é local como a anterior, porém do tipo caractere.

Quando declaramos as variáveis podemos ao mesmo tempo atribuir-lhes


valores iniciais como no exemplo abaixo:

int main ()
{
int aplicacao = 10000;
char carac_atual = $;
...
}

Representação de dados na memória


O byte é a unidade básica de informação, sendo que ele é composto de 8 bits
que podem assumir os valores 0 ou 1. Na memória, todos os dados, sejam eles
caracteres, inteiros ou reais, estão representados sob a forma binária.

a) char
Seja o trecho de código:
char c;
c = A;
Na memória, esta variável estaria armazenada da seguinte forma:

0 1 0 0 0 0 0 1

pois o caractere A é representado na forma binária como 65 (ou 0x41).


b) int
Seja o trecho de código:
int m;
m = 513;
Na memória, esta variável estaria armazenada da seguinte forma:

00000010 00000001

Função printf para mostrar valor armazenado nas variáveis


A função printf é capaz de mostrar, além de strings, valores das variáveis.
Execute o programa abaixo:

#include <stdio.h>

int main ()
{
char carac = 65;
int i = 1111;
float valorf = 32e-1;

printf ( “Valor de carac = %c\n” , carac );


printf ( “Valor de i = %d\n” , i );
printf ( “Valor de valorf = %f\n” , valorf );

return ( 0 );
}

5. OPERADORES
Nas linguagens de programação, o processamento inclui operações com
constantes e variáveis. Essas operações são representadas por símbolos
(operadores) que têm como característica gerar novos valores a partir das
transformações que exercem nos dados armazenados nas variáveis, nas
constantes ou atém mesmo nos valores originados por outras operações. A
esses valores que sofrem as operações demandadas chamamos de
operandos.
Operador de Atribuição Simples
A operação mais simples a se fazer com uma variável é a atribuição de valores,
a qual está presente em praticamente todas as linguagens de programação.
Em C, o operador = termina por gerar um resultado, que é o próprio valor
atribuído. Desta forma:
a = 2;
atribuirá à variável a e gerará o resultado 2.
Este raciocínio permitirá o uso da forma:
b = a = 2;
que atribuirá o valor 2 à variável a e atribuirá o resultado da operação a = 2 à
variável b, ficando ambas com o valor 2.

Operadores Aritméticos
Soma (+), subtração (-), multiplicação (*) e divisão (/) são operadores já
conhecidos em programação e dispensam maiores comentários.
Um operador menos comum seria:
% - módulo (resto da divisão): gera como resultado o resto da divisão
inteira. Por exemplo:
7%2 100 % 8
A primeira expressão resulta 1 e a segunda 4.

Até agora apresentamos somente operações binárias, ou seja, executadas em


dois operandos. Operadores unários utilizam apenas um operando. Como
operador aritmético unário temos o – (menos unário), que transforma números
positivos em negativos e vice-versa (-1, -valor, etc).
Os outros operadores unários aritméticos são o decremento e o incremento,
que serão apresentados a seguir.
Quando desenvolvemos um programa, é comum o uso da forma
i=i+1
que soma uma unidade a uma variável. Em C, podemos fazer esta operação
utilizando somente um operador, que substitui a forma anterior por
i++ ou ++i
Temos quatro formas de utilizar o incremento e decremento:
 i++ : pós-incremento: incrementa a variável de uma unidade e retorna como
resultado o valor anterior ao incremento;
 ++i : pré-incremento: incrementa a variável e retorna o resultado
incrementado;
 i-- : pós-decremento: decrementa a variável de uma unidade e retorna
como resultado o valor anterior ao decremento;
 --i : pré-decremento: decrementa a variável e retorna o resultado
decrementado;

Exemplo:
#include <stdio.h>

int main ()
{
int a1,a2;

a1 = 10;
a2 = a1++;
printf ( “Valor de a1 = %d, valor de a2 = %d\n” , a1 , a2 );
a1 = 10;
a2 = --a1;
printf ( “Valor de a1 = %d, valor de a2 = %d\n” , a1 , a2 );

return ( 0 );
}

Nota:
O comando a2 = a1++; equivale a:
a2 = a1;
a1++;

O comando a2 = --a1, equivale a:


--a1;
a2 = a1;
Operadores Relacionais
Quando queremos estabelecer uma comparação entre dois valores para tomar
uma decisão, utilizamos as operações relacionais. Estas geram como resultado
0 (zero) ou 1 (um), caso a expressão seja, respectivamente, falsa ou
verdadeira.
Os operadores > (maior), < (menor), >= (maior que ou igual a) e <= (menor
que ou igual a) são análogos aos utilizados em outras linguagens de
programação.
O operador == comparará os dois operandos e, se estes forem iguais,
retornará 1, caso contrário 0. Por sua vez != comparará se os dois operandos
são diferentes. Se forem diferentes, o operador retornará 1 e 0 se forem iguais.
Nota: muito cuidado para não confundir as formas:
a == b e a=b
A primeira retorna o valor da comparação e a segunda, o valor atribuído.

Você também pode gostar