Questão nº 42

Questão de Tecnologia da Informação · FCC TRT-12 2023 (nº 42)

FCC2023Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Aver comentário ↓

Examine os programas em PHP, C# e C a seguir:

<?php
$num = "5oH";
$result = $num + 5;
echo "Result: " . $result;
?>
using System;
namespace Teste {
  class Testando {
    static void Main(string[] args) {
        int num = "5oH";
        int result = num + 5;
        Console.WriteLine($"Resultado: {r}");
    }
  }
}
#include <stdio.h>
int main(){
    int num, result;
    num= "5oH";
    result = num + 5;
    printf("\n  Resultado: %d",
        result);
    return 0;
}

Considerando que os programas serão executados em condições ideais,

Resposta comentada

Gabarito Alternativa A

Tipagem é como as linguagens de programação lidam com os tipos de dados (números, textos, etc.). Algumas linguagens são fortemente tipadas e estáticas, exigindo que você declare o tipo exato de uma variável e não permitindo conversões implícitas entre tipos incompatíveis. Outras são fracamente tipadas e dinâmicas, sendo mais flexíveis e tentando converter tipos automaticamente quando necessário.

(A) Correta: Os programas em PHP e em C não apresentarão erros de execução que impeçam o programa de rodar.

  • PHP: É uma linguagem fracamente tipada. Ao somar a string "5oH" com um número (5), o PHP tenta converter a string para um número. Ele pega a parte numérica inicial da string, resultando em 5. Então, 5 + 5 resulta em 10. O programa executa sem erros.
  • C: Embora atribuir uma string literal ("5oH", que é um ponteiro para char) a uma variável int seja uma má prática e geralmente gere um aviso do compilador, muitos compiladores C, por padrão, permitem que essa operação compile e execute. Nesse caso, a variável num receberá o endereço de memória onde a string "5oH" está armazenada, e não o valor numérico 5. O programa executará, mas o resultado de num + 5 será um valor numérico sem sentido (o endereço de memória mais 5), não 10. A questão considera que um aviso não é um "erro" que impede a execução.

(B) Incorreta: O programa em C# apresentará um erro de compilação, pois C# é uma linguagem fortemente tipada e não permite a atribuição implícita de uma string a um int.

(C) Incorreta: O programa em C# não compilará. O programa em C compilará (com aviso) e executará, mas o resultado será um endereço de memória somado a 5, não o valor 10. A afirmação de que "C# é compilada por um compilador escrito em C" é irrelevante para o comportamento de tipagem da linguagem C# e é tecnicamente imprecisa em relação ao processo de compilação do .NET.

(D) Incorreta: O programa em PHP não apresentará erro, pois sua tipagem fraca permite a conversão implícita da string "5oH" para o número 5 durante a operação aritmética.

(E) Incorreta:

  • PHP: O cast (int)"5oH" funcionaria, mas o programa já funciona sem ele.
  • C#: O cast (int)"5oH" ainda resultaria em um erro de compilação, pois C# não permite um cast direto de string para int dessa forma; seria necessário usar métodos como int.Parse() ou Convert.ToInt32().
  • C: O cast (int)"5oH" explicitamente converteria o endereço de memória da string para um int, o que já acontece implicitamente (com aviso). Isso não resolveria o problema de extrair o valor numérico 5 da string, e o resultado continuaria sendo um valor sem sentido.

Fonte: FCC TRT-12 2023 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 003). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho