Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
" Se você não pode vencer pelo talento, vença pelo esforço "
Um dia eu ainda irei ajudar como muitos que me ajudam atualmente...
Introdução à Programação C
Exemplo de um Programa
// Exemplo de programa em C
// Isto é uma linha de
comentário
void main()
{
int a; //
declara a variável "a"
a = 3 + 2; // soma
3 com 2
}
• Um programa em C deve ser Identado para que possa ser lido com mais
facilidade.
Identificadores
São os nomes que podem ser dados para variáveis e funções.
Para a escolha destes nomes é necessário seguir alguams regras:
• C é uma linguagem case-sensitive, ou seja, faz diferença entre nomes com letras
maiúsculas e nomes com letras minúsculas. Peso e peso são diferentes;
• Exemplos:
Idade, Contador, PesoDoCarro,
Usuario_1, CorDaPagina, RaioDoCirculo
Variáveis
Uma variável é uma possição de memória que pode ser identificada através de um nome.
Podem ter seu conteúdo alterado por um comando de atribuição.
Após a atribuição mudam de valor.
int a,b, SomaGeral;
a = 3; // a recebe o valor 3
b = a * 2; // b recebe o dobro do valor de a
c = a + b + 2; // c recebe 11
Tipos de Variáveis
• Todas as variáveis em C tem um tipo;
Declaração de Variáveis
• Todas as variáveis tem que ser declaradas antes de serem usadas;
#include <stdio.h> //
Arquivo de cabeçalho
(header)
void main()
{
int
contador; //
declarações simples
float PrecoDoQuilo;
double TaxaDeCambio;
char LetraDigitada;
int IdadeManoel,
IdadeJoao, IdadeMaria; //
Pode colocar mais de uma
variável na
// na
mesma linha
double TaxaDoDolar,
TaxaDoMarco,
TaxaDoPeso,
// Também pode trocar de
linha no meio
TaxaDoFranco;
.......
}
#include <stdio.h> //
Arquivo de cabeçalho
(header)
void main()
{
int NroDeHoras = 0;
// declara e inicializa com
Zero
float PrecoDoQuilo =
10.53; // declara e
inicializa com 10.53
double TaxaDoDolar =
1.8,
TaxaDoMarco =
1.956,
TaxaDoPeso =
1.75,
TaxaDoFranco =
0.2;
.......
}
Constantes
Constantes são identificadores que não podem ter seus valores alterados durante a
execução do programa.
Para criar uma constante existe o comando #define que, em geral é colocado no início
do programa-fonte.
Exemplos
#define LARGURA_MAXIMA 50 // Não se coloca ponto-e-vírgula após o
valor
#define NRO_DE_DIAS_DA_SEMANA 7
#define NRO_DE_HORAS_DO_DIA 24
#define VALOR_DE_PI 3.1415
void main ()
{
int TotalDeHoras;
Strings
Uma String é uma seqüência de caracteres entre aspas duplas: "exemplo de uma string
em C".
A função printf
A função printf exibe um ou mais dados na tela. Para tanto ele deve receber pelo
menos dois parâmetros, separados por vírgula:
• um dado a ser impresso. Este dado pode ser qualquer um dos dados visto
anteriormente.
Por exemplo:
printf("%s","teste");
A string de formato define quais os tipos dos dados a serem impressos. O símbolo %s
será substituído pelo dado que vem após a vírgula.
Os dados definem quais os valores a serem impressos.
Se for necessário, um string de formato pode definir que mais de um dado será impresso.
Para tanto, dentro da string de formato deve haver mais de um %, um para cada dado a
ser impresso.
Neste caso, os dados devem vir após a string de formato separados por vírgulas.
Por exemplo:
printf("%s %s","teste1", "outra string");
Isto irá imprimir o string teste1 deixar 1 espaço em branco e imprimir ao lado
o string outra string, assim :
teste1 outra string
#include <stdio.h> // Necessário para usar a função printf
// A função printf exibe um ou mais dados na tela
void main ()
{
printf("%s","Isto é uma string ....\n"); // note o '\n' no final da
string;
printf("%s","Outra string ....");
printf("%s","Terceira string\n");
//Depois de Executar o programa, tecle ALT-F5 para ver o resultado na tela
}
Exercício
Experimente colocar um '\n' entre os %s na string de formato.
printf("%s\n%s","teste1", "outra string");
Contador = 10;
printf("Valor da Variável: %d\n", Contador); // No momento da
execução sinal %d vai
// ser substituído pelo valor
da
// variável Contador
NroDeFilhos = 3;
printf("Maria tem %d filhos", NroDeFilhos); // o inteiro pode ficar no
meio da string
getch(); // espera que o usuário pressione uma tecla
}
}
Regras para impressão de um número real
getch();
}
// Resultados
1234567890
-2.500000
-2
-2.500
-2.500
-2.500
-2.5000
-2.5
-2.500000000000
Alinhamento de números à DIREITA
Nos exemplos anteriores os números ficavam sempre alinhados a partir da esquerda.
Experimente colocar um sinal de menos logo depois do sinal de % e veja o que acontece.
printf("%-7.3f\n", Numero);
void main()
{
char Nome[30]; // declara uma string que poderá armazenar até 29
caracteres !!
clsrscr();
strcpy(Nome, "Jose da Silva"); // atribui "Jose da Silva" para a variável
Nome
printf("O funcionário %s foi tranferido", Nome); // no lugar de %s
aparecerá o
// conteúdo da variável
Nome
getch();
}
Operadores Aritméticos
-sinal de menos (unário) Maior precedência (avaliado ant
*,/multiplicação e divisão
Total R$ 153.51
Ponteiro (programação)
Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Nota: Se procura pelo objeto para indicar sentidos, consulte Ponteiro.
Em programação, um ponteiro ou apontador é um tipo de dado de uma linguagem de
programação cujo valor se refere diretamente a um outro valor alocado em outra área da
memória, através de seu endereço. Um ponteiro é uma simples implementação do tipo
referência da ciência da computação.
Arquitetura
Ponteiros são uma abstração da capacidade de endereçamento fornecidas pelas
arquiteturas modernas. Em termos simples, um endereço de memória, ou índice
numérico, é definido para cada unidade de memória no sistema, no qual a unidade é
tipicamente um byte ou uma word, o que em termos práticos transforma toda a memória
em um grande vetorHYPERLINK \l "cite_note-0"[1]. Logo, a partir de um endereço, é
possível obter do sistema o valor armazenado na unidade de memória de tal endereço. O
ponteiro é um tipo de dado que armazena um endereço.
Na maioria das arquiteturas, um ponteiro é grande o suficiente para indexar todas as
unidades de memória presentes no sistema. Isso torna possível a um programa tentar
acessar um endereço que corresponde a uma área inválida ou desautorizada da memória,
o que é chamado de falha de segmentação. Por outro lado, alguns sistemas possuem mais
unidades de memória que endereços. Nesse caso, é utilizado um esquema mais complexo
para acessar diferentes regiões da memória, como o de segmentação ou paginação.
Para fornecer uma interface consistente, algumas arquiteturas fornecem E/S mapeada em
memória, o que permite que enquanto alguns endereços são referenciados como áreas de
memória, outros são referenciados como registradores de dispositivos do computador,
como equipamentos periféricos.
[editar] Usos
Ponteiros são diretamente suportados sem restrições em C, C++, D e Pascal, entre outras
linguagens. São utilizados para construir referências, elemento fundamental da maioria
das estruturas de dados, especialmente aquelas não alocadas em um bloco contínuo de
memória, como listas encadeadas, árvores ou grafos.
Ao lidar com arranjos, um operação crítica é o cálculo do endereço para o elemento
desejado no arranjo, o que é feito através da manipulação de ponteiros. De fato, em
algumas linguagens (como C), os conceitos de "arranjo" e "ponteiro" são intercambiáveis.
Em outras estruturas de dados, como listas encadeadas, ponteiros são usados como
referências para intercalar cada elemento da estrutura com seus vizinhos (seja anterior ou
próximo).
Ponteiros também são utilizados para simular a passagem de parâmetros por referência
em linguagens que não oferecem essa construção (como o C). Isso é útil se desejamos
que uma modificação em um valor feito pela função chamada seja visível pela função que
a chamou, ou também para que uma função possa retornar múltiplos valores.
Linguagens como C, C++ e D permitem que ponteiros possam ser utilizados para apontar
para funções, de forma que possam ser invocados como uma função qualquer. Essa
abordagem é essencial para a implementação de modelos de re-chamada (callback),
muito utilizados atualmente em bibliotecas de rotinas para manipulação de interfaces
gráficas. Tais ponteiros devem ser tipados de acordo com o tipo de retorno da função o
qual apontam. Ponteiros para função se assemelham a functores, ainda que o conceito
função objeto seja mais abrangente.
[editar] Exemplos
Abaixo é mostrado o exemplo da declaração de uma lista encadeada em C, o que não
seria possível sem o uso de ponteiros:
#define LISTA_VAZIA NULL /* a lista encadeada vazia é representada por
NULL */
struct link {
void *info; /* conteúdo do nó da lista */
struct link *prox; /* endereço do próximo nó da lista; LISTA_VAZIA
se este é o último nó */
};
Note que essa definição recursiva de ponteiros é a mesma que a definida em Haskell:
data Link a = Nil {- lista vazia -}
| Cons a (Link a) {- a cons nó de um valor de tipo a e
outro nó -}
A definição com referências, por outro lado, possui checagem de tipo, sem confusão de
símbolos. Por essa razão, estruturas de dados em C geralmente são utilizadas com o
auxílio de funções de encapsulamento, que são cuidadosamente verificadas contra erros.
A mesma definição de lista encadeada pode ser codificada em Fortran utilizando
ponteiros, como segue:
type real_list_t
real :: sample_data(100)
type (real_list_t), pointer :: next => null ()
end type
int main() {
int arranjo[5] = { 2, 4, 3, 1, 5 };
return 0;
}
Tal operação é chamada aritmética de ponteiros, e é usada em índices de ponteiros. O
uso dessa técnica em C e C++ é discutido posteriormente neste mesmo artigo.
Ponteiros podem ser usados para passar variáveis por referência, permitindo que seus
valores modificados tenham efeito no escopo anterior do programa, como exemplificado
no código C abaixo:
#include <stdio.h>
int main() {
int x = 24;
int *endereco= &x; /* o operador '&' (leia-se "referênca") retorna
o endereço de uma variável */
return 0;
}
Ponteiros podem ser usados para apontar para funções, permitindo, por exemplo, a
passagem de funções como parâmetro de outras funções. O código em C abaixo
demonstra tal funcionalidade:
#include <stdio.h>
int main()
{
lista *L;
CRON
OMET
RO
DIGIT
AL
Come
ntário
s
[1]
Come
ntário
enviad
o por
doradu
em
18/02/
2010 -
14:19h
:
gostei
[2]
Come
ntário
enviad
o por
allen.k
onstan
z em
19/02/
2010 -
18:03h
:
Faz
um pra
calcula
r regra
de três
compo
sta
també
m!
:D
Este
fonte
trata
de
maneir
a bem
simple
sa
pesqui
sa
sequen
cial
em
uma
matriz.
[ Dow
nload:
PESQ
UISA.
C][
Enviar
nova
versão
]
[ Esco
nder
código
-
fonte ]
/*
Progra
ma
PESQ
UISA.
C */
#inclu
de
<stdio.
h>
#inclu
de
<string
.h>
int
main(v
oid)
{
int
i,acha;
char
NOM
E[10]
[40],
PESQ[
40],
resp;
puts("\
nPesq
uisa
sequen
cial de
nomes
\n\n");
/*
Entrad
a de
dados
*/
for (i =
0; i <=
9; i++)
{
printf(
"Digit
eo
%2do.
nome:
",i +
1);
fflush(
stdin);
fgets(
NOM
E[i],40
,stdin);
/*
Proces
sament
o da
pesqui
sa
enqua
nto
resp =
s */
resp =
's';
while
(resp
== 's' ||
resp
== 'S')
{
puts("\
nEntre
com o
nome
a ser
pesqui
sado:
");
fflush(
stdin);
fgets(P
ESQ,4
0,stdin
);
i = 0;
acha =
0; //
false
while
(i <= 9
&&
acha
== 0)
if
(strcm
p(PES
Q,NO
ME[i])
== 0)
acha =
1;
else
i++;
if
(acha
== 1)
printf(
"%s
foi
localiz
ado na
posica
o
%d",P
ESQ,i
+ 1);
else
printf(
"%s
nao foi
localiz
ado",P
ESQ);
printf(
"\n\nC
ontinu
a?
[S]IM
/
[N]AO
+
<Enter
>: ");
fflush(
stdin);
resp =
getcha
r();
}
return(
0);
}