SlideShare uma empresa Scribd logo
1 de 165
Baixar para ler offline
Treinamento em
                Desenvolvimento de
              Aplicativos para Sistemas
                     Embarcados
Linguagem C




                Linguagem C




                                          1
Bibliografia

              • Shildt, Herbert , C Completo e Total, Editora
Linguagem 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
Ementa

              •   Introdução
Linguagem 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
Introdução
              • Histórico
Linguagem 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
Introdução
              • Características
Linguagem 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
Introdução

              • Aplicação
Linguagem C


                –   Sistemas Operacionais
                –   Compiladores
                –   Planilhas Eletrônicas
                –   Editores de Texto
                –   Banco de Dados



                                            6
Introdução
              • Linguagem de máquina: única linguagem que o
                computador entende, ou seja, que pode ser
Linguagem 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
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
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
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
Introdução

              • C é uma linguagem compilada
Linguagem C



                                               Executável
                       Fontes C


                                  Compilação                Ligação




                                          +
                       Arquivos OBJ                Bibliotecas



                                                                      11
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
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
Mapa de Memória
Linguagem C

                    Pilha



                    Heap



                  Variáveis
                   Globais


                  Código do
                  Programa

                                14
Tipos básicos de dados
              TIPO     BITs    BYTEs            DESCRIÇÃO                   DOMÍNIO
Linguagem 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
Modificadores de tipos básicos
              signed char  -128 a 127
Linguagem 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
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
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
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
Ementa

              •   Introdução
Linguagem 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
Operadores
              • Operador de Atribuição
Linguagem 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
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 direita
Linguagem 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
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
Operadores

              • Atribuição Múltipla
Linguagem 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
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
Incremento/Decremento
              Utilizados para incrementar e/ou decrementar em uma
              unidade o valor de uma variável. Eles podem ser
Linguagem 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
Operadores Relacionais

              • As expressões compostas com operadores
Linguagem 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
Operadores Lógicos

              • Os operadores lógicos comparam duas expressões
Linguagem 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
Operadores Bit a Bit

              • Os operadores de bit só podem ser
Linguagem 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
Operadores Bit a Bit

              Ex.: a = 15   0   0   0   0   1   1   1   1
Linguagem 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
Operador Condicional (Ternário)

              • O operador condicional (ou ternário) consiste de um
Linguagem 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
Expressões Reduzidas

                    Expressão normal      Expressão reduzida
Linguagem 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
Precedência dos Operadores
              Maior        ( ) [ ] ->

                           !    ~    ++          --    -   (tipo)   *   &   sizeof
Linguagem C

                           *    /        %
                           + -
                           << >>
                           <        <=       >    >=
                           ==       !=
                           &
                           ^
                           |
                           &&
                           ||
                           ?:
                           =    +=       -=           *=   /=   etc.
              Menor        ,
                                                                                     33
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
Ementa

              •   Introdução
Linguagem 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
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
E/S pelo console
              Código           Significado
              %d               Exibe um inteiro no formato decimal com
Linguagem 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
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
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
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
                 }
E/S pelo console

              Instruções   Descrição
Linguagem 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
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
Exercícios

              1. Utilize o operador sizeof para exibir quanto
Linguagem 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
Ementa

              •   Introdução
Linguagem 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
Estruturas de Controle

              • Governam o fluxo de execução do
Linguagem 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
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
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
if aninhados

              Ocorre quando um comando if é um objeto de um
Linguagem C


              outro if ou else.
                       Sintaxe exemplo:
                                if ( i )
                                {
                                    if ( k ) comando1;
                                    if ( j ) comando2;
                                    else comando3;
                                }
                                else comando4;

                                                              48
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
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
Operador Ternário

              main(){
Linguagem C


                 int x = 3, y = 7, max;
                 max = (x>y)?1:0;
                 printf(“max = %dn”,max);
                 }




                                             51
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 àquela
Linguagem 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
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
Comandos de repetição

              O comando de repetição é utilizado nos casos
