2aProgC EstruturaTiposCondicionais PDF
2aProgC EstruturaTiposCondicionais PDF
2aProgC EstruturaTiposCondicionais PDF
1º Ano - 1º Semestre
2.1 Introdução
2.6 Funções
2.10 Estruturas
Algoritmos e Programação 1
2.1 Introdução
A linguagem C foi criada em 1972 nos Bell Telephone Laboratories por Dennis
Ritchie e tinha por finalidade permitir a escrita de um sistema operativo (o Unix),
utilizando uma linguagem de relativo alto nível, evitando assim o recurso ao
Assembly.
Algoritmos e Programação 2
Algumas notas sobra a história da linguagem C (continuação)
Algoritmos e Programação 3
Razões para programar em C
Algoritmos e Programação 4
Razões para programar em C
Algoritmos e Programação 5
Algumas características da linguagem C (1)
Algoritmos e Programação 6
Algumas características da linguagem C (2)
Algoritmos e Programação 7
Lógica da Programação em C
§ (*) Case sensitive: significa que um programa ou um compilador distingue letras maiúsculas e
minúsculas. O termo vem do inglês e significa “sensível ao tamanho da letra”.
§ Todas as instruções de C são escritas com minúsculas
Algoritmos e Programação 8
Ciclo de desenvolvimento de uma aplicação
Análise da situação/problema
Formulação de um Algoritmo
Algoritmo em pseudo-código
Tradução para Linguagem de Programação
Revisão do
Algoritmo Revisão do
Edição do código fonte
Código Sim
Detecção
Compilação do programa de erros de
sintaxe?
Não
Detecção
Sim de erros Execução
de lógica? Testes de verificação lógica do programa
Não
Programa Terminado
Algoritmos e Programação 9
Ambiente Visual Studio A m bi
e nte d
Em ambiente pr ogr e
Windows am aç
ão
Janela de edição
de programas
Janela de
saída
Algoritmos e Programação 10
2.2 Estrutura de um programa em linguagem C
§ Quando o tipo é omitido,
considera-se por omissão como
sendo inteiro
#include <biblioteca> § Sem tipo: void
#define § Nesta UC é obrigatório definir
tipos o tipo de dados, explicitamente
variáveis globais
funções A ordem de colocação das
funções é irrelevante
§ São colocadas na função main () todas as instruções que pretendemos sejam executadas
§ Todo o código a executar é colocado entre { }
Algoritmos e Programação 11
Exemplo:
Em C cada instrução deve ser
#include <stdio.h> terminada com ponto e
void main() vírgula (;)
{
printf(“Algoritmos e Programação") ;
}
uA linguagem C, como já se referiu, não possui mecanismos de input e output incorporados (muito poucas
palavras reservadas). Recorre a uma biblioteca de funções para fornecer esse tipo de serviços;
uPrintf (“print+formatado”): uma função que permite escrita no ecrã.
#include <stdio.h>
Directiva que indica ao pré-processador que deverá adicionar ao processo de compilação um ficheiro (stdio.h) existente (algures
no disco) para que tenha acesso a um conjunto de informações sobre as funções a utilizar.
A extensão h significa que esses ficheiros não têm código, mas apenas cabeçalhos (headers) das funções que representam
(designam-se habitualmente header files).
Algoritmos e Programação 12
O caractere especial \
O símbolo \ é usado para retirar o significado que tem um dado caractere
Exemplos:
q Tabulação horizontal: \t q Caractere ‘ (plica): \’
q Tabulação vertical: \v q Caractere ?(ponto de interrogação): \?
q Backspace: \b q Mudança de linha: \n
q Representação do caractere \: \\ q Caractere %: %%
q fim de string: \0 q Caractere “ (aspas): \”
/* Comentários */
Um comentário em C é qualquer conjunto de caracteres compreendidos entre /* e */ ou que vem após //
Algoritmos e Programação 13
2.3 Tipos de dados básicos
Algoritmos e Programação 14
Os tipos char, int, float, double
NOTA
Na declaração de um inteiro podem ser usados 4 prefixos distintos, para melhor definição das características da
variável:
Øshort - inteiro pequeno (2 Bytes) : ex. short int n1; // [-32 768, 32 767]
Ølong - inteiro longo (4 Bytes) : ex. long int n2; // [-2 147 483 648, 2 147 483 647]
Øsigned - inteiro com sinal (por omissão, todos os inteiros são sinalizados)
Øunsigned - inteiro sem sinal (apenas números positivos); ex. unsigned long int; // [0, 4 294 967 295]
Uma variável representa a área de memória, que contém um valor de um determinado tipo de dados. Para
associar um determinado tipo de dados a uma dada variável, é necessário proceder-se à declaração da
variável. A declaração da variável condiciona o tipo de dados que esta pode conter, durante a execução de um
programa.
A declaração de uma variável é feita colocando antes do seu identificador a palavra reservada que representa o
seu tipo.
cida
qual passa a ser conhe
Nome pelo o (;)
Fim de instruçã
Algoritmos e Programação 16
Regras a ter em conta na declaração de variáveis
u O identificador (nome) de uma variável pode ser constituído por letras do alfabeto e (maiúsculas ou
minúsculas), dígitos e ainda pelo caractere underscore (_), mas deve começar sempre por uma letra.
u O identificador de uma variável não pode:
- conter espaços e operadores;
- ser igual a uma palavra reservada.
u O número máximo de caracteres de um identificador depende do compilador, mas usualmente é
superior a 32.
u Existe distinção entre letras maiúsculas ou minúsculas na escrita de identificadores.
u A grande maioria dos compiladores não aceita caracteres acentuados.
Algumas recomendações
u O nome escolhido para uma variável deve sugerir qual a informação que armazena.
u A primeira letra do identificador deve ser minúscula.
u O nome de uma variável não deve ser todo escrito em letras maiúsculas: os programadores de C
usam tradicionalmente maiúsculas para identificar constantes.
u Quando um identificador usar mais do que uma palavra, usar a diferença entre maiúsculas e
minúsculas para as ligar (ex. totalDeVendas).
Algoritmos e Programação 17
“Localidade” das variáveis
A declaração de variáveis não tem que ser feita no início (isto é, numa parte declarativa, a
anteceder a operativa): pode ser feita em qualquer ponto do programa.
No entanto, é uma boa prática de programação, declarar as variáveis na parte declarativa.
Uma variável só passa a ser visível após a sua declaração.
As variáveis declaradas num bloco só são visíveis nesse bloco (geralmente um bloco é
delimitado por chavetas).
Algoritmos e Programação 18
Atribuição
Em C o operador de atribuição é constituído por igual “=“. Tal como o símbolo utilizado na
descrição algorítmica (“¬”), também este tem o significado “ toma o valor de “.
NOTAS
1. Quando uma variável é declarada, fica sempre com um valor que resulta do estado
aleatório dos bits que a constituem. Isto implica que o programador é responsável por
inicializar uma variável antes de a “usar” ou podem ocorrer coisas estranhas!!!
2. Uma variável pode ser automaticamente inicializada quando se faz a sua declaração.
Algoritmos e Programação 19
Atribuição
em C , s em pre que se faz uma
ue
Pode ser. Porq é devolvido, co
mo
lor do atr ibu to
atribuição, o va o ser utilizado
por
nçã o, p od e nd
se fosse uma fu
as exp ress õe s ou variáveis.
outr
a = 8;
3. As instruções a = b = c = 8;
b = 8; equivalem à instrução
c = 8;
4. Depois de executadas
as instruções:
x=1; a) Todas as variáveis ficam com 4;
y=2; b) x fica com 2; y com 3 e z com 4;
z=3; Qual está correcta?
x=y=z=4;
Qual é o valor de x, y e z?
Algoritmos e Programação 20
Operadores
n Operadores lógicos
NOTA
n Binários
Qualquer operação
§ E && entre inteiros devolve
§ OU || um inteiro
n Unário
§ Negação !
Algoritmos e Programação 21
Leitura de variáveis. Leitura e escrita de variáveis e expressões
Para ler qualquer variável do tipo int, char, float ou double utilizando a função scanf, precede-se
cada variável de &.
A string enviada para a função scanf não deve conter outros caracteres que não sejam os
indicadores de formatos.
Algoritmos e Programação 22
Formatos na instrução printf
O formato de leitura e escrita de variáveis inteiras short e long nas funções scanf e printf deve ser precedido dos
prefixos h (short) e l (long)
Exemplo
…
§ short int idade; /* ou short idade*/
§ long x;
§ printf(“Qual a idade? ”); scanf(“%hd”,&idade);
§ printf(“Qual o montante a depositar? ”); scanf(“%ld”,&x);
§ printf(“\nUma pessoa de %hd anos depositou %ld euros\n”,idade, x);
§ …
§O formato de leitura e escrita de um inteiro sem sinal nas funções scanf e printf é %u em vez de %d
§Pode especificar-se o nº mínimo de caracteres com que é escrito um valor e o nº de casas decimais:
printf(" %10.3f -> número com 10 caracteres e 3 casas decimais \n",n);
§0 total de caracteres pode omitir-se:
printf(" %.3f -> número com 3 casas decimais \n",n);
Algoritmos e Programação 24
Exemplos:
n Programa 1
#include <stdio.h>
void main()
{
printf(“\nPrimeiro Programa!\n”);
}
n Programa 2
#include <stdio.h>
void main()
{
int x;
printf(“\nInsira um valor: ”);
scanf(“%d”,&x);
printf(“\nO valor inserido foi %d”,x);
}
Algoritmos e Programação 25
Nota
O espaço em branco dentro de um scanf (ex: scanf(“ %c”, &ch) indica a esta função que ignore
todos os espaços em branco, new lines e tabs que encontrar
Outra forma de limpar todos os caracteres que existam no buffer do teclado: usar a função fflush(stdin)
Algoritmos e Programação 26
Caracteres
Um char é armazenado num só byte, pelo que o número máximo de caracteres representáveis é 256
Verifique!
Programa
#include <stdio.h>
void main()
Determine o
{
resultado! printf(“%c%c%crender faze%cdo!\n”,’\n’,’A’,’p’,’n’);
}
Algoritmos e Programação 27
getchar() versus scanf()
A leitura de caracteres pode ser realizada com a função scanf() ou com a função getchar().
getchar() DESTINA-SE UNICAMENTE À LEITURA DE UM CARACTER.
Caracteres e inteiros
Algoritmos e Programação 28
Tabela ASCII
Algoritmos e Programação 29
2.4 Testes e condições - expressões e operadores. Precedências
§ Condições lógicas
§ Instrução if - else
§ Precedências dos operadores
§ Instrução switch
§ Instrução break
Algoritmos e Programação 30
Condições lógicas
Uma expressão lógica tem como resultado o valor FALSO (0) ou o valor VERDADEIRO (1)
Em C o valor de uma variável pode ser aproveitado pelo programador como valor
lógico, utilizando-o como falso (caso seja 0) ou verdadeiro (caso seja diferente de 0)
Algoritmos e Programação 31
Operadores relacionais
Uma expressão que contenha um operador relacional devolve sempre como resultado o valor lógico FALSO(0) ou VERDADEIRO(1)
Operadores lógicos
Algoritmos e Programação 32
Os operadores ++ e --
ØQuando o operador de incremento ou decremento está antes da variável, esta é operada antes de ser
usada.
Ø Quando o operador está depois da variável, esta é usada e só depois incrementada ou decrementada.
Algoritmos e Programação 33
Atribuição composta
ØQuando uma variável recebe um novo valor que depende do seu valor actual, pode evitar-se a duplicação
da escrita da variável à esquerda e à direita, colocando o operador imediatamente junto (à esquerda) da
atribuição.
Exemplos
Exemplo Significado
x += 1; x = x+1;
y *= 3+2; y = y * (3+2);
a - = b+2; a = a - (b+2);
c /= 8+k; c = c/(8+k);
m %= 2; m = m%2;
Algoritmos e Programação 34
Prioridade dos operadores
Maior prioridade
Operador Associatividade
++ -- Direita ->Esquerda
= += -= *= /= Direita ->Esquerda
Menor prioridade
Algoritmos e Programação 35
Operador condicional ?
SINTAXE
condição ? expressão1 : expressão2;
Funcionamento
§ É avaliada a condição:
§ Se o resultado for Verdade, é devolvido o valor da expressão1;
§ Se o resultado for Falso, é devolvido o valor da expressão2.
Exemplo:
Cálculo de novo preço: se preço < 10, preço = preço *1.1, senão preço = preço * 1.05
preco = preco < 10 ? preco * 1.1 : preco *1.05;
A linha de código acima, poderia ser escrita de outras formas:
Ex. preco = preco * (preco < 10) ? 1.1 : 1.05;
Algoritmos e Programação 36
Instrução if - else
Decisão condicional
SINTAXE
SIMPLES
if (condição) ou
DUPLA
instrução1;
[else instrução2;]
§ …
§ printf(“Escreva um numero: ”);
scanf(“%d”, &n);
O
§
PL
§ if (n)
EM
§ else
§ printf(“%d é zero!\n”,n);
§ …
Observação: Embora pareçam semelhantes, a instrução if – else e o operador ? não são iguais:
a instrução if – else indica quais as instruções a executar, enquanto que o operador ? devolve um resultado
Algoritmos e Programação 37
EXEMPLO
i = -1;
printf (“%d\n”, ++i);
if (++i)
printf (“%d”, i++); 0
1
Algoritmos e Programação 38
Instrução switch
§ Funcionamento
§ Se o valor da expressão for igual a alguma das constantes que seguem os vários case, são executadas as
instruções que seguem o case correspondente.
§ Se o valor da expressão NÃO for igual a nenhuma das constantes apresentadas, são executadas as
instruções que seguem default.
§ O default é opcional. O que irá suceder, se não existir?
§ Observações
1. Em cada case do switch só pode estar presente para avaliação uma constante do tipo char, int ou long.
2. Quando o valor da expressão é igual à constante de um dos cases, é executada a instrução associada a
esse case bem como as instruções de todos os case seguintes (default incluído).
3. A instrução break permite parar a execução dentro de um switch, continuando o programa na instrução
imediatamente a seguir ao término do switch.
Algoritmos e Programação 39
Instrução break
…
printf(“Escreva uma expressão aritmética elementar: (operando1 operador operando2)”);
scanf(“%d %c %d”,&num1, &op, &num2);
switch (op)
{
case ‘+’: res = num1 + num2; break;
case ‘-’: res = num1 - num2; break;
case ‘*’:
case ‘x’: res = num1 * num2; break;
case ‘/’:
case ‘:’: res = num1 / num2; break;
default: op = ‘f’;
}
if (op != ‘f’)
printf(“%d %c %d = %.3f\n”, num1, op, num2, res);
else printf (“Operador inválido!\n”);
…
Algoritmos e Programação 40
Testes e condições
void main()
{
int ano, mes, numDias;
printf(“Indique um ano e um mês [1..12]: ");
scanf("%d %d", &ano, &mes);
switch (mes)
{
case 4:
case 6:
case 9:
case 11: numDias = 30; break;
case 2:
if ( ((ano%4==0) && (ano%100 !=0)) || (ano%400 ==0) )
numDias = 29;
else numDias=28;
break;
default: numDias = 31;
}
printf("\nO mês %d do ano %d tem %d dias\n", mes, ano, numDias);
}
Algoritmos e Programação 41