Introdução à Programação B (2018/2019)

Aulas teóricas

Artur Miguel Dias



Teórica 02 (01/out/2018)

Mais programas em C usando: funções com dois argumentos, biblioteca matemática, operadores de comparação e lógicos, recursividade, ciclo for.
Início do estudo sistemático da linguagem C.
Normalizações do C.
Elementos Básicos do C.

Mais programas em C usando: funções com dois argumentos, operadores de comparação e lógicos, recursividade, ciclo for

Um programa que contém uma função com dois argumentos

Enunciado do problema

Desenvolva um programa que calcule a medida da hipotenusa de um triângulo retângulo a partir dos comprimentos dos respetivos catetos.

Solução

Explicações


Um programa que usa operadores de comparação e operadores lógicos

Enunciado do problema

Desenvolva um programa que determine o número de dias dum ano qualquer.

Solução

Explicações


Um programa com uma função recursiva

Enunciado do problema

Desenvolva um programa que calcule o fatorial dum número inteiro não-negativo, usando da forma direta a definição recursiva , nossa conhecida da Matemática.

Solução

Explicações


Um programa que usa um ciclo

Enunciado do problema

Desenvolva um programa que calcule o fatorial dum número inteiro não-negativo, através da multiplicação direta de inteiros consecutivos, usando a ideia do seguinte piatório: .

Solução

Explicações


Uma programa igual ao anterior, mas que escreve os sucessivos valores das variáveis para percebermos melhor como o ciclo funciona

Enunciado do problema

Desenvolva um programa que calcule o fatorial dum número inteiro não-negativo, através da multiplicação direta de inteiros consecutivos. Durante os cálculos, o programa deve mostrar a evolução do valor das variáveis usadas nas contas.

Solução

Explicações



Início do estudo sistemático da linguagem C

O principal objetivo desta cadeira é aprender a programar, mas para programar bem temos de conhecer a nossa ferramenta de trabalho, que é a linguagem C.

Não se assume o conhecimento prévio de qualquer linguagem de programação. Vamos agora introduzir alguns elementos essenciais da linguagem C, para você começar a conhecer a linguagem e poder começar, em breve, a usá-la com alguma confiança.


Normalizações do C

Desde o aparecimento do C, no início dos anos 1970, que esta linguagem tem evoluído. Historicamente, ocorreram as seguintes normalizações da linguagem: O compilador que integra o Code::Blocks é o popular GCC dos GNU Tools do Linux. A nossa versão do compilador é bastante recente e suporta praticamente toda a norma C99 e normas anteriores. Contudo, a configuração por omissão do Code::Blocks só usa a norma C90. Felizmente, isso é suficiente para nós. (No Code::Blocks é fácil ativar a norma C99, mas o problema é que nos nossos laboratórios essa configuração se perde sempre que a máquina é desligada. Por isso o melhor é esquecê-la.)

Elementos Básicos do C

Programa em C

Um programa em C é constituído por:

Legibilidade dos programas

Quem escreve um programa tem a responsabilidade de escrever código código legível, ou seja código compreensível, muito claro, fácil de entender por outras pessoas.

A legibilidade é um dos critérios mais importantes para aferir a qualidade dum programa.

Um programa em C de qualidade é sempre constituído por diversas funções. Cada função deve desempenhar uma tarefa bem definida e deve ter um nome bem escolhido que sugira essa tarefa.

A boa indentação dos programas também contribui para a sua legibilidade. Repare na margem esquerda dos programas estudados até ao momento.

Identificadores

Os identificadores (ou nomes) servem para nomear as entidades dos programas. As entidades são: constantes, variáveis, argumentos, funções, tipos e etiquetas.

Os identificadores são palavras cuidadosamente inventadas pelo programador, para ajudar a tornar o programa legível.

Em C, um identificador começa por uma letra ou sublinhado '_' e continua com algarismos, letras e sublinhados. Exemplos:

Faz-se distinção entre maiúsculas e minúsculas. Por exemplo, os seguintes identificadores são considerados distintos:

É proibido usar como identificadores, palavras reservada da linguagem, tais como if, else, return, int ou double.

Também não convém usar como identificadores palavras que, não sendo palavras reservadas, já tenham uma utilização habitual, como por exemplo include, scanf ou printf.

Podemos escrever todos os identificadores em inglês, se desejarmos que os nossos programas sejam compreendidos em todo o mundo, visto que a língua franca da atualidade é o Inglês. Em IP-B, recomendamos que os identificadores sejam escritos em inglês, apesar de não ser obrigatório.

Palavras reservadas

Palavras reservadas, ou palavras-chave, são palavras que têm um significado especial na linguagem C e cujo significado não pode ser alterado.

Eis 32 palavras reservadas do C90:

No C99, foram introduzidas mais 5 palavras reservadas (que não vamos usar na nossa cadeira):

Comentários

Os comentários são ignorados pelo compilador de C, mas ajudam a documentar o programa. Há dois tipos de comentários em C:

Terminador ;

As definições de variáveis são terminadas por um ponto e vírgula ';'.

As instruções que não acabem em chaveta a fechar '}' também são terminadas por um ponto e vírgula ';'.

Repare que as funções nunca terminam com ponto e vírgula ';', mas sim por chaveta a fechar '}'.

Pré-processador, diretivas e inclusão condicional

O pré-processador é um programa especial que está previsto na norma do C. É usado automaticamente pelo compilador de C para efetuar algumas transformações prévias simples do texto do programa, antes deste ser compilado.

Uma diretiva é um comando especial para o pré-processador. Todas as diretivas começam pelo símbolo '#'. Há três tipos de diretivas:

Como se disse, o pré-processador efetua uma tradução simples do texto do programa. O compilador nunca chega a ver o código original. O compilador só vê o resultado do pré-processamento.

Diretiva #define

Por exemplo, o seguinte pedaço de código, que define uma constante chamada PI, é traduzido para Seria possível programar sem definir constantes, mas a utilização de constantes com nomes bem escolhidos torna os programas mais legíveis, mais robustos e mais fáceis de modificar. (Pense porquê?)

Diretiva #include

Por exemplo, quando num programa aparece a seguinte diretiva o pré-processador troca a linha #include <stdio.h> pelo conteúdo integral do ficheiro "stdio.h". Este é um ficheiro que contém informação sobre todas as operações de entrada/saída disponíveis na biblioteca do C, incluindo as funções printf e scanf, que temos vindo a usar.

Diretivas #if #else #endif

Permitem escolher qual o código que o compilador efetivamente compila, dependendo do valor duma expressão onde normalmente ocorrem constantes criadas com #define.

Primeiro exemplo: a instrução printf só é tratada pelo compilador se o valor da constante DEBUGLEVEL for positivo, isto é se a expressão DEBUGLEVEL > 0 for verdadeira.

Como se vê neste exemplo, uma das vantagens destas diretivas é a possibilidade de meter código de verificação pelo meio do programa, e no final, quando o programa estiver todo escrito, desativar esse código de verificação sem ter de o apagar. É boa ideia não o apagar o código de verificação porque, mais tarde, o programa poderá ter de ser modificado e durante as modificações convém reativar o código de verificação.

Ficheiros header e ficheiros source

Raramente usaremos estes termos na nossa disciplina, mas convém conhecê-los porque aparecem com frequência em textos sobre C em Inglês.

Um ficheiro header ou header file é um ficheiro com extensão ".h" que se destina a ser usado numa diretiva #include. Em IP-B os alunos não escrevem ficheiros header. Usaremos os ficheiros header que pertencem à biblioteca e também mais um ou dois ficheiros header já feitos fornecidos pelo professor para alguns exercícios especiais.

Um ficheiro source ou source file é simplesmente um ficheiro com extensão ".c", contendo código C. Em IP-B, o objetivo é os alunos aprenderem a escrever ficheiros source para resolver problemas de programação. Em português, também se usa a expressão ficheiro fonte como alternativa a ficheiro source. O código dos ficheiros ".c" é a fonte que o compilador usa para gerar o ficheiro executável.



#120