Linguagem 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
for

              Inicialização: é geralmente uma atribuição
Linguagem 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
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
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
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
do-while

              Ao contrário dos laços for e while, que testam as
Linguagem 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
Comandos de desvio

                São utilizados para realizar desvios dentro de um
Linguagem 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
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
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
Comandos de desvio

              Exemplo:
Linguagem C


              int x=1;
              retorno:
                   printf(“%d”,x);
                   x++;
                   if(x<=100) goto retorno;



                                              63
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
Lista de Exercícios

              1. Anacleto tem 1,50 metro e cresce 2 centímetros por
Linguagem 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
Ementa

              •   Introdução
Linguagem 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
Vetor
              • Um vetor é uma matriz de uma dimensão
Linguagem 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
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
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
Exercícios

              1. Leia dois vetores A e B com 5 elementos inteiros
Linguagem 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
Matrizes

              • Possuem duas dimensões fazendo menção a linhas
Linguagem 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
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
Inicialização de Matrizes

              • C permite a inicialização de matrizes no
Linguagem 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
Matrizes Não-Dimensionadas

              • C pode calcular automaticamente as dimensões de
Linguagem 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
Exercícios

              1. Leia uma matriz 5x5, imprima a soma dos
Linguagem 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
Ementa

              •   Introdução
Linguagem 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
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
Strings
              • Leitura de uma string do teclado: A maneira mais
                fácil de inserir uma string pelo teclado é com a
Linguagem 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
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
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
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
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
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
Exercícios

              1. Escrever um programa que lê duas strings e
Linguagem 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
Ementa

              •   Introdução
Linguagem 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
Ponteiros
              • Um ponteiro é uma variável que contém um endereço
              de memória. Esse endereço é normalmente a posição
Linguagem 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
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
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
Incremento e Decremento de Ponteiros

              • Os ponteiros não são necessariamente
Linguagem 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
Incremento e Decremento de Ponteiros
Linguagem 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
Ponteiros e Matrizes
              • Há um grande relacionamento entre ponteiros e
Linguagem 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
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
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
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
Exemplo

              •   Matrizes de Ponteiros:
Linguagem C



              main(){
              char *erro[2]={“arquivo inexistenten”,
                             “erro na leituran”};
              printf (“%s”, erro[0]);
              printf (“%s”, erro[1]);
              }



                                                        95
Exercícios

              1. Usando ponteiros, faça um programa que
Linguagem 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
Teste

              1. Leia 10 strings para uma matriz de string. Ordene e
Linguagem 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
Ementa

              •   Introdução
Linguagem 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
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
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
Função com parâmetro
              void box(int length, int width, int height);
              // protótipo de box() com 3 parâmetros formais
Linguagem 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
O retorno de valores

              • Uma função pode retornar um valor para seu
Linguagem 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
Função com retorno
              int box(int length, int width, int
                   height);   // box() agora retorna um
Linguagem 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
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
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
Parâmetros Formais

              • Parâmetros Formais
Linguagem 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
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
Variáveis Globais

              •   Variáveis Globais
Linguagem 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
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
Exercícios

              1.   Escreva e teste a seguinte função média(), que retorna a
Linguagem 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
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
Passagem de um array

              • Quando um array é um argumento para
Linguagem 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
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
Passagem de um array

              Outras possibilidades de passar um ponteiro de
Linguagem 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
Passagem de strings

              • Como uma string é simplesmente um array
Linguagem 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
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
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
A função main()

              • Podemos passar informações para um programa ao
Linguagem 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
A função main()

              • O nome do programa é apontado por
Linguagem 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
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
Exercícios

              1. Escreva e teste a seguinte função que retorna o
Linguagem 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
Ementa

              •   Introdução
Linguagem 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
Estruturas

              • Uma estrutura é uma coleção de variáveis
