Você está na página 1de 59

Programação I

Linguagem C, conceitos
elementares
Unidade 02 - Módulo 01
Por: Valéria Pequeno
Introdução
• Obje%vo:
• Dar a conhecer como construir bons programas e alguns cuidados
a ter no desenvolvimento de programas (mesmo em programas
simples)

• Todo programa, independente da linguagem em que


forem construídos devem ser corretos!
• SintaNcamente
• SemanNcamente

• Erros sintá%cos:
• São erros encontrados pelo compilador quando alguma instrução
não segue as regras de construção de acordo com a linguagem (C)
2
• Erros semân%cos:
• Quando a saída do programa não é o que se esperava
Introdução
• Para encontrar erros sintáticos, primeiro o compilador
percorre o programa e seleciona todos os “tokens”

• Tokens são ...

• Tokens na linguagem C:
Comentários /* ... */ //...
Diretivas #include
Palavras reservadas for while int double
Identificadores Nomes de variáveis, funções
Pontuação { ... } ; ,
3
• Programas devem ser sintaticamente e semanticamente
corretos
Comentários
• Facilitam a leitura do código
• Facilitam a manutenção do código

Elementos da linguagem C
• Na linguagem C existem dois tipos de comentários:
• /* texto */ à o texto pode envolver várias linhas
• // texto à o texto é de apenas uma linha

• Deve haver um equilíbrio:


• Comentários muito longos ou muito comentários à
dificulta a percepção do código
• Ter poucos comentários ou comentários demasiados
curtos à pode dificultar a percepção do código
4
Verificação de Aprendizagem
• A razão mais importante para se fazer comentários no código
é?
1. Ajuda o compilador a analisar o código

2. Ajuda a valorizar seu trabalho perante seu chefe

3. Torna o código mais fácil de ler

4. Prova que o código está correto

5
Diretivas
• # include
• Indica ao pré-processador para subsNtuir a linha em que se encontra
pelo conteúdo do ficheiro que é colocado a frente

• /* Exemplo da inclusão do ficheiro stdio.h – ficheiro de texto

Com o cabeçalho das funções que uNlizamos no input/output */

# include <stdio.h>

6
Palavras Reservadas
• Palavras especiais usadas pela linguagem com algum propósito

Usadas para declarar tipos de dados


7

Fonte:Linguagem C, introdução ao C em 10 aulas


Palavras Reservadas

Afetam o fluxo de controlo

Fonte:Linguagem C, introdução ao C em 10 aulas


Palavras Reservadas

Dão novos nomes a tipos de dados ou tipos de dados compostos


9

Fonte:Linguagem C, introdução ao C em 10 aulas


Palavras Reservadas

São chamados de “storage classification”


10

Fonte:Linguagem C, introdução ao C em 10 aulas


Veri>icaçã o de Aprendizagem
• Algumas palavras reservadas na linguagem C são:
1. for

2. math.h

3. Main

4. id

11
Identificadores
• Nomes que damos as variáveis, constantes e funções

• Exemplo Constante
#define PI 3.1415 Convenção: letras todas maiúsculas
int main() {
função
int idade;
}
variável

A linguagem C é case sensitive !!! 12


Identificadores
• Regra de formação:
• Identificadores :: { letra | underscore }1
{ letra | underscore | digito }0+
• Exemplos boas e más escolhas:

raio #nome
PI nome#
x2 23_msg
valor_em_metros -
valorEmKm data
_contador meu nome 13
Identificadores
• Iden%ficadores com apenas um caracter:
• É possível, mas devem ser evitados

• Exceção quando são universalmente reconhecidas, como por


exemplo, num contexto matemáNco:
• i,j, k, n são usadas como contadores

• x, y, z são usadas em coeficientes de um gráfico

• Iden%ficadores podem também ser bastante grandes


