Documente Academic
Documente Profesional
Documente Cultură
Introduo
Sobre o curso
O curso ser apresentado em totalizando 20 (vinte) horas/aula. 5 (cinco) encontros,
20% Teoria
80% Prtica
Objetivos
Introduzir o aluno sintaxe de desenvolvimento da linguagem C; Apresentar a estrutura bsica de um programa em C; Apresentar regras programao; fundamentais de boa prtica de
Material de Apoio
Curso de Linguagem C http://www.ead.eee.ufmg.br/cursos/C/ UFMG -
C How to program 5. Ed. Deitel & Deitel C Completo e Total 3. Ed. Herbert Schildt
Linguagem C
Sobre a Linguagem
Surgiu na dcada de 70, criado por Dennis Ritchie. Uma das suas vantagens possuir caractersticas tanto de alto nvel quanto de baixo nvel. Muitos programas, ainda hoje, so desenvolvidos em C.
O C case sensitive!
Isso quer dizer que a linguagem C, diferencia letras maisculas e minsculas, tanto para nome de funes, variveis e comandos da linguagem; ou seja, ao declararmos as seguintes variveis: int Soma, SOMA, SoMa, soma; Todas as variveis acima sero diferentes para o C. Isto tambm se aplica aos comandos de sintaxe do C, como, por exemplo, o for e if que se forem escritos em maisculas o compilador no poder interpret-las corretamente.
Estrutura do Cdigo
Devido ao fato do C ser uma linguagem estruturada, ou seja, o compilador segue um fluxo linear de compilao, devemos respeitar uma estrutura de cdigo. Vejamos abaixo: 1. Declarao das bibliotecas (cabealhos, headers). 2. Declarao das variveis globais. 3. Declarao das funes extras.
Palavras Reservadas
Toda linguagem reservadas. de programao possu palavras
Palavras reservadas no podem ser utilizadas a no ser por seus propsitos originais.
Palavras Reservadas
auto break case char const continue default do double else enum extern float fot goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
Exemplo de Cdigo
#include <stdio.h> #include <conio.h> int soma(int a, int b) { return a + b; } int main() { int a = 0, b = 0, result = 0; printf("Vamos somar 2 valores!\n"); printf("Digite o primeiro valor da soma: "); scanf("%d", &a); printf("Digite o segundo valor da soma: "); scanf("%d", &b); result = soma(a, b); printf("O resultado da soma eh: %d", result); getch(); // Aguarda uma tecla para finalizar o programa
Bibliotecas Funes
return 0;
}
Anlise do Exemplo
Vamos analisar o cdigo anterior?
1. Encontre as etapas da estrutura no cdigo anterior.
1.
Codeblocks
O que o codeblocks?
Para que serve o codeblocks?
O Codeblocks NO UM COMPILADOR!
Alguns exemplos de IDEs: Visual Studio, Dev-Cpp, Eclipse, entre outras...
Interface
Criando um projeto
Criando um projeto
Compilando o projeto
Ol mundo
#include <stdio.h> #include <stdlib.h>
int main() { printf("Hello world!\n"); return 0; }
Observao O Codeblocks criar automaticamente o cdigo acima. Mas no se acostume, viu? Observe bem o cdigo, voc consegue entende-lo?
Prtica
Vamos criar um primeiro projeto?
Agora substitua a mensagem Hello World pela seguinte mensagem: Meu nome eh <SEUNOME> e eu estou aprendendo C!
Antes de programar
Boas prticas.
Aprender a pensar.
Boas prticas
Quando falamos de boas prticas podemos fazer referncia as regras de etiqueta. Assim como na vida, um cdigo de programao em qualquer linguagem necessita de normas organizacionais.
Estas normas, nem sempre so regras, mas so dicas para manter seu cdigo legvel, que resultar em um cdigo fcil de entender e manter.
Comentrios
Como j falamos de boas prticas, seria impossvel no falar de comentrios em C. Comentrios so blocos de texto que so ignorados pelos compiladores. No C teremos duas formas de comentrios, so elas:
// Comentrio de uma linha /* Bloco de comentrio */
Identao
Observe o bloco de cdigo abaixo:
int main(){int check=1;if(check){printf("Hello world!\n");}else{printf(Goodbye world!\n");return 0;}
O cdigo acima no est identado. Note como est complicado de ler, apesar de ser um cdigo extremamente simples. Identar um cdigo nada mais que separar os cdigos em blocos atravs de tabulao.
Tipos de Dados
A linguagem C possu 5 (cinco) tipos bsicos de dados: char, int, float, void e double.
Para cada tipo de dado existem modificadores de tipo, estes so 4 (quatro): signed, unsigned, long e short. Lembre-se, para o float nenhum modificado pode ser aplicado; assim como para o double podemos aplicar apenas o long.
Tipos de Dados
Tipo
char unsigned char signed char int unsigned int signed int short int unsigned short int signed short int long int Nmero de bits 8 8 8 16 16 16 16 16 16 32 Formato de leitura com scanf %c %c %c %i %u %i %hi %hu %hi %li Intervalo Inicio -128 0 -128 -32.768 0 -32.768 -32.768 0 -32.768 -2.147.483.648 Fim 127 255 127 32.767 65.535 32.767 32.767 65.535 32.767 2.147.483.647
32
32 32 64 80
%li
%lu %f %lf %Lf
-2.147.483.648
0 3,4E-38 1,7E-308 3,4E-4932
2.147.483.647
4.294.967.295 3,4E+38 1,7E+308 3,4E+4932
Tipos de Dados
Declarao de varivel:
tipo_da_variavel nome_da_variavel = valor_inicial_da_variavel;
Boas prticas! Ao nomear uma varivel seja obejtivo, use nomes faceis de entender e se necessrio faa um comentro acima da varivel explicando sua utilidade. Em nomes compostos separe-os utilizando underline.
Prtica
No seu programa Hello World, criado anteriormente, vamos fazer algumas modificaes:
Crie duas variveis do tipo int chamadas num1 e num2 armazenem consecutivamente os valores 10 e 3 Crie uma varivel do tipo float chamada result que armazene o valor 0.0
Constantes
So valores fixos mantidos pelo computador.
As constantes podem ser classificadas em 4 (quatro):
Constantes bsicas
Constantes hexadecimais e octais Constantes de strings Constantes de barra invertida
Constantes bsicas
Tipo de Dado char int long int short int Exemplos de Constantes b \n \0 2 320000 130 100000 -467 100 -30
unsigned int
float double
50000 35678
0.0 23.7 -12.3e-10 12546354334.0 -0.0000034236556
Nunca escreva 013 pensando que o C compilar isto como sendo 13. Em C os valores 013 e 13 so diferentes!
Constantes de strings
Neste caso cabe apenas uma observao, um alerta, sabemos que Joo uma constante string. Isto implica, por exemplo, no fato de que t diferente de t, pois t um char enquanto t uma string com 2 (dois) chars onde o primeiro t e o segundo \0.
Uma string um conjunto de chars com um terminador \0 ao final.
Operadores
Realizam funes aritmticas e lgicas.
Possuem, como na matemtica, regras de precedncia.
Aritmticos e de Atribuio
Operador + * / % ++ -Ao Soma (inteiro e ponto flutuante) Subtrao ou troca de sinal (inteiro e ponto flutuante) Multiplicao (inteiro e ponto flutuante) Diviso (inteiro e ponto flutuante) Resto da diviso (inteiros) Incremento (inteiros e ponto flutuante) Decremento (inteiro e ponto flutuante)
Exemplo
int a = 17, b = 3; int x, y; float z = 17., z1, z2; x = a / b; y = a % b; z1 = z / b; z2 = a / b; a++; b--;
Prtica
Vamos fazer algumas operaes com os nossos valores?
Some o valor de num1 e num2, armazenando o resultado em result e em seguida imprima o resultado; Divida o valor de num1 por num2, armazenando o resultado em result e em seguida imprima o resultado;
Multiplique o valor de num1 por num2, armazenando o resultado em result e em seguida imprima o resultado.
Expresses
So combinaes de variveis, constantes e operadores.
Devemos levar em considerao a tabela de precedncia ao mont-las. Exemplos de expresses:
Anos = Dias / 365.25; i = i + 3; c = a * b + b / e; c = a * (b + d) / e;
Expresses
Importante! Converses de tipos de expresso.
Quando executamos expresses em tipos de dados diferentes, o compilador verifica se as converses so possveis, se no forem possveis ele mostrar um erro. Se as converses forem possveis ele as far, segundo as seguintes regras:
1. Todos os chars e shorts ints so convertidos para ints. Todos os floats so convertidos para doubles. Para pares de operandos de tipos diferentes: se um deles long double o outro convertido para long double; se um deles double o outro convertido para double; se um long o outro convertido para long; se um unsigned o outro convertido para unsigned.
2.
Expresses
Expresso Original x = x + k; x = x k; x = x * k; x = x / k; Expresso Equivalente x += k; x -= k; x *= k; x /= k;
Racionais e Lgicos
Operador > >= < <= == != && || ! Ao Maior do que Maior ou igual a Menor do que Menor ou igual a Igual a Diferente de AND ( E ) OR ( OU ) NOT ( NO )
O C tambm possu uma classe de operadores lgicos chamados de Operadores bit-a-bit, que permitem que voc trabalhe diretamente na representao binria de um valor.
Tabela Verdade
p verdadeiro verdadeiro falso q verdadeiro falso verdadeiro p && q verdadeiro falso falso p || q verdadeiro verdadeiro verdadeiro
falso
falso
falso
falso
Tabela de Precedncia
Maior precedncia () [] -> ! ~ ++ -- . -(unrio) (cast) *(unrio) &(unrio) sizeof */% +<< >> <<= >>= == != & ^ | && || ? = += -= *= /= , Menor precedncia
Entrada
Sempre que falamos de entradas de dados, devemos considerar que essas entradas podem ocorrer de diversas formas, as mais comuns:
Dados via teclado Dados recebidos atravs de scanners (leitores de cdigo de barra)
Trabalharemos aqui apenas com dados recebidos atravs do teclado, para isso precisamos conhecer as funes bsicas de entrada que o C nos fornece.
getch()
parte da biblioteca conio.h
Utilizado para receber um nico caractere
getch()
Exemplo:
#include <stdio.h> #include <conio.h>
int main() {
char Ch; Ch = getch(); printf(Voce pressionou a tecla: %c, Ch); return 0; }
scanf()
parte da stdio.h
Utilizado para receber strings.
multiplataforma
Formato: scanf(string_de_controle, lista_de_argumentos);
scanf()
Exemplo:
#include <stdio.h> #include <conio.h>
int main() {
char Ch; scanf(%c, &Ch); printf(Voce pressionou a tecla: %c, Ch); return 0; }
Sada
Quando falamos de sada de dados, devemos considerar que as sadas de dados podem ocorrer de vrias formas, as mais comuns so:
Atravs do monitor Atravs da impressora
printf()
parte da stdio.h
Utilizado pare imprimir na tela uma mensagem
Formato:
printf(string_de_controle, lista_de_argumentos);
printf()
Exemplo:
#include <stdio.h> #include <conio.h>
int main() {
int nota = 10; printf(O aluno tirou nota %d!, nota); return 0; }
Boas prticas! Lembre-se de identar seu cdigo, isto facilita a leitura do mesmo, principalmente em estruturas de repetio.
if-else
A estrutura if-else utilizada para tomada decises, quando uma condio vlida ou no.
Formato: if ( condicao ) { bloco_de_comando } else { bloco_de_comando }
de
if-else
Exemplo:
int a = 1, b = 2; if ( (a + b) == 3 ) { printf(O resultado eh 3); } else { printf(O resultado nao eh 3); }
switch
O switch tambm utilizado para tomada de decises, porm cria um cdigo mais limpo. Com ele voc pode testar uma varivel em relao a diversos valores prestabelecidos.
Formato:
switch ( varivel ) { case constante_1: bloco_de_comando break; default: bloco_de_comando break; }
switch
Exemplo:
scanf(%d, &num); switch ( num ) { case 1: printf(Voce digitou 1); break; case 2: printf(Voce digitou 2); break; default: printf(Voce digitou %d, num); break; }
while
O while uma estrutura de repetio, utilizada para criar os chamados loops de um programa. O cdigo dentro do bloco repetir enquanto a condio no for verdadeira.
Formato: while ( condio ) { bloco_de_comando }
while
Exemplo:
while ( 1 == 1 ) { printf(Meu querido loop infinito\n); }
for
Assim como o while o for utilizado para criar estruturas de repetio.
Formato: for ( inicializacao; condio; incremento ) { bloco_de_comando }
for
Exemplo:
int count; for (count = 1; count <= 10; count++ ) { printf(%d , count); }
Strings e Matrizes
So provavelmente os elementos mais importantes de um programa.
Derivam de tipos bsicos de variveis.
Strings
So vetores de chars.
Seu ltimo elemento o \0.
Formato:
char nome_da_string[tamanho]
Strings
Exemplo:
char nome[100]; printf(Digite o nome do aluno: ); gets(nome);
Dicas! Na linguagem C, strings sempre esto dentro de aspas duplas e podem possuir mais de um caractere, enquanto chars esto sempre entre aspas simples e contm apenas um elemento. Lembre-se bem disto!
Manipulando Strings
Quando trabalhos com strings, sentimos a necessidade de manipul-las. Para isto o C possu alguns comandos especficos, so estes: strcpy strcat strlen strcmp
strcpy()
Utilizada para copiar um string-origem para um stringdestino.
Faz parte da biblioteca string.h Formato: strcpy(string_destino, string_origem);
strcpy()
Exemplo:
char str1[100], str2[100], str3[100]; printf(Digite uma string: ); gets(str1); strcpy(str2, str1); strcpy(str3, Voce digitou: ); printf(%s%s.\n, str3, str2);
strcat()
Anexa a string-origem ao fim da string-destino, sem alterar a string-origem.
Faz parte da biblioteca string.h Formato: strcat(string_destino, string_origem);
strcat()
Exemplo:
char str1[100], str2[100]; printf(Digite uma string: ); gets(str1); strcat(str2, Voce digitou: ); strcat(str2, str1); printf(%s.\n, str2);
strlen()
Retorna o comprimento da string.
O terminador no contado.
Formato:
strlen(string);
strlen()
Exemplo:
int size; char nome[100]; printf(Digite o seu nome: ); gets(nome); size = strlen(nome); printf(%i.\n, size);
strcmp()
Utilizado para comparar uma string.
Retorna 0 se as strings forem iguais.
Formato:
strcmp(string1, string2);
strcmp()
Exemplo:
char str1[100], str2[100]; printf(Digite a primeira string: ); gets(str1); printf(Digite a segunda string: ); gets(str2);
if( strcmp(str1, str2) ) { printf(\nAs strings sao diferentes.); } else { printf(\nAs strings sao iguais!); }
Matrizes
Tambm conhecidos como vetores.
Podem possuir vrias dimenses.
Matrizes
Exemplo:
int num[10]; int i = 0; printf(Digite 10 numeros: ); for(i = 0; i <= 10; i++ ) { scanf(%i, &num[i]); } for(i = 0; i <= 10; i++) { printf(%i \n, num[i]); }
Matrizes multidimencionais
So matrizes que possuem mais de uma dimenso.
Formato:
tipo_de_dado nome_da_var[tamanho_1][tamanho_2]...[tamanho_N];
Matrizes multidimensionais
Exemplo:
int mtrx[20][10]; int count = 1, i = 0, j = 0;
Matrizes de Strings
So matrizes bidimensionais.
Podem ser chamadas de lista de strings indexadas.
Formato:
char nome_da_variavel[num_de_strings][comprimento_da_string];
Matrizes de Strings
Exemplo:
char frutas[3][10] = { Pera, Uva, Laranja }; printf(Voce gosta de comer %s.\n, frutas[2]);
Matrizes dinmicas
So matrizes que no possuem um tamanho especfico.
Exemplo:
int mess[] = { Linguagem C: Flexibilidade e Poder! }; int mtrx[][2] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Dicas! Tome cuidado com as matrizes dinmicas, so extremamente teis, porm seu consumo de memria grande e pode causar alguns erros graves caso no utilizadas corretamente.
Funes
So comandos da linguagem C, nativos ou no.
Podem ser criados pelo usurio.
Formato:
tipo_de_retorno nome_da_funcao(parametros) { corpo_da_funcao }
Tipo e Retorno
Especifica o tipo de dados que a funo retornar.
Para retornar um valor utilizando return ao final da funo seguido da valor a ser retornado. Os tipos mais utilizados so: void int char
Parmetros
So os valores recebidos pela funco.
Uma funo pode no receber nenhum parmetro.
Boas prticas! Apesar de uma funo ser capaz de receber inmeros parmetros, a etiqueta diz que para uma funo ser facilmente compreendida dever ter ao mximo 3 (trs) parmetros.
Exemplo
int soma(int a, int b) { return a + b; }
Esta funo realizar a soma de dois parmetros do tipo inteiro, e retornar o resultado no mesmo formato.
Ideia:
int resultado = soma(10, 3);
Prtica
No exemplo anterior acompanhamos e entendemos como implementar uma funo de soma ao nosso programa, agora vamos criar as seguintes funes:
Subtrao Multiplicao Diviso
E vamos aplic-las em nosso programa, solicitando ao usurio a entrada de dois valores e a operao a ser realizada.
Visibilidade de variveis
Quando usamos funes, sentimos a necessidade de que, em alguns casos, as variveis sejam visualizadas por todas as funes, tal como tambm teremos algumas variveis que sero particularmente propriedades de uma funo.
Chamamos esta diferena entre as variveis de nveis de visualizao, estes podem ser em C, desta forma classificamos as variveis em 2 (dois) tipos: Variveis Locais Variveis Globais
Variveis locais
declarada dentro de uma funo.
Tem seu valor apenas na funo onde foi declarada.
Variveis globais
declarada no corpo do programa. Fora de funes.
Pode ser alterada por qualquer funo do programa.
Exemplo:
int valor;
int main() { valor = 100; printf(O valor eh: %d, valor); return 0; }
Bibliotecas
So inseridas atravs do comando #include <>;
So assim chamadas por conterem funes teis ao programador. Voc pode criar suas prprias bibliotecas para simplificar seu trabalho.
Prtica
Vamos criar nossa primeira biblioteca, ela dever ser capaz de realizar as seguintes funes:
Retornar o valor da soma de dois parmetros Retornar o valor da subtrao de dois parmetros Retornar o valor da multiplicao de dois parmetros Retornar o valor da diviso de dois parmetros
Concluso
Muito bem, agora j sabemos conhecemos um pouco sobre a linguagem C, que tal colocarmos tudo que aprendemos em prtica?
Afinal, apenas a prtica nos levar a perfeio; E se surgir alguma dvida, lembre que o Google seu amigo. Obrigado a todos pela pacincia! Ricardo Lders e-mail: xangelbr@gmail.com Site: http://www.luders.com.br/