Linguagem C Regis Pires Magalhães Introdução e Primeiros Passos
Histórico Surgiu na década de 1970 nos laboratórios Bell. Dennis Richie e Brian Kerninghan implementaram C usando um DEC PDP-11 rodando o SO UNIX. Derivado da linguagem B, criada por Ken Thompson. B deriva da linguagem BCPL, criada por Martin Richards. Nos anos 1980 iniciou-se a criação de um padrão chamado C ANSI (American National Standardization Institute).
Características Linguagem de propósito genérico; Usada para escrever processadores de texto, planilhas, sistemas operacionais, programas de comunicação, programas para automação industrial, SGBDs, navegadores e servidores Web, etc. Possui características de alto e de baixo nível; Excelente performance; Muito popular; Sintaxe de C serve de base para muitas outras linguagens.
Características Deu origem a outras linguagens de programação, entre elas C++, Java, C#, PHP, Ruby, Python, etc. Muito usada no desenvolvimento de: Compiladores, interpretadores, editores de texto, banco de dados, computação gráfica, manipulação e processamento de imagens, controle de processos, …
Características Portabilidade Geração de códigos executáveis compactos e rápidos Interação com o sistema operacional Facilidade de uso Linguagem estruturada Confiabilidade Simplicidade Case sensitive Maiúsculas e minúsculas fazem diferença.
Geração de Executável Editor (módulo fonte em C)‏ Pré‐processador (novo fonte expandido)‏ Compilador (arquivo objeto)‏ Lincador (executável)‏
Exemplo 1 #include   <stdio.h> /* Um Primeiro Programa */ main () { printf ( &quot;Ola! Eu estou vivo!\n&quot; ); system( &quot;pause&quot; ); }
Exemplo 2 #include   <stdio.h> main() { int  Dias; /* * Declaracao de * Variaveis */ float  Anos; printf( &quot;Entre com o numero de dias: &quot; ); /* Entrada de Dados */ scanf( &quot;%d&quot; , &Dias); Anos=Dias/365.25;  // Conversao Dias->Anos printf( &quot;\n\n%d dias equivalem a %f anos.\n&quot; , Dias, Anos); system( &quot;pause&quot; ); }
Exemplo 3 #include   <stdio.h> main() { int  x; printf( &quot;Digite um numero&quot; ); scanf( &quot;%d&quot; ,&x); printf( &quot;%d\n&quot; ,x); system( &quot;pause&quot; ); }
Exemplo 4 #include   <stdio.h> main() { int  x; printf( &quot;Digite um numero&quot; ); scanf( &quot;%d&quot; ,&x); printf( &quot;O dobro e %d\n&quot; , 2 * x); system( &quot;pause&quot; ); }
Introdução às funções Uma função é um bloco de código de programa que pode ser usado diversas vezes em sua execução.  O uso de funções permite que o programa fique mais legível, mais bem estruturado. Um programa em C consiste, no fundo, de várias funções colocadas juntas.
Introdução às funções Argumentos Argumentos são as entradas que a função recebe. É através dos argumentos que passamos parâmetros para a função. As funções printf() e scanf() são funções que recebem argumentos.
Forma geral da função tipo_de_retorno  nome_da_função(lista_de_argumentos) { código_da_função }
Exemplo de Função #include   <stdio.h> /* Funcao simples: so imprime Ola! */ mensagem() { printf( &quot;Ola! &quot; ); } main() { mensagem(); printf( &quot;Eu estou vivo!\n&quot; ); system( &quot;pause&quot; ); }
Exemplo de função #include   <stdio.h> /* Calcula o quadrado de x */ int  square( int  x) { return  x * x; } main() { int  num; printf( &quot;Entre com um numero: &quot; ); scanf( &quot;%d&quot; , &num); printf( &quot;\n\nO quadrado e %d\n&quot; , square(num)); system( &quot;pause&quot; ); }
Exemplo de função #include   <stdio.h> int  prod( int  x,  int  y) { return  (x*y); } main() { int  saida; saida=prod(12, 7); printf( &quot;A saida e: %d\n&quot; , saida); system( &quot;pause&quot; ); }
Exemplo de função #include   <stdio.h> float  prod( float  x,  float  y) { return  (x*y); } main() { float  saida; saida=prod(45.2, 0.0067); printf( &quot;A saida e: %f\n&quot; , saida); system( &quot;pause&quot; ); }
Exercício Escreva uma função para receber dois números e, depois, exibir a sua soma.
Solução #include   <stdio.h> main() { float  n1, n2;  printf( &quot;Digite um numero: &quot; ); scanf( &quot;%f&quot; , &n1); printf( &quot;Digite outro numero: &quot; ); scanf( &quot;%f&quot; , &n2); printf( &quot;A soma e: %f\n&quot; , (n1 + n2)); system( &quot;pause&quot; ); }
Entradas e Saídas Caracteres Tipo char. Ocupa 8 bits. #include   <stdio.h> main() { char  Ch; Ch= 'D' ; printf( &quot;%c&quot; , Ch); printf( &quot;%d&quot; , Ch);  // Imprime como inteiro system( &quot;pause&quot; ); }
Entradas e Saídas Para obter o caractere pressionado: getche()  Imprime o caractere na tela antes de retorná-lo. getch()   Apenas retorna o caratere pressionado sem imprimi-lo na tela. Essas funçoes são encontradas no arquivo  conio.h  que somente está disponível para Windows. Não é padrão ANSI.
getch()‏ #include   <stdio.h> #include   <conio.h> main() { printf ( &quot;Tecle algo...&quot; ); char  ch=getch(); printf ( &quot;Voce pressionou a tecla %c\n&quot; , ch); system( &quot;pause&quot; ); }
Equivalente ANSI Diferenças:  Requer o pressionamento da tecla <ENTER> após a entrada de teclado. #include   <stdio.h> main() { char  ch; printf ( &quot;Tecle algo...&quot; ); scanf ( &quot;%c&quot; , &ch); printf ( &quot;Voce pressionou a tecla %c\n&quot; , ch); system( &quot;pause&quot; ); }
printf() e scanf()‏ Forma geral da função  printf() : printf (string_de_controle,lista_de_argumentos); Forma geral da função  scanf() : scanf (string_de_controle,lista-de-argumentos);
Códigos de controle Código  Significado %d  Inteiro %f  Float %c  Caractere %s  String %%  Coloca na tela um %
Formatação Numérica %<numero>d Escreve um inteiro na tela, preenchendo com espaços à esquerda para que ele ocupe pelo menos <numero> casas na tela. printf(&quot;%4d&quot;, 10); Exibe: <espaco><espaco>10
Formatação Numérica %0<numero>d Escreve um inteiro na tela, preenchendo com zeros à esquerda para que ele ocupe pelo menos <numero> casas na tela. printf(&quot;%04d&quot;, 10); Exibe: 0010
Formatação Numérica %<numero1>.0<numero2>d Escreve um inteiro na tela, preenchendo com espaços à esquerda para que ele ocupe pelo menos <numero1> casas na tela e com zeros para que ele possua pelo menos comprimento <numero2>. printf(&quot;%6.04d&quot;, 10); Exibe: <espaço><espaço>0010
Formatação Numérica %f Escreve um ponto flutuante na tela, sem formatação. printf(&quot;%f&quot;, 10.0); Exibe: 10.000000
Formatação Numérica %e Escreve um ponto flutuante na tela em notação científica. printf(&quot;%e&quot;, 10.02545); Exibe: 1.002545e+01
Formatação Numérica %<tamanho>.<decimais>f Escreve um ponto flutuante na tela, com tamanho <tamanho> e <decimais> casas decimais.  O ponto também conta no tamanho. printf(&quot;%6.2f&quot;, 10.0); Exibe: <espaço>10.00
Operadores Atribuição (=)‏ Aritméticos * e / % + e -
Operadores Relacionais ==  igual !=  diferente de >  maior que <  menor que >=  maior ou igual <=  menor ou igual
Operadores Lógicos && (e)‏ || (ou)‏ ! (não)‏
Operador Ternário Operador que usa três argumentos: expr  ?  valor1  :  valor2 Se expr  avaliar for  verdadeira ,  valor1 será o resultado da expressão. Se expr for falsa ,  valor2 será o resultado da expressão. int   x ,   y, maior ; ... maior  =  x  > y ? x : y; ...
Operador Ternário #include   <stdio.h> main() { int  n1, n2; printf ( &quot;Digite um numero: &quot; ); scanf ( &quot;%d&quot; , &n1); printf ( &quot;Digite outro numero: &quot; ); scanf ( &quot;%d&quot; , &n2); printf ( &quot;O maior e: %d\n&quot; ,  n1 > n2 ? n1 : n2 ;  system( &quot;pause&quot; ); }
Expressões lógicas !(a == b) é́ equivalente a a != b !(a != b) é́ equivalente a a == b !(a > b) é́ equivalente a a <= b !(a < b) é́ equivalente a a >= b !(a >= b) é́ equivalente a a < b !(a <= b) é́ equivalente a a > b !a && !b é equivalente a !(a || b)‏ !a || !b é equivalente a !(a && b)‏
Expressões O resultado de uma expressão lógica ou relacional é: 0 (falso)‏ 1 ou qualquer outro número diferente de zero (verdadeiro)‏ Para facilitar: NÃ 0 S 1 M
Operadores de incremento e decremento Incremento (++)‏ Decremento (--)‏ a++;  Incrementa o valor da variável a em uma unidade. A posição do operador de incremento e decremento determina a ordem de execução do que está em seu derredor.
Operadores de incremento e decremento #include   <stdio.h> main() { int  a = 10; printf ( &quot;%d&quot; , ++a); system( &quot;pause&quot; ); } #include   <stdio.h> main() { int  a = 10; printf ( &quot;%d&quot; , a++); system( &quot;pause&quot; ); }
Atribuições Simplificadas Comando  Exemplo  Corresponde a: +=  a += 2  a = a + 2; -=  a -= 2  a = a - 2; ∗ =  a *= 2;  a = a * 2; /=  a /= 2;  a = a / 2; %=  a %= 2;  a = a % 2;
A função sizeof()‏ A função sizeof(algo) retorna o tamanho, em bytes, de algo que pode ser um determinado tipo, uma variável ou um valor constante. printf (&quot;%d&quot;, sizeof(int)); exibe 4 na tela
A função sizeof()‏ #include   <stdio.h> main() { printf ( &quot;Tamanho de um int: %d bytes\n&quot; ,  sizeof ( int )); printf ( &quot;Tamanho de 10.25: %d bytes\n&quot; ,  sizeof (10.25)); char  str[20] =  &quot;Maria&quot; ; printf ( &quot;Tamanho de str: %d bytes\n&quot; ,  sizeof (str)); system( &quot;pause&quot; ); }
O endereço de uma variável Toda variável tem um endereço de memória associado a ela. O operador & (address-of) retorna o endereço de uma determinada variável: printf(&quot;%d&quot;, &valor); imprime o endereço da variável valor.

