Algoritmos e Lógica de Programação
Introdução
P é d
Linguagem C Linguagem C
Reinaldo Gomes reinaldo@cefet-al.br
Pré-processador Variáveis Operadores
Introdução: Histórico
Linguagem criada por Dennis Ritchie em 1972
Linguagem de Programação C
Linguagem criada por Dennis Ritchie em 1972
Em 1973 foi utilizada para reescrever o UNIX
Surgem diversas versões da Linguagem C, porém os códigos gerados eram incompatíveis
ANSI (American National Standard Institute), em 1983 padronizou a Linguagem C
padronizou a Linguagem C
O objetivo do curso é utilizar C ANSI
Utilizando características especiais de uma versão especifica de C, não há garantia que o programa seja compilado em outra versão de C
Introdução: C comparada a outras linguagens
Devemos entender Nível Alto como sendo a
Linguagem de Programação C
Devemos entender Nível Alto como sendo a
capacidade da linguagem em compreender instruções escritas em “dialetos” próximos da linguagem falada (Pascal, por exemplo) e Nível Baixo para aquelas linguagens que se aproximam do Assembler, que é a linguagem própria da máquina, compostas por
instruções binárias e outras incompreensíveis para o ser humano não treinado para este propósito.
Linguagem de Programação C
Introdução: C comparada a outras linguagens
Nível Baixo Nível Médio Nível Alto
Velocidade
Clareza / Simplicidade
A bl C Basic Pascal Ada
Assembler C
COBOL
Basic Pascal Ada Modula -2
Linguagem de Programação C
Introdução: Características da Linguagem
PortabilidadePortabilidade
Modularidade
Linguagem compilada com geração de código compacto e rápido
Recursos de baixo nível
Si li id d F ilid d d (Alt í l)
Simplicidade e Facilidade de uso (Alto nível)
Linguagem de Programação C
Introdução: Características da Linguagem
Alia, portanto, características de linguagens de alto e p g g baixo nível (liberdade ao programador).
Pode ser usada para os mais variados propósitos
Indicada para escrever software básico (SO, BD, Editores de texto, planilhas, etc.).
Para criar um programa
Para criar um programa ...
Utilize um editor para criar o código fonte;
Utilize um compilador e um linkeditor para gerar o programa executável
Sugestão: Dev C++ for windows – www.bloodshed.net
Linguagem de Programação C
Introdução: Palavras Reservadas
São palavras que têm um significado especial para a São palavras que têm um significado especial para a linguagem
• break, case, if, for, while, return, const, do, else, continue, switch, int, double, unsigned, long, char, float...
C entende tais palavras apenas em letrasC entende tais palavras apenas em letras minúsculas
Linguagem de Programação C
Introdução: Bibliotecas
Conjunto de funções para realizar tarefas específicasConjunto de funções para realizar tarefas específicas.
Biblioteca padrão C - ANSI - funções básicas.
As primeiras linhas do programa indicam as bibliotecas utilizadas
• #include <minha_biblioteca.h>
Exemplos:
Exemplos:
• stdio.h – Funções de entrada e saída
• math.h – Funções matemáticas comuns
• string.h – Funções para manipular strings.
Linguagem de Programação C
Introdução: Estrutura de um programa C
Os programas começam com a função main( )Os programas começam com a função main( )
A função main( ) é obrigatória
{ e } identificam o início e o fim de um bloco de comandos
As variáveis são declaradas imediatamente depois da abertura do bloco da função (depois da { )
abertura do bloco da função (depois da { )
Declarações iniciadas por # identificam comandos para o pré-processador (diretivas)
• #include <stdio.h>
• #define TAMANHO 10
/* Primeiro Programa em C */
Linguagem de Programação C
Introdução: Estrutura de um programa C
/ Primeiro Programa em C /
#include <stdio.h>
main(){
printf(“Meu primeiro programa em C\n”);
}
/* P i i P C */ tá i
Linguagem de Programação C
Introdução: Estrutura de um programa C
/* Primeiro Programa em C */ comentários
#include <stdio.h> /*biblioteca de E/S */
main() /*função principal – inicio do programa*/
{ /*marca início da função*/
printf(“Meu primeiro programa em C\n”);
/*função para escrever na tela*/ç p
system (“PAUSE”); /* Espera qq tecla pra sair } /*marca fim da função*/
Instruções terminam com ponto-e-vírgula
A função system()
A função system() executa um comando interno do sistema operacional
do sistema operacional
/* Primeiro Programa em C */
#include <stdio.h>
main(){
printf(“Meu primeiro programa em C\n”);
system(“dir”);
system (“pause”);
}
O pré-processador e a diretiva include
O pré-processador examina o programa fonte em C e executa certas modificações baseados em diretivas
A diretiva include
#include <stdio.h>
#include <stdlib.h>
#include “meuArquivo.h”
I l i i f
Inclui outro arquivo em um programa fonte
As alterações são inseridas antes da compilação
Pode ser usado com <> (procura arquivo apenas na pasta include) e com “” (procura primeiro no diretório corrente e depois na pasta include)
O pré-processador C
Executa modificações no código fonte antes da compilação
Faz parte do compilador e executam diretivas
As diretivas podem ser colocadas em qualquer lugar do programa
As mais usadas são:
#define #ifndef
#define #ifndef
#undef #else
#include #elif
#if #endif
#ifdev #error
O pré-processador C
#define
Define constantes com nomes apropriados. Executa p p uma substituição textual.
Não há substituição dentro de cadeia de caracteres (strings)
Ex: #define PI 3.14
Ex2: #define ERRO printf(“\a\aERRO”) . . .
if (Zebra) ERRO;
. . .
O pré-processador C
#define e const
A diretiva #define realiza uma substituição textualA diretiva #define realiza uma substituição textual
O qualificador const é tipado, ou seja, pode ser utilizado pelo compilador para detecção de erros e devem ser inicializadas sempre.
int main()t a () { int i,j;
const double Pi = 3.1416;
system("PAUSE"); return 0;
O pré-processador C
Macros
#include <stdio.h>
#include <stdlib h>
#include <stdlib.h>
#define PRN(n) printf("%.2lf\n", (double)n) int main()
{ int n1,n2;
n1=1416;
n2=n1/2;
PRN(n1); /* Chamada a macro */
PRN( 2) /* Ch d */
PRN(n2); /* Chamada a macro */
system("PAUSE");
return 0;
}
O pré-processador C
#undef
Remove a mais recente definição criada com #defineRemove a mais recente definição criada com #define
• #define GRANDE 3
• #define GRANDE 8
• #undef GRANDE
O pré-processador C
#include
Incluem um outro arquivo no programa fonteq p g
O outro arquivo é um texto ASCII que incorporam definição de constantes, protótipos de funções, definições de tipos de dados complexos e declarações de variáveis externas;
#if, #elif, #else e #endif
Cada diretiva #if deve terminar com a diretiva #endif
Cada diretiva #if deve terminar com a diretiva #endif
Entre #if e #endif pode ser colocado qualquer número de
#elif mas só se permite uma diretiva #else
A #else é opcional, mas se estiver presente deve ser a última anterior a #endif
O pré-processador C
Ex.
#if CORES > 5
#if CORES > 5
#define SOMBRA 1
#if COR_FUNDO == 1
#include “cor_fundo.h”
#else
#include “sem_fundo.h”
#endif
#endif
Linguagem de Programação C
Tipos de Dados
Tipos InteirosTipos Inteiros
• char: 1 byte e escala de -128 a 127
• unsigned char: 1 byte e escala de 0 a 255
• int: 2 bytes e escala de -32768 a 32767
• unsigned int: 2 bytes e escala de 0 a 65535
• long: 4 bytes
Linguagem de Programação C
Tipos de Dados
Tipos FlutuantesTipos Flutuantes
• float: 4 bytes e escala de 3.4e-38 a 3.4e+38
• double: 8 bytes e escala de 1.7e-308 a 1.7e+308
Linguagem de Programação C
Variáveis
Variável: elemento que pode assumir diversos valores;Variável: elemento que pode assumir diversos valores;
Espaço de memória de um certo tipo de dado
associado a um nome para referenciar seu conteúdo.
Não podemos definir um identificador com o mesmo nome que uma palavra chave
C é case sensitive:
C é case-sensitive:
• peso ≠ Peso ≠ pEso
Linguagem de Programação C
Variáveis
As variáveis são declaradas depois da abertura do As variáveis são declaradas depois da abertura do bloco da função (depois da { )
Sintaxe:
• tipo nome-da-variável; ou
• tipo nome1, nome2, ..., nomeN; ou
• tipo nome-da-variável = valor default;tipo nome da variável valor_default;
– Ex.: char nome;
– int idade, num;
– int soma = 0;
#include <stdio.h>
Linguagem de Programação C
Exemplo: tipos de dados e variáveis
main( ) {
int soma = 10;
float money = 2.21;
char letra= ‘A’;
printf(“valor de soma = %d\n”, soma);
printf( valor de soma %d\n , soma);
printf(“Valor de Money = %f\n”, money);
printf(“Valor de Letra = %c\n”, letra);
}
Linguagem de Programação C
Variáveis globais
Declaração: fora do corpo de qualquer função
Possuem como escopo todas as rotinas da aplicação
São alocadas em tempo de compilação e ocupam memória durante toda a execução do programa
Observações
• Caso se tente declarar uma variável global de mesmo nome g mais de uma vez, o compilador indicará um erro de identificador duplicado
• Caso se esteja trabalhando em uma aplicação com mais de um módulo (arquivos fontes) é preciso fazer uma indicação ao compilador que as variáveis globais já estão declaradas em
Linguagem de Programação C
Variáveis globais – exemplo de uso
Linguagem de Programação C
Variáveis globais
Não é obrigatório mas é melhor declarar variáveis Não é obrigatório, mas é melhor declarar variáveis globais no início do programa
Deve-se evitar o uso de variáveis globais desnecessárias
A declaração de muitas variáveis globais pode levar a erros por causas desconhecidas
Linguagem de Programação C
Modificador de declaração extern
Indica ao compilador que os nomes e tipos que se Indica ao compilador que os nomes e tipos que se seguem já foram declarados em um outro módulo da aplicação
Exemplo
Linguagem de Programação C
Modificador de declaração static
Principais usos:Principais usos:
• Declaração de variáveis estáticas locais
• Declaração de variáveis estáticas globais
Variáveis estáticas locais
• São variáveis que são visíveis apenas na função onde foram declaradas, como as variáveis locais,
• Diferença: mantêm seus valores entre chamadas de função, como as variáveis globais.
• Exemplo do seu uso: um gerador de série de números que produz um novo valor baseado no anterior
Linguagem de Programação C
Modificador de declaração static - Exemplo
Linguagem de Programação C
Exemplo: Função que requer o uso de um modificador static local
modificador static local
Gerador de números sequenciais que produz um novo valor baseado no anterior
int series(void){
t ti i t S i 100 static int numSerie = 100;
numSerie = numSerie + 10;
return(numSerie);
}
Linguagem de Programação C
Variáveis estáticas globais
São variáveis globais que são enxergadas apenas no São variáveis globais que são enxergadas apenas no módulo (arquivo fonte) onde foram declaradas.
Exemplo
Linguagem de Programação C
Exemplo - Continuação
Linguagem de Programação C
Variáveis tipo register
Na prática caracteres inteiros são colocados nos Na prática, caracteres inteiros são colocados nos registradores da CPU
O especificador register só pode ser aplicado a variáveis locais e parâmetros formais;
Ideais pra o controle de laços
• Muitas referências a uma mesma variável
• Muitas referências a uma mesma variável.
Exemplo
Linguagem de Programação C
Operador de Atribuição
Em C o operador de atribuição é o sinal de igual “ =”Em C o operador de atribuição é o sinal de igual
É comum programadores iniciantes na Linguagem C confundirem o “=“ com o operador lógico de igualdade “==“
Assim são corretas as expressões int x = 0; e if (x == 4)
Assim, são corretas as expressões int x = 0; e if (x == 4)
Está errada a expressão (caso a intenção seja um teste) if (x = 0)
Operador Ação
Operadores Aritméticos
+ Adição
* Multiplicação
/ Divisão
% Resto da divisão inteira
‐ Subtração
‐‐ Decremento
++ Incremento
Operador Ação
Operadores Lógicos e Relacionais
> Maior que
>= Maior ou igual que
< Menor que
<= Menor ou igual que
== Igual a
! Dif d
!= Diferente de
&& Condição “E”
|| Condição “OU”
! Não
Operador Ação
Incremento e Decremento
i +=2; i = i + 2;
d ‐= 3; d = d – 3;
x *= y + 1; x = x * (y + 1);
y = x = 0; y = 0; x = 0;
x‐‐; x = x – 1;
++x; x = x + 1;
++x; x = x + 1;
y = x‐‐; y = x; x = x – 1;
y = ++x; x = x + 1; y = x;
y = ++x + 2; x = x + 1; y = x + 2;
y = 1 + x‐‐; y = 1 + x; x = x – 1;
int main()
O modificador unsigned (sem sinal)
Linguagem de Programação C
int main() {
unsigned j = 429496700UL;
int i = j;
printf (“\n Variavel unsigned = %u", j);
printf (“\n Variavel int = %d", i);
system ("pause");
return 0;
}
O bit mais significativo de uma variável é:
0 Æse o número for positivo
1 Æse o número for negativo
Unsigned ignora o bit de sinal
Operadores cast e sizeof
Operador cast - conversão de tipos:
Linguagem de Programação C
Operador cast conversão de tipos:
• float f = 3.5;
int i = (int) f; /* i será igual a 3 */
Operador sizeof() - retorna o tamanho da variável em bytes:
bytes:
• Ex.: sizeof(i) resultaria em 2.
• Ex.: sizeof(char) resultaria em 1.
Conversões de Tipos
Quando forem misturadas variáveis de diferentes tipos,
Linguagem de Programação C
o compilador C converterá os operandos para o tipo de p , operando maior, de acordo com as regras descritas a seguir:
• Todo char e short é convertido para int.
• Todo int é convertido para float.
• Todo float é convertido para doubleTodo float é convertido para double.
Sempre de acordo com o tamanho e a escala de
cada tipo!
Operador de endereço &
Toda variável ocupa uma área de memória e seu
Linguagem de Programação C
Ex:
Main ( ) Saída: valor = 2, endereço = FA01
Varia conforme memória da máquina
Toda variável ocupa uma área de memória e seu endereço é o primeiro byte por ela ocupado
Quando usamos & precedendo uma variável estamos falando do endereço desta variável na memória
{
int num;
num = 2;
printf(“valor = %d, num);
printf(“ endereço = %x”, &num);
}
Varia conforme memória da máquina
Operadores - OBSERVAÇÕES:
Em C o resultado de uma expressão resultará ZERO
Linguagem de Programação C
Em C, o resultado de uma expressão resultará ZERO se for avaliada como FALSA, e resultará UM no caso de ser avaliada como VERDADEIRA.
Em C, considera-se o valor ZERO como sendo FALSO e qualquer número DIFERENTE DE ZERO como sendo e qualquer número DIFERENTE DE ZERO como sendo VERDADEIRO.
Operadores – EXEMPLO 1:
Linguagem de Programação C
#include <stdio.h>
main ( ) {
int verdadeiro, falso;
verdadeiro = (15 < 20);
Saída: Verd.= 1 Falso = 0
verdadeiro = (15 < 20);
falso = (15 == 20);
printf(“Verdadeiro = %d”, verdadeiro);
printf(“Falso = %d\n”, falso);
}
Operadores – EXEMPLO 2:
Observa-se que ++x é diferente de x++!
Linguagem de Programação C
Se
x = 10;
y = ++x;
Se
x = 10;
y = x++;
Observa se que ++x é diferente de x++!
/* x=x+1; y=x; */
então x = 11 e y = 11
/* y=x; x=x+1 */
então x = 11 e y = 10
#include<stdio h>
Linguagem de Programação C
Operadores – EXEMPLO 3:
#include<stdio.h>
main() {
int n1 = 0, n2;
n2 = ++n1;
printf(“n1 = %d, n2 = %d\n”, n1, n2);
n2 = n1++;
printf(“n1 = %d, n2 = %d\n”, n1, n2);
}
Quais são as saídas deste programa ?
S
Operadores – EXEMPLO 4:
Linguagem de Programação C
Se
int x = 1;
int y = 2;
printf(“%d = = %d é %d\n”, x, y, x = = y );
Qual a saída deste comando?
resultaria em (1 == 2)=> 0 (zero) (pois a expressão é falsa)
if (10 > 4 && !(10 < 9) || 3 < 4)
Operadores – EXEMPLO 5:
Linguagem de Programação C
if (10 > 4 && !(10 < 9) || 3 <= 4)
Como seria avaliada esta instrução?
resultaria em Verdadeiro, pois dez é maior que quatro E dez não é menor que nove
q q q
OU três é menor ou igual a quatro
Exercícios
Implementar um programa que imprima a quantidade
Linguagem de Programação C
Implementar um programa que imprima a quantidade de bytes dos tipos:
• int
• float
• double
• char
Linguagem de Programação C
Constantes (Exercícios)
1. Calcular e imprimir o comprimento de um círculo.
2. Calcular e imprimir a área de um círculo.