São operadores matemáticos que facilitarão nossas vidas de programador C, e que iremos usar diversas vezes em nossa apostila online.
Clique aqui e saiba como obter seu certificado de programação C! Entre já no Mercado de Trabalho!
Contando em linguagem C
- quantas teclas foram digitadas
- quantas vidas você ainda tem em jogo
- quanto tempo se passou
- quantos visitantes o site C Progressivo recebeu
- etc.
Até agora, temos contado de um em um. Imagine, gerenciar e contar um sistema de cadastro com milhões de inscritos, como o do Enem?
Ainda bem que você é programador C e não se assustou, pois sabe que não vai fazer isso, e sim seu escravo: o computador.
Lembre-se: a relação do programador C com a máquina não é de usuário, e sim de mestre para escravo. Com C, você domina tudo o que ocorre com seu computador.
Então, boa parte das contas são feitas utilizando os 'laços', que ensinaremos bem em breve e vai utilizar para sempre.
Com ele, você vai fazer com que o computador faça o tanto de contas que quiser...10, 20, mil, 1 milhão...o Google realiza trilhões por dia.
Você pode até fazer um looping infinito e travar seu computador. Uns chamam de hackear, eu prefiro chamar de estudo e vou mostrar como fazer.
Esses laços, porém, tem que ser incrementado. Geralmente eles tem um início, uma condição e um fim.
Como esse fim é atingido? Através de uma ou mais variável que vão crescendo ou diminuindo, ou através de expressões lógicas.
Quando se atinge um certo ponto, o laço vai parar.
É aí que entra os operadores de incremento e decremento.
Somando e Subtraindo variáveis em C
O incremento em uma unidade quer dizer:a = a + 1
a = a + 1, em C, é algo totalmente diferente da Matemática convencional.
Vamos ver na prática, que depois explico.
Façamos isso em um aplicativo em C:
a=1;
a = a + 1;
Logo após atribuir 1 ao 'a', imprima, veja o resultado e tente descobrir o que aconteceu.
Substitua por: a = a + 2;
Ou a = a + 3;
#include <stdio.h> int main() { int a=1; printf("a = %d\n", a); a = a + 1; printf("a = %d\n", a); }
Hackers são pessoas que descobrem as coisas sozinhas (e não criminosos ou vândalos, como é difundido), fazem isso.
Testam, pensam e descobrem como as coisas funcionam.
Explicação:
Quando fazemos a =
é porque vamos atribuir um valor ao 'a', um novo valor, INDEPENDENTE do que ele tinha antes.
E qual o valor que vamos atribuir? 'a + 1'!
Ou seja, o 'a' vai ser agora o seu antigo valor mais 1!
Se a=2, e fazemos a = a + 3, o que estamos fazendo?
Estamos dizendo que o 'a' vai mudar, vai ser seu antigo valor (2), mais 3! Ou seja, agora a=5
Faz sentido, não?
a++ e a--
Usaremos muito, mas MUITO mesmo o incremento e o decremento de unidade:
a = a + 1;
a = a - 1;
Porém, é chato ou da preguiça ficar escrevendo a=a+1 e a=a-1 o tempo inteiro.
Então, inventaram atalhos para isso!
a = a + 1 pode ser representado por a++ ou ++a
a = a - 1 pode ser representado por a-- ou --a
Existe uma diferença entre a-- e --a, ou entre a++ e ++a, que vamos explicar no próximo tópico.
E como já dizia o filósofo: só creio compilando e vendo.
#include <stdio.h> int main() { int a=1, b=1; printf("Valor inicial de a = %d\n", a); printf("Valor inicial de b = %d\n", b); printf("\nIncrementando: a++\n"); a++; printf("Decrementando: b--\n"); b--; printf("\nAgora a = %d\n", a); printf("Agora b = %d\n",b); }
Diferença entre os operadores entre a=++b e a=b++
Já vimos o uso dos operadores de decremento e incremento, em C.Você ja estudou e testou que usar isoladamente:
a++ e ++a não surte efeito.
Porém, surte na hora da atribuição.
Vamos lá, ao nosso 'teste hacker':
Seja b=2;
Só olhando e raciocinando, você seria capaz de descobrir quanto seria 'a' em cada caso:
a = b++;
a = ++b;
Explicações
1. a = b++
Isso é apenas um atalho em C, uma forma mais simples de escrever as seguintes linhas:
a = b;
b++;
2. a = ++b
Analogamente, é o atalho que usamos em C para representar as seguintes linhas de código:
++b;
a = b;
Em ambos os casos, 'b' é incrementado. A diferença é que 'a' recebe o valor de 'b' antes do incremento em um e depois do incremento em outro. Não precisa decorar nada, é só analisar a lógica das coisas e verá que tudo faz sentido na linguagem C.
Veja:
No primeiro exemplo: a = b++
O que vem primeiro, 'b' ou incremento? Primeiro o 'b'. Depois o de incremento ocorre, '++'.
Ou seja, 'a' vai receber o valor de 'b' primeiro, então a=2
Só depois que 'b' vai ser incrementado e vai se tornar b=3.
No segundo exemplo: a = ++b
O que vem primeiro? 'b' ou incremento?
Primeiro o incremento, '++', depois que aparece o 'b', então só depois acontece a atribuição..
Assim, primeiro ocorre o incremente, então b=3.
Só depois é que esse valor é atribuído para a.
Como diria o véio deitado: compilais e verás a verdade.
Eis o código:
#include <stdio.h> int main() { int a, b=1; printf("b = %d\n",b); printf("a = b++\n"); a = b++; printf("\nAgora: \na = %d\n",a); printf("b = %d\n",b); printf("\na = ++b\n"); a = ++b; printf("\nAgora: a = %d",a); }
6 comentários:
Olá amigos,
Por que neste programa b-- não ficou igual a zero?
#include
int main()
{ int a=1,
b=1;
printf("Valor inicial de a = %d\n", a);
printf("Valor inicial de b = %d\n", b);
printf("\nIncrementando: a++\n");
a++;
printf("Decrementando: b--\n");
b--;
printf("\nAgora a = %d\n", a);
printf("Agora b = %d\n",b);
}
Rodei o programa e deu b=0 somente faltou a biblioteca
No meu rodou de boa, deu a=2 e b=0
Alguem me explica qual é o motivo de a ser 8 no inicio?.Obrigado.Otimo site
obrigado!
Queria ajuda para resolver uma questão de concurso:
Na linguagem de programação C, cadeias de caracteres (ou Strings) são representadas por vetores do tipo char. O código abaixo chama uma função denominada apresentarString, que imprime o conteúdo da String armazenada em vet.
int main()
{
char vet[100] = "Eu sou uma String!";
apresentarString(vet);
return 0;
}
Qual dos códigos abaixo é capaz de imprimir corretamente a String "Eu sou uma String!" :
A)
void apresentarString(char * str) {
if (*str == '\0') {
return;
}
printf("%c", *str);
apresentarString(str++);
}
ou
B)
void apresentarString(char * str) {
if (*str == '\0') {
return;
}
printf("%c", *str);
apresentarString(++str);
}
Postar um comentário