Linguagem 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
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
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
Matrizes de Estruturas

              • Para declarar uma matriz de estruturas do tipo
Linguagem 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
Exercício

              1. Escreva um programa simples que
Linguagem 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
Uniões
              • Uma união é uma localização de memória
Linguagem 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
Uniões

              • Em cntv, tanto o inteiro i como o
Linguagem 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
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
typedef

              • C permite a definição de novos nomes de tipos de
Linguagem 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
Enumerações

              •   Enumeração é um conjunto de constantes inteiras
Linguagem 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
Enumerações
              •   Cada um dos símbolos da enumeração
                  representa um valor inteiro. Como tal, eles
Linguagem 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
Ementa

              •   Introdução
Linguagem 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
Alocação Dinâmica de Memória
              • Um programa em C usa uma das duas maneiras
                principais de se armazenar informações na memória
Linguagem 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
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
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
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
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
Ementa

              •   Introdução
Linguagem 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
Arquivos
              Ponteiro de Arquivo
Linguagem 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
Arquivos
              Ponteiro de Arquivo
Linguagem 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
Modos de Abertura
              Modo                            Significado
               "r"    Abre um arquivo-texto para leitura
Linguagem C

               "w"    Cria um arquivo-texto para escrita
               "a"    Acrescenta dados para um arquivo-texto existente
              "rb"    Abre um arquivo binário para leitura
              "wb"    Cria um arquivo binário para escrita
              "ab"    Acrescenta dados a um arquivo binário existente
              "r+"    Abre um arquivo-texto para leitura/escrita
              "w+"    Cria um arquivo-texto para leitura/escrita
              "a+"    Acrescenta dados ou cria um arquivo-texto para
                      leitura/escrita
              "r+b"   Abre um arquivo binário para leitura/escrita
              "w+b"   Cria um arquivo binário para leitura/escrita
              "a+b"   Acrescenta ou cria um arquivo binário para leitura/escrita
                                                                                   143
Abertura de Arquivo

              •     Um arquivo pode ser aberto ou em modo
Linguagem C


                  texto ou em modo binário.
              •      No modo texto, as seqüências de retorno de
                  carro e alimentação de formulários são
                  transformadas em seqüências de novas linhas
                  na entrada. Na saída, ocorre o inverso: novas
                  linhas são transformadas em retorno de carro e
                  alimentação de formulário. Tais transformações
                  não acontecem em um arquivo binário.



                                                                   144
Abertura de Arquivo

              •   Se um erro ocorre quando se está abrindo
Linguagem C

                  um arquivo, fopen() retorna um nulo
                  (NULL).
              •   Por exemplo: tentar abrir um arquivo
                  inexistente para leitura, escrever em um
                  arquivo protegido contra gravação, ou
                  ainda criar um arquivo se o disco estiver
                  cheio, um erro ocorrerá e fopen() retornará
                  NULL.

                                                                145
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

Mais conteúdo relacionado

Mais procurados

Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPDaniel Brandão
 
Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02thomasdacosta
 
Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Gercélia Ramos
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento webArlindo Santos
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Karoline Tavares
 
Protocolos HTTP e HTTPS
Protocolos HTTP e HTTPSProtocolos HTTP e HTTPS
Protocolos HTTP e HTTPSTrabalhosCVIGR
 
Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02thomasdacosta
 
Banco de dados - Mapeamento MER - Relacional
Banco de dados - Mapeamento MER - RelacionalBanco de dados - Mapeamento MER - Relacional
Banco de dados - Mapeamento MER - RelacionalDaniel Brandão
 
Programação Web - CSS
Programação Web - CSSProgramação Web - CSS
Programação Web - CSSMauro Pereira
 
Instalação, configuração e administração de um SO Cliente/Servidor
Instalação, configuração e administração de um SO Cliente/ServidorInstalação, configuração e administração de um SO Cliente/Servidor
Instalação, configuração e administração de um SO Cliente/ServidorEdgar Costa
 
