Questão nº 42
Questão de Tecnologia da Informação · FCC TRT-12 2023 (nº 42)
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,
- Aos programas em PHP e em C não apresentarão erros, mesmo sem o uso explícito de cast. (alternativa correta)
- Btodos os programas executarão sem erros de compilação.
- Cos resultados apresentados pelos programas em C# e em C serão iguais, pois C# é compilada por um compilador escrito em C.
- Dtodos os programas apresentarão erros, pois não é possível atribuir strings a variáveis numéricas.
- Etodos os programas deixarão de apresentar erros, caso seja colocado `(int)` antes de "5oH".
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 em5. Então,5 + 5resulta em10. O programa executa sem erros. - C: Embora atribuir uma string literal (
"5oH", que é um ponteiro parachar) a uma variávelintseja 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ávelnumreceberá o endereço de memória onde a string"5oH"está armazenada, e não o valor numérico5. O programa executará, mas o resultado denum + 5será um valor numérico sem sentido (o endereço de memória mais 5), não10. 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 destringparaintdessa forma; seria necessário usar métodos comoint.Parse()ouConvert.ToInt32(). - C: O cast
(int)"5oH"explicitamente converteria o endereço de memória da string para umint, o que já acontece implicitamente (com aviso). Isso não resolveria o problema de extrair o valor numérico5da 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.