• Não se costuma passar de 10 a 12 caracteres
14
Estrutura de um Programa em C
Diretivas:
#include <stdio.h> • Qualquer linha começada com #
• Exemplo: #include <stdio.h>
int main(void) {
• stdio.h contém as definições associadas a
printf(“Olá.\n”); entrada/saída
return 0; } • Exemplo: printf
• Normalmente ocupam apenas uma linha

Função main:
• Todo programa C deve definir uma função main que é executada
quando o programa inicia
• O valor retornado de main representa o código de erro para o
sistema operaNvo
• Retornar zero significa que o programa terminou corretamente 15
Estrutura de um Programa em C
Comentários:
Um comentário começa com /* e
#include <stdio.h>
termina com */ quando envolve
int main(void) { várias linhas
princ(“Olá.\n”); Quando o comentário é de apenas
return 0; } uma linha usamos //

Instruções:
• O corpo de uma função é uma sequência de instruções
• Exemplo: printf(“Olá.\n”);
• Cada instrução termina com ;
• Uma instrução pode ser dividida em várias linhas 16
• Podemos escrever várias instruções numa mesma linha
Código fonte
Como funciona o C? hello.c

#include <stdio.h> Pré-compilação (cpp)


int main(void) {
princ(“Olá.\n”); Código fonte
return 0; } alterado hello.i
Dire%vas de compilação
#include <stdio.h> Compilação (cc1)

Código objeto Código objeto


printf.o Análise
hello.o
Léxica e
Ligação () Sintática

17
Programa
executável (.exe)
Variáveis
• Na matemá%ca:
• É uma enNdade capaz de representar um valor ou expressão
• Pode representar um número ou um conjunto de números
• f(x) = x2

• Em computação:
• Posição de memória que armazena uma informação
• Pode ser modificada pelo programa
• Deve ser definida antes de ser u9lizada!

• A linguagem C exige que sejam definidos os %pos de dados


mais apropriados para guardar os dados nas variáveis 18
Tipos de Dados mais Comuns

19

Fonte:Linguagem C, introdução ao C em 10 aulas


Variáveis
• Exemplo: int idade;
• Escopo das variáveis:
• Variável Global
• Definida fora de qualquer definição de função
• Tempo de vida é o tempo de execução do programa
• Variável Local
• Definida dentro de um Bloco: visível apenas no interior de um
bloco de comandos
• Definida em uma função: declarada na lista de parâmetros da
função ou definida dentro da função
• Variável Está4ca à Exemplo: sta%c int i;
• Declarada no corpo de uma função
20
• Usada quando for necessário recuperar o valor de uma variável
atribuída na úlNma vez que a função foi executada
Escopo de Variá veis

21
Constantes
• Como uma variável, uma constante também armazena um
valor na memória do computador

• Entretanto, esse valor não pode ser alterado: pois é


constante!

• Para constantes, é obrigatório a atribuição de uma valor!

22
Definindo Constantes
• Usando #define
• Deve-se incluir a direNva de pré-processamento #define antes do
início do código
CUIDADO: nesse caso, não deve-se colocar o “;”
• Exemplo: #define PI 3.1415
• Usando const
• Usando o const, a declaração não precisa estar no início do
código
• A declaração é igual a de uma variável inicializada
• Exemplo: const double PI = 3.1415 ;
23
Exemplo de um Programa
#include <stdio.h> Há um espaço no
int main() { 2º scanf, antes do
char ch1, ch2; %, o que acontece
se o Nrarmos?
princ(“Introduza um caracter: “);
scanf(“%c”,&ch1);
princ(“Introduza outro caracter: “);
scanf(“ %c”,&ch2);
princ(“Os caracteres introduzidos foram ‘%c’ e ‘%c’\n”,ch1,ch2);
}

24
Casting
• É quando temos uma variável de um tipo de dados e queremos
modificar seu valor para ser de outro tipo de dados

• Exemplo: char valor = ‘3’ e queremos que valor seja inteiro 3

• Para fazer essa transformação basta colocar entre parêntesis o


tipo pretendido antes do valor

• Atenção: essa transformação é temporária

25
Exemplo - Casting
#include <stdio.h>
int main() {
int num;
princ("Introduza um inteiro: ");
scanf("%d",&num);
princ("Foi introduzido %d cujo carácter = '%c'\n",num, (char)
num);
princ("O carácter seguinte = '%c' tem o ASCII nº %d\n",
(char) (num+1), num+1);
return 0;
} 26
Outro Exemplo
• Escreva um programa em C que solicite um determinado
número real e mostre qual a sua parte inteira e a sua parte
fraccionária.
#include <stdio.h>
int main(){
float x;
princ("Introduza um número real: ");
scanf("%f",&x);
princ("Parte inteira: %d\n", (int) x);
princ("Parte fraccionária: %f\n", x-((int) x));
return 0; 27
}
Operadores Lógicos
• C oferece operadores lógicos, que podem ser usados para
formar condições mais complexas ao combinar condições
simples.
• Os operadores lógicos são && (AND lógico), || (OR lógico) e !
(NOT lógico, também chamado de negação lógica)
• Exemplo:
• if ( sexo == 1 && idade >= 65 )
idosoFeminino = idosoFeminino + 1;
• if (médiaSemestre >= 90 || exameFinal>= 90 )
princ( "Nota do aluno é A\n" );

• O operador && tem uma precedência mais alta que || 28


• Os dois operadores se associam da esquerda para a direita
Operadores de Atribuiçã o
• C oferece vários operadores de atribuição que abreviam as
expressões de atribuição
• O operador += soma o valor da expressão à direita
• Exemplo:
do operador ao valor da variável à esquerda do
• C = c + 3; c += 3; operador, e armazena o resultado na variável à
esquerda do operador
• Operadores aritméticos de atribuição:

29
Operadores de Incremento e
Decremento
• Operador unário de incremento ++
• Se uma variável c é incrementada em 1, o operador de incremento
++ pode ser usado no lugar das expressões c = c + 1 ou c + = 1
• Operador de incremento ou de decremento é colocado antes de
uma variável à operador de pré-incremento ou de pré-
decremento, respec%vamente
• Operador de incremento ou decremento é colocado depois de
uma variável à operador de pós-incremento ou de pós-
decremento, respec%vamente

30
Operadores de Incremento e
Decremento
• Exemplo

31
Operadores de Incremento e
Decremento
• Exemplo (con%nuação)
...

32
Operadores
• Os operadores lógicos são && (AND lógico), || (OR lógico) e !
(NOT lógico, também chamado de negação lógica)

33
EXERCÍCIOS 34
Exercício 1
• Escreva um programa em C para dado um tempo em segundos, lido
do teclado, escreva no monitor o tempo com formato hh:mm:ss.

• Critério de avaliação: o exercício estará correto se a hora é


mostrada como pedido

• Envie seu exercício como um ficheiro txt (com extensão .c)


para o sí%o indicado pela professora
• Nome do ficheiro: u2m1e1_numeroAluno.c

35
Exercício 2
• Escreva um programa em C que dada uma distância em
milhas, fornecida pelo teclado, mostra a respec%va distância
em quilômetros. Sabe-se que uma milha equivale a 1.609
quilômetros.

• Critério de avaliação: o exercício estará correto se o programa


mostrar a distância correta em quilômetros; declara 1.609
como uma constante.

• Envie seu exercício como um ficheiro txt (com extensão .c)


para o sítio indicado pela professora 36
• Nome do ficheiro: u2m1e2_numeroAluno.c
Entrada e Saída
• Uma parte importante da solução de qualquer problema é a
apresentação dos resultados
• Neste módulo, discu%remos em detalhes os recursos de
formatação de scanf e princ
• Essas funções recebem dados do stream de entrada-padrão e
enviam dados para o stream de saída-padrão.
• Quatro outras funções que usam entrada-padrão e saída-
padrão — gets, puts, getchar e putchar
• Serão apresentadas a seguir
• Inclua o cabeçalho <stdio.h> nos programas que chamam
essas funções
39
Funções da biblioteca-padrão
de entrada/saída
• Exemplos de funções da biblioteca padrão de entrada/saída
(<stdio.h>)

40
Exemplo

41
Streams
• Todas as entradas e saídas são realizadas a parNr de streams (ou
fluxos), que são sequências de bytes

• Nas operações de entrada, os bytes fluem de um disposiNvo (por


exemplo, um teclado, uma unidade de disco, uma conexão de rede)
para a memória principal

• Nas operações de saída, os bytes fluem da memória principal para um


disposiNvo (por exemplo, uma tela de vídeo, uma impressora, uma
unidade de disco, uma conexão de rede e assim por diante)

• Quando a execução do programa começa, três streams são conectados 42


ao programa automaNcamente
Streams
• Em geral, o stream de entrada-padrão é conectado ao teclado, e
o stream de saída-padrão é conectado ao ecrã

• Os sistemas opera%vos normalmente permitem que esses


streams sejam redirecionados para outros disposi%vos

• Um terceiro stream, o stream de erro-padrão, é conectado ao


ecrã

• As mensagens de erro são enviadas para o stream de erro-


padrão
43
Formatação da Saída com
printf
• A formatação precisa da saída é ob%da a par%r de princ

• Todas as chamadas a princ contêm uma string de controlo de


formato, que descreve o formato de saída

• A string de controlo de formato consiste em especificadores


de conversão, flags, larguras de campo, precisões e
caracteres literais

• Com o sinal de percentagem (%), eles formam as


especificações de conversão
44
Formataçã o da Saı́da com
printf
• A função prin| pode realizar as capacidades de formatação a seguir:
• Arredondamento de valores de ponto flutuante para um número
indicado de casas decimais
• Alinhamento de uma coluna de números com pontos decimais que
aparecem uns sobre os outros
• Alinhamento à direita e alinhamento à esquerda das saídas
• Inserção de caracteres literais em locais exatos em uma linha de
saída
• Representação de números em ponto flutuante em formato
exponencial
• Representação de inteiros não sinalizados em formato octal e
hexadecimal. Saiba mais sobre valores octais e hexadecimais no
Apêndice C
• Exibição de todos os Cpos de dados com larguras de campo de
tamanho fixo e precisões 45
Formataçã o da Saı́da com
printf
• A função princ tem a forma:

princ (string-de-controlo-de-formato, outros-argumentos);

• string-de-controlo-de-formato descreve o formato da saída, e


outros-argumentos (que são opcionais) correspondem a cada
uma das especificações de conversão na string-de-controlo-
de-formato
• Cada especificação de conversão começa com um sinal de
percentagem e termina com um especificador de conversão
• Pode haver muitas especificações de conversão em uma string
de controle de formato
46
Impressã o de Inteiros
• Especificadores de conversão de inteiros

47
Exemplo

48
Exemplo 2

49
Exemplo 3

50
Impressão de Strings e
Caracteres
• Os especificadores de conversão c e s são usados para
imprimir caracteres individuais e strings, respec%vamente

• O especificador de conversão c requer um argumento char

• O especificador de conversão s requer um ponteiro para char


como argumento

• O especificador de conversão s faz com que os caracteres


sejam impressos até que um caractere nulo de finalização
('\0') seja encontrado
51
Impressão de Strings e
Caracteres
• Erro comum: Usar %c para imprimir uma string consiste em um erro. O
especificador de conversão %c espera por um argumento char. Uma
string é um ponteiro para char (ou seja, char *).

• Erro comum: Usar %s para imprimir um argumento char causa um


erro fatal, chamado violação de acesso, no tempo de execução. O
especificador de conversão %s espera por um argumento do tipo
ponteiro para char

• Erro comum: Usar aspas simples em torno de strings de caracteres


consiste em um erro de sintaxe. Strings de caracteres devem ser
delimitados por aspas duplas
52
Exemplo

53
Impressã o de Literais e de
Sequê ncias de escape

54
Leitura da Entrada Formatada
com scanf
• A formatação precisa de entrada pode ser ob%da a par%r de
scanf
• Cada instrução scanf contém uma string de controle de
formato que descreve o formato dos dados a serem
informado
• A string de controle de formato consiste em especificadores
de conversão e em caracteres literais
• A função scanf tem as seguintes capacidades de formatação
de entrada:
• Entrada de todos os Npos de dados
• Entrada de caracteres específicos de um stream de entrada
• Salto de caracteres específicos no stream de entrada 55
Leitura da Entrada Formatada
com scanf
• A função scanf é escrita no seguinte formato:
scanf (string-de-controlo-de-formato, outros-argumentos);
• string-de-controlo-de-formato descreve os formatos da
entrada, e outros-argumentos são ponteiros para as variáveis
em que a entrada será armazenada.

• Ao inserir dados, peça ao uglizador um item de dado ou alguns poucos


itens de cada vez
• Evite pedir ao uglizador que digite muitos itens de dados em resposta
a um único pedido

• Sempre considere o que o utilizador e o seu programa farão quando (e


não se) dados incorretos forem inseridos — por exemplo, um valor 56
para um inteiro que não faz sentido no contexto de um programa, ou
uma string em que faltam pontuação ou espaços
Leitura da Entrada Formatada
com scanf
• Especificadores
de conversão
usados na
inserção de
todos os %pos
de dados

57
Exemplo

58
Referê ncias Bibliográ >icas
• Apontamentos da disciplina Fundamentos de programação
2021/2022, ENIDH, CTEsp-RSI, por Valéria Pequeno
• Apontamentos da disciplina Estruturas de Dados Avançadas, Puc-Rio
(Brasil), por Marco A. Casanova
• Introdução à programação usando C, António Rocha, FCA, 3ª edição
• C for everyone: Programming Fundamentals, Universidade da
Califórnia, Santa Cruz (disponível no coursera:
h€ps://www.coursera.org/learn/c-for-everyone
• C, como programar. Paul Deitel, Harvey Deitel, Pearson, 6ª edição,
59
cap. 9
Material de Apoio
• h€ps://www.tutorialspoint.com/cprogramming/index.htm
• h€p://publicaNons.gbdirect.co.uk/c_book/: Página com a versão gratuita
da segunda edição do livro The C Book, de Mike Banahan, Declan Brady e
Mark Doran, publicado pela Addison Wesley em 1991
• h€p://www.cyberdiem.com/vin/learn.html: Learn C/C++ today, de V.
Carpenter. Uma coleção de referências e tutoriais sobre as linguagens C e
C++ disponíveis na Internet
• Cursos gratuitos:
• C for everyone (Coursera): hKps://www.coursera.org/learn/c-for-
everyone - Nível básico
• C for Everyone: Structured Programming (Coursera):
hKps://www.coursera.org/learn/c-structured-programming
• C essenCal (Cisco/OpenEDG): hKps://edube.org/study/ce1 - nívelbásico 60
Material de Apoio
• h•p://c-faq.com/index.html: Perguntas frequentes sobre a
linguagem C, e suas respostas (em inglês)
• h•p://cm.bell-labs.com/cm/cs/who/dmr/chist.html: "The
Development of the C Language", Dennis M. Ritchie (Janeiro
de 1993)
• h•p://www.livinginternet.com/i/iw_unix_c.htm: "History of
the C Programming Language", Stewart, Bill (Janeiro de 2000)
• h•p://www.cs.ucr.edu/ nxiao/cs10/errors.htm: "10 Common
Programming Mistakes in C"
• h•p://www.youtube.com/watch?v=XHosLhPEN3k (vídeo)

61

Você também pode gostar