Linguagem C 01 Primeiros Passos

  • 1.
    Linguagem C RegisPires Magalhães Introdução e Primeiros Passos
  • 2.
    Histórico Surgiu nadécada de 1970 nos laboratórios Bell. Dennis Richie e Brian Kerninghan implementaram C usando um DEC PDP-11 rodando o SO UNIX. Derivado da linguagem B, criada por Ken Thompson. B deriva da linguagem BCPL, criada por Martin Richards. Nos anos 1980 iniciou-se a criação de um padrão chamado C ANSI (American National Standardization Institute).
  • 3.
    Características Linguagem depropósito genérico; Usada para escrever processadores de texto, planilhas, sistemas operacionais, programas de comunicação, programas para automação industrial, SGBDs, navegadores e servidores Web, etc. Possui características de alto e de baixo nível; Excelente performance; Muito popular; Sintaxe de C serve de base para muitas outras linguagens.
  • 4.
    Características Deu origema outras linguagens de programação, entre elas C++, Java, C#, PHP, Ruby, Python, etc. Muito usada no desenvolvimento de: Compiladores, interpretadores, editores de texto, banco de dados, computação gráfica, manipulação e processamento de imagens, controle de processos, …
  • 5.
    Características Portabilidade Geraçãode códigos executáveis compactos e rápidos Interação com o sistema operacional Facilidade de uso Linguagem estruturada Confiabilidade Simplicidade Case sensitive Maiúsculas e minúsculas fazem diferença.
  • 6.
    Geração de ExecutávelEditor (módulo fonte em C)‏ Pré‐processador (novo fonte expandido)‏ Compilador (arquivo objeto)‏ Lincador (executável)‏
  • 7.
    Exemplo 1 #include <stdio.h> /* Um Primeiro Programa */ main () { printf ( &quot;Ola! Eu estou vivo!\n&quot; ); system( &quot;pause&quot; ); }
  • 8.
    Exemplo 2 #include <stdio.h> main() { int Dias; /* * Declaracao de * Variaveis */ float Anos; printf( &quot;Entre com o numero de dias: &quot; ); /* Entrada de Dados */ scanf( &quot;%d&quot; , &Dias); Anos=Dias/365.25; // Conversao Dias->Anos printf( &quot;\n\n%d dias equivalem a %f anos.\n&quot; , Dias, Anos); system( &quot;pause&quot; ); }
  • 9.
    Exemplo 3 #include <stdio.h> main() { int x; printf( &quot;Digite um numero&quot; ); scanf( &quot;%d&quot; ,&x); printf( &quot;%d\n&quot; ,x); system( &quot;pause&quot; ); }
  • 10.
    Exemplo 4 #include <stdio.h> main() { int x; printf( &quot;Digite um numero&quot; ); scanf( &quot;%d&quot; ,&x); printf( &quot;O dobro e %d\n&quot; , 2 * x); system( &quot;pause&quot; ); }
  • 11.
    Introdução às funçõesUma função é um bloco de código de programa que pode ser usado diversas vezes em sua execução. O uso de funções permite que o programa fique mais legível, mais bem estruturado. Um programa em C consiste, no fundo, de várias funções colocadas juntas.
  • 12.
    Introdução às funçõesArgumentos Argumentos são as entradas que a função recebe. É através dos argumentos que passamos parâmetros para a função. As funções printf() e scanf() são funções que recebem argumentos.
  • 13.
    Forma geral dafunção tipo_de_retorno nome_da_função(lista_de_argumentos) { código_da_função }
  • 14.
    Exemplo de Função#include <stdio.h> /* Funcao simples: so imprime Ola! */ mensagem() { printf( &quot;Ola! &quot; ); } main() { mensagem(); printf( &quot;Eu estou vivo!\n&quot; ); system( &quot;pause&quot; ); }
  • 15.
    Exemplo de função#include <stdio.h> /* Calcula o quadrado de x */ int square( int x) { return x * x; } main() { int num; printf( &quot;Entre com um numero: &quot; ); scanf( &quot;%d&quot; , &num); printf( &quot;\n\nO quadrado e %d\n&quot; , square(num)); system( &quot;pause&quot; ); }
  • 16.
    Exemplo de função#include <stdio.h> int prod( int x, int y) { return (x*y); } main() { int saida; saida=prod(12, 7); printf( &quot;A saida e: %d\n&quot; , saida); system( &quot;pause&quot; ); }
  • 17.
    Exemplo de função#include <stdio.h> float prod( float x, float y) { return (x*y); } main() { float saida; saida=prod(45.2, 0.0067); printf( &quot;A saida e: %f\n&quot; , saida); system( &quot;pause&quot; ); }
  • 18.
    Exercício Escreva umafunção para receber dois números e, depois, exibir a sua soma.
  • 19.
    Solução #include <stdio.h> main() { float n1, n2; printf( &quot;Digite um numero: &quot; ); scanf( &quot;%f&quot; , &n1); printf( &quot;Digite outro numero: &quot; ); scanf( &quot;%f&quot; , &n2); printf( &quot;A soma e: %f\n&quot; , (n1 + n2)); system( &quot;pause&quot; ); }
  • 20.
    Entradas e SaídasCaracteres Tipo char. Ocupa 8 bits. #include <stdio.h> main() { char Ch; Ch= 'D' ; printf( &quot;%c&quot; , Ch); printf( &quot;%d&quot; , Ch); // Imprime como inteiro system( &quot;pause&quot; ); }
  • 21.
    Entradas e SaídasPara obter o caractere pressionado: getche() Imprime o caractere na tela antes de retorná-lo. getch() Apenas retorna o caratere pressionado sem imprimi-lo na tela. Essas funçoes são encontradas no arquivo conio.h que somente está disponível para Windows. Não é padrão ANSI.
  • 22.
    getch()‏ #include <stdio.h> #include <conio.h> main() { printf ( &quot;Tecle algo...&quot; ); char ch=getch(); printf ( &quot;Voce pressionou a tecla %c\n&quot; , ch); system( &quot;pause&quot; ); }
  • 23.
    Equivalente ANSI Diferenças: Requer o pressionamento da tecla <ENTER> após a entrada de teclado. #include <stdio.h> main() { char ch; printf ( &quot;Tecle algo...&quot; ); scanf ( &quot;%c&quot; , &ch); printf ( &quot;Voce pressionou a tecla %c\n&quot; , ch); system( &quot;pause&quot; ); }
  • 24.
    printf() e scanf()‏Forma geral da função printf() : printf (string_de_controle,lista_de_argumentos); Forma geral da função scanf() : scanf (string_de_controle,lista-de-argumentos);
  • 25.
    Códigos de controleCódigo Significado %d Inteiro %f Float %c Caractere %s String %% Coloca na tela um %
  • 26.
    Formatação Numérica %<numero>dEscreve um inteiro na tela, preenchendo com espaços à esquerda para que ele ocupe pelo menos <numero> casas na tela. printf(&quot;%4d&quot;, 10); Exibe: <espaco><espaco>10
  • 27.
    Formatação Numérica %0<numero>dEscreve um inteiro na tela, preenchendo com zeros à esquerda para que ele ocupe pelo menos <numero> casas na tela. printf(&quot;%04d&quot;, 10); Exibe: 0010
  • 28.
    Formatação Numérica %<numero1>.0<numero2>dEscreve um inteiro na tela, preenchendo com espaços à esquerda para que ele ocupe pelo menos <numero1> casas na tela e com zeros para que ele possua pelo menos comprimento <numero2>. printf(&quot;%6.04d&quot;, 10); Exibe: <espaço><espaço>0010
  • 29.
    Formatação Numérica %fEscreve um ponto flutuante na tela, sem formatação. printf(&quot;%f&quot;, 10.0); Exibe: 10.000000
  • 30.
    Formatação Numérica %eEscreve um ponto flutuante na tela em notação científica. printf(&quot;%e&quot;, 10.02545); Exibe: 1.002545e+01
  • 31.
    Formatação Numérica %<tamanho>.<decimais>fEscreve um ponto flutuante na tela, com tamanho <tamanho> e <decimais> casas decimais. O ponto também conta no tamanho. printf(&quot;%6.2f&quot;, 10.0); Exibe: <espaço>10.00
  • 32.
    Operadores Atribuição (=)‏Aritméticos * e / % + e -
  • 33.
    Operadores Relacionais == igual != diferente de > maior que < menor que >= maior ou igual <= menor ou igual
  • 34.
    Operadores Lógicos &&(e)‏ || (ou)‏ ! (não)‏
  • 35.
    Operador Ternário Operadorque usa três argumentos: expr ? valor1 : valor2 Se expr avaliar for verdadeira , valor1 será o resultado da expressão. Se expr for falsa , valor2 será o resultado da expressão. int x , y, maior ; ... maior = x > y ? x : y; ...
  • 36.
    Operador Ternário #include <stdio.h> main() { int n1, n2; printf ( &quot;Digite um numero: &quot; ); scanf ( &quot;%d&quot; , &n1); printf ( &quot;Digite outro numero: &quot; ); scanf ( &quot;%d&quot; , &n2); printf ( &quot;O maior e: %d\n&quot; , n1 > n2 ? n1 : n2 ; system( &quot;pause&quot; ); }
  • 37.
    Expressões lógicas !(a== b) é́ equivalente a a != b !(a != b) é́ equivalente a a == b !(a > b) é́ equivalente a a <= b !(a < b) é́ equivalente a a >= b !(a >= b) é́ equivalente a a < b !(a <= b) é́ equivalente a a > b !a && !b é equivalente a !(a || b)‏ !a || !b é equivalente a !(a && b)‏
  • 38.
    Expressões O resultadode uma expressão lógica ou relacional é: 0 (falso)‏ 1 ou qualquer outro número diferente de zero (verdadeiro)‏ Para facilitar: NÃ 0 S 1 M
  • 39.
    Operadores de incrementoe decremento Incremento (++)‏ Decremento (--)‏ a++; Incrementa o valor da variável a em uma unidade. A posição do operador de incremento e decremento determina a ordem de execução do que está em seu derredor.
  • 40.
    Operadores de incrementoe decremento #include <stdio.h> main() { int a = 10; printf ( &quot;%d&quot; , ++a); system( &quot;pause&quot; ); } #include <stdio.h> main() { int a = 10; printf ( &quot;%d&quot; , a++); system( &quot;pause&quot; ); }
  • 41.
    Atribuições Simplificadas Comando Exemplo Corresponde a: += a += 2 a = a + 2; -= a -= 2 a = a - 2; ∗ = a *= 2; a = a * 2; /= a /= 2; a = a / 2; %= a %= 2; a = a % 2;
  • 42.
    A função sizeof()‏A função sizeof(algo) retorna o tamanho, em bytes, de algo que pode ser um determinado tipo, uma variável ou um valor constante. printf (&quot;%d&quot;, sizeof(int)); exibe 4 na tela
  • 43.
    A função sizeof()‏#include <stdio.h> main() { printf ( &quot;Tamanho de um int: %d bytes\n&quot; , sizeof ( int )); printf ( &quot;Tamanho de 10.25: %d bytes\n&quot; , sizeof (10.25)); char str[20] = &quot;Maria&quot; ; printf ( &quot;Tamanho de str: %d bytes\n&quot; , sizeof (str)); system( &quot;pause&quot; ); }
  • 44.
    O endereço deuma variável Toda variável tem um endereço de memória associado a ela. O operador & (address-of) retorna o endereço de uma determinada variável: printf(&quot;%d&quot;, &valor); imprime o endereço da variável valor.