Escolar Documentos
Profissional Documentos
Cultura Documentos
1 Algoritmia 3 4 Sub-rotinas 68
1 Algoritmia
1.1 Linguagens naturais e linguagens formais
Pode definir-se linguagem como uma forma de comunicação que utiliza símbolos e
determinadas regras para os combinar. A linguagem pode ser natural ou formal.
quadro 1.1
quadro 1.2
sobre um conjunto de dados. Normalmente, estes programas são escritos, isto é, codi-
ficados, com recurso às linguagens de programação. Estas são projetadas para as
aproximar da linguagem humana, isto porque as linguagens-máquina apenas manipu-
lam dados binários, isto é, uma sucessão dos valores lógicos 0 e 1.
3
Introdução à programação
quadro 1.3
quadro 1.4
Alto 3.ª Primeiras linguagens de alto nível projetadas para serem Fortran, ALGOL,
facilmente entendidas e escritas pelo ser humano. A COBOL, BASIC,
partir desta geração, as linguagens necessitam de Visual Basic, C, C++,
compiladores ou interpretadores para as traduzir para a C#, Pascal, Python
linguagem-máquina. e Java
4
Algoritmia
Exercícios de aplicação 1
1 Assinale a opção correta nas questões seguintes.
1.2 Qual é a diferença entre uma linguagem de programação de alto nível e uma
linguagem de programação de baixo nível?
(A) É de alto nível quando se aproxima da linguagem máquina e é de baixo nível
quando se aproxima da compreensão dos seres humanos.
(B) É de alto nível quando se afasta da linguagem natural e é de baixo nível
quando se aproxima desta.
(C) É de alto nível quando se aproxima da compreensão dos seres humanos e é
de baixo nível quando se aproxima da linguagem máquina.
(D) Ambas as linguagens são diretamente executáveis pelo processador do
computador.
quadro 1.5
5
Introdução à programação
Um algoritmo pode ser escrito com o auxílio de uma linguagem natural, utilizando ex-
Os fluxogramas utilizam símbolos gráficos para representar o fluxo das ações neces-
sárias para resolver um problema, tal como está apresentado no quadro 1.6.
quadro 1.6
Processo/Operação Sub-rotina
Decisão/Comparação
quadro 1.7
Estrutura Elemento
Dados Variáveis
Constantes
Operadores Aritméticos
Relacionais
Lógicos
De cadeia de caracteres
6
Algoritmia
1
Compreender
o problema
2
(o que se pretende).
Identificar os dados de entrada
(os dados fornecidos
e a sua situação inicial)
3
Identificar os dados de saída
(os dados resultantes
do processamento).
Identificar as operações
4
de processamento
(os cálculos e as restrições para
a obtenção dos dados de saída
a partir dos dados de entrada).
5
• as variáveis necessárias
para armazenar as entradas
e efetuar o processamento;
6
• as instruções necessárias,
permitindo realizar a entrada
Testar o algoritmo.
de dados, o processamento
e a saída do resultado.
COD12MD © Porto Editora
A soma de dois números é exemplificada no quadro 1.8, com a apresentação das dife-
rentes formas de descrever a resolução do problema, tendo em vista a elaboração de
um programa de computador. Neste exemplo, e nas situações que se seguem, os pro-
gramas são apresentados na linguagem de programação C.
7
Introdução à programação
quadro 1.8
1. Início.
2. Ler dois valores inteiros (n1, n2).
3. Efetuar o cálculo da soma dos dois valores inteiros (s=n1+n2).
4. Escrever o resultado da soma (s).
5. Fim.
Fluxograma Pseudocódigo
Início
Algoritmo soma;
Variáveis n1,n2,s: inteiro;
Início
Escrever ("Digite um número inteiro") Escrever("Digite um número inteiro");
Ler(n1);
Ler (n1) Escrever("Digite outro número inteiro");
Ler(n2);
Escrever ("Digite outro número inteiro")
s←n1+n2;
Escrever("Soma = ",s);
Fim.
Ler (n2)
s ← n1 + n2
Fim
8
Algoritmia
Na implementação desta técnica, começa-se por criar uma tabela quadro 1.9. De se-
guida, coloca-se na primeira linha as variáveis e as operações que se pretendem tes-
tar. Depois, enumeram-se os passos na primeira coluna. Por último, preenche-se a ta-
bela passo a passo, atribuindo valores às variáveis e executando as operações
presentes no algoritmo.
quadro 1.9
Exercícios de aplicação 2
1 Selecione a opção correta nas seguintes questões:
9
Introdução à programação
10
Algoritmia
6 Crie um algoritmo em linguagem natural para cada uma das situações seguintes:
a) efetue a leitura de um número inteiro e apresente os dois números inteiros
consecutivos de valor superior.
b) efetue a leitura de uma medida em metros e apresente em decímetros,
centímetros e milímetros;
c) efetue a leitura de dois números inteiros e apresente o resultado da diferença do
primeiro pelo segundo.
d) efetue a leitura de um número real e apresente o resultado do cálculo de 10%
deste.
e) efetue a leitura de um número real e apresente o dobro deste.
11
Introdução à
programação
2 Programação
2.1 Utilizar uma linguagem de programação imperativa
O computador é uma máquina constituída por hardware e software que tem a capaci-
quadro 2.1
12
Programação
Utilizador
Aplicação Editor
Pré-Processador
Compilador
Software
Sistema Assembler
operativo
Livrarias
Linker
externas
Loader
Hardware
Barramento do sistema
COD12MD © Porto Editora
figura 2.1 Esquema representativo da interligação do hardware com o software e as diferentes etapas de
desenvolvimento de um programa em C.
13
Introdução à programação
quadro 2.2
A linguagem C foi criada em 1972, por Brian Kernighan e Dennis Ritchie, nos Estados
Unidos, na empresa AT&T Bell Labs. A origem e a designação desta linguagem ficaram
a dever-se à evolução da linguagem B, tendo sido ambas desenvolvidas pela mesma
empresa. Foi utilizada, inicialmente, no desenvolvimento do sistema operativo UNIX e,
posteriormente, no desenvolvimento, por exemplo: do sistema operativo Linux; da lin-
guagem de script PHP; do sistema de gestão de bases de dados MySQL; etc.
14
Programação
quadro 2.3
Endereço
https://www.onlinegdb.com
Endereço
https://www.online-cpp.com/
COD12MD © Porto Editora
15
Introdução à programação
Endereço
https://onecompiler.com/c
Endereço
https://www.jdoodle.com/
c-online-compiler/
Endereço
https://replit.com/~
16
Programação
quadro 2.4
Endereço
https://notepad-plus-plus.org/
downloads/
Endereço
https://www.codeblocks.org/
downloads/
Endereço
https://code.visualstudio.com/
17
Introdução à programação
Endereço
https://bloodshed-dev-c.
en.softonic.com/
Endereço
https://www.eclipse.org/
18
Programação
quadro 2.5
Resultado (Output)
Indique um número inteiro 17
Indique outro número inteiro 13
Soma de 17 com 13 = 30
Neste exemplo quadro 2.5, o programa começa com a diretiva de inclusão "#include",
fazendo referência à biblioteca <stdio.h>. De seguida, na função main() são escritas as
declarações das variáveis e as instruções a executar, delimitadas pelas chavetas { }. Em
C, utiliza-se o ponto e vírgula (;) no fim de cada linha de instrução. A execução da função
main() termina com a instrução return 0.
São apresentados comentários, definidos por linhas de texto assinaladas no início por
//, podendo também ser delimitadas por /*… */, resultando, respetivamente, na defini-
ção de uma linha isolada de comentário ou num conjunto de linhas de comentário.
Estas linhas são ignoradas pelo compilador e são incorporadas nos programas pelos
programadores, com o objetivo de explicar determinados aspetos do código, permi-
tindo uma compreensão mais rápida deste.
Exercícios de aplicação 3
1 Defina o conceito de programa de computador.
(A) É uma sequência de instruções codificadas numa linguagem de programação.
(B) É uma representação gráfica de um algoritmo.
(C) É um conjunto de operações executadas numa linguagem de programação.
(D) É uma representação de um algoritmo numa linguagem natural.
COD12MD © Porto Editora
19
Introdução à programação
4 Indique o símbolo que permite definir um comentário com apenas uma linha na
linguagem C.
(A) :
(B) /*
(C) //
(D) */
Bibliotecas-padrão da linguagem C
As bibliotecas-padrão da linguagem C estão divididas pelas suas diferentes funcionalida-
des e são identificadas por nomes sugestivos terminados pela extensão '.h'. Disponibili-
zam macros, definições de tipo de dado e de funções, permitindo simplificar a realização
de inúmeras operações, como, por exemplo: cálculos matemáticos, manipulação de ca-
deias de caracteres, operações de Input/Output, etc. As bibliotecas podem ser incorpora-
das no início dos programas, através da diretiva do pré-processador #include<nome_bi-
blioteca.h>.
quadro 2.6
Bibliotecas-padrão Descrição
20
Programação
Bibliotecas-padrão Descrição
float.h Define um conjunto de funções para a determinação do tamanho dos tipos reais.
quadro 2.7
quadro 2.8
21
Introdução à programação
As constantes são identificadores para designar valores que não variam ao longo
O identificador das constantes deve ser definido utilizando apenas letras maiúsculas,
permitindo distingui-las facilmente das variáveis.
quadro 2.9
#define<ID> <valor>
Sintaxe ou
const tipo_de_dado < ID>=<valor>;
#define PI 3.1415926
Exemplo ou
const float PI = 3.1415926;
Identificadores
Os identificadores são designações definidas pelo programador, no código de um pro-
grama, identificando elementos como: constantes, variáveis e funções, entre outros. A
definição dos identificadores deve obedecer às regras seguintes:
▪ o primeiro carácter não pode ser numérico, tendo de ser alfabético (a…z,
A…Z) ou underscore (_);
▪ devem ser únicos, não se podendo repetir num programa;
▪ apenas devem ser compostos por caracteres alfanuméricos (a…z, A…Z e
0…9) e underscore (_);
▪ não podem ser uma palavra reservada da linguagem C;
▪ não podem ter espaços em branco, sendo utilizado o underscore para
interligar as palavras ou o primeiro carácter de cada palavra em maiúscula;
▪ devem ser palavras de fácil leitura, curtas e significativas (relacionadas com o
contexto);
▪ as letras maiúsculas e minúsculas são interpretadas de forma diferente,
sensíveis a maiúsculas e minúsculas, resultando identificadores diferentes
(linguagem C é case sensitive);
▪ os caracteres acentuados, como, por exemplo, ã, é, á, ê, não devem ser
utilizados.
22
Programação
A linguagem C tem disponíveis os tipos de dados básicos: void, bool, int, char, float e
double. Por outro lado, existem ainda outros tipos de dados que são definidos a partir dos
tipos de dados básicos int, double e char, recorrendo à utilização dos modificadores:
quadro 2.10
Tipos de Bytes
Descrição Intervalo de valores
dados básicos ocupados
quadro 2.11
Bytes
Tipos de dados Descrição Intervalo de valores
ocupados
long int Números inteiro longo 8 −4 294 967 296 a 4 294 967 294
23
Introdução à programação
quadro 2.12
scanf("%d", &num_alunos);
Exemplo scanf ("%f %f", &classif1, &classif2);
scanf("%s",prim_nome);
24
Programação
As instruções de saída servem para escrever dados para o exterior do programa (out-
put). Na linguagem C é utilizada a função printf(), para a escrita de dados formatados,
no ecrã (dispositivo de saída padrão). A expressão de controlo desta função pode
apresentar texto, caracteres especiais começados pela \ quadro 2.13, e os especifica-
dores de formatos quadro 2.15, a aplicar de acordo com os tipos de dados das variáveis
indicadas, pela sua ordem.
quadro 2.13
quadro 2.14
int main(void)
{
printf("SIMBOLO \"Underscore\" ");
return 0;
}
25
Introdução à programação
quadro 2.15
Especificadores
de formato de Descrição Exemplo
tipos de dados
26
Programação
Especificadores
de formato de Descrição Exemplo
tipos de dados
27
Introdução à programação
Por outro lado, na conversão explícita as alterações efetuadas no tipo de dados das
variáveis ocorrem em resultado da indicação, entre parêntesis, do tipo de dado preten-
dido, por exemplo int e float.
int main(void)
{
float divide;
int y=9, x=2;
divide=(float) y/x;
printf("Resultado = %f",divide);
return 0;
}
28
Programação
Operadores aritméticos
Os operadores aritméticos permitem a realização de operações matemáticas com
valores do tipo numérico, cujo resultado é ainda um valor do tipo numérico. O quadro 2.18
apresenta os operadores aritméticos utilizados na linguagem C.
quadro 2.18
Operador Operação
O operador % (resto da divisão inteira) só pode ser aplicado a valores do tipo inteiro.
Uma operação entre valores inteiros resulta sempre num valor do tipo inteiro.
Por outro lado, uma operação em que pelo menos um dos operandos é real resulta
sempre num valor do tipo real.
quadro 2.19
29
Introdução à programação
Operadores de atribuição
quadro 2.20
Operador Operação
= Atribuição simples
*= Atribuição de multiplicação
/= Atribuição de divisão
%= Atribuição de módulo
+= Atribuição de adição
−= Atribuição de subtração
quadro 2.21
Operador
Exemplo
#include <stdio.h>
//Demonstração do operador de atribuição
int main(void)
{
int n;
float m=13.9;
=
n=19;
printf("m = %f, n = %d\n",m,n);
return 0;
}
Resultado (Output)
m = 13.900000, n = 19
Exemplo
#include <stdio.h>
//Demonstração do operador *=
int main(void)
{
int m=4, n=6;
*= n*=m;
printf("Multiplica n por m = %d\n",n);
return 0;
COD12MD © Porto Editora
Resultado (Output)
Multiplica n por m = 24
30
Programação
Operador
#include <stdio.h>
//Demonstração do operador /=
int main(void)
{
int m=4, n=6;
/= n/=m;
printf("Divisão inteira de n por m = %d\n",n);
return 0;
}
Resultado (Output)
Exemplo
#include <stdio.h>
//Demonstração do operador %=
int main(void)
{
int m=4, n=6;
%= n%=m;
printf("Resto da divisão inteira de n por m = %d\n",n);
return 0;
}
Resultado (Output)
Exemplo
#include <stdio.h>
//Demonstração do operador +=
int main(void)
{
int m=4, n=6;
+= n+=m;
printf("Adiciona n a m = %d\n",n);
return 0;
}
Resultado (Output)
Adiciona n a m = 10
Exemplo
#include <stdio.h>
//Demonstração do operador −=
int main(void)
{
int m=4, n=6;
−= n-=m;
printf("Subtrai n a m = %d\n",n);
return 0;
}
COD12MD © Porto Editora
Resultado (Output)
Subtrai n a m = 2
31
Introdução à programação
Operadores unários
quadro 2.22
Operador
Operação
Exemplo
#include <stdio.h>
int main(void)
{
int a = −3;
+ printf("Valor inicial (negativo) = %d\n",a);
a = +3;
printf("Valor final (positivo) = %d\n",a);
return 0;
}
Resultado
Operação
Exemplo
#include <stdio.h>
int main(void)
{
int a = +3;
− printf("Valor inicial (positivo) = %d\n",a);
a = −3;
printf("Valor final (negativo) = %d\n",a);
return 0;
}
Resultado
COD12MD © Porto Editora
32
Programação
Operador
Exemplo
#include <stdio.h>
int main(void)
{
int a=1,b=1;
++
printf("Valores iniciais a = %d e b = %d\n",a,b);
printf("Pos-incremento a++ = %d\n",a++);
printf("Pre-incremento ++b = %d\n",++b);
return 0;
}
Resultado
Valores iniciais a = 1 e b = 1
Pos-incremento a++ = 1
Pre-incremento ++b = 2
Operação
Exemplo
#include <stdio.h>
int main(void)
{
int a=1,b=1;
−−
printf("Valores iniciais a = %d e b = %d\n",a,b);
printf("Pos-decremento a-− = %d\n",a-−);
printf("Pre-decremento −-b = %d\n",−-b);
return 0;
}
Resultado
Valores iniciais a = 1 e b = 1
Pos-decremento a-− = 1
Pre-decremento −-b = 0
Operação
Exemplo
#include <stdio.h>
int main(void)
& {
int num;
printf("Endereco de memoria da variável num = %d",&num);
return 0;
}
COD12MD © Porto Editora
Resultado
33
Introdução à programação
Operação
Exemplo
#include <stdio.h>
int main(void)
sizeof()
{
printf("Tamanho de um inteiro em bytes: %ld\n",sizeof(int));
return 0;
}
Resultado
Operadores relacionais
Os operadores relacionais são usados para efetuar comparações entre expressões,
resultando sempre um dos valores lógicos: true (verdadeiro) ou false (falso). O
quadro 2.23 apresenta os operadores relacionais utilizados na linguagem C com os res-
petivos exemplos, em que o resultado pode assumir os valores inteiros de 0 corres-
ponde ao valor lógico de False, e 1 corresponde ao valor lógico de True. A coluna Re-
sultado apresenta o resultado das operações da coluna Exemplo, considerando que
às variáveis a e b são atribuídos os valores 13 e 5, respetivamente.
quadro 2.23
Exemplo
Operador Operação (considerando Resultado
que a = 13 e b = 5)
34
Programação
quadro 2.24
Programa em C
#include <stdio.h>
/*Demonstração do funcionamento dos operadores relacionais*/
int main(void)
{
int a=13, b=5;
printf("OPERADORES RELACIONAIS\n");
printf("Considerando a = %d e b = %d (TRUE <=> 1 e FALSE <=> 0)\n",a,b);
printf("a==b = %d\n",a==b);//Operador de igualdade
printf("a!=b = %d\n",a!=b);//Operador diferente
printf("a<b = %d\n",a<b);//Operador menor
printf("a>b = %d\n",a>b);//Operador maior
printf("a<=b = %d\n",a<=b);//Operador menor ou igual
printf("a>=b = %d\n",a>=b);//Operador maior ou igual
return 0;
}
Resultado (Output)
OPERADORES RELACIONAIS
Considerando a = 13 e b = 5 (TRUE <=> 1 e FALSE <=> 0)
a==b = 0
a!=b = 1
a<b = 0
a>b = 1
a<=b = 0
a>=b = 1
Operadores lógicos
Os operadores lógicos realizam operações lógicas, devolvendo sempre um dos valo-
res lógicos: true ou false, de acordo com as tabelas de verdade.
quadro 2.25
Operador a b Resultado
True − False
NOT
False − True
35
Introdução à programação
quadro 2.26
Exemplo
Operador Operação (considerando que Resultado
x = 13, y = 5 e z = 2)
AND / E
&& ((x>y) && (y<z)) False (0)
(conjunção)
OR / Ou
|| ((x<>y) || (y<z)) True (1)
(disjunção)
NOT / Não
! ! (x>y) False (0)
(negação)
quadro 2.27
Programa em C
#include <stdio.h>
//Demonstração do funcionamento dos operadores lógicos
int main(void)
{
int x=13, y=5, z=2;
printf("OPERADORES LÓGICOS (&&, ||, !)\n");
printf("Considerando x = %d, y = %d e z = %d (TRUE <=> 1 e FALSE <=> 0)\n",x,y,z);
//Operador de conjunção && (AND)
printf("((x>y)&&(y<z)) = %d\n",((x>y)&&(y<z)));
//Operador de disjunção || (OR))
printf("((x>y)||(y<z)) = %d\n",((x>y)||(y<z)));
//Operador de negação ! (NOT)
printf("!(x>y) = %d\n",!(x>y));
return 0;
}
Resultado (Output)
36
Programação
quadro 2.28
Programa em C
#include <stdio.h>
#include <stdbool.h>
//Tabelas de Verdade (Operadores lógicos &&, || e !)
int main(void)
{
bool a,b;
printf("Considerando True <=> 1 E FALSE <=> 0\n");
a=true;
printf("TABELA DE VERDADE − OPERADOR LÓGICO ! (NOT))\n");
printf("a=%d e !a=%d\n",a,!a);
a=false;
printf("a=%d e !a=%d\n",a,!a);
printf("TABELA DE VERDADE − OPERADOR LÓGICO && (AND))\n");
a=true;
b=true;
printf("a=%d b=%da&&b=%d\n",a,b,a&&b);
a=true;
b=false;
printf("a=%d b=%da&&b=%d\n",a,b,a&&b);
a=false;
b=true;
printf("a=%d b=%da&&b=%d\n",a,b,a&&b);
a=false;
b=false;
printf("a=%d b=%da&&b=%d\n",a,b,a&&b);
printf("TABELA DE VERDADE − OPERADOR LÓGICO || (OR))\n");
a=true;
b=true;
printf("a=%d b=%da&&b=%d\n",a,b,a||b);
a=true;
b=false;
printf("a=%d b=%da&&b=%d\n",a,b,a||b);
a=false;
b=true;
printf("a=%d b=%da&&b=%d\n",a,b,a||b);
a=false;
b=false;
printf("a=%d b=%da&&b=%d\n",a,b,a||b);
return 0;
}
Resultado (Output)
37
Introdução à programação
quadro 2.29
O quadro 2.30 exemplifica a aplicação das regras de prioridade dos principais operadores
na resolução de uma expressão e que faz uso de parênteses. De referir que, tal como na
matemática, o uso de parênteses nas expressões, dá prioridade às operações que se
encontram dentro dos parênteses, relativamente a outras que se encontram fora deles.
quadro 2.30
!(True) || 10 * 2 > 22
!(True) || 20 > 22
!(True) || False
False || False
False
COD12MD © Porto Editora
38
Programação
quadro 2.31
#include <stdio.h>
int main(void)
{
int c1,c2,c3,c4,c5,c6;
int a1;
printf("Linguagem C − exemplificação da aplicação das regras de prioridade dos
operadores\n");
printf("Determinar o resultado da expressão seguinte:\n");
printf("!((6>=3)&&(5!=6))||10*2>22\n");
c1=6>=3;
c2=5!=6;
printf("= !(%d && %d)||10*2>22\n",c1,c2); //1ª Prioridade −> ()
c3=c1&&c2;
printf("= !(%d)||10*2>22\n",c3); //1ª Prioridade −> ()
c4=!(c3);
printf("= %d||10*2>22\n",c4); // 2ª Prioridade −> !
a1=10*2;
printf("= %d||%d>22\n",c4,a1); //3ª Prioridade −> *
c5=a1>22;
printf("= %d||%d\n",c4,c5); //7ª Prioridade −> ||
c6=c5||c4;
printf("= %d",c6);
return 0;
}
Resultado (Output)
Exercícios de aplicação 5
1 Classifique em verdadeiras ou falsas as afirmações seguintes.
(A) A instrução que permite a entrada de dados é a função scanf().
(B) Os operandos são valores que recebem a ação dos operadores.
(C) O operador % pode ser aplicado a valores do tipo float.
(D) Uma operação em que pelo menos um dos operandos é real resulta sempre num
valor do tipo real.
COD12MD © Porto Editora
39
Introdução à programação
Descrição Especificadores
Aplicável ao tipo de dado int.
Aplicável ao tipo de dado float.
Aplicável aos tipos de dado float e double, utilizando notação
científica.
Aplicável ao tipo de dado char e signed char (carácter e
carácter com sinal).
Aplicável ao tipo de dado string (cadeia de caracteres).
Operador Operação
==
!=
&&
||
!
a) b)
#include <stdio.h> #include <stdio.h>
int main(void) int main(void)
{ {
int num; int num;
num=3; num=5;
num*=3; num=num/2;
printf("%d",num); printf("%d",num);
return 0; return 0;
} }
40
Introdução à
programação
3 Estruturas de controlo
As estruturas de controlo avaliam o desenrolar das instruções de um programa.
Estas subdividem-se em estruturas: sequencial, de decisão ou seleção e de repeti-
ção ou de ciclos.
quadro 3.1
Pseudocódigo Fluxograma
Ler (preço)
Fim
41
Introdução à programação
quadro 3.3
Programa
#include<stdio.h>
//Estrutura de seleção simples
int main(void)
{
int quantidade;
float preco,total;
char designa[10];
printf("Digite a designação do produto\n");
scanf("%s",designa);
printf("Digite a quantidade do produto\n");
scanf("%d",&quantidade);
printf("Digite o preço\n");
scanf("%f",&preco);
total=quantidade*preco;
printf("O valor total do produto %s é %3.2f",designa,total);
return 0;
}
Resultado (Output)
Digite a designação do produto:
Lápis
Digite a quantidade do produto:
10
Digite o preço:
0.50
O valor total do produto Lápis é 5.00
42
Estruturas de controlo
Exercícios de aplicação 6
1 Crie um algoritmo, em pseudocódigo e em fluxograma, que permita a leitura de
dois números reais e apresente a sua média.
▪ simples;
▪ composta;
▪ encadeada;
▪ múltipla.
43
Introdução à programação
De notar que, neste caso, não aparecem as palavras Senão e Else porque não é ne-
cessário desenvolver o ramo False da estrutura. É de realçar, também, que, na lingua-
gem C, pelo facto de existir mais do que uma instrução no ramo True da estrutura, é
necessário utilizar o conjunto {… } (Início… Fim) para agrupá-las e associá-las ao refe-
rido ramo. Na linguagem C é obrigatório o uso de chavetas, em determinadas estrutu-
ras, para agrupar as instruções.
quadro 3.4
Sintaxe Fluxograma
… Início
Se <expressão> Então
…
FimSe; Escrever (“Digite o
seu primeiro nome”)
…
Pseudocódigo
Ler (nome)
Algoritmo peso_inf_70;
Variável dif, peso: real;
Escrever ("Digite
nome: texto; o seu peso")
Início
Escrever (“Digite o seu primeiro nome”);
Ler (nome); Ler (peso)
Escrever (“Digite o seu peso”);
Ler (peso);
Se peso <70 Então Se peso < 70 Então False
dif←70-peso;
Escrever (“Falta ao ”,nome,” “,dif,” Kg para atingir os 70 Kg”); True
FimSe;
Escrever (“O programa vai terminar”); dif←70-peso
Fim.
Fim
44
Estruturas de controlo
quadro 3.5
Rui 67 67<70
3.º passo
True
quadro 3.6
Sintaxe Programa
float dif,peso;
char nome[25];
Resultado (Output)
45
Introdução à programação
quadro 3.7
Sintaxe Fluxograma
… Início
Se <expressão> Então
… Escrever ("Digite
Senão um número inteiro")
…
FimSe Ler (num1)
…
Escrever ("Digite um
Pseudocódigo número inteiro
diferente do anterior")
Algoritmo maior_de_2;
Variável maior, num1, num2: inteiro;
Ler (num2)
Início
Escrever ("Digite um número inteiro");
Ler (num1); Se num1 > num2 False
Escrever ("Digite um número inteiro diferente do anterior");
Ler (num2); True
Se num1 > num2 então
maior ← num1 maior ← num1 maior ← num2
Senão
maior ← num2;
FimSe;
Escrever ("O maior de
Escrever ("O maior de dois números é ", maior); dois números é ", maior)
Fim.
Fim
46
Estruturas de controlo
Primeira:
▪ num1 igual a 7
▪ num2 igual a 2
Segunda:
▪ num1 igual a 5
▪ num2 igual a 6
quadro 3.8
1.º passo 7
2.º passo 7 2
7>2
3.º passo 7 2
True
4.º passo 7 2 − 7 −
O maior de dois
5.º passo 7 2 − 7 −
números é 7
1.º passo 5
2.º passo 5 6
5>6
3.º passo 5 6
False
4.º passo 5 6 − − 6
O maior de dois
5.º passo 5 6 − − 6
números é 6
-se à situação em que o utilizador introduz dois números inteiros, diferentes entre si,
efetuando depois a sua comparação. Se o primeiro número for maior do que o se-
gundo, então o primeiro número é atribuído à variável maior. Caso contrário, o segundo
número é atribuído à variável maior. Por último, apresenta o maior dos dois números.
47
Introdução à programação
quadro 3.9
Resultado (Output)
Exercícios de aplicação 8
1 Crie um algoritmo, em pseudocódigo e em fluxograma, que permita a leitura de
um valor inteiro e a seguir determina, se o valor é par ou ímpar, surgindo uma das
mensagens, respetivamente, "O valor inserido é par" ou "O valor inserido é ímpar".
48
Estruturas de controlo
quadro 3.10
Sintaxe Pseudocódigo
… Algoritmo Maior_Igual_2;
Se <expressão> Então Variável num1, num2: inteiro;
… Início
Senão Se <expressão> Então Escrever ("Digite um número inteiro");
… Ler (num1);
Senão Escrever ("Digite outro número inteiro");
… Ler (num2);
FimSe; Se num1 = num2 Então
FimSe; Escrever ("Os números são iguais")
… Senão Se num1 > num2 Então
Escrever ("O maior dos dois números é ",num1)
Senão
Escrever ("O maior dos dois números é ",num2);
FimSe;
FimSe;
Fim.
Fluxograma
Início
Escrever ("Digite
um número inteiro")
Ler (num1)
Escrever ("Digite
outro número inteiro")
Ler (num2)
Fim
49
Introdução à programação
Primeira:
▪ num1 igual a 16
▪ num2 igual a 16
Segunda:
▪ num1 igual a 13
▪ num2 igual a 19
quadro 3.11
1.º passo 16
2.º passo 16 16
3.º passo 16 16
16=16
4.º passo 16 16
True
Os números
5.º passo 16 16 − −
são iguais
1.º passo 13
2.º passo 13 19
13=19
3.º passo 13 19
False
13>19
4.º passo 13 19 −
False
50
Estruturas de controlo
quadro 3.12
Sintaxe Programa
Resultado (Output)
Digite um número inteiro
16
Digite outro número inteiro
16
Os números são iguais
Exercícios de aplicação 9
1 Crie um algoritmo, em pseudocódigo e em fluxograma, que permita a leitura de
um número inteiro. De seguida, determina se o número é de valor positivo,
negativo ou nulo, apresentando uma mensagem correspondente a uma das três
situações possíveis.
51
Introdução à programação
quadro 3.13
Sintaxe Fluxograma
… Início
Selecionar Caso <variável>
<valor1>:…
… Escrever
<valorn>: … ("Insira um número
Senão … inteiro de 1 a 7")
FimSelecionarCaso
…
Ler (dia)
Pseudocódigo
Algoritmo Designa_dias;
Variáveis dia:inteiro; Escrever
dia=1 True
("Segunda-feira")
Início
Escrever ("Insira um número inteiro de 1 a 7"); False
Ler (dia);
Seleccionar Caso Dia Escrever
dia=2 True
1: Escrever ("Segunda-feira"); ("Terça-feira")
2: Escrever ("Terça-feira");
False
3: Escrever ("Quarta-feira");
4: Escrever ("Quinta-feira");
Escrever
5: Escrever ("Sexta-feira"); dia=3 True
("Quarta-feira")
6: Escrever ("Sábado");
7: Escrever ("Domingo") False
Senão Escrever ("Inseriu um número inválido");
FimSelecionarCaso; Escrever
dia=4 True
("Quinta-feira")
Fim.
False
Escrever
dia=5 True
("Sexta-feira")
False
Escrever
dia=6 True
("Sábado")
False
Escrever
dia=7 True
("Domingo")
False
Escrever
("Inseriu um número inválido")
Fim
52
Estruturas de controlo
Primeira:
▪ dia igual a 4
Segunda:
▪ dia igual a 9
quadro 3.14
dia Saída
1.º passo 4
1.º passo 9
quadro 3.15
Sintaxe Programa
Resultado (Output)
Insira um número inteiro de 1 a 7
4
Quinta-feira
53
Introdução à programação
A estrutura switch… case, de acordo com o valor da variável dia, permite apresentar o
Exercícios de aplicação 10
1 Crie um algoritmo, em pseudocódigo e em fluxograma, que permita efetuar a
leitura de dois números reais, em que o segundo número terá de ser diferente de
zero. Mediante a seleção de uma opção (carácter alfabético), deve ser efetuada
uma operação aritmética com os números lidos anteriormente e apresentado o
resultado da operação. Utilize uma estrutura de seleção múltipla (Selecionar
Caso) para implementar um menu com as seguintes opções:
a) Adição
b) Subtração
c) Multiplicação
d) Divisão
Caso seja selecionada uma opção diferente destas, será apresentada a
mensagem "Opção inválida".
54
Estruturas de controlo
Os quadros 3.16 e 3.19 apresentam as sintaxes da estrutura repetitiva do ciclo For, respe-
tivamente, em algoritmia e em linguagem C. Por outro lado, nos mesmos quadros pode
ver-se o exemplo de um algoritmo em pseudocódigo e em fluxograma, que calcula a
média de n números inteiros, e o respetivo programa em linguagem C.
quadro 3.16
Sintaxe Fluxograma
… Início
Para <variávelcontador:=valorinicial > Até <valorfinal> Fazer
<bloco de instruções>
Escrever ("Indique quantos
FimPara inteiros quer digitar")
…
Algoritmo med_num;
Variáveis i, n, soma, num: inteiro; soma ← 0
media: real;
Início
i ← 1
Escrever ("Indique quantos inteiros quer digitar");
Ler (n);
soma ← 0;
Para i ← 1 Até n Fazer
Escrever ("Indique um número inteiro"); i < = n False
Ler (num);
soma ← soma + num; True
FimPara;
Escrever ("Indique
media ← soma / n; um número inteiro")
Escrever ("A média dos números indicados é ",media);
Fim.
Ler (num)
i ← i + 1
media ← soma / n
Fim
nado à variável soma, que funciona como um acumulador. Quando o número de itera-
ções terminar, é calculada a média tendo por base os valores que foram acumulados
na variável soma e a quantidade de números inteiros que foi indicada pelo utilizador
(n). Por último, é apresentado o resultado do cálculo da média.
55
Introdução à programação
▪ n igual a 2;
▪ num igual a 10 e a 12.
quadro 3.17
1.º passo 2
2º passo 2 0
3.º passo 2 0 1
1<=2
4.º passo 2 0 1
True
5.º passo 2 0 1 − 10
6.º passo 2 − 1 − 10 10
7.º passo 2 − − − 10 10 2
2<=2
8.º passo 2 − − 10 10 2
True
9.º passo 2 − − − 12 10 2
10.º passo 2 − − − 12 22 2
11.º passo 2 − − − 12 22 3
3<=2
12.º passo 2 − − 12 22 3
False
13.º passo 2 − − − 12 22 3 11
A média dos
14.º passo 2 − − − 12 22 3 11 números
indicados é 11
56
Estruturas de controlo
quadro 3.18
Passo Descrição
4.º É testada a condição i<=n (1<=2); como é True, continua a execução do ciclo For.
É executada a primeira instrução do ciclo, sendo atribuído o valor 10 à variável num (pelo
5.º
utilizador).
8.º É testada a condição i<=n (2<=2); como é True, continua a execução do ciclo For.
É executada a primeira instrução do ciclo, sendo atribuído o valor 12 à variável num (pelo
9.º
utilizador).
12.º É testada a condição i<=n (3<=2); como é False, termina a execução do ciclo For.
É efectuado o cálculo da média (media), tendo por base o valor acumulado em soma
13.º
(soma←22) e o valor de n (n←2), resultando o valor 11.
COD12MD © Porto Editora
57
Introdução à programação
O quadro 3.19 apresenta a sintaxe da estrutura repetitiva do ciclo For e o respetivo pro-
quadro 3.19
Sintaxe
…
For (variável=valorinicial; variável<valorfinall; variável++)
{
<Bloco de intruções>
}
Programa
#include <stdio.h>
int main(void)
{
int i,n,soma=0,num;
float media;
printf("Indique quantos inteiros quer digitar\n");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("Indique um número inteiro\n");
scanf("%d",&num);
soma+=num;
}
media=(float)soma/n;
printf("A média dos números indicados é %f",media);
return 0;
}
Resultado (Output)
Exercícios de aplicação 11
1 Qual das seguintes opções não é uma instrução específica das estruturas de
controlo?
(A) if
(B) for
(C) while
(D) printf
58
Estruturas de controlo
59
Introdução à programação
lógica é avaliada no início da estrutura, o bloco de instruções não chega a ser execu-
Este ciclo pode, também, ser implementado sabendo inicialmente o número de vezes
que a execução do bloco de instruções vai ser repetido. Neste caso, é utilizada uma
variável contador destinada a controlar a execução do ciclo, à semelhança do funcio-
namento do ciclo For.
quadro 3.20
Sintaxe Pseudocódigo
… Algoritmo Conta_nomes;
Enquanto <expressão> Fazer Variável conta: inteiro;
<bloco de instruções> nome: caracter;
FimEnquanto; Início
… conta ← 0;
Escrever ("Digite o primeiro nome");
Ler (nome);
Enquanto nome <> "Fim" Fazer
conta ← conta + 1;
Escrever ("Digite o primeiro nome");
Ler (nome);
FimEnquanto;
Escrever ("Foram digitados ",conta," primeiros nomes");
Fim.
Fluxograma
Início
conta ← 0
Ler(nome)
True
conta ← conta + 1
Ler(nome)
Fim
60
Estruturas de controlo
quadro 3.21
1.º passo 0
Rui<>Fim
3.º passo 0 Rui
True
Ana<>Fim
6.º passo − Ana 1
True
Fim<>Fim
9.º passo − Fim 2
False
COD12MD © Porto Editora
Foram digitados
10.º passo − Fim − 2 2 primeiros
nomes
61
Introdução à programação
Passo Descrição
É atribuído à variável nome a palavra Rui (pelo utilizador). O conteúdo desta variável é
2.º testado na condição do ciclo While, antes de qualquer repetição de instruções no interior
do mesmo.
3.º É testada a condição nome<>"Fim" (Rui<>Fim); como é True, continua a execução do ciclo.
É executada a instrução do ciclo, sendo atribuída à variável nome a palavra Ana (pelo
5.º
utilizador).
É executada a instrução do ciclo, sendo atribuída à variável nome a palavra Fim (pelo
8.º
utilizador).
62
Estruturas de controlo
quadro 3.23
Sintaxe Programa
… #include<stdio.h>
While <expressão> #include<string.h>
{
int main(void)
<Bloco de instruções> {
} int conta=0;
.... char nome[20];
return 0;
}
Resultado (Output)
Digite o primeiro nome Rui
Digite o primeiro nome Ana
Digite o primeiro nome Fim
Foram digitados 2 primeiros nomes
Exercícios de aplicação 12
1 Resolva os exercícios 4 e 5 do exercício de aplicação 11, criando programas na
linguagem C, substituindo o ciclo For pelo ciclo While.
Este ciclo pode, também, ser implementado sabendo inicialmente o número de vezes
que a execução do bloco de instruções vai ser repetido. Neste caso, é utilizada uma
COD12MD © Porto Editora
variável contador que vai permitir controlar a execução do ciclo, à semelhança do fun-
cionamento do ciclo For.
63
Introdução à programação
Nos quadros 3.24 e 3.27 são apresentadas as sintaxes da estrutura de repetição do ciclo
quadro 3.24
Sintaxe Fluxograma
… Início
Fazer
…
Enquanto <expressão>;
…
Pseudocódigo
Escrever ("Medidas
Algoritmo Retangulo; do retângulo")
Variável area, perimetro, comp, larg: real;
resp: caracter;
Início Escrever ("Indique a
Fazer largura em metro")
Escrever ("Medidas do retangulo");
Escrever ("Indique a largura em metro ");
Ler (larg); Ler (larg)
Escrever ("Indique o comprimento em metros");
Ler (comp);
Perímetro ← 2 * (larg + comp); Escrever ("Indique o
Escrever ("Perímetro = ",perimetro," metro"); comprimento em metro")
Perímetro ←
2*(larg + comp)
Escrever ("Perímetro
= ",perimetro,"metro")
Escrever ("Pretende
efectuar mais
cálculos (s/n)")
Ler (resp)
False
Fim
64
Estruturas de controlo
Primeira:
▪ largura igual a 4
▪ comprimento igual a 12
Segunda:
▪ largura igual a 10
▪ comprimento igual a 20
quadro 3.25
1.º passo 4
2.º passo 4 12
3.º passo 4 12 32
5.º passo 4 12 32 s
7.º passo 10 12 32 s −
8.º passo 10 20 32 s −
9.º passo 10 20 60 s −
11.º passo 10 20 60 n −
COD12MD © Porto Editora
65
Introdução à programação
quadro 3.26
Passo Descrição
É executada a primeira instrução de entrada do ciclo, sendo atribuído à variável larg o valor
1.º
4 (pelo utilizador).
É executada a última instrução do ciclo, sendo testada a expressão resp="s" (s é igual a s).
6.º
Como o resultado do teste é True, o ciclo continua até que este seja False.
É executada a primeira instrução de entrada do ciclo, sendo atribuído à variável larg o valor
7.º
10 (pelo utilizador).
66
Estruturas de controlo
quadro 3.27
Sintaxe Programa
… #include<stdio.h>
do
int main(void)
{ {
float area,perimetro,comp,larg;
<Bloco de instruções> char resp;
do
} {
while (expressão); printf("Medidas do retangulo\nIndique a largura em metro ");
… scanf("%f",&larg);
printf("Indique o comprimento em metro ");
scanf("%f",&comp);
perimetro=(larg+comp)*2;
printf("Perimetro = %f' metro\n",perimetro);
printf("Pretende efetuar mais calculos (s/n) ");
scanf(" %c",&resp);
}
while(resp=='s');
return 0;
}
Resultado (Output)
Medidas do retangulo
Indique a largura em metro 4
Indique o comprimento em metro 12
Perimetro = 32.000000' metro
Pretende efetuar mais calculos (s/n) s
Medidas do retangulo
Indique a largura em metro 10
Indique o comprimento em metro 20
Perimetro = 60.000000' metro
Pretende efetuar mais calculos (s/n) n
Exercícios de aplicação 13
1 Resolva os exercícios 3 do exercício de aplicação 11, utilizando a representação
sob a forma de fluxograma e o respetivo programa na linguagem C, recorrendo à
estrutura de repetição ciclo Do… While (Fazer...Enquanto).
67
Introdução à
programação
4 Sub-rotinas
As sub-rotinas são conjuntos de instruções identificadas por uma designação e que
4.1 Funções
As funções criadas pelo programador, após a sua execução, podem retornar um resul-
tado, através do seu nome, para o local onde foram chamadas. O retorno tem um de-
terminado tipo de dado previamente definido nas funções. Caso não o seja, é conside-
rado, por defeito, do tipo de dado int. Podem existir situações em que a função realiza
as operações e não devolve qualquer valor. Neste caso, o tipo de dado do retorno é
definido pela palavra reservada void. Por outro lado, as funções podem ter parâmetros
associados a tipos de dados e, quando são criadas depois da função main(), têm de
ser declaradas no início do programa.
Uma função pode chamar outra, desde que esta seja declarada numa ordem acima da
que a chama.
Passagem de argumentos
A passagem de argumentos é utilizada em programas com funções, permitindo ao
programador controlar os dados que são trocados entre o programa principal e as
funções. A importância deste aspeto aumenta à medida que o tamanho e a complexi-
dade dos programas também aumentam. Os argumentos correspondem aos dados
que são passados através da instrução de chamada da função para o cabeçalho desta.
Estes dados são utilizados na função e têm de coincidir em número e tipo, na declara-
ção, no cabeçalho e na chamada desta.
A passagem de argumentos pode ser implementada por uma de duas formas: por
valor e por referência.
Na passagem por valor, ao ser chamada a função, são passadas cópias dos dados ou
das variáveis (argumentos) e atribuídas às variáveis (parâmetros) existentes na de-
claração e no cabeçalho da função. Neste caso, na função, a declaração das variáveis
dos parâmetros é precedida pela indicação dos tipos de dados.
Os dados recebidos nas funções, através dos seus parâmetros, podem sofrer altera-
ções nos seus valores. Mas estas não serão refletidas fora da função, ou seja, não
serão passadas para as variáveis que serviram de argumentos na chamada das fun-
68
Sub-rotinas
quadro 4.1
int soma(void);
float media(float nota1, float nota2);
Exemplos
conta_pares(int x, int y, int z);
void maximo(int x, float y);
O quadro 4.2 apresenta a sintaxe e um exemplo da estrutura de uma função com passa-
gem por valor.
quadro 4.2
A chamada para execução de uma função, com passagem por valor, pode ser feita
através de uma instrução de atribuição, uma instrução de saída de resultados ou pela
indicação do nome da função, caso o retorno seja do tipo de dado void, tal como exem-
plificado no quadro 4.3.
quadro 4.3
Instrução Exemplo
Atribuição m = soma(a,b);
O programa apresentado na figura 4.1 permite ao utilizador inserir três números intei-
ros. Depois, o programa determina e apresenta o máximo, calcula e apresenta a
soma e a média.
69
Introdução à programação
int main(void)
{
int n1,n2,n3,m;
printf("Indique um número inteiro ");
scanf("%d",&n1);
printf("Indique um número inteiro ");
scanf("%d",&n2);
printf("Indique um número inteiro ");
scanf("%d",&n3);
maximo(n1,n2,n3);
printf("Média = %f\n",media(n1,n2,n3));
return (0);
}
70
Sub-rotinas
O quadro 4.5 apresenta a sintaxe e um exemplo da estrutura de uma função com passa-
gem por referência.
quadro 4.5
Ao contrário da chamada para execução de uma função, com passagem por valor, a
passagem por referência apresenta o operador unário & antes dos nomes das variá-
veis dos argumento. A chamada para execução de uma função por referência é feita
através de uma instrução de atribuição, uma instrução de saída de resultados ou pela
indicação do nome da função, caso o retorno seja do tipo de dado void, tal como exem-
plificado no quadro 4.6.
quadro 4.6
Instrução Exemplo
Atribuição m = soma(&a,&b);
COD12MD © Porto Editora
71
Introdução à programação
O programa apresentado na figura 4.3 permite ao utilizador inserir dois números in-
#include <stdio.h>
int main(void)
{
int n1=0,n2=0;
float media;
printf("Valor inicial das variáveis n1=%d e n2=%d\n",n1,n2);
leitura(&n1,&n2); //Passagem por referência
printf("Valor das variáveis após leitura de dados n1=%d e n2=%d\n",n1,n2);
troca(&n1,&n2); //Passagem por referência
printf("Valor das variáveis após a troca n1=%d e n2=%d\n",n1,n2);
//Passagem por referência
printf("Soma=%d após calcular o dobro de n1 e n2\n",soma_dobro(&n1,&n2));
//Passagem por valor
printf("Resultado da diferença de %d-%d=%d\n",n1,n2,diferenca(n1,n2));
}
figura 4.3 Programa em C exemplificando a passagem de argumentos por referência e por valor.
72
Sub-rotinas
Exercícios de aplicação 14
1 Classifique em verdadeira ou falsa cada uma das afirmações seguintes.
(A) As funções criadas pelo programador para serem executadas não têm de ser
chamadas.
(B) É possível criar funções sem parâmetros.
(C) Para criar uma função utiliza-se a palavra reservada func.
(D) Funções com parâmetros para a passagem de argumentos, permitem ao
programador controlar os dados que são passados.
(E) As funções podem ter parâmetros associados a tipos de dados.
(F) Os dados recebidos nas funções, através dos seus parâmetros, não podem
sofrer alterações nos seus valores.
(G) Uma função pode chamar outra, desde que esta seja declarada numa ordem
acima da que a chama.
(H) A passagem de argumentos pode ser por valor e por referência.
COD12MD © Porto Editora
73
Introdução à programação
int n=7;
int main(void)
{
ainf(5);
return 0;
}
void ainf(int n)
{
printf("%d",n);
}
(A) 5
(B) 7e5
(C) 7
(D) Nenhuma das anteriores
3 Qual das seguintes opções é a sintaxe correta para retornar o valor de uma
função?
(A)
void dev_val(int x, int y)
{
int c;
c=y+y;
}
(B)
int dev_val(int x, int y)
{
int c;
c=y+y;
}
4 Crie uma função que permita inserir o primeiro nome e a idade. Imprima uma
mensagem que informe o ano em que fará 100 anos.
74
Sub-rotinas
int main(void)
{
apresenta(5,20);
return 0;
}
(A) x, y
(B) i
(C) y, i
(D) x, i.
grama.
As variáveis locais são declaradas dentro das funções main() e outras, sendo apenas,
utilizadas dentro da função em que foram declaradas.
75
Introdução à programação
O programa apresentado na figura 4.5 calcula a área de um retângulo a partir dos va-
#include <stdio.h>
float comprimento, largura;
void area(void);
int main(void)
{
printf("Digite a medida em metros da largura do retângulo ");
scanf("%f",&largura);
printf("Digite a medida em metros do comprimento do retângulo ");
scanf("%f",&comprimento);
area();
return(0);
}
void area(void)
{
float calc_area;
calc_area=comprimento*largura;
printf("Area do retangulo = %1.2f metros quadrados\n",calc_area);
}
76
Sub-rotinas
Exercícios de aplicação 15
1 Classifique em verdadeira ou falsa cada uma das afirmações seguintes.
(A) As sub-rotinas são conjuntos de instruções que são sempre executadas apenas
uma única vez.
(B) As funções são sub-rotinas, podendo apresentar parâmetros no início.
(C) Depois de executadas, as funções nunca devolvem um resultado através do seu
nome.
(D) As variáveis globais e locais são declaradas na parte declarativa das sub-rotinas.
#include <stdio.h>
void mult(void)
int main(void)
{
mult();
return 0;
}
void mult(void)
{
int calculo, num3=4;
calculo=num3*num1*num2;
printf("Cálculo = %d",calculo);
}
3 Crie um programa, em C, que permita efetuar a leitura de dois valores reais, para
as variáveis globais altura e base, correspondentes às medidas da altura e
comprimento da base de um triângulo. De seguida, é efetuado o cálculo da área
do triângulo, utilizando a função float area_triangulo() e é apresentado o
resultado.
4 Crie um programa, em C, que permita efetuar a leitura de dois valores reais, para
as variáveis globais comp e larg, correspondentes as medidas do comprimento e
da largura de um retângulo. De seguida, é efetuado o cálculo do perímetro do
retângulo, sendo apresentado o resultado na função perimetro_retangulo().
COD12MD © Porto Editora
77
Introdução à
programação
5 unções predefinidas
F
da linguagem C
A linguagem C tem um conjunto de funções organizadas por bibliotecas, de acordo
strcpy Copia str2 para str1, substituindo o seu conteúdo. strcpy(str1, str2);
Nos programas apresentados nas figuras 5.1 a figura 5.12 são exemplificadas as opera-
ções das funções predefinidas sobre strings, descritas no quadro 5.1, devendo ser con-
sideradas as seguintes situações:
78
Funções predefinidas da linguagem C
quadro 5.2
char nome[20];
Exemplos char pais_nasc[ ] = "Portugal";
char palavra[ ] = {'N', 'u', 'm', ' e', 'r', 'o', '\0'};
#include <stdio.h>
#include <string.h>
//Exemplo função strlen()
int main(void)
{
char frase1[100];
int num;
return(0);
}
79
Introdução à programação
#include <stdio.h>
#include <string.h>
//Exemplo função strcpy()
int main(void)
{
char frase1[100],frase2[100];
return(0);
}
#include <stdio.h>
#include <string.h>
//Exemplo função strncpy()
int main(void)
{
char frase1[100]="Marte (planeta)";
char frase2[100];
int num;
return(0);
}
80
Funções predefinidas da linguagem C
#include <stdio.h>
#include <string.h>
//Exemplo função strcat()
int main(void)
{
char frase1[50]="Aplicações ";
char frase2[50]="Informáticas B";
char frase3[50]=" 12º Ano";
int num;
strcat(frase1,frase2);
printf("Juntar strings: %s\n", frase1);
strcat(frase1,frase3);
printf("Juntar strings: %s\n", frase1);
return 0;
}
81
Introdução à programação
int main(void)
{
char frase1[]= {"Psicologia"};
char frase2[]= {"Psicologia"};
int resultado;
resultado=strcmp(frase1,frase2);
if (resultado==0)
printf("As strings são iguais\n");
else
printf("As strings são diferentes\n");
return(0);
}
#include <stdio.h>
#include <string.h>
//Exemplo função strncmp()
int main(void)
{
char frase1[]="Linguagem C", frase2[100];
int num,resultado;
return(0);
}
82
Funções predefinidas da linguagem C
O quadro 5.3 apresenta algumas das funções matemáticas mais comuns da linguagem C.
quadro 5.3
Função Descrição
83
Introdução à programação
Nos programas apresentados nas figuras 5.13 e 5.34 são exemplificadas as principais
#include <stdio.h>
#include <math.h>
//Cálculo da área de um quadrado
int main(void)
{
float area,lado;
return 0;
}
#include <stdio.h>
#include <math.h>
//Cálculo da medida do lado de um quadrado
int main(void)
{
float area, lado;
return 0;
}
84
Funções predefinidas da linguagem C
#include <stdio.h>
#include <math.h>
//Exemplo da função round()
int main(void)
{
float num,resultado;
printf("Insira um número real: ");
scanf("%f",&num);
resultado=round(num); //Arredonda
printf("Número arredondado: %f\n",resultado);
return 0;
}
85
Introdução à programação
int main(void)
{
float num;
int resultado;
return 0;
}
#include <stdio.h>
#include <math.h>
//Exemplo da função floor()
int main(void)
{
float num;
double resultado;
return 0;
}
86
Funções predefinidas da linguagem C
#include <stdio.h>
#include <math.h>
//Exemplo da função ceil()
int main(void)
{
float num;
double resultado;
return 0;
}
A figura 5.25 apresenta um programa que exemplifica a utilização da função sin(), da biblio-
teca math.h, que permite calcular o seno de um determinado ângulo em radianos.
#include <stdio.h>
#include <math.h>
//Exemplo da função seno()
int main()
{
double valor=3.14159/2;
printf("Valor de Seno de 180 graus = %f",sin(valor));
COD12MD © Porto Editora
return 0;
}
87
Introdução à programação
#include <stdio.h>
#include <math.h>
//Exemplo da função cos()
int main(void)
{
double valor=0;
printf("Valor de cosseno de 0 graus = %f\n\n",cos(valor));
return 0;
}
#include <stdio.h>
#include <math.h>
//Exemplo da função tan()
int main(void)
{
double valor=3.141592/4;
printf("Valor de tangente de 45 graus = %f\n",tan(valor));
return 0;
}
88
Funções predefinidas da linguagem C
#include <stdio.h>
#include <math.h>
//Exemplo da função log10()
int main(void)
{
double valor=100,resultado;
printf("O Logaritmo de %.0f na base 10 é %.0f",valor,log10(valor));
return(0);
}
#include <stdio.h>
#include <math.h>
//Exemplo da função exp()
int main()
{
double valor=1;
return(0);
}
89
Introdução à programação
Exercícios de aplicação 16
1 Classifique em verdadeiras ou falsas cada uma das seguintes afirmações.
(A) As cadeias de caracteres são vetores do tipo int.
(B) Para declarar uma string é necessário, primeiro, indicar o tipo de dado.
(C) As aspas são utilizadas para delimitar strings.
(D) As plicas são utilizadas para delimitar caracteres.
4 Elabore um programa em C cujo valor inserido pelo utilizador seja do tipo float e
mostre a parte inteiro do valor.
90
Introdução à
programação
6 Arrays
Os arrays são variáveis, identificados por um nome, que contêm um conjunto de ele-
mentos do mesmo tipo. Estes são acessíveis através do respetivo nome e da variável
de índice correspondente à sua posição no array. Os arrays simplificam a utilização de
muitas variáveis do mesmo tipo a guardar em memória, com designações diferentes,
agrupando-as numa única variável.
Os arrays podem ter mais do que uma dimensão. Os mais utilizados são os arrays uni-
dimensionais (vetores) e arrays bidimensionais (matrizes).
6.1 Vetores
Os vetores (arrays unidimensionais) têm uma dimensão, utilizando, por isso, apenas
uma variável de índice, começando sempre por zero, para o acesso aos seus elemen-
tos.
O quadro 6.1 apresenta o exemplo do vetor km que guarda seis valores numéricos float,
correspondentes à medida de seis distâncias. Para tal, é utilizado um índice (variável i)
para aceder a cada um dos elementos deste vetor (km[i]).
quadro 6.1
i 0 1 2 3 4 5
Para declarar um vetor, é necessário, primeiro, indicar o tipo de dado da variável (array
unidimensional) e, de seguida, o nome da variável e o número de elementos do vetor
([tamanho]) quadro 6.2.
quadro 6.2
91
Introdução à programação
quadro 6.3
Atribuição km[3]=100;
#include<stdio.h>
int main(void)
{
float total=0,km[5];
int a;
for(a=0;a<5;a++)
{
printf("Viagem %d ",a);
scanf("%f", &km[a]);
total+=km[a];
}
km[3]=100;
total=0;
for(a=0;a<5;a++)
{
printf("\nkm %d = %1.2f",a,km[a]);
total+=km[a];
}
return 0;
}
92
Arrays
Exercícios de aplicação 17
1 Elabore um programa que permita declarar um vetor de 6 elementos (array
unidimensional) para registar as temperaturas verificadas em seis dias
sucessivos, a uma determinada hora numa cidade.
a) Utilize a seguinte declaração para o vetor: float temp [6].
b) Crie a função Insira, para permitir ao utilizador digitar as seis temperaturas para
o vetor, apresentadas no exemplo ao lado.
c) Crie a função TempMax, para determinar a temperatura máxima.
d) Crie a função TempMin, para determinar a temperatura mínima.
e) Crie a função Listagem, para efetuar a listagem de forma semelhante à
apresentada no exemplo seguinte.
Dia Temperatura
1 23
2 20
3 18
4 15
5 20
COD12MD © Porto Editora
6 27
93
Introdução à programação
6.2 Matrizes
As matrizes, arrays bidimensionais, têm duas dimensões, utilizando, por isso, duas variá-
veis de índice, uma para a linha e outra para a coluna, para o acesso aos seus elementos.
A sua representação gráfica corresponde a uma tabela de dupla entrada (linha × coluna).
O quadro 6.4, apresenta o exemplo da matriz classifica que guarda 15 números do tipo
inteiro, correspondentes às classificações da disciplina de Aplicações Informáticas.
Estas classificações referem-se a três períodos de um ano letivo (linhas) de cinco alu-
nos de uma turma (colunas). Para tal, são utilizados dois índices (variáveis l e c) para
aceder a cada um dos elementos da matriz (classifica[l,c]).
quadro 6.4
C
L 0 1 2 3 4
Para declarar uma matriz (array bidimensional), é necessário, primeiro, indicar o tipo
de dado da variável e, de seguida, o nome da variável e o número de elementos da ma-
triz [nº linhas] [nº colunas] quadro 6.5.
94
Arrays
quadro 6.5
No exemplo apresentado no quadro 6.5, é declarada uma variável com o nome classifica,
do tipo de dado inteiro e com os intervalos de índices 0 a 4 (linhas) e 0 a 2 (colunas).
Sintaxe Exemplo
O programa apresentado na figura 6.3 permite inserir seis temperaturas pelo utiliza-
dor. Depois, são efetuadas duas alterações em dois valores da matriz. Por último,
apresenta duas listagens.
#include<stdio.h>
int main(void)
{
float temperatura[2][3];
float total,media;
int l,c;
for(l=0;l<2;l++)
for(c=0;c<3;c++)
{
printf("Dia %d registo %d = ",c,l);
scanf("%f",&temperatura[l][c]);
}
printf("\nAtribuicao do valor 10 para temperatura[1,0] temperatura[0,1]]\n");
temperatura[1][0]=10;
temperatura[0][1]=10;
total=0;
printf("\nListagem dos valores de temperaturas da matriz, apos alteração dos
valores\n");
for(l=0;l<2;l++)
for(c=0;c<3;c++)
printf("Dia %d registo %d = %f\n",c,l,temperatura[l][c]);
printf("\nListagem dos valores de temperaturas superiores a 10 da matriz\n");
for(l=0;l<2;l++)
for(c=0;c<3;c++)
if(temperatura[l][c]>10)
printf("Dia %d registo %d = %f\n",c,l,temperatura[l][c]);
COD12MD © Porto Editora
return(0);
}
95
Introdução à programação
De realçar que numa matriz, para referenciar os seus elementos, é necessário fazer
No exemplo apresentado na figura 6.3, o ciclo For (l=0;l<2;l++) representa o índice rela-
tivo às linhas (l) e o ciclo For (c=0;c<3;c++) representa o índice relativo às colunas (c).
Sempre que se efetuar uma operação que envolva percorrer todos os elementos da
matriz, é necessário utilizar os dois ciclos.
A figura 6.4 mostra o ecrã resultante da execução do programa apresentado na figura 6.3.
Depois dos valores inseridos, na matriz temperatura, com seis elementos (Li-
nhas × Colunas => 2 × 3 => 6), são realizadas duas atribuições, ambas de valor 10, a
duas posições da matriz, identificadas pela linha 1, coluna 0, e pela linha 0, coluna 1.
Após as atribuições, é efetuada uma listagem de todos os valores da matriz. Por úl-
timo, é efetuada a listagem dos valores superiores a 10 da matriz.
96
Arrays
Exercícios de aplicação 18
1 Responda às alíneas, tendo em atenção a seguinte estrutura da matriz km.
a) Indique qual a posição (linha e coluna) cujos quilómetros são iguais a 146.
b) Indique qual a posição (linha e coluna) da máxima distância registada na matriz.
c) Calcule a diferença entre as distâncias máxima e mínima das registadas na
matriz.
d) Declare a matriz, tendo em atenção os valores dos elementos apresentados.
(A) Média.
(B) Ulti.
(C) Multi.
(D) Multimédia.
COD12MD © Porto Editora
97
Introdução à programação
(A) 3940
(B) 3840
(C) 3324
(D) 1724
98