| | | | |

3 Elementos da Linguagem

3.1 Tipos de Dados Básicos

Na linguagem C/C++, dados são alocados em variáveis com tipos declarados33endnote: 3Consulte Wikipedia: C data type para uma lista dos tipos de dados disponíveis na linguagem.

Exemplo 3.1.

Consideramos o seguinte código.

Código 2: dados.cc
1/* dados.cc
2   Exemplo de alocação de variáveis.
3*/
4#include <stdio.h>
5
6int main()
7{
8  // var inteira
9  int i = 1;
10  // var pto flutuante
11  double x;
12
13  x = 2.5;
14  char s[6] = "i + x";
15  double y = i + x;
16  printf("%s = %f\n", s, y);
17  return 0;
18}

Na linha 9, é alocada uma variável do tipo inteira com identificador i e valor 1. Na linha 11, é alocada uma variável do tipo ponto flutuante (64 bits) com identificador x.

Na linha 14, é alocada uma variável do tipo string44endnote: 4Um arranjo de char (caracteres).. Na linha 15, alocamos uma nova variável y.

Observação 3.1.

(Comentários e Continuação de Linha.) Códigos C++ admitem comentários e continuação de linha como no seguinte exemplo acima. Comentários em linha podem ser feitos com \\ e de múltiplas linhas com \* ... */. Linhas de instruções muito compridas podem ser quebradas em múltiplas linhas com a instrução de continuação de linha \.

Observação 3.2.

(Notação científica.) Podemos usar notação científica em C++. Por exemplo 5.2×102 é digitado da seguinte forma 5.2e-2.

Código 3: notacaoCientifica.cpp
1#include <stdio.h>
2
3int main()
4{
5
6  int i = -51;
7  double x = 5.2e-2;
8
9  // inteiro
10  printf("inteiro: %d\n", i);
11  // fixada
12  printf("fixada: %f\n", x);
13  // notação científica
14  printf("científica: %e\n", x);
15  return 0;
16}
Exercício 3.1.1.

Antes de implementar, diga qual o valor de x após as seguintes instruções.

1int x = 1;
2int y = x;
3y = 0;

Justifique seu resposta e verifique-a.

Exercício 3.1.2.

Implemente um código em que a(o) usuária(o) entra com valores para as variáveis x e y. Então, os valores das variáveis são permutados entre si. Dica: a entrada de dados por usuária(o) pode ser feita com o método C/C++ scanf da biblioteca stdio.h. Por exemplo,

1double x;
2scanf("%lf", x);

faz a leitura de um double (long float) e o armazena na variável x.

3.2 Operações Aritméticas Elementares

Os operadores aritméticos elementares são55endnote: 5Em ordem de precedência.:

  • *, /, % multiplicação, divisão, módulo

  • +, - adição, subtração

Exemplo 3.2.

Qual é o valor impresso pelo seguinte código?

1#include <stdio.h>
2
3int main()
4{
5  printf("%f\n", 2+17%9/2*2-1 );
6  return 0;
7}

Observamos que as operações *, / e % têm precedência maior que as operações + e -. Operações de mesma precedência seguem a ordem da esquerda para direita, conforme escritas na linha de comando. Usa-se parênteses para alterar a precedência entre as operações, por exemplo

1printf("%f\n", (2+17)%9/2*2-1 );

imprime o resultado -1. Sim, pois a divisão inteira está sendo usada. Para computar a divisão em ponto flutuante, um dos operandos deve ser double. Para tanto, podemos fazer um casting double((2+17)\%9)/2*2-1 ou, simplesmente, (2+17)\%9/2.*2-1.

Observação 3.3.

(Precedência das Operações.) Consulte mais informações sobre a precedência de operadores em Wikipedia:Operators in C and C++.

Exercício 3.2.1.

Escreva um programa para computar o vértice da parábola

ax2+bx+c=0, (1)

para a=2, b=2 e c=4.

O operador % módulo computa o resto da divisão inteira, por exemplo, 5\%2 é igual a 1.

Exercício 3.2.2.

Use C/C++ para computar os inteiros não negativos q e r tais que

25=q3+r, (2)

sendo r o menor possível.

3.3 Funções e Constantes Elementares

A biblioteca C/C++ math.h disponibiliza várias funções e constantes elementares.

Exemplo 3.3.

O seguinte código, imprime os valores de π, 2 e lne.

Código 4: mat.cc
1#include <stdio.h>
2#include <math.h>
3
4int main()
5{
6  printf("pi = %.9e\n", M_PI);
7  printf("2^(1/2) = %.5f\n", sqrt(2.));
8  printf("log(e) = %f\n", log(M_E));
9  return 0;
10}
Observação 3.4.

(Compilação e Linkagem.) A compilação de um código C/C++ envolve a linkagem de bibliotecas. A stdio.h é linkada de forma automática na compilação. Já, math.h precisa ser explicitamente linkada com

1$ gcc foo.cc -lm
Observação 3.5.

(Logaritmo Natural.) Notamos que log é a função logaritmo natural, i.e. ln(x)=loge(x). A implementação C/C++ para o logaritmo de base 10 é log10(x).

