aula 2fmario/mac2166/_downloads/aula2.pdf · aula 2 05/03/2015 linguagem c • linguagem...

23
Aula 2 05/03/2015

Upload: others

Post on 11-Sep-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Aula 205/03/2015

Page 2: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Linguagem C• Linguagem artificial e formal usada para comunicar

instruções ao computador. • Proposta por Dennis Ritchie entre 1969 e 1973.

Texto que segue as regras formais de sintaxe de C.Um programa em C é…

Linguagem de máquinaCompiladorPrograma

Page 3: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Como aprender a sintaxe

#include <stdio.h>

int main(){ printf(“Hello World!”); return 0;}

Page 4: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Tipos de dados (data types)Conjunto de valores e operações sobre esses valores.Definição

Tipo intTipo primitivo. Armazenar números inteiros.

VariáveisNome para um espaço da memória que possui determinado tipo.

Declaração de variável intint x;

Page 5: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

VariáveisApós declarar uma variável, podemos nos referir a ela:

int x;x = 5; /* Atribuição */

Antes da inicialização: valor indeterminado!

int x = 5; /* Evite erros! */

Nomes: letras, números, símbolos como underscore _. Nomes são case-sensitive.

int soma, x, y, x12, x_12, soma_abc, nome_bem_grande, NomeBemGrande;

Page 6: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

VariáveisPodemos usar variáveis em expressões. Para inteiros temos os operadores *, +, -, /.

int x = 5;int y;

y = 1 + 2 * x * (5 - 8 * x);x = x * y;

Page 7: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

SaídaComo mostrar informação ao usuário?

printf(“Hello World!”);

Texto entre aspas duplas, sem quebras de linha.

printf(“HelloWord!”);

printf(“Hello\nWorld!”);

Use a escape sequence \n:

Errado!

Page 8: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

SaídaComo mostrar números?

printf(“Um número %d”, 17);

%d é substituído por 17

int a = 5, b = 6;int produto = a * b;

printf(“%d vezes %d = %d”, a, b, produto);

Page 9: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

EntradaComo ler um inteiro?int x;scanf(“%d”, &x);

Programa completo:#include <stdio.h>

int main(){ int a, b, soma; scanf(“%d”, &a); scanf(“%d”, &b); printf(“Soma = %d\n”, a + b); return 0;}

Page 10: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

LaçosEscreva um programa que lê um número informado pelo usuário e imprime na tela o seu fatorial.

Podemos escrever esse programa com o que sabemos?

NÃO! Cada sentença é executada exatamente uma vez!

pedaço de código repetido várias vezes em seqüência.

Laço:

Page 11: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Comando while

while (expr) A;B; /* Primeira sentença após o laço */

Executa sentença A enquanto expr for verdadeira.

Uma expressão é verdadeira se resulta num número diferente de zero. É falsa se resulta em zero.

O comando while: 1. Calcula expr. Se o resultado for falso (igual a zero),

então pula para a sentença B, a primeira após o laço. 2. Se o resultado for verdadeiro, executa a sentença A e

pula para o passo 1.

Page 12: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Comando whilewhile (1) printf(“Hello World!”);

while (0) printf(“Hello World!”);

{ printf(“Hello World!\n”); printf(“Olá Mundo!\n”);}

Como executar mais de uma sentença por iteração? Blocos!

Tudo entre { e } se comporta como uma única sentença.

Page 13: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Comando whilewhile (1){ printf(“Hello World!\n”); printf(“Olá Mundo!\n”);}

Espaços, quebras de linha, não importam!

while (1) { printf(“Hello World!\n”); printf(“Olá Mundo!\n”);}

Page 14: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Primeiro exemplo

Escreva um programa que imprime a soma de uma seqüência de números terminada em ZERO fornecida pelo usuário.

Page 15: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Primeiro exemplo#include <stdio.h>

int main(){ int x = 1, soma = 0;

while (x) { scanf("%d", &x); soma = soma + x; }

printf("Soma = %d\n", soma);

return 0;}

Page 16: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Primeiro exemplo

aula2-1.c: In function ‘main’:aula2-1.c:17:5: error: expected ‘;’ before ‘soma’ soma = soma + x; ^

#include <stdio.h>int main(){ int x = 1, soma = 0;

while (x) { scanf("%d", &x) soma = soma + x; }

