Curso de C para Engenharias



Documentos relacionados
INF 1005 Programação I

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

INF 1005 Programação I

Programação e Sistemas de Informação

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

INF 1007 Programação II

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Introdução a Computação

Strings. Todas as funções apresentadas neste documento estão no arquivo de cabeçalho string.h.

Capítulo 2: Introdução à Linguagem C

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

Tabela ASCII de caracteres de controle

Exemplos. char c; int i=67;... c= A ; c=c+1; if (c== B )... c=i; i=c; i++; if (i>= C )...

Estrutura de Dados Básica

Programação de Computadores I. Ponteiros

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

MC-102 Aula 19 Registros

20 Caracteres - Tipo char

Estrutura de um programa em linguagem C

Aula 1. // exemplo1.cpp /* Incluímos a biblioteca C++ padrão de entrada e saída */ #include <iostream>

Introdução à Programação

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Persistência de Dados

MC-102 Aula 17 Strings e Matrizes

String em C++ Verificando o tamanho da string

CURSO BÁSICO DE PROGRAMAÇÃO AULA 15. Revisão Vetores e Matrizes Trabalho

Registros. Técnicas de Programação. Rafael Silva Guimarães

3. Linguagem de Programação C

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

IFTO LÓGICA DE PROGRAMAÇÃO AULA 05

Componentes da linguagem C++

Neste artigo estudaremos os conceitos relacionados às matrizes unidimensionais (vetores) e multidimensionais.

Resumo da Matéria de Linguagem de Programação. Linguagem C

Programação de Computadores I. Linguagem C Vetores

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

Algoritmos e Programação

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

Linguagem de Programação I

system("pause"); //Envia comando para o sistema operacional solicitando parada de execução do programa } //limitador do corpo do programa

Sintaxe Básica de Java Parte 1

PROGRAMA DE DISCIPLINA

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++

Programação Básica em Arduino Aula 2

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

1 Resumo: Strings e vetores de caracteres. Departamento de Ciência da Computação IME/USP

JSP - ORIENTADO A OBJETOS

5 Apresentando a linguagem C

Tipos de Dados Avançados Vetores e Matrizes

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Conceitos Importantes:

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Resumo da Introdução de Prática de Programação com C. A Linguagem C

Tipos de Dados Simples

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Técnicas de Programação I

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Princípios de programação em Linguagem C Cesar Tadeu Pozzer UFSM 16/08/2010

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Conceitos de Linguagens de Programação

2 Orientação a objetos na prática

Curso de C para Engenharias

Linguagens de Programação I

ALGORITMOS E PROGRAMAÇÃO PARA COMPUTADORES II

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

Estruturas de Repetição

Conceitos básicos da linguagem C

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++

Orientação a Objetos

Introdução a Java. Hélder Nunes

Italo Valcy

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Plano de Aula. if(condição) { bloco de comandos; } else { bloco de comandos2; }

Curso Básico de Programação Aula 11. Revisão Aula Anterior Laços de Repetição While; Do-While; For.

Curso de Linguagem C

Estruturas de Dados. Alguns dados não costumam ser tão simples assim... Podem ser compostos por vários dados distintos

14. Arquivos. W. Celes e J. L. Rangel. Estruturas de Dados PUC-Rio 13-1

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

14.1 Vetor - Problemas

Linguagem de Programação

Vetores II. Strings Leitura e exibição Biblioteca string.h Operações com Strings. Matrizes Definição de Acesso Operações com Matrizes

INF 1620 P1-11/04/08 Questão 1 Nome:

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação

Estruturas de entrada e saída

Noções sobre Objetos e Classes

Laboratório de Programação. Prof. Oscar Luiz Monteiro de Farias

Transcrição:

Aula 4 Cristiano Dalbem Dennis Balreira Gabriel Moreira Miller Biazus Raphael Lupchinski Universidade Federal do Rio Grande do Sul Instituto de Informática Grupo PET Computação

Sintaxe Funções Exemplos

Sintaxe Funções Exemplos são vetores de caracteres.

Sintaxe Funções Exemplos são vetores de caracteres. Não fazem parte dos tipos primitivos da linguagem C; necessitam da biblioteca string.h para utlização de funções.