Exercício 3.3.1.

Compute

  1. a)

    sen(π4)

  2. b)

    log3(π)

  3. c)

    elog2(π)

  4. d)

    273

Exercício 3.3.2.

Compute as raízes do seguinte polinômio quadrático

p(x)=2x22x4 (3)

usando a fórmula de Bhaskara66endnote: 6Bhaskara Akaria, 1114 - 1185, matemático e astrônomo indiano. Fonte: Wikipédia: Bhaskara II..

3.4 Operadores de Comparação Elementares

Os operadores de comparação elementares são

  • == igual a

  • != diferente de

  • > maior que

  • < menor que

  • >= maior ou igual que

  • <= menor ou igual que

Estes operadores retornam os valores lógicos true (verdadeiro, 1) ou false (falso, 0).

Por exemplo, temos

Código 5: opComp.cc
1#include <stdio.h>
2
3int main()
4{
5  int x = 2;
6  bool res = x + x == 5;
7  printf("2 + 2 == 5? %d", res);
8}
Exercício 3.4.1.

Considere a circunferência de equação

c:(x1)2+(y+1)2=1. (4)

Escreva um código em que a(o) usuária(o) entra com as coordenadas de um ponto P=(x,y) e o código verifica se P pertence ao disco determinado por c.

Exercício 3.4.2.

Antes de implementar, diga qual é o valor lógico da instrução sqrt(3) == 3. Justifique sua resposta e verifique!

3.5 Operadores Lógicos Elementares

Os operadores lógicos elementares são:

  • && e lógico

  • || ou lógico

  • ! não lógico

Exemplo 3.4.

(Tabela Booleana do &&.) A tabela booleana77endnote: 7George Boole, 1815 - 1864, matemático britânico. Fonte: Wikipédia: George Boole. do e lógico é

A B A && B
true true true
true false false
false true false
false false false

O seguinte código, monta essa tabela booleana, verifique!

1#include <stdio.h>
2
3int main()
4{
5  bool T = true;
6  bool F = false;
7  printf("A   | B   | A && B\n");
8  printf("%d   | %d   | %d\n", T, T, T&&T);
9  printf("%d   | %d   | %d\n", T, F, T&&F);
10  printf("%d   | %d   | %d\n", F, T, F&&T);
11  printf("%d   | %d   | %d\n", F, F, F&&F);
12}
Exercício 3.5.1.

Construa as tabelas booleanas do operador || e do !.

Exercício 3.5.2.

Escreva um código para verificar as seguintes comparações

  1. a)

    1.4<=2<1.5.

  2. b)

    |x|<1, x=sen(π/3).

  3. c)

    |x|>12, x=cos(π**2).

Exercício 3.5.3.

Considere um retângulo r:ABDC de vértices A=(1,1) e D=(2,3). Crie um código em que a(o) usuária(o) informa as coordenadas de um ponto P=(x,y) e o código verifica cada um dos seguintes itens:

  1. 1.

    Pr.

  2. 2.

    Pr.

  3. 3.

    Pr¯.

Exercício 3.5.4.

Implemente uma instrução para computar o operador xor (ou exclusivo). Dadas duas afirmações A e B, A xor B é true no caso de uma, e somente uma, das afirmações ser true, caso contrário é false.

3.6 Arranjos

Um arranjo88endnote: 8Em inglês, array é uma sequência de dados do mesmo tipo. Os elementos dos arranjos são indexados99endnote: 9O índice é um inteiro não negativo, sendo o primeiro elemento indexado por 0 (zero). e mutáveis (podemos ser alterados por nova atribuição).

Exemplo 3.5.

No código abaixo, alocamos o ponto P=(2,3) e o vetor 𝒗=(2.5,π,1.) como arranjos.

1#include <stdio.h>
2#include <math.h>
3
4int main()
5{
6  // P = (2, 3)
7  int P[2] = {2, 3};
8  printf("P = (%d, %d)\n", P[0], P[1]);
9
10  double v[3];
11  v[0] = 2.5;
12  v[1] = M_PI;
13  v[2] = -1.;
14  printf("v = (%lf, %lf, %lf)\n", v[0], v[1], v[2]);
15
16  return 0;
17}
Exercício 3.6.1.

Escreva um código em que a(o) usuária(o) entra com um ponto P=(x,y) e o programa informe se P pertence ao disco determinado pela circunferência de equação (x1)2+y2=4. Use de um arranjo para alocar o ponto P.

Exercício 3.6.2.

Considere os vetores

𝒗=(1.,2.,1.) (5)
𝒘=(1.,3.,2.). (6)

Faça um código que aloca os vetores como arranjos e imprime o vetor soma 𝒗+𝒘.

Exercício 3.6.3.

Considere a matriz

A=|1.2.3.3.|. (7)

Faça um código que aloca a matriz como um arranjo bidimensional (um arranjo de arranjos) e compute seu determinante.


Envie seu comentário

As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a Política de Use de Dados para mais informações. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!