Laboratório de Programação 02 - PUC-SPjarakaki/lic/Revisao Linguagem C e... · 2019-01-31 ·...
Transcript of Laboratório de Programação 02 - PUC-SPjarakaki/lic/Revisao Linguagem C e... · 2019-01-31 ·...
Laboratório de Programação 02
Ambiente de Desenvolvimento e Revisão da Linguagem C
Prof. Carlos Eduardo de Barros PaesProf. Julio Arakaki
Departamento de ComputaçãoPUC-SP
Code::Blocks
• Ambiente integrado de desenvolvimento (IDE - IntegratedDevelopment Environment)
• O Code::Blocks é um software livre (sob GNU General Public License) multiplataforma (Windows, Linux, Mac e etc..)
• Também pode ser usado para o desenvolvimento de programas em outras linguagens (Ex: Python)
• URL da ferramenta: http://www.codeblocks.org/
• Tutorial: Profa. Juliana Kaizer Vizzotto (UFSM)
Code::Blocks
• Vamos utilizar a IDE para realizas as operações mais simples• Criar um projeto, compilar, executar e depurar
Code::Blocks
• Na figura abaixo podemos verificar a aparência da IDE. A parte direita é usada principalmente para a edição de arquivos. Como é um editor com abas, podemos editar vários arquivos ao mesmo tempo. Abaixo do editor, temos a janela de mensagens, que imprime principalmente os resultados de compilação de programas. Na parte esquerda temos a aba com as informações do projeto com seus arquivos
Code::Blocks
• Para criar um projeto, deve-se selecionar a opção “File >> New >> Project “. Para construir o projeto, precisamos basicamente colocar um nome e um diretório para armazenamento, assim como selecionar a linguagem (C ou C++) e o tipo de aplicação
• O tipo de aplicação mais adequado é chamado de “Console Application “, como mostra a figura abaixo
Code::Blocks
• Na sequência seleciona-se a linguagem de programação a ser utilizada no projeto. A IDE oferece por default as linguagens C ou C++.
• Depois de selecionar a linguagem é necessário escolher um nome para o projeto e um diretório para armazenamento, como ilustrado a seguir.
Code::Blocks
• A seguir é necessário selecionar um compilador para ser utilizado, assim como modos de compilação:
Code::Blocks
• Em geral os perfis oferecidos inicialmente pela IDE são adequados para os nossos projetos de aula, i.e., utilizar o compilador `GNU CGG compiler`. O debug servirá para o processo de análise do programa. Como o próprio nome diz, o processo de debug é a fase de busca e redução de bugs no programa.
• Pronto! Após clicar em `finish`, o projeto foi criado, assim como o arquivo `main.c` (do inglês, main significa principal), que aparecerá no diretório escolhido como arquivo principal de compilação.
• Agora que o projeto foi criado, você pode observá-lo na aba `Management`. Se você clicar sobre o projeto, ele vai abrir os arquivos criados automaticamente com a criação do projeto. Você pode criar no arquivo `main.c` para editá-lo na aba de edição à direita.
Code::Blocks
Linguagem C é
• Propóstio geral
• Estruturada
• Procedural / imperativa
• Para uso com o Unix
• Muito usada para desenvolver sistemas e aplicativos
• Disponível para muitas plataformas
• Padronização ANSI (American National Standards Institute)
Linguagem C é
• Considerada de nível médio
• C permite manipular bits, bytes e endereços de memória como uma linguagem de baixo nível
• C possui construções e rotinas como linguagens de alto nível
• C é para profissionais; Uso primário para desenvolvimento de sistemas
Estrutura de um programa em C
Programa C
• Directivas ao Pré-Processador
- Includes
- Macros
• Declarações Globais
- Funções
- Variáveis
• Definição das Funções
main ()
{ /* begin */
} /* end */
Estrutura de um programa em C
/* Primeiro Programa em C */
#include <stdio.h>
main()
{
printf(“Meu primeiro programa em C\n”);
}
Estrutura de um programa em 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*/
} /*marca fim da função*/
Processo de Compilação em C• O processo de compilação, na verdade, se dá em duas
etapas:• Fase de tradução: programa-fonte é transformado em um
programa-objeto.• Fase de ligação: junta o programa-objeto às instruções
necessárias das bibliotecas para produzir o programa executável.
ProgramaFonte Compilador
Programa Objeto
LigadorPrograma Executável
Programa Objeto das Bibliotecas
Bibliotecas
• Conjunto de funções que permitem 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” ou
#include <minha_biblioteca.h>
17
Dicas
• Termine todas as linhas com ;
• Sempre salve o programa antes de compilar
• Sempre compile o programa antes de executar
• Verifique também a linha anterior, que pode ser a responsável pelo erro, especialmente se faltar o ;
• Use comentários, iniciados por //
Declarações
• Declaram as variáveis e seus tipos
• Os nomes das variáveis devem conter apenas letras, dígitos e o símbolo _
• Os principais tipos são: int, float, double e char
• Exemplosint n;
int quantidade_valores;
float x, y, somaValores;
char sexo;
char nome[40];C diferencia letras maiúsculas de minúsculas!int n, N;
n é diferente de N!
19
Comando de atribuição
• Atribui o valor da direita à variável da esquerda• O valor pode ser:
• uma constante,• uma variável ou • uma expressão
• Exemplosx = 4; --> lemos x recebe 4
y = x + 2;
y = y + 4;
valor = 2.5;
sexo = 'F'
20
Entrada e Saída de Dados
21
Entrada de Dados
• Função scanf scanf ("formatos", &var1, &var2,...)
Exemplos:
int i, j;
float x;
char c;
scanf("%d", &i);
scanf("%d %f", &j, &x);
scanf("%c", &c);
scanf("%s", nome);
%d inteiro%f float%lf double%c char%s palavra
22
Operadores Matemáticos
Decrementa em 1 o valor de xx----
Incrementa em 1 o valor de xx++++
Resto da divisão de x por yx % y %
Divide x por yx / y /
Multiplica x e yx * y*
Subtrai y de xx – y -
Soma x e yx + y+
ComentárioExemploOperador
23
Saída de Dados
• Função printfprintf ("formatos", var1, var2,...)
Exemplos:
int i, j;
float x;
char c;
printf("%d", i);
printf("%d, %f", j, x);
printf("%c", c);
printf("%s", nome);
%d inteiro%f float%lf double%c char%s palavra
24
Operadores de Atribuição
Equivale a x = x % yx %= y%=
Equivale a x = x / yx /= y /=
Equivale a x = x * yx *= y *=
Equivale a x = x – yx -= y-=
Equivale a x = x + yx += y +=
Atribui o valor de y a xx = y=
ComentárioExemploOperador
25
Funções Matemáticas
Tangente de xtan(x)tan
Raiz quadrada de xsqrt(x)sqrt
Seno de xsin(x)sin
Calcula x elevado à potência ypow(x, y)pow
Logaritmo decimal de xlog10(x)log10
Logaritmo natural de xlog(x)log
Arredonda o número deal para baixo; floor(3.2) é 3floor(x)floor
Valor absoluto de xfabs(x)fabs
e elevado à potencia xexp(x)exp
Cosseno de x (x em radianos)cos(x)cos
Arredonda o número real para cima; ceil(3.2) é 4ceil(x)ceil
ComentárioExemploFunção
#include <math.h>
26
Operadores Relacionais
O conteúdo de x é maior que o de yx > y>
O conteúdo de x é menor que o de yx < y <
O conteúdo de x é maior ou igual ao de yx >= y >=
O conteúdo de x é menor ou igual ao de yx <= y<=
O conteúdo de x é diferente do de yx != y !=
O conteúdo de x é igual ao de yx == y==
ComentárioExemploOperador
As expressões relacionais em C retornam :
• 1 se verdadeiro e;
• 0 se falso.
27
Operadores Lógicos• && (E lógico): retorna verdadeiro se ambos os operandos são
verdadeiros e falso nos demais casos.Exemplo: if( a>2 && b<3).
• || (OU lógico): retorna verdadeiro se um ou ambos os operandos são verdadeiros e falso se ambos são falsos.Exemplo: if( a>1 || b<2).
• ! (NÃO lógico): usada com apenas um operando. Retorna verdadeiro se o operando é falso e vice-versa.Exemplo: if( !var ).
Estrutura
Sequencial
Estrutura
com desvio condicionalEstrutura
Iterativa
Estruturas de Controle
Todas as linguagens imperativas incluem um seletor
unidirecional. O seletor unidirecional do C, chamado instrução lógica IF, tem a forma:
IF (<expressão booleana>) <instrução>
Neste caso apenas um comando está sujeito à condição
do comando IF.
Seleção Unidirecional
Seleção UnidirecionalOutra forma de se vincular mais de uma instrução em um
comando de seleção é utilizar instruções compostas
Abaixo está descrita a sintaxe para uma seleção
bidirecional em C/C++:
if (<expressão booleana>) {
{<instrução>}
} else {
{<instrução>}
}Caso o resultado da expressão booleana seja verdade a 1ª
instrução será executada e a 2ª instrução não. E caso seja
falsa a 1ª não será executada e a 2ª sim.
No lugar destas instruções poderiam ser colocadas
instruções compostas para que mais de um comando
estivesse vinculado ao comando if em cada situação.
#include <stdio.h>
void main() {
int x, totPAR=0, totIMPAR=0;
printf(“Entre com um número:”);
scanf(“%d”,&x);
if ((x % 2) == 0){
printf(“O número é par!”);
totPAR += x;
} else {
printf(“O número é ímpar!”);
totIMPAR += x;
}
printf(“Total par:%d, total impar:%d”,totPAR,totIMPAR);
}
Veja um exemplo de utilização de uma seleção Bidirecional
e instruções compostas:
Seleção Bidirecional
De acordo com o resultado da expressão inteira uma das
instruções será executada. Se o resultado for 1, a primeira
instrução é executada, se for 2 a segunda e assim por
diante.
Seleção Múltipla
A seleção múltipla em C tem a seguinte forma:
switch (<expressão>) {
{case <expressão constante 1>:{<instrução 1> }}
default:
{<instrução> }
}
Seleção Múltipla
Um problema com esta estrutura é que os blocos de
instruções em cada “case” iniciam sua execução e
terminam ao final do switch, então neste caso deveremos
utilizar o comando break que desviará a execução do código para a próxima instrução depois do fim do bloco.
Introduzindo o comando break ao final de cada bloco de
instruções do comando switch teremos como resultado:
switch (<expressão>) {
{case <expressão constante>:{<instrução> };break;}
default:
<instrução>
}
Exemplo#include <stdio.h>
void main ()
{
int num;
printf ("Digite um numero: ");
scanf ("%d",&num);
switch (num) {
case 9: printf ("\n\nO numero e igual a 9.\n");
break;
case 10:printf ("\n\nO numero e igual a 10.\n");
break;
case 11:printf ("\n\nO numero e igual a 11.\n");
break;
default: printf ("\n\nO numero nao e nem 9 nem 10 nem 11.\n");
}
}
Instruções Iterativas
Instruções Iterativas lógicas com pré-teste
Estruturas de Controle
Pré-teste
Instruções Iterativas lógicas com pós-teste
Estruturas de Controle
Pós-teste
Instruções Iterativas com contagem
Estruturas de Controle
inicia, controla
e incrementa
o contador
Laços Controlados por Contador
Uma instrução iterativa de controle de contagem tem uma
variável de laço, na qual o valor da contagem é mantido. Ela
também possui alguns meios de especificar os valores
inicial e terminal da variável de laço e a diferença entre seus
valores seqüenciais, freqüentemente chamados stepsize, As
especificações iniciais, as terminais e os stepsize de um
laço são chamados de parâmetros do laço.
Estruturas de Controle
Na linguagem C ou C++ a forma geral é:for (<expressão1>; <expressão2>; <expressão3>)
<corpo do laço>
O corpo do laço pode ser: uma instrução única; uma
instrução composta ou uma instrução nula.
A primeira expressão é avaliada uma única vez quando se
inicia o loop. Normalmente é utilizada para inicializações.
A segunda expressão é o controle do laço avaliada antes de
cada execução do corpo do mesmo.
A terceira expressão é executada depois da execução do
corpo do laço. Normalmente utilizada para incrementos de
variáveis.
Estruturas de ControleLaços Controlados por Contador
Exemplo típico da utilização do laço de contagem:
for (indice = 0; indice <= 10; indice++)
soma = soma + lista [indice];
Pode-se utilizar instruções múltiplas no caso da linguagem
C e C++. Veja o exemplo:
for ( cont1 = 0, cont2=0.0;
cont1 <= 10 && cont2 <= 100.0;
soma = ++cont1 + cont2, cont2 *= 2.5);
Estruturas de ControleLaços Controlados por Contador
Laços Controlados Logicamente
Muitas vezes não sabemos exatamente a quantidade de
vezes que um determinado laço será executada, portanto, a
utilização de laços controlados por contador não são os
mais adequados.
Nestes casos, são utilizados os laços controlados
logicamente. A continuidade da repetição do laço depende
de uma expressão lógica.
Estruturas de Controle
Questões de projeto
O controle deverá ser de pré ou pós teste?
O laço controlado logicamente deverá ser uma forma
especial de laço de contagem ou uma instrução lógica
independente?
Exemplos:while (<expressão>)
<corpo do laço>
oudo
<corpo do laço>
while (<expressão>)
Estruturas de ControleLaços Controlados Logicamente
Uma instrução lógica
independente seria o caso
de que a expressão lógica
do laço não depende de
uma variável contadora.
Localização do controle do laço
Quando devemos colocar o controle do laço no início ou no
final do corpo? Ao colocar o controle no início, o teste será
efetuado antes da execução do corpo, e por isso mesmo,
corre o risco de não ser executado nenhuma vez. No caso
de colocar o controle na base, o corpo do laço será
executado pelo menos uma vez.
Existem situações em que é conveniente para o
programador posicionar o controle do laço no interior do
corpo ao invés de no início ou na base. Por isso, algumas
linguagens oferecem essa capacidade.
Estruturas de ControleLaços Controlados Logicamente
O C e o C++ possuem o comando continue que desvia a
execução do programa da sua localização dentro do corpo
do laço até o final do corpo. Este comando não encerra a
execução do loop.
No caso do comando break a execução do código também
é desviada para o final do corpo do laço, porém, o laço será
terminado.
Estruturas de ControleLaços Controlados Logicamente
Os exemplos abaixo ilustram a utilização do continue e do
break. No primeiro caso um valor negativo que seja lido a
partir da função getnext será ignorado e portanto, não
acumulado na variável soma. No segundo caso um valor
negativo encerra o loop.
Estruturas de Controle
while (soma < 1000) {
getnext(valor);
if (valor<0) continue;
soma+=valor;
}
while (soma < 1000) {
getnext(valor);
if (valor<0) break;
soma+=valor;
}
Laços Controlados Logicamente