Sintaxe Funções Exemplos são vetores de caracteres. Não fazem parte dos tipos primitivos da linguagem C; necessitam da biblioteca string.h para utlização de funções. Terminam com um caractere especial, indicando nal de string.

Sintaxe Sintaxe Funções Exemplos 1 char nome_string [ q u a n t i d a d e _ d e _ c a r a c t e r e s + 1 ] ;

Sintaxe Sintaxe Funções Exemplos 1 // Exemplo: 2 char p [ 8 ] = " P a l a v r a " ; 3 char p [ 8 ] = { 'P ', ' a ', ' l ', ' a ', ' v ', ' r ', ' a ', ' \0 ' } ; 4 // ambas as declaraçoes acima sao equivalentes

Funções Sintaxe Funções Exemplos Leitura Função gets(). 1 g e t s ( nome_string ) ;

Funções Sintaxe Funções Exemplos Escrita Função printf() através de %s. 1 p r i n t f ( "... %s... ", nome_string ) ;

Funções Sintaxe Funções Exemplos Copia Função strcpy(). 1 s t r c p y ( nome_string_destino, nome_string_fonte ) ; 2 / c o p i a s t r i n g _ f o n t e para s t r i n g _ d e s t i n o /

Funções Sintaxe Funções Exemplos Compara Função strcmp(). 1 strcmp ( nome_string1, nome_string2 ) ; 2 / compara s t r i n g 1 com s t r i n g 2, 3 r e t o r n a n d o 0 caso forem i g u a i s /

Funções Sintaxe Funções Exemplos Tamanho Função strlen(). 1 s t r l e n ( nome_string ) ; 2 / r e t o r n a o tamanho da s t r i n g /

Funções Sintaxe Funções Exemplos Concatena Função strcat(). 1 s t r c a t ( nome_string_destino, nome_string_fonte ) ; 2 / a c o p l a s t r i n g _ f o n t e no f i n a l da s t r i n g _ d e s t i n o /

Exemplos Sintaxe Funções Exemplos Ex. 1 1 #i n c l u d e <s t d i o. h> 2 #i n c l u d e < s t r i n g. h> 3 i n t main ( ) { 4 char nome1 [ 4 0 ], nome2 [ 4 0 ] ; 5 p r i n t f ( "Nome1 : " ) ; 6 g e t s ( nome1 ) ; 7 p r i n t f ( "Nome2 : " ) ; 8 g e t s ( nome2 ) ; 9 s t r c a t ( nome1, nome2 ) ; 10 p r i n t f ( "Nome1 : %s \nnome2 : %s ", nome1, nome2 ) ; 11 s t r c p y ( nome2, nome1 ) ; 12 p r i n t f ( "Nome1 : %s \nnome2 : %s ", nome1, nome2 ) ; 13 r e t u r n ( 0 ) ; 14 }

Exemplos Sintaxe Funções Exemplos Ex. 2 1 #i n c l u d e <s t d i o. h> 2 #i n c l u d e < s t r i n g. h> 3 i n t main ( ) { 4 char nome1 [ 4 0 ], nome2 [ 4 0 ] ; 5 p r i n t f ( "Nome1 : " ) ; 6 g e t s ( nome1 ) ; 7 p r i n t f ( "Nome2 : " ) ; 8 g e t s ( nome2 ) ; 9 p r i n t f ( "Tamanho de \"%s \ " : %d", nome2, s t r l e n ( nome2 ) ) ; 10 i f ( strcmp ( nome1, nome2 ) == 0) 11 p r i n t f ( "\n%s e %s sao i g u a i s! ", nome1, nome2 ) ; 12 e l s e 13 p r i n t f ( "\n%s e %s sao d i f e r e n t e s! ", nome1, nome2 ) ; 14 r e t u r n ( 0 ) ; 15 }

Aritmética de

Aritmética de Variáveis são, na realidade, rótulos para posições de memória. Nossos dados estão armazenados na memória, e nós os acessamos através das variáveis.

Aritmética de Endereço Conteúdo...... 501 502 503 504 505...... Tabela: Memória

