Linguagem C
Introdução e Primeiros Passos
Regis Pires Magalhães
[email protected]
http://regispiresmag.googlepages.com/cefet
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).
[email protected]
http://regispiresmag.googlepages.com/cefet
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.
[email protected]
http://regispiresmag.googlepages.com/cefet
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, …
[email protected]
http://regispiresmag.googlepages.com/cefet
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.
[email protected]
http://regispiresmag.googlepages.com/cefet
Geração de Executável
Editor (módulo fonte em C)
Pré‐processador (novo fonte expandido)
Compilador (arquivo objeto)
Lincador (executável)
[email protected]
http://regispiresmag.googlepages.com/cefet
Exemplo 1 #include <stdio.h> /* Um Primeiro Programa */ main () { printf ("Ola! Eu estou vivo!\n"); system("pause"); }
[email protected]
http://regispiresmag.googlepages.com/cefet
Exemplo 2 #include <stdio.h> main() { int Dias; /* * Declaracao de * Variaveis */ float Anos; printf("Entre com o numero de dias: "); /* Entrada de Dados */ scanf("%d", &Dias); Anos=Dias/365.25; // Conversao Dias->Anos printf("\n\n%d dias equivalem a %f anos.\n", Dias, Anos); system("pause"); }
[email protected]
http://regispiresmag.googlepages.com/cefet
Exemplo 3 #include <stdio.h> main() { int x; printf("Digite um numero"); scanf("%d",&x); printf("%d\n",x); system("pause"); }
[email protected]
http://regispiresmag.googlepages.com/cefet
Exemplo 4 #include <stdio.h> main() { int x; printf("Digite um numero"); scanf("%d",&x); printf("O dobro e %d\n", 2 * x); system("pause"); }
[email protected]
http://regispiresmag.googlepages.com/cefet
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.
[email protected]
http://regispiresmag.googlepages.com/cefet
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.
[email protected]
http://regispiresmag.googlepages.com/cefet
Forma geral da função tipo_de_retorno nome_da_função(lista_de_argumentos) { código_da_função }
[email protected]
http://regispiresmag.googlepages.com/cefet
Exemplo de Função #include <stdio.h> /* Funcao simples: so imprime Ola! */ mensagem() { printf("Ola! "); } main() { mensagem(); printf("Eu estou vivo!\n"); system("pause"); }
[email protected]
http://regispiresmag.googlepages.com/cefet
Exemplo de função #include <stdio.h> /* Calcula o quadrado de x */ int square(int x) { return x * x; } main() { int num; printf("Entre com um numero: "); scanf("%d", &num); printf("\n\nO quadrado e %d\n", square(num)); system("pause"); }
[email protected]
http://regispiresmag.googlepages.com/cefet
Exemplo de função #include <stdio.h> int prod(int x, int y) { return (x*y); } main() { int saida; saida=prod(12, 7); printf("A saida e: %d\n", saida); system("pause"); }
[email protected]
http://regispiresmag.googlepages.com/cefet
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("A saida e: %f\n", saida); system("pause"); }
[email protected]
http://regispiresmag.googlepages.com/cefet
Exercício
Escreva uma função para receber dois números e, depois, exibir a sua soma.
[email protected]
http://regispiresmag.googlepages.com/cefet
Solução #include <stdio.h> main() { float n1, n2; printf("Digite um numero: "); scanf("%f", &n1); printf("Digite outro numero: "); scanf("%f", &n2); printf("A soma e: %f\n", (n1 + n2)); system("pause"); }
[email protected]
http://regispiresmag.googlepages.com/cefet
Entradas e Saídas
Caracteres
Tipo char.
Ocupa 8 bits.
#include <stdio.h> main() { char Ch; Ch='D'; printf("%c", Ch); printf("%d", Ch); system("pause"); }
[email protected]
// Imprime como inteiro
http://regispiresmag.googlepages.com/cefet
Entradas e Saídas
Para obter o caractere pressionado:
getche()
getch()
Imprime o caractere na tela antes de retorná-lo. 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.
[email protected]
http://regispiresmag.googlepages.com/cefet
getch() #include <stdio.h> #include
main() { printf("Tecle algo..."); char ch=getch(); printf("Voce pressionou a tecla %c\n", ch); system("pause"); }
[email protected]
http://regispiresmag.googlepages.com/cefet
Equivalente ANSI
Diferenças:
Requer o pressionamento da tecla <ENTER> após a entrada de teclado.
#include <stdio.h> main() { char ch; printf("Tecle algo..."); scanf("%c", &ch); printf("Voce pressionou a tecla %c\n", ch); system("pause"); } [email protected]
http://regispiresmag.googlepages.com/cefet
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);
[email protected]
http://regispiresmag.googlepages.com/cefet
Códigos de controle Código
Significado
%d
Inteiro
%f
Float
%c
Caractere
%s
String
%%
Coloca na tela um %
[email protected]
http://regispiresmag.googlepages.com/cefet
Formatação Numérica
%d
Escreve um inteiro na tela, preenchendo com espaços à esquerda para que ele ocupe pelo menos casas na tela.
printf("%4d", 10);
Exibe: <espaco><espaco>10
[email protected]
http://regispiresmag.googlepages.com/cefet
Formatação Numérica
%0d
Escreve um inteiro na tela, preenchendo com zeros à esquerda para que ele ocupe pelo menos casas na tela.
printf("%04d", 10);
Exibe: 0010
[email protected]
http://regispiresmag.googlepages.com/cefet
Formatação Numérica
%.0d
Escreve um inteiro na tela, preenchendo com espaços à esquerda para que ele ocupe pelo menos casas na tela e com zeros para que ele possua pelo menos comprimento .
printf("%6.04d", 10);
Exibe: <espaço><espaço>0010
[email protected]
http://regispiresmag.googlepages.com/cefet
Formatação Numérica
%f
Escreve um ponto flutuante na tela, sem formatação.
printf("%f", 10.0);
Exibe: 10.000000
[email protected]
http://regispiresmag.googlepages.com/cefet
Formatação Numérica
%e
Escreve um ponto flutuante na tela em notação científica.
printf("%e", 10.02545);
Exibe: 1.002545e+01
[email protected]
http://regispiresmag.googlepages.com/cefet
Formatação Numérica
%.<decimais>f
Escreve um ponto flutuante na tela, com tamanho e <decimais> casas decimais.
O ponto também conta no tamanho.
printf("%6.2f", 10.0);
Exibe: <espaço>10.00
[email protected]
http://regispiresmag.googlepages.com/cefet
Operadores
Atribuição (=)
Aritméticos
*e/
%
+e-
[email protected]
http://regispiresmag.googlepages.com/cefet
Operadores Relacionais ==
igual
!=
diferente de
>
maior que
<
menor que
>=
maior ou igual
<=
menor ou igual
[email protected]
http://regispiresmag.googlepages.com/cefet
Operadores Lógicos
&& (e)
|| (ou)
! (não)
[email protected]
http://regispiresmag.googlepages.com/cefet
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; ...
[email protected]
http://regispiresmag.googlepages.com/cefet
Operador Ternário #include <stdio.h> main() { int n1, n2; printf("Digite um numero: "); scanf("%d", &n1); printf("Digite outro numero: "); scanf("%d", &n2); printf("O maior e: %d\n", n1 > n2 ? n1 : n2; system("pause"); }
[email protected]
http://regispiresmag.googlepages.com/cefet
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)
[email protected]
http://regispiresmag.googlepages.com/cefet
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
S1M
[email protected]
http://regispiresmag.googlepages.com/cefet
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.
[email protected]
http://regispiresmag.googlepages.com/cefet
Operadores de incremento e decremento #include <stdio.h> main() { int a = 10; printf("%d", ++a); system("pause"); } #include <stdio.h> main() { int a = 10; printf("%d", a++); system("pause"); } [email protected]
http://regispiresmag.googlepages.com/cefet
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;
[email protected]
http://regispiresmag.googlepages.com/cefet
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 ("%d", sizeof(int));
exibe 4 na tela
[email protected]
http://regispiresmag.googlepages.com/cefet
A função sizeof() #include <stdio.h> main() { printf("Tamanho de um int: %d bytes\n", sizeof(int)); printf("Tamanho de 10.25: %d bytes\n", sizeof(10.25)); char str[20] = "Maria"; printf("Tamanho de str: %d bytes\n", sizeof(str)); system("pause"); }
[email protected]
http://regispiresmag.googlepages.com/cefet
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("%d", &valor);
imprime o endereço da variável valor.
[email protected]
http://regispiresmag.googlepages.com/cefet