printf("Soma = %d\n", soma); return 0;}

Page 17: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

ComparaçõesOperadores de comparação de inteiros

int a = 5, b = 6, x;

x = a < b; /* a menor que b */x = a > b; /* a maior que b */x = a <= b; /* menor ou igual */x = a >= b; /* maior ou igual */x = a == b; /* igual */x = a != b; /* diferente */

Resultado: ZERO se comparação é falsa, NÃO-ZERO se é verdadeira.

Page 18: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Segundo exemploDado n e k � 0, inteiros, calcule nk

.

#include <stdio.h>

int main(){ int n, k; int prod = 1;

scanf("%d", &n); scanf("%d", &k);

(…)

int main(){ (…) while (k > 0) { prod = n * prod; k = k - 1; }

printf("%d\n", prod);

return 0;}

Page 19: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Terceiro exemploDado n � 0 inteiro, imprimir na tela n!.

#include <stdio.h>

int main(){ int n; int fatorial = 1;

scanf("%d", &n); (…)

int main(){ (…) while (n > 0) { fatorial = fatorial * n; n = n - 1; }

printf("%d\n", fatorial);

return 0;}

Page 20: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

ComentáriosTexto ignorado pelo compilador para ajudar na leitura do código.

/* Um pequeno exemplo.*/int x = 5; /* x é variável inteira */int x2 = x * x; /* x ao quadrado */

• Use, mas não exagere! • Não diga o óbvio, como acima.

Page 21: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Leiaute

#include <stdio.h>int main(){int x=1, soma=0;while (x) {scanf ("%d", &x);soma=soma+x;}printf(“%d”,soma);return 0;}

#include <stdio.h>

int main(){ int x = 1, soma = 0;

while (x) { scanf("%d", &x); soma = soma + x; }

printf("%d", soma);

return 0;}

Page 22: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Leiaute

#define r return

char*u0="<RET> to begin... ",*u1="Already been here!",*u2="Found a wall! \ ",*u3="Walking... ",*u4="Finished. ",*u5="Going back..\. ",*o="\033[23;1HDone!!\n",*x="\033[2J",*y="\033[1;1H",*z="\033[%d;%\dH%c",*w="\033[1;1H%s",*v="\033[%d;%dH%c\033[%d;%dH%c\033[%d;%dH%c",b[1841];int c,d,e,f,g;typedef int(*h)();h i,j,k,l,m,n;int printf(),srand(),rand(),time(),getchar();int main(int a){i=printf,j=srand,k=rand,l=time,m=getchar,n=main;if(!c)for(j(l(0)),g=a=1000,--d;++d<1840;b[c=d]=" #\n"[d%80==79?2:d/80&&d%80&&d/80-22&&d%80-78]);if(!(c-1839))++c,i("%s%s%s",x,y,b);k:if(!(c-1840)&&(b[a+2]+b[a-2]+b[a+160]+b[a-160]-4*' ')){while(b[a+(f=(e=k()%4)?e-1?e-2?-1:1:-80:80)*2]!='#');b[a]=b[a+f]=b[f+a+f]=' ';i(v,a/80+1,1+a%80,' ',(a+f)/80+1,1+(a+f)%80,' ',(f+a+f)/80+1,1+(f+a+f)%80,' ');n(f+a+f);goto k;}else if(!(g-a))c=1,a=162,i(w,u0),m();if(c-1){}else r b[a]!=' '?(i(w,b[a]=='.'?u1:u2),0):(b[a]='.',i(w,u3),i(z,a/80+1,1+a%80,'.'),a==1676?(i(w,u4),i(o),1):n(a+1)||n(a+80)||n(a-80)||n(a-1)?1:(b[a]=' ',i(w,u5),i(z,a/80+1,1+a%80,' '),0));r 0;}

Espaços, quebras de linha, não importam. Não?

The International Obfuscated C Code Contest http://www.ioccc.org

Page 23: Aula 2fmario/mac2166/_downloads/aula2.pdf · Aula 2 05/03/2015 Linguagem C • Linguagem artificial e formal usada para comunicar instruções ao computador. • Proposta por Dennis

Para próxima aula

• Resolva alguns (muitos!) dos exercícios para inteiros

• Leia sobre leiaute na página do professor Paulo Feofiloff (link no site)

• De uma olhada no Project Euler:

https://projecteuler.net