Escolar Documentos
Profissional Documentos
Cultura Documentos
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples
aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer
entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
Não é o fim da saga “Vamos Programar?”, pois temos vindo a publicar o questionário
abaixo de forma a conhecermos a sua opinião acerca do que gostava de ver no futuro
da saga.7
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 1 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar no
mundo da tecnologia e deixar a sua marca, pode começar aqui.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 2 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
declarada – EMPRESA, neste caso. Depois disso, poderemos armazenar valores nesse
endereço.
Constantes
Tudo o que está depois de “//” (sem aspas) chama-se comentários e não são
interpretados sendo automaticamente ignorados. Como podem ver, a alteração do
valor de uma constante iria gerar erro.
Variáveis
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 3 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Nesse excerto, nenhum erro seria gerado pois podemos mudar o valor as variáveis
quando quisermos. Como podem ter reparado, a nomenclatura é diferente da das
constantes.
Regras de nomeação
Estas regras são muito importantes e são dirigidas tanto às constantes como às
variáveis. Quando damos um nome a uma variável, temos que ter em atenção as
seguintes regras:
Agora deve estar a perguntar-se, o que é uma palavra reservada? Pois bem, as
palavras reservadas são aquelas que constam na “gramática” da linguagem de
programação.
Por exemplo, no pseudocódigo que utilizámos, uma condição começava com “SE”.
Assim, não podemos declarar uma variável ou constante com o nome “SE” pois é
reservada à linguagem de programação.
As variáveis e constantes podem ser de diversos tipos. Hoje vamos introduzir apenas
alguns tipos, os mais comuns, visto que estes variam de linguagem para linguagem.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 4 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 5 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
A linguagem que será utilizada será, em princípio, C pois é uma linguagem base e
muitas das que nós utilizamos atualmente são baseadas nela. Isto não quer dizer que,
no futuro, não falemos de outras linguagens pois temos algumas coisas em mente –
surpresa!
Sendo assim, para a semana vamos abordar novos conceitos que têm estado ocultos
até agora visto estarmos a utilizar pseudocódigo. Estes conceitos irão abranger
diversas coisas, incluindo o tema de hoje sendo que as próximas semanas irão conter
muito conteúdo.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, podem
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentário.
Paradigmas de Programação
A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar no
mundo da tecnologia e deixar a sua marca, pode começar aqui.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 6 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Antes de começar a aprender C, iremos abordar alguns temas importantes. Hoje vai
aprender o que realmente é uma linguagem de programação e conhecer os
paradigmas de programação mais utilizados.
Linguagem de programação
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 7 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Paradigmas de Programação
Paradigma imperativo
Pode ser comparado ao modo modo imperativo da linguagem humana visto que é
criado para ordenar a realização de ações.
Paradigma procedimental
Paradigma estruturado
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 8 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Sequência
Nesta estrutura as tarefas são executadas de forma linear, ou seja, uma após a outra.
Exemplo:
Acordar;
Vestir;
Tomar o pequeno-almoço;
Ir trabalhar;
Fluxograma correspondente:
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 9 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Decisão
Exemplo 1:
if "Acordar" then
"Trabalhar"
else
"Não trabalhar"
endif
Fluxograma correspondente:
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 10 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
inglês no código relacionado com a sintaxe, encontrará a sua tradução mais abaixo.
Neste caso:
if → se
then → então
else → caso contrário
endif (end if) → fim do if
Exemplo 2:
Dói-me a cabeça. Se doer muito pouco, vou trabalhar. Se doer pouco, tomo um
comprimido e vou trabalhar. Se doer muito, vou ao médico e falto ao trabalho.
Este é mais um exemplo mas utilizando diferentes comandos. Este trecho poderia ser
também escrito através de comandos if/else da seguinte forma:
if "Dor de cabeça"
if "muito pouco" then
"trabalhar";
elseif "pouco" then
"tomar comprimido";
"trabalhar";
else if "muito" then
"ir ao médico";
"não trabalhar";
endif
endif
Em fluxograma:
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 11 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Novos termos:
case → caso
when → quando
else if → caso contrário se
Iteração
Neste tipo de estrutura, também conhecido como repetição, um trecho de código será
repetido um número finito de vezes dependendo do resultado de um teste lógico.
Exemplo 1:
Abaixo encontra a repetição “não saio de casa enquanto não estiver vestido” em
formato de pseudocódigo para melhor análise:
do {
"não sair de casa";
} while ( "não estou vestido" )
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 12 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Novo termo:
do → fazer
Exemplo 2
while ( "Durmo" )
"Não me visto";
Exemplo 3
Ou seja, enquanto não acontece qualquer coisa, faço qualquer coisa. Em fluxograma:
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 13 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Novo termo:
for → para/enquanto
Exemplo 4
Ou seja, para cada item do conjunto, fazer qualquer coisa. Novos termos:
each → cada
in → em
Paradigma Declarativo
Um excelente exemplo de uma linguagem que utiliza este paradigma é Prolog, muito
utilizado na área de inteligência artificial.
Paradigma Funcional
Este paradigma é muito extenso e tem muita informação que mais à frente irá ser
abordada. Atualmente, existem muitas linguagens que utilizam este paradigma.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 14 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentário.
A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar no
mundo da tecnologia e deixar a sua marca, pode começar aqui.
Hoje trazemos aos nossos leitores, a si, uma pequena grande história sobre a
linguagem de programação C que começará a ser utilizada em breve.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 15 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Os anos de 1969 a 1973 foram de extremo entusiasmo dentro da AT&T Bell Labs
porque foi quando a linguagem de programação C começou a ser desenvolvida.
O principal desenvolvedor desta linguagem foi Dennis Ritchie que descreveu o ano de
1972 como o mais produtivo e criativo. Este foi o ano em que mais avanços foram
criados na linguagem.
Numa fase inicial, esta linguagem de programação, C, tinha como principal finalidade o
desenvolvimento do Unix, que já havia sido escrito em Assembly – uma outra
linguagem de programação.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 16 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
A versão mais recente de C é C11 e foi lançada a dezembro de 2011. Esta linguagem foi
uma das influências de muitas das linguagens de programação que atualmente são
muito utilizadas.
Dentro de muitas, C influenciou AWK, BitC, C++, C#, C Shell, D, Euphoria, Go, Java,
JavaScript, Limbo, Logic Basic, Objective-C, Perl e PHP. Isto não significa que estas
linguagens não tenham sido influenciadas por outras.
Características da linguagem
Nós iremos começar por abordar C porque é uma linguagem “mãe”, que influenciou
muitas outras. Aprendendo a linguagem C, fica preparado para se iniciar com muitas
outras linguagens de programação pois tem uma sintaxe muito utilizada e, além disso,
sabe a lógica.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 17 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Estes primeiros artigos não têm permitido muita interatividade entre si, leitor, e nós
mas, brevemente, isso irá mudar. Quando começarmos a colocar código-fonte C,
iremos colocar também exercícios para que desafie a sua mente.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
Instalação de um IDE
A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar no
mundo da tecnologia e deixar a sua marca, pode começar aqui.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 18 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Existem diversos IDE disponíveis logo, as ferramentas que cada um disponibiliza não
são sempre as mesmas. Aqui está uma pequena lista com os três elementos
que costumam vir com um IDE:
Sendo assim, hoje vou recomendar-lhe um IDE, que será utilizado ao longo da nossa
saga. Portanto, todas as instruções que lhe serão dadas ao longo do resto da saga,
serão direcionadas a este IDE.
Se utilizar outro IDE, não há qualquer problema, visto que não deverão existir
diferenças no código-fonte. Não recomendo a utilização do Visual Studio da
Microsoft por agora visto que o compilador por este IDE utilizado poderá precisar de
eventuais configurações.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 19 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Existem alguns passos que devem ser seguidos para instalar este IDE. Em primeiro
lugar, temos que instalar o JDK (Java Development Kit) que pode ser descarregado
aqui. A instalação do JDK não tem segredos e é fácil e rápida.
Existem vários compiladores suportados pelo Netbeans. Pode ver aqui como instalar
o gcc nas diversas plataformas existentes. O GCC é o GNU Compiler Collection e
está nativamente disponível na maioria dos SO Linux.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
“Hello World!”
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 20 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar no
mundo da tecnologia e deixar a sua marca, pode começar aqui.
Na semana passada, falámos sobre a instalação de um IDE, sendo que o IDE que foi
recomendado foi o Netbeans. A partir de agora, algumas das partes que serão aqui
visualizadas terão o Netbeans na sua base, como, por exemplo, a forma de executar
um programa.
A utilização de um IDE poderá esconder diversos conceitos aos mais iniciantes porém,
nós optámos por seguir esse caminho visto que existem muitos sistemas operativos e
teríamos que dar instruções para vários SO ao mesmo tempo.
Como seria o mundo da programação sem o famoso “Hello World”? É uma tradição o
primeiro programa criado por alguém imprimir a mensagem “Hello World” no ecrã.
Antes de escrever qualquer coisa em C, precisa criar um projeto. Para isso, abra o
Netbeans e clique File → New Project. No ecrã que se abriu escolha C/C++
Application.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 21 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
As restantes definições podem ficar como estão. Agora, deve ver uma disposição de
ficheiros parecida à seguinte:
De momento, deve focar-se na pasta Source Files que é a que contém o código-fonte
da aplicação. Abra o ficheiro main.c que foi criado automaticamente e apague o seu
conteúdo. Depois, copie e cole o seguinte trecho de código:
1 #include <stdio.h>
2
3 int main()
4 {
5 printf("Hello World!\n");
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 22 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
6 return 0;
7 }
Este trecho de código irá imprimir, numa janela de linha de comandos, a mensagem
“Hello World!”. Vamos então executar este trecho de código. Para isso, tem que clicar
no seguinte botão que está localizado na barra superior:
“#include”
A primeira linha do trecho acima não é C mas sim uma indicação para o compilador.
Vamos começar do início. C é uma linguagem de alta velocidade, por isso é que é
usada em locais que necessitam disso como, por exemplo, o kernel – núcleo – do Linux
e de diversos sistemas operativos como o Windows.
Devido à alta velocidade que pode ser proporcionada por esta linguagem, C não está
preparado, por omissão, para todos os tipos de tarefas. Assim, precisamos de incluí-
las para ter disponíveis mais funções.
Para as incluir, utilizamos o comando “#include” que diz ao compilador que precisa de
incluir ficheiros ponto H (.h) que são ficheiros do tipo HEADER.
Nesta caso adicionámos o ficheiro “stdio.h” que quer dizer standard input/output, ou
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 23 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Função “main”
Todos os programas C têm que ter, obrigatoriamente, uma função “main” que será
automaticamente executada. Esta função retorna um dado do tipo “int” (número
inteiro).
De momento não há mais nada a acrescentar sobre funções porém, mais à frente,
iremos voltar a falar sobre este tema e o porquê de ser muito importante.
“printf”
Este é um comando/função que está contido no ficheiro stdio.h e, caso não incluamos
o ficheiro, será gerado erro. Esta função quer dizer print formatted ou seja “escrita de
dados formatados”.
Esta função aceita vários parâmetros ou seja, permite-nos enviar várias coisas que irão
ser processadas por ela. De momento, apenas iremos falar do primeiro argumento.
Neste caso escrevemos “Hello World!\n!” o que quer dizer que será imprimido “Hello
World!” na janela. E o que faz “\n”? Simples, é um caracter especial que imprime uma
nova linha. Chama-se new line.
A “\” serve para inserir caracteres especiais. Então… como se insere esta mesma
barra? Basta colocar “\\”. Existem alguns outros caracteres especiais que também
devem ser inseridos utilizando esta barra:
Tab → \t
Carriage Return (coloca o cursor no início da linha) → \r
Alguns sons → \a e \7
Por cento → %%
“return”
Como referi acima, a função main irá, neste caso, retornar um número inteiro. É aqui
que o comando return, que quer dizer retorno, entra. Este retorna o número 0 que é o
binário para falso.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 24 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
De momento, ainda não temos muito a acrescentar sobre este comando mas mais à
frente iremos falar de novo sobre ele quando abordarmos funções e procedimentos.
Exercícios
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar no
mundo da tecnologia e deixar a sua marca, pode começar aqui.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 25 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Tipo int
O tipo de dados int é, como já deve saber, referente a números inteiros. Int quer
dizer integer number, ou seja, números inteiros. C, como é uma linguagem que
trabalha muito com o hardware do computador, permite-nos definir o tamanho de
cada variável deste (e de outros) tipos.
1 #include <stdio.h>
2
3 int main() {
4
5 int a = 20;
6
7 printf("O número que guardei é %d.", a); //Imprime: O número que guardei é 20.
8 return 0;
9 }
Antes de continuar, deve ter reparado que foi utilizado um %d dentro do primeiro
parâmetro. Este caractere é substituído pelo valor da variável a quando é imprimido no
ecrã.
Utiliza-se %d quando se quer imprimir o valor de uma variável dentro de uma frase. A
variável deve ser colocada nos parâmetros seguintes, por ordem de ocorrência.
Exemplo:
1 #include <stdio.h>
2
3 int main() {
4 int a = 20;
5 int b = 100;
6
7 printf("O primeiro número é: %d.\n", a);
8 //Imprime: O primeiro número é: 20.
9 printf("O segundo número é: %d.\n", b);
10 //Imprime: O segundo número é: 100.
11 printf("O primeiro e segundo números são %d e %d.\n", a, b);
12 //Imprime: O primeiro e segundo números são 20 e 100.
13
14 return 0;
15 }
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 26 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Nestas situações, pode utilizar long e short para controlar os gastos de recursos.
Estes modificadores permitem-nos criar variáveis que ocupem um maior ou menor
número de bytes, respetivamente.
1 #include <stdio.h>
2
3 int main()
4 {
5 printf("int : %d bytes\n", sizeof(int) );
6 printf("short int: %d bytes\n", sizeof(short) );
7 printf("long int: %d bytes\n", sizeof(long) );
8 return 0;
9 }
No computador que estou a utilizar, por exemplo, short refere-se a 2 bytes, long a 8
bytes e o tamanho padrão de int é 4 bytes.
Como sabe, os números inteiros podem assumir forma positiva e negativa. Por vezes,
na programação, os números negativos podem atrapalhar (ou então ajudar),
dependendo do caso.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 27 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Para que uma variável possa conter tanto números positivos como negativos, devemos
utilizar o modificador signed. Caso queira que o número seja apenas positivo, incluindo
0, utilize unsigned
Além dos números inteiros, existem outros tipos de dados que nos permitem
armazenar números que, ao invés de serem inteiros, são decimais.
Existem dois tipos de dados que nos permitem armazenar valores do tipo decimal/real.
Estes tipos são float e double. Devem ser utilizados da seguinte forma:
1 float pi = 3.14;
2 double pi = 3.14159265359;
A diferença entre float e double é que o segundo ocupa mais memória que o primeiro
logo, consegue armazenar números de maior dimensão.
Normalmente, o tipo float ocupa 4 bytes de memória RAM enquanto o segundo tipo,
double, ocupa 8 bytes de memória. Mais uma vez, relembro que estes valores podem
alterar de máquina para máquina.
Para quem precise de fazer cálculos mais precisos, o tipo de dados double é o mais
aconselhado pois é o que permite uma maior extensão do valor.
Utiliza-se %f quando se quer imprimir o valor de uma variável dos tipos float ou double
dentro de uma frase. A variável deve ser colocada nos parâmetros seguintes, por
ordem de ocorrência. Exemplo:
1 #include <stdio.h>
2
3 int main()
4 {
5 float piMinor = 3.14;
6 double piMajor = 3.14159265359;
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 28 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
7
8 printf("Pi pode ser %f mas, de forma mais exata, é %f.", piMinor, piMajor);
9 //Imprime: Pi pode ser 3.140000 mas, de forma mais exata, é 3.141593.
10 return 0;
11 }
Pode visualizar que, quando se utiliza %f, é utilizado um número específico de casas
decimais. Caso o número de casas decimais seja mais pequeno do que o da variável
original, o número é arredondado.
Pode definir o número de casas decimais que quer que sejam apresentadas da
seguinte forma: %.{Número de Casas Decimais}f. Veja o seguinte exemplo, baseado no
anterior:
1 #include <stdio.h>
2
3 int main()
4 {
5 float piMinor = 3.14;
6 double piMajor = 3.14159265359;
7
8 printf("Pi pode ser %.2f mas, de forma mais exata, é %.11f.", piMinor, piMajor);
9 //Imprime: Pi pode ser 3.14 mas, de forma mais exata, é 3.14159265359.
10 return 0;
11 }
Notação Científica
1 #include <stdio.h>
2
3 int main()
4 {
5 float num = 24E-5; //24 x 10 elevado a -5
6 printf("%f\n", num); //Imprime: 0.000240
7
8 num = 2.45E5; //2.45 x 10^5
9 printf("%.0f", num); //Imprime: 245000
10
11 return 0;
12 }
Tipo char
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 29 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Há algumas semanas atrás, falámos do tipo string: um tipo de dados que nos permite
armazenar sequências de caracteres, ou seja, de forma geral, frases.
Por agora, ainda não abordaremos este tipo, mas sim char. Este é um tipo de dados
que nos permite armazenar um único caractere. É declarado da seguinte forma:
Como pode visualizar, a variável “letra” agora contém o caractere “P”. Pode, ao invés
de utilizar este tipo de notação, utilizar números hexadecimais, octais e decimais.
Clique aqui para descarregar uma tabela ASCII em pdf com os códigos que pode
utilizar em C.
Utiliza-se %c quando se quer imprimir o valor de uma variável dos tipos char dentro de
uma frase. A variável deve ser colocada nos parâmetros seguintes, por ordem de
ocorrência. Exemplo:
1 #include <stdio.h>
2
3 int main()
4 {
5 char letra = 'P';
6
7 printf("O nome Pplware começa por %c.", letra);
8 return 0;
9 }
Exercícios
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 30 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar no
mundo da tecnologia e deixar a sua marca, pode começar aqui.
Operadores
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 31 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Operadores Aritméticos
Nome Símbolo Exemplo
Soma + 5+4=9
Subtração – 154 – 10 = 144
Multiplicação * 5,55 * 10 = 55,5
Divisão / 40 / 2 = 20
Resto de uma divisão % 1500 % 11 = 4
Os operadores de atribuição, tal como o próprio nome indica, servem para atribuir a
uma variável, determinado valor. Existem vários operadores de atribuição e, muitos
deles, funcionam como abreviatura para operações aritméticas.
Relembro que os operadores que aqui estão representados existem em muitas outras
linguagens e que existem alguns outros dependendo da linguagem de programação.
Operadores de Atribuição
Símbolo Exemplo*
= var = 20 → 20
+= var += 5 (igual a var = var + 5) → 25
-= var -= 10 → 15
*= var *= 4 → 60
/= var /= 5 → 12
%= var %= 5 → 2
Os operadores que agora vamos abordar, serão extremamente úteis para a matéria
seguinte (Loops) pois permitem-nos efetuar comparações entre variáveis numéricas.
Ora veja:
Operadores Relacionais
Nome Símbolo Exemplo
x == y → retorna TRUE se x for igual a y e FALSE se tiverem
Igualdade ==
valores diferentes
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 32 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
1 if (condição) {
2 //Se a condição retornar TRUE então este código é executado.
3 } else {
4 //Caso contrário, isto é executado.
5 }
Comentários
No código acima pode verificar que utilizámos duas barras (//) e depois escrevemos
algo. Isto chamam-se comentários e são simplesmente ignorados pelo compilador.
1 #include <stdio.h>
2
3 int main()
4 {
5 int n = 1; //Até ao final da linha é um comentário.
6
7 /*
8 TUDO ISTO é um comentário
9 */
10 }
Imagine que tem uma variável que contém um número qualquer e quer que o seu
código imprima se a variável é maior ou igual a 50 ou menor que 50. Como vai
proceder?
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 33 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Para criar este algoritmos precisamos de inicializar uma variável, efetuar um teste
condicional (utilizando um operador relacional) e depois executar o código em
questão. Veja:
1 #include <stdio.h>
2
3 int main()
4 {
5 int n = 25;
6
7 if (n >= 50) {
8 printf("O valor %d é maior ou igual a 50.", n);
9 } else {
10 printf("O valor %d é menor que 50.", n);
11 }
12
13 return 0;
14 }
Este trecho de código imprime uma mensagem a dizer que 25 é menor que 50. Como
pode ver, isto apenas nos diz se a variável é menor que 50 ou então maior ou igual.
7 if (n > 50) {
8 printf("O valor %d é maior que 50.\n", n);
9 }
10
11 if (n < 50) {
12 printf("O valor %d é menor que 50.\n", n);
13 }
14
15 if (n == 50) {
16 printf("A variável é igual a 50.\n");
17 }
Isto tornaria o código um pouco repetitivo. Podemos utilizar o comando else if que
quer dizer “ou se” da seguinte forma:
7 if (n == 50) {
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 34 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Nos exercícios seguintes, irá precisar de gerar um número aleatório. Para o fazer, irá
necessitar de incluir mais um ficheiro .h que se chama time.h.
1 #include <stdio.h>
2 #include <time.h>
3 #include <stdlib.h>
4
5 int main()
6 {
7 //Inicializar a seed para o número aleatório
8 srand (time(NULL));
9 //Atribuir o número aleatório (entre 1 e 10) a uma variável
10 int n = (rand() % 10) + 1;
11
12 return 0;
13 }
Mais tarde falaremos melhor sobre esta função. Deverá incluir a biblioteca “stdlib” que
é uma biblioteca de propósito geral que contém um leque de funções muito utilizadas,
incluindo a rand e a srand.
Exercícios
1 – Crie três variáveis. Duas com números à sua escolha e uma terceira com a soma
das outras duas. De seguida, imprima o valor das duas.
2 – Crie uma variável do tipo número inteiro que contenha um valor entre 1 e 100. De
seguida, duplique o seu valor.
Depois, verifique se o seu valor é igual a 100 e, caso seja, imprima uma mensagem de
congratulação.
Caso o valor seja mais pequeno que 100, imprima o valor e que este é menor que 100.
Faça o mesmo caso o número seja maior que 100 alterando a mensagem para
corresponder.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 35 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Na próxima semana iremos falar de como interagir com o utilizador. Será, talvez, um
dos pontos mais emocionantes até hoje.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar no
mundo da tecnologia e deixar a sua marca, pode começar aqui.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 36 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
scanf
1 #include <stdio.h>
2
3 int main()
4 {
5 int idade;
6
7 printf("Digite a sua idade: ");
8 scanf("%d", &idade);
9
10 printf("A sua idade é %d", idade);
11
12 return 0;
13 }
Como pode ver na oitava linha, o primeiro argumento da função “scanf” contém o tipo
de variável que vai ser inserido (tal como na função “printf”).
Os argumentos seguintes serão o nome das variáveis, precedidos por um “&”, a que os
valores vão ser atribuídos. Pode ler a linha 8 da seguinte forma: “atribuir um número
inteiro a idade”.
Quando se executa o código acima, irá aparecer a mensagem “Digite a sua idade: ” e o
cursor irá posicionar-se logo após essa frase aguardando que um valor seja inserido.
Depois de inserir o valor e pressionar ENTER, será imprimida uma mensagem com a
idade que inseriu.
Relembrando, pode utilizar as seguintes expressões para definir o tipo de dados a ser
introduzido:
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 37 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
1 #include <stdio.h>
2
3 int main()
4 {
5 int num1, num2;
6
7 printf("Digite dois números: ");
8 scanf("%d %d", &num1, &num2);
9
10 printf("Os números que digitou são %d e %d.", num1, num2);
11
12 return 0;
13 }
Ou seja, depois de aparecer a mensagem “Digite dois números:”, terá que inserir dois
números e pode identificar a sua separação com um espaço, enter ou tab.
Como pode ver, é muito simples utilizar a função scanf. Apesar de apenas termos
utilizado números inteiros, pode utilizar números decimais ou caracteres com esta
função.
getchar
Existe outra forma, mais simples, de pedir caracteres ao utilizador: a função “getchar”.
Compare os seguintes dois exemplos (primeiro com scanf e segundo com getchar):
1 #include <stdio.h>
2
3 int main()
4 {
5 char letra;
6
7 printf("Insira a primeira letra do seu nome: ");
8 scanf("%c", &letra);
9
10 printf("A primeira letra do seu nome é %c.", letra);
11 return 0;
12 }
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 38 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
1 #include <stdio.h>
2
3 int main()
4 {
5 char letra;
6
7 printf("Insira a primeira letra do seu nome: ");
8 letra = getchar();
9
10 printf("A primeira letra do seu nome é %c.", letra);
11 return 0;
12 }
1 #include <stdio.h>
2
3 int main()
4 {
5 char letra1, letra2;
6
7 printf("Insira a primeira letra do seu nome: ");
8 scanf("%c",&letra1);
9
10 printf("E agora a última: ");
11 scanf("%c",&letra2);
12
13 printf("O seu nome começa com \"%c\" e termina com \"%c\".", letra1, letra2);
14
15 return 0;
16 }
Olhando para o código acima, irá pensar que coloco duas letras como “H” e “E” e que,
no final é imprimido «O seu nome começa com “H” e termina com “E”.» mas não. Não
é isso que acontece. Experimente correr o código.
Como deve ter verificado, logo após digitar a primeira letra, o programa terminando
deixando o espaço para a segunda letra em branco.
O que aconteceu aqui? Quando nós clicamos no ENTER para submeter a primeira
letra, além dessa letra, o ENTER (“\n”) é submetido para a memória e quando aparece
um novo pedido para inserir um caractere, o “\n” é automaticamente assumido como
esse novo caractere.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 39 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Para que isto não aconteça, basta limpar o buffer antes de utilizar novamente a
função. No Windows utilizamos a função “fflush(stdin)” e no Linux “__fpurge(stdin)” de
forma a limpar o buffer do stdin (teclado).
1 #include <stdio.h>
2
3 int main()
4 {
5 char letra1, letra2;
6
7 printf("Insira a primeira letra do seu nome: ");
8 scanf("%c",&letra1);
9
10 fflush(stdin);
11 __fpurge(stdin);
12
13 printf("E agora a última: ");
14 scanf("%c",&letra2);
15
16 printf("O seu nome começa com \"%c\" e termina com \"%c\".", letra1, letra2);
17
18 return 0;
19 }
Exercícios
1 – Crie um programa que gere um número aleatório entre 1 e 10; de seguida peça-lhe
um número e, se acertar no número gerado recebe uma mensagem a dizer que
ganhou. Caso contrário, recebe uma mensagem a dizer que perdeu.
3 – Crie um programa que, primeiro, peça dois números do tipo float e, de seguida,
imprima as seguintes instruções:
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 40 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar no
mundo da tecnologia e deixar a sua marca, pode começar aqui.
Infelizmente, esta semana não temos um vídeo por motivos “temporais” porém,
prometemos que na próxima semana voltará a haver vídeo.
Operadores Lógicos
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 41 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
queremos incluir mais do que uma condição para que algo aconteça. Existem três
operadores lógicos que vamos abordar agora: “&&”, “||” e “!”.
Operador “&&”
1 #include <stdio.h>
2
3 int main()
4 {
5 int num1;
6 num1 = 4;
7
8 if (num1 > 0 && num1 <= 10) {
9 printf("O número %d está entre 1 e 10.", num1);
10 }
11
12 return 0;
13 }
O que está expresso na condição acima é: se “num1” for maior que 0 e menor ou igual
a 10 então executa o código que está ali dentro.
Este comando pode ser utilizado mais do que uma vez dentro de um teste condicional
pois podemos colocar duas ou mais condições utilizando este operador. Basta
adicionar “&&”.
Operador “||”
O operador “||” refere-se a “ou”, ou seja, utilizando este operador podemos executar
uma condição do seguinte tipo: executa isto se x acontecer ou se y acontecer.
Exemplo:
1 #include <stdio.h>
2
3 int main()
4 {
5 int num1;
6 num1 = 3;
7
8 if (num1 == 3 || num1 == 5) {
9 printf("O número é 3 ou 5.\n");
10 }
11
12 return 0;
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 42 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
13 }
Operador “!”
Podemos traduzir o operador “!” para “o contrário de”. Quando utilizado numa
condição, por exemplo, este nega tudo o que lá está. Exemplo:
1 #include <stdio.h>
2
3 int main()
4 {
5 int num1;
6 num1 = 0;
7
8 if (!num1) {
9 printf("O valor de num1 corresponde a falso.\n");
10 }
11
12 return 0;
13 }
1 #include <stdio.h>
2
3 int main()
4 {
5 int num;
6
7 num = 1;
8 printf("O número é %d\n", num);
9
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 43 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
10 num = num + 1;
11 printf("O número é %d\n", num);
12
13 num = num + 1;
14 printf("O número é %d\n", num);
15
16 return 0;
17 }
O código acima imprime a frase “O número é” e o número que está atribuído a “num”
nesse momento. Começando em 1 e chegando a 3 no final do algoritmo.
Existe outra forma de adicionar e remover uma unidade a uma variável: “++” e “–“.
Veja como ficaria o código anterior utilizando essa sintaxe:
1 #include <stdio.h>
2
3 int main()
4 {
5 int num;
6
7 num = 1;
8 printf("O número é %d\n", num);
9
10 num++;
11 printf("O número é %d\n", num);
12
13 num++;
14 printf("O número é %d\n", num);
15
16 return 0;
17 }
Isso irá imprimir o mesmo que o código mostrado anteriormente. Para remover uma
unidade basta fazer do seguinte modo:
1 #include <stdio.h>
2
3 int main()
4 {
5 int num;
6
7 num = 1;
8 printf("O número é %d\n", num);
9
10 num--;
11 printf("O número é %d\n", num);
12
13 return 0;
14 }
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 44 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Estes operadores podem ser utilizados antes ou depois de uma variável: “num++” ou
“++num”. Quando estes operadores são utilizados isoladamente, nenhuma diferença
existe porém, quando estamos a efetuar uma atribuição, existe uma diferença. Analise
o seguinte exemplo:
1 #include <stdio.h>
2
3 int main()
4 {
5 int a, b, c;
6
7 a = 0;
8 b = a++;
9 c = ++a;
10
11 printf("A: %d, B: %d, C: %d", a, b, c);
12
13 return 0;
14 }
Primeiramente, declaramos três variáveis: “a”, “b” e “c”. De seguida, atribuímos o valor
0 à variável “a”. Quando atribuímos “a++” à variável “b”, o que vai acontecer?
A variável “b” vai assumir o valor 0 e um valor é incrementado a “a” ficando esta com o
valor 1, ou seja, “b = a++” é um atalho para o seguinte:
Como pode visualizar, estes operadores podem ser muito úteis em diversas situações.
Mesmo que agora não esteja a visualizar estas situações, não se preocupe: irá ver
muitas!
Já foi abordado o controlo de fluxo utilizando if else. Agora é a vez de um novo “tipo”
de controlo de fluxo, o while ou, em português, “enquanto”. A sintaxe do while é a
seguinte:
1 while(condição) {
2 //Algo acontece
3 }
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 45 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Veja então o seguinte exemplo da utilização deste tipo de controlo de fluxo que
imprime os números de zero a dez:
1 #include <stdio.h>
2
3 int main()
4 {
5 int num;
6 num = 0;
7
8 while(num <= 10) {
9 printf("%d\n", num);
10 num++;
11 }
12
13 return 0;
14 }
Sem utilizar este controlo de fluxo, teríamos que escrever muito mais código de forma
a conseguir imprimir os números de um a dez através de uma variável.
Exercícios
2 – Imprima todos os números entre -100 e 100 que sejam divisíveis por 5 e 3.
3 – Gere um número inteiro aleatório entre 1 e 10. De seguida, peça ao utilizador que
insira um número entre o intervalo anteriormente indicado.
Caso o número que o utilizador insira esteja fora do intervalo, deverá alertar o
utilizador para esse problema. Caso o número esteja no intervalo e seja igual ao
gerado, deverá mostrar uma mensagem de parabéns.
Caso não seja igual ao número gerado, deverá dizer ao utilizador a seguinte
mensagem dependendo da amplitude (diferença entre o número inserido e o número
indicado):
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 46 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Observação: para obter um valor absoluto utilize a função “abs” do ficheiro “stdlib.h”.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar no
mundo da tecnologia e deixar a sua marca, pode começar aqui.
Interrupção do Fluxo
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 47 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
o loop while que nos permite repetir um determinado trecho de código enquanto uma
condição for verdadeira.
break
O primeiro comando que nos permite ter um maior controle sobre os fluxos de
repetição é o comando break permite que terminemos o loop atual sem quaisquer
problemas.
Exemplo
1 #include <stdio.h>
2
3 int main()
4 {
5 int count,
6 num;
7
8 count = 1;
9 num = 0;
10
11 while(count <= 1000000) {
12 if(num== 0) {
13 if((count%17==0) && (count%18==0) && (count%20==0)) {
14 num=count;
15 }
16 }
17 count++;
18 }
19
20 printf("O número divisível por 17, 18 e 20 entre 1 e 1000000 é: %d", num);
21 return 0;
22 }
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 48 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
1 #include <stdio.h>
2
3 int main()
4 {
5 int count,
6 num;
7
8 count = 1;
9 num = 0;
10
11 while(count <= 1000000) {
12 if(num== 0) {
13 if((count%17==0) && (count%18==0) && (count%20==0)) {
14 num=count;
15 break;
16 }
17 }
18 count++;
19 }
20
21 printf("O número divisível por 17, 18 e 20 entre 1 e 1000000 é: %d", num);
22 return 0;
23 }
continue
Exemplo
Precisamos de somar todos os números entre 0 e 1000 que não são múltiplos de 2
nem de 3. Para isso utilizamos o seguinte código:
1 #include <stdio.h>
2
3 int main()
4 {
5 int count,
6 sum;
7
8 count = 1;
9 sum = 0;
10
11 while(count <= 1000) {
12
13 if(count%2 == 0 || count%3 == 0) {
14 count++;
15 continue;
16 }
17
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 49 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
O que este código faz é percorrer os números de 1 a 1000 e, se for divisível por 2 ou
por 3, passa para a próxima iteração (adicionando um valor ao número atual). Caso a
condição não se verifique, o número é acrescentado à soma, adicionado um número a
count passando assim para a próxima iteração.
O teste condicional switch é extremamente útil quando precisamos de, por exemplo,
efetuar um comando dependendo da opção, entre 0 e 10, que o utilizador escolheu.
Claro que poderíamos utilizar os if porém o código ficaria deveras extenso e um pouco
complicado de ler. Veja o seguinte código com um switch:
1 #include <stdio.h>
2
3 int main()
4 {
5 int option;
6
7 printf("Insira a opção:\n");
8 scanf("%d", &option);
9
10 switch(option) {
11 case 1:
12 printf("Escolheu a opção 1");
13 break;
14 case 2:
15 printf("Escolheu a opção 2");
16 break;
17 case 3:
18 printf("Escolheu a opção 3");
19 break;
20 case 4:
21 printf("Escolheu a opção 4");
22 break;
23 case 5:
24 printf("Escolheu a opção 5");
25 break;
26 default:
27 printf("Opção inexistente.");
28 break;
29 }
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 50 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
30
31 return 0;
32 }
Como pode visualizar, o código executado para cada opção pode ser diferente. Caso o
inserido não corresponda a nenhuma das opções, o que está em default é executado.
Veja o código anterior com if else:
1 #include <stdio.h>
2
3 int main()
4 {
5 int option;
6
7 printf("Insira a opção:\n");
8 scanf("%d", &option);
9
10 if (option == 1) {
11 printf("Escolheu a opção 1");
12 } else if (option == 2) {
13 printf("Escolheu a opção 2");
14 } else if (option == 3) {
15 printf("Escolheu a opção 3");
16 } else if (option == 4) {
17 printf("Escolheu a opção 4");
18 } else if (option == 5) {
19 printf("Escolheu a opção 5");
20 } else {
21 printf("Opção inexistente.");
22 }
23
24 return 0;
25 }
Comparando as duas, é possível verificar que utilizando o switch o código fica mais
legível e fácil de ser editado.
Deve ter reparado ainda que no final de cada instrução do switch utilizámos um break.
Isto acontece porque, caso não o utilizemos, o programa continuaria a correr os
comandos seguintes que existem no switch.
Exercícios
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 51 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
interrupção do fluxo.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples
aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer
entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 52 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
1 do
2 {
3 //código a ser repetido
4 } while (condição);
Este facto faz com que o que código contido dentro do teste lógico seja
executado pelo menos uma vez. Veja então o seguinte exemplo de uma simples
calculadora com o código documentado.
1 #include <stdio.h>
2
3 int main()
4 {
5 /*
6 * Variável que irá determinar se executamos
7 * o código da calculadora de novo ou não.
8 */
9 int calcular;
10
11 do {
12
13 char operacao;
14 float num1,
15 num2;
16
17 //Limpeza do buffer
18 fflush(stdin);
19 __fpurge(stdin);
20
21 printf("Escolha a operação [+ - * / ]: ");
22 scanf("%c",&operacao);
23
24 printf("Insira o primeiro número: ");
25 scanf("%f",&num1);
26
27 printf("Insira o segundo número: ");
28 scanf("%f",&num2);
29
30 switch( operacao )
31 {
32 case '+':
33 printf("%.2f + %.2f = %.2f\n", num1, num2, num1 + num2);
34 break;
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 53 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
35
36 case '-':
37 printf("%.2f - %.2f = %.2f\n", num1, num2, num1 - num2);
38 break;
39
40 case '*':
41 printf("%.2f * %.2f = %.2f\n", num1, num2, num1 * num2);
42 break;
43
44 case '/':
45 printf("%.2f / %.2f = %.2f\n", num1, num2, num1 / num2);
46 break;
47
48 default:
49 printf("Você digitou uma operação invalida.\n");
50 break;
51 }
52
53 printf("Insira 0 para sair ou 1 \n");
54 scanf("%d", &calcular);
55
56 } while (calcular);
57 /*
58 * Se "calcular" for diferente de 0 (falso), o código
59 * da calculadora será executado novamente.
60 *
61 * Para terminar o código basta então digitar 0 quando
62 * for pedido.
63 */
64
65 return 0;
66
67 }
Outro teste lógico de repetição que é muito importante é o for e é muito útil quando,
por exemplo, precisamos de inicializar uma variável a que deve ser incrementado um
número. Veja a sintaxe:
Vamos agora ver um pequeno exemplo comparando a sintaxe com um teste lógico
while. O código seguinte utiliza o último loop mencionado para imprimir os números de
0 a 100:
1 #include <stdio.h>
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 54 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
2
3 int main()
4 {
5 int num;
6 num = 0;
7
8 while (num <= 100) {
9 printf("%d\n", num);
10 num++;
11 }
12
13 return 0;
14 }
1 #include <stdio.h>
2
3 int main()
4 {
5 int num;
6
7 for(num = 0; num <=100; num++) {
8 printf("%d\n", num);
9 }
10
11 return 0;
12 }
Apesar de parecer apenas uma pequena redução de duas linhas, com códigos mais
complexos poderão ser poupadas mais linhas e este loop também melhora a
legibilidade do código.
Ressalto também que os interruptores de fluxo break e continue funcionam com este
teste lógico de repetição.
Exercícios
1 – Crie um pequeno menu de opções com, no mínimo, cinco opções à sua escolha
sendo uma delas para terminar o programa e as restantes para efetuar qualquer coisa
que deseje. O menu deverá continuar a aparecer até o utilizador pedir para fechar.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 55 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
Funções e Procedimentos
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples
aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer
entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
Pedimos desculpa pela gafe no vídeo onde é referido que 6 + 4 é igual a 11.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 56 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Funções
Uma função é um bloco de código que, tal como o próprio nome indica, tem uma
função própria, ou seja, que serve para aquela finalidade. As funções permitem-nos,
por exemplo, reutilizar código.
Durante os seus anos de programador, irá criar milhares de funções para as mais
diversas funções. Então, recomendamos que vá guardando as funções que utiliza
porque, futuramente, poderá necessitar delas.
Existe uma função que tem vindo a ser sempre utilizada: a função main. É a função
principal do programa, aquela que é executada automaticamente quando um programa
é executado. A sintaxe das funções é a seguinte:
1 tipo_dado_retorno nome_da_funcao(parametros) {
2 //Codigo da Funcao
3 }
Vejamos então o exemplo de uma função simples que nos permite mostrar a
mensagem “Olá Mundo!”:
1 #include <stdio.h>
2
3 int main() {
4 sayHello();
5 return 0;
6 }
7
8 void sayHello() {
9 printf("Olá Mundo!\n");
10 }
A função chama-se “sayHello” e não retorna nenhuns dados (“void”). O que está
dentro das chavetas (“{}”) é o código que é executado quando a função é chamada.
Argumentos e Parâmetros
No exemplo acima é possível visualizar que tanto na invocação da função, como na sua
escrita foi colocado um par de parênteses sem nada. Isto acontece porque não
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 57 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
existem parâmetros.
Vamos criar uma função que efetua uma soma: como enviamos os valores para a
função? Definindo o nome e o tipo de parâmetros a serem recebidos. Veja o seguinte
exemplo.
A função acima, denominada “soma”, tem dois parâmetros, o “n1” e o “n2”, ambos do
tipo inteiro. Os valores que a eles irão ser atribuídos chamam-se argumentos.
Retorno
Na função anterior somámos dois números mas nada mais aconteceu. E se quisermos,
por exemplo, que a função retorne o valor da soma?
Para isso teremos que substituir o “void” pelo tipo de dados que, neste caso é “int” e
utilizar o comando “return”. Ficaria algo semelhante ao seguinte:
Ou seja, enviamos dois números para a função; esta cria a variável “soma” com a soma
dos dois números e de seguida retorna esta variável que é do tipo “int”. Podemos
simplificar esta função ficando apenas com o seguinte:
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 58 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
1 #include <stdio.h>
2
3 int main() {
4 int a, b;
5
6 printf("Insira o primeiro número: ");
7 scanf("%d", &a);
8
9 printf("Insira o segundo número: ");
10 scanf("%d", &b);
11
12 printf("A soma é %d", soma(a,b));
13 return 0;
14 }
15
16 int soma(int n1, int n2) {
17 return n1 + n2;
18 }
Procedimentos
Procedimentos são também blocos de código que contêm uma função específica. A
diferença entre funções e procedimentos é que os segundos não retornam quaisquer
valores.
Exercícios
Perímetro
Quadrado
Retângulo
Triângulo
Círculo
Área
Quadrado
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 59 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Retângulo
Triângulo
Losango
Círculo
Trapézio
Elipse
Volume
Cubo
Paralelepípedo
Cilindro
Esfera
Pirâmide Quadrangular/Retângular
Cone
3 – Crie três funções para dizer os valores das áreas, perímetros e volumes finais.
Deve ser chamada no final de cada uma das funções anteriores (excepto a da fórmula
resolvente/equação de segundo grau).
Deixamos aqui a resolução deste exercício mas, primeiro tente, só depois de muitas
tentativas é que deve ver a resolução.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 60 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
“mudança”, “futuro”.
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples
aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer
entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
Infelizmente, o artigo desta semana não é acompanhado por vídeo porém esperemos
que apreciem o restante conteúdo.
Arrays
Até agora apenas falámos de variáveis escalares, ou seja, variáveis com valores
individuais. Vamos então falar de uma nova estrutura de dados: as arrays.
Arrays, também conhecidas por “tabelas” ou “vetores”, são estruturas de dados que,
ao contrário de variáveis escalares, nos permitem armazenar mais do que um valor.
Estas são como matrizes (ou tabelas) de dados em que cada dado está localizado
numa determinada posição que pode ser acedida através de “coordenadas”. Existem
dois tipos: as unidimensionais e as multidimensionais.
Arrays Unidimensionais
Arrays unidimensionais podem ser comparadas a tabelas com uma única coluna e
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 61 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Sintaxe
Onde:
Exemplo
No exemplo anterior, a última declaração está errada porque o índice máximo da array
foi ultrapassado, ou seja, a array apenas pode conter 10 elementos mas, como a
contagem inicia sempre no zero, “idades[10]” refere-se ao décimo primeiro elemento.
Arrays Multidimensionais
Arrays multidimensionais são todas aquelas que contenham mais do que uma
dimensão, ou seja, se comparamos a uma tabela, têm mais do que uma coluna.
Sintaxe
1 tipo nome[linhas][colunas];
Exemplo
1 /*
2 * Declaração de uma array 6x5
3 */
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 62 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
4 float notas[6][5];
5
6 notas[0][0] = 18.7; //1ª Linha, 1ª Coluna
7 notas[0][1] = 15.4; //1ª Linha, 2ª Coluna
8 notas[3][2] = 19.6; //4ª Linha, 3ª Coluna
9 notas[5][4] = 17.5; //6ª Linha, 5ª Coluna
10 notas[6][0] = 20.0; //Excedeu o máximo de linhas (6)
11 notas[5][5] = 17.4; //Excedeu o máximo de colunas (5)
No exemplo anterior é possível visualizar a criação de uma tabela array 6 linhas por 5
colunas. Traduzindo esta array para uma tabela, ficaríamos com o seguinte:
18.7 15.4
19.6
17.5
1 int idades[2][4] = {
2 {1, 2, 3, 4},
3 {0, 1, 2, 3}};
Exercícios
2 – Crie um pequeno programa onde o utilizador tenha que inserir os valores (float)
que obteve no final do ano letivo em sete disciplinas e, posteriormente, mostre a sua
média. Utilize apenas uma array para armazenar todos os valores.
3 – Crie mais um programa para obter as notas de cinco testes em 3 disciplinas (matriz
3×5) e percorra cada linha de forma a dizer a nota mais alta de cada uma das três
disciplinas.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 63 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
Constantes
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples
aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer
entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
Constantes
Existem diversas formas de declarar constantes em C. Iremos abordar duas que são as
mais utilizadas: as constantes declaradas e as constantes definidas.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 64 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Sintaxe
Onde:
Exemplo
1 #include <stdio.h>
2
3 #define PI 3.14159
4
5 int main (){
6
7 double r = 5.0;
8 double circle;
9
10 circle = 2 * PI * r;
11 printf("%f\n", circle);
12 return 0;
13
14 }
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 65 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Sintaxe
Onde:
Exemplo
1 #include <stdio.h>
2 #include <math.h>
3
4 int main() {
5 const double goldenRatio = (1 + sqrt(5)) / 2;
6
7 goldenRatio = 9; //Erro. A constante não pode ser alterada.
8
9 double zero = (goldenRatio * goldenRatio) - goldenRatio - 1;
10 printf("%f", zero);
11
12 return 0;
13 }
Uma constante local é uma constante que está restrita a uma determinada função, por
exemplo. Se declararmos uma constante dentro de uma função, esta só estará
disponível para o código que está dentro dessa mesma função.
Exercícios
1 → Crie um pequeno programa em que o utilizador insira um montante sem IVA e que
o programa lhe devolva o valor com IVA. Deve utilizar uma constante.
2 → Crie um pequeno programa onde efetua dez operações (à sua escolha) que
relacione os números que desejar e uma constante. Esta constante deve ser numérica.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 66 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples
aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer
entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
Infelizmente, e mais uma vez, esta semana não iremos ter vídeo porém garantimos que
na próxima semana haverá. Antes de continuar, recomendamos uma breve leitura
deste artigo no Pplware Kids onde explicamos a diferença entre bits e bytes.
Apontadores
Para os computadores tudo se resume a bits, ou seja, a zeros e a uns. Então, para os
computadores, as diferenças que nós conhecemos entre os diversos tipos de variáveis
(char, int, double/float, etc) são praticamente inexistentes.
Uma forma bastante utilizada para administrar o número enorme de 0’s e 1’s é através
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 67 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Para nos referirmos ao endereço de uma variável, devemos utilizar o operador & (e
comercial) antes do nome da variável. No exemplo seguinte, imprimo o endereço de
memória onde está alocado o valor da variável “num” e “letra”:
1 #include <stdio.h>
2
3 int main() {
4
5 int num = 4;
6 char letra = 'c';
7
8 printf("%p e %p", &num, &letra);
9
10 return 0;
11 }
Como pode ver, neste caso foi utilizado %p visto que se refere a endereços de
pointers. Eu recebi os valores 0028FF1C e 0028FF1B, mas a si é provável que a função
retorne outros valores. Estes valores são o endereço da memória onde estão alocadas
as variáveis acima mencionadas. Cada byte da memória RAM tem o seu endereço.
Daí que, em funções como, por exemplo, a scanf, utilizemos este operador antes do
nome da variável para nos referirmos ao endereço de memória da variável e assim
armazenar o valor nesse local.
Esta semana não iremos recomendar exercícios pois o conteúdo de hoje não é
suficiente para novos exercícios. Porém, continue a praticar! Na próxima semana
iremos continuar o tema dos apontadores.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 68 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
Apontadores: endereçamento
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples
aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer
entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
Apontadores
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 69 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Ou seja, para se saber quantas bytes ocupa o tipo int, devemos passar como
argumento à função sizeof uma variável desse tipo.
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main()
5 {
6 char caractere;
7 int inteiro;
8 float Float;
9 double Double;
10
11 printf("Tipo\tNum de Bytes\tEndereço\n");
12 printf("-------------------------------------\n");
13 printf("Char\t%d byte \t\t%p\n", sizeof(caractere), &caractere);
14 printf("Inteiro\t%d bytes \t%p\n", sizeof(inteiro), &inteiro);
15 printf("Float\t%d bytes \t%p\n", sizeof(Float), &Float);
16 printf("Double\t%d bytes \t%p\n", sizeof(Double), &Double);
17
18 return 0;
19 }
Como pode verificar, todos os tipos de dados exceto char ocupam mais do que um
byte na memória RAM. Então, o endereço que é imprimido corresponde apenas ao
primeiro byte ocupado pela variável.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 70 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Isto acontece porque a numeração hexadecimal tem como base 16 números enquanto
que a decimal tem como base 10 números. Veja então o número que corresponde a
cada letra da numeração hexadecimal na tabela seguinte:
Para efetuar a conversão, temos que multiplicar cada um desses números por uma
potência de base 16 cujo expoente é igual à posição de cada um dos números (da
direita para a esquerda). Então, temos:
1 (2*16^5)+(8*16^4)+(15*16^3)+(15*16^2)+(1*16^1)+(15*16^0) =
2 = 2097152+524288+61440+3840+16+15 =
3 = 2686751
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 71 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Podemos concluir dos dados acima que a variável que declarámos do tipo char, no
meu computador, ocupa a posição 2686751 enquanto que as outras ocupam mais do
que uma.
Relembrando que as bytes alocadas para variáveis que ocupam mais do que uma
encontram-se localizadas lado a lado, de seguida e que o endereço que obtemos
corresponde ao da primeira byte, a variável do tipo inteiro que declarámos ocupa as
bytes cujos endereços (em número decimal) são 2686744, 2686745, 2686746 e
2686747.
Estas informação serão muito úteis para os próximos artigos. Fique atento.
Esta semana não iremos recomendar exercícios pois o conteúdo de hoje não é
suficiente para novos exercícios. Porém, continue a praticar! Na próxima semana
iremos continuar o tema dos apontadores.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples
aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer
entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 72 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Nesta semana, infelizmente, não haverá vídeo porém tentaremos fazer na próxima
semana. Hoje iremos continuar o tema dos apontadores. Os apontadores, como já foi
referido anteriormente, são um tipo de variáveis que armazenam endereços.
Declaração de apontadores
Sintaxe
Tal como nas restantes variáveis, temos que colocar o tipo de dados na declaração da
variável devido ao facto do espaço ocupado por cada tipo de dados ser diferente.
A constante NULL está contida na biblioteca stdlib, ou seja, standard library e o seu
valor é, na maioria das vezes, 0.
Inicialização de apontadores
Para inicializar um apontador, devemos igualar o seu valor ao endereço de uma outra
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 73 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Exemplo 1
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main()
5 {
6 int numero = 5;
7 int *ponteiro = №
8
9 printf("%d e %d", numero, *ponteiro);
10
11 return 0;
12 }
Depois imprimimos o valor de numero e do endereço que para o qual aponta ponteiro.
Isto irá imprimir “5 e 5”, pois é o mesmo dizer numero e *ponteiro visto que o ponteiro
ponteiro aponta para a variável numero.
Exemplo 2
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <windows.h>
4
5 int main()
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 74 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
6 {
7 SetConsoleOutputCP(65001);
8
9 int a, b, c;
10 int *p, *q;
11
12 a = 5;
13 b = 4;
14
15 p = &a;
16 q = &b;
17 c = *p + *q;
18
19 printf("A soma de %d e %d é %d.", a, b, c);
20 return 0;
21 }
No exemplo anterior pode visualizar que são declaradas cinco variáveis: a a, b e c que
são do tipo número inteiro e, de seguida, dois apontadores, p e q. Posteriormente é
atribuído o valor 5 à variável a e o valor 4 à variável b.
Exemplo 3
O exemplo anterior aparenta ser inútil, pois poderíamos fazer o mesmo com menos
linhas de código. Mas, e se precisar de, por algum motivo, criar uma função que troque
o valor de duas variáveis? Poderíamos, inicialmente, pensar no seguinte:
Mas a função apresentada não vai realmente alterar os valores das variáveis, pois
apenas recebe os seus valores e “coloca-os” numas míseras variáveis locais. A função
correta teria que ser a seguinte:
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 75 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Com esta função sim, poderíamos trocar os valores de duas variáveis, pois ao termos
acesso aos seus endereços podemos facilmente efetuar as mudanças.
Exercícios
2 – Crie uma função que receba três variáveis do tipo inteiro: minutosTotais e dois
apontadores (um para a variável horas e outro para a variável dos minutos).
Na função main, crie as variáveis que achar necessárias e peça o número de minutos
que deseja converter em horas e minutos ao utilizador. De seguida utilize a função
anteriormente criada e imprima o resultado dado por esta.
Não se esqueça que a função horasParaMinutos não deve retornar o número de horas
e minutos, mas sim colocar esses valores nos endereços passados para a função.
Esta semana não iremos recomendar exercícios pois o conteúdo de hoje não é
suficiente para novos exercícios. Porém, continue a praticar! Na próxima semana
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 76 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples
aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer
entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 77 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
ponteiros.
Imagine que temos um array do tipo double com dois elementos. Sabemos também
que cada variável deste tipo ocupa, geralmente, 8 bytes na memória RAM. De seguida,
cria um apontador cujo endereço aponta para esse array. O que vai acontecer é que
esse endereço apontará para o primeiro byte do array e não para todos eles.
1 apontador++;
2 apontador + sizeof(double);
n[y] = n[y-1] + r
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 78 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Poderíamos fazer este pequeno programa da seguinte forma (o código abaixo está
explicado):
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main()
5 {
6 int pa[10], razao;
7 int *pointer;
8
9 /*
10 * Aqui pedímos o termo inicial, ou seja, o primeiro
11 * número da PA (Progressão Aritmética).
12 *
13 * De seguida o apontador é definido para apontar para
14 * o array pa.
15 */
16 printf("Insira o termo inicial: ");
17 scanf("%d", &pa[0]);
18 pointer = pa;
19
20 printf("Insira razão: ");
21 scanf("%d", &razao);
22
23 while(pointer != &pa[9]) {
24 /*
25 * Cada valor da PA é definido somando o valor corrente do apontador com a razão.
26 * De seguida, o apontador é incrementado de forma a apontar para o próximo
27 * elemento do array. (Isto acontece enquanto o apontador for diferente do
28 * endereço do último elemento da PA.)
29 */
30 *(pointer + 1) = *pointer + razao;
31 pointer++;
32 }
33
34 printf("PA");
35
36 for(pointer = pa ; pointer <= &pa[9] ; pointer++) {
37 /*
38 * Aqui todos os elementos do array são percoridos
39 * e imprime-se assim a Progressão Aritmética criada.
40 */
41 printf(" -> %d", *pointer);
42 }
43
44 return 0;
45 }</stdlib.h></stdio.h>
Esta semana não iremos recomendar exercícios pois o conteúdo de hoje não é
suficiente para novos exercícios. Porém, continue a praticar! Na próxima semana
iremos continuar o tema dos apontadores.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 79 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples
aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer
entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
Strings
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 80 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Nesse string podemos colocar a palavra “Pplware” que tem 7 caracteres, mas qual é a
razão que nos leva a colocar 8 quando declaramos a variável? Não se esqueça do
caracter \0 que conta como 1 caracter.
1 char nome[8] = {'P', 'p', 'l', 'w', 'a', 'r', 'e', '\0'}; /* Forma mais trabalhosa */
2 char nome[] = "Pplware"; /* Não há necessidade de colocar o seu tamanho. */
3 char *nome = "Pplware";
Este “tipo” de dados pode, à semelhança de todos os outros, ser integrado com a
função printf utilizando “%s”, uma abreviatura para string.
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main()
5 {
6 char *nome = "Vamos Programar? - Introdução à Programação";
7
8 printf("%s\n", nome);
9 return 0;
10 }
Exercícios
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 81 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples
aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer
entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
Imprimir strings
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 82 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
A impressão de strings no ecrã pode ser feita de diversas formas. Iremos abordar duas
delas: a função printf, já conhecida por todos vós, e a função puts.
Função printf
Esta função já é conhecida por todos vós e permite a impressão de diversos tipos de
dados de forma bastante simples.
Sintaxe
Função puts
Por outro lado, temos a função puts que quer dizer put string. Esta função é bastante
útil quando precisamos imprimir apenas uma sequência de caracteres variável.
Sintaxe
Leitura de Strings
Função scanf
A utilização da função scanf para obter sequências textuais é semelhante à forma que
utilizamos para ler números, tanto inteiros, como decimais. Porém, existe uma
pequena diferença.
Sintaxe
Veja a sintaxe e tente descobrir a diferença que existe (além do uso de \%s):
1 scanf("%s", nomeDaString);
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 83 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Exemplo
No seguinte exemplo pode ver como utilizamos esta função para obter diversos dados
do utilizador que depois são imprimidos recorrendo à função printf anteriormente
abordada.
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main()
5 {
6 char nome[21],
7 apelido[21],
8 morada[51],
9 codigoPostal[11];
10
11 printf("Por favor insira os seus dados conforme pedido:\n\n");
12 printf("Primeiro nome: ");
13 scanf("%s", nome);
14
15 printf("Último nome: ");
16 scanf("%s", apelido);
17
18 printf("Morada: ");
19 scanf("%s", morada);
20
21 /* Limpeza do buffer no Windows.
22 Usar "_fpurge(stdin)" em sistemas Unix */
23 fflush(stdin);
24
25 printf("Código Postal: ");
26 scanf("%s", codigoPostal);
27
28 printf("\nO seu Cartão de Identificação:\n");
29 printf("Nome: %s, %s\n", apelido, nome);
30 printf("Morada: %s\n", morada);
31 printf("Código Postal: %s\n", codigoPostal);
32 return 0;
33
34 }
Função gets
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 84 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Outra função que nos permite ler strings é a função gets, cujo nome advém de get
string, ou seja, obter string. A utilização desta função é algo bastante simples.
Sintaxe
Exemplo
Aqui pode ver como fica o programa do exemplo anterior utilizando esta função.
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main()
5 {
6 char nome[21],
7 apelido[21],
8 morada[51],
9 codigoPostal[11];
10
11 printf("Por favor insira os seus dados conforme pedido:\n\n");
12 printf("Primeiro nome: ");
13 gets(nome);
14
15 printf("Último nome: ");
16 gets(apelido);
17
18 printf("Morada: ");
19 gets(morada);
20
21 printf("Código Postal: ");
22 gets(codigoPostal);
23
24 printf("\nO seu Cartão de Identificação:\n");
25 printf("Nome: %s, %s\n", apelido, nome);
26 printf("Morada: %s\n", morada);
27 printf("Código Postal: %s\n", codigoPostal);
28 return 0;
29 }
Exercícios
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 85 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
2 – Criar uma aplicação que peça os utilizador o seu nome, o seu apelido, a sua data
de nascimento, morada, código postal, número de telemóvel, telefone e que imprima
uma espécie de BI.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples
aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer
entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
O artigo de hoje irá incidir sobre algumas sugestões a referir dadas por leitores no
artigo da semana passada, mas também iremos começar a abordar outro tópico.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 86 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Limpeza do buffer
Ambas as funções permitem-nos limpar o buffer de entrada, porém não são muito
seguras. Em programação profissional de C (e outras linguagens), estas funções não
são utilizadas por motivos de segurança.
Claro que existem “soluções” alternativas. O leitor José Carlos Ferreira, no artigo da
semana anterior, sugeriu-nos o seguinte:
Devido à falta de uma solução efetiva ao problema existente com a função scanf e à
existência de alguns contra-tempos com a função gets foi sugerido, pelos leitores Zé e
lmx a utilização da função fgets.
Sintaxe
Onde:
Exemplo
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 87 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
anterior.
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main()
5 {
6 char nome[21],
7 apelido[21],
8 morada[51],
9 codigoPostal[11];
10
11 printf("Por favor insira os seus dados conforme pedido:\n\n");
12 printf("Primeiro nome: ");
13 fgets(nome, 21, stdin);
14
15 printf("Último nome: ");
16 fgets(apelido, 21, stdin);
17
18 printf("Morada: ");
19 fgets(morada, 51, stdin);
20
21 printf("Código Postal: ");
22 fgets(codigoPostal, 11, stdin);
23
24 printf("\nO seu Cartão de Identificação:\n");
25 printf("Nome: %s, %s\n", apelido, nome);
26 printf("Morada: %s\n", morada);
27 printf("Código Postal: %s\n", codigoPostal);
28 return 0;
29 }</stdlib.h></stdio.h>
Mas, se corrermos o código acima, iremos receber algo parecido com o seguinte:
Como pode verificar, isto mostra que os arrays ficaram, também com os delimitadores
da mudança de linha (“\n”). Para removermos estes delimitadores podemos recorrer à
função “strtok”.
Sintaxe
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 88 de 89
Vamos Programar? – Introdução à Programação #25 - Pplware 12/11/15, 15:16
Onde:
Exemplo
1 strtok(nome, "\n");
2 strtok(apelido, "\n");
3 strtok(morada, "\n");
4 strtok(codigoPostal, "\n");
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode
sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que
utilize a keyword [DUVIDA] no início do seu comentários.
http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-25/ Página 89 de 89