Linguagem C#
Versão – 091028
Prof.: 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)


Ponto flutuante (é capaz de representar valores
fracionários)


float, double, decimal
Caractere


byte, sbyte, short, ushort, int, uint, long, ulong
char
Booleana

bool: valores true (verdadeiro), false (falso)
Tipos de variáveis
Tipo
Tamanho Tipo .NET
(em
bytes)
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 Tipo
(em
.NET
bytes)
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
int
int
x =
y =
a = 7;
b = 3;
x,y;
a / b;
a % b;
Operador ++
int x;
int y;
x = 23;
y = x++; // operador pós-fixado
Console.WriteLine(x + " " + y); // 23 24
x = 23;
y = ++x; // operador pré-fixado
Console.WriteLine(x + " " + y); // 24 e 24
Operadores Relacionais e Lógicos (Booleanos)
Um operador booleano é um operador que faz um cálculo cujo resultado é
true (verdadeiro) ou false (falso)
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
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)
Expr
1
True
True
False
False
Expr
2
True
False
True
False
AND
True
False
False
False
Expr1 Expr2
OR
True
True
True
True
False
True
False
True
True
False
False
False
Expr1
NOT
False
True
True
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 cascata
if(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
E
F
inteiros
inteiros genéricos
valores em geral
notação científica
valores reais
numero em formato de ponto fixo
G
valores em geral
geral (é utilizada a representação mais
adequada ao número)
N
P
X
valores em geral
numero de acordo com o pais local
valores em geral
percentagem
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:X0}", 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 String
String 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 d
int i;
float f;
double d;
// converte uma variável do tipo String (s no exemplo) em um inteiro
i = int.Parse(s);
// converte uma variável do tipo String (s no exemplo) em um float
f = float.Parse(s)
// converte uma variável do tipo String (s no exemplo) em um double
d = 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.9
notas[3]=7.9;
// atribui a nota da posição 0 do vetor
double 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 vetor
string[] 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 B
Condiçõ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
// alunas
foreach (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
Download

Linguagem C#