• Nenhum resultado encontrado

Programação em C/C++ ◼ Operadores relacionais

No documento Linguagem C C ppt (páginas 40-83)

❑ maior: ‘>’ ❑ maior ou igual: ‘>=’ ❑ menor: ‘<’ ❑ menor ou igual: ‘<=’ ❑ igualdade: ‘==’ ❑ diferença: ‘!=’

Programação em C/C++

Mecanismos de Controle de Execução

❑ Em C/C++, o teste condicional é realizado pela

instrução if:

if (teste) {

bloco de instruções caso

teste seja verdadeiro

} else {

bloco de instruções caso teste seja falso

Programação em C/C++

Mecanismos de Controle de Execução

❑ O início e o fim do bloco de comandos a serem

executados são determinados pelo uso de chaves.

❑ Em C/C++, considera-se falso qualquer coisa

igual a ZERO (nulo) e verdadeiro qualquer coisa

diferente de ZERO (não nulo).

Programação em C/C++

Mecanismos de Controle de Execução

❑ Em C/C++, existe um teste condicional

simplificado chamado “comando ternário”.

❑ A sintaxe é:

(teste) ? resultado1 : resultado2;

❑ Se teste é verdadeiro, a instrução retorna o

resultado1.

❑ Senão, o comando retorna resultado2.

Programação em C/C++

Mecanismos de Controle de Execução

❑ Existe também a instrução de seleção de caso.

❑ Dependendo do conteúdo de uma variável inteira,

a instrução desvia para o caso correspondente.

❑ O comando é o switch:

switch (variável) {

case valor:

bloco de instruções

Programação em C/C++

Mecanismos de Controle de Execução

switch(variável) { case valor1: bloco de instruções break; case valor2: bloco de instruções break; default:

Programação em C/C++

Mecanismos de Controle de Execução

❑ Pode haver quantos ‘cases’ forem necessários.

❑ O comando break faz com que a execução do

bloco se encerre.

❑ A ausência do break, faz com que a execução

invada outro case.

❑ Caso nenhuma das entradas corresponda ao

conteúdo de variável, a estrutura do switch possui

Programação em C/C++

Mecanismos de Controle de Execução

❑ Existem 3 comandos de repetição de

instrução/bloco de instruções: for, while e

do/while.

❑ A estrutura do comando for é:

for (var=valor; teste; incremento|decremento) {

bloco de instruções

Programação em C/C++

Mecanismos de Controle de Execução

❑ Exemplo:

for ( i=0; i<10; i=i+1 ) { bloco de instruções

}

for ( j=-1.0; j<1.0; j=j+1e-3 ) { bloco de instruções

Programação em C/C++

Mecanismos de Controle de Execução

❑ Exemplo:

for ( ; ; ) {

laço infinito

}

for ( i=10; i>=-10; i=i-2 ) { bloco de instruções

Programação em C/C++

Mecanismos de Controle de Execução

❑ O comando while executa o bloco de instruções

enquanto o teste de execução for verdadeiro.

❑ Estrutura da instrução while

while (teste) {

bloco de instruções

}

❑ O comando break pode ser usado no bloco de

Programação em C/C++

Mecanismos de Controle de Execução

❑ O comando do/while tem o mesmo

comportamento do comando while com a

diferença do teste estar no final do bloco de instruções.

❑ A estrutura do do/while é

do {

bloco de instruções

Programação em C/C++

Mecanismos de Controle de Execução

❑ Vale a pena observar que as instruções while e

do/while realizam praticamente o mesmo

processo lógico.

❑ No entanto, como o teste de continuidade do

comando do/while é no final do bloco, mesmo que

o teste seja falso, pelo menos uma execução do bloco de instruções se realizará.

Programação em C/C++

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <time.h>

int main(void) {/* inicio */ /* numero aleatorio */

int eps;

/* variavel auxiliar */

int i;

srand(time(NULL));

/* funcao geradora de numeros

aleatorios inteiros: rand() */ /* a funcao rand() gera inteiro

for ( i=0; i<10; i++ ) { eps = rand();

if (eps<RAND_MAX/10) {

printf(“\teps=%5d menor que

RAND_MAX/10\n”,eps); } else if (eps<RAND_MAX/2) {

printf(“\teps=%5d menor que

RAND_MAX/2\n”,eps); } else {

printf(“\teps=%5d\n”,eps); } } return 0; } /* fim */ gcc –o ex exemplo1.c ./ex

Programação em C/C++

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <time.h>

int main(void) {

/* numero aleatorio */

float eps;

/* variavel auxiliar */

int i;

/* funcao geradora de numeros

aleatorios inteiros: rand() */ /* a funcao rand() gera inteiro

entre 0 e a constante RAND_MAX */

printf("RAND_MAX: %d\n",RAND_MAX);

/* a funcao srand gera semente para

for ( i=0; i<10; i++ ) {

eps = (float)rand()/RAND_MAX;

if (eps<0.1) {

printf("\teps=%5.3f menor que 0.1\n",eps);

} else if (eps<0.5) {

printf("\teps=%5.3f menor que 0.5\n",eps);

} else {

printf("\teps=%5.3f\n",eps); }

}

return 0; }

Programação em C/C++

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <time.h>

int main(void) {

/* numero aleatorio */ float eps; /* variavel auxiliar */ int i; /* variaveis contadoras */ int c1, c2, c3, n; /* semente geradora */ srand(time(NULL));

for ( i=0; i<n; i++ ) {

/* numero eps entre 0 e 1*/

eps = (float)rand()/RAND_MAX;

if (eps<0.1) { c1++; /* ++c1; */ } else if (eps<0.5) { c2++; /* ++c2; */ } else { c3++; /* ++c3; */ } } printf(“Prob(eps<0.1)=%5.3f\n", (float)c1/n); printf(“Prob(0.1<=eps<0.5)=%5.3f\n", (float)c2/n); printf(“Prob(0.5<=eps<1)=%5.3f\n", (float)c3/n);

Programação em C/C++

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <time.h>

int main(void) {

/* numero aleatorio */ float eps; /* variaveis auxiliares */ char f1, f2, f3; int i; /* variaveis contadoras */ int c1, c2, c3, n; float p1, p2, p3; /* semente geradora */ srand(time(NULL));

/* numero eps entre 0 e 1*/

eps = rand()*1.0/RAND_MAX; if (eps<0.1) { c1++; p1 = c1*1.0/n; } else if (eps<0.5) { c2++; p2 = c2*1.0/n; } else { c3++; p3 = c3*1.0/n; } f1 = (fabs(p1-0.1)>1e-3) ? 1 : 0; f2 = (fabs(p2-0.4)>1e-3) ? 1 : 0; f3 = (fabs(p3-0.5)>1e-3) ? 1 : 0; printf("Aguarde... (%d)\n",n); } while(f1 || f2 || f3);

printf("Total de eventos: %d\n",n); printf("P(eps<0.1)=%5.3f\n",p1);

Programação em C/C++

Conversão de Tipo

❑ Quando um dado de um tipo é atribuído a uma

variável do mesmo tipo, não há conversão de tipo.

❑ Quando o dado e a variável são de tipos

diferentes, ocorrerá a conversão do tipo do dado para o tipo da variável.

❑ Numa operação aritmética, dados e variáveis de

Programação em C/C++

Conversão de Tipo

❑ Exemplo:

◼ dados do tipo char com dados do tipo int são

convertidos para o tipo int.

◼ dados do tipo char e int com dados do tipo float são

convertidos para o tipo float.

◼ dados do tipo char, int e float com dados do tipo

Programação em C/C++

Conversão de Tipo

❑ Uma forma de forçar a mudança do tipo de dado

é através do mecanismo de “typecasting”.

❑ Exemplo: float a; char b; int c; a = (float)b; b = (char)c;

Programação em C/C++

Conversão de Tipo

❑ Conversão de tipo inteiro para tipo real envolve

apenas o acréscimo da parte fracionária nula.

❑ Conversão de tipo real para tipo inteiro envolve

truncamento da parte fracionária.

❑ O arredondamento de dados reais pode ser

obtido através das funções:

◼ floor(dado): arredonda para baixo ◼ ceil(dado): arredonda para cima

Programação em C/C++

Tipos de Dados Abstratos

❑ Vetores (numéricos e literais)

❑ Matrizes

❑ Estruturas

❑ Enumerações ❑ Uniões

Programação em C/C++

Vetores e Matrizes

❑ Um vetor é uma lista indexada de dados do

mesmo tipo.

❑ Pode-se construir vetores de qualquer tipo

acrescentando a dimensão do vetor (rank).

❑ Exemplo:

float a[15];

char nome[80];

Programação em C/C++

Vetores e Matrizes

❑ Uma matriz é uma lista multiplamente indexada

de dados do mesmo tipo.

❑ Pode-se construir matrizes de qualquer tipo

acrescentando as dimensões da matriz (ranks).

❑ Exemplo:

float a[15][20]; /*15 linhas, 20 colunas */

char nome[2][80]; /*2 linhas, 80 colunas */

Programação em C/C++

Vetores e Matrizes

❑ Uma forma interessante de olhar para a matriz

bidimensional é encará-la como um vetor (uma lista indexada) de vetores (de listas indexadas).

matriz 2D ↔ vetor de vetores

❑ Uma matriz N-dimensional é uma lista indexada

Programação em C/C++

Vetores e Matrizes

❑ Um vídeo digital é uma sequência temporal de

imagens.

❑ Cada imagem é uma matriz 2D indexada pelo

tempo.

❑ Uma imagem é uma sequência de linhas.

❑ Cada linha é uma sequência de pixels.

❑ O vídeo é uma lista de sequências de linhas de

Programação em C/C++

Vetores e Matrizes

❑ Uma vez definida a dimensão do vetor ou da

matriz, esta não pode ser mais alterada.

❑ A criação de vetores e matrizes sem dimensões

pré-definidas é possível, mas precisa da noção de

ponteiros.

❑ Os índices dos vetores e matrizes se iniciam com

Programação em C/C++

Vetores de Caracteres: Strings

❑ Um vetor de caracteres é chamado de string.

❑ Uma string, para ser útil, é necessário inserir um

caractere especial chamado NULL (constante

literal ‘\0’).

❑ Esta constante é definida nos arquivo de

cabeçalho stdlib.h e string.h.

❑ O papel do NULL é marcar o final da sequência

Programação em C/C++

Vetores de Caracteres: Strings

❑ Exemplo:

#include <string.h> #include <stdio.h> #include <stdlib.h> void main(void) {

char nome[50];

strcpy(nome,“Luis Fernando”); printf(“Meu nome eh: %s\n”,nome);

printf(“Tamanho declarado eh: %d\n”,sizeof(nome)); printf(“Tamanho usado eh : %d\n”,strlen(nome)); }

Programação em C/C++

Vetores de Caracteres: Strings

❑ A função strcpy() copia o conteúdo de uma string

para outra.

❑ O operador de atribuição ‘=‘ não realiza esta

função.

❑ A função sizeof() retorna o comprimento

L u i s F e r n a n d o \0

Programação em C/C++

Vetores de Caracteres: Strings

❑ Pode-se inicializar a string diretamente com seu

conteúdo.

❑ O tamanho é definido automaticamente.

❑ Exemplo:

#include <string.h> #include <stdio.h> #include <stdlib.h> void main(void) {

char nome[]={“Luis Fernando”};

Programação em C/C++

Estrutura de Dados

❑ A linguagem C permite criar estruturas de dados

compostos.

❑ Funciona como um registro composto por vários

campos que podem ser de tipos distintos, inclusive outras estruturas.

❑ Uma nova estrutura funciona como um novo tipo.

❑ Depois de definida uma estrutura, variáveis

Programação em C/C++

Estrutura de Dados

❑ Uma estrutura é definida através da instrução

struct identificador { };.

❑ No interior do escopo da instrução, declara-se as

variáveis que comporão a estrutura.

❑ Exemplo:

struct vet3d {

double x, y, z; /* campos da estrutura */

};

Programação em C/C++

Estrutura de Dados

❑ Exemplo:

struct vet3d {

double x, y, z; /* campos da estrutura */

} v1, v2; /* variáveis do tipo struct vet3d */

❑ Uma estrutura de dado pode se tornar

formalmente um tipo através da instrução typedef.

Programação em C/C++

Estrutura de Dados

❑ Exemplo:

typedef struct vet3d {

double x, y, z; /* campos da estrutura */

} vetor3D; /* tipo definido da estrutura */ vetor3D v1, v2;

❑ Neste caso, o identificador vet3d é opcional.

❑ Exemplo:

typedef struct {

Programação em C/C++

Estrutura de Dados

❑ Para acessar um campo de uma estrutura, basta

referenciar a variável do tipo da estrutura seguida

do nome do campo separados por um ponto.

❑ Exemplo: vetor3D v1, v2; v1.x = 1; v1.y = v1.z = 0; v2.x = 0.92; v2.y = 1.34e-5;

Programação em C/C++

Ponteiros

❑ Os ponteiros representam um mecanismo ímpar

na linguagem C.

❑ O ponteiro diz respeito ao endereço de uma

variável e não ao seu conteúdo.

❑ Quando um dado é declarado, ele reside na

memória em algum lugar.

❑ Este lugar é referenciado por seu endereço como

Programação em C/C++

Ponteiros

❑ Quando uma variável é declarada, na linguagem

de alto nível, ela é identificada por um nome: o nome da variável.

❑ Quando o código é compilado, o identificador

passa a ser o endereço da variável.

❑ O programador vê as variáveis, o computador vê

o endereço das variáveis.

Programação em C/C++

Ponteiros

❑ Quando o programador atribui um dado a uma

variável, o computador copia o dado no endereço da variável.

❑ A linguagem C permite o acesso aos endereços

das variáveis através dos ponteiros.

❑ Um ponteiro é uma variável que armazena

Programação em C/C++

Ponteiros

❑ Se o programador modifica o conteúdo apontado

por um ponteiro, ele modifica o conteúdo de uma variável indiretamente.

❑ Um ponteiro é declarado definindo-se o tipo de

dado que ele aponta e seu nome precedido de ‘*’:

int *p; double *dptr; char *str; vetor3D *vptr;

Programação em C/C++

Ponteiros

❑ Para acessar o dado apontado por um ponteiro,

basta colocar o operador conteúdo de memória ‘*’

na frente do ponteiro. Exemplo:

#include <stdio.h>

void main(void) {

unsigned dado = 10;

unsigned *dptr; /* ponteiro unsigned dptr */

dptr = &dado; /* recupera o endereco da variavel dado */

printf(“conteudo apontado por dptr: %d\n”,*dptr);

Programação em C/C++

Ponteiros

❑ O ponteiro é uma variável como outra qualquer.

❑ A diferença é que seu conteúdo é um endereço.

❑ Os endereços de memória dependem da

arquitetura do computador.

❑ Computadores de 64 bits geram endereços de 64

bits, ou seja, são do tipo unsigned long int.

❑ Computadores de 32 bits geram endereços de 32

Programação em C/C++

Ponteiros

❑ O endereço de memória pode ser impresso

usando o código de formatação ‘%p’.

#include <stdio.h>

void main(void) {

unsigned dado = 10;

unsigned *dptr; /* ponteiro unsigned dptr */

dptr = &dado; /* recupera o endereco da variavel dado */

printf(“dptr vale: %p\n”,dptr);

printf(“conteudo apontado por dptr: %d\n”,*dptr);

*dptr = 20; /* modifica indiretamente a variavel dado */

Programação em C/C++

No documento Linguagem C C ppt (páginas 40-83)

Documentos relacionados