Redes de Computadores - Aula 01
Redes de Computadores - Aula 01Redes de Computadores - Aula 01
Redes de Computadores - Aula 01thomasdacosta
 
Modelo entidade relacionamento
Modelo entidade relacionamentoModelo entidade relacionamento
Modelo entidade relacionamentoCarlos Melo
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem CLeonardo Lima
 
HTML - Aula 01 - Estrutura básica e tags básicas no html
HTML - Aula 01 - Estrutura básica e tags básicas no htmlHTML - Aula 01 - Estrutura básica e tags básicas no html
HTML - Aula 01 - Estrutura básica e tags básicas no htmlTiago Luiz Ribeiro da Silva
 

Mais procurados (20)

Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02
 
Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento web
 
Arquitetura de Redes de Computadores
 Arquitetura de Redes de Computadores Arquitetura de Redes de Computadores
Arquitetura de Redes de Computadores
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
Linguagem C - Strings
Linguagem C - StringsLinguagem C - Strings
Linguagem C - Strings
 
Linguagem C - Estruturas
Linguagem C - EstruturasLinguagem C - Estruturas
Linguagem C - Estruturas
 
Protocolos HTTP e HTTPS
Protocolos HTTP e HTTPSProtocolos HTTP e HTTPS
Protocolos HTTP e HTTPS
 
Curso de Desenvolvimento Web - Módulo 01 - HTML
Curso de Desenvolvimento Web - Módulo 01 - HTMLCurso de Desenvolvimento Web - Módulo 01 - HTML
Curso de Desenvolvimento Web - Módulo 01 - HTML
 
Fundamentos de Redes
Fundamentos de RedesFundamentos de Redes
Fundamentos de Redes
 
Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02
 
Banco de dados - Mapeamento MER - Relacional
Banco de dados - Mapeamento MER - RelacionalBanco de dados - Mapeamento MER - Relacional
Banco de dados - Mapeamento MER - Relacional
 
Programação Web - CSS
Programação Web - CSSProgramação Web - CSS
Programação Web - CSS
 
Instalação, configuração e administração de um SO Cliente/Servidor
Instalação, configuração e administração de um SO Cliente/ServidorInstalação, configuração e administração de um SO Cliente/Servidor
Instalação, configuração e administração de um SO Cliente/Servidor
 
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
 
Redes de Computadores - Aula 01
Redes de Computadores - Aula 01Redes de Computadores - Aula 01
Redes de Computadores - Aula 01
 
Modelo entidade relacionamento
Modelo entidade relacionamentoModelo entidade relacionamento
Modelo entidade relacionamento
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
 
HTML - Aula 01 - Estrutura básica e tags básicas no html
HTML - Aula 01 - Estrutura básica e tags básicas no htmlHTML - Aula 01 - Estrutura básica e tags básicas no html
HTML - Aula 01 - Estrutura básica e tags básicas no html
 

Semelhante a Linguagem c

Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 
IES GF - Linguagem de Programação Estruturada - Parte 1
IES GF - Linguagem de Programação Estruturada - Parte 1IES GF - Linguagem de Programação Estruturada - Parte 1
IES GF - Linguagem de Programação Estruturada - Parte 1Ramon Mayor Martins
 
Linguagen..
Linguagen..Linguagen..
Linguagen..essa
 
Linguagem de programação
Linguagem de programação Linguagem de programação
Linguagem de programação Marcos Gregorio
 
Linguagem C Entendendo a Programação
Linguagem C Entendendo a ProgramaçãoLinguagem C Entendendo a Programação
Linguagem C Entendendo a ProgramaçãoMonike Santos
 
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430Texas Instruments
 