Aritmética de Observe o seguinte código: 1 i n t main ( ) 2 { 3 i n t a = 6 ; 4 i n t b [ 5 ] = { 1, 2, 3, 4, 5 } ; 5 i n t c ; // não inicializado 6 i n t d = 1 0 ; 7 }

Aritmética de Agora nossa memória poderia estar assim: Rótulo Endereço Conteúdo......... a 501 6 b[0] 502 1 b[1] 503 2 b[2] 504 3 b[3] 505 4 b[4] 506 5 c 507?? d 508 10......... Tabela: Memória

Aritmética de Uma variável armazena um valor de um determinado tipo - int, oat, char... - Ex.: int v = 2; // variavel v do tipo inteiro, com valor 2 são variáveis que armazenam endereços de memória. Geralmente o endereço de uma outra variável. Um ponteiro pode conter o endereço de uma variável. Quando isso ocorre dizemos que ele aponta para aquela variável.

Sintaxe Aritmética de Formato da declaração: tipo *variavel Importante: o '*' usado na declaração de uma variável é diferente do '*' utilizado para operações aritméticas Exemplos: Variável normal Variável ponteiro int x; int x; oat f ; oat f ; char c; char c;

Exemplo - Declarando ponteiro Aritmética de 1 #include <s t d i o. h> 2 i n t main ( ) { 3 i n t pt ; //ponteiro não inicializado 4 //(contém lixo - endereço qualquer) 5 i n t a = 5 ; 6 i n t b = 1 2 ; 7 p t = &a //ponteiro inicializado - aponta para endereço de a 8 p r i n t f ( " E n d e r e c o f i s i c o de pt (& pt ) : %p\n",& pt ) ; 9 p r i n t f ( " Conteudo de pt ( pt ) : %p\n", pt ) ; 10 p r i n t f ( " Conteudo apontado p o r pt ( pt ) : %d\n" ), pt ) ; 11 p r i n t f ( " E n d e r e c o f i s i c o de a (&a ) : %p\n",&a ) ; 12 p r i n t f ( " Conteudo de a ( a ) : %d\n", a ) ; 13 p r i n t f ( " E n d e r e c o f i s i c o de b (&b ) : %p\n",&b ) ; 14 p r i n t f ( " Conteudo de b ( b ) : %d\n", b ) ; 15 r e t u r n 0 ; 16 }

Aritmética de Exemplo - Continuação... 0xbf8bef4c : Ponteiro pt. Endereço que aponta é o 0xbf8bef44 (endereço de a). Dizemos que pt aponta para a. 0xbf8bef44 : Inteiro a. Conteúdo é o valor 5. 0xbf8bef48 : Inteiro b. Conteúdo é o valor 12. Rótulo Endereço Conteúdo......... pt 0xbf8bef4c 0xbf8bef44 a 0xbf8bef44 5 b 0xbf8bef48 12......... Tabela: Memória

Aritmética de Operadores Operador & Operador unário que devolve o endereço do operando. Exemplo 1 i n t x ; 2 i n t p ; 3 4 p = &x ; // agora p aponta para x (contém endereço de x) No exemplo, o ponteiro 'p' recebe o endereço da variável 'x', pois o operador & aplicado à 'x' retorna o seu endereço.

Operadores Aritmética de Operador * Operador unário que devolve o conteúdo do endereço apontado pelo operando. Exemplo 1 i n t x = 1 2 ; 2 i n t p ; 3 4 p = &x ; 5 p r i n t f ( "%i \n", p ) ; Continuando do exemplo anterior, imprime 12, que é o conteúdo contido no endereço apontado por 'p' (endereço da variável 'x').

Operadores Aritmética de Na Prática a função scanf () é um ótimo exemplo de uso do & 1 i n t numero ; 2 s c a n f ( "%d", &numero ) ; 3 // Isso quer dizer: armazene o valor lido do teclado na variável cujo endereço eu estou lhe fornecendo

Atribuição Aritmética de É possível fazer atribuição de ponteiros como com qualquer outra variável. 1 i n t main ( ) 2 { 3 i n t a = 8, b = 4 2 ; 4 i n t p1, p2 ; 5 6 p1 = &a ; 7 p2 = &b ; 8 p1 = p2 ; 9 }

Exemplo Aritmética de 1 i n t main ( ) 2 { 3 i n t a = 1 0 ; 4 i n t p1 ; 5 6 p1 = &a ; 7 p r i n t f ( "&a : %d\n",&a ) ; 8 p r i n t f ( " p1 : %p\n", p1 ) ; 9 10 p r i n t f ( "a : %d\n", a ) ; 11 p r i n t f ( " p1 : %d\n", p1 ) ; 12 }

Alguns cuidados... Aritmética de Nunca deixe de inicializar seus ponteiros! não inicializados possuem lixo, então podem estar referenciando uma posição de memória qualquer.

Alguns cuidados... Aritmética de Isso quer dizer: podem estar apontando para alguma variável aleatória do seu programa. (ou parte de uma variável - uma variável pode ter tamanho de vários bytes) Ou ainda apontando para uma região de memória fora do espaço do seu programa!

Alguns cuidados... Aritmética de Pra evitar esse tipo de problema é comum inicializar nossos ponteiros com NULL já na declaração. 1 i n t main ( ) 2 { 3 i n t p i = NULL ; 4 f l o a t p f = NULL ; 5 }

Alguns cuidados... Aritmética de Isso é feito pois ca fácil de testar, durante o programa, se o ponteiro é "válido". 1... 2 i f ( p i ) 3 { 4 // pi contém um endereço 5 } 6 7 i f ( p f ) 8 { 9 // pf contém um endereço 10 }

Equivalência entre vetor e ponteiro Aritmética de vet[i] é igual a *(vet + i)

Aritmética de Aritmética de Duas operações aritméticas: Adição Subtração Em ambas as operações depende o tipo do ponteiro, pois a aritmética é feita byte a byte.

Aritmética de Aritmética de Adição 1 p i = p i + 1 ; // avança o número de bytes de um int 2 p f = p f + 1 ; // avança o número de bytes de um oat Subtração 1 p i = p i 1 ; // volta o número de bytes de um int 2 p f = p f 1 ; // volta o número de bytes de um oat

Indireção Múltipla Aritmética de podem apontar para outros ponteiros. Cada * adiciona um novo nível de indireção. 1 i n t n = 4 2 ; 2 i n t p = &n ; 3 i n t pp = &p ;

Substring Crie um programa que imprima todos os caracteres digitados, exceto vogais minúsculas.

Resposta 1 #i n c l u d e <s t d i o. h> 2 #i n c l u d e < s t r i n g. h> 3 i n t main ( ) { 4 i n t i =0; 5 char s t r [ 5 0 ] = "" ; 6 p r i n t f ( " S t r i n g : " ) ; 7 g e t s ( s t r ) ; 8 while ( s t r [ i ]!= ' \0 ' ) { 9 i f ( ( s t r [ i ]!= ' a ' ) && ( s t r [ i ]!= ' e ' ) && 10 ( s t r [ i ]!= ' i ' ) && ( s t r [ i ]!= ' o ' ) && 11 ( s t r [ i ]!= ' u ' ) ) 12 p r i n t f ( " %c ", s t r [ i ] ) ; 13 i ++; 14 } 15 r e t u r n ( 0 ) ; 16 }

Inverter vetor espertinho Faça um programa que imprime um vetor com número xo de inteiros de modo invertido, PORÉM sem utilizar o operador de índices"[]". (Se achar muito difícil, pode fazer com índices primeiro e depois passar para solução com ponteiros.)

Resposta 1 #i n c l u d e <s t d i o. h> 2 #d e f i n e N_ELEM 10 3 i n t main ( ) { 4 i n t i =0, n, v [N_ELEM ] ; 5 f o r ( i =0; i <N_ELEM; i ++) { 6 p r i n t f ( "\ nelemento %d : ", i ) ; 7 s c a n f ( "%d",&n ) ; 8 ( v+i ) = n ; 9 } 10 f o r ( i=n_elem; i >=0; i ) 11 p r i n t f ( "%d", ( v+i ) ) ; 12 r e t u r n ( 0 ) ; 13 }

Dúvidas, Sugestões, Críticas www.inf.ufrgs.br/pet pet@inf.ufrgs.br