1/31
Fundamentos de ProgramaçãoCompilação por linha de comando. Ambiente integrado de desenvolvimento (IDE). Parâmetros de compilação. Estrutura de um programa em C. Paradigmas de programação. Operador de atribuição e armazenamento em variáveis. Funções de entrada e saída.
Aula 3Prof. Daniel Cavalcanti Jeronymo
Universidade Tecnológica Federal do Paraná (UTFPR)Engenharia Eletrônica – 2º Período2015.1
ET42G
2/31
Plano de Aula
• Operador de atribuição e armazenamento em variáveis
• Paradigmas de programação
• Estrutura de um programa em C
• Compilação por linha de comando
• Parâmetros de compilação
• Ambiente integrado de desenvolvimento
3/31
Operador de atribuição e armazenamento em variáveis
• Variável:
• Local de armazenamento associado com um identificador (nome simbólico).
• O nome permanece fixo porém a informação armazenada varia.
• Exemplos:
tipo variável1;
tipo variável2, Variável2; domínio da memória
duas variáveis diferentes!
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
4/31
Operador de atribuição e armazenamento em variáveis• Nomes de variáveis:
• Devem começar com uma letra ou um sublinhado “_”, não com um número.
• Pode conter letras, dígitos e “_”
• Não são permitidos espaços
• Diferença entre caixa alta e caixa baixa
• Não pode ser um nome reservado
Nomes reservados:
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
5/31
Operador de atribuição e armazenamento em variáveis
• Nomes corretos:
• Variavel, VaRiAvEl, nome_da_variável, nome_123, _123
• Nomes incorretos:
• nome da variavel, 123nome, variavel@123, nome-da-variavel, char
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
6/31
Operador de atribuição e armazenamento em variáveis
• Alcance (visibilidade) de variáveis:
• É o escopo de onde a variável pode ser acessada
• Variáveis declaradas fora de qualquer bloco: global
• Variável declarada dentro de um bloco: local
• Variáveis locais podem ser acessadas apenas pelo bloco de origem e seus descendentes
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
7/31
Operador de atribuição e armazenamento em variáveis
• Alcance (visibilidade) de variáveis:
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
8/31
Operador de atribuição e armazenamento em variáveis
• Operador de atribuição:
• Atribui valores a variáveis.
• Sintaxe:
variável = valor;
• Exemplos:
int a;
int b = 0;
int c = 2 + 5;
a = 10;
variável NÃO inicializada
variáveis inicializadas
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
9/31
Operador de atribuição e armazenamento em variáveis
• Operador de atribuição:
• Pode conter expressões no lado direito
variável = expressão;
• A expressão é calculada e o valor resultante é atribuído a variável
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
10/31
Operador de atribuição e armazenamento em variáveis• Operador de atribuição:
• O sinal de igual é o operador de atribuição
• Outros operadores serão vistos futuramente
• Sintaxe geral:
lvalue = rvalue
lvalue é uma variável
rvalue é uma expressão, constante ou variável
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
11/31
Paradigmas de Programação
• Paradigmas principais:
• Declarativa (what) x Imperativa (how)
• Não-estruturada x Estruturada
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
12/31
Estrutura de um programa em C
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
13/31
Compilação por linha de comando• Escreva o seguinte programa e salve-o como test.c:
#include <stdio.h>
int main(void)
{
printf(“Ola mundo!\n”);
return 0;
}
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
14/31
Compilação por linha de comando
• Abra o console (shell ou linha de comando) na pasta onde o arquivo test.c foi salvo e digite:
gcc.exe test.c –o test.exe
• !ERRO! No caso de erro afirmando que gcc.exe não foi encontrado, é necessário colocar a pasta do compilador no PATH.
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
15/31
Compilação por linha de comando
• Para ajustar o PATH digite no console:
set PATH=%PATH%;C:\Program Files (x86)\CodeBlocks\MinGW\bin
• Essa linha de PATH assume sistema operacional Windows x64 e CodeBlocksinstalado com MinGW.
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
16/31
Parâmetros de compilação
• Conseguiu compilar?
• Teste parâmetros diferentes do compilador: -E -S –c –o
• Compare os resultados obtidos com o esperado do ciclo de compilação.
• Na dúvida sobre cada parâmetro, procure referências do compilador!
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
17/31
Parâmetros de compilação
• Dessa vez utilize os seguintes parâmetros:
gcc.exe -pedantic-errors -Wextra -Wall -ansi test.c –o test.exe
• Leia no manual do GCC o que cada parâmetro faz!
https://gcc.gnu.org/onlinedocs/gcc-3.0.4/gcc_3.html
https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
18/31
Ambiente de Desenvolvimento
• Repita o processo de compilação.
• Dessa vez utilize uma IDE (Integrated DevelopmentEnvironment) da sua escolha
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
19/31
Exercícios
• Exercício 1 – Qual o valor armazenado em a ao final do programa?
int main(void){
int a, b=10, c, d;d = 1;c = 5;d = c + b;a = c + 2;a = a + 1;
}
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
20/31
Exercícios
• Exercício 2 – Implemente o algoritmo de solução do problema dos galões. Qual a saída de g5 e de g3?
int main(void){
int g5 = 0, g3 = 0;...printf(“%d %d\n”, g5, g3);return 0;
}
Variáveis Atribuição Paradigmas Estrutura C Compilação Parâmetros IDE Exercícios
21/31
Plano de Aula• Ponteiros para dispositivos
• Sequências de escape e identificadores de formato
• Funções de saída
• printf
• puts
• putchar
• Funções de entrada
• scanf
• gets
• getchar
22/31
Ponteiros para dispositivos
• Herança do Unix – no C todo dispositivo é um arquivo:
• As funções de entrada e saída utilizam os ponteiros stdin e stdout
• Algumas funções permitem especificar o ponteiro
Ponteiros Sequencias Saída Entrada Problemas
23/31
Sequências de escape e identificadores de formato
Ponteiros Sequencias Saída Entrada Problemas
24/31
Sequências de escape e identificadores de formato
http://www.cplusplus.com/reference/cstdio/printf/
Ponteiros Sequencias Saída Entrada Problemas
25/31
Saída
• int putchar(int c);
• Retorno: o caractere escrito como um inteiro ou EOF em caso de erro
• int puts(const char *s);
• Retorno: um número não-negativo em caso de sucesso ou EOF em caso de erro
Ponteiros Sequencias Saída Entrada Problemas
26/31
Saída
• int printf(const char *format, ...);
• Retorno: número de caracteres escritos ou, no caso de erro, um valor negativo
Ponteiros Sequencias Saída Entrada Problemas
27/31
Entrada
• int getchar(void);
• Retorno: caractere obtido ou EOF
• A variável para retorno deve ser um inteiro!
• Equivalente a getc(stdin)
• char *gets(char *s);
• Retorno: s no caso de sucesso, nulo em caso de EOF ou erro
Ponteiros Sequencias Saída Entrada Problemas
28/31
Entrada
• int scanf(const char *format, ...);
• Retorno: número de termos lidos ou EOF no caso de erro
Ponteiros Sequencias Saída Entrada Problemas
29/31
scanf - problemas• Misturando scanf com gets. Qual o problema do código abaixo?
int n = 0;
char str[80] = {0};
printf(“entre com um número: ");
scanf("%d", &n);
printf(“entre com uma string: ");
gets(str);
printf(“você digitou %d e \"%s\"\n", n, str);
Ponteiros Sequencias Saída Entrada Problemas
30/31
scanf - problemas
• Agora teste o seguinte código e veja o que acontece:
int c=0;
printf("Primeira linha\n");
scanf("%d",&c);
while((c = getchar()) != '\n' && c != EOF);
printf("Segunda linha %X\n", c);
Ponteiros Sequencias Saída Entrada Problemas
31/31
scanf - problemas• Moral da história: não misture scanf com outras funções de entrada!
Leia:
• Alternativas:
• Toda chamada para scanf deve acompanhar uma linha para limpar o buffer de entrada:
while((c = getchar()) != '\n' && c != EOF);
• Considere usar fgets + sscanf. Porque?
• NÃO USE fflush(stdin)! Porque?
http://c-faq.com/stdio/scanfinterlace.htmlhttp://c-faq.com/stdio/gets_flush2.html
Leia: http://c-faq.com/stdio/getcharc.html
Ponteiros Sequencias Saída Entrada Problemas