Você está na página 1de 17

A R T E I – V A R I Á V E I S E E S T R U T U R A S D E C O N T R O L O Na Parte I são introduzidos

os primeiros conceitos de programação, existentes em todas as linguagens de programação


modernas. A leitura atenta e pausada é essencial para a compreensão destes conceitos que
embora aparentemente simples, a sua não compreensão tem consequências em todo o resto
do texto, mas que poderá detectar de imediato no final da Parte I ao não conseguir resolver
alguns dos exercícios propostos. Após a realização desta parte, fica com as bases para
programar em qualquer linguagem de programação simples, para implementação de
pequenas funcionalidades, como Javascript para adicionar dinamismo a uma página Web, VBA
para programar macros no Microsoft Excel, ou Linguagem R para realizar cálculos esta 1.
Primeiro Programa 7 1. PRIMEIRO PROGRAMA Um programa é uma sequência de instruções,
dirigidas a um computador, para que este execute uma determinada função pretendida. A
actividade de programar consiste na elaboração dessa sequência de instruções numa
determinada linguagem de programação, que satisfaz o que é pretendido. A linguagem de
programação tem que seguir uma sintaxe rígida, de forma a poder ser convertida em
instruções que o computador possa compreender, mas por outro lado deve ser facilmente
escrita e lida por uma pessoa. Há diferentes linguagens de programação, utilizaremos a
linguagem C, no entanto não será a sintaxe da linguagem o mais relevante a aprender, mas sim
competências que são independentes da linguagem. A linguagem C é uma linguagem
imperativa, cada instrução é uma ordem para o computador. Existem outros paradigmas de
programação, mas fora do âmbito deste texto. Manda a tradição que o primeiro programa a
desenvolver numa linguagem, seja o olá mundo. Não a vamos quebrar, este é o programa mais
curto possível, apenas escreve um texto e termina. 1 #include 2 3 int main() 4 { 5 printf("Ola
Mundo!"); 6 } Programa 1-1 Olá Mundo O programa acima está escrito em linguagem C, e
pode ser executado pelo computador. No entanto o computador não entende directamente a
linguagem C, apenas ficheiros executáveis (no Windows com extensão exe). No entanto,
através de um programa chamado de Compilador, podemos converter o código C acima num
executável. Esse executável contém já instruções em código máquina, cujo computador pode
executar. Vamos ver em que consiste o código acima: • Existe numeração das linhas e cores,
que são apenas para nossa conveniência. A numeração das linhas não faz parte do ficheiro C, e
as cores são colocadas pelo editor. Um programa em C é um ficheiro de texto plano, com a
extensão .c e pode ser editado num editor de texto plano como o Notepad, sem qualquer cor
ou numeração das linhas. • Linha 1: começa por um # (cardinal), pelo que esta linha é uma
instrução não para o computador mas sim para o compilador. Essas instruções chamam-se de
comandos de préprocessamento, dado que são executadas antes do processamento. • O
comando #include instrui o compilador a incluir o ficheiro indicado de seguida. Esse ficheiro é
uma biblioteca standard do C (existe em todos os compiladores de C), stdio.h, e consiste na
declaração de funções de entrada e saída. Estas funções podem ser utilizadas de seguida no
programa, sendo utilizada neste caso a função printf. • Linha 2: esta linha não tem nada.
Podem existir quantas linhas em branco o programador quiser, o compilador não ficará
atrapalhado, nem fará nada com elas, mas tal pode ser útil 8 Parte I – Variáveis e Estruturas de
Controlo para espaçar os comandos e tornar mais legível o programa. O mesmo é válido para
os espaços ou tabs numa linha de código, como por exemplo os espaços da linha 5 que
antecedem o printf. • Linha 3: começa a implementação da função main. O programa começa
sempre na função main. Para já, vamos deixar por explicar o int, e os parênteses vazios.
Realçar que as instruções que dizem respeito à função main, e portanto ao que o programa
tem de fazer, estão limitadas por duas chavetas a abrir na linha 4 e a fechar na linha 6. Todas
as instruções entre estas chavetas, pertencem à função main. • Linha 5: nesta linha está a
única instrução. Existe uma chamada à função printf, e sabemos que é uma função porque
após o seu nome tem uns parênteses a abrir. Dentro dos parênteses colocam-se os
argumentos a passar à função. Neste caso colocamos o texto que queremos imprimir: "Ola
mundo!". O texto coloca-se entre aspas, para não se confundir com instruções. Se não o fez já,
crie e execute o programa acima. Veja as instruções para instalar um compilador no anexo
“Compilador e Editor de C”. É tudo. Acabou de dar o primeiro passo no mundo da
programação, editou e compilou o primeiro programa. Houve conceitos referidos aqui que não
compreende agora completamente: bi 2. Variáveis 9 2. VARIÁVEIS Uma variável num programa
é uma entidade que tem um valor a cada instante, podendo esse valor ao longo do programa
ser utilizado e/ou alterado. É nas variáveis que se guarda a informação necessária para realizar
a função pretendida pelo programa. Podem existir quantas variáveis forem necessárias, mas
cada uma utiliza memória do computador. O programa seguinte tem por objectivo trocar o
valor de duas variáveis: 1 #include 2 3 int main() 4 { 5 /* declaração de três variáveis inteiras */
6 int x=3; 7 int y=7; 8 int aux; 9 10 /* trocar o valor de x com y */ 11 aux=x; 12 x=y; 13 y=aux;
14 15 /* mostrar os valores em x e em y */ 16 printf("x: %d, y: %d",x,y); 17 } Programa 2-1
Troca o valor de duas variáveis Comentários: • Este programa tem uma estrutura inicial
idêntica ao Programa 1-1, nomeadamente nas linhas 1 a 4, e linha 17. • A linha 5, 10 e 15 têm
comentários ao código. Os comentários são todo o texto entre /* e */, sendo ignorados pelo
compilador. O objectivo é que seja possível ao programador colocar texto explicativo de partes
mais complexas do programa, não para que o compilador o melhor entenda, mas para que um
outro programador que leia o código, ou o próprio programador mais tarde, compreenda mais
facilmente o código. Os comentários ficam a cor verde, dado que o editor identifica que o
conteúdo dessas linhas será ignorado pelo compilador1. • Nas linhas 6 a 8, estão declaradas as
variáveis x, y e aux. As variáveis x e y são não só criadas, como também inicializadas. Ao
ficarem com um valor inicial, podem desde já ser utilizadas. Na linguagem C, todas as variáveis
utilizadas têm de ser declaradas no início da função2. • Nas linhas 11 a 13, estão comandos
que são atribuições. Numa atribuição, coloca-se uma variável do lado esquerdo da igualdade, e
uma expressão do lado direito. Neste caso, todas as atribuições têm expressões com uma só
variável. 1 A linguagem C++ tem os comentários até ao final da linha, após duas barras: “//”. A
maior parte dos compiladores de C também permite este tipo de comentários. 2 A linguagem
C++ bem como a generalidade dos compiladores de C permitem a declaração fora do início das
funções, mas pelos motivos referidos no erro “Declaração de variáveis fora do início das
funções”, do anexo “Erros Comuns” esta restrição será mantida. 10 Parte I – Variáveis e
Estruturas de Controlo • Na linha 16, é mostrado o valor das variáveis. Notar que a função
printf tem 3 argumentos separados por vírgulas. O primeiro é uma string, em que começa com
aspas e acaba nas aspas seguintes, o segundo uma expressão com a variável x, seguido de uma
expressão com a variável y. Na string existem dois %d. Em cada %d o printf em vez de mostrar
no ecrã %d coloca o valor da variável seguinte na sua lista de argumentos. No primeiro %d vai
colocar x, e no segundo %d vai colocar o y. • Notar que cada instrução acaba com um ponto e
vírgula, sendo esta uma característica do C. Execução do programa: C:\>troca x: 7, y: 3 Os
valores estão correctamente trocados, mas vamos ver com mais detalhe qual o valor das
variáveis a cada momento, na execução passo-a-passo, à direita. A execução passo-a-passo
tem em cada linha da tabela um passo. Em cada passo é indicada a linha de código
correspondente, e a respectiva instrução por vezes encurtada como no passo 7. A coluna
resultado mostra o resultado da instrução, excepto se tratar de uma declaração, em que uma
ou mais variáveis ocupam a coluna seguinte disponível, ou uma atribuição, em que a
respectiva variável fica com o valor atribuído. Para poder-se escrever a linha de um
determinado passo, é suficiente a informação da linha do passo anterior. A pergunta "Qual o
valor de x?" não tem muito sentido, a não ser que se identifique o instante. No passo 3 ou no
final do programa? Uma variável tem um valor até que lhe seja atribuído outro. Vamos agora
resolver o mesmo problema, troca dos valores de duas variáveis, mas sem utilizar uma variável
auxiliar: 1 #include 2 3 int main() 4 { 5 /* declaração de duas variáveis inteiras */ 6 int x=3, y=7;
7 8 /* trocar o valor de x com y */ 9 x=x+y; 10 y=x-y; 11 x=x-y; 12 13 /* mostrar os valores em x
e em y */ 14 printf("x: %d, y: %d",x,y); 15 } Programa 2-2 Troca o valor de duas variáveis sem
variável auxiliar A diferença para o exemplo anterior é que não se declarou uma variável aux, e
declarou-se ambas as variáveis x e y num só comando. As atribuições utilizam agora
expressões com duas variáveis, incluindo a própria variável que está a ser atribuída. 2.
Variáveis 11 Embora este programa pareça confuso, o certo é que tem a mesma
funcionalidade que o anterior como se comprova de seguida, vendo a execução passo-a-passo.
No passo 2, o valor de x utilizado na expressão é o que existia antes do passo 2, o valor 3,
passando a ser o valor 10 após a execução do passo 2. Não há qualquer problema em colocar a
variável x de um lado e do outro de uma atribuição. A variável x à esquerda, significa que ficará
com o resultado da expressão, e a variável x à direita, significa que se deve utilizar o valor da
variável x antes desta instrução. Os tipos de dados utilizados podem não ser apenas variáveis
inteiras. Os tipos elementares da linguagem C são os seguintes: • char - um carácter, ou um
inteiro muito pequeno (guarda apenas 256 valores distintos) • short - inteiro pequeno (pouco
utilizado) • int - tipo standard para inteiros • long - inteiro longo • float - número real (pode
ter casas decimais) • double - número real com precisão dupla (igual ao float mas com mais
precisão) Pode-se nos tipos inteiros (char a long), anteceder com as palavras unsigned ou
signed, para indicar que o número inteiro tem ou não sinal. Se omitir, é considerado que têm
sinal. Pode-se também considerar o tipo long long para um inteiro muito longo3, ou o long
double, mas esses tipos nem sempre estão implementados. Quais os valores
máximos/mínimos que podemos atribuir às variáveis de cada tipo? Isso depende do espaço
reservado para cada tipo de variável, que por sua vez depende tanto do compilador, como do
computador em que o programa for compilado e executado. Para saber quanto espaço é
necessário para guardar cada variável, pode-se utilizar o operador sizeof. O resultado de
sizeof(int) retorna o número de bytes que uma variável do tipo inteiro ocupa na memória. 1
#include 2 3 int main() 4 { 5 printf("sizeof(int): %d",sizeof(int)); 6 } Programa 2-3 Imprime o
número de bytes que um inteiro ocupa Execução do programa: C:\>sizeofint sizeof(int): 4
Execute este programa para ver quantos bytes ocupa um inteiro no seu compilador e
computador. Para que os resultados sejam idênticos na resolução dos exercícios, é importante
que todos utilizem inteiros do mesmo tamanho. Se o resultado não for no seu caso 4,
experimente o sizeof(short) ou sizeof(long), e utilize o tipo que tiver tamanho 4 para todas as
variáveis inteiras nos exercícios das actividades formativas. As variáveis do tipo char e
float/double, não utilizam a mesma string de formatação no printf da que os inteiros. Para os
inteiros, utiliza-se o %d na string do primeiro argumento, mas esse 3 O tipo long long não faz
parte da norma inicial da linguagem C, actualmente a generalidade dos compiladores
implementa-o com um inteiro de 64 bits. A string de formatação varia: %I64d; %lld. PaA R T E I
– V A R I Á V E I S E E S T R U T U R A S D E C O N T R O L O Na Parte I são introduzidos os
primeiros conceitos de programação, existentes em todas as linguagens de programação
modernas. A leitura atenta e pausada é essencial para a compreensão destes conceitos que
embora aparentemente simples, a sua não compreensão tem consequências em todo o resto
do texto, mas que poderá detectar de imediato no final da Parte I ao não conseguir resolver
alguns dos exercícios propostos. Após a realização desta parte, fica com as bases para
programar em qualquer linguagem de programação simples, para implementação de
pequenas funcionalidades, como Javascript para adicionar dinamismo a uma página Web, VBA
para programar macros no Microsoft Excel, ou Linguagem R para realizar cálculos esta 1.
Primeiro Programa 7 1. PRIMEIRO PROGRAMA Um programa é uma sequência de instruções,
dirigidas a um computador, para que este execute uma determinada função pretendida. A
actividade de programar consiste na elaboração dessa sequência de instruções numa
determinada linguagem de programação, que satisfaz o que é pretendido. A linguagem de
programação tem que seguir uma sintaxe rígida, de forma a poder ser convertida em
instruções que o computador possa compreender, mas por outro lado deve ser facilmente
escrita e lida por uma pessoa. Há diferentes linguagens de programação, utilizaremos a
linguagem C, no entanto não será a sintaxe da linguagem o mais relevante a aprender, mas sim
competências que são independentes da linguagem. A linguagem C é uma linguagem
imperativa, cada instrução é uma ordem para o computador. Existem outros paradigmas de
programação, mas fora do âmbito deste texto. Manda a tradição que o primeiro programa a
desenvolver numa linguagem, seja o olá mundo. Não a vamos quebrar, este é o programa mais
curto possível, apenas escreve um texto e termina. 1 #include 2 3 int main() 4 { 5 printf("Ola
Mundo!"); 6 } Programa 1-1 Olá Mundo O programa acima está escrito em linguagem C, e
pode ser executado pelo computador. No entanto o computador não entende directamente a
linguagem C, apenas ficheiros executáveis (no Windows com extensão exe). No entanto,
através de um programa chamado de Compilador, podemos converter o código C acima num
executável. Esse executável contém já instruções em código máquina, cujo computador pode
executar. Vamos ver em que consiste o código acima: • Existe numeração das linhas e cores,
que são apenas para nossa conveniência. A numeração das linhas não faz parte do ficheiro C, e
as cores são colocadas pelo editor. Um programa em C é um ficheiro de texto plano, com a
extensão .c e pode ser editado num editor de texto plano como o Notepad, sem qualquer cor
ou numeração das linhas. • Linha 1: começa por um # (cardinal), pelo que esta linha é uma
instrução não para o computador mas sim para o compilador. Essas instruções chamam-se de
comandos de préprocessamento, dado que são executadas antes do processamento. • O
comando #include instrui o compilador a incluir o ficheiro indicado de seguida. Esse ficheiro é
uma biblioteca standard do C (existe em todos os compiladores de C), stdio.h, e consiste na
declaração de funções de entrada e saída. Estas funções podem ser utilizadas de seguida no
programa, sendo utilizada neste caso a função printf. • Linha 2: esta linha não tem nada.
Podem existir quantas linhas em branco o programador quiser, o compilador não ficará
atrapalhado, nem fará nada com elas, mas tal pode ser útil 8 Parte I – Variáveis e Estruturas de
Controlo para espaçar os comandos e tornar mais legível o programa. O mesmo é válido para
os espaços ou tabs numa linha de código, como por exemplo os espaços da linha 5 que
antecedem o printf. • Linha 3: começa a implementação da função main. O programa começa
sempre na função main. Para já, vamos deixar por explicar o int, e os parênteses vazios.
Realçar que as instruções que dizem respeito à função main, e portanto ao que o programa
tem de fazer, estão limitadas por duas chavetas a abrir na linha 4 e a fechar na linha 6. Todas
as instruções entre estas chavetas, pertencem à função main. • Linha 5: nesta linha está a
única instrução. Existe uma chamada à função printf, e sabemos que é uma função porque
após o seu nome tem uns parênteses a abrir. Dentro dos parênteses colocam-se os
argumentos a passar à função. Neste caso colocamos o texto que queremos imprimir: "Ola
mundo!". O texto coloca-se entre aspas, para não se confundir com instruções. Se não o fez já,
crie e execute o programa acima. Veja as instruções para instalar um compilador no anexo
“Compilador e Editor de C”. É tudo. Acabou de dar o primeiro passo no mundo da
programação, editou e compilou o primeiro programa. Houve conceitos referidos aqui que não
compreende agora completamente: bi 2. Variáveis 9 2. VARIÁVEIS Uma variável num programa
é uma entidade que tem um valor a cada instante, podendo esse valor ao longo do programa
ser utilizado e/ou alterado. É nas variáveis que se guarda a informação necessária para realizar
a função pretendida pelo programa. Podem existir quantas variáveis forem necessárias, mas
cada uma utiliza memória do computador. O programa seguinte tem por objectivo trocar o
valor de duas variáveis: 1 #include 2 3 int main() 4 { 5 /* declaração de três variáveis inteiras */
6 int x=3; 7 int y=7; 8 int aux; 9 10 /* trocar o valor de x com y */ 11 aux=x; 12 x=y; 13 y=aux;
14 15 /* mostrar os valores em x e em y */ 16 printf("x: %d, y: %d",x,y); 17 } Programa 2-1
Troca o valor de duas variáveis Comentários: • Este programa tem uma estrutura inicial
idêntica ao Programa 1-1, nomeadamente nas linhas 1 a 4, e linha 17. • A linha 5, 10 e 15 têm
comentários ao código. Os comentários são todo o texto entre /* e */, sendo ignorados pelo
compilador. O objectivo é que seja possível ao programador colocar texto explicativo de partes
mais complexas do programa, não para que o compilador o melhor entenda, mas para que um
outro programador que leia o código, ou o próprio programador mais tarde, compreenda mais
facilmente o código. Os comentários ficam a cor verde, dado que o editor identifica que o
conteúdo dessas linhas será ignorado pelo compilador1. • Nas linhas 6 a 8, estão declaradas as
variáveis x, y e aux. As variáveis x e y são não só criadas, como também inicializadas. Ao
ficarem com um valor inicial, podem desde já ser utilizadas. Na linguagem C, todas as variáveis
utilizadas têm de ser declaradas no início da função2. • Nas linhas 11 a 13, estão comandos
que são atribuições. Numa atribuição, coloca-se uma variável do lado esquerdo da igualdade, e
uma expressão do lado direito. Neste caso, todas as atribuições têm expressões com uma só
variável. 1 A linguagem C++ tem os comentários até ao final da linha, após duas barras: “//”. A
maior parte dos compiladores de C também permite este tipo de comentários. 2 A linguagem
C++ bem como a generalidade dos compiladores de C permitem a declaração fora do início das
funções, mas pelos motivos referidos no erro “Declaração de variáveis fora do início das
funções”, do anexo “Erros Comuns” esta restrição será mantida. 10 Parte I – Variáveis e
Estruturas de Controlo • Na linha 16, é mostrado o valor das variáveis. Notar que a função
printf tem 3 argumentos separados por vírgulas. O primeiro é uma string, em que começa com
aspas e acaba nas aspas seguintes, o segundo uma expressão com a variável x, seguido de uma
expressão com a variável y. Na string existem dois %d. Em cada %d o printf em vez de mostrar
no ecrã %d coloca o valor da variável seguinte na sua lista de argumentos. No primeiro %d vai
colocar x, e no segundo %d vai colocar o y. • Notar que cada instrução acaba com um ponto e
vírgula, sendo esta uma característica do C. Execução do programa: C:\>troca x: 7, y: 3 Os
valores estão correctamente trocados, mas vamos ver com mais detalhe qual o valor das
variáveis a cada momento, na execução passo-a-passo, à direita. A execução passo-a-passo
tem em cada linha da tabela um passo. Em cada passo é indicada a linha de código
correspondente, e a respectiva instrução por vezes encurtada como no passo 7. A coluna
resultado mostra o resultado da instrução, excepto se tratar de uma declaração, em que uma
ou mais variáveis ocupam a coluna seguinte disponível, ou uma atribuição, em que a
respectiva variável fica com o valor atribuído. Para poder-se escrever a linha de um
determinado passo, é suficiente a informação da linha do passo anterior. A pergunta "Qual o
valor de x?" não tem muito sentido, a não ser que se identifique o instante. No passo 3 ou no
final do programa? Uma variável tem um valor até que lhe seja atribuído outro. Vamos agora
resolver o mesmo problema, troca dos valores de duas variáveis, mas sem utilizar uma variável
auxiliar: 1 #include 2 3 int main() 4 { 5 /* declaração de duas variáveis inteiras */ 6 int x=3, y=7;
7 8 /* trocar o valor de x com y */ 9 x=x+y; 10 y=x-y; 11 x=x-y; 12 13 /* mostrar os valores em x
e em y */ 14 printf("x: %d, y: %d",x,y); 15 } Programa 2-2 Troca o valor de duas variáveis sem
variável auxiliar A diferença para o exemplo anterior é que não se declarou uma variável aux, e
declarou-se ambas as variáveis x e y num só comando. As atribuições utilizam agora
expressões com duas variáveis, incluindo a própria variável que está a ser atribuída. 2.
Variáveis 11 Embora este programa pareça confuso, o certo é que tem a mesma
funcionalidade que o anterior como se comprova de seguida, vendo a execução passo-a-passo.
No passo 2, o valor de x utilizado na expressão é o que existia antes do passo 2, o valor 3,
passando a ser o valor 10 após a execução do passo 2. Não há qualquer problema em colocar a
variável x de um lado e do outro de uma atribuição. A variável x à esquerda, significa que ficará
com o resultado da expressão, e a variável x à direita, significa que se deve utilizar o valor da
variável x antes desta instrução. Os tipos de dados utilizados podem não ser apenas variáveis
inteiras. Os tipos elementares da linguagem C são os seguintes: • char - um carácter, ou um
inteiro muito pequeno (guarda apenas 256 valores distintos) • short - inteiro pequeno (pouco
utilizado) • int - tipo standard para inteiros • long - inteiro longo • float - número real (pode
ter casas decimais) • double - número real com precisão dupla (igual ao float mas com mais
precisão) Pode-se nos tipos inteiros (char a long), anteceder com as palavras unsigned ou
signed, para indicar que o número inteiro tem ou não sinal. Se omitir, é considerado que têm
sinal. Pode-se também considerar o tipo long long para um inteiro muito longo3, ou o long
double, mas esses tipos nem sempre estão implementados. Quais os valores
máximos/mínimos que podemos atribuir às variáveis de cada tipo? Isso depende do espaço
reservado para cada tipo de variável, que por sua vez depende tanto do compilador, como do
computador em que o programa for compilado e executado. Para saber quanto espaço é
necessário para guardar cada variável, pode-se utilizar o operador sizeof. O resultado de
sizeof(int) retorna o número de bytes que uma variável do tipo inteiro ocupa na memória. 1
#include 2 3 int main() 4 { 5 printf("sizeof(int): %d",sizeof(int)); 6 } Programa 2-3 Imprime o
número de bytes que um inteiro ocupa Execução do programa: C:\>sizeofint sizeof(int): 4
Execute este programa para ver quantos bytes ocupa um inteiro no seu compilador e
computador. Para que os resultados sejam idênticos na resolução dos exercícios, é importante
que todos utilizem inteiros do mesmo tamanho. Se o resultado não for no seu caso 4,
experimente o sizeof(short) ou sizeof(long), e utilize o tipo que tiver tamanho 4 para todas as
variáveis inteiras nos exercícios das actividades formativas. As variáveis do tipo char e
float/double, não utilizam a mesma string de formatação no printf da que os inteiros. Para os
inteiros, utiliza-se o %d na string do primeiro argumento, mas esse 3 O tipo long long não faz
parte da norma inicial da linguagem C, actualmente a generalidade dos compiladores
implementa-o com um inteiro de 64 bits. A string de formatação varia: %I64d; %lld. PaA R T E I
– V A R I Á V E I S E E S T R U T U R A S D E C O N T R O L O Na Parte I são introduzidos os
primeiros conceitos de programação, existentes em todas as linguagens de programação
modernas. A leitura atenta e pausada é essencial para a compreensão destes conceitos que
embora aparentemente simples, a sua não compreensão tem consequências em todo o resto
do texto, mas que poderá detectar de imediato no final da Parte I ao não conseguir resolver
alguns dos exercícios propostos. Após a realização desta parte, fica com as bases para
programar em qualquer linguagem de programação simples, para implementação de
pequenas funcionalidades, como Javascript para adicionar dinamismo a uma página Web, VBA
para programar macros no Microsoft Excel, ou Linguagem R para realizar cálculos esta 1.
Primeiro Programa 7 1. PRIMEIRO PROGRAMA Um programa é uma sequência de instruções,
dirigidas a um computador, para que este execute uma determinada função pretendida. A
actividade de programar consiste na elaboração dessa sequência de instruções numa
determinada linguagem de programação, que satisfaz o que é pretendido. A linguagem de
programação tem que seguir uma sintaxe rígida, de forma a poder ser convertida em
instruções que o computador possa compreender, mas por outro lado deve ser facilmente
escrita e lida por uma pessoa. Há diferentes linguagens de programação, utilizaremos a
linguagem C, no entanto não será a sintaxe da linguagem o mais relevante a aprender, mas sim
competências que são independentes da linguagem. A linguagem C é uma linguagem
imperativa, cada instrução é uma ordem para o computador. Existem outros paradigmas de
programação, mas fora do âmbito deste texto. Manda a tradição que o primeiro programa a
desenvolver numa linguagem, seja o olá mundo. Não a vamos quebrar, este é o programa mais
curto possível, apenas escreve um texto e termina. 1 #include 2 3 int main() 4 { 5 printf("Ola
Mundo!"); 6 } Programa 1-1 Olá Mundo O programa acima está escrito em linguagem C, e
pode ser executado pelo computador. No entanto o computador não entende directamente a
linguagem C, apenas ficheiros executáveis (no Windows com extensão exe). No entanto,
através de um programa chamado de Compilador, podemos converter o código C acima num
executável. Esse executável contém já instruções em código máquina, cujo computador pode
executar. Vamos ver em que consiste o código acima: • Existe numeração das linhas e cores,
que são apenas para nossa conveniência. A numeração das linhas não faz parte do ficheiro C, e
as cores são colocadas pelo editor. Um programa em C é um ficheiro de texto plano, com a
extensão .c e pode ser editado num editor de texto plano como o Notepad, sem qualquer cor
ou numeração das linhas. • Linha 1: começa por um # (cardinal), pelo que esta linha é uma
instrução não para o computador mas sim para o compilador. Essas instruções chamam-se de
comandos de préprocessamento, dado que são executadas antes do processamento. • O
comando #include instrui o compilador a incluir o ficheiro indicado de seguida. Esse ficheiro é
uma biblioteca standard do C (existe em todos os compiladores de C), stdio.h, e consiste na
declaração de funções de entrada e saída. Estas funções podem ser utilizadas de seguida no
programa, sendo utilizada neste caso a função printf. • Linha 2: esta linha não tem nada.
Podem existir quantas linhas em branco o programador quiser, o compilador não ficará
atrapalhado, nem fará nada com elas, mas tal pode ser útil 8 Parte I – Variáveis e Estruturas de
Controlo para espaçar os comandos e tornar mais legível o programa. O mesmo é válido para
os espaços ou tabs numa linha de código, como por exemplo os espaços da linha 5 que
antecedem o printf. • Linha 3: começa a implementação da função main. O programa começa
sempre na função main. Para já, vamos deixar por explicar o int, e os parênteses vazios.
Realçar que as instruções que dizem respeito à função main, e portanto ao que o programa
tem de fazer, estão limitadas por duas chavetas a abrir na linha 4 e a fechar na linha 6. Todas
as instruções entre estas chavetas, pertencem à função main. • Linha 5: nesta linha está a
única instrução. Existe uma chamada à função printf, e sabemos que é uma função porque
após o seu nome tem uns parênteses a abrir. Dentro dos parênteses colocam-se os
argumentos a passar à função. Neste caso colocamos o texto que queremos imprimir: "Ola
mundo!". O texto coloca-se entre aspas, para não se confundir com instruções. Se não o fez já,
crie e execute o programa acima. Veja as instruções para instalar um compilador no anexo
“Compilador e Editor de C”. É tudo. Acabou de dar o primeiro passo no mundo da
programação, editou e compilou o primeiro programa. Houve conceitos referidos aqui que não
compreende agora completamente: bi 2. Variáveis 9 2. VARIÁVEIS Uma variável num programa
é uma entidade que tem um valor a cada instante, podendo esse valor ao longo do programa
ser utilizado e/ou alterado. É nas variáveis que se guarda a informação necessária para realizar
a função pretendida pelo programa. Podem existir quantas variáveis forem necessárias, mas
cada uma utiliza memória do computador. O programa seguinte tem por objectivo trocar o
valor de duas variáveis: 1 #include 2 3 int main() 4 { 5 /* declaração de três variáveis inteiras */
6 int x=3; 7 int y=7; 8 int aux; 9 10 /* trocar o valor de x com y */ 11 aux=x; 12 x=y; 13 y=aux;
14 15 /* mostrar os valores em x e em y */ 16 printf("x: %d, y: %d",x,y); 17 } Programa 2-1
Troca o valor de duas variáveis Comentários: • Este programa tem uma estrutura inicial
idêntica ao Programa 1-1, nomeadamente nas linhas 1 a 4, e linha 17. • A linha 5, 10 e 15 têm
comentários ao código. Os comentários são todo o texto entre /* e */, sendo ignorados pelo
compilador. O objectivo é que seja possível ao programador colocar texto explicativo de partes
mais complexas do programa, não para que o compilador o melhor entenda, mas para que um
outro programador que leia o código, ou o próprio programador mais tarde, compreenda mais
facilmente o código. Os comentários ficam a cor verde, dado que o editor identifica que o
conteúdo dessas linhas será ignorado pelo compilador1. • Nas linhas 6 a 8, estão declaradas as
variáveis x, y e aux. As variáveis x e y são não só criadas, como também inicializadas. Ao
ficarem com um valor inicial, podem desde já ser utilizadas. Na linguagem C, todas as variáveis
utilizadas têm de ser declaradas no início da função2. • Nas linhas 11 a 13, estão comandos
que são atribuições. Numa atribuição, coloca-se uma variável do lado esquerdo da igualdade, e
uma expressão do lado direito. Neste caso, todas as atribuições têm expressões com uma só
variável. 1 A linguagem C++ tem os comentários até ao final da linha, após duas barras: “//”. A
maior parte dos compiladores de C também permite este tipo de comentários. 2 A linguagem
C++ bem como a generalidade dos compiladores de C permitem a declaração fora do início das
funções, mas pelos motivos referidos no erro “Declaração de variáveis fora do início das
funções”, do anexo “Erros Comuns” esta restrição será mantida. 10 Parte I – Variáveis e
Estruturas de Controlo • Na linha 16, é mostrado o valor das variáveis. Notar que a função
printf tem 3 argumentos separados por vírgulas. O primeiro é uma string, em que começa com
aspas e acaba nas aspas seguintes, o segundo uma expressão com a variável x, seguido de uma
expressão com a variável y. Na string existem dois %d. Em cada %d o printf em vez de mostrar
no ecrã %d coloca o valor da variável seguinte na sua lista de argumentos. No primeiro %d vai
colocar x, e no segundo %d vai colocar o y. • Notar que cada instrução acaba com um ponto e
vírgula, sendo esta uma característica do C. Execução do programa: C:\>troca x: 7, y: 3 Os
valores estão correctamente trocados, mas vamos ver com mais detalhe qual o valor das
variáveis a cada momento, na execução passo-a-passo, à direita. A execução passo-a-passo
tem em cada linha da tabela um passo. Em cada passo é indicada a linha de código
correspondente, e a respectiva instrução por vezes encurtada como no passo 7. A coluna
resultado mostra o resultado da instrução, excepto se tratar de uma declaração, em que uma
ou mais variáveis ocupam a coluna seguinte disponível, ou uma atribuição, em que a
respectiva variável fica com o valor atribuído. Para poder-se escrever a linha de um
determinado passo, é suficiente a informação da linha do passo anterior. A pergunta "Qual o
valor de x?" não tem muito sentido, a não ser que se identifique o instante. No passo 3 ou no
final do programa? Uma variável tem um valor até que lhe seja atribuído outro. Vamos agora
resolver o mesmo problema, troca dos valores de duas variáveis, mas sem utilizar uma variável
auxiliar: 1 #include 2 3 int main() 4 { 5 /* declaração de duas variáveis inteiras */ 6 int x=3, y=7;
7 8 /* trocar o valor de x com y */ 9 x=x+y; 10 y=x-y; 11 x=x-y; 12 13 /* mostrar os valores em x
e em y */ 14 printf("x: %d, y: %d",x,y); 15 } Programa 2-2 Troca o valor de duas variáveis sem
variável auxiliar A diferença para o exemplo anterior é que não se declarou uma variável aux, e
declarou-se ambas as variáveis x e y num só comando. As atribuições utilizam agora
expressões com duas variáveis, incluindo a própria variável que está a ser atribuída. 2.
Variáveis 11 Embora este programa pareça confuso, o certo é que tem a mesma
funcionalidade que o anterior como se comprova de seguida, vendo a execução passo-a-passo.
No passo 2, o valor de x utilizado na expressão é o que existia antes do passo 2, o valor 3,
passando a ser o valor 10 após a execução do passo 2. Não há qualquer problema em colocar a
variável x de um lado e do outro de uma atribuição. A variável x à esquerda, significa que ficará
com o resultado da expressão, e a variável x à direita, significa que se deve utilizar o valor da
variável x antes desta instrução. Os tipos de dados utilizados podem não ser apenas variáveis
inteiras. Os tipos elementares da linguagem C são os seguintes: • char - um carácter, ou um
inteiro muito pequeno (guarda apenas 256 valores distintos) • short - inteiro pequeno (pouco
utilizado) • int - tipo standard para inteiros • long - inteiro longo • float - número real (pode
ter casas decimais) • double - número real com precisão dupla (igual ao float mas com mais
precisão) Pode-se nos tipos inteiros (char a long), anteceder com as palavras unsigned ou
signed, para indicar que o número inteiro tem ou não sinal. Se omitir, é considerado que têm
sinal. Pode-se também considerar o tipo long long para um inteiro muito longo3, ou o long
double, mas esses tipos nem sempre estão implementados. Quais os valores
máximos/mínimos que podemos atribuir às variáveis de cada tipo? Isso depende do espaço
reservado para cada tipo de variável, que por sua vez depende tanto do compilador, como do
computador em que o programa for compilado e executado. Para saber quanto espaço é
necessário para guardar cada variável, pode-se utilizar o operador sizeof. O resultado de
sizeof(int) retorna o número de bytes que uma variável do tipo inteiro ocupa na memória. 1
#include 2 3 int main() 4 { 5 printf("sizeof(int): %d",sizeof(int)); 6 } Programa 2-3 Imprime o
número de bytes que um inteiro ocupa Execução do programa: C:\>sizeofint sizeof(int): 4
Execute este programa para ver quantos bytes ocupa um inteiro no seu compilador e
computador. Para que os resultados sejam idênticos na resolução dos exercícios, é importante
que todos utilizem inteiros do mesmo tamanho. Se o resultado não for no seu caso 4,
experimente o sizeof(short) ou sizeof(long), e utilize o tipo que tiver tamanho 4 para todas as
variáveis inteiras nos exercícios das actividades formativas. As variáveis do tipo char e
float/double, não utilizam a mesma string de formatação no printf da que os inteiros. Para os
inteiros, utiliza-se o %d na string do primeiro argumento, mas esse 3 O tipo long long não faz
parte da norma inicial da linguagem C, actualmente a generalidade dos compiladores
implementa-o com um inteiro de 64 bits. A string de formatação varia: %I64d; %lld. PaA R T E I
– V A R I Á V E I S E E S T R U T U R A S D E C O N T R O L O Na Parte I são introduzidos os
primeiros conceitos de programação, existentes em todas as linguagens de programação
modernas. A leitura atenta e pausada é essencial para a compreensão destes conceitos que
embora aparentemente simples, a sua não compreensão tem consequências em todo o resto
do texto, mas que poderá detectar de imediato no final da Parte I ao não conseguir resolver
alguns dos exercícios propostos. Após a realização desta parte, fica com as bases para
programar em qualquer linguagem de programação simples, para implementação de
pequenas funcionalidades, como Javascript para adicionar dinamismo a uma página Web, VBA
para programar macros no Microsoft Excel, ou Linguagem R para realizar cálculos esta 1.
Primeiro Programa 7 1. PRIMEIRO PROGRAMA Um programa é uma sequência de instruções,
dirigidas a um computador, para que este execute uma determinada função pretendida. A
actividade de programar consiste na elaboração dessa sequência de instruções numa
determinada linguagem de programação, que satisfaz o que é pretendido. A linguagem de
programação tem que seguir uma sintaxe rígida, de forma a poder ser convertida em
instruções que o computador possa compreender, mas por outro lado deve ser facilmente
escrita e lida por uma pessoa. Há diferentes linguagens de programação, utilizaremos a
linguagem C, no entanto não será a sintaxe da linguagem o mais relevante a aprender, mas sim
competências que são independentes da linguagem. A linguagem C é uma linguagem
imperativa, cada instrução é uma ordem para o computador. Existem outros paradigmas de
programação, mas fora do âmbito deste texto. Manda a tradição que o primeiro programa a
desenvolver numa linguagem, seja o olá mundo. Não a vamos quebrar, este é o programa mais
curto possível, apenas escreve um texto e termina. 1 #include 2 3 int main() 4 { 5 printf("Ola
Mundo!"); 6 } Programa 1-1 Olá Mundo O programa acima está escrito em linguagem C, e
pode ser executado pelo computador. No entanto o computador não entende directamente a
linguagem C, apenas ficheiros executáveis (no Windows com extensão exe). No entanto,
através de um programa chamado de Compilador, podemos converter o código C acima num
executável. Esse executável contém já instruções em código máquina, cujo computador pode
executar. Vamos ver em que consiste o código acima: • Existe numeração das linhas e cores,
que são apenas para nossa conveniência. A numeração das linhas não faz parte do ficheiro C, e
as cores são colocadas pelo editor. Um programa em C é um ficheiro de texto plano, com a
extensão .c e pode ser editado num editor de texto plano como o Notepad, sem qualquer cor
ou numeração das linhas. • Linha 1: começa por um # (cardinal), pelo que esta linha é uma
instrução não para o computador mas sim para o compilador. Essas instruções chamam-se de
comandos de préprocessamento, dado que são executadas antes do processamento. • O
comando #include instrui o compilador a incluir o ficheiro indicado de seguida. Esse ficheiro é
uma biblioteca standard do C (existe em todos os compiladores de C), stdio.h, e consiste na
declaração de funções de entrada e saída. Estas funções podem ser utilizadas de seguida no
programa, sendo utilizada neste caso a função printf. • Linha 2: esta linha não tem nada.
Podem existir quantas linhas em branco o programador quiser, o compilador não ficará
atrapalhado, nem fará nada com elas, mas tal pode ser útil 8 Parte I – Variáveis e Estruturas de
Controlo para espaçar os comandos e tornar mais legível o programa. O mesmo é válido para
os espaços ou tabs numa linha de código, como por exemplo os espaços da linha 5 que
antecedem o printf. • Linha 3: começa a implementação da função main. O programa começa
sempre na função main. Para já, vamos deixar por explicar o int, e os parênteses vazios.
Realçar que as instruções que dizem respeito à função main, e portanto ao que o programa
tem de fazer, estão limitadas por duas chavetas a abrir na linha 4 e a fechar na linha 6. Todas
as instruções entre estas chavetas, pertencem à função main. • Linha 5: nesta linha está a
única instrução. Existe uma chamada à função printf, e sabemos que é uma função porque
após o seu nome tem uns parênteses a abrir. Dentro dos parênteses colocam-se os
argumentos a passar à função. Neste caso colocamos o texto que queremos imprimir: "Ola
mundo!". O texto coloca-se entre aspas, para não se confundir com instruções. Se não o fez já,
crie e execute o programa acima. Veja as instruções para instalar um compilador no anexo
“Compilador e Editor de C”. É tudo. Acabou de dar o primeiro passo no mundo da
programação, editou e compilou o primeiro programa. Houve conceitos referidos aqui que não
compreende agora completamente: bi 2. Variáveis 9 2. VARIÁVEIS Uma variável num programa
é uma entidade que tem um valor a cada instante, podendo esse valor ao longo do programa
ser utilizado e/ou alterado. É nas variáveis que se guarda a informação necessária para realizar
a função pretendida pelo programa. Podem existir quantas variáveis forem necessárias, mas
cada uma utiliza memória do computador. O programa seguinte tem por objectivo trocar o
valor de duas variáveis: 1 #include 2 3 int main() 4 { 5 /* declaração de três variáveis inteiras */
6 int x=3; 7 int y=7; 8 int aux; 9 10 /* trocar o valor de x com y */ 11 aux=x; 12 x=y; 13 y=aux;
14 15 /* mostrar os valores em x e em y */ 16 printf("x: %d, y: %d",x,y); 17 } Programa 2-1
Troca o valor de duas variáveis Comentários: • Este programa tem uma estrutura inicial
idêntica ao Programa 1-1, nomeadamente nas linhas 1 a 4, e linha 17. • A linha 5, 10 e 15 têm
comentários ao código. Os comentários são todo o texto entre /* e */, sendo ignorados pelo
compilador. O objectivo é que seja possível ao programador colocar texto explicativo de partes
mais complexas do programa, não para que o compilador o melhor entenda, mas para que um
outro programador que leia o código, ou o próprio programador mais tarde, compreenda mais
facilmente o código. Os comentários ficam a cor verde, dado que o editor identifica que o
conteúdo dessas linhas será ignorado pelo compilador1. • Nas linhas 6 a 8, estão declaradas as
variáveis x, y e aux. As variáveis x e y são não só criadas, como também inicializadas. Ao
ficarem com um valor inicial, podem desde já ser utilizadas. Na linguagem C, todas as variáveis
utilizadas têm de ser declaradas no início da função2. • Nas linhas 11 a 13, estão comandos
que são atribuições. Numa atribuição, coloca-se uma variável do lado esquerdo da igualdade, e
uma expressão do lado direito. Neste caso, todas as atribuições têm expressões com uma só
variável. 1 A linguagem C++ tem os comentários até ao final da linha, após duas barras: “//”. A
maior parte dos compiladores de C também permite este tipo de comentários. 2 A linguagem
C++ bem como a generalidade dos compiladores de C permitem a declaração fora do início das
funções, mas pelos motivos referidos no erro “Declaração de variáveis fora do início das
funções”, do anexo “Erros Comuns” esta restrição será mantida. 10 Parte I – Variáveis e
Estruturas de Controlo • Na linha 16, é mostrado o valor das variáveis. Notar que a função
printf tem 3 argumentos separados por vírgulas. O primeiro é uma string, em que começa com
aspas e acaba nas aspas seguintes, o segundo uma expressão com a variável x, seguido de uma
expressão com a variável y. Na string existem dois %d. Em cada %d o printf em vez de mostrar
no ecrã %d coloca o valor da variável seguinte na sua lista de argumentos. No primeiro %d vai
colocar x, e no segundo %d vai colocar o y. • Notar que cada instrução acaba com um ponto e
vírgula, sendo esta uma característica do C. Execução do programa: C:\>troca x: 7, y: 3 Os
valores estão correctamente trocados, mas vamos ver com mais detalhe qual o valor das
variáveis a cada momento, na execução passo-a-passo, à direita. A execução passo-a-passo
tem em cada linha da tabela um passo. Em cada passo é indicada a linha de código
correspondente, e a respectiva instrução por vezes encurtada como no passo 7. A coluna
resultado mostra o resultado da instrução, excepto se tratar de uma declaração, em que uma
ou mais variáveis ocupam a coluna seguinte disponível, ou uma atribuição, em que a
respectiva variável fica com o valor atribuído. Para poder-se escrever a linha de um
determinado passo, é suficiente a informação da linha do passo anterior. A pergunta "Qual o
valor de x?" não tem muito sentido, a não ser que se identifique o instante. No passo 3 ou no
final do programa? Uma variável tem um valor até que lhe seja atribuído outro. Vamos agora
resolver o mesmo problema, troca dos valores de duas variáveis, mas sem utilizar uma variável
auxiliar: 1 #include 2 3 int main() 4 { 5 /* declaração de duas variáveis inteiras */ 6 int x=3, y=7;
7 8 /* trocar o valor de x com y */ 9 x=x+y; 10 y=x-y; 11 x=x-y; 12 13 /* mostrar os valores em x
e em y */ 14 printf("x: %d, y: %d",x,y); 15 } Programa 2-2 Troca o valor de duas variáveis sem
variável auxiliar A diferença para o exemplo anterior é que não se declarou uma variável aux, e
declarou-se ambas as variáveis x e y num só comando. As atribuições utilizam agora
expressões com duas variáveis, incluindo a própria variável que está a ser atribuída. 2.
Variáveis 11 Embora este programa pareça confuso, o certo é que tem a mesma
funcionalidade que o anterior como se comprova de seguida, vendo a execução passo-a-passo.
No passo 2, o valor de x utilizado na expressão é o que existia antes do passo 2, o valor 3,
passando a ser o valor 10 após a execução do passo 2. Não há qualquer problema em colocar a
variável x de um lado e do outro de uma atribuição. A variável x à esquerda, significa que ficará
com o resultado da expressão, e a variável x à direita, significa que se deve utilizar o valor da
variável x antes desta instrução. Os tipos de dados utilizados podem não ser apenas variáveis
inteiras. Os tipos elementares da linguagem C são os seguintes: • char - um carácter, ou um
inteiro muito pequeno (guarda apenas 256 valores distintos) • short - inteiro pequeno (pouco
utilizado) • int - tipo standard para inteiros • long - inteiro longo • float - número real (pode
ter casas decimais) • double - número real com precisão dupla (igual ao float mas com mais
precisão) Pode-se nos tipos inteiros (char a long), anteceder com as palavras unsigned ou
signed, para indicar que o número inteiro tem ou não sinal. Se omitir, é considerado que têm
sinal. Pode-se também considerar o tipo long long para um inteiro muito longo3, ou o long
double, mas esses tipos nem sempre estão implementados. Quais os valores
máximos/mínimos que podemos atribuir às variáveis de cada tipo? Isso depende do espaço
reservado para cada tipo de variável, que por sua vez depende tanto do compilador, como do
computador em que o programa for compilado e executado. Para saber quanto espaço é
necessário para guardar cada variável, pode-se utilizar o operador sizeof. O resultado de
sizeof(int) retorna o número de bytes que uma variável do tipo inteiro ocupa na memória. 1
#include 2 3 int main() 4 { 5 printf("sizeof(int): %d",sizeof(int)); 6 } Programa 2-3 Imprime o
número de bytes que um inteiro ocupa Execução do programa: C:\>sizeofint sizeof(int): 4
Execute este programa para ver quantos bytes ocupa um inteiro no seu compilador e
computador. Para que os resultados sejam idênticos na resolução dos exercícios, é importante
que todos utilizem inteiros do mesmo tamanho. Se o resultado não for no seu caso 4,
experimente o sizeof(short) ou sizeof(long), e utilize o tipo que tiver tamanho 4 para todas as
variáveis inteiras nos exercícios das actividades formativas. As variáveis do tipo char e
float/double, não utilizam a mesma string de formatação no printf da que os inteiros. Para os
inteiros, utiliza-se o %d na string do primeiro argumento, mas esse 3 O tipo long long não faz
parte da norma inicial da linguagem C, actualmente a generalidade dos compiladores
implementa-o com um inteiro de 64 bits. A string de formatação varia: %I64d; %lld. PaA R T E I
– V A R I Á V E I S E E S T R U T U R A S D E C O N T R O L O Na Parte I são introduzidos os
primeiros conceitos de programação, existentes em todas as linguagens de programação
modernas. A leitura atenta e pausada é essencial para a compreensão destes conceitos que
embora aparentemente simples, a sua não compreensão tem consequências em todo o resto
do texto, mas que poderá detectar de imediato no final da Parte I ao não conseguir resolver
alguns dos exercícios propostos. Após a realização desta parte, fica com as bases para
programar em qualquer linguagem de programação simples, para implementação de
pequenas funcionalidades, como Javascript para adicionar dinamismo a uma página Web, VBA
para programar macros no Microsoft Excel, ou Linguagem R para realizar cálculos esta 1.
Primeiro Programa 7 1. PRIMEIRO PROGRAMA Um programa é uma sequência de instruções,
dirigidas a um computador, para que este execute uma determinada função pretendida. A
actividade de programar consiste na elaboração dessa sequência de instruções numa
determinada linguagem de programação, que satisfaz o que é pretendido. A linguagem de
programação tem que seguir uma sintaxe rígida, de forma a poder ser convertida em
instruções que o computador possa compreender, mas por outro lado deve ser facilmente
escrita e lida por uma pessoa. Há diferentes linguagens de programação, utilizaremos a
linguagem C, no entanto não será a sintaxe da linguagem o mais relevante a aprender, mas sim
competências que são independentes da linguagem. A linguagem C é uma linguagem
imperativa, cada instrução é uma ordem para o computador. Existem outros paradigmas de
programação, mas fora do âmbito deste texto. Manda a tradição que o primeiro programa a
desenvolver numa linguagem, seja o olá mundo. Não a vamos quebrar, este é o programa mais
curto possível, apenas escreve um texto e termina. 1 #include 2 3 int main() 4 { 5 printf("Ola
Mundo!"); 6 } Programa 1-1 Olá Mundo O programa acima está escrito em linguagem C, e
pode ser executado pelo computador. No entanto o computador não entende directamente a
linguagem C, apenas ficheiros executáveis (no Windows com extensão exe). No entanto,
através de um programa chamado de Compilador, podemos converter o código C acima num
executável. Esse executável contém já instruções em código máquina, cujo computador pode
executar. Vamos ver em que consiste o código acima: • Existe numeração das linhas e cores,
que são apenas para nossa conveniência. A numeração das linhas não faz parte do ficheiro C, e
as cores são colocadas pelo editor. Um programa em C é um ficheiro de texto plano, com a
extensão .c e pode ser editado num editor de texto plano como o Notepad, sem qualquer cor
ou numeração das linhas. • Linha 1: começa por um # (cardinal), pelo que esta linha é uma
instrução não para o computador mas sim para o compilador. Essas instruções chamam-se de
comandos de préprocessamento, dado que são executadas antes do processamento. • O
comando #include instrui o compilador a incluir o ficheiro indicado de seguida. Esse ficheiro é
uma biblioteca standard do C (existe em todos os compiladores de C), stdio.h, e consiste na
declaração de funções de entrada e saída. Estas funções podem ser utilizadas de seguida no
programa, sendo utilizada neste caso a função printf. • Linha 2: esta linha não tem nada.
Podem existir quantas linhas em branco o programador quiser, o compilador não ficará
atrapalhado, nem fará nada com elas, mas tal pode ser útil 8 Parte I – Variáveis e Estruturas de
Controlo para espaçar os comandos e tornar mais legível o programa. O mesmo é válido para
os espaços ou tabs numa linha de código, como por exemplo os espaços da linha 5 que
antecedem o printf. • Linha 3: começa a implementação da função main. O programa começa
sempre na função main. Para já, vamos deixar por explicar o int, e os parênteses vazios.
Realçar que as instruções que dizem respeito à função main, e portanto ao que o programa
tem de fazer, estão limitadas por duas chavetas a abrir na linha 4 e a fechar na linha 6. Todas
as instruções entre estas chavetas, pertencem à função main. • Linha 5: nesta linha está a
única instrução. Existe uma chamada à função printf, e sabemos que é uma função porque
após o seu nome tem uns parênteses a abrir. Dentro dos parênteses colocam-se os
argumentos a passar à função. Neste caso colocamos o texto que queremos imprimir: "Ola
mundo!". O texto coloca-se entre aspas, para não se confundir com instruções. Se não o fez já,
crie e execute o programa acima. Veja as instruções para instalar um compilador no anexo
“Compilador e Editor de C”. É tudo. Acabou de dar o primeiro passo no mundo da
programação, editou e compilou o primeiro programa. Houve conceitos referidos aqui que não
compreende agora completamente: bi 2. Variáveis 9 2. VARIÁVEIS Uma variável num programa
é uma entidade que tem um valor a cada instante, podendo esse valor ao longo do programa
ser utilizado e/ou alterado. É nas variáveis que se guarda a informação necessária para realizar
a função pretendida pelo programa. Podem existir quantas variáveis forem necessárias, mas
cada uma utiliza memória do computador. O programa seguinte tem por objectivo trocar o
valor de duas variáveis: 1 #include 2 3 int main() 4 { 5 /* declaração de três variáveis inteiras */
6 int x=3; 7 int y=7; 8 int aux; 9 10 /* trocar o valor de x com y */ 11 aux=x; 12 x=y; 13 y=aux;
14 15 /* mostrar os valores em x e em y */ 16 printf("x: %d, y: %d",x,y); 17 } Programa 2-1
Troca o valor de duas variáveis Comentários: • Este programa tem uma estrutura inicial
idêntica ao Programa 1-1, nomeadamente nas linhas 1 a 4, e linha 17. • A linha 5, 10 e 15 têm
comentários ao código. Os comentários são todo o texto entre /* e */, sendo ignorados pelo
compilador. O objectivo é que seja possível ao programador colocar texto explicativo de partes
mais complexas do programa, não para que o compilador o melhor entenda, mas para que um
outro programador que leia o código, ou o próprio programador mais tarde, compreenda mais
facilmente o código. Os comentários ficam a cor verde, dado que o editor identifica que o
conteúdo dessas linhas será ignorado pelo compilador1. • Nas linhas 6 a 8, estão declaradas as
variáveis x, y e aux. As variáveis x e y são não só criadas, como também inicializadas. Ao
ficarem com um valor inicial, podem desde já ser utilizadas. Na linguagem C, todas as variáveis
utilizadas têm de ser declaradas no início da função2. • Nas linhas 11 a 13, estão comandos
que são atribuições. Numa atribuição, coloca-se uma variável do lado esquerdo da igualdade, e
uma expressão do lado direito. Neste caso, todas as atribuições têm expressões com uma só
variável. 1 A linguagem C++ tem os comentários até ao final da linha, após duas barras: “//”. A
maior parte dos compiladores de C também permite este tipo de comentários. 2 A linguagem
C++ bem como a generalidade dos compiladores de C permitem a declaração fora do início das
funções, mas pelos motivos referidos no erro “Declaração de variáveis fora do início das
funções”, do anexo “Erros Comuns” esta restrição será mantida. 10 Parte I – Variáveis e
Estruturas de Controlo • Na linha 16, é mostrado o valor das variáveis. Notar que a função
printf tem 3 argumentos separados por vírgulas. O primeiro é uma string, em que começa com
aspas e acaba nas aspas seguintes, o segundo uma expressão com a variável x, seguido de uma
expressão com a variável y. Na string existem dois %d. Em cada %d o printf em vez de mostrar
no ecrã %d coloca o valor da variável seguinte na sua lista de argumentos. No primeiro %d vai
colocar x, e no segundo %d vai colocar o y. • Notar que cada instrução acaba com um ponto e
vírgula, sendo esta uma característica do C. Execução do programa: C:\>troca x: 7, y: 3 Os
valores estão correctamente trocados, mas vamos ver com mais detalhe qual o valor das
variáveis a cada momento, na execução passo-a-passo, à direita. A execução passo-a-passo
tem em cada linha da tabela um passo. Em cada passo é indicada a linha de código
correspondente, e a respectiva instrução por vezes encurtada como no passo 7. A coluna
resultado mostra o resultado da instrução, excepto se tratar de uma declaração, em que uma
ou mais variáveis ocupam a coluna seguinte disponível, ou uma atribuição, em que a
respectiva variável fica com o valor atribuído. Para poder-se escrever a linha de um
determinado passo, é suficiente a informação da linha do passo anterior. A pergunta "Qual o
valor de x?" não tem muito sentido, a não ser que se identifique o instante. No passo 3 ou no
final do programa? Uma variável tem um valor até que lhe seja atribuído outro. Vamos agora
resolver o mesmo problema, troca dos valores de duas variáveis, mas sem utilizar uma variável
auxiliar: 1 #include 2 3 int main() 4 { 5 /* declaração de duas variáveis inteiras */ 6 int x=3, y=7;
7 8 /* trocar o valor de x com y */ 9 x=x+y; 10 y=x-y; 11 x=x-y; 12 13 /* mostrar os valores em x
e em y */ 14 printf("x: %d, y: %d",x,y); 15 } Programa 2-2 Troca o valor de duas variáveis sem
variável auxiliar A diferença para o exemplo anterior é que não se declarou uma variável aux, e
declarou-se ambas as variáveis x e y num só comando. As atribuições utilizam agora
expressões com duas variáveis, incluindo a própria variável que está a ser atribuída. 2.
Variáveis 11 Embora este programa pareça confuso, o certo é que tem a mesma
funcionalidade que o anterior como se comprova de seguida, vendo a execução passo-a-passo.
No passo 2, o valor de x utilizado na expressão é o que existia antes do passo 2, o valor 3,
passando a ser o valor 10 após a execução do passo 2. Não há qualquer problema em colocar a
variável x de um lado e do outro de uma atribuição. A variável x à esquerda, significa que ficará
com o resultado da expressão, e a variável x à direita, significa que se deve utilizar o valor da
variável x antes desta instrução. Os tipos de dados utilizados podem não ser apenas variáveis
inteiras. Os tipos elementares da linguagem C são os seguintes: • char - um carácter, ou um
inteiro muito pequeno (guarda apenas 256 valores distintos) • short - inteiro pequeno (pouco
utilizado) • int - tipo standard para inteiros • long - inteiro longo • float - número real (pode
ter casas decimais) • double - número real com precisão dupla (igual ao float mas com mais
precisão) Pode-se nos tipos inteiros (char a long), anteceder com as palavras unsigned ou
signed, para indicar que o número inteiro tem ou não sinal. Se omitir, é considerado que têm
sinal. Pode-se também considerar o tipo long long para um inteiro muito longo3, ou o long
double, mas esses tipos nem sempre estão implementados. Quais os valores
máximos/mínimos que podemos atribuir às variáveis de cada tipo? Isso depende do espaço
reservado para cada tipo de variável, que por sua vez depende tanto do compilador, como do
computador em que o programa for compilado e executado. Para saber quanto espaço é
necessário para guardar cada variável, pode-se utilizar o operador sizeof. O resultado de
sizeof(int) retorna o número de bytes que uma variável do tipo inteiro ocupa na memória. 1
#include 2 3 int main() 4 { 5 printf("sizeof(int): %d",sizeof(int)); 6 } Programa 2-3 Imprime o
número de bytes que um inteiro ocupa Execução do programa: C:\>sizeofint sizeof(int): 4
Execute este programa para ver quantos bytes ocupa um inteiro no seu compilador e
computador. Para que os resultados sejam idênticos na resolução dos exercícios, é importante
que todos utilizem inteiros do mesmo tamanho. Se o resultado não for no seu caso 4,
experimente o sizeof(short) ou sizeof(long), e utilize o tipo que tiver tamanho 4 para todas as
variáveis inteiras nos exercícios das actividades formativas. As variáveis do tipo char e
float/double, não utilizam a mesma string de formatação no printf da que os inteiros. Para os
inteiros, utiliza-se o %d na string do primeiro argumento, mas esse 3 O tipo long long não faz
parte da norma inicial da linguagem C, actualmente a generalidade dos compiladores
implementa-o com um inteiro de 64 bits. A string de formatação varia: %I64d; %lld. PaA R T E I
– V A R I Á V E I S E E S T R U T U R A S D E C O N T R O L O Na Parte I são introduzidos os
primeiros conceitos de programação, existentes em todas as linguagens de programação
modernas. A leitura atenta e pausada é essencial para a compreensão destes conceitos que
embora aparentemente simples, a sua não compreensão tem consequências em todo o resto
do texto, mas que poderá detectar de imediato no final da Parte I ao não conseguir resolver
alguns dos exercícios propostos. Após a realização desta parte, fica com as bases para
programar em qualquer linguagem de programação simples, para implementação de
pequenas funcionalidades, como Javascript para adicionar dinamismo a uma página Web, VBA
para programar macros no Microsoft Excel, ou Linguagem R para realizar cálculos esta 1.
Primeiro Programa 7 1. PRIMEIRO PROGRAMA Um programa é uma sequência de instruções,
dirigidas a um computador, para que este execute uma determinada função pretendida. A
actividade de programar consiste na elaboração dessa sequência de instruções numa
determinada linguagem de programação, que satisfaz o que é pretendido. A linguagem de
programação tem que seguir uma sintaxe rígida, de forma a poder ser convertida em
instruções que o computador possa compreender, mas por outro lado deve ser facilmente
escrita e lida por uma pessoa. Há diferentes linguagens de programação, utilizaremos a
linguagem C, no entanto não será a sintaxe da linguagem o mais relevante a aprender, mas sim
competências que são independentes da linguagem. A linguagem C é uma linguagem
imperativa, cada instrução é uma ordem para o computador. Existem outros paradigmas de
programação, mas fora do âmbito deste texto. Manda a tradição que o primeiro programa a
desenvolver numa linguagem, seja o olá mundo. Não a vamos quebrar, este é o programa mais
curto possível, apenas escreve um texto e termina. 1 #include 2 3 int main() 4 { 5 printf("Ola
Mundo!"); 6 } Programa 1-1 Olá Mundo O programa acima está escrito em linguagem C, e
pode ser executado pelo computador. No entanto o computador não entende directamente a
linguagem C, apenas ficheiros executáveis (no Windows com extensão exe). No entanto,
através de um programa chamado de Compilador, podemos converter o código C acima num
executável. Esse executável contém já instruções em código máquina, cujo computador pode
executar. Vamos ver em que consiste o código acima: • Existe numeração das linhas e cores,
que são apenas para nossa conveniência. A numeração das linhas não faz parte do ficheiro C, e
as cores são colocadas pelo editor. Um programa em C é um ficheiro de texto plano, com a
extensão .c e pode ser editado num editor de texto plano como o Notepad, sem qualquer cor
ou numeração das linhas. • Linha 1: começa por um # (cardinal), pelo que esta linha é uma
instrução não para o computador mas sim para o compilador. Essas instruções chamam-se de
comandos de préprocessamento, dado que são executadas antes do processamento. • O
comando #include instrui o compilador a incluir o ficheiro indicado de seguida. Esse ficheiro é
uma biblioteca standard do C (existe em todos os compiladores de C), stdio.h, e consiste na
declaração de funções de entrada e saída. Estas funções podem ser utilizadas de seguida no
programa, sendo utilizada neste caso a função printf. • Linha 2: esta linha não tem nada.
Podem existir quantas linhas em branco o programador quiser, o compilador não ficará
atrapalhado, nem fará nada com elas, mas tal pode ser útil 8 Parte I – Variáveis e Estruturas de
Controlo para espaçar os comandos e tornar mais legível o programa. O mesmo é válido para
os espaços ou tabs numa linha de código, como por exemplo os espaços da linha 5 que
antecedem o printf. • Linha 3: começa a implementação da função main. O programa começa
sempre na função main. Para já, vamos deixar por explicar o int, e os parênteses vazios.
Realçar que as instruções que dizem respeito à função main, e portanto ao que o programa
tem de fazer, estão limitadas por duas chavetas a abrir na linha 4 e a fechar na linha 6. Todas
as instruções entre estas chavetas, pertencem à função main. • Linha 5: nesta linha está a
única instrução. Existe uma chamada à função printf, e sabemos que é uma função porque
após o seu nome tem uns parênteses a abrir. Dentro dos parênteses colocam-se os
argumentos a passar à função. Neste caso colocamos o texto que queremos imprimir: "Ola
mundo!". O texto coloca-se entre aspas, para não se confundir com instruções. Se não o fez já,
crie e execute o programa acima. Veja as instruções para instalar um compilador no anexo
“Compilador e Editor de C”. É tudo. Acabou de dar o primeiro passo no mundo da
programação, editou e compilou o primeiro programa. Houve conceitos referidos aqui que não
compreende agora completamente: bi 2. Variáveis 9 2. VARIÁVEIS Uma variável num programa
é uma entidade que tem um valor a cada instante, podendo esse valor ao longo do programa
ser utilizado e/ou alterado. É nas variáveis que se guarda a informação necessária para realizar
a função pretendida pelo programa. Podem existir quantas variáveis forem necessárias, mas
cada uma utiliza memória do computador. O programa seguinte tem por objectivo trocar o
valor de duas variáveis: 1 #include 2 3 int main() 4 { 5 /* declaração de três variáveis inteiras */
6 int x=3; 7 int y=7; 8 int aux; 9 10 /* trocar o valor de x com y */ 11 aux=x; 12 x=y; 13 y=aux;
14 15 /* mostrar os valores em x e em y */ 16 printf("x: %d, y: %d",x,y); 17 } Programa 2-1
Troca o valor de duas variáveis Comentários: • Este programa tem uma estrutura inicial
idêntica ao Programa 1-1, nomeadamente nas linhas 1 a 4, e linha 17. • A linha 5, 10 e 15 têm
comentários ao código. Os comentários são todo o texto entre /* e */, sendo ignorados pelo
compilador. O objectivo é que seja possível ao programador colocar texto explicativo de partes
mais complexas do programa, não para que o compilador o melhor entenda, mas para que um
outro programador que leia o código, ou o próprio programador mais tarde, compreenda mais
facilmente o código. Os comentários ficam a cor verde, dado que o editor identifica que o
conteúdo dessas linhas será ignorado pelo compilador1. • Nas linhas 6 a 8, estão declaradas as
variáveis x, y e aux. As variáveis x e y são não só criadas, como também inicializadas. Ao
ficarem com um valor inicial, podem desde já ser utilizadas. Na linguagem C, todas as variáveis
utilizadas têm de ser declaradas no início da função2. • Nas linhas 11 a 13, estão comandos
que são atribuições. Numa atribuição, coloca-se uma variável do lado esquerdo da igualdade, e
uma expressão do lado direito. Neste caso, todas as atribuições têm expressões com uma só
variável. 1 A linguagem C++ tem os comentários até ao final da linha, após duas barras: “//”. A
maior parte dos compiladores de C também permite este tipo de comentários. 2 A linguagem
C++ bem como a generalidade dos compiladores de C permitem a declaração fora do início das
funções, mas pelos motivos referidos no erro “Declaração de variáveis fora do início das
funções”, do anexo “Erros Comuns” esta restrição será mantida. 10 Parte I – Variáveis e
Estruturas de Controlo • Na linha 16, é mostrado o valor das variáveis. Notar que a função
printf tem 3 argumentos separados por vírgulas. O primeiro é uma string, em que começa com
aspas e acaba nas aspas seguintes, o segundo uma expressão com a variável x, seguido de uma
expressão com a variável y. Na string existem dois %d. Em cada %d o printf em vez de mostrar
no ecrã %d coloca o valor da variável seguinte na sua lista de argumentos. No primeiro %d vai
colocar x, e no segundo %d vai colocar o y. • Notar que cada instrução acaba com um ponto e
vírgula, sendo esta uma característica do C. Execução do programa: C:\>troca x: 7, y: 3 Os
valores estão correctamente trocados, mas vamos ver com mais detalhe qual o valor das
variáveis a cada momento, na execução passo-a-passo, à direita. A execução passo-a-passo
tem em cada linha da tabela um passo. Em cada passo é indicada a linha de código
correspondente, e a respectiva instrução por vezes encurtada como no passo 7. A coluna
resultado mostra o resultado da instrução, excepto se tratar de uma declaração, em que uma
ou mais variáveis ocupam a coluna seguinte disponível, ou uma atribuição, em que a
respectiva variável fica com o valor atribuído. Para poder-se escrever a linha de um
determinado passo, é suficiente a informação da linha do passo anterior. A pergunta "Qual o
valor de x?" não tem muito sentido, a não ser que se identifique o instante. No passo 3 ou no
final do programa? Uma variável tem um valor até que lhe seja atribuído outro. Vamos agora
resolver o mesmo problema, troca dos valores de duas variáveis, mas sem utilizar uma variável
auxiliar: 1 #include 2 3 int main() 4 { 5 /* declaração de duas variáveis inteiras */ 6 int x=3, y=7;
7 8 /* trocar o valor de x com y */ 9 x=x+y; 10 y=x-y; 11 x=x-y; 12 13 /* mostrar os valores em x
e em y */ 14 printf("x: %d, y: %d",x,y); 15 } Programa 2-2 Troca o valor de duas variáveis sem
variável auxiliar A diferença para o exemplo anterior é que não se declarou uma variável aux, e
declarou-se ambas as variáveis x e y num só comando. As atribuições utilizam agora
expressões com duas variáveis, incluindo a própria variável que está a ser atribuída. 2.
Variáveis 11 Embora este programa pareça confuso, o certo é que tem a mesma
funcionalidade que o anterior como se comprova de seguida, vendo a execução passo-a-passo.
No passo 2, o valor de x utilizado na expressão é o que existia antes do passo 2, o valor 3,
passando a ser o valor 10 após a execução do passo 2. Não há qualquer problema em colocar a
variável x de um lado e do outro de uma atribuição. A variável x à esquerda, significa que ficará
com o resultado da expressão, e a variável x à direita, significa que se deve utilizar o valor da
variável x antes desta instrução. Os tipos de dados utilizados podem não ser apenas variáveis
inteiras. Os tipos elementares da linguagem C são os seguintes: • char - um carácter, ou um
inteiro muito pequeno (guarda apenas 256 valores distintos) • short - inteiro pequeno (pouco
utilizado) • int - tipo standard para inteiros • long - inteiro longo • float - número real (pode
ter casas decimais) • double - número real com precisão dupla (igual ao float mas com mais
precisão) Pode-se nos tipos inteiros (char a long), anteceder com as palavras unsigned ou
signed, para indicar que o número inteiro tem ou não sinal. Se omitir, é considerado que têm
sinal. Pode-se também considerar o tipo long long para um inteiro muito longo3, ou o long
double, mas esses tipos nem sempre estão implementados. Quais os valores
máximos/mínimos que podemos atribuir às variáveis de cada tipo? Isso depende do espaço
reservado para cada tipo de variável, que por sua vez depende tanto do compilador, como do
computador em que o programa for compilado e executado. Para saber quanto espaço é
necessário para guardar cada variável, pode-se utilizar o operador sizeof. O resultado de
sizeof(int) retorna o número de bytes que uma variável do tipo inteiro ocupa na memória. 1
#include 2 3 int main() 4 { 5 printf("sizeof(int): %d",sizeof(int)); 6 } Programa 2-3 Imprime o
número de bytes que um inteiro ocupa Execução do programa: C:\>sizeofint sizeof(int): 4
Execute este programa para ver quantos bytes ocupa um inteiro no seu compilador e
computador. Para que os resultados sejam idênticos na resolução dos exercícios, é importante
que todos utilizem inteiros do mesmo tamanho. Se o resultado não for no seu caso 4,
experimente o sizeof(short) ou sizeof(long), e utilize o tipo que tiver tamanho 4 para todas as
variáveis inteiras nos exercícios das actividades formativas. As variáveis do tipo char e
float/double, não utilizam a mesma string de formatação no printf da que os inteiros. Para os
inteiros, utiliza-se o %d na string do primeiro argumento, mas esse 3 O tipo long long não faz
parte da norma inicial da linguagem C, actualmente a generalidade dos compiladores
implementa-o com um inteiro de 64 bits. A string de formatação varia: %I64d; %lld. Pa