Aula 03 - Interpretador [mr_@@@@@].pdf
Aula 03 - Interpretador [mr_@@@@@].pdfAula 03 - Interpretador [mr_@@@@@].pdf
Aula 03 - Interpretador [mr_@@@@@].pdfmouzinhoconcursos
 
Int. sistemas de informação iii
Int. sistemas de informação iiiInt. sistemas de informação iii
Int. sistemas de informação iiiRay Fran Pires
 
Trabalho linguagem python
Trabalho linguagem  pythonTrabalho linguagem  python
Trabalho linguagem pythonBruno Maspoli
 
Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)
Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)
Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)Leinylson Fontinele
 
aula03-introprogy.pptx
aula03-introprogy.pptxaula03-introprogy.pptx
aula03-introprogy.pptxbrayankedroksi
 

Semelhante a Linguagem c (20)

Apostila c
Apostila cApostila c
Apostila c
 
Mini Curso de C
Mini Curso de CMini Curso de C
Mini Curso de C
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
IES GF - Linguagem de Programação Estruturada - Parte 1
IES GF - Linguagem de Programação Estruturada - Parte 1IES GF - Linguagem de Programação Estruturada - Parte 1
IES GF - Linguagem de Programação Estruturada - Parte 1
 
Linguagen..
Linguagen..Linguagen..
Linguagen..
 
Linguagem de programação
Linguagem de programação Linguagem de programação
Linguagem de programação
 
Linguagem C Entendendo a Programação
Linguagem C Entendendo a ProgramaçãoLinguagem C Entendendo a Programação
Linguagem C Entendendo a Programação
 
Paradigmas de Linguagem
Paradigmas de LinguagemParadigmas de Linguagem
Paradigmas de Linguagem
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430
 
Aula 03 - Interpretador [mr_@@@@@].pdf
Aula 03 - Interpretador [mr_@@@@@].pdfAula 03 - Interpretador [mr_@@@@@].pdf
Aula 03 - Interpretador [mr_@@@@@].pdf
 
Int. sistemas de informação iii
Int. sistemas de informação iiiInt. sistemas de informação iii
Int. sistemas de informação iii
 
Aula 1 pc - slides
Aula 1   pc - slidesAula 1   pc - slides
Aula 1 pc - slides
 
Trabalho linguagem python
Trabalho linguagem  pythonTrabalho linguagem  python
Trabalho linguagem python
 
Isc aula 7
Isc   aula 7Isc   aula 7
Isc aula 7
 
Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)
Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)
Introdução à Computação Aula 09 - Algoritmos (Linguagens de Programação)
 
aula03-introprogy.pptx
aula03-introprogy.pptxaula03-introprogy.pptx
aula03-introprogy.pptx
 

