linguagem c# versão – 091008 prof.: mauro césar lopes
TRANSCRIPT
Linguagem C#
Versão – 091008Prof.: Mauro César Lopes
Sumário
Identificadores Tipos Constantes Enumerações Expressões Declarações Bloco de declarações
Identificadores
São nomes utilizados para identificar os elementos nos seus programas. Esses elementos podem ser: namespace (espaço de nomes), classes, métodos, variáveis, etc.
Podemos usar apenas letras, número e sublinhado para compor o nome dos identificadores
Palavras Chaves
C# reserva 77 identificadores, os quais não poderão ser utilizados para outros propósitos
Alguns exemplos: bool, break, char, default, enum, float, ...
Variáveis
Uma variável é definida como um lugar onde podemos armazenar dados temporariamente e usá-los posteriormente
Normalmente um variável possui um nome (identificador) que é usado para acessar seu conteúdo
Uma variável poderá armazenar um número inteiro, de ponto flutuante, um caractere, uma cadeia de caracteres (String) , um valor booleano, etc.
O nome de uma variável pode conter letras, número e '_' (não pode haver sinais de pontuação e espaços em branco)
Boas práticas de programação
Adote uma convenção de nomes que torne claras as variáveis definidas Não utilize sublinhados nos identificadores
Exemplo:Use valorMercadoria ao invés de valor_da_mercadoria
Não use identificadores cuja única diferença seja entre letras maiúsculas e minúsculas (Exemplo: contador e Contador)
É importante notar que C# faz diferença entre letras maiúsculas e minúsculas
Comece o nome com uma letra
Tipos de variáveis
Define o tipo de dados que a variável irá armazenar
Inteira (sem parte fracionária) byte, sbyte, short, ushort, int, uint, long, ulong
Ponto flutuante (é capaz de representar valores fracionários) float, double, decimal
Caractere char
Booleana bool: valores true (verdadeiro), false (falso)
Tipos de variáveis
Tipo Tamanho (em bytes)
Tipo .NET
Descrição
byte 1 Byte Sem sinal (0-255)
char 2 Char Caractere Unicode
bool 1 Boolean Booleano (Verdadeiro ou Falso)
sbyte 1 Sbyte Com sinal (-128 a 127)
short 2 Int16 Com sinal
ushort 2 UInt16 Sem sinal
int 4 Int32 Com sinal
uint 4 UInt32 Sem sinal
float 4 Single Números de ponto flutuante
double 8 Double Números de ponto flutuante de precisão dupla
decimal 16 Decimal Valores monetários
long 8 Int64 Números inteiros
ulong 8 UInt64
Tipos de variáveis
Tipo Tamanho (em bytes)
Tipo .NET
Descrição
byte 1 Byte Sem sinal (0-255)
char 2 Char Caractere Unicode
bool 1 Boolean Booleano (true=Verdadeiro ou false=Falso)
short 2 Int16 Com sinal (-32.768 a 32.767)
int 4 Int32 Com sinal (-2.147.483.648 e 2.147.483.647)
float 4 Single Números de ponto flutuante. Armazena os valores de aproximadamente +/- 1,5*10-45 até aproximadamente +/-3,4*10^38 com sete número significativos. Usa o sufixo F
double 8 Double Números de ponto flutuante de precisão dupla (com 15 a 16 números significativos)
decimal 16 Decimal Valores monetários. Precisão fixa até 28 dígitos e a posição do ponto decimal. É normalmente usado em cálculos financeiros. Exibe sufixo "m" ou "M"
long 8 Int64 Números inteiros com sinal de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807
Variáveis
Uma variável poderá ser signed (sbyte, short, int) ou unsigned (byte, ushort, uint), isto é, com sinal ou sem sinal.
Uma variável unsigned possui apenas valores positivos
Uma variável signed possui valores positivos e negativos
Exemplos de declaração de variáveis
int a, idade; char ch, caracter; float f, valor; double d; string s;
Toda variável deverá ser declarada explicitamente antes de ser usada
Atribuição de valores a variáveis
Podemos atribuir o valor a uma variável usando o símbolo '=' (operador de atribuição)
Exemplos:int a = 1; // atribui o valor 1 a variável inteira
a
float f = -8.76F; // observe o sufixo F
char c='a';
Atribuições
Se tentarmos atribuir um número a uma propriedade do tipo texto o programa não irá compilar
Por exemplo value.text = 1; erro value.text = "1"; ok, porém o número um está
sendo tratado como texto e não como número value.text = string.Parse(1); o número um é
convertido de inteiro para uma string pelo uso do método parse da classe string
Comentários
// comentário até o final da linha /*
... Comentário multilinha*/
Os comentários são ignorados pelo compilador, porém são úteis aos desenvolvedores porque ajudam a comentar o que o programa está fazendo
Operadores
Numéricos agem em valores para criar novos valores
Lógicos ou Booleanos é um operador que faz cálculos cujo resultado é verdadeiro ou falso.
Relacionais são usados para descobrir se um valor é menor ou maior que outro do mesmo tipo
Binários
Operadores Numéricos (ou Aritméticos)
++, -- Incremento, decremento
+, -, *, /, % adição, subtração, multiplicação, divisão, módulo (resto)
Exemplo:
int a = 7;int b = 3;int x,y;x = a / b;y = a % b;
Operador ++
int x;int y;
x = 23;y = x++; // operador pós-fixadoConsole.WriteLine(x + " " + y); // 23 24
x = 23;y = ++x; // operador pré-fixadoConsole.WriteLine(x + " " + y); // 24 e 24
Operadores Relacionais e Lógicos (Booleanos)
Operador
Ação
==, != Igual a, diferente de
>, >=, <, <= Maior que, maior ou igual a, menor que, menor ou igual a
&& "E" lógico (AND)
|| "OU" lógico (OR)
! "NÃO" lógico
Um operador booleano é um operador que faz um cálculo cujo resultado é true (verdadeiro) ou false (falso)
Operadores Lógicos
Podem ser usados para testar condições mais complexas
combinando condições simples
Operador && ("e" lógico - AND) Operador || ("ou" lógico - OR) Operador ! ("não" lógico - NOT)
Exemplo:
bool porcentagemValida = (porcentagem>=0) && (porcentagem<=100);
Operadores Lógicos (Tabela Verdade)
Expr1
Expr2
AND
True True True
True False False
False True False
False False False
Expr1 NOT
False True
True False
Expr1
Expr2
OR
True True True
True False True
False True True
False False False
Operadores Relacionais
> Maior que
>= maior ou igual a
< menor que
<= menor ou igual a
Operadores Lógicos Bit a Bit
& "E" binário
^ "XOR" ou-exclusivo
| "OU" binário
~ "NÃO" binário
>> deslocamento de bits a direito
<< deslocamento de bits a esquerda
Operadores de Atribuição
Operador
Uso
= Atribuição simples. Atribui o valor localizado a direita do '=' a variável a esquerda
*=
/=
%=
+=
-=
<<=
>>=
&=
^=
|=
Operadores de igualdade e atribuição
Não confunda o operador de igualdade '==' com o operador de atribuição '='.
A expressão x==y compara x com y tem valor true se os dois valores forem idênticos e false caso contrário.
Já a expressão x=y atribui o valor de y a variável x
Expressões
São combinações de variáveis, constantes e operadores
Quando montamos expressões temos que considerar a ordem em que os operadores são executados
Essa ordem é definida pela tabela de precedência
Precedência de Operadores
Categoria Operadores
Primário (x) x.y x'y f(x) a[x] x++ x– new typeof sizeof checked unchecked stackalloc
Unário + - ! ~++x –x (T)x *x &x
Multiplicativo * / %
Aditivo + -
Deslocamento << >>
Relacional < > <= >= is as
Igualdade == !=
Lógico AND &
Lógico XOR ^
Lógico OR |
Condicional AND &&
Condicional OR ||
Condicional ?:
Atribuição = *= /= %= += -= <<= &= ^= |=
Seqüência de comandos
Um programa é uma seqüência de comandos ou instruções (executa uma ação)
<comando 1>;<comando 2>;...<comando N>;
Bloco de comandos
Um bloco é uma seqüência de instruções agrupadas entre uma chave de abertura ({) e uma de fechamento (})
Um bloco inicia um novo escopo, isto é, define onde as variáveis serão visíveis
Novas variáveis poderão ser definidas dentro do bloco, porém seus valores serão perdidos no final do bloco
Comandos condicionais
Permitem que uma expressão seja avaliada e que uma ação seja executada no caso da expressão ser avaliada verdadeira (true) ou falsa (false).
Comando if
É usado para que possamos escolher entre dois blocos diferentes de código com base no resultado de uma expressão booleana.
A sintaxe de uma instrução if é:if(expressãoBooleana) instrução-1;else instrução-2;
Comando if - Exemplo
int a = 5;if(a<0) Console.WriteLine ("a é negativo");else Console.WriteLine ("a é positivo");
Comando if - Exemplo
int a = 5;if(a<0) // avalia a condição (expressão
relacional){ // avalia a condição a<0 Console.WriteLine ("a é negativo");}else{ Console.WriteLine ("a é positivo");}
Comandos if em cascataif(dia==0) nome="Domingo";else if (dia==1) nome="Segunda-Feira";else if (dia==2) nome="Segunda-Feira";else if (dia==3) nome="Segunda-Feira";else if (dia==4) nome="Segunda-Feira";else if (dia==5) nome="Segunda-Feira";else if (dia==6) nome="Segunda-Feira";else if (dia==1) nome="Segunda-Feira";
Switch
switch (expressãoDeControle){case expressãoConstante: instruções; break;case expressãoConstante: instruções; break;...default: instruções; break;}
Switch
expressãoDeControle: é avaliada uma única vez
expressãoConstante
Comparação if / switch
if(dia==0) nome="Domingo";else if(dia==1) nome="segunda-feira";...else nome="desconhecido";
switch(dia){ case 0: nome="Domingo"; break; case 1: nome="segunda-feira"; break ... default: nome="desconhecido"; break;}
Controle de Fluxo
Um loop (laço) é uma série de instruções que devem ser repetidas até que uma certa condição seja encontrada
Controle de Fluxo
Basicamente temos duas formas de controlar um laço: 1) laço controlado por contador
usa-se um contador para controlar o número de repetições do laços
o contador deverá ser decrementado ou incrementado a cada iteração visando que atinja uma condição de parada do laço
2) laço controlado por sentinela é necessário usar uma variável com um valor de sentinela o laço estará ativo enquanto a condição dada pela sentinela
permanecer sem alteração o valor da sentinela deverá ter seu valor alterado para que
o laço seja interrompido
Controle de Fluxo (2)
Loops (laços) com teste no início (while)
Loops (laços) com testes no final (do/while)
Loops (laços) de tamanho definido (for) Saindo de loops (laços) antes do
término (break) Retestando a condição em loops
(laços) (ex: continue)
Comando while
Repete o laço enquanto uma condição for verdadeira
Exemplo:int i=0;while(i<5) { Console.WriteLine (i); i = i + 1;}
Comando do/while
int i=0;do { Console.WriteLine("i={0}",i); i = i + 1;} while (i<5);
Exemplo do uso de do/while
do {
Console.WriteLine("Menu"); Console.WriteLine("1. Incluir"); Console.WriteLine("2. Alterar"); Console.WriteLine("3. Excluir"); Console.WriteLine("4. Consultar"); Console.WriteLine("0. Sair"); String opcao=Console.ReadLine();
} while(opcao!="0");
Exercício
Escreva uma aplicação que leia e exiba a tecla lida enquanto a tecla 's' não for pressionada. A aplicação deverá contar também o número de teclas pressionadas e exibi-las no final da aplicação
Comando for
Repete um loop (laço) um determinado número de vezes
Exemplo:int i = 0;for(i=0;i<5;i++) { Console.WriteLine("i={0}",i);}
Comparação for x while
for( inicialização; condição; incremento) declaração;
inicialização;while(condição){ declaração; incremento;}
Comparação for x while
int i;for(i=0; i<=9; i++) { Console.WriteLine(i);}
int i;i=0;while(i<=9){ Console.WriteLine(i); i++;}
Loop Infinito
int i;for(;;) { Console.WriteLine(i);}
int i;i=0;while(true){ Console.WriteLine(i);}
Comando break
int i=0;while (i++<10) { Console.WriteLine("i={0}",i); if(i==5) { break; }}
Exemplo do Comando Break
int numTeclas=0;while (true) { // loop infinito // leia uma tecla em ch if(ch=='s') { break; } // exibe a tecla pressionada // incrementa contador de teclas
pressionadas numTeclas++;}
Comando continue
int i=0;while (i<10) { if(i%2!=0) {// testa se o número for par continue; } // exibe os números ímpares Console.WriteLine(i); i++;}
Formatação de Cadeia de Caracteres
{númParâmetro,espaçoReservado:formatação}
onde: númParâmetro: indica qual parâmetro está
sendo formatado (0, 1, ...) espaçoReservado: indica o número de
caracteres mínimos para ocupar com o parâmetro
formatação: indica formatação específica do tipo de dados a utilizar
Formatação de cadeia de caracteres - Exemplo
Especificação
Aplicação Significado
C valores em geral
valor monetário de acordo com o pais local
D inteiros inteiros genéricos
E valores em geral
notação científica
F valores reais numero em formato de ponto fixo
G valores em geral
geral (é utilizada a representação mais adequada ao número)
N valores em geral
numero de acordo com o pais local
P valores em geral
percentagem
X inteiros notação científica
Exemplo
{0,4} parâmetro 0, 4 espaços reservados com alinhamento à direita, sem formatação específica
{0,-4} parâmetro 0, 4 espaços reservados com alinhamento à esquerda, sem formatação específica
Exemplos Console.WriteLine("{0:C}", 1000.32); Console.WriteLine("{0:D}", 23); Console.WriteLine("{0:E2}", 13.322); Console.WriteLine("{0:F2}", 13.322); Console.WriteLine("{0:G}", 13.322); Console.WriteLine("{0:G}", 13); Console.WriteLine("{0:N}", 1000000.32); Console.WriteLine("{0:P}", 0.43); Console.WriteLine("{0:X}", 29);
Exemplos (2) Console.WriteLine("{0,8:C}", 1000.32); Console.WriteLine("{0,8:D}", 23); Console.WriteLine("{0,8:E2}", 13.322); Console.WriteLine("{0,8:F2}", 13.322); Console.WriteLine("{0,8:G}", 13.322); Console.WriteLine("{0,8:G}", 13); Console.WriteLine("{0,8:N}", 1000000.32); Console.WriteLine("{0,8:P}", 0.43); Console.WriteLine("{0,8:X}", 29);
Concatenção de Strings
Console.WriteLine("mauro " + "cesar " + "lopes");
Console.WriteLine("3 " + "7"); Retorna a string 37 e não a operação
de 3+7=10 Para obtermos a soma de 3 + 7
teríamos que proceder da seguinte forma:
Console.WriteLine(int.Parse("3") + int.Parse("7"));
Conversão de Tipos
Use o método chamado Int32.Parse ou int.Parse para converter um valor contido em uma string em um inteiro se você precisar realizar cálculos aritméticos em valores armazenados em string
Conversão de Tipos// o método Console.ReadLine() recebe // retorna uma variável do tipo StringString s = Console.ReadLine();// quando temos um número representado por// uma string não podemos fazer operações aritméticas com ele// Abaixo estão definidas as variáveis i, f e dint i;float f;double d;// converte uma variável do tipo String (s no exemplo) em um inteiroi = int.Parse(s);// converte uma variável do tipo String (s no exemplo) em um floatf = float.Parse(s)// converte uma variável do tipo String (s no exemplo) em um doubled = double.Parse(s)
Definição de Constantes
const <tipo> <nomeDaConstante> = <valor>
Exemplos:const int numLinhas = 3;const int numColunas = 2;
Arrays
O array é uma estrutura de dados de tamanho finita que armazena elementos do mesmo tipo.
Possui acesso direto a cada elemento através de índices
O primeiro elemento do array é acessado através do índice 0. Se o array possuir n elementos, então o índice no n-ésimo elemento será dado por n-1
Vetores
Para criar um vetor que armazene N elementos de um certo tipo (tipoDoVetor), utiliza-se a seguinte forma:
tipoDoVetor[] nomeDoVetor = new tipoDoVetor[N]
Vetores - Exemplo
Criação de um vetor com a nota de prova de cada aluno da turma
int numAlunos=30;double[] notas = new
double[numAlunos];
Vetores
Para acessar cada elemento do array, usa-se o índice do elemento entre colchetes:
// coloca na posição 3 (isto é, 4ª posição) do// vetor a nota 7.9notas[3]=7.9;// atribui a nota da posição 0 do vetordouble nota = notas[0];
Vetores
Observe que o primeiro elemento do array é o elemento 0
[0] primeiro elemento[1] segundo elemento...[N-1] enésimo elemento
Criação e inicialização de um vetor
// Cria e inicializa um vetorstring[] nomeDePessoas = { "Antonio",
"Jose", "Joao"};
string[] nomeDePessoas = new String[] { "Antonio", "Jose", "Joao"};
Obs: o compilador determina qual deverá ser o tamanho do vetor
Matrizes Multidimensionais
São matrizes com mais de uma dimensão (duas, três, quatro, ...)
Exemplo:Uma matriz bidimensional de 2 linhas por 3
colunas (2x3)int[,] matriz = new int[2,3];Uma matriz tridimensional de 3 linhas, por 3
colunas por 3 níveis de profundidade é definida como:
int[,,] matriz3D = new int[3,3,3];
Acesso de elementos
matriz[1,2]=35; int valor = matriz[1,2];
Exemplo - Matriz com três dimensões
double[,,] matriz3D = new double[10,10,10];
matriz3D[0,0,1]=1.0;matriz3D[0,1,0]=0.65;...
Inicialização de Matrizes
// inicializa uma matriz bidimensional (2 x 3),
// isto é, duas linhas e três coluna
int[,] matriz = { {1,2,3}, {4,5,6} };
Inicialização de Matrizes
// inicializa uma matriz bidimensional (3 x 2),
// isto é, três linhas e duas coluna
int[,] matriz = { {1,2}, {3,4}, {5,6} };
Alguns métodos da matrizes
matriz.Length obtém o número de elementos da matriz
matriz.Rank obtém o número de dimensões da matriz
matriz.GetLength(dim) obtém o número de elementos da dimensão dim (inicia por 0)
Soma de Matrizes
int[,] matrizA = { {1,2,3}, {4,5,6} };int[,] matrizB = { {4,-1,2}, {-3,-7,-
6} };int[,] matrizC = new int[2,3]; // duas
linha e// três colunas
// C = A + B
Multiplicação de Matrizes
int[,] matrizA = { {1,2}, {4,5} };int[,] matrizB = { {4,-1}, {-3,-7} };int[,] matrizC = new int[2,2];// C = A x BCondições:- o número de colunas da matriz A deverá ser
igual ao número de linhas da matriz B- a matriz resultante, C, terá a dimensão dada
pelo número de linhas da matriz A e o número de colunas da matriz B
Multiplicação de Matrizes
Cada elemento c[i,j] será dado pela multiplicação dos elemento da linha i multiplicados pelos elementos da linha j
c[i,j] += a[i,k] * b[k,j]onde k varia de 0 a número de linhas da
matriz A ou número de colunas da matriz B, que são iguais
Criando um método para exibir uma matriz
static void print(double[,] a) {
// numero de linhas int m = a.GetLength(0); // numero de colunas int n = a.GetLength(1);
for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { Console.Write("a[{0},{1}]={2}",i,j,a[i, j]+"\t"); } Console.WriteLine(); }
}
Laço foreach/in
Usado para percorrer arrays ou coleções
Não necessita testar condição booleana para garantir sua execução
Quando todos os elementos do array ou coleção tiverem sido varridos, o laço será abandonado
foreach/in
string[] alunas = {"giovanna","fabiana","livia","iris"};
// percorre os nomes presentes no array// alunasforeach (string nome in alunas){ Console.WriteLine(nome);}
Backup - Slides
Palavras chave da Linguagem C#
abstract as base bool break
byte case catch char checked
class const continue decimal default
delegate do double else enum
event explict extern false finally
Palavras chave da Linguagem C# (2)
fixed float for foreach get
goto if implict in int
interface internal is lock long
namespace
new null object operator
out override params private protected
Palavras chave da Linguagem C# (3)
public readonly ref return sbyte
sealed set short sizeof stackalloc
static string struct switch this
throw true try typeof uint
ulong unchecked
unsafe ushort using
Palavras chave da Linguagem C# (4)
value virtual void volatile while
Classe String
Propriedades Métodos
Propriedades e Métodos
Length retorna o número de caracteres da String
ToUpper() converte para maiúsculas ToLower() converte para minúscula IndexOf() retorna a primeira
ocorrência do caracter na string LastIndexOf() retorna a última
ocorrência do caráter na string Substring() Remove