Treinamento em                Desenvolvimento de              Aplicativos para Sistemas                     EmbarcadosLing...
Bibliografia              • Shildt, Herbert , C Completo e Total, EditoraLinguagem C                Makron Books, 3ªedição...
Ementa              •   IntroduçãoLinguagem C              •   Operadores e Expressões              •   Funções de E/S    ...
Introdução              • HistóricoLinguagem C                 • C é resultado de um processo iniciado com a              ...
Introdução              • CaracterísticasLinguagem C                 • Portabilidade                 • Linguagem estrutura...
Introdução              • AplicaçãoLinguagem C                –   Sistemas Operacionais                –   Compiladores   ...
Introdução              • Linguagem de máquina: única linguagem que o                computador entende, ou seja, que pode...
Introdução              • Todo programa escrito em linguagem de alto nível é              chamado de programa-fonte ou cód...
Introdução              •Interpretador: lê o código-fonte linha-a-linha,Linguagem C               faz uma consistência de ...
Introdução              • Compilador: lê o programa inteiro, faz uma                consistência de sua sintaxe e se não h...
Introdução              • C é uma linguagem compiladaLinguagem C                                               Executável ...
Estrutura de um programa em C              •   Declaração das bibliotecas de funções (#include)Linguagem C              • ...
Estrutura de um programa em C              /* declaração dos arquivos de cabeçalho e definições */              #include <...
Mapa de MemóriaLinguagem C                    Pilha                    Heap                  Variáveis                   G...
Tipos básicos de dados              TIPO     BITs    BYTEs            DESCRIÇÃO                   DOMÍNIOLinguagem C      ...
Modificadores de tipos básicos              signed char  -128 a 127Linguagem C              signed int      -32.768 a 32...
Identificadores              Identificadores são os nomes das variáreis,Linguagem C                funções, rótulos e outr...
Declaração              int i;Linguagem C              float f;              unsigned int inteiro_sem_sinal;              ...
Primeiro Programa              1. Use o IDE Dev C++ para editar,Linguagem C                 compilar, linkar e executar o ...
Ementa              •   IntroduçãoLinguagem C              •   Operadores e Expressões              •   Funções de E/S    ...
Operadores              • Operador de AtribuiçãoLinguagem C                 • Em C o operador de atribuição é o sinal de i...
Conversões de tipos              •   Se os dois operandos de uma atribuição não são do                  mesmo tipo, o valo...
Conversões de tipos              •   Pode-se dizer que as conversões potencialmente perigo-Linguagem C                  sa...
Operadores              • Atribuição MúltiplaLinguagem C                 É possível atribuir um valor a muitas variáveis e...
Conversão de tipo (casting)              • O operador cast permite forçar uma expressão a              ser de determinado ...
Incremento/Decremento              Utilizados para incrementar e/ou decrementar em uma              unidade o valor de uma...
Operadores Relacionais              • As expressões compostas com operadoresLinguagem C                relacionais compara...
Operadores Lógicos              • Os operadores lógicos comparam duas expressõesLinguagem C                e retornam o va...
Operadores Bit a Bit              • Os operadores de bit só podem serLinguagem C                utilizados com valores do ...
Operadores Bit a Bit              Ex.: a = 15   0   0   0   0   1   1   1   1Linguagem C                  a << 1    0   0 ...
Operador Condicional (Ternário)              • O operador condicional (ou ternário) consiste de umLinguagem C             ...
Expressões Reduzidas                    Expressão normal      Expressão reduzidaLinguagem C              soma = soma + con...
Precedência dos Operadores              Maior        ( ) [ ] ->                           !    ~    ++          --    -   ...
Problemas              1.   Escreva quatro instruções diferentes em C, cada uma subtraindo                   1 da variável...
Ementa              •   IntroduçãoLinguagem C              •   Operadores e Expressões              •   Funções de E/S    ...
E/S pelo console              FUNÇÃO printf():Linguagem C              A função printf() é utilizada para escrever na     ...
E/S pelo console              Código           Significado              %d               Exibe um inteiro no formato decim...
E/S pelo console              Exemplos:              printf("%s %d", "Esta é uma string ", 100);Linguagem C               ...
E/S pelo console              FUNÇÃO scanf():Linguagem C              A função scanf() é utilizada para leitura de dados  ...
E/S pelo console              Exemplos:                 #include <stdio.h>Linguagem C                 main(){             ...
E/S pelo console              Instruções   DescriçãoLinguagem C              getchar()    lê um caracter do teclado aguard...
E/S pelo console              Exemplos:                   #include <stdio.h>Linguagem C                   main(){         ...
Exercícios              1. Utilize o operador sizeof para exibir quantoLinguagem C                 espaço em bytes ocupa c...
Ementa              •   IntroduçãoLinguagem C              •   Operadores e Expressões              •   Funções de E/S    ...
Estruturas de Controle              • Governam o fluxo de execução doLinguagem C              programa. Se dividem em três...
if              Sintaxe:       if (expressão) comando;Linguagem C                             else comando;               ...
if              Exemplo:Linguagem C              main()              {              int a, b;              printf(“Digite ...
if aninhados              Ocorre quando um comando if é um objeto de umLinguagem C              outro if ou else.         ...
if – else - if              Sintaxe exemplo:                  if (expressão)        comando;Linguagem C                  e...
if – else - if              main(){Linguagem C              int magico, adivinhacao;              randomize();            ...
Operador Ternário              main(){Linguagem C                 int x = 3, y = 7, max;                 max = (x>y)?1:0; ...
switch              O comando de seleção switch é utilizado em caso de seleção múltipla. Ele              testa o valor de...
switch              O comando break causa a saída imediata do switch. Se não existir um              comando break seguind...
Comandos de repetição              O comando de repetição é utilizado nos casosLinguagem C              em que queremos re...
for              Inicialização: é geralmente uma atribuiçãoLinguagem C                 que determina o valor inicial da va...
for              Exemplo:                 int x;                 for(x=1;x<=100;x++) printf(“%d”,x);Linguagem C           ...
while              Sintaxe:       while(condição) comando;Linguagem C                                      ou             ...
while              Exemplo:              void main(){                 int t=1, dia;Linguagem C                 while(t) { ...
do-while              Ao contrário dos laços for e while, que testam asLinguagem C              condições no início, o do-...
Comandos de desvio                São utilizados para realizar desvios dentro de umLinguagem C                programa.   ...
Comandos de desvio              • continue:Linguagem C                Força a repetição (retorna ao início do laço        ...
Comandos de desvio              • goto:Linguagem C                Apesar das linguagens possuírem estruturas de           ...
Comandos de desvio              Exemplo:Linguagem C              int x=1;              retorno:                   printf(“...
Comandos de desvio              • exit():Linguagem C                Assim como o comando break força o término de um      ...
Lista de Exercícios              1. Anacleto tem 1,50 metro e cresce 2 centímetros porLinguagem C                 ano, enq...
Ementa              •   IntroduçãoLinguagem C              •   Operadores e Expressões              •   Funções de E/S    ...
Vetor              • Um vetor é uma matriz de uma dimensãoLinguagem C              capaz de armazenar um conjunto de variá...
Vetor              Exemplo:Linguagem C                   main(){                   int notas[5], i, soma=0;               ...
Verificação de Limites              • A linguagem C não faz verificação automática dos                limites dos vetores....
Exercícios              1. Leia dois vetores A e B com 5 elementos inteirosLinguagem C                 cada, calcule e esc...
Matrizes              • Possuem duas dimensões fazendo menção a linhasLinguagem C                e colunas.              •...
Matrizes              #include <stdio.h>Linguagem C                      main()                      {                    ...
Inicialização de Matrizes              • C permite a inicialização de matrizes noLinguagem C                momento da dec...
Matrizes Não-Dimensionadas              • C pode calcular automaticamente as dimensões deLinguagem C                uma ma...
Exercícios              1. Leia uma matriz 5x5, imprima a soma dosLinguagem C                 elementos da diagonal princi...
Ementa              •   IntroduçãoLinguagem C              •   Operadores e Expressões              •   Funções de E/S    ...
Matrizes de char (strings)              • Uma "string" é definida como sendo constituída de              uma matriz de car...
Strings              • Leitura de uma string do teclado: A maneira mais                fácil de inserir uma string pelo te...
Inicialização de Strings              • Inicialização de string dimensionada:Linguagem C                char erro[17] = “e...
Funções de Manipulação de String              • As funções de manipulação de strings estão              declaradas no arqu...
Funções de Manipulação de String              Função strlen(): Retorna o tamanho de s.Linguagem C                 strlen(s...
Funções de Manipulação de String              Função strcmp(): Compara duas strings e retorna 0 se elas              forem...
Funções de Manipulação de String              Função strcat(): Anexa (concatena) "s2" em " s1";Linguagem C              "s...
Exercícios              1. Escrever um programa que lê duas strings eLinguagem C                 informa o tamanho, a igua...
Ementa              •   IntroduçãoLinguagem C              •   Operadores e Expressões              •   Funções de E/S    ...
Ponteiros              • Um ponteiro é uma variável que contém um endereço              de memória. Esse endereço é normal...
Exemplos              • int y, x=0, *px, *py;                 px=&x; “px aponta para x”Linguagem C                 y=*px; ...
Expressões com Ponteiros              • Os ponteiros podem aparecer normalmente no lugar              das variáveis.Lingua...
Incremento e Decremento de Ponteiros              • Os ponteiros não são necessariamenteLinguagem C                increme...
Incremento e Decremento de PonteirosLinguagem C              p++;      incrementa o ponteiro, ou seja, o                  ...
Ponteiros e Matrizes              • Há um grande relacionamento entre ponteiros eLinguagem C                     matrizes....
Exemplo              • Lendo um vetor com ponteiro:Linguagem C              main()              {              int a[5]={0...
Exemplo              • Construindo um vetor com ponteiro:Linguagem C              main(){              int vet[10], *p, i;...
Exemplo              • Ponteiro com string:Linguagem C              main(){                char str[80], *p;              ...
Exemplo              •   Matrizes de Ponteiros:Linguagem C              main(){              char *erro[2]={“arquivo inexi...
Exercícios              1. Usando ponteiros, faça um programa queLinguagem C                 imprima uma string invertida....
Teste              1. Leia 10 strings para uma matriz de string. Ordene eLinguagem C                 imprima as strings em...
Ementa              •   IntroduçãoLinguagem C              •   Operadores e Expressões              •   Funções de E/S    ...
Funções              •    É uma sub-rotina que realiza uma tarefa específica.              •Linguagem C                   ...
Função sem parâmetro              // Este programa contém duas funções: main() e                 minha_func()Linguagem C  ...
Função com parâmetro              void box(int length, int width, int height);              // protótipo de box() com 3 pa...
O retorno de valores              • Uma função pode retornar um valor para seuLinguagem C                chamador.        ...
Função com retorno              int box(int length, int width, int                   height);   // box() agora retorna umL...
Regras de Escopo              • Existem três tipos de variáveis: variáveis locais,Linguagem C              parâmetros form...
Variáveis Locais              void func1() {                int x;       //x é local para func1()Linguagem C              ...
Parâmetros Formais              • Parâmetros FormaisLinguagem C                 – São as variáveis que recebem os argument...
Parâmetros Formais              #include <stdio.h>            /*   declaração do arquivo de cabeçalho*/Linguagem C        ...
Variáveis Globais              •   Variáveis GlobaisLinguagem C                  –   Estas variáveis são declaradas fora d...
Variáveis Globais              #include <stdio.h>              void func1();Linguagem C              int count;     // cou...
Exercícios              1.   Escreva e teste a seguinte função média(), que retorna aLinguagem C                   média d...
Passagem de ponteiros para funções              #include <stdio.h>Linguagem C              void f(int *j); // f adota um p...
Passagem de um array              • Quando um array é um argumento paraLinguagem C                uma função, o endereço d...
Passagem de um array              #include <stdio.h>              void mostra(int num[10]);Linguagem C              int ma...
Passagem de um array              Outras possibilidades de passar um ponteiro deLinguagem C              array:           ...
Passagem de strings              • Como uma string é simplesmente um arrayLinguagem C                de caracteres que é t...
Passagem de strings              void strInvertCase(char *str);Linguagem C              int main() {                 char ...
Exercícios              1.   Escreva e teste a função strlen()              2.   Escreva e teste a seguinte função:Linguag...
A função main()              • Podemos passar informações para um programa aoLinguagem C                rodá-lo. Isto é po...
A função main()              • O nome do programa é apontado porLinguagem C                argv[0]; argv[1] apontará para ...
argc e argv              • Esse programa exibe os argumentos da linha de                comando:Linguagem C               ...
Exercícios              1. Escreva e teste a seguinte função que retorna oLinguagem C                 índice do menor valo...
Ementa              •   IntroduçãoLinguagem C              •   Operadores e Expressões              •   Funções de E/S    ...
Estruturas              • Uma estrutura é uma coleção de variáveisLinguagem C               referenciadas pelo mesmo nome....
Estruturas              Exemplo de estrutura:Linguagem C              struct pessoal {                 char nome[30];     ...
Estruturas              Referência aos elementos da estrutura: operador ponto              (.)Linguagem C                 ...
Matrizes de Estruturas              • Para declarar uma matriz de estruturas do tipoLinguagem C                pessoal de ...
Exercício              1. Escreva um programa simples queLinguagem C                 gerencie um cadastro com registros co...
Uniões              • Uma união é uma localização de memóriaLinguagem C              usada por muitas variáveis diferentes...
Uniões              • Em cntv, tanto o inteiro i como oLinguagem C                caractere ch compartilham da mesma      ...
Exemplo de União              main(void){Linguagem C                 union u_type {                    int i;             ...
typedef              • C permite a definição de novos nomes de tipos deLinguagem C                dados com a palavra-chav...
Enumerações              •   Enumeração é um conjunto de constantes inteirasLinguagem C                  com nome e especi...
Enumerações              •   Cada um dos símbolos da enumeração                  representa um valor inteiro. Como tal, el...
Ementa              •   IntroduçãoLinguagem C              •   Operadores e Expressões              •   Funções de E/S    ...
Alocação Dinâmica de Memória              • Um programa em C usa uma das duas maneiras                principais de se arm...
malloc()              • void *malloc(unsigned size)Linguagem C                Retorna um ponteiro void para o primeiro    ...
free()              • free (void *p)Linguagem C                 O oposto de malloc(), free() devolve ao                 si...
Exemplo              main() {     */ Aloca memória para 50 inteiros /*Linguagem C                  int *p, t;             ...
Exercício              1. Escreva um programa que aloque espaço para                 cinco strings inseridas pelo usuário....
Ementa              •   IntroduçãoLinguagem C              •   Operadores e Expressões              •   Funções de E/S    ...
Arquivos              Ponteiro de ArquivoLinguagem C              • Para ler ou escrever em um arquivo de disco, o        ...
Arquivos              Ponteiro de ArquivoLinguagem C              •   Para obter uma variável ponteiro de arquivo :       ...
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Linguagem c
Próximos SlideShares
Carregando em…5
×

Linguagem c

35.177 visualizações

Publicada em

  • Agradecimentos ao autor! Ótimo Slide!
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • Slide ótimo, mas ficaria melhor de se compreender se colocasse ao fim dos exemplo a saída do programa(como ele responderia na tela), da forma que está precisa em alguns exemplo copiar o código e executar para melhor entendimento, mas mesmo assim está ótimo.
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui

Linguagem c

  1. 1. Treinamento em Desenvolvimento de Aplicativos para Sistemas EmbarcadosLinguagem C Linguagem C 1
  2. 2. Bibliografia • Shildt, Herbert , C Completo e Total, EditoraLinguagem C Makron Books, 3ªedição, São Paulo, 1997. • Manzano, José augusto, Estudo Dirigido de Linguagem C, Editora Érika, São Paulo, 1997. 2
  3. 3. Ementa • IntroduçãoLinguagem C • Operadores e Expressões • Funções de E/S • Estruturas de Controle • Vetores e Matrizes • Strings • Ponteiros • Funções • Estruturas • Alocação Dinâmica de Memória • Arquivos 3
  4. 4. Introdução • HistóricoLinguagem C • C é resultado de um processo iniciado com a linguagem BCPL. BCPL influenciou a linguagem de nome B, que evoluiu posteriormente para C. • Projetada em 1972, nos laboratórios da BELL (empresa de desenvolvimento de software básico), por Brian Kerninghan e Dennis Ritchie para o UNIX do PDP-11. • A simplicidade de sua implementação permitiu a extensão da linguagem e a criação de compila- dores C para praticamente todas as plataformas de hardware e sistemas operacionais. • Em 1983 estabeleceu-se o padrão ANSI. 4
  5. 5. Introdução • CaracterísticasLinguagem C • Portabilidade • Linguagem estruturada e modular • Geração de código eficiente • Simplicidade • Possui apenas 32 palavras chaves • Uso de biblioteca de funções que implementam os recursos de alto nível para o programador • Linguagem de médio nível • Combina facilidades de uma linguagem de alto nível com a versatilidade e potencialidade do Assembly. • Não efetua verificações em tempo de execução. 5
  6. 6. Introdução • AplicaçãoLinguagem C – Sistemas Operacionais – Compiladores – Planilhas Eletrônicas – Editores de Texto – Banco de Dados 6
  7. 7. Introdução • Linguagem de máquina: única linguagem que o computador entende, ou seja, que pode serLinguagem C diretamente executada pelo hardware. Ela é formada por códigos binários que representam as instruções e dados. Tem uso difícil e tedioso. Pode-se dizer que, para se programar em linguagem de máquina é necessário um amplo conhecimento do hardware utilizado. • Linguagem de alto nível: conjunto de instruções mais compatíveis com a linguagem humana e com o modo do ser humano pensar. Estas linguagens, na sua maioria, são de uso genérico e não é necessário ter conhecimento do hardware utilizado. 7
  8. 8. Introdução • Todo programa escrito em linguagem de alto nível é chamado de programa-fonte ou código fonte.Linguagem C • O programa em linguagem de máquina, escrito ou resultante, é chamado de programa-objeto ou código objeto. • Todo o programa-fonte, para ser executado, deve obrigatoriamente, de alguma forma, ser traduzido para programa-objeto. Neste momento é que são utilizados os compiladores e/ou interpretadores. 8
  9. 9. Introdução •Interpretador: lê o código-fonte linha-a-linha,Linguagem C faz uma consistência de sua sintaxe e se não houver erro, converte-a para linguagem de máquina para executá-la. Este processo é realizado até que a última linha seja executada ou a consistência apresente algum erro. O interpretador precisa estar presente todas as vezes que vamos executar o nosso programa e o trabalho de checagem da sintaxe deverá ser repetido. 9
  10. 10. Introdução • Compilador: lê o programa inteiro, faz uma consistência de sua sintaxe e se não houver erro,Linguagem C gera o código-objeto em disco com a extensão .OBJ. Este programa não pode ser executado até que sejam agregadas a ele rotinas em linguagem de máquina (biblioteca da linguagem) que lhe permitirão a sua execução. Este trabalho é feito por um programa chamado linkeditor, que cria o código- executável final em disco com a extensão .EXE. Neste momento não é mais necessária a presença do compilador, pois todo o programa já esta traduzido para linguagem de máquina e armazenado em disco, basta rodá-lo. 10
  11. 11. Introdução • C é uma linguagem compiladaLinguagem C Executável Fontes C Compilação Ligação + Arquivos OBJ Bibliotecas 11
  12. 12. Estrutura de um programa em C • Declaração das bibliotecas de funções (#include)Linguagem C • Declarações de constantes e seus valores (#define) • Declaração das variáveis globais (públicas) • Declaração das funções • Única função obrigatória e primeira a ser executada é a função main() • O corpo das funções fica entre { } main() /* função obrigatória */ { printf(“Hello World”); } 12
  13. 13. Estrutura de um programa em C /* declaração dos arquivos de cabeçalho e definições */ #include <stdio.h>Linguagem C #define PI 3.1415 /* definição das variáveis globais */ /* função principal do programa */ void main() { /* definição das variáveis locais */ printf (“Hello World”); } 13
  14. 14. Mapa de MemóriaLinguagem C Pilha Heap Variáveis Globais Código do Programa 14
  15. 15. Tipos básicos de dados TIPO BITs BYTEs DESCRIÇÃO DOMÍNIOLinguagem C void 0 0 sem argumento e não retorna Sem valor valor char 8 1 caractere isolado -128 a 127 int 16 2 valor inteiro -32.768 a 32.767 float 32 4 número ponto-flutuante (no 3.4E-38 a 3.4E+38 contendo um ponto decimal e/ou um expoente) double 64 8 número ponto-flutuante de 1.7E-308 a dupla precisão (mais 1.7E+308 algarismos significativos e um expoente que pode ter mais magnitude) 15
  16. 16. Modificadores de tipos básicos signed char  -128 a 127Linguagem C signed int  -32.768 a 32.767 unsigned char  0 a 255 unsigned int  0 a 65.535 short int = int  -32.768 a 32.767 unsigned short int = unsigned int  0 a 65.535 long int  -2.147.483.648 a 2.147.483.647 (quatro bytes) unsigned long int  0 a 4.294.967.295 long float = double (padrão ANSI) long double  dez dígitos de precisão (≅ 80 bits) 16
  17. 17. Identificadores Identificadores são os nomes das variáreis,Linguagem C funções, rótulos e outros objetos definidos pelo usuário. • O primeiro caracter deve ser uma letra ou sublinhado • Apenas os 32 primeiros caracteres são significativos • É case sensitive, ou seja, maiúsculas se diferem das minúsculas • int x; /* é diferente de int X; */ • As instruções terminam com “;” • Comentários devem ficar entre /* e */ • Palavras-chave são minúsculas 17
  18. 18. Declaração int i;Linguagem C float f; unsigned int inteiro_sem_sinal; char ch; double balanco, lucro, prejuizo; int i, j, k; int _exemplo_de_um_nome_longo; long int A5k; 18
  19. 19. Primeiro Programa 1. Use o IDE Dev C++ para editar,Linguagem C compilar, linkar e executar o programa Hello.c 2. Qual o tamanho dos arquivos C, OBJ e EXE do programa Hello.c ? 3. Que conclusões você tira da resposta da questão 2? 19
  20. 20. Ementa • IntroduçãoLinguagem C • Operadores e Expressões • Funções de E/S • Estruturas de Controle • Vetores e Matrizes • Strings • Ponteiros • Funções • Estruturas • Alocação Dinâmica de Memória • Arquivos 20
  21. 21. Operadores • Operador de AtribuiçãoLinguagem C • Em C o operador de atribuição é o sinal de igual “=”. • É erro comum em programadores iniciantes confundir o “=” com o operador relacional de igualdade “==”. • Exemplos: a = 1; delta = b * b – 4 * a * c; i = j; • O operando esquerdo deve ser um identificador de variável, isto é, não pode ser uma constante ou expressão. São atribuições inválidas: 1 = a; // constante! b + 1 = a; // expressão! 21
  22. 22. Conversões de tipos • Se os dois operandos de uma atribuição não são do mesmo tipo, o valor da expressão ou operador da direitaLinguagem C será convertido para o tipo do identificador da esquerda. • Exemplo 1: int i; float r; i = 5; // valor de i: 5 r = i; // valor de r: 5.0 • Exemplo 2: int i; float r = 654.321; i = r; // i será truncado para 654 22
  23. 23. Conversões de tipos • Pode-se dizer que as conversões potencialmente perigo-Linguagem C sas (onde há possibilidade de perda de informação) são: char  int  float  double • Observe que o compilador C ao encontrar esta operação não gera nenhum aviso de atenção para o programador. Assim este detalhe pode gerar um erro de programação (bug) que passe desapercebido ao programador inexperiente. É possível dizer que a linguagem C possui tipos ”macios” (soft types) pois a operação com variáveis de tipos diferentes é perfeitamente possível. Esta característica do C se contrapõe a algumas linguagens em que isto não é possível. Estas linguagens possuem tipos “duros” (hard types). 23
  24. 24. Operadores • Atribuição MúltiplaLinguagem C É possível atribuir um valor a muitas variáveis em uma única instrução. int i, j, k; double max, min; i = j = k = 1; max = min = 0.0; • Operadores Aritméticos Operador Operação + adição - subtração * multiplicação / divisão % módulo (resto da divisão inteira) 24
  25. 25. Conversão de tipo (casting) • O operador cast permite forçar uma expressão a ser de determinado tipo:Linguagem C int num; float valor = 13.0; num = valor % 2; // inválido num =(int) valor % 2; // válido A conversão de tipo é usada para que o dado armazenado em valor fosse transformado no tipo int assim a operação módulo pode ser efetuada. • Regra geral de conversão de tipos: char  int  float  double 25
  26. 26. Incremento/Decremento Utilizados para incrementar e/ou decrementar em uma unidade o valor de uma variável. Eles podem serLinguagem C utilizados antes (prefixo) ou após (posfixo) a variável, dando resultados ligeiramente diferentes. Ex.: Y = X ++; “Y recebe o valor de X e depois X é incrementado” Y = X --; “Y recebe o valor de X e depois X é decrementado” Y = ++ X; “X é incrementado e depois Y recebe o valor de X” Y = -- X; “X é decrementado e depois Y recebe o valor de X” 26
  27. 27. Operadores Relacionais • As expressões compostas com operadoresLinguagem C relacionais comparam dois valores e retornam 0 em caso de expressões falsas e 1 se forem verdadeiras. Operador Operação < Menor que > Maior que <= Menor que ou igual a >= Maior que ou igual a == Igual a != Diferente de 27
  28. 28. Operadores Lógicos • Os operadores lógicos comparam duas expressõesLinguagem C e retornam o valor 0 (falso) ou 1 (verdadeiro). Operador Operação && AND (E) || OR (OU) ! NOT (NÃO) • O operador unário ! tem maior precedência, seguido do operador E lógico. O operador OU lógico tem a menor precedência dentre os operadores lógicos. 28
  29. 29. Operadores Bit a Bit • Os operadores de bit só podem serLinguagem C utilizados com valores do tipo caracter ou inteiro. Operador Operação << Deslocamento à esquerda >> Deslocamento à direita & E bit a bit | OU bit a bit ^ XOU bit a bit ~ Não bit a bit (complemento de um) 29
  30. 30. Operadores Bit a Bit Ex.: a = 15 0 0 0 0 1 1 1 1Linguagem C a << 1 0 0 0 1 1 1 1 0 a >> 3 0 0 0 0 0 0 1 1 Ex.: a = 15 0 0 0 0 1 1 1 1 b = 56 0 0 1 1 1 0 0 0 a&b 0 0 0 0 1 0 0 0 a|b 0 0 1 1 1 1 1 1 a^b 0 0 1 1 0 1 1 1 30
  31. 31. Operador Condicional (Ternário) • O operador condicional (ou ternário) consiste de umLinguagem C ponto de interrogação (?) e um dois pontos (:) usados juntos e requer três operandos. V resultado = modo > 0 ? 1 : 0; F a variável resultado receberá valor 1 se modo for maior que 0, caso contrário receberá 0. 31
  32. 32. Expressões Reduzidas Expressão normal Expressão reduzidaLinguagem C soma = soma + cont; soma += cont; d = d – 3; d-= 3; y = y * (z+1); y*= z+1; i = i / j; i/= j; a = a & b; a &= b; a = a << 3; a <<= 3; 32
  33. 33. Precedência dos Operadores Maior ( ) [ ] -> ! ~ ++ -- - (tipo) * & sizeofLinguagem C * / % + - << >> < <= > >= == != & ^ | && || ?: = += -= *= /= etc. Menor , 33
  34. 34. Problemas 1. Escreva quatro instruções diferentes em C, cada uma subtraindo 1 da variável n.Linguagem C 2. Escreva um bloco de código C que tem o mesmo efeito da instrução n = 100 + m++; sem utilizar o operador de pós-incremento 3. Escreva um bloco de código C que tem o mesmo efeito da instrução n = 100 + ++m; sem utilizar o operador de pré-incremento 4. Escreva uma instrução única em C que subtraia de z a soma de x e y e depois incremente y. 5. Se m=5 e n=2, quais serão os valores de m e n após cada uma das expressões: a. m *= n++; b. m += --n; Instituto CERTI Amazônia. Treinamento para Sistemas Embarcados 34
  35. 35. Ementa • IntroduçãoLinguagem C • Operadores e Expressões • Funções de E/S • Estruturas de Controle • Vetores e Matrizes • Strings • Ponteiros • Funções • Estruturas • Alocação Dinâmica de Memória • Arquivos 35
  36. 36. E/S pelo console FUNÇÃO printf():Linguagem C A função printf() é utilizada para escrever na tela. O protótipo desta função está descrito no arquivo de cabeçalho <stdio.h>. printf("string de controle", lista de argumentos); A string de controle contém caracteres que serão exibidos na tela, comandos de formatação que dizem a printf() como exibir os argumentos restantes ou ambos. Quando encontra um comando de formatação, a função liga os comandos aos argumentos. 36
  37. 37. E/S pelo console Código Significado %d Exibe um inteiro no formato decimal comLinguagem C sinal %uExibe um inteiro no formato decimal sem sinal %f Exibe um tipo float no formato decimal %c Exibe um caractere %s Exibe uma string %oExibe um número octal sem sinal %x Exibe um número hexadecimal sem sinal (letras minúsculas) %X Exibe um número hexadecimal sem sinal (letras maiúsculas) 37
  38. 38. E/S pelo console Exemplos: printf("%s %d", "Esta é uma string ", 100);Linguagem C exibe: Esta é uma string 100 printf("esta é uma string %d", 100); exibe: esta é uma string 100 printf("o número %d é decimal, %f é ponto flutuante.",10, 110.79); exibe: o número 10 é decimal, 110.79 é ponto flutuante. printf("%s", "Alôn"); exibe: Alô e avança uma linha printf(“%c, %d”,65,”C”); exibe: A, 67 38
  39. 39. E/S pelo console FUNÇÃO scanf():Linguagem C A função scanf() é utilizada para leitura de dados pelo teclado. O protótipo desta função está descrito no arquivo de cabeçalho <stdio.h>. scanf("string de controle", lista de argumentos); A string de controle determina como os valores são lidos para as variáveis apontadas na lista de argumentos. Todas as leituras devem ser finalizadas por <ENTER>. A lista de argumento deve conter os endereços das variáveis a que devem ser atribuídos os valores. 39
  40. 40. E/S pelo console Exemplos: #include <stdio.h>Linguagem C main(){ int idade; printf(“Digite um número: ”); scanf(“%d”, &idade); printf ("nA minha idade é %d", idade) ; } #include <stdio.h> main(){ int pes; float metros; printf("Informe o número de pes: "); scanf("%d", &pes); metros = pes * 0.3048; printf("n%d pés é %f metros", pes, metros); 40 }
  41. 41. E/S pelo console Instruções DescriçãoLinguagem C getchar() lê um caracter do teclado aguardando <Enter> getche() lê um caracter do teclado e prossegue getch() lê um caracter sem eco na tela e prossegue putchar() escreve um caracter na tela gets() lê uma string do teclado puts() escreve uma string na tela 41
  42. 42. E/S pelo console Exemplos: #include <stdio.h>Linguagem C main(){ char ch; ch=getchar(); putchar(ch); } Comando printf() Resultado (“%-5.2f”, 123.234) 123.23 (“%5.2f”, 3.234) 3.23 (“%10s”, “alo”) alo (“%-10s”, “alo”) alo (“%5.7s”, “123456789”) 1234567 (“%04d”, 21) 0021 42
  43. 43. Exercícios 1. Utilize o operador sizeof para exibir quantoLinguagem C espaço em bytes ocupa cada um dos tipos básicos de C (char, int, float e double). 2. Leia uma temperatura em graus Centígrados e apresentá-la convertida em graus Fahrenheit. A fórmula de conversão é: F = (9 * C + 160) / 5. Exiba o resultado com 3 casas decimais. 3. Faça um programa que leia um caractere e exiba seu código ASCII equivalente. 4. Leia e exiba uma string com seu nome completo usando a função scanf(). Qual o resultado obtido? Justifique. 43
  44. 44. Ementa • IntroduçãoLinguagem C • Operadores e Expressões • Funções de E/S • Estruturas de Controle • Vetores e Matrizes • Strings • Ponteiros • Funções • Estruturas • Alocação Dinâmica de Memória • Arquivos 44
  45. 45. Estruturas de Controle • Governam o fluxo de execução doLinguagem C programa. Se dividem em três categorias: – Desvios Condicionais: if, operador ternário (?:) e switch. – Loop: while(), do-while(), for() e os comandos continue e break. – Desvio Incondicional: goto. 45
  46. 46. if Sintaxe: if (expressão) comando;Linguagem C else comando; onde, comando poder ser um único, um bloco de comandos e, neste caso, usa-se os delimitadores de bloco de comandos ( { } ) ou nenhum comando. A cláusula else é opcional. V if (expressão) comando; F else comando; próximo comando; 46
  47. 47. if Exemplo:Linguagem C main() { int a, b; printf(“Digite dois números”); scanf(“%d,%d”,&a,&b); if (b) printf(“%fn”,(float)a/b); else printf(“divisão por zeron”); } 47
  48. 48. if aninhados Ocorre quando um comando if é um objeto de umLinguagem C outro if ou else. Sintaxe exemplo: if ( i ) { if ( k ) comando1; if ( j ) comando2; else comando3; } else comando4; 48
  49. 49. if – else - if Sintaxe exemplo: if (expressão) comando;Linguagem C else if (expressão) comando; else if (expressão) comando; else if (expressão) comando; else comando; Neste caso, as expressões são avaliadas de cima para baixo. Assim que uma expressão for diferente de zero (verdadeira), o comando associado a ela é executado e a estrutura encerrada. Se nenhuma expressão for verdadeira, será executado o comando associado ao último else e, se ele não for declarado, nenhum comando será executado. 49
  50. 50. if – else - if main(){Linguagem C int magico, adivinhacao; randomize(); magico= random(10); printf(“ADIVINHE: ”); scanf(“%d”,&adivinhacao); if (adivinhacao == magico){ printf(“ACERTOU”); printf(“%d é o número mágicon”, magico); } else if (adivinhacao > magico) printf(“—errado– muito alton’); else (“—errado– muito baixon’);} 50
  51. 51. Operador Ternário main(){Linguagem C int x = 3, y = 7, max; max = (x>y)?1:0; printf(“max = %dn”,max); } 51
  52. 52. switch O comando de seleção switch é utilizado em caso de seleção múltipla. Ele testa o valor de uma expressão contra uma lista de constantes inteiras ou caracter. Quando o valor é igual, os comandos associados àquelaLinguagem C constante são executados. Se nenhuma coincidência for encontrada os comandos de default são executados. switch(expressão) { case constante1: comandos; break; case constante2: comandos; break; . default: comandos; } 52
  53. 53. switch O comando break causa a saída imediata do switch. Se não existir um comando break seguindo os comandos de um case, o programa segue executando os comandos dos cases abaixo. Exemplo:Linguagem C void main() { int dia; clrscr(); printf(“Digite um dia da semana: “); scanf(“%d”,&dia); switch(dia) { case 1: printf(“nDomingon”); break; case 2: printf(“nSegundan”); break; . case 7: printf(“nSábadon”); break; default: printf(“nNúmero inválido!!!n”); }} 53
  54. 54. Comandos de repetição O comando de repetição é utilizado nos casosLinguagem C em que queremos repetir determinados comandos. Laço for Sintaxe: for(inicialização;condição;incremento) comando; ou for(inicialização;condição;incremento) { comandos; } 54
  55. 55. for Inicialização: é geralmente uma atribuiçãoLinguagem C que determina o valor inicial da variável de controle. Esta declaração pode ser feita antes do laço e, desta forma, não necessita ser declarada no escopo do comando. Condição: é uma expressão que determina o final do laço ou o valor final da variável de controle. Incremento: define como a variável de controle do laço varia cada vez que o laço é repetido. 55
  56. 56. for Exemplo: int x; for(x=1;x<=100;x++) printf(“%d”,x);Linguagem C for(x=100;x!=65;x-=5) { z=x*x; printf(“o quadrado de %d é %f”,x,z); } O laço infinito: for( ; ; ) printf(“este laço é infiniton”); ch=”0”; for( ; ; ){ ch=getchar(); if (ch==”A”) break;  o comando break causa o término imediato do laço } printf(“Você digitou A”); 56
  57. 57. while Sintaxe: while(condição) comando;Linguagem C ou while(condição) { comandos; } A condição pode ser qualquer expressão, e verdadeiro é qualquer valor não-zero. Quando a condição é falsa, o controle do programa passa para o primeiro comando após o bloco de código do comando while. 57
  58. 58. while Exemplo: void main(){ int t=1, dia;Linguagem C while(t) { printf(“Digite um dia da semana, ou <99> para encerrar: “); scanf(“%d”,&dia); switch(dia) { case 1: printf(“nDomingon”); break; . case 7: printf(“nSábadon”); break; case 99: printf(“nEncerrandon”); t=0; break; default: printf(“nNúmero inválido!!!n”); } /* fim switch*/ } /* fim while */ } /* fim main() */ 58
  59. 59. do-while Ao contrário dos laços for e while, que testam asLinguagem C condições no início, o do-while testa a condição no final. Este laço sempre será executado pelo menos uma vez e repete até que a condição se torne falsa. Sintaxe: do { comando } while (condição); Exemplo: do { scanf(“%d”,&num); }while(num!=99); 59
  60. 60. Comandos de desvio São utilizados para realizar desvios dentro de umLinguagem C programa. • break: O comando break tem duas finalidades. A primeira é de terminar um case num comando switch e a segunda é de forçar o término imediato de um laço de repetição. Exemplo: for(t=0;t<100;t++){ print(“%d n”,t); if(t==10) break; } 60
  61. 61. Comandos de desvio • continue:Linguagem C Força a repetição (retorna ao início do laço e testa a condição). Exemplo: for(x=0;x<100;x++){ if (x%2) continue; print(“%d n”,x); } 61
  62. 62. Comandos de desvio • goto:Linguagem C Apesar das linguagens possuírem estruturas de controle eficientes, também é disponibilizado o comando de desvio. Deve-se ter um cuidado muito grande, pois a sua utilização em demasia ou de forma incorreta tende a tornar os programas ilegíveis. A sua utilização é simples, basta declarar um rótulo (identificador aceito pela linguagem C seguido de dois pontos) e, de algum ponto do programa estabelecer o desvio através da declaração goto rótulo; Sintaxe: goto rótulo; rótulo: 62
  63. 63. Comandos de desvio Exemplo:Linguagem C int x=1; retorno: printf(“%d”,x); x++; if(x<=100) goto retorno; 63
  64. 64. Comandos de desvio • exit():Linguagem C Assim como o comando break força o término de um laço, a função exit() força o término de execução de um programa, retornando ao sistema operacional. Sintaxe: void exit(código_de_erro); onde código_de_erro é utilizado para indicar o estado de retorno. Quando for zero, indica término normal de execução e outros valores são utilizados para indicar algum tipo de erro (retornado para a variável ERRORLEVEL em arquivos “batch” do DOS). 64
  65. 65. Lista de Exercícios 1. Anacleto tem 1,50 metro e cresce 2 centímetros porLinguagem C ano, enquanto Felisberto tem 1,10 metro e cresce 3 centímetros por ano. Calcule e exiba quantos anos serão necessários para que Felisberto seja maior que Anacleto. 2. Imprima os números perfeitos menores de 100. Nota: Número perfeito é aquele cuja soma de seus divisores, exceto ele próprio, é igual ao número. Exemplo: 6 é perfeito porque 1 + 2 + 3 = 6. 3. Calcule e apresente o valor de S no seguinte somatório: S = 1/225 – 2/196 + 4/169 – 8/144 + ... + 16384/1 65
  66. 66. Ementa • IntroduçãoLinguagem C • Operadores e Expressões • Funções de E/S • Estruturas de Controle • Vetores e Matrizes • Strings • Ponteiros • Funções • Estruturas • Alocação Dinâmica de Memória • Arquivos 66
  67. 67. Vetor • Um vetor é uma matriz de uma dimensãoLinguagem C capaz de armazenar um conjunto de variáveis de mesmo tipo, referenciadas pelo seu nome e por um índice. • Sintaxe: tipo nome[tamanho]; • As variáveis são alocadas seqüencialmente na memória. • tamanho representa o número de elementos suportado pelo vetor. • O índice do vetor varia de 0 a (tamanho-1). 67
  68. 68. Vetor Exemplo:Linguagem C main(){ int notas[5], i, soma=0; for (i=0; i<5 ; i++) { printf(“Digite a nota %d:”,i); scanf(“%d”,&notas[i]); } for (i=0; i<5 ; i++) soma = soma + notas[i]; printf(“Media = %f”, (float) soma/5); } Vetor notas 10 5 0 7 2 índices 0 1 2 3 4 68
  69. 69. Verificação de Limites • A linguagem C não faz verificação automática dos limites dos vetores.Linguagem C • O teste dos limites deve ser realizado pelo programa e é erro comum de programação: main() { int a[10],i; for (i=1;i<=10;i++) scanf(“%d”,&a[i]); } 69
  70. 70. Exercícios 1. Leia dois vetores A e B com 5 elementos inteirosLinguagem C cada, calcule e escreva: – O vetor S = A + B; – O vetor W com os elementos intercalados de A e B; – O vetor Z obtido pela inversão da ordem de A; – O vetor Q com os elementos comuns de A e B; – O vetor Y correspondente à união de A e B; – Coloque A em ordem crescente de seus elementos. 70
  71. 71. Matrizes • Possuem duas dimensões fazendo menção a linhasLinguagem C e colunas. • Sintaxe: tipo nome[dim_linha][dim_coluna]; • Ex: int N[2][3]; Matriz N 5 6 7  Valores 0 1 6 7 8  Valores Linha 0 1 2  Coluna 71
  72. 72. Matrizes #include <stdio.h>Linguagem C main() { int a[2][3], x, y; printf(“Digite 6 valores”); for(x=0; x<2; x++) for(y=0; y<3; y++) scanf(“%d”, &a[x][y]); } 72
  73. 73. Inicialização de Matrizes • C permite a inicialização de matrizes noLinguagem C momento da declaração. Ex: int i[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int sqrs [5][2] = { 1, 1, 2, 4, 3, 9, 4, 16, 5, 25 }; 73
  74. 74. Matrizes Não-Dimensionadas • C pode calcular automaticamente as dimensões deLinguagem C uma matriz, usando matriz não-dimensionadas. Se, na inicialização de uma matriz, seu tamanho for omitido, o compilador C cria uma matriz grande o bastante para conter todos os dados inicializadores presentes. int i[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int sqrs [][2] = { 1, 1, 2, 4, 3, 9, 4, 16, 5, 25 }; 74
  75. 75. Exercícios 1. Leia uma matriz 5x5, imprima a soma dosLinguagem C elementos da diagonal principal e a soma dos elementos da diagonal secundária. 2. Leia duas matrizes A e B, do tipo 3x3, calcule em uma matriz R sua multiplicação, ou seja, R = A * B. 3. Leia uma matriz 5x5, calcule a sua transposta. Imprima as duas matrizes. 4. Faça um programa que ordene uma matriz de 5x5 em ordem decrescente, de maneira que o maior valor se localize na posição [0][0] e o menor na [4][4]. O programa deve escrever a matriz original e a ordenada. 75
  76. 76. Ementa • IntroduçãoLinguagem C • Operadores e Expressões • Funções de E/S • Estruturas de Controle • Vetores e Matrizes • Strings • Ponteiros • Funções • Estruturas • Alocação Dinâmica de Memória • Arquivos 76
  77. 77. Matrizes de char (strings) • Uma "string" é definida como sendo constituída de uma matriz de caracteres (tipo de dado char - 1 byte)Linguagem C que é terminada por um "nulo". Um nulo é especificado usando-se 0 que é zero. • Por exemplo, se quisermos declarar uma matriz "str" que possa armazenar uma string de 10 caracteres, escrevemos: char str [11]; • As funções de manipulação de string armazenam e manipulam automaticamente o ‘0’. • Uma constante string fica entre “ “ (aspas), ex: printf(“%s”, “Curso C”); 77
  78. 78. Strings • Leitura de uma string do teclado: A maneira mais fácil de inserir uma string pelo teclado é com aLinguagem C função de biblioteca gets(). A forma geral da função gets() é: gets(nome_da_matriz); #include <stdio.h> main() { char str [80]; printf("informe uma string:"); gets(str); /*le a string do teclado*/ printf("%s", str); } 78
  79. 79. Inicialização de Strings • Inicialização de string dimensionada:Linguagem C char erro[17] = “erro de leituran”; • Inicialização de string não-dimensionada. Deixa que o compilador crie uma matriz grande o suficiente para conter a string: char erro[] = “erro de leituran”; 79
  80. 80. Funções de Manipulação de String • As funções de manipulação de strings estão declaradas no arquivo de cabeçalho “string.h”.Linguagem C Função strcpy(): Copia o conteúdo da string "de" para a string "para". Forma geral: strcpy(para,de); #include <stdio.h> #include<string.h> main(){ char str [80]; strcpy(str, "Alo"); printf("%s", str); } 80
  81. 81. Funções de Manipulação de String Função strlen(): Retorna o tamanho de s.Linguagem C strlen(s); onde s é uma string. /* imprime o tamanho da string digitada */ #include<stdio.h> #include<string.h> main() { char str [80]; printf("digite uma string:"); gets(str); printf("%d", strlen(str)); } 81
  82. 82. Funções de Manipulação de String Função strcmp(): Compara duas strings e retorna 0 se elas forem iguais. Se s1 é lexicograficamente maior (Exemplos:Linguagem C "BBBB">"AAAA") que s2, então um número positivo é retornado; se for menor que s2, um numero negativo é retornado. strcmp(s1,s2); #include<stdio.h> #include <string.h> main() { char s[80]; printf("informe a senha:"); gets(s); if(strcmp(s, "senha")) printf("senha invalidan"); else printf("senha corretan"); } 82
  83. 83. Funções de Manipulação de String Função strcat(): Anexa (concatena) "s2" em " s1";Linguagem C "s2" não é modificada. As duas strings devem ser terminadas com nulo e o resultado também será terminado com um nulo. strcat(s1,s2); #include <stdio.h> #include <string.h> main(){ char s1[20], s2[15]; strcpy(s1, "Alo"); strcpy(s2," para todos"); strcat(s1,s2); printf("%s",s1); } 83
  84. 84. Exercícios 1. Escrever um programa que lê duas strings eLinguagem C informa o tamanho, a igualdade entre elas e no final escrever as strings concatenadas. 2. Escrever um programa que lê uma string e a escreve em ordem inversa. 3. Escrever um programa que lê uma string e escreve quantos caracteres iguais a ‘a’ existem na string. 4. Escrever um programa que lê uma string e a escreve em maiúsculo. Ver função toupper. 5. Escrever um programa que lê uma string s[30] e escreve cada palavra desta string numa nova linha 84
  85. 85. Ementa • IntroduçãoLinguagem C • Operadores e Expressões • Funções de E/S • Estruturas de Controle • Vetores e Matrizes • Strings • Ponteiros • Funções • Estruturas • Alocação Dinâmica de Memória • Arquivos 85
  86. 86. Ponteiros • Um ponteiro é uma variável que contém um endereço de memória. Esse endereço é normalmente a posiçãoLinguagem C de uma outra variável na memória. • Sintaxe: tipo *nome_ponteiro; • tipo do ponteiro define que tipo de variável o ponteiro pode apontar. • Operadores de Ponteiros: & Operador unário que retorna o endereço na memória do seu operando. * Operador unário que retorna o valor da variável localizada no endereço que o segue. 86
  87. 87. Exemplos • int y, x=0, *px, *py; px=&x; “px aponta para x”Linguagem C y=*px; “y recebe conteúdo de x, ou seja, 0” py=px; “py também aponta para x” *py=3; “variável apontada por py, ou seja, x, recebe 3” • float x=10.1, y; int *p; p=&x; /* erro */ y=*p; printf(“%f”,y); • int x, *p; x=10; *p=x; /* cuidado, ponteiro perdido */ /* (contém lixo) */ 87
  88. 88. Expressões com Ponteiros • Os ponteiros podem aparecer normalmente no lugar das variáveis.Linguagem C • O operador * tem maior precedência que as operações matemáticas. Y = *px + 1; /* y recebe a soma de 1 ao conteúdo de *px */ y = *(px+1); /* y recebe o conteúdo do endereço de px + 1 (próximo) */ • Dois ponteiros, como outras variáveis, podem ser comparados. if (p1==p2).. /* verifica se p1 e p2 apontam para a mesma variável */ 88
  89. 89. Incremento e Decremento de Ponteiros • Os ponteiros não são necessariamenteLinguagem C incrementados e decrementados em uma unidade, mas pelo tamanho do tipo apontado pelo ponteiro. • Os operadores ++ e -- possuem precedência sobre o * e operadores matemáticos. • Qual a diferença entre p++; (*p)++; *(p++); 89
  90. 90. Incremento e Decremento de PonteirosLinguagem C p++; incrementa o ponteiro, ou seja, o endereço(p passa a apontar para a posição de memória imediatamente superior). (*p)++; incrementa o conteúdo apontado por p, ou seja, o valor armazenado na variável para a qual p está apontando. *(p++); incrementa p, como em p++, e acessa o valor encontrado na nova posição. 90
  91. 91. Ponteiros e Matrizes • Há um grande relacionamento entre ponteiros eLinguagem C matrizes. • Versões com ponteiros são mais rápidas. • Os ponteiros possuem mais facilidades de manipulação. • Ao contrário das matrizes, os ponteiros podem ser incrementados e decrementados diretamente. 91
  92. 92. Exemplo • Lendo um vetor com ponteiro:Linguagem C main() { int a[5]={0,1,2,3,4}, *p, x; p=&a[0]; /* mesmo que p=a */ x=*(p+2); /* x recebe a[2] */ printf(“%d”, x); } 92
  93. 93. Exemplo • Construindo um vetor com ponteiro:Linguagem C main(){ int vet[10], *p, i; p=vet; for (i=0,i<10;i++) { *p=i; p++; } p=vet; for (i=0,i<10;i++) printf(“%d”, *p++); } 93
  94. 94. Exemplo • Ponteiro com string:Linguagem C main(){ char str[80], *p; printf (“Digite string em letras maiúsculas: “); gets(str); printf (“Eis a string em letras minúsculas: “); p=str; /* p aponta para o primeiro elemento de str */ while (*p) printf(“%c”, tolower(*p++)); } 94
  95. 95. Exemplo • Matrizes de Ponteiros:Linguagem C main(){ char *erro[2]={“arquivo inexistenten”, “erro na leituran”}; printf (“%s”, erro[0]); printf (“%s”, erro[1]); } 95
  96. 96. Exercícios 1. Usando ponteiros, faça um programa queLinguagem C imprima uma string invertida. 2. Usando ponteiros, faça um programa que preencha uma matriz 10x10 de inteiros com os números de 1 a 100. 3. Usando ponteiros, faça um programa que leia duas strings e as concatene numa terceira string. 96
  97. 97. Teste 1. Leia 10 strings para uma matriz de string. Ordene eLinguagem C imprima as strings em ordem alfabética. 2. Na teoria de sistemas define-se como elemento minimax de uma matriz o menor elemento da linha em que se encontra o maior elemento da matriz. Escreva um programa que leia uma matriz 4 x 4 e determine e imprima o seu elemento minimax. 3. Escreva um programa que converta um numero em notação romana para notação decimal. Considere números menores que 1000. 97
  98. 98. Ementa • IntroduçãoLinguagem C • Operadores e Expressões • Funções de E/S • Estruturas de Controle • Vetores e Matrizes • Strings • Ponteiros • Funções • Estruturas • Alocação Dinâmica de Memória • Arquivos 98
  99. 99. Funções • É uma sub-rotina que realiza uma tarefa específica. •Linguagem C Um programa em C é uma coleção de funções. • Forma geral de uma função: tipo_retorno nome(lista_parâmetros) { // corpo da função } tipo_retorno especifica o tipo de dado retornado pela função. Pode ser qualquer tipo válido exceto um array. nome especifica o nome da função. lista_parâmetros é uma seqüência de pares de tipo e identificador separados por vírgulas. São as variáveis que recebem o valor dos argumentos passados para a função quando chamada. 99
  100. 100. Função sem parâmetro // Este programa contém duas funções: main() e minha_func()Linguagem C void minha_func(); // protótipo de minha_func() // Não há parâmetros formais int main(){ printf(“Em main() n”); minha_func(); // chame minha_func() printf(“De volta a main()”); } // Esta é a definição da função. void minha_func(){ printf(“De dentro de minha_func()n”); } Em main() De dentro de minha_func() De volta a main() 100
  101. 101. Função com parâmetro void box(int length, int width, int height); // protótipo de box() com 3 parâmetros formaisLinguagem C int main(){ box(7, 20, 4); // passa argumentos para box box(28, 30, 25); box(3, 5, 4); } // Computa o volume da caixa. void box(int length, int width, int height){ printf(“Volume da caixa e %d”, length*width *height); } // Os parâmetros recebem os valores dos argumentos passados para box(). 101
  102. 102. O retorno de valores • Uma função pode retornar um valor para seuLinguagem C chamador. • Para retornar um valor usamos return valor. • O tipo do valor retornado deve ser compatível com o tipo de retorno declarado na função. Se não for, um erro em tempo de compilação ocorrerá. 102
  103. 103. Função com retorno int box(int length, int width, int height); // box() agora retorna umLinguagem C inteiro int main(){ int volume; volume=box(7, 20, 4); // o valor de retorno de box() é atribuído a volume. printf(“O Volume da caixa e %d”, volume); } // Computa o volume da caixa. int box(int length, int width, int height){ return length*width*hieght; } // box() retorna o volume da caixa para main() O Volume da caixa e 560 103
  104. 104. Regras de Escopo • Existem três tipos de variáveis: variáveis locais,Linguagem C parâmetros formais e variáveis globais. • As regras de escopo regem a visibilidade e o tempo de vida de cada um desses tipos. Variáveis Locais  Declaradas dentro de uma função ou dentro de um bloco de código.  Conhecidas apenas dentro do bloco no qual estão declaradas.  São criadas na entrada do bloco e destruídas na saída. 104
  105. 105. Variáveis Locais void func1() { int x; //x é local para func1()Linguagem C x=10; printf(“x = %d”,x); } void func2(){ int x=9; //x é local para func2(). if (x==9){ int y=20; //y é local ao bloco if printf(“x + y = %d”, x+y); } y=100; //erro! Y não é conhecido aqui. } 105
  106. 106. Parâmetros Formais • Parâmetros FormaisLinguagem C – São as variáveis que recebem os argumentos de uma função. – Dentro de uma função, elas se comportam como qualquer outra variável local. – Os parâmetros formais declarados devem ser do mesmo tipo dos argumentos usados para chamar a função. 106
  107. 107. Parâmetros Formais #include <stdio.h> /* declaração do arquivo de cabeçalho*/Linguagem C int mul_var(int, int); /* declaração do protótipo mul_var */ int mul_var(int x, int y) /* declaração da função mul_var */ { int z; Parâmetros formais z = x * y; da função return(z); } void main(void) /* declaração da função main() { int a, b, mul; Argumentos da função, devem ser printf("Digite 2 valores:n"); do mesmo tipo do parâmetro formal scanf("%d %d", &a, &b); mul = mul_var( a, b); /* chamada da função mul_var*/ printf("n %d ", mul); } 107
  108. 108. Variáveis Globais • Variáveis GlobaisLinguagem C – Estas variáveis são declaradas fora das funções, ou seja, logo após as declarações #include. – São conhecidas por todo o programa e podem ser usadas por qualquer parte do código. – Variáveis globais retêm seus valores durante toda a execução do programa. 108
  109. 109. Variáveis Globais #include <stdio.h> void func1();Linguagem C int count; // count é global int main() { int i; // i é local for (i=0;i<10;i++) { count = i*2; func1(); } return 0; } void func1() { printf(“count: %dn”, count); //acessa count global } 109
  110. 110. Exercícios 1. Escreva e teste a seguinte função média(), que retorna aLinguagem C média dos três números: float media(float x1, float x2, float x3) 1. Escreva e teste a seguinte função power(), que retorna x elevado a potência de n, onde n pode ser qualquer inteiro: double power(double x, int n) Utilize o algoritmo que calcularia x20 multiplicando 1 por x 20 vezes. 3. Escreva e teste a seguinte função isSquare(), que determina se o inteiro dado é um número quadrado: int isSquare(int n). Retorna 1 se for número quadrado e 0 caso contrário. Os primeiros 10 números quadrados são: 0, 1, 4, 9, 16, 25, 36, 49, 64 e 81 110
  111. 111. Passagem de ponteiros para funções #include <stdio.h>Linguagem C void f(int *j); // f adota um ponteiro int* como parâmetro int main() { int i=0, *p; p=&i; f(p); // passa o ponteiro // ou f(&i) passa o endereço de i printf(“ i = %d”, i); return 0; } // f recebe um ponteiro para um int void f(int *j) { *j=100; // var apontado por j recebe 100 } 111
  112. 112. Passagem de um array • Quando um array é um argumento paraLinguagem C uma função, o endereço do array é passado, e não uma cópia de todo o array. • Um nome de array sem qualquer índice é um ponteiro para o primeiro elemento no array. 112
  113. 113. Passagem de um array #include <stdio.h> void mostra(int num[10]);Linguagem C int main() { int t[10], i; for (i=0; i<10 ;i++) t[i]=i; mostra (t); // passa o array t para uma função return 0; } // Parâmetro é um array dimensionado void mostra(int num[10]) { int i; for (i=0; i<10 ;i++) printf(“%d “,num[i]); } OBS: O Compilador C automaticamente converterá o parâmetro num para um ponteiro int, já que nenhum parâmetro pode receber um array inteiro. Apenas o endereço do array é passado. 113
  114. 114. Passagem de um array Outras possibilidades de passar um ponteiro deLinguagem C array: • Parâmetro é um array não dimensionado void mostra(int num[ ]) { int i; for (i=0; i<10 ;i++) printf(“%d “,num[i]); } • Parâmetro declarado como ponteiro void mostra(int *num) { int i; for (i=0; i<10 ;i++) printf(“%d “,num[i]); } // um ponteiro pode ser indexado usando [], como se // fosse um array 114
  115. 115. Passagem de strings • Como uma string é simplesmente um arrayLinguagem C de caracteres que é terminado por caractere nulo, quando passamos uma string para uma função, apenas um ponteiro para o início da string é na realidade passado. 115
  116. 116. Passagem de strings void strInvertCase(char *str);Linguagem C int main() { char str[80]; strcpy(str, “Isto E Um Teste”); strInvertCase(str); //passa ponteiro para str puts(str); return 0; } void strInvertCase(char *str){ while(*str) { if (isupper(*str)) *str=tolower(*str); else if (islower(*str)) *str=toupper(*str); str++; }} 116
  117. 117. Exercícios 1. Escreva e teste a função strlen() 2. Escreva e teste a seguinte função:Linguagem C void add(float a[], int n, float b[]); A função adiciona os primeiros n elementos de b aos n primeiros elementos de a. Por exemplo, se a for {2.2,3.3,4.4,5.5,6.6,7.7,8.8,8.9} e b for {6.0,5.0,4.0,3.0,2.0,1.0}, a chamada add(a, 5, b) transformaria a em {8.2, 8.3, 8.4, 8.5, 8.6, 7.7, 8.8, 8.9}. 3. Escreva e teste a seguinte função, que remove um item de um array: void remove(float a[], int &n, int i); A função remove a[i] mudando para baixo todos os elementos acima dessa posição e decrementando n. 117
  118. 118. A função main() • Podemos passar informações para um programa aoLinguagem C rodá-lo. Isto é possível passando argumentos de linha de comando para a função main(). • C define dois parâmetros embutidos, mas opcionais para main(). Eles são argc e argv. • argc é um número inteiro que contém o número de argumentos na linha de comandos. Ele sempre será pelo menos 1, porque o nome do programa se qualifica como primeiro argumento. • argv é um ponteiro para um array de ponteiros de caracteres. Cada ponteiro no array argv aponta para uma string contendo um argumento de linha de comando. 118
  119. 119. A função main() • O nome do programa é apontado porLinguagem C argv[0]; argv[1] apontará para o primeiro argumento, argv[2] para o segundo argumento e assim por diante. • argv é declarado da seguinte forma: char *argv[]; 119
  120. 120. argc e argv • Esse programa exibe os argumentos da linha de comando:Linguagem C int main(int argc, char *argv[]) { for (int i=0; i<argc; i++) puts(argv[i]); return 0; } Se o programa for chamado de ComLine, então executá-lo da forma: Comline um dois tres, teríamos a seguinte saída: Comline um dois tres 120
  121. 121. Exercícios 1. Escreva e teste a seguinte função que retorna oLinguagem C índice do menor valor de um array dado: int minIndex(float a[ ]) 1. Escreva e teste a seguinte função que retorna o valor mínimo entre os primeiros n elementos de um array dado: float min(float a[ ], int n) 1. Escreva a função strcpy(). 2. Escreva um programa que exiba a soma dos dois argumentos numéricos de linha de comando. 121
  122. 122. Ementa • IntroduçãoLinguagem C • Operadores e Expressões • Funções de E/S • Estruturas de Controle • Vetores e Matrizes • Strings • Ponteiros • Funções • Estruturas • Alocação Dinâmica de Memória • Arquivos 122
  123. 123. Estruturas • Uma estrutura é uma coleção de variáveisLinguagem C referenciadas pelo mesmo nome. • As variáveis que formam a estrutura são chamadas de membros ou campos da estrutura. • A palavra reservada struct informa ao compilador a definição de uma estrutura. 123
  124. 124. Estruturas Exemplo de estrutura:Linguagem C struct pessoal { char nome[30]; char endereco[80]; int idade; float salario; }; Para declarar uma variável com essa estrutura: struct pessoal funcionario; 124
  125. 125. Estruturas Referência aos elementos da estrutura: operador ponto (.)Linguagem C gets(funcionario.nome); funcionario.idade=20; printf(“ %f”, funcionario.salario); puts(funcionario.endereco); 125
  126. 126. Matrizes de Estruturas • Para declarar uma matriz de estruturas do tipoLinguagem C pessoal de 100 elementos: struct pessoal funcionario[100]; • Para acessar uma estrutura específica, indexamos o nome da estrutura. Por exemplo, para imprimir o campo nome da estrutura 3: gets(funcionario[3].nome); 126
  127. 127. Exercício 1. Escreva um programa simples queLinguagem C gerencie um cadastro com registros com os campos NOME, SEXO, COR_DE_OLHOS, IDADE, ALTURA e PESO. Escreva as funções Inserir, Exibir e Excluir um registro da matriz. Obtenha a seleção das funções através de um menu. Sugestão: assuma que uma estrutura não está em uso se o campo NOME estiver vazio. 127
  128. 128. Uniões • Uma união é uma localização de memóriaLinguagem C usada por muitas variáveis diferentes, que podem ser de tipos diferentes. A definição de uma união é parecida com aquela de uma estrutura: union u_type { int i; char ch; }; • Para declarar uma variável do tipo u_type: union u_type cvnt; 128
  129. 129. Uniões • Em cntv, tanto o inteiro i como oLinguagem C caractere ch compartilham da mesma localização de memória. No entanto i ocupa dois bytes e ch apenas um. • Para acessar um elemento de uma union: cvnt.i=1; 129
  130. 130. Exemplo de União main(void){Linguagem C union u_type { int i; char ch[2]; }; union u_type cvnt; cvnt.i=1000; printf ("uniao u como int: %dn", cvnt.i); printf ("uniao u como char: %c %cn", cvnt.ch[0],cvnt.ch[1]); getch(); } 130
  131. 131. typedef • C permite a definição de novos nomes de tipos deLinguagem C dados com a palavra-chave typedef. • A forma geral da instrução typedef é: typedef tipo nome; • Por exemplo, podemos criar um novo nome para float usando: typedef float balance; • Essa instrução diria ao compilador para reconhecer balance, como um novo nome pra float. Assim, poderíamos criar uma variável float usando: balance v_contabil; 131
  132. 132. Enumerações • Enumeração é um conjunto de constantes inteirasLinguagem C com nome e especifica todos os valores legais que uma variável daquele tipo pode ter. • Forma geral: enum nome_do_tipo_enum {lista de veriáveis} lista variável; • Exemplo: enum transporte {carro, aviao, trem, navio}; • Declaração de variável enum: enum transporte tr1; 132
  133. 133. Enumerações • Cada um dos símbolos da enumeração representa um valor inteiro. Como tal, elesLinguagem C podem ser usados em qualquer expressão de números inteiros. A menos que inicializado de outra forma, o valor do primeiro símbolo da enumeração é 0, o valor do segundo é 1 e assim por diante. tr1=navio; if (tr1==carro) printf(“ vou de carro”); printf(“%d”, aviao); 133
  134. 134. Ementa • IntroduçãoLinguagem C • Operadores e Expressões • Funções de E/S • Estruturas de Controle • Vetores e Matrizes • Strings • Ponteiros • Funções • Estruturas • Alocação Dinâmica de Memória • Arquivos 134
  135. 135. Alocação Dinâmica de Memória • Um programa em C usa uma das duas maneiras principais de se armazenar informações na memóriaLinguagem C principal do computador. • A primeira maneira usa variáveis globais e locais. Variáveis globais têm seu armazenamento fixo durante todo o tempo de execução do programa. Variáveis locais são armazenadas na pilha do programa. Entretanto essa maneira requer que o programador saiba, com antecedência, o montante de armazenamento necessário para cada situação. • A segunda maneira é através de alocação dinâmica da área de memória livre (heap) do programa. • As funções malloc() e free() formam o sistema de alocação dinâmica de C. 135
  136. 136. malloc() • void *malloc(unsigned size)Linguagem C Retorna um ponteiro void para o primeiro byte de uma região da memória de tamanho size da área de alocação dinâmica. O ponteiro void deverá ser atribuído a um ponteiro do tipo desejado (usar cast explícito). Se não houver memória suficiente para satisfazer o pedido, malloc() retornará um ponteiro NULL. 136
  137. 137. free() • free (void *p)Linguagem C O oposto de malloc(), free() devolve ao sistema a memória previamente alocada. free() nunca deve ser chamada com um argumento inválido, porque isto fará com que o computador destrua a lista livre. 137
  138. 138. Exemplo main() { */ Aloca memória para 50 inteiros /*Linguagem C int *p, t; p=(int *)malloc(50*sizeof(int)); if (!p) printf(“Memória Insuficiente!”); else { for (t=0; t<50; t++) *(p+t)=t; for (t=0; t<50; t++) printf(”%d”, *(p+t)); free(p) } } 138
  139. 139. Exercício 1. Escreva um programa que aloque espaço para cinco strings inseridas pelo usuário.Linguagem C 2. Escreva uma função getstruct() que aloque memória para uma estrutura addr e retorne o ponteiro para a memória alocada: struct addr { char nome[40]; char rua[40]; char cidade[30]; char esrado[3]; char cep[10]; }; 139
  140. 140. Ementa • IntroduçãoLinguagem C • Operadores e Expressões • Funções de E/S • Estruturas de Controle • Vetores e Matrizes • Strings • Ponteiros • Funções • Estruturas • Alocação Dinâmica de Memória • Arquivos 140
  141. 141. Arquivos Ponteiro de ArquivoLinguagem C • Para ler ou escrever em um arquivo de disco, o programa deve declarar uma variável ponteiro de arquivo. • Um ponteiro de arquivo é um ponteiro para uma área na memória(buffer) onde estão contidos vários dados sobre o arquivo a ler ou escrever, tais como o nome do arquivo, estado e posição corrente • Este buffer intermediário entre arquivo e programa é chamado fluxo‘ ou ‘stream’, e é uma entidade lógica genérica, que pode estar associada a uma unidade de fita magnética, um disco, uma porta serial, etc. 141
  142. 142. Arquivos Ponteiro de ArquivoLinguagem C • Para obter uma variável ponteiro de arquivo : FILE *fp; onde fp é o ponteiro de arquivo. Abrindo um Arquivo: • A função fopen() abre um fluxo e liga um arquivo a esse fluxo. Retorna o ponteiro de arquivo associado ao fluxoem questão. FILE *fopen(char *nome_de_arquivo, char *modo); • onde modo é uma string contendo o estado desejado para abertura. • O nome do arquivo deve ser uma string de caracteres que compreende um nome de arquivo válido incluindo uma especificação de caminho (PATH). 142

×