Linguagem c

  • 1. Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados Linguagem C Linguagem C 1
  • 2. Bibliografia • Shildt, Herbert , C Completo e Total, Editora Linguagem 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. Ementa • Introdução Linguagem 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. Introdução • Histórico Linguagem 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. Introdução • Características Linguagem 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. Introdução • Aplicação Linguagem C – Sistemas Operacionais – Compiladores – Planilhas Eletrônicas – Editores de Texto – Banco de Dados 6
  • 7. Introdução • Linguagem de máquina: única linguagem que o computador entende, ou seja, que pode ser Linguagem 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. 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. 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. 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. Introdução • C é uma linguagem compilada Linguagem C Executável Fontes C Compilação Ligação + Arquivos OBJ Bibliotecas 11
  • 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. 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. Mapa de Memória Linguagem C Pilha Heap Variáveis Globais Código do Programa 14
  • 15. Tipos básicos de dados TIPO BITs BYTEs DESCRIÇÃO DOMÍNIO Linguagem 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. Modificadores de tipos básicos signed char  -128 a 127 Linguagem 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. 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. 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. 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. Ementa • Introdução Linguagem 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. Operadores • Operador de Atribuição Linguagem 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. 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 direita Linguagem 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. 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. Operadores • Atribuição Múltipla Linguagem 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. 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. Incremento/Decremento Utilizados para incrementar e/ou decrementar em uma unidade o valor de uma variável. Eles podem ser Linguagem 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. Operadores Relacionais • As expressões compostas com operadores Linguagem 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. Operadores Lógicos • Os operadores lógicos comparam duas expressões Linguagem 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. Operadores Bit a Bit • Os operadores de bit só podem ser Linguagem 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. Operadores Bit a Bit Ex.: a = 15 0 0 0 0 1 1 1 1 Linguagem 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. Operador Condicional (Ternário) • O operador condicional (ou ternário) consiste de um Linguagem 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. Expressões Reduzidas Expressão normal Expressão reduzida Linguagem 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. Precedência dos Operadores Maior ( ) [ ] -> ! ~ ++ -- - (tipo) * & sizeof Linguagem C * / % + - << >> < <= > >= == != & ^ | && || ?: = += -= *= /= etc. Menor , 33
  • 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. Ementa • Introdução Linguagem 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. 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. E/S pelo console Código Significado %d Exibe um inteiro no formato decimal com Linguagem 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. 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. 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. 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. E/S pelo console Instruções Descrição Linguagem 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. 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. Exercícios 1. Utilize o operador sizeof para exibir quanto Linguagem 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. Ementa • Introdução Linguagem 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. Estruturas de Controle • Governam o fluxo de execução do Linguagem 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. 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. 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. if aninhados Ocorre quando um comando if é um objeto de um Linguagem C outro if ou else. Sintaxe exemplo: if ( i ) { if ( k ) comando1; if ( j ) comando2; else comando3; } else comando4; 48
  • 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. 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. Operador Ternário main(){ Linguagem C int x = 3, y = 7, max; max = (x>y)?1:0; printf(“max = %dn”,max); } 51
  • 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 àquela Linguagem 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. 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. Comandos de repetição O comando de repetição é utilizado nos casos Linguagem 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. for Inicialização: é geralmente uma atribuição Linguagem 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. 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. 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. 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. do-while Ao contrário dos laços for e while, que testam as Linguagem 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. Comandos de desvio São utilizados para realizar desvios dentro de um Linguagem 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. 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. 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. Comandos de desvio Exemplo: Linguagem C int x=1; retorno: printf(“%d”,x); x++; if(x<=100) goto retorno; 63
  • 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. Lista de Exercícios 1. Anacleto tem 1,50 metro e cresce 2 centímetros por Linguagem 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. Ementa • Introdução Linguagem 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. Vetor • Um vetor é uma matriz de uma dimensão Linguagem 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. 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. 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. Exercícios 1. Leia dois vetores A e B com 5 elementos inteiros Linguagem 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. Matrizes • Possuem duas dimensões fazendo menção a linhas Linguagem 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. 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. Inicialização de Matrizes • C permite a inicialização de matrizes no Linguagem 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. Matrizes Não-Dimensionadas • C pode calcular automaticamente as dimensões de Linguagem 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. Exercícios 1. Leia uma matriz 5x5, imprima a soma dos Linguagem 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. Ementa • Introdução Linguagem 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. 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. Strings • Leitura de uma string do teclado: A maneira mais fácil de inserir uma string pelo teclado é com a Linguagem 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. 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. 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. 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. 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. 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. Exercícios 1. Escrever um programa que lê duas strings e Linguagem 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. Ementa • Introdução Linguagem 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. Ponteiros • Um ponteiro é uma variável que contém um endereço de memória. Esse endereço é normalmente a posição Linguagem 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. 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. 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. Incremento e Decremento de Ponteiros • Os ponteiros não são necessariamente Linguagem 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. Incremento e Decremento de Ponteiros Linguagem 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. Ponteiros e Matrizes • Há um grande relacionamento entre ponteiros e Linguagem 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. 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. 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. 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. 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. Exercícios 1. Usando ponteiros, faça um programa que Linguagem 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. Teste 1. Leia 10 strings para uma matriz de string. Ordene e Linguagem 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. Ementa • Introdução Linguagem 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. 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. 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. Função com parâmetro void box(int length, int width, int height); // protótipo de box() com 3 parâmetros formais Linguagem 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. O retorno de valores • Uma função pode retornar um valor para seu Linguagem 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. Função com retorno int box(int length, int width, int height); // box() agora retorna um Linguagem 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. 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. 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. Parâmetros Formais • Parâmetros Formais Linguagem 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. 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. Variáveis Globais • Variáveis Globais Linguagem 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. 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. Exercícios 1. Escreva e teste a seguinte função média(), que retorna a Linguagem 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. 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. Passagem de um array • Quando um array é um argumento para Linguagem 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. 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. Passagem de um array Outras possibilidades de passar um ponteiro de Linguagem 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. Passagem de strings • Como uma string é simplesmente um array Linguagem 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. 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. 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. A função main() • Podemos passar informações para um programa ao Linguagem 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. A função main() • O nome do programa é apontado por Linguagem 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. 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. Exercícios 1. Escreva e teste a seguinte função que retorna o Linguagem 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. Ementa • Introdução Linguagem 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. Estruturas • Uma estrutura é uma coleção de variáveis Linguagem 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. 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. 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. Matrizes de Estruturas • Para declarar uma matriz de estruturas do tipo Linguagem 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. Exercício 1. Escreva um programa simples que Linguagem 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. Uniões • Uma união é uma localização de memória Linguagem 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. Uniões • Em cntv, tanto o inteiro i como o Linguagem 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. 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. typedef • C permite a definição de novos nomes de tipos de Linguagem 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. Enumerações • Enumeração é um conjunto de constantes inteiras Linguagem 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. Enumerações • Cada um dos símbolos da enumeração representa um valor inteiro. Como tal, eles Linguagem 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. Ementa • Introdução Linguagem 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. Alocação Dinâmica de Memória • Um programa em C usa uma das duas maneiras principais de se armazenar informações na memória Linguagem 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. 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. 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. 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. 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. Ementa • Introdução Linguagem 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. Arquivos Ponteiro de Arquivo Linguagem 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. Arquivos Ponteiro de Arquivo Linguagem 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
  • 143. Modos de Abertura Modo Significado "r" Abre um arquivo-texto para leitura Linguagem C "w" Cria um arquivo-texto para escrita "a" Acrescenta dados para um arquivo-texto existente "rb" Abre um arquivo binário para leitura "wb" Cria um arquivo binário para escrita "ab" Acrescenta dados a um arquivo binário existente "r+" Abre um arquivo-texto para leitura/escrita "w+" Cria um arquivo-texto para leitura/escrita "a+" Acrescenta dados ou cria um arquivo-texto para leitura/escrita "r+b" Abre um arquivo binário para leitura/escrita "w+b" Cria um arquivo binário para leitura/escrita "a+b" Acrescenta ou cria um arquivo binário para leitura/escrita 143
  • 144. Abertura de Arquivo • Um arquivo pode ser aberto ou em modo Linguagem C texto ou em modo binário. • No modo texto, as seqüências de retorno de carro e alimentação de formulários são transformadas em seqüências de novas linhas na entrada. Na saída, ocorre o inverso: novas linhas são transformadas em retorno de carro e alimentação de formulário. Tais transformações não acontecem em um arquivo binário. 144
  • 145. Abertura de Arquivo • Se um erro ocorre quando se está abrindo Linguagem C um arquivo, fopen() retorna um nulo (NULL). • Por exemplo: tentar abrir um arquivo inexistente para leitura, escrever em um arquivo protegido contra gravação, ou ainda criar um arquivo se o disco estiver cheio, um erro ocorrerá e fopen() retornará NULL. 145