Aula 6: Atribuição, scanf e cálculos |
Dar um novo valor a uma variável chama-se atribuição.
Em C isto é feito com o operador
a = 3.0;
b = 3.0*a;
c = cos(t);
Errado (assumindo a do tipo float):
1.0 = a;
a = TRUE;
a = 1;
Na verdade, em C o último exemplo está correcto. O C sabe o que queremos e dá uma ajuda convertendo o inteiro 1 no real 1.0. De qualquer forma, é má prática mistura inteiros com reais e será melhor escrever: a = 1.0;
Para sumariar, o símbolo = é
NÃO parte de uma comparação ("a é igual a b?") NÃO parte de uma equação ("a2 = 2a -1") É uma atribuição ("a transforma-se em b") |
depois da execução da linha |
depois da execução da linha |
|
main()
{ float a; float b; float c = 4.3; a = 1.0; b = c; a = a + b + c; } |
indefinido
|
indefinido
|
Nas
aulas anteriores aprendemos como mostrar os resultados dos cálculos
do programa no écran. Com printf podemos fazer com que
o nosso programa tenha output. Em muitos casos, nós também
queremos que o nosso programa tenha input. O utilizador digita o
seu nome, ou introduz números que o programa tem que processar.
Ou ainda mais simples, queremos que os utilizadores tenham controlo do
programa. Por exemplo, queremos que o utilizador possa parar o programa
carregando na tecla escape.
As descrições de formato são as mesmas que as da instrução de output printf. Por exemplo %d para inteiros, etc. De notar que as variáveis a serem lidas não têm que ser do mesmo tipo. Como por exemplo // lines starting with these // are
cooment
main()
// don't forget to declare the variables
we will use
printf("Please enter two
numbers separated by a space\n");
Quando correr, o programa mostrará a mensagem
|
|
|
|
|
|
|
|
|
|
|
Estes quatro operadores, quando utilizados em cálculos,
necessitam de dois operandos e são chamados operadores binários.
Em C, um operando é colocado do lado esquerdo e outro do lado direito
do operador. Como exemplos:
|
|
|
|
|
|
Estas expressões resultarão em valores que podem ser atribuídos a variáveis como vimos anteriormente: Como um exemplo:
c = 3 * a;
De notar novamente, do lado esquerdo do símbolo de atribuição = temos a variável e do lado direito colocamos a nossa expressão que irá resultar num novo valor para a variável.
Em C existem também operadores unitários que necessitam
apenas de um operando:
operador | operação |
|
incremento |
|
decremento |
|
negação (álgebra booleana) |
|
inversão de todos os bits deste inteiro |
|
negação do número |
|
endereço de .. |
Por exemplo
i++;
--k;
Incrementa o valor de i e decrementa o valor de k em 1, respectivamente.
O operador pode ser colocado antes ou depois do operador. A diferença
está no momento em que a variável muda o seu valor, antes
da execução do resto da instrução (++i)
ou depois (i++). Por exemplo
i = 1;
j = i++; no final
|
i = 1;
j = ++i; no final
|
Os operadores ! e ~ serão estudados depois na aula sobre álgebra
linear.
O operador obtem-endereço será discutido na aula sobre
ponteiros.
O operador unário - retorna o número negado (floating
point ou inteiro).
Os operadores abordados na secção anterior são
usados para cálculos reais (floating point calculations). Para cálculos
inteiros (usada para tipos como byte. word, integer, longint, etc.), o
operador da divisão funciona de forma um pouco diferente. Vamos
imaginar o cálculo de, por exemplo, 7/3. Como se aprendeu na escola
primária, isto é igual a 2 com resto de 1 a
ser dividido por 3:
|
|
||
|
|
|
|
|
|
Em C existem dois operadores / e % que reproduzem estes resultados.
Exemplo:
|
|
|
|
|
|
Estes substituem o operador floating-point /. Os outros três operadores
(*, +, -) são os mesmos para números inteiros.
printf("Give the value of the first
variable x:\n");
scanf("%f", &x);
printf("Give the value of the second
variable y:\n");
scanf("%f", &y);
sum = x + y;
printf("The sum of %f and %f is %f\n",
x, y, sum);
diff = x - y;
printf("The difference between %f
and %f is %f\n", x, y, diff);
divis = x / y;
printf("%f divided by %f is %f\n",
x, y, divis);
}
irá produzir ao correr:
Give the value of the first variable x:
3.4
Give the value of the second variable y:
1.8
The sum of 3.4000 and 1.8000 is 5.2000
The difference between 3.4000 and 1.8000
is 1.6000
3.4000 divided by 1.8000 is 1.8889
printf("Give the value of the first
variable x:\n");
scanf("%d", &x);
printf("Give the value of the second
variable y:\n");
scanf("%d", &y);
sum = x + y;
printf("The sum of %d and %d is %d\n",
x, y, sum);
diff = x - y;
printf("The difference between %d
and %d is %d\n", x, y, diff);
divis = x / y;
divr = x % y;
printf("%f divided by %d is %d plus
%f/%d\n", x, y, divis, divr, y);
}
irá produzir ao correr:
Give the value of the first variable x:
13
Give the value of the second variable y:
5
The sum of 13 and 5 is 18
The difference between 13 and 5 is 8
13 divided by 5 is 2 plus 3/5