Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Aula 03 - Somente em
PDF
POLITEC-PE (Perito Criminal - Área 5 -
Ciências da Computação ou Sistemas de
Informação) Desenvolvimento de
Software - 2024 (Pós-Edital)
Autor:
Paolla Ramos
13 de Maio de 2024
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
Paolla Ramos
Aula 03 - Somente em PDF
Índice
..............................................................................................................................................................................................1) Desenvolvimento - Linguagem C e C++ - Teoria 3
..............................................................................................................................................................................................2) Desenvolvimento - Linguagem C e C++ - Resumo 58
..............................................................................................................................................................................................3) Desenvolvimento - Linguagem C e C++ - Questões Comentadas 69
..............................................................................................................................................................................................4) Desenvolvimento - Linguagem C e C++ - Lista de Questões 123
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
2
180
 
 
 
Sumário 
Apresentação da Aula ........................................................................................................................................ 3 
Linguagem de Programação C .......................................................................................................................... 4 
Conceitos Básicos .......................................................................................................................................... 4 
Sintaxe C ........................................................................................................................................................ 6 
C é uma linguagem estruturada ................................................................................................................ 7 
Compiladores Versus Interpretadores ....................................................................................................... 8 
A Forma de um Programa em C ................................................................................................................ 8 
Compilar um programa em C .................................................................................................................... 9 
Os Cinco Tipos Básicos de Dados ............................................................................................................ 14 
Modificando os Tipos Básicos .................................................................................................................. 15 
Nomes de Identificadores ........................................................................................................................ 16 
Variáveis ................................................................................................................................................... 16 
Onde as variáveis são declaradas ............................................................................................................ 17 
Variáveis Globais ...................................................................................................................................... 18 
Parâmetros Formais ................................................................................................................................. 19 
Modificadores de Tipo de Acesso ............................................................................................................ 20 
volatile ...................................................................................................................................................... 21 
Variáveis static ......................................................................................................................................... 21 
Variáveis Globais static ............................................................................................................................ 22 
Variáveis register...................................................................................................................................... 22 
Variáveis ................................................................................................................................................... 23 
Inicialização de Variáveis ......................................................................................................................... 24 
Identificadores ......................................................................................................................................... 25 
Constantes ............................................................................................................................................... 26 
Entrada do usuário ................................................................................................................................... 26 
Tipos de dados ......................................................................................................................................... 27 
Operadores .............................................................................................................................................. 29 
Strings ...................................................................................................................................................... 34 
Matemática C++ ....................................................................................................................................... 38 
C++ Booleans............................................................................................................................................ 41 
Estruturas de Controle de Fluxo .................................................................................................................. 43 
If...Else ...................................................................................................................................................... 43 
Switch ....................................................................................................................................................... 46 
While......................................................................................................................................................... 47 
Do/While ................................................................................................................................................... 48 
For ............................................................................................................................................................. 50 
Break and Continue.................................................................................................................................. 51 
Array ......................................................................................................................................................... 52 
Resumo ................................................................................................................. Erro! Indicador não definido. 
Matemática C++ ........................................................................................... Erro! Indicador não definido. 
Estrutura de Controle de Fluxo .................................................................... Erro! Indicador não definido. 
Questões Comentadas ......................................................................................... Erro! Indicadornão definido. 
Diversas Bancas ............................................................................................... Erro! Indicador não definido. 
Gabarito................................................................................................................ Erro! Indicador não definido. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
3
180
 
 
 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
4
180
==30e709==
 
 
 
APRESENTAÇÃO DA AULA 
 
Olá, galera! Vamos iniciar os estudos sobre as Linguagens de 
Programação C e C++! 
 
Essa imagem é CLÁSSICA! Dennis MacAlistair Ritchie, foi o cientista 
da computação responsável pela criação de uma das linguagens de 
programação mais importantes da atualidade: a linguagem de 
programação C. Dennis também é um dos cocriadores do sistema 
operacional UNIX. A importância desse sistema advém da introdução 
de um padrão de sistema operacional que se tornou amplamente 
popular, que foi também utilizado como base para criação do LINUX. 
 
É uma linguagem de programação de Médio Nível e de propósito 
geral. C é uma Linguagem de Médio Nível. De acordo com Herbert 
Schildt, C é frequentemente chamada de linguagem de médio nível 
para computadores. Isso não significa que C seja menos poderosa, 
difícil de usar ou menos desenvolvida que uma linguagem de alto 
nível como BASIC e Pascal, tampouco implica que C seja similar à 
linguagem assembly e seus problemas correlatos aos usuários. C é tratada como uma linguagem de médio 
nível porque combina elementos de linguagens de alto nível com a funcionalidade da linguagem assembly. 
 
A Linguagem C é uma linguagem estruturada que permite a criação de programas eficientes e de alto 
desempenho. É amplamente utilizada em sistemas operacionais, aplicativos de software de baixo nível, 
dispositivos eletrônicos e jogos. 
 
Nesta aula, além dos conceitos da linguagem, apresento inúmeras palavras-chave e informações relevantes 
com ênfase no que cai na prova, para que vocês possam entender e internalizar o conteúdo de forma simples 
e eficiente. Aproveitem o material, além dos esquemas, resumos e mnemônicos, não deixe de fazer o maior 
número de questões possível. Vamos ao que importa! 
 
Só mais uma coisa: Eu me dediquei escrevendo essa aula, porém, como não sou um robô e sou HUMANA, 
posso ter cometido algum erro... Se encontrar algum erro na aula, por favor, me informe no 
@prof.paollaramos 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
5
180
 
 
 
LINGUAGEM DE PROGRAMAÇÃO C 
Conceitos Básicos 
 
Antes de iniciar a aula, é importante mencionar que vários exemplos dessa aula foram retirados ou inspirados 
em exemplos do W3Tutorials (https://www.w3schools.com/c e https://www.w3schools.com/cpp). Não 
fizemos isso porque somos preguiçosos, mas por dois motivos: (1) os exemplos são excelentes; (2) essa é 
uma das fontes de inspiração das bancas. Além disso, eu sugiro que vocês tenham sempre aberta uma janela 
com um interpretador online para que vocês possam testar o que veremos. Recomendo o 
www.w3schools.com 
 
C é uma linguagem de programação de propósito geral que foi desenvolvida na década de 1970 por Dennis 
Ritchie no Bell Labs. É uma linguagem de baixo nível que permite aos programadores escrever código 
eficiente e de alto desempenho. 
 
Ela se tornou popular por sua eficiência e por ser uma das primeiras linguagens a permitir que os 
programadores escrevessem programas que acessavam diretamente a memória do computador, 
permitindo que programas mais rápidos e eficientes fossem criados. A linguagem C também é conhecida por 
ser portável, o que significa que um programa escrito em C pode ser compilado e executado em diferentes 
plataformas, como sistemas operacionais diferentes ou diferentes processadores. 
 
O C++ é uma extensão da linguagem C, criada por Bjarne Stroustrup na década de 1980. Ele adiciona recursos 
adicionais, como a programação orientada a objetos, que permitem aos programadores criar programas 
mais complexos e modulares. A programação orientada a objetos é uma técnica de programação que 
organiza o código em objetos que têm suas próprias propriedades e métodos, tornando o código mais fácil 
de entender e manter. O C++ também adicionou recursos como sobrecarga de operadores, templates e 
exceções, tornando-o uma linguagem mais poderosa e flexível do que o C. 
 
Apesar de ser uma extensão do C, o C++ não é totalmente compatível com a linguagem C. Por exemplo, o 
C++ introduziu uma nova palavra-chave para a alocação de memória (new), enquanto o C usava a função 
malloc(). Além disso, o C++ adicionou novos recursos, como as classes e a herança, que não existiam na 
linguagem C. 
 
A evolução do C++ continuou, com a adição de novos recursos e aprimoramento dos existentes. A versão 
mais recente é o C++20, lançado em 2020, que adicionou recursos como módulos, conceitos e melhorias na 
programação concorrente. No entanto, o C ainda é amplamente utilizado e é considerado uma linguagem 
importante, especialmente na programação de sistemas, enquanto o C++ é frequentemente usado na 
programação de aplicativos, jogos e outras aplicações complexas. 
 
• Compilação: O código C é escrito em um arquivo de texto com extensão .c. Esse código precisa ser 
compilado antes de poder ser executado. A compilação transforma o código em linguagem de 
máquina que o computador pode entender. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
6
180
 
 
 
• Variáveis: As variáveis em C são usadas para armazenar valores, como números ou strings. Cada 
variável tem um tipo, como int para números inteiros ou char para caracteres. As variáveis precisam 
ser declaradas antes de serem usadas. 
 
• Tipos de dados: C tem vários tipos de dados, incluindo int, char, float e double. Cada tipo de dado 
tem um tamanho diferente na memória e é usado para armazenar diferentes tipos de informações. 
 
• Operadores: C tem uma série de operadores, como + para adição, - para subtração, * para 
multiplicação e / para divisão. Os operadores são usados para realizar cálculos em variáveis. 
 
• Estruturas de controle: C tem três principais estruturas de controle: if/else, for e while. Essas 
estruturas são usadas para controlar o fluxo do programa, permitindo que os programadores tomem 
decisões ou repitam ações. 
 
• Funções: As funções em C são blocos de código que realizam uma tarefa específica. As funções são 
usadas para dividir o código em partes menores e mais gerenciáveis, tornando o código mais fácil de 
ler e manter. 
 
• Bibliotecas: As bibliotecas em C são coleções de funções que podem ser usadas para realizar tarefas 
específicas. C tem uma grande variedade de bibliotecas disponíveis, como stdio.h para entrada e 
saída, e math.h para funções matemáticas. 
 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
7
180
 
 
 
Sintaxe C 
 
A sintaxe da Linguagem C é baseada em um conjunto de regras que definem como escrevere estruturar o 
código para que ele possa ser compreendido e executado pelo compilador. 
 
Um programa em C é composto por um conjunto de Funções. A função pela qual o programa começa a ser 
executado chama-se main. Após cada cada comando em C deve-se colocar um ; (ponto-e-vírgula). Um 
programa em C deve ser Identado para que possa ser lido com mais facilidade. 
 
 
 
A sintaxe da Linguagem C é composta por um conjunto de regras gramaticais que determinam como as 
instruções e expressões devem ser escritas e organizadas no código fonte. Algumas das principais 
características da sintaxe da Linguagem C incluem: 
 
• C é uma linguagem de programação baseada em texto, o que significa que os programas são escritos 
em um arquivo de texto usando um editor de texto. 
 
• C é uma linguagem de programação case sensitive, o que significa que letras maiúsculas e minúsculas 
são tratadas de maneira diferente. 
 
• O ponto e vírgula (;) é usado para indicar o final de uma instrução em C. 
 
• As chaves ({}) são usadas para delimitar blocos de código em C. Um bloco de código pode conter 
zero ou mais instruções. 
 
• A maioria das palavras-chave em C são reservadas, o que significa que não podem ser usadas como 
nomes de variáveis, funções ou outros identificadores no programa. 
 
• C usa operadores aritméticos padrão, como +, -, * e / para realizar cálculos matemáticos. 
 
• Os comentários em C são iniciados com // para comentários em uma linha ou /* e terminados com 
*/ para comentários de várias linhas. 
 
• C usa declarações de variáveis para declarar as variáveis e seu tipo de dados. 
 
Além disso, na sintaxe da Linguagem C é importante entender os conceitos de variáveis e tipos de dados. As 
variáveis são utilizadas para armazenar valores na memória do computador e podem ter diversos tipos, como 
inteiros (int), números de ponto flutuante (float), caracteres (char), entre outros. 
conjunto de Funções Início: main Após cada cada 
comando ;
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
8
180
 
 
 
 
Também é possível declarar constantes na Linguagem C, utilizando a palavra-chave const, e trabalhar com 
operadores, que são símbolos utilizados para realizar operações matemáticas e lógicas, como soma (+), 
subtração (-), multiplicação (*), divisão (/), entre outros. 
 
Por fim, a Linguagem C possui diversas bibliotecas, que são conjuntos de funções já definidas e prontas para 
serem utilizadas em um programa. Essas bibliotecas são incluídas no código utilizando a diretiva #include, 
seguida do nome da biblioteca desejada. Vamos ver tudo isso nessa aula! 
 
C é uma linguagem estruturada 
 
Uma linguagem estruturada permite muitas possibilidades na programação. Ela suporta, diretamente, 
diversas construções de laços (loops), como while, do-while e for. Se você não sabe o que é um loop, leia a 
explicação abaixo, caso já saiba, siga em frente! 
 
Laços, ou loops, são estruturas de controle de fluxo em programação que permitem que um bloco de código 
seja executado repetidamente enquanto uma determinada condição for verdadeira. As três estruturas de 
loops mais comuns em C são: while, do-while e for. 
 
O laço while é a forma mais simples de loop. Ele consiste em uma expressão booleana que é testada a cada 
iteração do loop. Enquanto a condição for verdadeira, o bloco de código dentro do loop será executado. 
Exemplo: 
 
int i = 0; 
while (i < 10) { 
 printf("%d\n", i); 
 i++; 
} 
 
O laço do-while é semelhante ao while, mas a condição é testada após a primeira execução do loop, 
garantindo que o bloco de código dentro do loop seja executado pelo menos uma vez. Exemplo: 
 
int i = 0; 
do { 
 printf("%d\n", i); 
 i++; 
} while (i < 10); 
 
O laço for é uma forma mais complexa de loop que consiste em três partes: a inicialização, a condição e a 
atualização. A inicialização é executada uma única vez no início do loop, a condição é testada a cada iteração 
e o bloco de código dentro do loop é executado enquanto a condição for verdadeira. A atualização é 
executada no final de cada iteração do loop. Exemplo: 
 
for (int i = 0; i < 10; i++) { 
 printf("%d\n", i); 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
9
180
 
 
 
} 
 
Em uma linguagem estruturada, o uso de goto é proibido ou desencorajado e também a forma comum de 
controle do programa, (que ocorre em BASIC e FORTRAN, por exemplo). Uma linguagem estruturada permite 
que você insira sentenças em qualquer lugar de uma linha e não exige um conceito rigoroso de campo (como 
em FORTRAN). 
 
O principal componente estrutural de C é a função a sub-rotina isolada de C. Em C, funções são os blocos de 
construção em que toda a atividade do programa ocorre. Elas admitem que você defina e codifique 
separadamente as diferentes tarefas de um programa, permitindo, então, que seu programa seja modular. 
Após uma função ter sido criada, você pode esperar que ela trabalhe 
adequadamente em várias situações, sem criar efeitos inesperados em outras partes do programa. O fato 
de você poder criar funções isoladas é extremamente importante em projetos maiores nos quais um código 
de um programador não deve afetar acidentalmente o de outro. 
 
Compiladores Versus Interpretadores 
 
Os termos compiladores e interpretadores referem-se à maneira como um programa é executado. Existem 
dois métodos gerais pelos quais um programa pode ser executado. Em teoria, qualquer linguagem de 
programação pode ser compilada ou interpretada, mas algumas linguagens geralmente são executadas de 
uma maneira ou de outra. Por exemplo, BASIC é normalmente interpretada e C, compilada. A maneira pela 
qual um programa é executado não é definida pela linguagem em que ele é escrito. Interpretadores e 
compiladores são simplesmente programas sofisticados que operam sobre o código-fonte do seu programa. 
Como a diferença entre um compilador e um interpretador pode não ser clara para todos os leitores, a breve 
descrição seguinte esclarecerá o assunto. 
 
Um interpretador lê o código-fonte do seu programa uma linha por vez, executando a instrução específica 
contida nessa linha. Um compilador lê o programa inteiro e converte-o em um código-objeto, que é uma 
tradução do código-fonte do programa em uma forma que o computador possa executar diretamente. 
 
O código-objeto é também conhecido como código binário ou código de máquina.Uma vez que o programa 
tenha sido compilado, uma linha do código-fonte, mesmo alterada, não é mais importante na execução do 
seu programa. 
 
A Forma de um Programa em C 
 
Apresento agora uma lista das 32 palavras-chave (ou palavras reservadas) que, combinadas com a sintaxe 
formal de C, formam a linguagem de programação C. Destas, 27 foram definidas pela versão original de C. 
As cinco restantes foram adicionadas pelo comitê ANSI: enum, const, signed, void e volatile. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
10
180
 
 
 
Uma lista das palavras-chave de C ANSI1 
auto double int struct 
break else long switch 
case enum register typedef 
char extern return union 
const float short unsigned 
continue for signed void 
default goto sizeof volatile 
do if static while 
 
Todo programa em C consiste em uma ou mais funções. A única função que necessariamente precisa estar 
presente é a denominada main(), que a primeira função a ser chamada quando a execução do programacomeça. Em um código de C bem escrito, main() contém, em essência, um esboço do que o programa faz. O 
esboço é composto de chamadas de funções. Embora main() não seja tecnicamente parte da linguagem C, 
trate-a como se fosse. Não tente usar main() como nome de uma variável porque provavelmente confundirá 
o compilador. 
 
Compilar um programa em C 
 
Compilar um programa em C/C++ significa transformar o código fonte escrito em linguagem de programação 
em um arquivo executável que possa ser entendido e executado pelo computador. Para compilar um 
programa, é necessário utilizar um compilador específico para a linguagem de programação escolhida. O 
compilador irá ler o código fonte e gerar o código objeto, que posteriormente será vinculado a outras 
bibliotecas e gerar o arquivo executável. O processo de compilação pode ser feito através de linha de 
comando ou utilizando ambientes de desenvolvimento integrado (IDEs). O arquivo executável gerado pode 
então ser executado no computador. Compilar um programa em C consiste nestes três passos: 
 
1. Criar o programa 
2. Compilar o programa 
3. Linkeditar o programa com as funções necessárias da biblioteca 
 
Alguns compiladores fornecem ambientes de programação integrados que incluem um editor. Com outros, 
é necessário usar um editor separado para criar seu programa. Os compiladores só aceitam a entrada de 
arquivos de texto padrão. Por exemplo, seu compilador não aceitará arquivos criados por certos 
processadores de textos porque eles têm códigos de controle e caracteres não-imprimíveis. 
 
 
1 ANSI significa American National Standards Institute (Instituto Nacional Americano de Padrões, em 
português) e é uma organização sem fins lucrativos que desenvolve e publica normas e padrões para 
várias áreas, incluindo tecnologia 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
11
180
 
 
 
O método exato que você utiliza para compilar um programa depende do compilador que está em uso. Além 
disso, a linkedição varia muito entre os compiladores e os ambientes. Existem muitos ambientes de 
desenvolvimento para a linguagem C disponíveis no mercado, alguns dos mais populares incluem: 
 
Visual Studio Code: é um editor de código-fonte leve, mas poderoso, executado em sua área de trabalho e 
disponível para Windows, macOS e Linux. Ele vem com suporte integrado para JavaScript, TypeScript e 
Node.js e possui um rico ecossistema de extensões para outras linguagens e tempos de execução (como C++, 
C#, Java, Python, PHP, Go, .NET). Comece sua jornada com o VS Code com esses vídeos introdutórios. 
 
 
 
Code::Blocks: é um IDE gratuito, de código aberto e multiplataforma . Usando uma arquitetura de plug-in, 
seus recursos e recursos são definidos pelos plug-ins fornecidos. Atualmente, Code::Blocks é orientado para 
C/C++/Fortran. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
12
180
 
 
 
 
 
Eclipse CDT: fornece um Ambiente de Desenvolvimento Integrado C e C++ totalmente funcional baseado na 
plataforma Eclipse. Os recursos incluem: suporte para criação de projeto e construção gerenciada para várias 
cadeias de ferramentas, criação padrão, navegação de origem, várias ferramentas de conhecimento de 
origem, como hierarquia de tipos, gráfico de chamada, navegador de inclusão, navegador de definição de 
macro, editor de código com realce de sintaxe, dobra e hiperlink navegação, refatoração de código-fonte e 
geração de código, ferramentas de depuração visual, incluindo memória, registradores e visualizadores de 
desmontagem. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
13
180
 
 
 
 
 
Dev-C++: é um Ambiente de Desenvolvimento Integrado (IDE) C e C++ completo para plataformas Windows. 
Milhões de desenvolvedores, estudantes e pesquisadores usam o Dev-C++ desde que a primeira versão foi 
lançada em 1998. Ele foi apresentado em dezenas de C++ e livros científicos e continua sendo uma das 
ferramentas de aprendizado favoritas entre universidades e escolas em todo o mundo. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
14
180
 
 
 
 
 
NetBeans IDE é um ambiente de desenvolvimento integrado gratuito e de código aberto para 
desenvolvedores de software nas linguagens Java, JavaScript, HTML5, PHP, C/C++, Groovy, Ruby, entre 
outras. O IDE é executado em muitas plataformas, como Windows, Linux, Solaris e MacOS 
 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
15
180
 
 
 
 
 
Os Cinco Tipos Básicos de Dados 
 
Há cinco tipos básicos de dados em C: caractere, inteiro, ponto flutuante, ponto flutuante de precisão dupla 
e sem valor (char, int, float, double e void, respectivamente). Como você verá, todos os outros tipos de dados 
em C são baseados em um desses tipos. O tamanho e a faixa desses tipos de dados variam de acordo com o 
tipo de processador e com a implementação do compilador C. Um caractere ocupa geralmente 1 byte e um 
inteiro tem normalmente 2 bytes, mas você não pode fazer esta suposição se quiser que seus programas 
sejam portáveis a uma gama mais ampla de computadores. O padrão ANSI estipula apenas a faixa mínima 
de cada tipo de dado, não o seu tamanho em bytes. 
 
O formato exato de valores em ponto flutuante depende de como eles são implementados. Inteiros 
geralmente correspondem ao tamanho natural de uma palavra do computador host. Valores do tipo char 
são normalmente usados para conter valores definidos pelo conjunto de caracteres ASCII. Valores fora dessa 
faixa podem ser manipulados diferentemente entre as implementações de C. 
 
Tipo 
Tamanho aproximado 
em bits 
Faixa Mínima 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
16
180
 
 
 
char 8 -127 a 127 
unsigned char 8 0 a 255 
signed char 8 -127 a 127 
int 16 -32.767 a 32.767 
unsigned int 16 0 a 65.535 
signed int 16 O mesmo que int 
short int 16 O mesmo que int 
unsigned short int 16 0 a 65.535 
signed short int 16 O mesmo que short int 
long int 32 -2.147.483.647 a 2.147.483.647 
signed long int 32 O mesmo que long int. 
unsigned long int 32 0 a 4.294.967.295 
float 32 Seis dígitos de precisão 
double 64 Dez dígitos de precisão 
long double 80 Dez dígitos de precisão 
 
Modificando os Tipos Básicos 
 
Com exceção do void, os tipos de dados básicos podem ter vários modificadores precedendo-os. Um 
modificador é usado para alterar o significado de um tipo básico para adaptá-lo mais precisamente às 
necessidades de diversas situações. A lista de modificadores é mostrada aqui: 
• signed 
• unsigned 
• long 
• short 
 
Os modificadores signed, short, long e unsigned podem ser aplicados aos tipos básicos caractere e inteiro. 
Contudo, long também pode ser aplicado a double. (Note que o padrão ANSI elimina o long float porque ele 
tem o mesmo significadode um double.) 
A Tabela 2.1 mostra todas as combinações de tipos de dados que atendem ao padrão ANSI juntamente com 
suas faixas mínimas e larguras aproximadas em bits. 
 
O uso de signed com inteiros é permitido, mas redundante porque a declaração padrão de inteiros assume 
um número com sinal. O uso mais importante de signed é modificar char em implementações em que esse 
tipo, por padrão, não tem sinal. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
17
180
 
 
 
Algumas implementações podem permitir que unsigned seja aplicado aos tipos de ponto flutuante (como 
em unsigned double). Porém, isso reduz a portabilidade de seu código e geralmente não é recomendável. 
Qualquer tipo expandido ou adicional não definido pelo padrão proposto ANSI provavelmente não será 
suportado por todas as implementações de C. 
 
A diferença entre inteiros com ou sem sinal é a maneira como o bit mais significativo do inteiro é 
interpretado. Se um inteiro com sinal é especificado, o compilador C gerará um código que assume que o bit 
de mais alta ordem de um inteiro deve ser interpretado como indicador de sinal. Se o indicador de sinal é 0, 
o número é positivo; se é 1, o número é negativo. 
 
Em geral, os números negativos são representados usando-se o complemento de dois, que inverte todos os 
bits em um número (exceto o indicador de sinal), adiciona 1 a esse número e põe o indicador de sinal em 1. 
 
Nomes de Identificadores 
 
Em C, os nomes de variáveis, funções, rótulos e vários outros objetos definidos pelo usuário são chamados 
de identificadores. Esses identificadores podem variar de um a diversos caracteres. O primeiro caractere 
deve ser uma letra ou um sublinhado e os caracteres subseqüentes devem ser letras, números ou 
sublinhados. Aqui estão alguns exemplos de nomes de identificadores corretos e incorretos: 
 
Correto 
count 
test23 
high_balance 
 
Incorreto 
1 count 
hi!there 
high...balance 
 
O padrão C ANSI define que os identificadores em C podem ter qualquer tamanho, mas pelo menos os 
primeiros 6 caracteres devem ser significativos para nomes externos usados em processos de linkedição, e 
31 caracteres para nomes internos. Identificadores que excedem esses limites serão truncados, o que pode 
levar a conflitos de nomes. Em C, letras maiúsculas e minúsculas são tratadas como diferentes e 
identificadores não podem ser palavras-chave do C ou ter o mesmo nome de funções da biblioteca C. 
 
Variáveis 
 
Em C, é necessário declarar as variáveis antes de usá-las, para que o compilador possa reservar a quantidade 
adequada de memória necessária para armazenar os valores. A declaração de variáveis começa com o tipo 
de dado que a variável irá armazenar, seguido pelo nome da variável e, opcionalmente, pelo valor inicial. A 
forma geral de uma declaração é 
 
tipo lista_de_variáveis; 
 
Aqui, tipo deve ser um tipo de dado válido em C mais quaisquer modificadores; e lista_de_variáveis pode 
consistir em um ou mais nomes de identificadores separados por vírgulas. Por exemplo, a declaração "int i, 
j, 1;" declara três variáveis do tipo inteiro com os nomes "i", "j" e "1". A declaração "short int si;" declara uma 
variável do tipo inteiro curto, enquanto "unsigned int ui;" declara uma variável inteira sem sinal. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
18
180
 
 
 
 
É importante notar que o nome da variável não tem relação com seu tipo. Ou seja, você pode escolher 
qualquer nome válido para a variável, independentemente do tipo de dado que ela armazena. No entanto, 
é uma boa prática escolher nomes significativos que reflitam o propósito da variável, para tornar o código 
mais legível e fácil de entender. 
 
Onde as variáveis são declaradas 
 
Em programação, as variáveis podem ser declaradas em três lugares diferentes: dentro de funções, na 
definição de parâmetros de funções e fora de todas as funções. Cada uma dessas opções oferece benefícios 
e limitações, e é importante entender quando e onde declarar suas variáveis para que seu programa funcione 
corretamente. 
 
As variáveis declaradas dentro de uma função são chamadas de variáveis locais. Em C, elas também podem 
ser referidas como variáveis automáticas, pois a palavra-chave "auto" pode ser usada para declará-las. As 
variáveis locais só podem ser referenciadas por comandos que estão dentro do bloco no qual as variáveis 
foram declaradas. Em outras palavras, as variáveis locais não são reconhecidas fora de seu próprio bloco de 
código. 
 
As variáveis locais existem apenas enquanto o bloco de código em que foram declaradas está sendo 
executado. Ou seja, uma variável local é criada na entrada de seu bloco e destruída na saída. O bloco de 
código mais comum em que as variáveis locais são declaradas é a função. Por exemplo, considere as 
seguintes funções: 
 
void minha_funcao() { 
 int variavel_local; 
 // ... 
} 
 
int main() { 
 minha_funcao(); 
 // A variável "variavel_local" não é reconhecida aqui. 
 return 0; 
} 
 
Neste exemplo, a variável "variavel_local" é declarada dentro da função "minha_funcao()" e, portanto, só 
pode ser referenciada dentro desse bloco de código. Ela não é reconhecida fora da função, como pode ser 
visto no "main()". 
 
É importante lembrar que as variáveis locais são destruídas assim que a função em que foram declaradas 
termina de ser executada. Isso significa que, se você precisa armazenar o valor de uma variável para uso 
posterior em outra parte do programa, ela não pode ser declarada como uma variável local. 
 
Em resumo, as variáveis locais são uma opção útil para armazenar valores temporários dentro de uma 
função, sem interferir no resto do programa. No entanto, é importante ter em mente suas limitações e 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
19
180
 
 
 
considerar outras opções quando for necessário armazenar valores por um período mais longo ou fora de 
uma única função. 
 
Variáveis Globais 
 
Ao contrário das variáveis locais, as variáveis globais são reconhecidas pelo programa inteiro e podem ser 
usadas por qualquer pedaço de código. Além disso, elas guardam seus valores durante toda a execução do 
programa. Você cria variáveis globais declarando-as fora de qualquer função. Elas podem ser acessadas por 
qualquer expressão independentemente de qual bloco de código contém a expressão. 
 
#include <stdio.h> 
int count; /* count é global */ 
 
void func1 (void); 
void func2 (void); 
 
void main(void) 
{ 
 count 100; 
 func1(); 
} 
void func1 (void) 
{ 
 int temp; 
 
 temp count; 
 func2(); 
 printf("count é %d", count); /* imprimirá 100 */ 
} 
void func2 (void) 
{ 
 int count; 
 for (count=1; count <10; count++) 
 putchar('.'); 
} 
 
Observe que, apesar de nem main() nem func1() terem declarado a variável count, ambas podem usá-la. A 
função func2(), porém, declarou uma variável local chamada count. Quando func2() referencia count, ela 
referencia apenas sua variável local, não a variável global. Se uma variável global e uma variável local 
possuem o mesmo nome, todas as referências ao nome da variável dentro do bloco onde a variável local foi 
declarada dizem respeito à variável local e não têm efeito algum sobre a variável global. Pode ser 
conveniente, mas esquecer-se disso poderá fazer com que seu programa seja executado estranhamente, 
embora pareça correto. 
 
Paolla Ramos
Aula 03 -Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
20
180
 
 
 
O armazenamento de variáveis globais encontra-se em uma região fixa da memória, separada para esse 
propósito pelo compilador C. Variáveis globais são úteis quando o mesmo dado é usado em muitas funções 
em seu programa. 
 
No entanto, você deve evitar usar variáveis globais desnecessárias. Elas ocupam memória durante todo o 
tempo em que seu programa está executando, não apenas quando são necessárias. Além disso, usar uma 
variável global onde uma variável local poderia ser usada torna uma função menos geral, porque ela conta 
com alguma coisa que deve ser definida fora dela. Finalmente, usar um grande número de variáveis globais 
pode levar a erros no programa por causa de desconhecidos — e indesejáveis — efeitos colaterais. Isso pode 
ser evidenciado no BASIC padrão, em que todas as variáveis são globais. Um problema maior no 
desenvolvimento de grandes projetos é a mudança acidental do valor de uma variável porque ela é usada 
em algum outro lugar do programa. Isso pode acontecer em C se você usar variáveis globais demais em seus 
programas. 
 
Portanto, vimos que, embora as variáveis globais sejam úteis quando o mesmo dado é usado em muitas 
funções em seu programa, é importante evitar usá-las desnecessariamente. Elas ocupam memória durante 
todo o tempo em que o programa está em execução, não apenas quando são necessárias. Além disso, usar 
uma variável global onde uma variável local poderia ser usada torna uma função menos geral, porque ela 
conta com alguma coisa que deve ser definida fora dela. O uso excessivo de variáveis globais pode levar a 
erros no programa devido a efeitos colaterais desconhecidos e indesejáveis. 
 
Parâmetros Formais 
 
Se uma função usa argumentos, ela deve declarar variáveis que receberão os valores dos argumentos. Essas 
variáveis são denominadas parâmetros formais da função. Elas se comportam como qualquer outra variável 
local dentro da função. 
 
Como é mostrado no fragmento de programa seguinte, suas declarações ocorrem depois do nome da função 
e dentro dos parênteses: 
 
/* Retorna 1 se c é parte da string s; 0 se não é o caso */ 
int is_in(char *s, char c) { 
 while (*s) { 
 if (*s == c) { 
 return 1; 
 } 
 s++; 
 } 
 return 0; 
} 
 
A função is_in() tem dois parâmetros: s e c. Essa função devolve 1 se o caractere especificado em c estiver 
contido na string s; 0 se não estiver. Você deve informar à C que tipo de variáveis são os parâmetros formais, 
declarando-os como mostrado acima. Uma vez feito isso, elas podem ser usadas dentro da função como 
variáveis locais normais. Tenha sempre em mente que, como variáveis locais, elas também são dinâmicas e 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
21
180
 
 
 
são destruídas na saída da função. Você deve ter certeza de que os parâmetros formais que estão declarados 
são do mesmo tipo dos argumentos que você utiliza para chamar a função. 
 
Uma das principais razões para uma linguagem estruturada é a compartimentalização ou separação de 
código e dados. Em C, esse isolamento é conseguido pelo uso de variáveis locais e funções. Por exemplo, a 
tabela abaixo mostra duas maneiras de escrever mul() - uma função simples que calcula o produto de dois 
inteiros. 
 
Geral Específica 
mul(int x, int y) 
{ 
return(x*y); 
} 
int x, y; 
mul( void ) 
{ 
return (x*y); 
} 
 
Ambas as funções retornam o produto das variáveis x e y. Contudo, a versão generalizada, ou 
parametrizada, pode ser usada para retornar o produto de quaisquer dois inteiros, enquanto a versão 
específica só pode ser usada para encontrar o produto das variáveis globais x e y. 
 
Modificadores de Tipo de Acesso 
 
O C introduziu dois novos modificadores (também chamados quantificadores) que controlam a maneira 
como as variáveis podem ser acessadas ou modificadas. 
 
Esses modificadores são const e volatile. Devem preceder os modificadores de tipo e os nomes que eles 
modificam. 
 
const 
 
Variáveis do tipo const não podem ser modificadas por seu programa. (Uma variável const pode, entretanto, 
receber um valor inicial.) O compilador pode colocar variáveis desse tipo em memória de apenas leitura 
(ROM). Por exemplo: 
 
const int a=10; 
 
cria uma variável inteira chamada a, com um valor inicial 10, que seu programa não pode modificar. Você 
pode, porém, usar a variável a em outros tipos de expressões. Uma variável const recebe seu valor de uma 
inicialização explícita ou por algum recurso dependente do hardware. 
 
O qualificador "const" protege os objetos apontados pelos argumentos de uma função de serem modificados 
por essa função. Isso é útil para evitar que uma função modifique a variável real apontada pelo ponteiro. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
22
180
 
 
 
O uso do qualificador const em declarações de parâmetros de funções da biblioteca C padrão e em variáveis 
ajuda a proteger objetos de serem modificados por funções e a verificar que o programa não modifica uma 
variável. Quando um argumento é declarado como const, a função não pode modificar o objeto apontado 
pelo argumento. Além disso, o uso de const também ajuda a provar que qualquer alteração em uma variável 
ocorre devido a eventos externos. 
 
volatile 
 
O modificador "volatile" é usado para indicar ao compilador que o valor de uma variável pode ser alterado 
de forma não especificada pelo programa. Isso é importante porque alguns compiladores automaticamente 
otimizam o código, assumindo que o conteúdo de uma variável é imutável, o que pode causar problemas em 
certas situações. 
 
O modificador "volatile" previne essas mudanças. Também é possível usar "const" e "volatile" juntos para 
prevenir efeitos colaterais acidentais. Um exemplo disso seria usar a declaração "const volatile unsigned char 
*port = 0x30" para indicar que o valor de uma porta é mudado apenas por condições externas. 
 
Variáveis static 
 
Dentro de sua própria função ou arquivo, variáveis static são variáveis permanentes. Ao contrário das 
variáveis globais, elas não são reconhecidas fora de sua função ou arquivo, mas mantêm seus valores entre 
chamadas. Essa característica torna-as úteis quando você escreve funções generalizadas e funções de 
biblioteca que podem ser usadas por outros programadores. O especificador static tem efeitos diferentes 
em variáveis locais e em variáveis globais. 
 
Variáveis Locais static 
Quando o modificador static é aplicado a uma variável local, o compilador cria armazenamento permanente 
para ela quase da mesma forma como cria armazenamento para uma variável global. A diferença 
fundamental entre uma variável local static e uma variável global é que a variável local static é reconhecida 
apenas no bloco em que está declarada. Em termos simples, uma variável local static é uma variável local 
que retém seu valor entre chamadas de função. 
 
Variáveis locais static são muito importantes na criação de funções isoladas, porque diversos tipos de rotinas 
devem preservar um valor entre as chamadas. Se variáveis static não fossem permitidas, variáveis globais 
teriam de ser usadas, abrindo brechas para possíveis efeitos colaterais. Um exemplo de função que requer 
uma variável local static é um gerador de série de números que produz um novo número baseado no 
anterior. Seria possível declarar uma variável global parareter esse valor. Porém, cada vez que a função é 
usada, você deve lembrar-se de declarar essa variável global e garantir que ela não conflite com nenhuma 
outra variável global já declarada. Além disso, usar uma variável global tornaria essa função difícil de ser 
colocada em uma biblioteca de funções. 
 
A melhor solução é declarar a variável que retém o número gerado como static, como neste fragmento de 
programa. 
 
series (void) 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
23
180
 
 
 
{ 
 static int series_num; 
 
 series_num = series_num+23; 
 return (series_num); 
} 
 
Nesse exemplo, a variável series_num permanece existindo entre as chamadas da função em vez da criação 
e exclusão que as variáveis locais normais fariam. Isso significa que cada chamada a series() pode produzir 
um novo membro da série, baseado no número precedente, sem declarar essa variável globalmente. 
 
Você pode dar à variável local static um valor de inicialização. Esse valor é atribuído apenas uma vez - e não 
toda vez que o bloco de código é inserido, de forma análoga às variáveis locais normais. Por exemplo, essa 
versão de series() inicializa series_num com 100: 
 
series (void) 
{ 
 static int series_num = 100; 
 
 series_num = series_num+23; 
 return series_num; 
 
} 
 
Da forma como a função se acha agora, a série sempre começa com o valor 123. Enquanto isso é aceitável 
para algumas aplicações, a maioria dos geradores de séries permite ao usuário especificar o ponto inicial. 
Uma maneira de dar a series_num um valor especificado pelo usuário é tornar series_num uma variável 
global e, em seguida, ajustar seu valor de acordo com o especificado. Porém, series_num foi feita static 
justamente para não ser definida como global. Isso leva ao segundo uso de static. 
 
Variáveis Globais static 
 
Aplicar o especificador static a uma variável global informa ao compilador para criar uma variável global que 
é reconhecida apenas no arquivo no qual a mesma foi declarada. Isso significa que, muito embora a variável 
seja global, rotinas em outros arquivos não podem reconhecê-la ou alterar seu conteúdo diretamente; assim, 
não está sujeita a efeitos colaterais. Entretanto, para as poucas situações em que uma variável local static 
não possa fazer o trabalho, você pode criar um pequeno arquivo que contenha apenas as funções que 
precisam da variável global static e compilar separadamente esse arquivo sem medo de efeitos colaterais. 
 
Variáveis register 
 
O especificador de armazenamento register tradicionalmente era aplicado apenas a variáveis dos tipos int e 
char. Contudo, o padrão C ANSI ampliou sua definição de forma que ele pode ser aplicado a qualquer 
variável. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
24
180
 
 
 
Originalmente, o especificador register solicitava ao compilador C que armazenasse o valor das variáveis 
declaradas com esse especificador num registrador da CPU em vez da memória, onde as variáveis normais 
são armazenadas. 
 
Isso significa que operações nas variáveis register poderiam ocorrer muito mais rapidamente que nas 
variáveis armazenadas na memória, pois o valor dessas variáveis era realmente conservado na CPU e não 
era necessário acesso à memória para determinar ou modificar seus valores. 
 
Variáveis 
 
Em C++, existem diferentes tipos de variáveis (definidas com diferentes palavras-chave). Aqui estão mais 
alguns exemplos comuns de tipos de variáveis em C++: 
 
• int- armazena inteiros (números inteiros), sem decimais, como 123 ou -123 
• double- armazena números de ponto flutuante, com decimais, como 19,99 ou -19,99 
• char- armazena caracteres únicos, como 'a' ou 'B'. Os valores de caracteres são cercados por aspas 
simples 
• string- armazena texto, como "Hello World". Os valores de string são colocados entre aspas duplas 
• bool- armazena valores com dois estados: verdadeiro ou falso 
• float - armazena números de ponto flutuante, mas com menos precisão do que o tipo double 
• long - armazena inteiros maiores do que o tipo int, com mais bits de armazenamento 
• short - armazena inteiros menores do que o tipo int, com menos bits de armazenamento 
• unsigned - um modificador que pode ser aplicado a qualquer tipo numérico para permitir apenas 
valores positivos 
 
Existem também vários modificadores que podem ser aplicados a tipos numéricos, como "signed" e 
"unsigned", que afetam se um número pode ser negativo ou não. Além disso, os tipos de variáveis podem 
ser combinados para criar tipos mais complexos, como arrays (matrizes) e structs (estruturas). 
 
Além disso, pessoal, algumas outras informações importantes sobre variáveis em C++: 
 
• As variáveis devem ser declaradas antes de serem usadas. Isso envolve especificar o tipo de dados da 
variável e, opcionalmente, atribuir um valor inicial. 
• As variáveis podem ser inicializadas com um valor durante a declaração, usando o operador de 
atribuição "=". 
• O escopo de uma variável define onde ela pode ser acessada dentro do programa. Variáveis locais 
são definidas dentro de uma função e só podem ser acessadas dentro dessa função. Variáveis globais 
são definidas fora de qualquer função e podem ser acessadas de qualquer lugar no programa. 
• O valor de uma variável pode ser alterado durante a execução do programa, atribuindo um novo valor 
a ela. 
• As variáveis podem ser usadas em expressões matemáticas e em operações lógicas para executar 
cálculos e tomar decisões no programa. 
• É importante inicializar as variáveis antes de usá-las para evitar comportamentos inesperados no 
programa. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
25
180
 
 
 
• As variáveis em C++ são sensíveis a maiúsculas e minúsculas, portanto, "nomeDaVariavel" é diferente 
de "nomedavariavel". 
• Os nomes das variáveis devem ser únicos e descritivos para ajudar a entender o que a variável está 
armazenando. 
 
int myNum = 5; // Integer (whole number without decimals) 
double myFloatNum = 5.99; // Floating point number (with decimals) 
char myLetter = 'D'; // Character 
string myText = "Hello"; // String (text) 
bool myBoolean = true; // Boolean (true or false) 
 
Quando você está trabalhando em um programa que requer muitas variáveis, pode ser tedioso e demorado 
declará-las uma por uma. Em C++, é possível declarar várias variáveis do mesmo tipo usando uma sintaxe 
simplificada. 
 
Por exemplo, em vez de escrever: 
 
int a; 
int b; 
int c; 
int d; 
 
Você pode escrever: 
 
int a, b, c, d; 
 
Esta sintaxe é chamada de declaração de variáveis em linha, onde você pode declarar várias variáveis do 
mesmo tipo na mesma linha, separando-as com vírgulas. Você também pode inicializar várias variáveis na 
mesma linha, como no exemplo abaixo: 
 
int a = 5, b = 10, c = 15, d = 20; 
int a = 5, b, c = 15, d; 
 
Neste exemplo, as variáveis "a" e "c" são inicializadas com valores, enquanto "b" e "d" são declaradas sem 
um valor inicial. Ao declarar várias variáveis em uma linha, é importante manter o código legível, 
certificando-se de que as variáveis estejam separadas por vírgulas e que os nomes das variáveis sejam 
descritivos e fáceis de entender. 
 
Inicialização de Variáveis 
 
Você pode dar à maioria das variáveis em C um valor, no mesmo momento em que elas são declaradas, 
colocando um sinal de igual e uma constanteapós o nome da variável. A forma geral de uma inicialização é 
tipo nome_da_variável = constante; 
 
Alguns exemplos são 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
26
180
 
 
 
 
char ch = 'a'; 
int first = 0; 
float balance = 123.23; 
 
Variáveis globais e variáveis locais static são inicializadas apenas no começo do programa. Variáveis locais 
(incluindo variáveis locais static) são inicializadas cada vez que o bloco no qual estão declaradas for inserido. 
Variáveis locais e register que não são inicializadas possuem valores desconhecidos antes de ser efetuada a 
primeira atribuição a elas. Variáveis globais não inicializadas e variáveis locais estáticas são inicializadas com 
zero. 
 
As formas de inicialização de variáveis em C++ são as seguintes: 
 
• Inicialização implícita: quando uma variável é declarada sem uma atribuição explícita, ela recebe um 
valor padrão que depende do tipo de variável. Por exemplo, um inteiro (int) é inicializado como 0, 
enquanto um ponto flutuante (float) é inicializado como 0.0. 
 
• Inicialização direta: é feita através da atribuição de um valor para a variável no momento da sua 
declaração, utilizando chaves {} ou parênteses (). Por exemplo, para inicializar um inteiro chamado 
"x" com o valor 5, pode-se fazer a declaração "int x = 5;". 
 
• Inicialização por cópia: é feita ao atribuir a uma variável um valor de outra variável já existente, 
utilizando o operador de atribuição "=". 
 
• Inicialização dinâmica: é feita através da alocação dinâmica de memória para uma variável, utilizando 
o operador "new". Isso permite que o valor da variável seja definido em tempo de execução, em vez 
de ser definido em tempo de compilação. 
 
• Inicialização por lista: é feita através da atribuição de valores a uma variável utilizando uma lista de 
inicialização entre chaves {}. Esse método de inicialização permite a atribuição de vários valores a 
uma variável ao mesmo tempo, sendo uma forma mais rápida e eficiente de inicialização em casos 
em que se deseja inicializar vários valores. 
 
Porém, é importante lembrar que a inicialização de variáveis é uma boa prática de programação, mas nem 
sempre é necessária. Em alguns casos, a variável pode ser inicializada em outra parte do código ou receber 
um valor em tempo de execução, durante a execução do programa. 
 
Identificadores 
 
Os identificadores são usados para nomear variáveis, funções, classes, estruturas e outros elementos do 
código. Identificadores são usados para tornar o código mais legível e compreensível. Os identificadores em 
C++ devem seguir as seguintes regras: 
 
• Deve começar com uma letra (maiúscula ou minúscula) ou com um sublinhado (_). 
• Não pode começar com um número. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
27
180
 
 
 
• Pode conter letras, números e sublinhados. 
• Os identificadores são sensíveis a maiúsculas e minúsculas, ou seja, "nome" é diferente de "Nome". 
• O comprimento do identificador é limitado pelo compilador. 
• Algumas palavras-chave reservadas, como "if" e "while", não podem ser usadas como identificadores, 
pois têm um significado especial na linguagem C++. 
 
Além disso, é recomendado usar nomes descritivos para identificadores, para que outros programadores 
possam entender facilmente o que o código está fazendo. Por exemplo, em vez de usar "x" como nome de 
variável, é mais fácil entender o que está acontecendo se você usar um nome mais descritivo, como "idade" 
ou "precoProduto". 
 
Constantes 
 
Em C, constantes referem-se a valores fixos que o programa não pode alterar. Constantes em C podem ser 
de qualquer um dos cinco tipos de dados básicos. A maneira como cada constante é representada depende 
do seu tipo. Constantes de caractere são envolvidas por aspas simples (). Por exemplo, 'a' e '%' são constantes 
tipo caractere. O padrão ANSI também define caracteres multi bytes (usados principalmente em ambientes 
de língua estrangeira). 
 
Constantes inteiras são especificadas como números sem componentes fracionários. Por exemplo, 10 e -100 
são constantes inteiras. Constantes em ponto flutuante requerem o ponto decimal seguido pela parte 
fracionária do número. 
 
Por exemplo, 11.123 é uma constante em ponto flutuante. C também permite que você use notação 
científica para números em ponto flutuante. 
 
É uma boa prática declarar variáveis como constantes quando sabemos que seus valores não mudarão 
durante a execução do programa. Isso ajuda a evitar erros de programação e torna o código mais fácil de ler 
e entender. Por exemplo, podemos declarar constantes como minutosPerHour = 60; e PI = 3.14; e usá-las em 
nossos programas sempre que precisarmos de seus valores, sem nos preocuparmos em alterá-los 
inadvertidamente. 
 
Entrada do usuário 
 
Em C++, a entrada do usuário é obtida por meio da variável predefinida "cin". O operador de extração ">>" 
é usado para armazenar o valor digitado pelo usuário em uma variável. Por exemplo, o código "cin >> x;" 
solicita que o usuário digite um valor que será armazenado na variável "x". Depois disso, podemos usar a 
variável para realizar operações matemáticas ou exibi-la na tela. 
 
Podemos usar a entrada do usuário para criar programas interativos, como uma calculadora simples que 
pede ao usuário para inserir dois números e, em seguida, exibe a soma desses números. Para isso, podemos 
declarar duas variáveis "x" e "y" para armazenar os valores inseridos pelo usuário e outra variável "sum" para 
armazenar o resultado da soma desses valores. Em seguida, usamos "cin" para obter os valores do usuário e 
o operador "+" para somar esses valores. Por fim, exibimos o resultado na tela com a ajuda do operador de 
inserção "<<" e a mensagem "Sum is:". 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
28
180
 
 
 
 
Tipos de dados 
 
Tipos de dados em C/C++ se refere ao tipo de valor que uma variável pode armazenar. O tipo de dado 
determina a quantidade de memória a ser alocada para a variável e as operações que podem ser realizadas 
com ela. O C++ possui diversos tipos de dados integrados, tais como inteiros, números de ponto flutuante, 
caracteres, booleanos, strings, entre outros.. 
 
int myNum = 5; // Integer (whole number) 
float myFloatNum = 5.99; // Floating point number 
double myDoubleNum = 9.98; // Floating point number 
char myLetter = 'D'; // Character 
bool myBoolean = true; // Boolean 
string myText = "Hello"; // String 
 
Tipo de Dado Tamanho Descrição 
boolean 1 byte Armazena valores verdadeiro ou falso 
char 1 byte Armazena um único caractere/letra/número ou valores 
ASCII 
int 2 or 4 bytes Armazena números inteiros sem decimais 
float 4 bytes Armazena números fracionários com uma ou mais casas 
decimais. Suficiente para armazenar 6-7 dígitos decimais 
double 8 bytes Armazena números fracionários com uma ou mais casas 
decimais. Suficiente para armazenar 15 dígitos decimais. 
 
Tipos de dados numéricos 
 
Os tipos numéricos em C++ permitem a declaração e armazenamento de números inteiros e de ponto 
flutuante em variáveis. A escolha do tipo numérico depende do tipo de número que se deseja armazenar. 
 
O tipo int é usado para armazenar números inteiros, sem casas decimais, como 35 ou 1000. Já os tipos float 
e double são usados para armazenar números de ponto flutuante, com casas decimais,como 9.99 ou 
3.14515. O tipo float ocupa 4 bytes de memória, enquanto o tipo double ocupa 8 bytes, permitindo 
armazenar valores com maior precisão. 
 
Além disso, é possível representar números científicos em C++, usando a notação com "e" para indicar a 
potência de 10. Por exemplo, o número 35e3 representa 35 vezes 10 elevado a 3, ou seja, 35000. O número 
12E4 representa 12 vezes 10 elevado a 4, ou seja, 120000. 
 
Tipo Descrição 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
29
180
 
 
 
int 
Tipo de dado numérico inteiro que armazena valores inteiros sem ponto flutuante. 
Ocupa 2 ou 4 bytes na memória e seu intervalo de valores possíveis depende da 
plataforma em que o código está sendo executado. 
int myNum = 1000; 
cout << myNum; 
float 
Tipo de dado numérico em ponto flutuante que armazena valores com uma precisão 
de 6 a 7 dígitos decimais. Ocupa 4 bytes na memória e seu intervalo de valores 
possíveis é de cerca de 1,5 x 10^-45 a 3,4 x 10^38. 
float myNum = 5.75; 
cout << myNum; 
double 
É semelhante ao tipo float, mas oferece uma precisão maior, podendo armazenar 
números reais com uma precisão de cerca de 15 dígitos decimais. Ele usa o dobro 
de espaço de memória que o tipo float. 
double myNum = 19.99; 
cout << myNum; 
 
Tipo de Dados Booleano 
 
Os tipos de dados booleanos são usados para representar valores lógicos, ou seja, valores verdadeiros ou 
falsos. Eles são declarados com a palavra-chave bool e podem ser usados para armazenar apenas os valores 
true ou false. Quando um valor booleano é retornado, true é representado pelo valor 1 e false é 
representado pelo valor 0. 
 
Por exemplo, se você declarar uma variável bool chamada isCodingFun e atribuir o valor true a ela, você pode 
imprimir o valor dessa variável no console usando cout << isCodingFun;. O valor 1 será impresso no console, 
que representa o valor verdadeiro. 
 
Da mesma forma, se você declarar uma variável bool chamada isFishTasty e atribuir o valor false a ela, você 
pode imprimir o valor dessa variável no console usando cout << isFishTasty;. O valor 0 será impresso no 
console, que representa o valor falso. 
 
bool isCodingFun = true; 
bool isFishTasty = false; 
cout << isCodingFun; // Outputs 1 (true) 
cout << isFishTasty; // Outputs 0 (false) 
 
Tipo de Dados Caractere 
 
O tipo de dados char é usado para armazenar um único caractere, que pode ser uma letra, número ou 
símbolo. O caractere deve ser cercado por aspas simples, como 'A' ou 'c': 
 
Exemplo: 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
30
180
 
 
 
char myChar = 'A'; 
cout << myChar; // Output: A 
 
Além disso, a tabela ASCII pode ser usada para exibir caracteres específicos por meio de seus valores 
numéricos correspondentes. Exemplo: 
 
char myChar = 65; 
cout << myChar; // Output: A 
 
Note que os valores numéricos correspondem aos caracteres em ordem crescente na tabela ASCII. Além 
disso, os caracteres especiais, como a nova linha e o tabulador, também têm valores numéricos 
correspondentes na tabela ASCII e podem ser armazenados como um tipo de dados char. 
 
Tipos de dados de String 
 
O tipo de dados de string é usado para armazenar uma sequência de caracteres (texto). Este não é um tipo 
integrado, mas se comporta como um em seu uso mais básico. Os valores de string devem ser cercados por 
aspas duplas: 
 
string saudacao = "Olá"; 
cout << saudacao; 
 
Para usar strings, você deve incluir um arquivo de cabeçalho adicional no código-fonte, a biblioteca <string>: 
 
// Inclua a biblioteca de string 
#include <string> 
 
// Crie uma variável de string 
string saudacao = "Olá"; 
 
// Saída do valor da string 
cout << saudacao; 
 
Operadores 
 
Em C++, operadores são usados para realizar operações em variáveis e valores. Existem diversos tipos de 
operadores em C++, incluindo aritméticos, de atribuição, de comparação, lógicos e de bit a bit. Eles permitem 
realizar cálculos matemáticos, atribuir valores a variáveis, comparar valores, realizar operações lógicas e 
trabalhar com dados em nível de bit. No exemplo abaixo, usamos o operador + para adicionar dois valores: 
 
int x = 100 + 50; 
 
Embora o operador + seja frequentemente usado para adicionar dois valores, como no exemplo acima, ele 
também pode ser usado para adicionar uma variável e um valor ou uma variável e outra variável: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
31
180
 
 
 
int sum1 = 100 + 50; // 150 (100 + 50) 
int sum2 = sum1 + 250; // 400 (150 + 250) 
int sum3 = sum2 + sum2; // 800 (400 + 400) 
 
C++ divide os operadores nos seguintes grupos: 
 
• Operadores aritméticos 
• Operadores de atribuição 
• Operadores de comparação 
• Operadores lógicos 
• Operadores bit a bit 
 
Operador Nome Descrição Exemplo 
+ Addition Soma dois valores x + y 
- Subtraction Subtrai um valor de outro x - y 
* Multiplication Multiplica dois valores x * y 
/ Division Dividir um valor por outro x / y 
% Modulus Retorna o restante x % y 
++ Increment Aumenta o valor de uma variável em 1 ++x 
-- Decrement Diminui o valor de uma variável em 1 --x 
 
Os operadores aritméticos são usados para realizar operações matemáticas comuns. São operadores 
utilizados para atribuir valores a variáveis. No exemplo abaixo, utilizamos o operador de atribuição (=) para 
atribuir o valor 10 a uma variável chamada x: 
 
int x; 
x = 10; 
 
Além disso, existem outros tipos de operadores de atribuição combinados com outros operadores 
aritméticos, como +=, -=, *= e /=, que realizam a operação aritmética e atribuem o resultado à variável. Por 
exemplo: 
 
int x = 5; 
x += 3; // o valor de x agora é 8 
x -= 2; // o valor de x agora é 6 
x *= 2; // o valor de x agora é 12 
x /= 3; // o valor de x agora é 4 
 
Operadores de Atribuição 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
32
180
 
 
 
Os assignment operators ou operadores de atribuição são operadores utilizados para atribuir valores a 
variáveis de forma simplificada. Eles combinam um operador aritmético com o operador de atribuição "=" 
para realizar uma operação e atribuir o resultado a uma variável. Por exemplo, o operador "+=" adiciona o 
valor do operando à direita à variável do operando à esquerda e atribui o resultado à variável à esquerda. A 
tabela lista todos os operadores de atribuição em C++ e seu equivalente usando o operador de atribuição 
"=" para ajudar a entender seu funcionamento. 
 
Exemplo Operador Atribuição Igual a 
= x = 5 x = 5 
+= x += 3 x = x + 3 
-= x -= 3 x = x - 3 
*= x *= 3 x = x * 3 
/= x /= 3 x = x / 3 
%= x %= 3 x = x % 3 
&= x &= 3 x = x & 3 
|= x |= 3 x = x | 3 
^= x ^= 3 x = x ^ 3 
>>= x >>= 3 x = x >> 3 
<<= x <<= 3 x = x << 3 
 
Se não conseguiu entender, vamos aprofundar. (Caso tenha entendido, pode pular!) 
 
= é o operador de atribuição que é usado para atribuir um valor a uma variável. 
 
+= é o operador de atribuição de adição que é usado para adicionar um valor a uma variável. 
 
-= é o operador de atribuição de subtração que é usado para subtrair um valor de uma variável. 
 
*= é o operador de atribuição de multiplicação que é usado para multiplicar um valor com uma variável./= é o operador de atribuição de divisão que é usado para dividir uma variável por um valor. 
 
%= é o operador de atribuição de módulo que é usado para atribuir o valor do resto de uma divisão de uma 
variável por outro valor. 
 
&= é o operador de atribuição bitwise AND que é usado para atribuir o resultado de uma operação AND bit 
a bit entre duas variáveis. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
33
180
 
 
 
|= é o operador de atribuição bitwise OR que é usado para atribuir o resultado de uma operação OR bit a bit 
entre duas variáveis. 
 
^= é o operador de atribuição bitwise XOR que é usado para atribuir o resultado de uma operação XOR bit a 
bit entre duas variáveis. 
 
>>= é o operador de atribuição bitwise de deslocamento à direita que é usado para deslocar à direita o valor 
de uma variável por um número específico de bits. 
 
<<= é o operador de atribuição bitwise de deslocamento à esquerda que é usado para deslocar à esquerda 
o valor de uma variável por um número específico de bits. 
 
Operadores de Comparação 
 
Operadores de Comparação são usados para comparar dois valores (ou variáveis) em C++. Esses operadores 
são importantes em programação, pois nos ajudam a encontrar respostas e tomar decisões em nossos 
códigos. 
 
Os operadores de comparação retornam um valor booleano, que é representado por 1 (verdadeiro) ou 0 
(falso). Esses valores são conhecidos como valores booleanos, e você aprenderá mais sobre eles no capítulo 
de Booleans e If..Else. 
 
No exemplo a seguir, usamos o operador de maior que (>) para descobrir se 5 é maior que 3: 
 
int x = 5; 
int y = 3; 
cout << (x > y); // Output: 1 (verdadeiro) 
 
Além do operador de maior que (>), existem outros operadores de comparação em C++, tais como: 
 
• Menor que (<) 
• Maior ou igual a (>=) 
• Menor ou igual a (<=) 
• Igual a (==) 
• Diferente de (!=) 
 
Você pode usar esses operadores em expressões condicionais para controlar o fluxo do seu programa. Por 
exemplo: 
 
 
int x = 5; 
int y = 3; 
if (x > y) { 
 cout << "x é maior que y" << endl; 
} else { 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
34
180
 
 
 
 cout << "x é menor ou igual a y" << endl; 
} 
 
Este código irá imprimir "x é maior que y", já que a expressão x > y é verdadeira. 
 
Operador 
Comparação 
Nome Exemplo 
== Igual a x == y 
!= Não igual x != y 
> Maior que x > y 
< Menor que x < y 
>= Maior ou igual a x >= y 
<= Menor ou igual a x <= y 
 
Operadores Lógicos 
 
Assim como os operadores de comparação, você também pode testar valores verdadeiros (1) ou falsos (0) 
com operadores lógicos. Os operadores lógicos são usados para determinar a lógica entre variáveis ou 
valores: 
 
Logical Operators (Operadores Lógicos) são usados em programação para testar se duas ou mais condições 
são verdadeiras ou falsas. Existem três tipos de operadores lógicos em C++: 
 
• AND lógico (&&): Retorna verdadeiro se todas as condições testadas forem verdadeiras. 
• OR lógico (||): Retorna verdadeiro se pelo menos uma das condições testadas for verdadeira. 
• NOT lógico (!): Inverte o resultado da condição. Se a condição é verdadeira, retorna falso e vice-versa. 
 
Esses operadores são muito úteis em estruturas de controle de fluxo, como estruturas if-else, loops while e 
do-while que veremos ainda nessa aula! 
 
Operador Nome2 Descrição Exemplo 
&& Lógico e 
Retorna verdadeiro se 
ambas as declarações 
forem verdadeiras 
x < 5 && x < 10 
|| Lógico ou 
Retorna verdadeiro se 
uma das declarações for 
verdadeira 
x < 5 || x < 4 
 
2 Pode-se usar apenas e, ou e não – desconsiderando a palavra ‘Lógico’. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
35
180
 
 
 
! Lógico não 
Inverte o resultado, 
retorna falso se o 
resultado for verdadeiro 
!(x < 5 && x < 10) 
 
Strings 
 
Strings são tipos de dados que permitem armazenar e manipular sequências de caracteres, ou seja, textos. 
Em C++, a classe "string" é usada para representar strings, ou seja, sequências de caracteres, e é uma parte 
da biblioteca padrão da linguagem. 
 
Para declarar uma variável string em C++, basta usar o tipo "string" e atribuir a ela uma sequência de 
caracteres delimitada por aspas duplas. 
 
Por exemplo: 
 
#include <string> 
 
using namespace std; 
 
string nome = "João"; 
 
Note que é necessário incluir a biblioteca <string> no seu código para usar strings em C++. As strings também 
possuem diversas funções e operadores que podem ser usados para manipular e comparar as sequências de 
caracteres armazenadas nelas. 
 
Concatenação de String 
 
Em C++, a concatenação de strings é a operação de adicionar duas ou mais strings juntas para formar uma 
nova string. Isso é feito usando o operador de adição (+) ou o método append(). 
 
O operador de adição (+) é usado para adicionar duas strings e criar uma nova string concatenada. Por 
exemplo, se tivermos duas strings str1 e str2, podemos usar o operador de adição (+) para juntá-las em uma 
nova string str3 da seguinte maneira: str3 = str1 + str2;. É importante lembrar que ao usar o operador de 
adição com strings, devemos garantir que cada string esteja envolvida em aspas duplas. 
 
string firstName = "John "; 
string lastName = "Doe"; 
string fullName = firstName + lastName; 
cout << fullName; 
 
No exemplo acima, adicionamos um espaço após firstName para criar um espaço entre John e Doe na saída. 
No entanto, você também pode adicionar um espaço com aspas ( " "ou ' '): 
 
string firstName = "John"; 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
36
180
 
 
 
string lastName = "Doe"; 
string fullName = firstName + " " + lastName; 
cout << fullName; 
 
Em C++, o append é uma função membro da classe std::string que adiciona uma string ao final de outra. É 
equivalente ao operador de concatenação (+), mas em vez de criar um novo objeto de string, ele modifica o 
objeto existente. A função retorna uma referência ao objeto de string modificado. 
 
A sintaxe básica para usar append é a seguinte: 
std::string str1 = "Hello, "; 
std::string str2 = "world!"; 
str1.append(str2); // adiciona str2 ao final de str1 
 
Após a execução do código acima, str1 conterá a string "Hello, world!". Observe que a função append 
modifica o objeto de string str1 em vez de criar um novo objeto. Também é possível adicionar substrings 
usando a função append com índices de início e fim: 
 
std::string str1 = "Hello, "; 
std::string str2 = "world!"; 
str1.append(str2, 0, 3); // adiciona os primeiros três caracteres de str2 ao 
final de str1 
 
Após a execução do código acima, str1 conterá a string "Hello, wor". Nesse exemplo, a função append 
adiciona os primeiros três caracteres da string str2 ao final da string str1, começando do índice 0 (ou seja, o 
primeiro caractere) e adicionando três caracteres no total. 
 
Portanto, o método append() adiciona uma string a outra string existente. Em vez de criar uma nova string 
como o operador de adição, o append() adiciona uma string a outra string existente. 
 
Outro exemplo, se tivermos uma string str1 e uma string str2, podemos usar o método append() para 
adicionar str2 ao final de str1 da seguintemaneira: str1.append(str2);. O método append() pode ser usado 
para adicionar várias strings à string existente. 
 
Números e Strings C++ 
 
Ao tentar adicionar um número a uma string em C++, ocorre um erro porque esses tipos de dados são 
diferentes e o operador + é sobrecarregado para diferentes finalidades, dependendo dos tipos de operandos 
que recebe. Para adicionar um número a uma string, é necessário converter o número em uma string 
primeiro, usando uma função de conversão, como to_string() ou stringstream. 
 
int x = 10; 
string y = "The value of x is: " + to_string(x); 
cout << y; // Outputs: The value of x is: 10 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
37
180
 
 
 
Nesse exemplo, o valor da variável x é convertido em uma string usando a função to_string() e, em seguida, 
concatenado com a string "The value of x is: " usando o operador +. O resultado final é uma string que contém 
a mensagem "The value of x is: 10". 
 
Explicando melhor: a função to_string() é uma função em C++ que converte um número em uma string. Ela 
faz parte da biblioteca padrão e pode ser útil em muitas situações, especialmente quando se deseja mesclar 
valores numéricos e strings. 
 
Comprimento da String 
 
Em C++, para obter o comprimento de uma string, você pode usar a função length() ou size(). Ambas as 
funções retornam o número de caracteres em uma string. 
 
Por exemplo, suponha que você tenha a string "Olá mundo!" e queira saber quantos caracteres ela contém: 
 
#include <iostream> 
#include <string> 
 
using namespace std; 
 
int main() { 
 string texto = "Olá mundo!"; 
 int comprimento = texto.length(); 
 int tamanho = texto.size(); 
 
 cout << "Comprimento: " << comprimento << endl; 
 cout << "Tamanho: " << tamanho << endl; 
 
 return 0; 
} 
 
O programa acima usa tanto a função length() quanto size() para obter o comprimento da string "Olá 
mundo!". O resultado será: 
 
Comprimento: 10 
Tamanho: 10 
 
Observe que, neste caso, ambas as funções retornaram o mesmo valor. Isso ocorre porque length() e size() 
são equivalentes em C++. 
 
Acessar Strings 
 
Em C++, você pode acessar os caracteres de uma string se referindo ao seu número de índice dentro de 
colchetes []. Por exemplo, suponha que você tenha a string "Olá mundo!" e queira imprimir o terceiro 
caractere (índice 2): 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
38
180
 
 
 
#include <iostream> 
#include <string> 
 
using namespace std; 
 
int main() { 
 string texto = "Olá mundo!"; 
 
 cout << texto[2] << endl; 
 
 return 0; 
} 
 
O programa acima acessa o terceiro caractere da string "Olá mundo!" (índice 2) usando o operador de 
colchetes [] e o imprime na tela. O resultado será: 
 
á 
 
Observe que o índice começa em 0, ou seja, o primeiro caractere é o índice 0, o segundo é o índice 1, e assim 
por diante. Você também pode acessar vários caracteres de uma string usando um loop for, como mostrado 
no exemplo a seguir: 
 
#include <iostream> 
#include <string> 
 
using namespace std; 
 
int main() { 
 string texto = "Olá mundo!"; 
 
 for (int i = 0; i < texto.length(); i++) { 
 cout << texto[i] << endl; 
 } 
 
 return 0; 
} 
 
Este programa imprime cada caractere da string "Olá mundo!" em uma linha separada. Ele usa um loop for 
para iterar através da string e o operador de colchetes [] para acessar cada caractere individual. O resultado 
será: 
 
O 
l 
á 
 
m 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
39
180
 
 
 
u 
n 
d 
o 
! 
 
Matemática C++ 
 
Em C++, existem várias funções matemáticas disponíveis para realizar cálculos em números. Algumas dessas 
funções são: 
 
• max(x,y): retorna o valor máximo entre x e y. 
• min(x,y): retorna o valor mínimo entre x e y. 
• sqrt(x): retorna a raiz quadrada de x. 
• round(x): arredonda o número x para o inteiro mais próximo. 
• log(x): retorna o logaritmo natural de x. 
 
Para usar essas funções em um programa C++, é necessário incluir o cabeçalho <cmath>. Por exemplo, 
suponha que você queira encontrar a raiz quadrada de um número e arredondá-lo para o inteiro mais 
próximo: 
 
#include <iostream> 
#include <cmath> 
 
using namespace std; 
 
int main() { 
 double num = 16.7; 
 int resultado = round(sqrt(num)); 
 
 cout << "A raiz quadrada de " << num << " é " << sqrt(num) << endl; 
 cout << "Arredondado para o inteiro mais próximo: " << resultado << endl; 
 
 return 0; 
} 
 
O programa acima usa as funções sqrt() e round() para encontrar a raiz quadrada de um número e arredondá-
lo para o inteiro mais próximo. O resultado será: 
 
A raiz quadrada de 16.7 é 4.08248 
Arredondado para o inteiro mais próximo: 4 
 
Observe que, neste exemplo, o resultado da função sqrt() foi arredondado usando a função round() antes de 
ser impresso na tela. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
40
180
 
 
 
Outras funções matemáticas 
 
Uma lista de outras funções matemáticas populares (da biblioteca <cmath>) pode ser encontrada na tabela 
abaixo: 
 
Função Descrição 
abs(x) Retorna o valor absoluto de x 
acos(x) Retorna o arco cosseno de x 
asin(x) Retorna o arco-seno de x 
atan(x) Retorna o arco tangente de x 
cbrt(x) Retorna a raiz cúbica de x 
ceil(x) Retorna o valor de x arredondado para o número inteiro mais próximo 
cos(x) Retorna o cosseno de x 
cosh(x) Retorna o cosseno hiperbólico de x 
exp(x) Retorna o valor da exponencial de um número x. 
expm1(x) Retorna ex -1, onde "e" é a constante de Euler 
fabs(x) Retorna o valor absoluto de um x flutuante 
fdim(x, y) Retorna a diferença positiva entre x e y 
floor(x) Retorna o valor de x arredondado para baixo para o inteiro mais próximo 
hypot(x, y) Retorna sqrt(x2 +y2) sem estouro ou estouro intermediário 
fma(x, y, z) Retorna x*y+z sem perder a precisão 
fmax(x, y) Retorna o valor mais alto de x e y flutuantes 
fmin(x, y) Retorna o valor mais baixo de x e y flutuantes 
fmod(x, y) Retorna o ponto flutuante restante de x/y 
pow(x, y) Retorna o valor de x elevado a y 
sin(x) Retorna o seno de x (x está em radianos) 
sinh(x) Retorna o seno hiperbólico de um valor duplo 
tan(x) Retorna a tangente de um ângulo 
tanh(x) Retorna a tangente hiperbólica de um valor duplo 
 
Se você conseguiu entender as funções listadas, pode ir para o próximo tópico, senão aqui darei mais 
algumas considerações. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
41
180
 
 
 
 
• abs(x): Retorna o valor absoluto de x. Ou seja, se x for um número negativo, o resultado será o seu 
valor positivo correspondente. Por exemplo, abs(-5) retorna 5. 
 
• acos(x): Retorna o arco-cosseno de x em radianos. O valor de x deve estar entre -1 e 1, caso contrário, 
o resultado será NaN (Not a Number). O resultado da função é um ângulo em radianos cujo cosseno 
é x. Por exemplo, acos(0.5) retorna o valor de pi/3 (cerca de 1.0472 radianos). 
 
• asin(x):Retorna o arco-seno de x em radianos. O valor de x deve estar entre -1 e 1, caso contrário, o 
resultado será NaN. O resultado da função é um ângulo em radianos cujo seno é x. Por exemplo, 
asin(0.5) retorna o valor de pi/6 (cerca de 0.5236 radianos). 
 
• atan(x): Retorna o arco-tangente de x em radianos. O resultado da função é um ângulo em radianos 
cuja tangente é x. Por exemplo, atan(1) retorna o valor de pi/4 (cerca de 0.7854 radianos). 
 
• cbrt(x): Retorna a raiz cúbica de x. Por exemplo, cbrt(8) retorna 2. 
 
• ceil(x): Retorna o menor número inteiro maior ou igual a x. Por exemplo, ceil(4.3) retorna 5. 
 
• cos(x): Retorna o cosseno de x em radianos. Por exemplo, cos(0) retorna 1. 
 
• cosh(x): Retorna o cosseno hiperbólico de x. Por exemplo, cosh(0) retorna 1. 
 
• exp(x): Retorna o valor de e^x, onde e é a constante de Euler (cerca de 2.71828). Por exemplo, exp(1) 
retorna o valor de e (cerca de 2.71828). Explico melhor no fim dessa sessão 
 
• expm1(x): Retorna o valor de e^x - 1, onde e é a constante de Euler. Essa função é útil quando se 
trabalha com números muito pequenos, onde a subtração de 1 pode ser calculada com maior 
precisão do que a própria exponencial. Por exemplo, expm1(1) retorna o valor de e - 1 (cerca de 
1.71828). 
 
• fabs(x): Retorna o valor absoluto de x, mas para valores de ponto flutuante. Ou seja, se x for um 
número negativo, o resultado será o seu valor positivo correspondente, mas sem mudar o tipo de 
dados. Por exemplo, fabs(-5.5) retorna 5.5. 
 
• fdim(x, y): Retorna a diferença entre x e y se x for maior que y, e retorna 0 caso contrário. Por 
exemplo, fdim(5, 3) retorna 2. 
 
• floor(x)retorna o maior número inteiro menor ou igual ax. Por exemplo, floor(3.7)retorna3, enquanto 
floor(-2.9)retorna-3`. 
 
• hypot(x, y): Retorna a hipotenusa de um triângulo retângulo com catetos x e y. Por exemplo, hypot(3, 
4) retorna 5. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
42
180
 
 
 
• fma(x, y, z): Retorna o produto de x e y somado a z. É útil para evitar a perda de precisão durante o 
cálculo de expressões algébricas. Por exemplo, fma(2, 3, 4) retorna 10. 
 
• fmax(x, y): Retorna o maior valor entre x e y. Por exemplo, fmax(5, 3) retorna 5. 
 
• fmin(x, y): Retorna o menor valor entre x e y. Por exemplo, fmin(5, 3) retorna 3. 
 
• fmod(x, y): Retorna o resto da divisão de x por y. Por exemplo, fmod(10, 3) retorna 1. 
 
• pow(x, y): Retorna x elevado à potência y. Por exemplo, pow(2, 3) retorna 8. 
 
• sin(x): Retorna o seno de um ângulo em radianos. Por exemplo, sin(0) retorna 0. 
 
• sinh(x): Retorna o seno hiperbólico de um número. Por exemplo, sinh(0) retorna 0. 
 
• tan(x): Retorna a tangente de um ângulo em radianos. Por exemplo, tan(0) retorna 0. 
 
• tanh(x): Retorna a tangente hiperbólica de um número. Por exemplo, tanh(0) retorna 0. 
 
Em C++, a função "exp(x)" retorna o valor da exponencial de um número x. A constante e (número de Euler) 
é elevada à potência de x, ou seja, exp(x) = e^x. Por exemplo, exp(2) retorna o valor de e elevado à potência 
de 2, que é aproximadamente 7,389. Para usar a função "exp(x)" em um programa C++, é necessário incluir 
o cabeçalho <cmath>. 
 
Já a função "expm1(x)" retorna o valor de ex - 1. Isso significa que o valor da exponencial é calculado primeiro 
e, em seguida, 1 é subtraído do resultado. Essa função é útil quando o valor de ex é muito próximo de 1, pois 
a subtração de 1 pode ser calculada com mais precisão do que a exponencial em si. Para usar a função 
"expm1(x)" em um programa C++, também é necessário incluir o cabeçalho <cmath>. 
 
C++ Booleans 
 
Muito frequentemente, na programação, você precisará de um tipo de dado que possa ter apenas um de 
dois valores, como: 
 
SIM / NÃO 
LIGADO / DESLIGADO 
VERDADEIRO / FALSO 
 
Para isso, o C++ possui um tipo de dados bool, que pode receber os valores verdadeiro (1) ou falso (0). Uma 
variável booleana é declarada com a palavra-chave bool e só pode receber os valores true ou false: 
 
bool estaChovendo = true; 
bool estaFrio = false; 
cout << estaChovendo; // Saída: 1 (true) 
cout << estaFrio; // Saída: 0 (false) 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
43
180
 
 
 
 
As variáveis booleanas são frequentemente usadas em estruturas de controle de fluxo, como os condicionais 
"if...else", onde a decisão de executar um bloco de código é baseada em uma condição booleana: 
 
bool estaChovendo = true; 
if (estaChovendo) { 
cout << "Pegue um guarda-chuva"; 
} else { 
cout << "Não se esqueça do seu óculos de sol"; 
} 
 
O código verifica se a variável estaChovendo é verdadeira (true) e, caso seja verdadeira, imprime "Pegue um 
guarda-chuva". Se a variável for falsa (false), o código imprime "Não se esqueça do seu óculos de sol". 
 
Boolean Expressions em C++ 
 
Boolean Expression (Expressão Booleana) é uma expressão que retorna um valor booleano, que pode ser 
verdadeiro (1) ou falso (0). Essa expressão é útil para construir lógica e encontrar respostas em um programa. 
 
Você pode usar operadores de comparação, como o operador maior que (>) ou igual a (>=), para verificar se 
uma expressão ou variável é verdadeira ou falsa. 
 
int x = 10; 
int y = 9; 
cout << (x > y); // retorna 1 (verdadeiro), porque 10 é maior do que 9 
cout << (10 > 9); // retorna 1 (verdadeiro), porque 10 é maior do que 9 
 
No exemplo abaixo, usamos o operador igual a (==) para avaliar uma expressão: 
 
int x = 10; 
cout << (x == 10); // retorna 1 (verdadeiro), porque o valor de x é igual a 10 
cout << (10 == 15); // retorna 0 (falso), porque 10 não é igual a 15 
 
Agora vejamos um exemplo na vida real: Vamos pensar em um exemplo da vida real onde precisamos 
descobrir se uma pessoa é maior de idade e pode votar. No exemplo, usamos o operador maior ou igual a 
(>=) para descobrir se a idade (25) é maior ou igual ao limite de idade para votar, que é de 18 anos: 
 
int minhaIdade = 25; 
int idadeParaVotar = 18; 
 
cout << (minhaIdade >= idadeParaVotar); /* retorna 1 (verdadeiro), o que 
significa que pessoas com 25 anos podem votar! */ 
 
Uma abordagem ainda melhor seria envolver o código acima em um if...else statement, para que possamos 
executar ações diferentes dependendo do resultado. Veremos isso a seguir! 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
44
180
 
 
 
Estruturas de Controle de Fluxo 
 
Em programação, as estruturas de controle de fluxo são usadas para alterar o fluxo de execução de um 
programa, permitindo que o código seja executado de maneira condicional ou repetitiva. Em C++, existem 
três tipos principais de estruturas de controle de fluxo: as estruturas de seleção (if/else), as estruturas de 
repetição (for, while, do-while) e a estrutura de controle de interrupção (break/continue). 
 
As estruturas de seleção permitem que o programa execute um bloco de código se uma condição for 
verdadeira e outro bloco de código se a condição for falsa. 
 
If...Else 
 
O If...Else é uma estrutura de controle de fluxo em C++ que permite ao programador executar um bloco de 
código somente se uma condição for verdadeira, e outro bloco de código caso a condição seja falsa. 
 
if (condicao) { 
 // código a ser executado se a condição for verdadeira 
} else { 
 // código a ser executado se a condição for falsa 
} 
 
Por exemplo, suponha que queremos escrever um programaque verifica se um número é par ou ímpar: 
 
#include <iostream> 
using namespace std; 
 
int main() { 
 int numero; 
 cout << "Digite um número: "; 
 cin >> numero; 
 
 if (numero % 2 == 0) { 
 cout << "O número é par" << endl; 
 } else { 
 cout << "O número é ímpar" << endl; 
 } 
 
 return 0; 
} 
Nesse programa, o usuário é solicitado a digitar um número e a seguir é verificado se ele é par ou ímpar. Se 
o número for divisível por 2, ou seja, se o resto da divisão por 2 for igual a 0, então a condição dentro do if é 
verdadeira e o programa exibe a mensagem "O número é par". Caso contrário, a condição dentro do else é 
verdadeira e o programa exibe a mensagem "O número é ímpar". Também é possível usar múltiplas 
condições usando o else if: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
45
180
 
 
 
#include <iostream> 
using namespace std; 
 
int main() { 
 int idade; 
 cout << "Digite sua idade: "; 
 cin >> idade; 
 
 if (idade < 18) { 
 cout << "Você é menor de idade" << endl; 
 } else if (idade < 60) { 
 cout << "Você é adulto" << endl; 
 } else { 
 cout << "Você é idoso" << endl; 
 } 
 
 return 0; 
} 
 
Nesse exemplo, o programa verifica a idade do usuário e exibe uma mensagem diferente de acordo com a 
faixa etária. Se a idade for menor que 18, a mensagem "Você é menor de idade" é exibida. Se a idade for 
maior ou igual a 18 e menor que 60, a mensagem "Você é adulto" é exibida. Caso contrário, a mensagem 
"Você é idoso" é exibida. 
 
A declaração "else" é usada em programação para especificar um bloco de código a ser executado se a 
condição for falsa. Por exemplo, se quisermos verificar se uma pessoa é maior de idade, podemos escrever 
o seguinte código: 
 
int idade = 20; 
if (idade >= 18) { 
 cout << "Esta pessoa é maior de idade."; 
} else { 
 cout << "Esta pessoa é menor de idade."; 
} 
 
Neste exemplo, se a idade for maior ou igual a 18, o programa imprimirá "Esta pessoa é maior de idade". 
Caso contrário, o programa imprimirá "Esta pessoa é menor de idade". Outro exemplo seria se quisermos 
verificar se um número é par ou ímpar: 
int numero = 5; 
if (numero % 2 == 0) { 
 cout << "Este número é par."; 
} else { 
 cout << "Este número é ímpar."; 
} 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
46
180
 
 
 
Neste exemplo, se o resto da divisão do número por 2 for igual a zero, o programa imprimirá "Este número 
é par". Caso contrário, o programa imprimirá "Este número é ímpar". 
 
Já, a declaração "else if" é usada em programação para especificar uma nova condição se a primeira condição 
for falsa. A sintaxe é a seguinte: 
 
if (condição1) { 
 // bloco de código a ser executado se a condição1 for verdadeira 
} else if (condição2) { 
 // bloco de código a ser executado se a condição1 for falsa e condição2 for 
verdadeira 
} else { 
 // bloco de código a ser executado se a condição1 e a condição2 forem falsas 
} 
 
Por exemplo, se quisermos imprimir uma mensagem de acordo com a hora do dia, podemos escrever o 
seguinte código: 
 
int hora = 14; 
if (hora < 10) { 
 cout << "Bom dia."; 
} else if (hora < 20) { 
 cout << "Boa tarde."; 
} else { 
 cout << "Boa noite."; 
} 
 
Neste exemplo, se a hora for menor que 10, o programa imprimirá "Bom dia". Se a hora estiver entre 10 e 
20, o programa imprimirá "Boa tarde". Caso contrário, o programa imprimirá "Boa noite". 
 
Outro exemplo seria se quisermos atribuir uma nota de acordo com a pontuação de um aluno em um teste: 
 
int pontuacao = 75; 
if (pontuacao >= 90) { 
 cout << "Nota A."; 
} else if (pontuacao >= 80) { 
 cout << "Nota B."; 
} else if (pontuacao >= 70) { 
 cout << "Nota C."; 
} else if (pontuacao >= 60) { 
 cout << "Nota D."; 
} else { 
 cout << "Nota F."; 
} 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
47
180
 
 
 
Neste exemplo, se a pontuação for maior ou igual a 90, o programa imprimirá "Nota A". Se a pontuação 
estiver entre 80 e 89, o programa imprimirá "Nota B". Se a pontuação estiver entre 70 e 79, o programa 
imprimirá "Nota C". Se a pontuação estiver entre 60 e 69, o programa imprimirá "Nota D". Caso contrário, o 
programa imprimirá "Nota F". 
 
O operador ternário (short-hand if else) em C++ é uma forma abreviada de escrever uma estrutura de seleção 
if/else em uma única linha de código. Ele consiste em três operandos: a condição, a expressão a ser 
executada se a condição for verdadeira e a expressão a ser executada se a condição for falsa. A sintaxe do 
operador ternário é a seguinte: 
 
variavel = (condição) ? expressãoVerdadeira : expressãoFalsa; 
 
Se a condição for verdadeira, a expressãoVerdadeira é executada, caso contrário a expressãoFalsa é 
executada. Por exemplo, para o seguinte código em if/else: 
 
int idade = 20; 
if (idade >= 18) { 
 cout << "Você é maior de idade"; 
} else { 
 cout << "Você é menor de idade"; 
} 
 
Podemos usar o operador ternário para escrever o mesmo código em uma única linha: 
 
int idade = 20; 
string resultado = (idade >= 18) ? "Você é maior de idade" : "Você é menor de 
idade"; 
cout << resultado; 
 
Isso torna o código mais conciso e fácil de ler. No entanto, é importante lembrar que o uso excessivo do 
operador ternário pode tornar o código difícil de entender e manter, especialmente para iniciantes. 
 
Switch 
 
A declaração Switch em C++ é usada para selecionar um entre vários blocos de código a serem executados. 
A sintaxe da declaração switch inclui uma expressão, que é avaliada uma vez, e vários casos, cada um dos 
quais corresponde a um valor diferente que a expressão pode ter. Quando a expressão é avaliada, o valor é 
comparado com os valores de cada caso. Se houver uma correspondência, o bloco de código associado a 
esse caso é executado. 
 
Por exemplo, se quisermos imprimir o nome do dia da semana em relação ao número do dia da semana, 
podemos usar a instrução switch: 
 
int dia = 4; 
switch (dia) { 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
48
180
 
 
 
 case 1: 
 cout << "Segunda-feira"; 
 break; 
 case 2: 
 cout << "Terça-feira"; 
 break; 
 case 3: 
 cout << "Quarta-feira"; 
 break; 
 case 4: 
 cout << "Quinta-feira"; 
 break; 
 case 5: 
 cout << "Sexta-feira"; 
 break; 
 case 6: 
 cout << "Sábado"; 
 break; 
 case 7: 
 cout << "Domingo"; 
 break; 
} 
// Saída: "Quinta-feira" (dia 4) 
 
A declaração switch é seguida pelos casos, cada um dos quais inclui um valor e um bloco de código a ser 
executado se a expressão for igual a esse valor. O bloco de código associado a cada caso é seguido pela 
palavra-chave break. Quando um caso é executado, o break interrompe a execução dos casos restantes na 
declaração switch. Se nenhum dos casos corresponder à expressão, a palavra-chave default especifica um 
bloco de código padrão a ser executado. 
 
While 
 
O loop While (enquanto) é uma estrutura de repetição em que um bloco de código é executado 
repetidamente enquanto uma condição especificada for verdadeira. A sintaxe em C++ para um loop While é 
a seguinte: 
 
while (condição) { 
 // bloco de código a ser executado 
} 
 
O bloco de código dentro doloop será executado repetidamente enquanto a condição especificada for 
verdadeira. Quando a condição se tornar falsa, o loop será encerrado e a execução continuará no próximo 
bloco de código após o loop. 
 
Aqui está um exemplo simples em C++ que usa um loop While para imprimir os números de 0 a 4: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
49
180
 
 
 
int i = 0; 
while (i < 5) { 
 cout << i << "\n"; 
 i++; 
} 
 
Neste exemplo, a variável i é inicializada como 0 e o loop continuará a ser executado enquanto i for menor 
que 5. Dentro do loop, o valor atual de i é impresso na tela e, em seguida, i é incrementado em 1 antes de 
verificar a condição novamente. Quando i atinge 5, a condição se torna falsa e o loop é encerrado. A saída 
deste programa seria: 
 
0 
1 
2 
3 
4 
 
Este é um exemplo simples, mas o loop While pode ser usado para executar qualquer bloco de código 
repetidamente enquanto uma condição for verdadeira. 
 
Do/While 
 
O laço do/While é uma variação do laço While. A principal diferença é que o código dentro do laço é 
executado pelo menos uma vez, independentemente da condição definida. Em seguida, a condição é 
verificada e o laço será executado novamente, se a condição for verdadeira. 
 
do { 
// código a ser executado 
} while (condição); 
 
#include <iostream> 
using namespace std; 
 
int main() { 
 int i = 0; 
 do { 
 cout << i << "\n"; 
 i++; 
 } 
 while (i < 5); 
 return 0; 
} 
 
Neste exemplo, o código dentro do laço será executado pelo menos uma vez, já que a condição é verificada 
após a primeira execução. Se a condição for verdadeira, o laço será executado novamente, e assim por 
diante, até que a condição se torne falsa. O resultado do exemplo será: 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
50
180
 
 
 
 
0 
1 
2 
3 
4 
 
Vejamos agora a diferença entre While e o do/While. O código apresentado abaixo é um exemplo de uso dos 
loops "while" e "do/while" em C++. Esses loops são usados para executar uma ação repetidamente enquanto 
uma condição especificada for verdadeira. 
 
O loop "while" é uma estrutura de controle de fluxo que executa um bloco de código enquanto uma 
determinada condição é verdadeira. A condição é verificada antes de executar o bloco de código. Se a 
condição for falsa, o bloco de código não será executado. 
 
O loop "do/while", por outro lado, executa o bloco de código pelo menos uma vez e, em seguida, verifica a 
condição para determinar se o bloco de código deve ser executado novamente. Se a condição for verdadeira, 
o bloco de código será executado novamente e o processo continuará até que a condição seja falsa. 
 
#include <iostream> 
 
int main() { 
 // Exemplo utilizando o loop while 
 int i = 1; 
 int soma_while = 0; 
 while (i <= 10) { 
 soma_while += i; 
 i++; 
 } 
 std::cout << "A soma utilizando o loop while é: " << soma_while << std::endl; 
 
 // Exemplo utilizando o loop do/while 
 int j = 1; 
 int soma_do_while = 0; 
 do { 
 soma_do_while += j; 
 j++; 
 } while (j <= 10); 
 std::cout << "A soma utilizando o loop do/while é: " << soma_do_while << 
std::endl; 
 
 return 0; 
} 
 
O resultado das somas utilizando os dois loops são iguais, que é 55, a soma dos números inteiros de 1 a 10. 
No entanto, a principal diferença entre os dois loops é que o loop while avalia a condição antes de executar 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
51
180
 
 
 
o bloco de código, o que significa que o bloco de código pode nunca ser executado se a condição for falsa 
desde o início. Por outro lado, o loop do/while executa o bloco de código pelo menos uma vez, antes de 
avaliar a condição. 
 
Se você já entendeu, pode passar para o próximo tópico, senão, vamos entender melhor! No exemplo, o 
programa solicita ao usuário para digitar um número inteiro positivo e, em seguida, usa os loops "while" e 
"do/while" para exibir os números de 1 a n na tela, onde n é o número digitado pelo usuário. 
 
No exemplo apresentado, a diferença entre os loops "while" e "do/while" é que, se o usuário digitar um 
número negativo, o loop "while" não será executado, pois a condição "num > 0" é falsa. Por outro lado, o 
loop "do/while" executará o bloco de código pelo menos uma vez, independentemente da condição, o que 
significa que a mensagem "Número inválido!" será exibida pelo menos uma vez. 
 
For 
 
O loop For é uma estrutura de controle que permite executar um bloco de código várias vezes, com base em 
uma condição específica. É um dos loops mais utilizados na programação, principalmente quando se sabe de 
antemão quantas vezes o loop precisa ser executado. 
 
O loop For possui uma sintaxe padrão, que é composta por três partes: inicialização, condição e atualização. 
Abaixo está a sintaxe completa do loop For em C++: 
 
for (inicialização; condição; atualização) { 
 // código a ser executado 
} 
 
• Inicialização: Define e/ou inicializa a variável do contador. Esta parte é executada apenas uma vez, 
no início do loop. 
• Condição: Define a condição que será verificada a cada iteração do loop. Se a condição for verdadeira, 
o loop continuará a ser executado; caso contrário, o loop será encerrado. 
• Atualização: Atualiza a variável do contador a cada iteração. Essa parte é executada no final de cada 
iteração do loop. 
 
Vejamos um exemplo: 
 
for (int i = 0; i < 5; i++) { 
 cout << i << endl; 
} 
 
Nesse exemplo, a variável do contador é i, que é inicializada com 0. A condição é i < 5, o que significa que o 
loop continuará a ser executado enquanto i for menor que 5. A atualização é i++, o que significa que i será 
incrementado em 1 a cada iteração do loop. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
52
180
 
 
 
O loop For é especialmente útil quando você sabe exatamente quantas vezes o loop precisa ser executado. 
Ele também é mais conciso do que o loop While ou o loop Do-While, pois você pode definir todas as três 
partes do loop na linha de cabeçalho. 
 
Break and Continue 
 
Em C++, o break e o continue são palavras-chave usadas em loops para controlar o fluxo de execução do 
código. 
 
O break é usado para interromper a execução de um loop imediatamente quando uma condição específica 
é atendida. Quando o break é encontrado dentro de um loop, a execução do loop é interrompida e o controle 
é transferido para a próxima instrução após o loop. 
 
Já o continue é usado para pular a execução de uma iteração do loop quando uma determinada condição é 
atendida. Quando o continue é encontrado dentro de um loop, a execução da iteração atual é interrompida 
e o loop continua com a próxima iteração. 
 
Vejamos um exemplo de como essas palavras-chave são usadas em loops em C++: 
 
// Exemplo usando break 
for (int i = 0; i < 10; i++) { 
 if (i == 5) { 
 break; 
 } 
 std::cout << i << std::endl; 
} 
// Output: 0 1 2 3 4 
 
// Exemplo usando continue 
for (int i = 0; i < 10; i++) { 
 if (i == 5) { 
 continue; 
 } 
 std::cout << i << std::endl; 
} 
// Output: 0 1 2 3 4 6 7 8 9 
 
No primeiro exemplo, quando i atinge o valor 5, a condição i == 5 é atendida e o break é executado, 
interrompendo o loop eimpedindo a execução de todas as iterações seguintes. 
 
Já no segundo exemplo, quando i atinge o valor 5, a condição i == 5 é atendida e o continue é executado, 
pulando a execução da iteração atual e continuando com a próxima iteração. 
 
Em resumo, o break é usado para interromper um loop imediatamente, enquanto o continue é usado para 
pular a execução de uma iteração do loop e continuar com a próxima. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
53
180
 
 
 
Array 
 
Em C++, um array é uma coleção de elementos do mesmo tipo de dados, armazenados em uma área contígua 
de memória. Cada elemento no array pode ser acessado por um índice, que começa em 0 e vai até o tamanho 
do array menos um. A declaração básica de um array em C++ é: 
 
tipo_de_dado nome_do_array[tamanho]; 
 
Por exemplo, um array de inteiros com 5 elementos pode ser declarado assim: 
 
int meu_array[5]; 
 
Cada elemento do array pode ser acessado e modificado usando o operador [] e o índice correspondente: 
 
meu_array[0] = 42; 
meu_array[1] = 17; 
meu_array[2] = 8; 
meu_array[3] = 33; 
meu_array[4] = 99; 
 
Os elementos do array também podem ser inicializados na declaração: 
 
int meu_array[] = {42, 17, 8, 33, 99}; 
 
Os elementos do array podem ser acessados usando loops, como o for loop. Por exemplo, o seguinte código 
imprime todos os elementos do array: 
 
for (int i = 0; i < 5; i++) { 
 cout << meu_array[i] << " "; 
} 
 
A saída seria: "42 17 8 33 99". Os arrays são muito úteis quando se deseja armazenar e manipular grandes 
quantidades de dados do mesmo tipo de dados. No entanto, é importante garantir que o índice usado para 
acessar o array esteja dentro dos limites válidos do array, para evitar erros de segmentação. 
 
Arrays e Loops 
 
Loop através de um array em C++ é uma tarefa muito comum e útil para processar todos os elementos de 
um array. Existem várias maneiras de percorrer um array em C++, incluindo loops for, while e do-while. 
 
Vamos ver alguns exemplos. Exemplo 1: Usando loop for 
 
Suponha que temos um array de inteiros e queremos imprimir todos os elementos do array. Podemos fazer 
isso usando um loop for da seguinte forma: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
54
180
 
 
 
#include <iostream> 
 
using namespace std; 
 
int main() { 
 int nums[] = {2, 4, 6, 8, 10}; 
 
 for(int i = 0; i < 5; i++) { 
 cout << nums[i] << " "; 
 } 
 
 return 0; 
} 
 
Neste exemplo, declaramos um array de inteiros chamado nums com 5 elementos. Usando um loop for, 
imprimimos cada elemento do array. 
 
Exemplo 2: Usando loop while. Podemos usar um loop while para percorrer um array em C++ da seguinte 
maneira: 
 
#include <iostream> 
 
using namespace std; 
 
int main() { 
 int nums[] = {2, 4, 6, 8, 10}; 
 int i = 0; 
 
 while(i < 5) { 
 cout << nums[i] << " "; 
 i++; 
 } 
 
 return 0; 
} 
 
Neste exemplo, inicializamos a variável i como 0 e usamos um loop while para imprimir cada elemento do 
array. Incrementamos a variável i a cada iteração do loop até que ela seja maior ou igual a 5. 
 
Exemplo 3: Usando loop do-while. Podemos usar um loop do-while para percorrer um array em C++ da 
seguinte maneira: 
 
#include <iostream> 
 
using namespace std; 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
55
180
 
 
 
int main() { 
 int nums[] = {2, 4, 6, 8, 10}; 
 int i = 0; 
 
 do { 
 cout << nums[i] << " "; 
 i++; 
 } while(i < 5); 
 
 return 0; 
} 
 
Neste exemplo, inicializamos a variável i como 0 e usamos um loop do-while para imprimir cada elemento 
do array. Incrementamos a variável i a cada iteração do loop até que ela seja maior ou igual a 5. 
 
Em resumo, percorrer um array em C++ é uma tarefa comum e útil. Usando loops for, while e do-while, 
podemos processar todos os elementos do array de maneira fácil e eficiente. 
 
Structures (struct) 
 
Em C++, uma struct é uma coleção de variáveis de diferentes tipos que são agrupadas sob um nome. Ela é 
uma estrutura de dados que permite armazenar e manipular dados relacionados. Uma struct pode ser 
definida da seguinte maneira: 
 
struct Pessoa { 
 string nome; 
 int idade; 
 float altura; 
}; 
 
Nesse exemplo, definimos uma estrutura chamada Pessoa que contém três variáveis: nome do tipo string, 
idade do tipo int e altura do tipo float. Uma vez definida a struct, podemos criar variáveis com base nela: 
 
Pessoa pessoa1 = {"João", 30, 1.75}; 
 
Agora pessoa1 é uma variável do tipo Pessoa que contém os valores "João" para o nome, 30 para a idade e 
1.75 para a altura. Podemos acessar as variáveis da struct usando o operador ponto .: 
 
cout << "Nome: " << pessoa1.nome << endl; 
cout << "Idade: " << pessoa1.idade << endl; 
cout << "Altura: " << pessoa1.altura << endl; 
 
Isso exibirá o conteúdo de cada variável da struct. As structs são frequentemente usadas em conjunto com 
loops para armazenar e manipular conjuntos de dados. Por exemplo, podemos criar um array de Pessoa: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
56
180
 
 
 
Pessoa pessoas[3] = { 
 {"João", 30, 1.75}, 
 {"Maria", 25, 1.60}, 
 {"Pedro", 35, 1.80} 
}; 
 
Podemos, então, percorrer esse array usando um loop for: 
 
for(int i=0; i<3; i++) { 
 cout << "Nome: " << pessoas[i].nome << endl; 
 cout << "Idade: " << pessoas[i].idade << endl; 
 cout << "Altura: " << pessoas[i].altura << endl; 
} 
 
Isso exibirá o conteúdo de cada variável da struct para cada elemento do array pessoas. 
 
 
 
 
 
 
 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
57
180
RESUMO 
 
C é uma linguagem de programação de alto nível, criada na década de 1970 por Dennis Ritchie. É uma 
linguagem estruturada, de tipagem estática e com suporte para apontadores. Ela é amplamente usada para 
desenvolvimento de sistemas operacionais, compiladores, dispositivos embarcados, aplicações de rede, 
jogos, entre outras aplicações. É uma linguagem de programação bastante eficiente, com recursos de baixo 
nível que permitem aos programadores otimizar a performance do código. Além disso, C é uma linguagem 
de programação portátil, o que significa que o código escrito em C pode ser compilado e executado em 
diferentes plataformas. Por ser uma linguagem de programação amplamente utilizada, há uma grande 
quantidade de bibliotecas e ferramentas disponíveis para facilitar o desenvolvimento de aplicações em C. 
 
O C++ é uma extensão da linguagem C, adicionando recursos como a programação orientada a objetos, 
sobrecarga de operadores, templates e exceções, tornando-o mais poderoso e flexível do que o C. Embora 
tenha se originado do C, o C++ não é totalmente compatível com ele. A evolução do C++ continuou, com a 
adição de novos recursos e aprimoramento dos existentes. O C é amplamente utilizado na programação de 
sistemas, enquanto o C++ é frequentemente usado na programação de aplicativos, jogos e outras aplicações 
complexas. O C requer compilação antes da execução, tem variáveis com tipos,operadores para cálculos, 
estruturas de controle para controlar o fluxo do programa, funções para dividir o código em partes menores 
e mais gerenciáveis, e bibliotecas para realizar tarefas específicas. 
 
Comparativo C C++ 
Paradigma Procedural Procedural, orientada a objetos 
Compilação Código fonte compilado em 
arquivo .c 
Código fonte compilado em arquivo .cpp 
Alocação de memória Uso de funções como malloc e 
calloc 
Uso de operadores como new e delete 
Herança Não suporta Suporta 
Polimorfismo Não suporta Suporta, com classes abstratas e virtuais 
Exceções Não suporta Suporta, com try e catch 
Sobrecarga de 
operadores 
Não suporta Suporta 
Biblioteca padrão Possui biblioteca padrão 
limitada, incluindo stdio.h e 
math.h 
Possui biblioteca padrão mais extensa, 
incluindo iostream, string e algorithm 
Utilização Amplamente utilizado na 
programação de sistemas, 
sistemas embarcados e outros 
projetos de baixo nível 
Amplamente utilizado na programação de 
aplicativos, jogos, softwares de alta 
performance e projetos que requerem 
programação orientada a objetos 
 
Vejamos os Tipos Básicos de Dados 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
58
180
 
Tipo 
Tamanho aproximado 
em bits 
Faixa Mínima 
char 8 -127 a 127 
unsigned char 8 0 a 255 
signed char 8 -127 a 127 
int 16 -32.767 a 32.767 
unsigned int 16 0 a 65.535 
signed int 16 O mesmo que int 
short int 16 O mesmo que int 
unsigned short int 16 0 a 65.535 
signed short int 16 O mesmo que short int 
long int 32 -2.147.483.647 a 2.147.483.647 
signed long int 32 O mesmo que long int. 
unsigned long int 32 0 a 4.294.967.295 
float 32 Seis dígitos de precisão 
double 64 Dez dígitos de precisão 
long double 80 Dez dígitos de precisão 
 
Modificar os Tipos Básicos em C e C++ envolve a criação de tipos personalizados que são baseados nos tipos 
existentes da linguagem. Isso pode ser feito usando estruturas (structs) e enums (enumerações), bem como 
a criação de novos tipos com typedef. 
 
Estruturas (structs) são usadas para agrupar variáveis de diferentes tipos em uma única unidade lógica. Elas 
são úteis para representar entidades complexas, como uma pessoa ou um objeto em um jogo. As structs em 
C++ também podem ter funções e métodos associados a elas, tornando-as parte integrante da programação 
orientada a objetos. 
 
Enums (enumerações) são usados para definir um conjunto de valores inteiros nomeados. Eles são úteis para 
representar um conjunto limitado de valores possíveis, como as cores de um semáforo ou os dias da semana. 
Em C++, as enumerações podem ter um tipo subjacente específico, bem como métodos e funções 
associados. 
 
O typedef é usado para criar novos tipos de dados que são baseados nos tipos existentes, permitindo que o 
programador crie nomes mais descritivos para esses tipos. Por exemplo, em vez de usar "unsigned int" para 
representar um número não negativo, pode-se criar um typedef "word" para isso. Isso torna o código mais 
legível e mais fácil de entender. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
59
180
A tabela abaixo resume as diferenças entre as estruturas, enums e typedef em C e C++: 
 
Comparação Estruturas (structs) Enums (enumerações) Typedef 
Finalidade Agrupar variáveis em 
uma unidade lógica 
Definir um conjunto 
limitado de valores 
nomeados 
Criar um novo nome 
para um tipo de dados 
existente 
Sintaxe struct nome { /* 
membros */ }; 
enum nome { /* 
membros */ }; 
typedef tipo 
novo_nome; 
Acesso a membros Usar o operador "." N/A N/A 
Métodos associados Não em C, sim em C++ Não em C, sim em C++ N/A 
Subtipo de int Não Sim Não 
 
Em resumo, modificar os tipos básicos em C e C++ permite que o programador crie tipos personalizados que 
atendam às necessidades específicas do programa. Isso pode tornar o código mais legível e mais fácil de 
entender, além de fornecer uma maneira de agrupar variáveis relacionadas e definir conjuntos limitados de 
valores nomeados. As estruturas, enums e typedef são ferramentas importantes para alcançar esses 
objetivos. 
 
As variáveis em programação são utilizadas para armazenar valores na memória e são identificadas por um 
nome único. Existem vários tipos de variáveis, cada uma com suas próprias características e escopos. 
 
Aqui estão algumas explicações sobre as variáveis em C e C++: 
 
Static: uma variável estática é uma variável que mantém seu valor entre chamadas de função. Ela é 
inicializada apenas uma vez na primeira chamada da função em que foi declarada e, em seguida, seu valor é 
mantido nas chamadas subsequentes da função. Variáveis estáticas são definidas com a palavra-chave 
"static". Elas têm escopo local por padrão, mas também podem ser definidas como globais. 
 
Global static: uma variável estática global é uma variável que mantém seu valor entre chamadas de função 
em todo o programa. Ela é inicializada apenas uma vez no início da execução do programa e, em seguida, 
seu valor é mantido em todo o programa. Variáveis estáticas globais são definidas no nível de arquivo com a 
palavra-chave "static". 
 
Register: uma variável de registro é uma variável que é armazenada em um registrador de CPU, em vez de 
na memória. Ela é usada para otimizar o desempenho do programa, pois o acesso a registradores é mais 
rápido do que o acesso à memória. No entanto, o compilador pode decidir não armazenar a variável em um 
registrador, caso não haja registradores disponíveis ou se a variável não for usada com frequência. Variáveis 
de registro são definidas com a palavra-chave "register". Elas têm escopo local por padrão. 
 
É importante lembrar que o uso excessivo de variáveis estáticas e globais pode tornar o programa mais difícil 
de ler e entender, já que o valor da variável pode ser alterado em diferentes partes do programa. Além disso, 
o uso excessivo de variáveis de registro pode levar a um aumento do tamanho do código, o que pode reduzir 
o desempenho do programa em alguns casos. Por isso, é importante usar essas variáveis com cuidado e 
apenas quando necessário. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
60
180
 
Em C++, é possível inicializar a maioria das variáveis com um valor no momento em que são declaradas, 
usando o sinal de igual e uma constante após o nome da variável. As variáveis globais e locais static são 
inicializadas apenas no início do programa, enquanto as variáveis locais são inicializadas cada vez que o bloco 
no qual estão declaradas é inserido. Variáveis locais e register que não são inicializadas têm valores 
desconhecidos antes da primeira atribuição, enquanto variáveis globais e locais static não inicializadas são 
inicializadas com zero. 
 
Constantes em C++ são valores que não podem ser alterados durante a execução do programa. Existem dois 
tipos de constantes: constantes literais e constantes simbólicas. As constantes literais são valores fixos, como 
números e caracteres. As constantes simbólicas são definidas pelo programador usando a diretiva #define 
ou a palavra-chave const. 
 
Identificadores em C++ são usados para dar nome a variáveis, funções, estruturas, classes, etc. Os 
identificadores podem conter letras, dígitos e o caractere underscore (_), mas devem começar com uma letra 
ou underscore. Eles também devem ser únicos dentro de um escopo. 
 
C++ possui diversos tipos de dados, como int, float, double, char, bool, entreoutros. Os tipos de dados 
definem o tamanho e o tipo de valor que uma variável pode armazenar. 
 
int myNum = 5; // Integer (whole number) 
float myFloatNum = 5.99; // Floating point number 
double myDoubleNum = 9.98; // Floating point number 
char myLetter = 'D'; // Character 
bool myBoolean = true; // Boolean 
string myText = "Hello"; // String 
 
Tipo de Dado Tamanho Descrição 
boolean 1 byte Armazena valores verdadeiro ou falso 
char 1 byte Armazena um único caractere/letra/número ou valores 
ASCII 
int 2 or 4 bytes Armazena números inteiros sem decimais 
float 4 bytes Armazena números fracionários com uma ou mais casas 
decimais. Suficiente para armazenar 6-7 dígitos decimais 
double 8 bytes Armazena números fracionários com uma ou mais casas 
decimais. Suficiente para armazenar 15 dígitos decimais. 
 
Operadores em C++ são símbolos que realizam operações em variáveis e valores. Existem diversos tipos de 
operadores em C++, como aritméticos (+, -, *, /), de atribuição (=), relacionais (==, !=, <, >, <=, >=), lógicos 
(&&, ||, !), entre outros. Cada tipo de operador tem uma função específica. 
 
 
Operador Nome Descrição Exemplo 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
61
180
+ Addition Soma dois valores x + y 
- Subtraction Subtrai um valor de outro x - y 
* Multiplication Multiplica dois valores x * y 
/ Division Dividir um valor por outro x / y 
% Modulus Retorna o restante x % y 
++ Increment Aumenta o valor de uma variável em 1 ++x 
-- Decrement Diminui o valor de uma variável em 1 --x 
 
 
Exemplo Operador Atribuição Igual a 
= x = 5 x = 5 
+= x += 3 x = x + 3 
-= x -= 3 x = x - 3 
*= x *= 3 x = x * 3 
/= x /= 3 x = x / 3 
%= x %= 3 x = x % 3 
&= x &= 3 x = x & 3 
|= x |= 3 x = x | 3 
^= x ^= 3 x = x ^ 3 
>>= x >>= 3 x = x >> 3 
<<= x <<= 3 x = x << 3 
 
 
 
Operador 
Comparação 
Nome Exemplo 
== Igual a x == y 
!= Não igual x != y 
> Maior que x > y 
< Menor que x < y 
>= Maior ou igual a x >= y 
<= Menor ou igual a x <= y 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
62
180
 
 
Operador 
Lógico 
Nome1 Descrição Exemplo 
&& Lógico e 
Retorna verdadeiro se 
ambas as declarações 
forem verdadeiras 
x < 5 && x < 10 
|| Lógico ou 
Retorna verdadeiro se 
uma das declarações for 
verdadeira 
x < 5 || x < 4 
! Lógico não 
Inverte o resultado, 
retorna falso se o 
resultado for verdadeiro 
!(x < 5 && x < 10) 
 
Em C++, strings são utilizadas para armazenar e manipular sequências de caracteres, ou seja, textos. É 
possível declarar variáveis string usando o tipo "string" e atribuindo a ela uma sequência de caracteres 
delimitada por aspas duplas. É possível concatenar strings utilizando o operador de adição (+) ou o método 
append(). 
 
Para adicionar um número a uma string, é necessário converter o número em uma string primeiro, usando 
uma função de conversão, como to_string() ou stringstream. Para obter o comprimento de uma string, é 
possível utilizar as funções length() ou size(). 
 
Matemática C++ 
 
Em C++, existem várias funções matemáticas disponíveis para realizar cálculos em números. Algumas dessas 
funções são: 
 
• max(x,y): retorna o valor máximo entre x e y. 
• min(x,y): retorna o valor mínimo entre x e y. 
• sqrt(x): retorna a raiz quadrada de x. 
• round(x): arredonda o número x para o inteiro mais próximo. 
• log(x): retorna o logaritmo natural de x. 
 
Estrutura de Controle de Fluxo 
 
A estrutura de controle de fluxo "if...else" é usada em programação para executar uma ação com base em 
uma condição booleana. Se a condição booleana especificada no "if" for verdadeira, o bloco de código dentro 
do "if" será executado. Caso contrário, o bloco de código dentro do "else" será executado. É possível usar 
várias cláusulas "else if" para testar várias condições antes do bloco de código "else". A estrutura "if...else" 
é útil para fazer escolhas em tempo de execução com base em certas condições. 
 
 
1 Pode-se usar apenas e, ou e não – desconsiderando a palavra ‘Lógico’. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
63
180
Switch é uma estrutura de controle de fluxo em C++ que permite executar diferentes blocos de código 
dependendo do valor de uma expressão. A expressão é comparada com valores constantes definidos em 
cada case e o bloco de código correspondente ao valor da expressão é executado. O switch é geralmente 
usado como uma alternativa mais clara e organizada a várias declarações if-else aninhadas. 
 
While e Do-While são estruturas de repetição em linguagens de programação que permitem executar um 
conjunto de instruções várias vezes, até que uma condição seja atendida. A principal diferença entre as duas 
estruturas é a ordem em que a condição é verificada. 
 
Na estrutura While, a condição é verificada antes de executar as instruções dentro do loop. Se a condição 
for verdadeira, as instruções são executadas; caso contrário, o loop é encerrado. Já na estrutura Do-While, 
as instruções são executadas pelo menos uma vez, antes de verificar a condição. Se a condição for 
verdadeira, o loop continua a ser executado; caso contrário, o loop é encerrado. 
 
A tabela comparativa abaixo resume as principais diferenças entre as duas estruturas: 
 
Comparação While Do-While 
Ordem de Execução Verifica a condição antes de 
executar as instruções 
Executa as instruções pelo 
menos uma vez antes de 
verificar a condição 
Pode executar nenhuma vez? Sim, se a condição for falsa no 
início. 
Não, pelo menos uma execução 
garantida. 
Adequado para casos em que O loop pode não ser executado, 
e a condição deve ser verificada 
primeiro. 
O loop deve ser executado pelo 
menos uma vez, 
independentemente da 
condição. 
 
Em resumo, a estrutura While é adequada para casos em que o loop pode não ser executado, e a condição 
deve ser verificada primeiro, enquanto a estrutura Do-While é adequada para casos em que o loop deve ser 
executado pelo menos uma vez, independentemente da condição. 
Estrutura Descrição 
if 
Executa um bloco de código somente se uma condição especificada for 
verdadeira. 
if-else 
Executa um bloco de código se uma condição especificada for verdadeira e 
outro bloco de código se a condição for falsa. 
if-else if-else 
Executa um bloco de código se a primeira condição especificada for 
verdadeira, se não, verifica outra condição e assim por diante. 
switch 
Executa um bloco de código dependendo do valor de uma variável ou 
expressão. 
while 
Executa um bloco de código enquanto uma condição especificada for 
verdadeira. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
64
180
do-while 
Executa um bloco de código pelo menos uma vez e, em seguida, continua a 
executá-lo enquanto uma condição especificada for verdadeira. 
for 
Executa um bloco de código um número específico de vezes, com base em 
uma inicialização, uma condição de teste e uma atualização de contador. 
break 
Sai de uma estrutura de loop. 
 
continue 
Pula para a próxima iteração de uma estrutura de loop. 
 
 
Array é uma estrutura de dados utilizada em programação para armazenar um conjunto de valores do 
mesmo tipo sob um único nomede variável. Cada valor armazenado em um array é identificado por um 
índice numérico que representa sua posição no array. Em C++, os arrays podem ser uni ou multidimensionais. 
 
• Declaração de arrays: Um array é declarado especificando seu tipo de dados, nome da variável e seu 
tamanho (quantidade de elementos). Exemplo: int numeros[10]; cria um array de 10 elementos do 
tipo inteiro chamado "numeros". 
 
• Acesso aos elementos do array: Para acessar um elemento específico do array, você precisa 
especificar o índice correspondente entre colchetes após o nome do array. Exemplo: numeros[3] 
acessa o quarto elemento do array "numeros". 
 
• Inicialização de arrays: Em C++, você pode inicializar um array durante a declaração usando uma lista 
de valores entre chaves. Exemplo: int numeros[] = {1, 2, 3, 4, 5}; cria um array de tamanho 5 chamado 
"numeros" com os valores especificados. 
 
• Iteração sobre arrays: Para percorrer todos os elementos de um array, você pode usar um loop for 
com um contador que varia de 0 até o tamanho do array - 1. Exemplo: 
 
int numeros[5] = {1, 2, 3, 4, 5}; 
for (int i = 0; i < 5; i++) { 
 std::cout << numeros[i] << std::endl; 
} 
 
• Arrays multidimensionais: Em C++, você pode criar arrays com mais de uma dimensão. Por exemplo, 
uma matriz de tamanho 3x3 pode ser declarada como int matriz[3][3]; e seus elementos podem ser 
acessados usando dois índices. Exemplo: matriz[1][2] acessa o elemento da segunda linha e terceira 
coluna da matriz. 
 
• Ponteiros e arrays: Em C++, um array é essencialmente um ponteiro para seu primeiro elemento na 
memória. Você pode usar aritmética de ponteiros para acessar os outros elementos do array. 
Exemplo: *(numeros + 3) é equivalente a numeros[3]. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
65
180
==30e709==
• Tamanho do array: Em C++, o tamanho de um array é fixo durante a compilação e pode ser obtido 
usando a função sizeof. Exemplo: sizeof(numeros) retorna o número de bytes ocupados pelo array 
"numeros". 
 
Vamos ver agora alguns algoritmos mais cobrados em provas. 
 
• Bubble Sort: É um algoritmo simples de ordenação que compara cada par de elementos adjacentes 
e troca-os de posição, se necessário. Esse processo é repetido várias vezes até que a lista esteja 
ordenada. É fácil de implementar, mas não é muito eficiente em termos de tempo de execução. 
 
• Insertion Sort: É um algoritmo de ordenação que percorre a lista de elementos e, para cada elemento, 
insere-o na posição correta na lista ordenada anteriormente. É mais eficiente que o Bubble Sort em 
termos de tempo de execução, mas ainda não é o mais rápido. 
 
• Selection Sort: É um algoritmo de ordenação que percorre a lista de elementos e, para cada elemento, 
encontra o menor elemento restante na lista e o troca com o elemento atual. É fácil de entender, 
mas não é tão eficiente em termos de tempo de execução quanto outros algoritmos. 
 
• Quick Sort: É um algoritmo de ordenação eficiente e amplamente utilizado. Ele escolhe um elemento 
como pivô e organiza os elementos ao seu redor em duas partições, uma com elementos menores 
que o pivô e outra com elementos maiores. O processo é repetido recursivamente até que toda a 
lista esteja ordenada. 
 
• Merge Sort: É um algoritmo de ordenação eficiente e divide a lista em duas metades iguais, ordena 
cada metade e, em seguida, mescla as duas metades em uma única lista ordenada. É um algoritmo 
"dividir e conquistar" e é bastante eficiente em termos de tempo de execução. 
 
• Heap Sort: É um algoritmo de ordenação que usa uma estrutura de dados conhecida como heap para 
organizar os elementos. Ele cria um heap a partir da lista não ordenada e extrai o elemento máximo 
repetidamente para construir a lista ordenada. É eficiente em termos de tempo de execução e é 
frequentemente usado em aplicações de grande escala. 
 
O selection sort é um algoritmo de ordenação que funciona da seguinte maneira: 
 
1. Percorre todo o vetor a ser ordenado, buscando o menor elemento. 
2. Troca esse menor elemento com o primeiro elemento do vetor. 
3. Percorre o restante do vetor, a partir do segundo elemento, buscando o menor elemento. 
4. Troca esse menor elemento com o segundo elemento do vetor. 
5. Repete os passos 3 e 4 para cada posição do vetor, até que todos os elementos estejam ordenados. 
6. O algoritmo é chamado de "selection sort" (ordenação por seleção) porque a cada passo, ele 
seleciona o menor elemento restante no vetor e o coloca na posição correspondente. 
 
O selection sort é um algoritmo simples e fácil de entender, mas possui uma complexidade de tempo de 
execução de O(n^2), o que significa que ele pode ser bastante ineficiente para vetores grandes. 
 
Segue um exemplo de implementação do selection sort em C++: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
66
180
void selection_sort(int arr[], int n) { 
 for (int i = 0; i < n-1; i++) { 
 int min_idx = i; 
 for (int j = i+1; j < n; j++) { 
 if (arr[j] < arr[min_idx]) { 
 min_idx = j; 
 } 
 } 
 if (min_idx != i) { 
 swap(arr[i], arr[min_idx]); 
 } 
 } 
} 
 
Nessa implementação, a função selection_sort recebe um vetor arr de tamanho n como parâmetro e o 
ordena usando o selection sort. A função swap é usada para trocar os elementos de posição no vetor. O 
algoritmo percorre o vetor arr duas vezes: uma para encontrar o menor elemento e outra para trocá-lo de 
posição com o elemento atual. Isso é feito para cada posição do vetor, resultando em uma ordenação 
completa do vetor. 
 
Selection sort: 
 
1. Percorre todo o vetor a ser ordenado, buscando o menor elemento. 
2. Troca esse menor elemento com o primeiro elemento do vetor. 
3. Percorre o restante do vetor, a partir do segundo elemento, buscando o menor elemento. 
4. Troca esse menor elemento com o segundo elemento do vetor. 
5. Repete os passos 3 e 4 para cada posição do vetor, até que todos os elementos estejam ordenados. 
 
O algoritmo é chamado de "selection sort" (ordenação por seleção) porque a cada passo, ele seleciona o 
menor elemento restante no vetor e o coloca na posição correspondente. 
 
Bubble sort: 
 
1. Percorre todo o vetor, comparando pares de elementos adjacentes. 
2. Se um par estiver fora de ordem, troca os elementos de posição. 
3. Repete os passos 1 e 2 para cada par de elementos no vetor, até que nenhum par esteja mais fora de 
ordem. 
 
O algoritmo é chamado de "bubble sort" (ordenação por bolha) porque os elementos maiores "flutuam" para 
o topo do vetor como bolhas em um líquido. 
 
Insertion sort: 
 
1. Percorre todo o vetor, considerando um elemento de cada vez. 
2. Insere cada elemento na posição correta em uma sublista ordenada do vetor. 
3. A sublista ordenada começa com o primeiro elemento do vetor e cresce a cada passo do algoritmo. 
4. Repete os passos 1 e 2 para cada elemento do vetor, até que todos os elementos estejam na sublista 
ordenada. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
67
180
 
O algoritmo é chamado de "insertion sort" (ordenação por inserção) porque insere cada elemento na posição 
correta da sublista ordenada. 
 
Merge sort: 
 
1. Divide o vetor a ser ordenado em duas metades iguais. 
2. Recursivamente ordena cada metade usando o mesmo algoritmo (merge sort). 
3. Combina as duas metades ordenadasem um único vetor ordenado. 
O algoritmo é chamado de "merge sort" (ordenação por mesclagem) porque mescla duas listas ordenadas 
em uma única lista ordenada. 
 
Quick sort: 
 
1. Escolhe um elemento do vetor como pivô (geralmente o primeiro ou o último elemento). 
2. Reorganiza o vetor de forma que todos os elementos menores que o pivô estejam à esquerda e todos 
os elementos maiores estejam à direita. 
3. Recursivamente ordena a metade esquerda e a metade direita do vetor usando o mesmo algoritmo 
(quick sort). 
 
O algoritmo é chamado de "quick sort" (ordenação rápida) porque geralmente é mais rápido do que outros 
algoritmos de ordenação, especialmente para conjuntos de dados grandes. 
 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
68
180
QUESTÕES COMENTADAS 
Diversas Bancas 
 
1. (VUNESP – UNICAMP – 2022) Na linguagem C++, estruturas (definidas pela palavra-chave struct) podem 
ser passadas como parâmetros em chamadas de funções. Nesse contexto, assinale a alternativa correta. 
 
a) Por padrão, estruturas são passadas por referência. 
b) Passar estruturas por referência é mais eficiente que passá-las por valor, uma vez que a passagem por 
valor requer que a estrutura inteira seja copiada. 
c) Estruturas só podem ser passadas como parâmetro por meio do uso de ponteiros. 
d) É necessário o uso da palavra-chave inline na declaração da função que recebe uma estrutura como 
parâmetro. 
e) Apenas funções do tipo void podem receber estruturas como parâmetros. 
 
Comentários: 
 
Passar estruturas por referência é mais eficiente que passá-las por valor, uma vez que a passagem por valor 
requer que a estrutura inteira seja copiada. Isso pode ser custoso em termos de desempenho se a estrutura 
for grande. Portanto, é comum passar estruturas por referência ou por ponteiros para evitar a cópia 
desnecessária de dados. No entanto, é importante notar que é possível passar estruturas por valor se a 
estrutura for pequena e se a cópia não afetar significativamente o desempenho da função. A letra A está 
incorreta, pois as estruturas podem ser passadas por valor ou por referência, dependendo da necessidade 
do programador. A letra C está incorreta, pois as estruturas podem ser passadas por valor ou por referência, 
não sendo necessário o uso de ponteiros. A letra D está incorreta, pois não é necessário o uso da palavra-
chave inline na declaração da função que recebe uma estrutura como parâmetro. A palavra-chave inline é 
usada para otimizar o desempenho de funções curtas, mas não está diretamente relacionada à passagem de 
estruturas como parâmetros. A letra E está incorreta, pois funções de qualquer tipo (não apenas do tipo 
void) podem receber estruturas como parâmetros. 
 
Gabarito: Letra B 
 
2. (CESPE – PG-DF – 2021) Tendo como referência o código, escrito em linguagem de programação ANSI C, 
julgue o item subsecutivo. 
 
#include <stdio.h> 
 
int main ( ) { 
 int vetor[10], i = 0, j = 0, auxiliar = 0; 
 
 for (i = 0; i < 10; i++) { 
 printf ("Digite um numero inteiro: "); 
 scanf ("%d", &auxiliar); 
 vetor[i] = auxiliar; 
 } 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
69
180
 for (i = 0; i < 10; i++) { 
 for (j = i+1; j < 10; j++) { 
 if ( vetor[i] > vetor [j]) { 
 auxiliar = vetor [i]; 
 vetor[i] = vetor[j]; 
 vetor[j] = auxiliar; 
 } 
 } 
 } 
 
for (i = 0; i < 10; i++) { 
 printf ("\n\n vetor[%d] = %d", i, vetor[i]); 
 } 
 
 system ("PAUSE"); 
 return 0; 
} 
 
Quando compilado e executado, o código solicita que o usuário digite dez números inteiros e, em 
seguida, ordena e mostra esses números na tela, em ordem crescente. 
 
Comentários: 
 
Este programa em C++ utiliza a biblioteca "vector" para criar um vetor de inteiros chamado "v". Em seguida, 
o programa utiliza um loop "for" para adicionar ao vetor os valores de i multiplicados por 2, ou seja, [0, 2, 4, 
6, 8, 10]. Depois disso, o programa remove os dois primeiros elementos do vetor usando o método "erase". 
Como resultado, o vetor agora tem os valores [4, 6, 8, 10]. Finalmente, o programa usa outro loop "for" para 
imprimir os elementos restantes do vetor. No entanto, há um erro na linha que imprime os elementos. Em 
vez de imprimir o valor do elemento, a variável "i" que representa um iterador é impressa. Para imprimir 
corretamente os valores, deve-se usar "*i" para acessar o valor do elemento no vetor. O código apresentado 
solicita ao usuário que digite 10 números inteiros, armazena esses valores em um vetor e, em seguida, usa o 
algoritmo de ordenação conhecido como "selection sort" para ordenar os números em ordem crescente. Por 
fim, o programa exibe os números ordenados na tela. Portanto, o item está correto. Quando compilado e 
executado, o código solicita que o usuário digite dez números inteiros e, em seguida, ordena e mostra esses 
números na tela, em ordem crescente. 
 
Gabarito: Correto 
 
3. (CESPE – PG-DF – 2021) Tendo como referência o código da questão anterior, escrito em linguagem de 
programação ANSI C, julgue o item subsecutivo. 
Caso a linha for (i = 0; i < 10; i++) { fosse alterada para for (i = 0; i > 10; i++) { em suas três ocorrências, o 
código funcionaria invertendo a ordem dos números digitados e armazenados no vetor declarado no 
código. 
 
Comentários: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
70
180
Pessoal, errada a questão! Na verdade, o código não funcionaria corretamente se a linha for (i = 0; i > 10; 
i++) { fosse alterada para as três ocorrências do loop for. Isso ocorre porque a condição do loop for é 
responsável por controlar a quantidade de iterações do loop, e a condição "i > 10" nunca seria satisfeita, pois 
a variável "i" é inicializada com o valor zero e incrementada a cada iteração. Portanto, o loop for nunca seria 
executado e nenhum número seria armazenado no vetor. Caso a intenção seja percorrer o vetor de forma 
invertida, a condição do loop for deveria ser alterada para "i >= 0" e o incremento da variável "i" deveria ser 
trocado para um decremento. 
 
Gabarito: Errado 
 
4. (CESPE – PG-DF – 2021) Tendo como referência o código da questão anterior, escrito em linguagem de 
programação ANSI C, julgue o item subsecutivo. 
 
O comando printf ("\n\n vetor[%d] = %d", i, vetor[i]); continuaria funcionando corretamente mesmo que 
o comando #include não existisse no código. 
 
Comentários: 
 
Pessoal, questão errada! Na verdade, o comando printf não funcionaria corretamente se o comando #include 
correspondente à biblioteca stdio.h não existisse no código. Isso ocorre porque o comando printf faz parte 
da biblioteca padrão de entrada e saída de dados do C, e seu protótipo é definido na biblioteca stdio.h. Se a 
biblioteca não for incluída no código, o compilador não será capaz de reconhecer o comando printf, 
resultando em um erro de compilação. Portanto, é necessário que a biblioteca stdio.h seja incluída no código 
para que o comando printf e outros comandos relacionados à entrada e saída de dados possam ser utilizados 
corretamente. 
 
Gabarito: Errado 
 
5. (CESPE – PG-DF – 2021) Tendo como referência o código da questão anterior, escrito em linguagem de 
programação ANSI C, julgue o item subsecutivo. 
 
O parâmetro %d, utilizado na linha scanf ("%d", &auxiliar);, permite a digitação apenasde números 
inteiros. 
 
Comentários: 
 
Perfeita questão pessoal! O parâmetro %d utilizado na linha scanf ("%d", &auxiliar); permite a leitura de 
números inteiros a partir do teclado. O %d é um especificador de formato utilizado pela função scanf para 
indicar que se espera a leitura de um número inteiro. Quando o usuário digita um número inteiro e pressiona 
a tecla Enter, o valor digitado é armazenado na variável auxiliar passada como argumento para a função 
scanf. Caso o usuário digite um valor que não seja um número inteiro, o comportamento da função scanf 
pode ser imprevisível, podendo ocorrer erros de leitura ou comportamentos inesperados. Portanto, é 
importante garantir que o valor digitado pelo usuário seja compatível com o formato especificado pelo 
parâmetro %d. 
 
Gabarito: Correto 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
71
180
6. (VUNESP – UNICAMP – 2022) Considere o seguinte programa na linguagem C++: 
 
#include <iostream> 
#include <vector> 
using namespace std; 
 int main() { 
 vector<int> v; 
 for (int i=0;i<=5;i++) { 
 v.push_back(i*2); 
 } 
 v.erase(v.begin()); 
 v.erase(v.begin()); 
 for (auto i=v.begin();i!=v.end();i++) { 
 cout << i << " "; 
 } 
 } 
 
A saída produzida por sua execução é: 
 
a) 4 6 8 
b) 6 4 2 
c) 2 4 6 8 
d) 4 6 8 10 
e) 8 6 4 2 
 
Comentários: 
 
A saída produzida pelo programa será: 2 4 6 8. Isso ocorre porque o valor i utilizado na linha v.push_back(i*2) 
é o valor de i após a execução do primeiro laço for, ou seja, 6. Portanto, os valores adicionados ao vetor v 
serão 12, que é o dobro de 6, e o laço for que imprime os elementos do vetor v irá imprimir na tela os valores 
4, 6 e 8, que são os elementos restantes após a remoção dos dois primeiros elementos. Assim, a opção 
correta é a letra d) 4 6 8 10. 
Gabarito: Letra D 
 
7. (VUNESP – UNICAMP – 2022) Na linguagem C++, estruturas (definidas pela palavra-chave struct) podem 
ser passadas como parâmetros em chamadas de funções. Nesse contexto, assinale a alternativa correta. 
Alternativas 
a) Por padrão, estruturas são passadas por referência. 
b) Passar estruturas por referência é mais eficiente que passá-las por valor, uma vez que a passagem por 
valor requer que a estrutura inteira seja copiada. 
c) Estruturas só podem ser passadas como parâmetro por meio do uso de ponteiros. 
d) É necessário o uso da palavra-chave inline na declaração da função que recebe uma estrutura como 
parâmetro. 
e) Apenas funções do tipo void podem receber estruturas como parâmetros. 
 
Comentários: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
72
180
A alternativa correta é a letra B: Passar estruturas por referência é mais eficiente que passá-las por valor, 
uma vez que a passagem por valor requer que a estrutura inteira seja copiada. Ao passar uma estrutura por 
valor em uma chamada de função, uma cópia completa da estrutura é criada, o que pode ser ineficiente em 
termos de uso de memória e processamento. Por isso, é comum passar estruturas por referência ou por 
ponteiro, que evitam a cópia desnecessária e podem melhorar a eficiência do programa. A opção A está 
incorreta, pois a passagem por referência é uma opção que deve ser explicitamente escolhida na definição 
da função ou na chamada da função, não sendo o padrão. A opção C está incorreta, pois as estruturas podem 
ser passadas tanto por valor quanto por referência (por meio de ponteiros ou referências). As opções D e E 
estão incorretas, pois a palavra-chave inline é usada para otimização do código em tempo de execução e não 
tem relação direta com a passagem de estruturas como parâmetros. Além disso, funções de qualquer tipo 
podem receber estruturas como parâmetros. 
Gabarito: Letra B 
 
8. (VUNESP – UNICAMP – 2022) Na linguagem C++, a linha de código 
 
 double * x,y; 
 
declara 
 
a) duas variáveis do tipo double. 
b) dois ponteiros para valores do tipo double. 
c) um ponteiro para um valor do tipo double e uma variável do tipo double. 
d) uma variável do tipo double e um ponteiro que aponta para ela. 
e) um ponteiro para uma função do tipo double que recebe dois parâmetros também do tipo double. 
 
Comentários: 
 
Em C++, o operador * é usado para declarar um ponteiro, que é uma variável que armazena o endereço de 
memória de outra variável. No código double * x, y;, a declaração double * x cria um ponteiro para um valor 
do tipo double chamado x. Já a declaração y cria uma variável do tipo double chamada y. Note que a 
declaração do ponteiro x só se aplica a ele e não à variável y. Ou seja, y não é um ponteiro e não armazena 
um endereço de memória, mas sim um valor do tipo double. Caso o objetivo fosse declarar dois ponteiros, a 
declaração correta seria double *x, *y;. Nesse caso, tanto x quanto y seriam ponteiros para valores do tipo 
double. Portanto, a alternativa correta é a letra C. 
Gabarito: Letra C 
 
9. (UFMT – Câmara de Cáceres - MT – 2022) A partir do trecho de código abaixo utilizando a linguagem de 
programação C, assinale a alternativa que apresenta a saída da execução do código. 
 
#include <stdio.h> 
int main() { 
 int i; 
 int vec[] = {1,2,3,4,5}; 
 *(vec + *vec) = vec[1]; 
 *(vec + vec[1]) = vec[3]; 
 *(vec + vec[2]) = *(vec + 0); 
 for(i = 0; i < 5; i++) 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
73
180
 printf("%d", vec[i]); 
 return 0; 
} 
 
a) 1 2 3 1 4 
b) 1 2 3 4 5 
c) 1 2 4 4 1 
d) 1 2 4 4 4 
 
Comentários: 
 
A resposta correta é a alternativa C. Durante a execução do código, a linha *(vec + *vec) = vec[1]; altera o 
valor do segundo elemento do vetor vec para 2 (valor armazenado na posição 1). Em seguida, a linha *(vec 
+ vec[1]) = vec[3]; altera o quarto elemento do vetor vec para 4 (valor armazenado na posição 3). Por fim, a 
linha *(vec + vec[2]) = *(vec + 0); altera o terceiro elemento do vetor vec para 1 (valor armazenado na posição 
0). Ao final, a função printf exibe os valores do vetor vec, que serão: 1 2 4 4 1. A alternativa C é a única que 
apresenta esses valores. 
Gabarito: Letra C 
 
10. (FADENOR – Prefeitura de Dores de Guanhães - MG – 2022) Analise o código a seguir, escrito na 
linguagem de programação C. 
 
#include <stdio.h> 
void sub (int *x, int y){ 
 *x = 3; 
 y = *x + 1; 
} 
int main() 
{ 
 int a, b, z; 
 a = 1; 
 b = 2; 
 sub(&a,b); 
 z=a+b; 
 printf("%d",z); 
 return 0; 
} 
 
O valor de Z, a ser mostrado na saída padrão, é 
 
a) 3. 
b) 4. 
c) 5. 
d) 7. 
e) 9. 
 
Comentários: 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
74
180
 
O valor de Z será igual a 5. O programa define uma função chamada "sub" que recebe um ponteiro para 
inteiro (x) e um inteiro (y). Dentro da função, o valor apontado por x é alterado para 3 e o valor de y é 
atualizado para o valor apontado por x (que agora é 3) mais 1, mas essa atualização não afeta o valor de b 
na função main. Na função main, as variáveis a e b são definidas com valores 1 e 2, respectivamente. A função 
sub é chamada com o endereço de a e o valor de b. Isso significa que dentro da função sub, a referência 
apontada por x aponta para a variável a emmain, e qualquer alteração feita nessa referência afetará o valor 
de a em main. Após a chamada da função sub, o valor de z é a soma de a e b, que são 3 e 2, respectivamente. 
Portanto, o valor de z é 5 e a resposta correta é a alternativa c) 5. 
 
Gabarito: Letra C 
 
11. (IBFC – DPE-MT – 2022) Quanto às principais características das linguagens: Java, C e C++, analise as 
afirmativas abaixo e dê valores Verdadeiro (V) ou Falso (F). 
 
( ) A maioria dos códigos escritos em C pode ser compilada em C++. 
 
( ) A linguagem C é considerada como tipicamente orientada a objetos. 
 
( ) As IDE's Eclipse e NetBeans não comportam o desenvolvimento em Java. 
 
Assinale a alternativa que apresenta a sequência correta de cima para baixo: 
 
a) V - F - F 
b) V - V - F 
c) F - V - V 
d) F - F - V 
 
Comentários: 
 
A resposta correta é a alternativa A) V - F - F. (V) A maioria dos códigos escritos em C pode ser compilada em 
C++. C++ é uma extensão da linguagem C, então a maioria dos códigos escritos em C pode ser compilada em 
C++ sem problemas. No entanto, nem todos os recursos de C são suportados em C++, e há diferenças 
importantes na sintaxe e na semântica. (F) A linguagem C é considerada como tipicamente orientada a 
objetos. A linguagem C não é tipicamente orientada a objetos. C é uma linguagem procedural que não 
fornece suporte nativo para recursos de orientação a objetos, embora possa ser estendida por meio de 
bibliotecas externas, como o GObject. (F) As IDE's Eclipse e NetBeans não comportam o desenvolvimento 
em Java. Tanto o Eclipse quanto o NetBeans são IDEs populares que suportam o desenvolvimento em Java. 
Na verdade, eles são frequentemente usados para desenvolver aplicativos Java, além de outras linguagens. 
 
Gabarito: Letra A 
 
12. (FCC – TRT - 23ª REGIÃO (MT) – 2022) Considere o programa em C abaixo. 
 
#include <stdio.h> 
 int main() { 
 int y, *p, x; 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
75
180
==30e709==
 y = 0; 
 p = &y; 
 x = *p; 
 x += 10; 
 ++ (*p); 
 --x; 
 (*p) += x; 
 printf ("y = %i\n", y); 
 return 0; 
} 
 
Ao ser compilado e executado em condições ideais, a saída do programa é: 
 
a) y = 9 
b) y = 0 
c) y = 10 
d) y = 1 
e) y = 11 
 
Comentários: 
 
A saída do programa será "y = 10". O programa começa definindo três variáveis: um inteiro y, um ponteiro 
para inteiro p e um inteiro x. y é inicializado como 0 e p é inicializado como o endereço de y. O programa 
então define x como o valor apontado por p, que é 0. x é então incrementado em 10, tornando-se 10. Em 
seguida, o valor apontado por p é incrementado em 1, tornando-se 1. Depois, x é decrementado em 1, 
tornando-se 9. Por fim, o valor apontado por p é incrementado em x, que é 9. Como resultado, o valor final 
de y é 10. Portanto, a resposta correta é a alternativa c) y = 10. 
Gabarito: Letra C 
 
13. (UFAM – UFAM – 2022) Considere o programa a seguir, elaborado na linguagem ANSI C: 
#include <stdio.h> 
 
int main() { 
 int i, j; 
 for (i = 0; i < 2; i++) { 
 for (j = 1; j < 3; j++) { 
 printf("Teste\n"); 
 } 
 } 
 return 0; 
} 
 
 
Assinale a opção CORRETA sobre o número de vezes que a palavra "Teste" será mostrada, ao 
executarmos o programa: 
 
a) 3 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
76
180
b) 4 
c) 5 
d) 6 
e) 7 
 
Comentários: 
 
O programa irá imprimir a palavra "Teste" quatro vezes. O primeiro loop for percorre duas vezes, enquanto 
o segundo loop for percorre duas vezes a cada iteração do primeiro loop. Portanto, a palavra "Teste" será 
impressa um total de quatro vezes. Portanto, a resposta correta é a alternativa b) 4. 
Gabarito: Letra B 
 
14. (UFAM – UFAM – 2022) Considere o programa a seguir, elaborado na linguagem ANSI C: 
 
#include <stdio.h> 
 
int* pa; 
int a; 
 
int main() { 
 a = 10; 
 pa = &a; 
 a = 8; 
 printf("%d", a); 
 printf(" %d", *pa); 
 return 0; 
} 
 
Assinale a alternativa CORRETA sobre a saída (output) obtida, ao se executar o programa: 
a) 8 8 
b) 10 8 
c) 8 10 
d) 10 10 
e) 9 10 
 
Comentários: 
 
O programa começa por incluir a biblioteca padrão de entrada e saída (stdio.h). Em seguida, define as 
variáveis pa e a. pa é um ponteiro para inteiro (int*) e a é uma variável inteira. Dentro da função main(), o 
programa atribui o valor 10 para a variável a. Em seguida, o endereço de a é atribuído a pa. Depois, o valor 
de a é alterado para 8. Finalmente, o programa imprime o valor de a e o valor apontado por pa (que também 
é 8), separados por um espaço. Assim, a saída do programa será: 8 8. Portanto, a alternativa correta é a letra 
"a". 
Gabarito: Letra A 
 
15. (UFMG – UFMG – 2021) Na linguagem C, foi declarada uma matriz: int matriz[5][6];. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
77
180
O código abaixo é utilizado para imprimir todos os elementos da matriz. 
 
for (int i = 0; i <= 4; i++) { 
 for (int j = 0; j <= 5; j++) { 
 printf("%d ", matriz[i][j]); 
 } 
} 
 
Qual deve ser os valores de a, b, c e d, respectivamente, para imprimir todos os elementos da matriz? 
 
a) 0; 4; 0; 5. 
b) 1; 4; 1; 5. 
c) 1; 5; 1; 6. 
d) 1; 6; 1; 5. 
 
Comentários: 
 
O código apresentado está correto em relação à sua sintaxe, mas falta contexto para saber se ele está 
adequado ao objetivo desejado. A estrutura for é utilizada para percorrer os elementos de uma matriz, onde 
a e b representam os limites das linhas a serem percorridas e c e d representam os limites das colunas a 
serem percorridas. Dentro do loop, o programa imprime o valor do elemento presente na posição i da linha 
e j da coluna da matriz. Como a matriz tem dimensões de 5 linhas e 6 colunas, os valores de índices válidos 
para a matriz serão de 0 a 4 para as linhas e de 0 a 5 para as colunas. Portanto, para imprimir todos os 
elementos da matriz, podemos utilizar os valores: a = 0 (primeira linha), b = 4 (última linha), c = 0 (primeira 
coluna), d = 5 (última coluna) 
 
Gabarito: Letra A 
 
16. (UFMG – UFMG – 2021) Considerando o código escrito na linguagem C: 
 
#include <stdio.h> 
#include <stdlib.h> 
 
int main() { 
 int a; 
 int b = 4; 
 a = b++; 
 printf("a=%d e b=%d\n", a, b); 
 return 0; 
} 
 
Qual é o resultado da execução do código? 
 
a) a=4 e b=4 
b) a=4 e b=5 
c) a=5 e b=4 
d) a=5 e b=5 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
78
180
 
Comentários: 
 
O resultado da execução do código é a=4 e b=5. Isso acontece porque a expressão "b++" primeiro atribui o 
valor atual de "b" para "a" (que fica com valor 4), e depois incrementa o valor de "b" para 5. Então, ao 
imprimir os valores de "a" e "b" no printf, teremos a=4 e b=5. 
Gabarito: Letra B 
 
17. (UFMG – UFMG – 2021) Considerando o código escrito na linguagem C: 
 
#include <stdio.h> 
#include <stdlib.h> 
 
void ops(int *a, int b){ 
 *a = 4; 
 b = *a + 2; 
} 
 
int main() { 
 int x, y, total; 
 x = 1; 
 y = 2; 
 ops(&x,y); 
 total = x + y; 
 printf("%d",total); 
 return 0; 
} 
 
 
Qual é o valor da variável total que será impresso na saída padrão? 
 
a) 4 
b) 6 
c) 7 
d) 10 
 
Comentários: 
 
O valor da variável xé alterado para 4 pela função ops() e o valor da variável y permanece 2. O programa 
começa com a declaração da função ops, que recebe um ponteiro para inteiro a e um inteiro b. Dentro da 
função, o valor apontado por a é alterado para 4, e o valor de b é modificado para a soma de *a (valor 
apontado por a) mais 2. Como a função ops foi chamada com x passado por referência, a variável x é alterada 
para 4 e y permanece com o valor 2. Na sequência, o valor de total é a soma de x com y, que resulta em 6. 
Esse valor é impresso na tela com o comando printf. Portanto, a alternativa correta é a letra B: 6. 
 
Gabarito: Letra B 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
79
180
18. (CETAP – SEPLAD - PA – 2021) Considere o seguinte programa exemplo escrito em linguagem C e marque 
a alternativa correta. 
 
#include <stdio.h> 
 
int soma(int n) { 
 if(n == 1) 
 return 1; 
 else 
 return (n + soma(n-1)); 
} 
 
int main() { 
 int n; 
 printf("Digite um inteiro positivo: "); 
 scanf("%d", &n); 
 printf("Soma: %d\n", soma(n)); 
 return 0; 
} 
 
(*) fonte do programa retirado de https:/Awww.cprogressivo.net/ acessado em 09/09/2021. 
 
a) O programa exemplo mostra o uso do método de iteração. 
b) O programa exemplo mostra o uso do método de ordenação. 
c)O programa exemplo mostra o uso do método de passagem de parâmetro. 
d) O programa exemplo mostra o uso do método de recursão. 
 
Comentários: 
 
Gabarito: d) O programa exemplo mostra o uso do método de recursão. O programa calcula a soma dos 
números inteiros de 1 até um número n, utilizando a técnica de recursão. A função soma() é chamada 
recursivamente até que o valor de n seja igual a 1, quando a função retorna 1. Em seguida, as chamadas 
recursivas da função são finalizadas, e os valores de n são somados em cada retorno da função, resultando 
na soma total dos números inteiros de 1 até n. 
Gabarito: Letra D 
 
19. (Instituto UniFil – Prefeitura de Marechal Cândido Rondon - PR – 2021) Linguagem compilada é uma 
linguagem de programação em que o código fonte, nessa linguagem, é executado diretamente pelo 
sistema operacional ou pelo processador, após ser traduzido por meio de um processo chamado 
compilação, usando um programa de computador chamado compilador, para uma linguagem de baixo 
nível, como linguagem de montagem ou código de máquina. Assinale a alternativa que representa 
somente linguagens que são compiladas. 
 
a) Cobol, PHP, C e Python 
b) Cobol, C, Delphi e PHP 
c) Cobol, C, Delphi e C++ 
d) Delphi, C, PHP e Python 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
80
180
 
Comentários: 
 
A) Cobol, PHP, C e Python: Cobol: é uma linguagem compilada, utilizada principalmente em sistemas 
corporativos e financeiros. PHP: é uma linguagem interpretada, mas é possível compilar o código PHP 
utilizando o Zend Engine, o que faz com que o código seja executado mais rapidamente. C: é uma linguagem 
compilada, amplamente utilizada em sistemas operacionais, drivers de dispositivos, jogos, entre outros. 
Python: é uma linguagem interpretada, mas é possível utilizar ferramentas como o PyInstaller e o PyOxidizer 
para compilar o código Python em um executável. B) Cobol, C, Delphi e PHP: Cobol e C: já explicados 
anteriormente. Delphi: é uma linguagem compilada, utilizada para desenvolvimento de aplicativos para 
desktop, servidores e aplicações móveis. PHP: já explicado anteriormente. C) Cobol, C, Delphi e C++: Cobol, 
C e Delphi: já explicados anteriormente. C++: é uma linguagem compilada, derivada do C e utilizada 
principalmente no desenvolvimento de jogos, sistemas embarcados e software de alta performance. D) 
Delphi, C, PHP e Python: Delphi, C e PHP: já explicados anteriormente. Python: já explicado anteriormente. 
O gabarito é a letra C, pois todas as linguagens mencionadas são linguagens compiladas, ou seja, o código 
fonte é traduzido em código de máquina antes da execução. COBOL, C, Delphi e C++ são exemplos clássicos 
de linguagens compiladas, onde o compilador é responsável por gerar o arquivo executável diretamente a 
partir do código fonte. Por outro lado, as linguagens interpretadas, como Python e PHP, não precisam de um 
processo de compilação antes da execução do código, pois o interpretador pode executar diretamente o 
código fonte linha por linha. Portanto, a alternativa A está incorreta por incluir linguagens interpretadas, 
enquanto as alternativas B e D estão incorretas por não incluírem a linguagem C++, que também é uma 
linguagem compilada. 
 
Gabarito: Letra C 
 
20. (IDIB – CRECI-PE - 7ª Região – 2021) Qual será a saída do seguinte código C? 
 
#include <stdio.h> 
int main() { 
 int ary[4] = {1, 2, 3, 4}; 
 printf("%d\n", *ary); 
 return 0; 
} 
 
a) 1. 
b) Erro de tempo de compilação (run time error). 
c) Algum valor de lixo. 
d) Variável indefinida. 
 
Comentários: 
 
O código declara um array de inteiros com 4 elementos e inicializa com os valores 1, 2, 3 e 4. Em seguida, é 
impresso na saída padrão o valor do primeiro elemento do array utilizando o operador de desreferência 
(*ary). Como o primeiro elemento do array é 1, a resposta correta é a alternativa A: "1". Não há erros de 
compilação ou de tempo de execução no código. 
 
Gabarito: Letra A 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
81
180
 
21. (UFMT – UFMT – 2021) A linguagem de programação C é de propósito geral, sendo caracterizada como 
procedural e imperativa, desenvolvida em 1972 por Dennis M. Ritchie, baseando-se na sua experiência 
com o sistema operacional UNIX. Sua versatilidade e portabilidade lhe garantiram longa vida, sendo 
utilizada hoje também em programação de sistemas embarcados. A linguagem C foi formalizada com o 
ISO/IEC 9899:1990. Analise o código do programa a seguir conforme as definições da linguagem C. 
 
#include <stdio.h> 
 
int um_de_dois(int num1, int num2); 
 
int main() { 
 int a = 100; // definição de variáveis locais 
 int b = 20; 
 int ret_um; 
 ret_um = um_de_dois(a, b); // chamada da função 
 printf("O valor é: %d\n", ret_um); 
 return 0; 
} 
 
int um_de_dois(int num1, int num2) { 
 int result; // declaração de variáveis locais 
 if (num1 > num2) 
 result = num1; 
 else 
 result = num2; 
 return result; 
} 
 
Sobre esse código, marque V para as afirmativas verdadeiras e F para as falsas. 
( ) A execução do programa produz como saída: O valor é: 20. 
( ) A formatação da saída poderia ser feita sem erro com o comando: printf( "O valor é: %f\n", ret_um ); 
( ) A passagem de parâmetros para a função é por valor, pois a função um_de_dois(int num1, int num2) 
não altera o valor da variáveis int a ou int b. 
( ) Os parâmetros formais são os argumentos da função um_de_dois(int num1, int num2), declarados 
como variáveis que aceitam os argumentos da chamada da função um_de_dois(a, b). 
 
Assinale a sequência correta. 
 
a) F, V, F, V 
b) V, V, F, F 
c) V, F, V, F 
d) F, F, V, V 
 
Comentários: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
82
180
A primeira afirmativa é falsa, pois a execução do programa produz como saída: O valor é: 100. A segunda 
afirmativa é falsa, poiso tipo de dado da variável ret_um é int e não float. A terceira afirmativa é verdadeira, 
pois a passagem de parâmetros para a função em C é por valor, ou seja, a função recebe cópias dos valores 
das variáveis passadas como argumentos. A quarta afirmativa é verdadeira, pois os parâmetros formais são 
os argumentos da função, e na chamada da função, os valores das variáveis a e b são passados como 
argumentos. 
Gabarito: Letra D 
 
22. (CEPUERJ – UERJ – 2021) Um tipo de dados define uma coleção de valores de dados e um conjunto de 
operações pré-definidas sobre ele. O sistema de tipos de uma linguagem de programação define como 
um tipo é associado com cada expressão na linguagem e inclui suas regras para equivalência e 
compatibilidade de tipos. Entender seu sistema de tipos é uma das partes mais importantes para 
entender a semântica de uma linguagem de programação. De acordo com essa afirmação e com os 
conceitos da linguagem de programação Java, é correto afirmar que: 
 
a) o tipo de dado matriz é um agregado homogêneo de elementos de dados no qual um elemento 
individual é identificado por sua posição na agregação. Na linguagem Java, os elementos de uma matriz 
não precisam ser do mesmo tipo 
b) a enumeração é um tipo de dado ordinal definido pelo usuário e fornece uma maneira de declarar e 
agrupar coleções de constantes nomeadas 
c) um ponteiro em Java é um tipo de dado em que as variáveis têm uma faixa de valores que consistem 
em endereços de memória 
d) a herança múltipla na linguagem Java segue o mesmo formato e comportamento da linguagem C++ 
 
Comentários: 
 
a) Essa afirmação não é correta para a linguagem de programação Java. Em Java, uma matriz é um tipo de 
dado homogêneo que contém elementos do mesmo tipo. Além disso, a declaração de uma matriz em Java 
requer que seu tamanho seja especificado no momento da declaração. b) Essa afirmação é correta. A 
enumeração em Java é um tipo de dado ordinal que permite declarar e agrupar constantes nomeadas. Por 
exemplo, podemos definir uma enumeração "DiasDaSemana" com as constantes "SEGUNDA", "TERÇA", 
"QUARTA", "QUINTA", "SEXTA", "SÁBADO" e "DOMINGO". c) Essa afirmação não é correta para a linguagem 
de programação Java. Em Java, não existem ponteiros como na linguagem C ou C++. Em vez disso, as 
referências de objetos são usadas para se referir a objetos alocados dinamicamente na memória. Essas 
referências não contêm endereços de memória diretos, mas sim apontam para objetos alocados na 
memória. d) Essa afirmação não é correta. A linguagem Java não suporta herança múltipla direta de classes, 
embora possa ser simulada usando interfaces. Já na linguagem C++, a herança múltipla é suportada 
diretamente. Portanto, a herança múltipla na linguagem Java é diferente do formato e comportamento da 
linguagem C++. 
 
Gabarito: Letra B 
 
23. (INSTITUTO AOCP – ITEP - RN – 2021) Analise o código C++ a seguir: 
 
#include <iostream> 
using namespace std; 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
83
180
void meuNome(string nome, int idade) { 
cout << "Seu nome é " << nome << " e sua idade é " << idade << endl; 
} 
 
int main() { 
string nome; 
int idade; 
cout << "Digite seu nome: "; 
cin >> nome; 
cout << "Digite sua idade: "; 
cin >> idade; 
meuNome(nome, idade); 
return 0; 
} 
 
Para que a chamada da função meuNome, ocorra livre de erros, assinale a alternativa correta em relação 
à escrita dessa função. 
 
a) void meuNome(string Nome, int Idade) { cout << "Meu nome é "<< Nome << ". Tenho " << Idade << " 
anos.\n"; } 
b) meuNome(string nome, int idade) { cout << "Meu nome é "<< nome << ". Tenho " << idade << " 
anos.\n"; } 
c) void meuNome(nome, idade) { cout << "Meu nome é "<< nome << ". Tenho " << idade << " anos.\n"; } 
d) meuNome() { cout << "Meu nome é "<< nome << ". Tenho " << idade << " anos.\n"; } 
e) void meuNome(nome, idade) { cout << "Meu nome é %s.", nome; cout << "Tenho %d anos.", idade; } 
 
Comentários: 
 
A função meuNome deve receber dois argumentos, uma string para o nome e um inteiro para a idade, 
conforme definido na declaração da função. Na alternativa a), os nomes dos parâmetros da função estão 
corretos e a mensagem de saída está de acordo com a esperada no código original. Nas demais alternativas, 
há erros de sintaxe ou semântica que impedem a compilação ou o correto funcionamento do programa. 
 
Gabarito: Letra A 
 
24. (INSTITUTO AOCP – ITEP - RN – 2021) Em linguagens de programação, os tipos de dados podem ser 
classificados como elementares ou estruturados. Em qual das alternativas a seguir há exemplos somente 
de um mesmo tipo de dado (elementar ou estruturado) reconhecido pela linguagem C++? 
 
a) Struct e array. 
b) Integer e class. 
c) Float e class. 
d) Char e union. 
e) Enum e struct. 
 
Comentários: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
84
180
Uma struct é um tipo de dado definido pelo usuário que permite agrupar diferentes variáveis sob um único 
nome. É uma coleção de variáveis de tipos diferentes, que são acessadas por meio de um identificador 
comum. Um array é uma coleção de elementos de um mesmo tipo de dados, que é armazenada em uma 
sequência contígua de memória. Cada elemento pode ser acessado por meio de um índice. Integer é um tipo 
de dado primitivo que armazena valores numéricos inteiros. Em C++, ele é representado pelo tipo "int". Class 
é um tipo de dado definido pelo usuário que permite criar uma abstração de dados. É uma estrutura que 
encapsula dados e comportamentos relacionados a esses dados em uma única entidade. Uma classe pode 
conter variáveis, funções e métodos. Float é um tipo de dado primitivo que armazena valores numéricos em 
ponto flutuante. Em C++, ele é representado pelo tipo "float". Char é um tipo de dado primitivo que 
armazena um único caractere. Em C++, ele é representado pelo tipo "char". Union é um tipo de dado definido 
pelo usuário que permite que diferentes tipos de dados compartilhem o mesmo espaço de memória. A ideia 
é que apenas um dos tipos esteja ativo em um determinado momento e o acesso aos dados da union deve 
ser feito de forma cuidadosa para evitar comportamentos inesperados. Por fim, Enum é um tipo de dado 
definido pelo usuário que permite definir um conjunto de constantes nomeadas. As constantes são 
atribuídas a valores inteiros sequenciais, a partir de um valor inicial especificado. A opção que apresenta 
exemplos somente de um mesmo tipo de dado (elementar ou estruturado) reconhecido pela linguagem C++ 
é a alternativa A) Struct e array. 
 
 
Gabarito: Letra A 
 
25. (INSTITUTO AOCP – ITEP - RN – 2021) Em relação às características da linguagem C, assinale a alternativa 
correta. 
 
a) É uma linguagem interpretada. 
b) Não possui tratamento de exceções. 
c) Possui 64 palavras reservadas. 
d) Suporta orientação a objeto. 
e) Os tipos básicos de variáveis para manipulação de caracteres são o char e string. 
 
Comentários: 
 
Vamos analisar cada alternativa: a) É uma linguagem interpretada. Esta afirmação é incorreta. C é uma 
linguagem compilada, o que significa que o código-fonte é transformado em código objeto por meio de um 
compilador antes de ser executado. b) Não possui tratamento de exceções. Esta afirmação é verdadeira. A 
linguagem C não possui mecanismos de tratamento de exceções nativamente, o que pode tornar o código 
propenso a erros inesperados em tempo de execução. c) Possui 64 palavras reservadas. Esta afirmação é 
incorreta. A linguagem C possui um número limitado de palavras-chave reservadas, que podem variar de 
acordo com a implementação do compilador. Por exemplo, o padrãoC99 especifica apenas 32 palavras-
chave reservadas. d) Suporta orientação a objeto. Esta afirmação é parcialmente verdadeira. Embora a 
linguagem C não tenha recursos de orientação a objeto integrados, é possível implementar conceitos de 
programação orientada a objetos em C usando técnicas como estruturas e ponteiros de função. e) Os tipos 
básicos de variáveis para manipulação de caracteres são o char e string. Esta afirmação é incorreta. O tipo 
básico para manipulação de caracteres em C é o char, enquanto a string é uma sequência de caracteres 
terminada por um caractere nulo ('\0') e é implementada como um array de chars. 
 
Gabarito: Letra B 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
85
180
 
26. (FADESP – Câmara de Marabá - PA – 2021) Considerando o operador de pós-incremento, utilizado na 
linguagem C, o resultado da execução do código é: 
 
#include <stdio.h> 
#include <stdlib.h> 
 
int main() { 
 int y, x = 10; 
 y = x++; 
 printf("x = %d\n", x); 
 printf("y = %d\n", y); 
 system("pause"); 
 return 0; 
} 
 
a) x = 10 e y = 10. 
b) x = 11 e y = 11. 
c) x = 10 e y = 11. 
d) x = 11 e y = 10. 
e) x = 11 e y = 0. 
 
Comentários: 
 
O operador de pós-incremento (++) incrementa o valor de uma variável após o uso dessa variável em uma 
expressão. No código fornecido, o valor de x é atribuído a y antes de ser incrementado.Assim, a expressão y 
= x++ é avaliada da seguinte maneira: A variável y recebe o valor de x, que é 10. O operador de pós-
incremento é aplicado em x, fazendo com que o seu valor seja incrementado em 1, passando a ser 11. 
Portanto, no final da execução, o valor de x é 11 e o valor de y é 10. A alternativa correta é a letra d). 
 
Gabarito: Letra D 
 
27. (IBFC – IBGE – 2021) Quanto às linguagens de programação, assinale a alternativa que esteja 
tecnicamente incorreta. 
 
a) Java é uma das principais representantes das linguagens orientadas a objetos 
b) JavaScript, é uma sub-línguagem do Java, feita para o desenvolvimento de aplicações para Android 
c) Grande parte dos sistemas operacionais existentes no mercado foram escritos em C 
d) Assembly é uma linguagem de programação de baixo nível, também definida, muitas vezes, como 
linguagem de montagem 
e) A linguagem de programação C# foi desenvolvida pela Microsoft 
 
Comentários: 
 
A alternativa INCORRETA é a letra B. JavaScript é uma linguagem de programação que permite a você 
implementar itens complexos em páginas web — toda vez que uma página da web faz mais do que 
simplesmente mostrar a você informação estática — mostrando conteúdo que se atualiza em um intervalo 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
86
180
de tempo, mapas interativos ou gráficos 2D/3D animados, etc. — você pode apostar que o JavaScript 
provavelmente está envolvido. Ademais, vejamos a alternativa C que trata sobre a linguagem C. A alternativa 
C está correta, já que grande parte dos sistemas operacionais foram escritos em C. Na verdade, muitos dos 
principais sistemas operacionais do mercado, como o Unix, o Linux e o Windows, foram criados com o uso 
da linguagem C. A linguagem C é muito popular para programação de sistemas, já que permite um controle 
mais preciso sobre o hardware do computador e é altamente portátil, permitindo que o mesmo código seja 
executado em diferentes sistemas operacionais. Além disso, a linguagem C é bastante eficiente e oferece 
recursos para gerenciamento de memória e acesso a dispositivos de hardware, o que a torna uma escolha 
popular para o desenvolvimento de drivers e outros softwares de baixo nível. 
 
Gabarito: Letra B 
 
28. (FAFIPA – Prefeitura de Arapongas - PR – 2020) A linguagem de programação C é uma linguagem 
compilada de propósito geral, estruturada, imperativa e procedural. Esta é uma das linguagens de 
programação mais populares e tem influenciado muitas outras linguagens de programação, como por 
exemplo, a linguagem Java. Observe a figura, onde é apresentado um código escrito em C: 
 
#include <stdio.h> 
 
int main() 
{ 
 int i = 3; 
 printf("%d", ++i); 
 return 0; 
} 
 
Após executar o código da figura no Compilador C, o que será apresentado no console? 
 
a) 4. 
b) 3. 
c) 2. 
d) 1. 
e) 0. 
 
Comentários: 
 
O código apresentado é um programa em C que imprime o valor de uma variável "i" na tela, utilizando a 
função "printf" da biblioteca padrão "stdio.h". Inicialmente, é declarada a variável "i" como um inteiro e 
atribuído o valor 3 a ela. Em seguida, a expressão "++i" é utilizada como argumento da função "printf". A 
expressão "++i" é um operador de pré-incremento, que incrementa o valor da variável "i" em 1 e retorna o 
novo valor. Portanto, quando a função "printf" é executada, o valor impresso na tela será 4, que é o valor 
resultante da operação "++i" (3+1). Ao executar o código apresentado, será exibido o valor 4 no console, pois 
o operador de pré-incremento (++i) incrementa o valor da variável i em 1 antes de imprimi-la na tela. Sendo 
assim, o valor de i será 4 no momento da impressão. 
Gabarito: Letra A 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
87
180
29. (FAPEC – UFMS – 2020) Considere o código a seguir, utilizando a linguagem de programação C. Assinale 
a alternativa correta. 
 
#include <stdio.h> 
 
int main() { 
 int x = 1, y, z; 
 y = ++x; 
 z = y++; 
 y = 2; 
 printf("%%%d, %d, %d%%", x, y, z); 
 return 0; 
} 
 
a) Será impresso: %1, 2, 3%. 
b) Será impresso: 2, 2, 3. 
c) Será impresso: %2, 2, 2%. 
d) Será impresso: 1, 2, 3. 
e) Ocorrerá o seguinte erro: incompatible type for argument 1 of ‘printf’. 
 
Comentários: 
 
O código declara três variáveis inteiras: x, y e z, inicializando apenas x com o valor 1. Em seguida, a variável 
y recebe o valor de x após ser incrementado em 1 (devido ao operador de pré-incremento ++x). Depois, a 
variável z recebe o valor de y antes de ser incrementado (devido ao operador de pós-incremento y++). A 
variável y recebe o valor 2. Em seguida, a variável y é atribuída com o valor 2. Por fim, a função printf() é 
chamada para imprimir o valor de x, y e z, respectivamente, em um formato específico. Como resultado, será 
impresso "%2, 2, 2%" no console. 
 
Gabarito: Letra C 
 
30. (FUCAP – Câmara da Estância Balneária de Praia Grande - SP – 2019) Assinale a única alternativa que 
indica corretamente a principal linguagem de programação usada para escrever o código-fonte das várias 
versões do Windows: 
 
a) Java; 
b) Javascript; 
c) PHP; 
d) C. 
 
Comentários: 
 
A principal linguagem de programação utilizada para escrever o código-fonte do sistema operacional 
Windows é a linguagem de programação C. O Windows é escrito em grande parte em C, embora também 
seja utilizada a linguagem Assembly para algumas partes críticas do sistema. 
 
Gabarito: Letra D 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
88
180
 
31. (UFAM – UFAM – 2019) Considere o programa na linguagem C: 
 
#include <stdio.h> 
 
int main() { 
 int array[10] = {1, -2, 3, -4}; 
 int a, loop; 
 a = 0; 
 for (loop = 1; loop >= 0; loop--) { 
 a = a + array[loop]; 
 } 
 printf(" %d", a); 
 return 0; 
} 
 
Ao executarmos o programa, ovalor da saída será: 
 
a) −1 
b) 1 
c) −2 
d) 2 
e) 3 
 
Comentários: 
 
O programa declara um array de inteiros chamado array com tamanho 10, mas apenas os quatro primeiros 
elementos são inicializados. Em seguida, ele inicializa a variável a como zero e entra em um loop for que 
começa com a variável loop igual a 1 e decrementa até 0. Dentro do loop, a variável a é atualizada 
adicionando o valor do elemento array[loop]. Na primeira iteração do loop, loop é 1 e array[1] é -2, então a 
é atualizada para -2. Na segunda iteração do loop, loop é 0 e array[0] é 1, então a é atualizada para -1. Por 
fim, o programa imprime o valor de a, que é -1. Portanto, a resposta correta é a letra A) −1. 
 
Gabarito: Letra A 
 
32. (UFAM – UFAM – 2019) Considere o programa na linguagem C: 
 
#include <stdio.h> 
 int main(){ 
 int a, b, c; 
 printf("Digite dois números\n"); 
 scanf("%d%d", &a, &b); 
 c = a; 
 a = b; 
 b = a; 
 printf("%d %d\n", a, b); 
 return 0; 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
89
180
 } 
 
Executando e digitando como entrada os números 12 e 14, a saída será: 
 
a) 12 14 
b) 12 12 
c) 14 14 
d) 14 12 
e) 26 
 
Comentários: 
 
A variável b é atribuída para a, e em seguida a variável a é atribuída novamente para b, o que acaba deixando 
ambas com o mesmo valor original. Portanto, a saída será 14 14, correspondente às variáveis a e b, 
respectivamente. A alternativa correta é a letra c). 
 
Gabarito: Letra C 
 
33. (FURB – Prefeitura de Porto Belo - SC – 2019) Leve em consideração o código abaixo, em linguagem C: 
 
#include <stdio.h> 
 
int a(int b) { 
 if (b <= 1) { 
 return 1; 
 } 
 return b * a(b - 1) - 1; 
} 
 
void main() { 
 int b = a(5), d = 0, c = 1, e = 43; 
 while (1) { 
 d = 1; 
 c += 2; 
 b -= 7; 
 if ((c + e + d + b) <= 44) { 
 printf("%d\n", c); 
 break; 
 } 
 d = a(d); 
 e -= c; 
 } 
 printf("%d\n", e); 
 printf("%d", b); 
} 
 
Os valores impressos na tela serão, respectivamente: 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
90
180
 
a) 9, 28, 6. 
b) 3, 43, 27. 
c) 19, -37, 27. 
d) 11, 19, -1. 
e) 3, 43, 0. 
 
Comentários: 
 
O programa irá imprimir os valores 3, 43 e 27. A função "a(int b)" é uma função recursiva que calcula o 
fatorial de um número, mas com a particularidade de subtrair 1 do resultado final. Neste caso, a chamada 
"a(5)" retorna o valor 119, que é atribuído à variável "b". Dentro do laço "while", a variável "c" é 
incrementada em 2 a cada iteração, a variável "b" é decrementada em 7, e a variável "d" é atribuída o valor 
1. O resultado da expressão "(c + e + d + b) <= 44" é verdadeiro quando "c" vale 3, "e" vale 43, "d" vale 1 e 
"b" vale 27, o que faz o programa entrar no "if" e imprimir o valor de "c" (3) e sair do laço com "break". 
Depois disso, o programa imprime o valor de "e" (43) e o valor de "b" (que agora vale 27). 
 
Gabarito: Letra B 
 
34. (IBADE – Prefeitura de Vilhena - RO – 2019) Dado o código abaixo, escrito em linguagem de programação 
C, o que seria impresso na tela se fosse compilado e executado? 
 
int main(){ 
 int i, j, k=1, mat[4][4]; 
 for(i=0; i<4; i++) 
 for(j=0; j<4; j++){ 
 mat[i][j]=k; 
 k++; 
 } 
 
 for(i=0; i<4; i++) 
 for(j=2; j<4; j++) 
 if(i%j == 0) 
 printf("%d; ",mat[j][i]); 
 return 0; 
} 
 
a) 1; 3; 5; 7; 11 
b) 3; 6; 9; 12; 15 
c) 9; 13; 11; 16 
d) 1; 5; 10; 15 
e) 10 
 
Comentários: 
 
O código acima apresenta um programa em linguagem de programação C. O programa cria uma matriz de 
inteiros de tamanho 4x4 e preenche cada elemento com um valor sequencial a partir de 1. Em seguida, é 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
91
180
feita uma verificação em um laço de repetição em que, se a variável i for divisível por j, onde j é um valor 
entre 2 e 3, é impresso o valor do elemento da matriz correspondente à linha j e coluna i. Como i varia de 0 
a 3 e só é impresso o valor do elemento da matriz quando i é divisível por j (sendo j um número primo), 
apenas alguns elementos da matriz serão impressos. Neste caso, serão impressos os valores 9, 13, 11 e 16. 
Portanto, a resposta correta é a alternativa c) 9; 13; 11; 16. 
Gabarito: Letra C 
 
35. (IDECAN – UNIVASF – 2019) Dado o seguinte código fonte na linguagem C: 
 
#include <stdio.h> 
#include <unistd.h> 
 
int main() { 
 int i; 
 for (i = 0; i < 4; i++) { 
 if (i % 2 == 0) { 
 fork(); 
 } 
 } 
 return 0; 
} 
Assinale a alternativa que indica corretamente, incluindo o processo pai inicial, quantos processos são 
criados pelo programa mostrado no código após compilação com o compilador GCC e execução na linha 
de comando. 
 
a) 5 
b) 4 
c) 3 
d) 2 
e )1 
 
 
Comentários: 
 
O código em questão cria processos filhos a partir de um processo pai utilizando a função fork(), que cria um 
novo processo. No loop for, a cada iteração, é verificado se i é um número par, caso seja, é chamada a função 
fork(), criando um novo processo filho que passa a ser executado em paralelo com o processo pai. O número 
de processos criados depende do número de iterações do loop e das condições definidas dentro do mesmo. 
Neste caso, são criados 4 processos (incluindo o processo pai inicial), já que o loop executa 4 vezes e a 
condição para criar um processo é que o valor de i seja par. 
 
Caso queira uma explicação mais detalhada, siga em frente, se já entendeu de forma suficiente, vá para a 
próxima questão. Quer entender mais? Então vamos lá: Ao iniciar a execução do programa, a variável i é 
inicializada com 0 e, em seguida, o loop é executado quatro vezes. Na primeira iteração, o valor de i é 0 e o 
resultado da expressão i % 2 é 0, portanto, o processo pai cria um novo processo filho usando a função fork(). 
Esse novo processo filho também continua a executar o mesmo loop for. Na segunda iteração, o valor de i é 
1 e o resultado de i % 2 é 1, então o processo pai não cria um novo processo filho. No entanto, o processo 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
92
180
filho criado na primeira iteração continua a executar o mesmo loop for. Na terceira iteração, o valor de i é 2 
e o resultado de i % 2 é 0, portanto, tanto o processo pai quanto o processo filho criado na primeira iteração 
criam um novo processo filho cada usando a função fork(). Ambos os processos filhos criados também 
executam o mesmo loop for. Na última iteração, o valor de i é 3 e o resultado de i % 2 é 1, portanto, o 
processo pai e o processo filho criado na segunda iteração não criam um novo processo filho. O primeiro 
processo filho criado na primeira iteração cria um novo processo filho e continua a executar o loop for, 
enquanto os outros dois processos filhos criados na terceira iteração executam o loop for. Assim, no final, 
serão criados 4 processos filhos em total, cada um executando o loop for a partir do ponto em que foi criado. 
 
Gabarito: Letra B 
 
36. (FCC – TRF - 3ª REGIÃO – 2019) Em C++, a chamada de uma função provoca o desvio do controle de 
execução para o iníciodo código da função. Quando do seu término, o controle de execução volta para 
a instrução seguinte à sua chamada. Funções poupam espaço de memória, mas requerem mais tempo 
de execução. Se houver uma função muito pequena em relação à quantidade de instruções, em seu lugar 
utiliza-se 
 
a) DO WHILE. 
b) INCLUDE. 
c) PERFORM 
d) INLINE. 
e) DO UNTIL. 
 
 
Comentários: 
 
Em C++, se uma função for muito pequena em relação à quantidade de instruções, pode-se utilizar a diretiva 
inline para indicar ao compilador que o código da função deve ser "inserido" diretamente no local em que a 
função é chamada, evitando assim a sobrecarga de chamada de função e aumentando o desempenho do 
programa. A opção correta é a letra D. 
 
Gabarito: Letra D 
 
37. (COMPERVE – UFRN – 2019) O chefe do departamento de TI da Security10 enviou para João, por e-mail, 
o programa simples em linguagem C, mostrado abaixo, com intuito de aferir os conhecimentos do novo 
contratado sobre segurança de software. 
 
L1. void LerParametros (char *arg); 
L2. void main (int argc, char *argv[]) { 
L3. if (arg > 1){ 
L4. printf ("Parametros informados: %s\n", argv[1]); 
L5. LerParametros (argv[1]); 
L6. } 
L7. } 
L8. void LerParametros (char *arg) { 
L9. char buffer[10]; 
10. strcpy (buffer, arg); 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
93
180
L11. printf (buffer); 
L12. } 
 
 
Junto ao código, estava a mensagem: “João, por favor, verifique esse código. Sei que estamos fazendo 
algo errado e, com isso, expondo uma vulnerabilidade de segurança comum em programação, mas não 
consigo perceber qual. Falamos mais sobre isso na segunda”. João, ao analisar o código enviado, concluiu 
que esse apresenta como vulnerabilidade 
 
a) uma Falha de Segmentação (do inglês, Segmentation Fault) na linha L5. 
b) uma Falha de Segmentação (do inglês, Segmentation Fault) na linha L4. 
c) um Estouro de buffer (do inglês, Buffer Overflow) na linha L9. 
d) um Estouro de buffer (do inglês, Buffer Overflow) na linha L10. 
 
Comentários: 
 
A vulnerabilidade presente no código é o Estouro de buffer (Buffer Overflow) na linha L10. Isso ocorre porque 
a função strcpy() copia a string de argumento para o buffer sem verificar se a string cabe no buffer. Se a 
string de argumento for maior que o buffer (no caso, 10 caracteres), haverá um estouro de buffer e o 
comportamento do programa se torna indefinido, podendo levar a erros de segmentação, execução de 
código malicioso e outros problemas de segurança. Para corrigir essa vulnerabilidade, é necessário verificar 
o tamanho da string de argumento antes de copiá-la para o buffer. Uma solução seria usar a função strncpy(), 
que permite definir o tamanho máximo de cópia. 
Gabarito: Letra D 
 
38. (IF-MT – IF-MT – 2019) Analise o trecho de código escrito na linguagem C apresentado a seguir: 
 
#include <stdio.h> 
 
int main(void) { 
 int c, *x1, *x2; 
 x1 = &c; 
 x2 = x1; 
 printf("%p\n", x1); 
 printf("%p\n", x2); 
 return 0; 
} 
 
É CORRETO afirmar que: 
 
a) Sua execução apresentará uma mensagem de erro. 
b) O código possui erros léxicos e sintáticos. 
c) A sua execução apresentará na tela o resultado: %p\nx1 %p\nx2. 
d) A sua execução apresentará dois valores iguais. 
e) A sua execução não apresentará mensagens ou resultados. 
 
Comentários: 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
94
180
 
O trecho de código apresentado não possui erros léxicos ou sintáticos e sua execução imprimirá na tela dois 
valores iguais, que representam o endereço de memória da variável 'c', que foi atribuído aos ponteiros 'x1' 
e 'x2'. O código apresentado cria três variáveis: um inteiro c, e dois ponteiros para inteiros x1 e x2. Em 
seguida, o ponteiro x1 é inicializado com o endereço de memória da variável c, através do operador "&". O 
ponteiro x2 é atribuído com o valor do ponteiro x1, ou seja, ambos os ponteiros apontam para o mesmo 
endereço de memória. Por fim, são impressos na tela os valores dos ponteiros x1 e x2, utilizando o 
especificador de formato "%p", que imprime o valor do ponteiro como um endereço hexadecimal na 
memória. Como ambos os ponteiros apontam para o mesmo endereço, a impressão dos dois valores será 
igual, resultando na impressão de dois endereços de memória iguais na tela. Caso você tenha alguma dúvida 
em relação ás demais alternativas, vamos analisar cada uma delas. a) A alternativa (a) afirma que a execução 
do código apresentará uma mensagem de erro, o que não é verdade. O código está correto e não apresenta 
nenhum erro durante a sua execução. b) A alternativa (b) afirma que o código possui erros léxicos e 
sintáticos, o que também não é verdade. O código está escrito de forma correta e pode ser compilado sem 
problemas. c) A alternativa (c) afirma que a execução do código apresentará na tela o resultado: %p\nx1 
%p\nx2, o que não é verdade. O código usa a função printf para imprimir o valor dos ponteiros, mas a saída 
correta seria apresentar dois endereços de memória diferentes, e não a string "%p\nx1 %p\nx2". e) A 
alternativa (e) afirma que a execução não apresentará mensagens ou resultados, o que não é verdade. A 
função printf é usada para imprimir os valores dos ponteiros na tela. 
 
Gabarito: Letra D 
 
39. (IF-MT – IF-MT – 2019) Considere o trecho de código escrito na linguagem C apresentado a seguir: 
 
#include <stdio.h> 
 
int MinhaFuncao(int a, int b) { 
 return a/**//b; 
} 
 
int main() { 
 printf("%d", MinhaFuncao (2,3)); 
 return 1; 
} 
 
Assinale a alternativa que apresenta o resultado da sua execução: 
 
a) 1.5 
b) 0.66667 
c) 0 
d) 1 
e) 8 
 
Comentários: 
 
O resultado da execução do código apresentado será "0". Isso ocorre porque a função "MinhaFuncao" realiza 
uma divisão entre dois inteiros utilizando o operador "/", que retorna o resultado da divisão inteira. No caso 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
95
180
em questão, 2 dividido por 3 resulta em 0,66, que arredondado para o inteiro mais próximo resulta em 0. 
Assim, a função retorna 0, que é impresso pelo printf no main. 
 
Gabarito: Letra C 
 
40. (COMPERVE – UFRN – 219) A linguagem de programação C está entre as linguagens de programação 
mais utilizadas para desenvolvimento de bibliotecas e sistemas operacionais pelas suas características de 
portabilidade e desempenho. É uma linguagem baseada em ponteiros que possui diversas formas de 
acesso ao conteúdo da memória. Dada uma matriz A com n colunas armazenada continuamente na 
memória, a lista de expressões que contém formas equivalentes de acesso ao mesmo conteúdo da 
memória é 
 
a) A[i][j], (&A+i*n+j), e A[i*n+j]. 
b) A[i][j], &(A+i*n*j), e A[i*n*j]. 
c) A[i][j], (*A+i*n*j), e A[i*n*j]. 
d) A[i][j], *(A+i*n+j), e A[i*n+j]. 
 
Comentários: 
 
A lista de expressões equivalentes é A[i][j], (A+in+j), e A[in+j]. A primeira expressão A[i][j] é a forma mais 
comum de acesso a um elemento da matriz. A segunda expressão (A+in+j) utiliza aritmética de ponteiros 
para acessar o elemento (i,j) da matriz A. Finalmente, a terceira expressão A[in+j] é uma forma alternativa, 
mas equivalente, de acessar o mesmo elemento usando aritmética de índices. 
 
Gabarito: Letra D 
 
41. (FCC – TRF - 4ª REGIÃO – 2019) As linguagens de programação 
 
a) como Java e C# têm seus códigos fontes transformados em uma linguagem intermediária (específica 
de cada linguagem), que será interpretadapela máquina virtual da linguagem quando o programa for 
executado. 
 
b) como C e Ruby são compiladas estaticamente e seus códigos-fontes são transformados diretamente 
em linguagem de montagem ou assembler. 
 
c) do tipo script como VBScript e Lua são utilizadas em aplicações web. No caso de sites do WordPress, 
por exemplo, os desenvolvedores criam plug-ins e usam o VB para solicitar o conteúdo. O código é 
executado como HTML, permitindo que os visitantes do site visualizem o conteúdo em seus navegadores. 
 
d) orientadas a objeto são todas compiladas e não interpretadas, por isso são consideradas de baixo 
nível, sendo as mais utilizadas para programação de sistemas embarcados ou aplicações que exijam 
acesso direto a registros da memória. 
 
e) interpretadas têm seu código-fonte traduzido por um programa tradutor ou assembly, que em seguida 
é executado pelo sistema operacional. Um exemplo disso é o Bytecode, que é uma linguagem que passa 
pelo processo de interpretação e, em seguida, é executada por um compilador. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
96
180
Comentários: 
 
Linguagens de programação como Java e C# utilizam um processo de compilação em duas etapas, em que o 
código-fonte é primeiro compilado para uma linguagem intermediária (Java bytecode e CIL, 
respectivamente), que é interpretada pela máquina virtual da linguagem quando o programa é executado. 
Esse processo é conhecido como compilação just-in-time (JIT). Essa abordagem oferece várias vantagens, 
como a portabilidade do código-fonte, já que a máquina virtual é executada em diferentes sistemas 
operacionais, e a segurança, já que a máquina virtual isola o programa do sistema operacional hospedeiro. 
Vejamos as demais alternativas. B) Em linguagens de programação como C e Ruby, o código-fonte é 
compilado diretamente para linguagem de máquina ou código de montagem (assembler). Essa abordagem 
é conhecida como compilação estática. O código gerado é específico para a plataforma em que a compilação 
ocorre e, portanto, não é portátil. C) Linguagens de script, como VBScript e Lua, podem ser utilizadas em 
aplicações web, mas o exemplo dado na alternativa não é preciso. Os plugins para o WordPress, por exemplo, 
geralmente são escritos em PHP e não em VBScript. O VBScript é uma linguagem de script da Microsoft que 
é executada em ambientes Windows. Além disso, o código em linguagens de script é interpretado, não 
compilado. D) Linguagens orientadas a objetos, como Java e C++, podem ser compiladas ou interpretadas, 
dependendo da implementação. Elas não são consideradas de baixo nível, já que o paradigma de 
programação orientada a objetos é relativamente alto nível e abstrato. Sistemas embarcados geralmente 
usam linguagens de baixo nível, como C ou Assembly. E) Linguagens interpretadas, como Python e Ruby, são 
traduzidas para código de máquina em tempo de execução por um programa chamado interpretador. O 
bytecode mencionado na alternativa é uma forma intermediária de código gerado por algumas linguagens 
interpretadas, como Java e Python. O bytecode é então interpretado pelo interpretador da linguagem para 
executar o programa. 
 
Gabarito: Letra A 
 
42. (NC-UFPR – ITAIPU BINACIONAL – 2019) Considere o programa abaixo: 
 
Assinale a alternativa que indica corretamente a quantidade de vezes que a palavra “prova” será 
impressa: 
 
#include <stdio.h> 
 
int main() { 
 printf("prova"); 
 main(); 
 return 10; 
} 
 
a) nenhuma. 
b) infinitas vezes. 
c) uma vez. 
d) dez vezes. 
e) será impressa continuamente até que ocorra o estouro da pilha. 
 
Comentários: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
97
180
A resposta correta é a letra E. O programa apresenta uma chamada recursiva infinita da função main(), o que 
fará com que a string "prova" seja impressa continuamente até que ocorra o estouro da pilha de execução. 
Essa é uma situação conhecida como "stack overflow". O retorno return 10 não será alcançado. 
 
Gabarito: Letra E 
 
43. (NC-UFPR – ITAIPU BINACIONAL – 2019) Um programador escreve o programa abaixo e tenta compilar 
e executar. 
 
#include "stdio.h" 
 
int main() { 
 int i; 
 goto LOOP; 
 for (i = 0; i < 10; i++) { 
 printf("sucesso"); 
 LOOP: break; 
 } 
 return 0; 
} 
 
Assinale a alternativa que indica corretamente o que deve ocorrer: 
 
a) O programa não compila. 
b) O programa compila com sucesso, mas não imprime nada quando executado. 
c) O programa compila com sucesso, e quando executado imprime “sucesso” uma vez. 
d) O programa compila com sucesso, mas apresentará erro de execução. 
e) O programa compila com sucesso, e quando executado imprime “sucesso” dez vezes. 
 
Comentários: 
 
O programa compila com sucesso, mas não imprime nada quando executado, pois a instrução goto LOOP 
redireciona a execução do programa para a label LOOP que está logo abaixo, e a instrução break dentro do 
laço de repetição faz com que ele saia imediatamente, sem executar o printf. Portanto, o laço de repetição 
é executado apenas uma vez, e depois o programa é finalizado sem imprimir nada. 
 
Gabarito: Letra B 
 
44. (NC-UFPR – ITAIPU BINACIONAL – 2019) Considere o programa abaixo, escrito em linguagem C: 
 
#include <stdio.h> 
 
int i, j, k; 
 
int main() { 
 for (i = 0, j = 1, k = 2; i < k; i++) { 
 } 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
98
180
 k = k + i % 2; 
 printf("%d,%d,%d", i, j, k); 
 return 0; 
} 
 
Assinale a alternativa que indica o que será impresso por esse programa. 
 
a) 0, 1, 2 
b) 1, 2, 3 
c) 3, 1, 3 
d) 3, 2, 1 
e) 3, 1, 2 
 
Comentários: 
 
A condição do loop é i<k, e como inicialmente k=2 e i=0, o loop não será executado nenhuma vez. Em seguida, 
k é atualizado para k+i%2, que é igual a 2+0%2, resultando em k=2. Por fim, é impresso o valor de i, j e k, que 
são respectivamente 0, 1 e 3. Portanto, a alternativa correta é a letra C. 
Gabarito: Letra C 
 
45. (IF-SP – IF-SP – 2019) Nas linguagens de programação Java e C++, o polimorfismo paramétrico é 
materializado, respectivamente, pelas funcionalidades e/ou características: 
 
a) Genéricos e Templates. 
b) Genéricos e Sobrecarga de Operadores. 
c) Sobrecarga e Templates. 
d) Anotações e Sobrescrita. 
 
Comentários: 
 
Vamos analisar cada alternativa: A) Genéricos e Templates: em Java, o polimorfismo paramétrico é 
implementado através do recurso de "genéricos", que permite criar classes e métodos que possam ser 
usados com tipos diferentes de objetos, sem a necessidade de criar várias versões da mesma classe ou 
método. Em C++, o polimorfismo paramétrico é implementado através de "templates", que permitem criar 
classes e funções genéricas que possam ser usadas com diferentes tipos de dados. B) Genéricos e Sobrecarga 
de Operadores: a sobrecarga de operadores permite que um mesmo operador tenha comportamentos 
diferentes dependendo dos tipos de dados que estão sendo usados. Isso permite criar funções genéricas que 
possam ser aplicadas a diferentes tipos de dados. Em Java, a sobrecarga de operadores não é suportada, mas 
os genéricos podem ser usados para criar funções genéricas. Em C++, a sobrecarga de operadores é 
suportada e pode ser combinada com templates para criar funções genéricas que trabalham com diferentes 
tipos de dados. C) Sobrecarga e Templates: a sobrecarga permite criar funções e métodos com o mesmo 
nome,mas com comportamentos diferentes, dependendo dos parâmetros que são passados. Isso permite 
criar funções genéricas que possam ser usadas com diferentes tipos de dados. Em Java, a sobrecarga é 
suportada, mas os genéricos são a principal ferramenta para criar funções genéricas. Em C++, a sobrecarga 
é suportada e pode ser combinada com templates para criar funções genéricas que trabalham com 
diferentes tipos de dados. D) Anotações e Sobrescrita: a sobrescrita (ou "override") é uma técnica que 
permite que uma classe filha substitua um método da classe pai, mantendo o mesmo nome, mas com 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
99
180
comportamento diferente. Isso não tem relação direta com o polimorfismo paramétrico. Já as anotações são 
utilizadas em Java para adicionar metadados a classes e métodos, o que pode ser útil em alguns casos, mas 
não está diretamente relacionado com o polimorfismo paramétrico. Em C++, não há suporte para anotações. 
 
Gabarito: Letra A 
 
46. (FAURGS – UFCSPA - RS – 2018) Analise o trecho de código abaixo, escrito em C++. 
 
class classe_base { 
private: 
 int a; 
 float x; 
protected: 
 int b; 
 float y; 
public: 
 int c; 
 float z; 
}; 
 
class subclasse_1 : public classe_base {...}; 
 
class subclasse_2 : private classe_base {...}; 
 
class subclasse_3 : private classe_base {...}; 
Com base nesse código, é correto afirmar que 
 
a) na subclasse_1 os atributos b e y são protegidos. 
b) na subclasse_1 os atributos c e z são privados. 
c) na subclasse_2 os atributos b e y são públicos. 
d) na subclasse_2 os atributos c e z são protegidos. 
e) as instâncias da subclasse_3 podem acessar o atributo c. 
 
Comentários: 
 
Na subclasse_1, a classe derivada herdou a classe base com a palavra-chave "public". Isso significa que os 
membros públicos e protegidos da classe base serão herdados como protegidos pela subclasse. Portanto, a 
subclasse_1 terá os atributos b e y protegidos. As demais afirmativas estão incorretas: Na subclasse_1, os 
atributos c e z são públicos. Na subclasse_2, os atributos da classe base serão privados. Na subclasse_3, os 
atributos da classe base serão privados, e as instâncias da subclasse_3 não podem acessar o atributo c 
diretamente. 
Gabarito: Letra A 
 
47. (COTEC – Câmara de Rio Pardo de Minas - MG – 2018) Analise o código a seguir, escrito na linguagem 
de programação C. 
 
#include <stdio.h> 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
100
180
 
void sub(int *x, int y){ 
 *x = 3; 
 y = *x + 1; 
} 
 
int main() { 
 int a, b, z; 
 a = 1; 
 b = 2; 
 sub(&a,b); 
 z = a + b; 
 printf("%d",z); 
 return 0; 
} 
 
O valor de Z, a ser mostrado na saída padrão, é: 
 
a) 3. 
b) 4. 
c) 5. 
d) 7. 
 
Comentários: 
 
No código, a função sub é chamada com o endereço da variável a e o valor da variável b como parâmetros. 
Dentro da função sub, o valor do inteiro apontado pelo ponteiro x é definido como 3, mas o valor de y 
passado como parâmetro não é afetado. Em seguida, no main, a variável z é definida como a soma de a (que 
agora tem valor 3) e b (que mantém seu valor original de 2), resultando em z igual a 5. Por fim, o valor de z 
é impresso na tela com o comando printf("%d", z);. 
 
Gabarito: Letra C 
 
48. (INSTITUTO AOCP – ITEP - RN – 2018) Em C++, como se denomina um conjunto de funções que 
compartilha um mesmo nome, porém contendo um código independente em cada uma? 
 
a) Redundância. 
b) Objeto. 
c) Encapsulamento. 
d) Polimorfismo. 
e) Herança. 
 
Comentários: 
 
A resposta correta é D - Polimorfismo. Em C++, um conjunto de funções que compartilha o mesmo nome, 
mas possui um código independente em cada uma, é conhecido como funções polimórficas. O polimorfismo 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
101
180
é uma técnica que permite que objetos de diferentes classes sejam tratados como se fossem do mesmo tipo, 
e é um dos pilares da programação orientada a objetos. 
 
Gabarito: Letra D 
 
49. (INSTITUTO AOCP – ITEP - RN – 2018) Na linguagem C++, qual é a palavra-chave utilizada para a criação 
de novos tipos de dados? 
 
a) setw. 
b) while. 
c) struct. 
d) #include. 
e) #define. 
 
Comentários: 
 
A resposta correta é a alternativa "c) struct". A palavra-chave "struct" é utilizada na linguagem C++ para a 
criação de novos tipos de dados definidos pelo usuário. Com ela, é possível definir uma estrutura de dados 
contendo vários campos, cada um com seu próprio tipo. Essa estrutura pode ser usada para criar objetos do 
tipo definido pela estrutura, permitindo assim que o programador crie tipos de dados mais complexos e 
adaptados às suas necessidades. As outras alternativas apresentadas na questão são: 
 
a) "setw" é uma função da biblioteca padrão que permite definir a largura do campo de impressão em saídas 
formatadas para a tela ou arquivo. 
 
b) "while" é uma palavra-chave utilizada na linguagem C++ para implementar laços de repetição enquanto 
uma determinada condição é verdadeira. 
 
d) "#include" é uma diretiva do pré-processador que permite incluir o conteúdo de um arquivo de cabeçalho 
em um programa C++. 
 
e) "#define" é uma diretiva do pré-processador que permite definir uma constante ou um macro em um 
programa C++. 
Gabarito: Letra C 
 
50. (INSTITUTO AOCP – ITEP - RN – 2018) Qual das alternativas a seguir apresenta somente tipos de dados 
básicos da linguagem C? 
 
a) char, int e float. 
b) string, double e int. 
c) boolean, string e float. 
d) char, boolean e int. 
e) string, float e int. 
 
Comentários: 
 
A resposta correta é a alternativa a) char, int e float. Os tipos de dados básicos da linguagem C são: 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
102
180
 
• char: tipo que representa caracteres. 
• int: tipo que representa números inteiros. 
• float: tipo que representa números de ponto flutuante de precisão simples. 
 
As outras alternativas apresentam pelo menos um tipo de dado que não é considerado básico na linguagem 
C: 
 
b) string: não é um tipo de dado básico na linguagem C, mas pode ser representado utilizando um array de 
caracteres. 
c) boolean e string: a linguagem C não possui um tipo de dado booleano nativo, e string também não é um 
tipo básico. 
d) boolean: como mencionado anteriormente, a linguagem C não possui um tipo de dado booleano nativo. 
e) string: novamente, string não é um tipo de dado básico na linguagem C. 
Portanto, apenas a alternativa a) apresenta somente tipos de dados básicos da linguagem C. 
 
Gabarito: Letra A 
 
51. (INSTITUTO AOCP – ITEP - RN – 2018) Em relação às principais caraterísticas da linguagem C, assinale a 
alternativa correta. 
 
a) Por ser uma linguagem de alto nível, não permite a manipulação de bits, bytes e endereços. 
b) Os códigos em C desenvolvidos para um determinado tipo de sistema operacional não são portáveis 
para outro sistema. Em outras palavras, a linguagem C não possui portabilidade. 
c) A linguagem C é estruturada em blocos, de modo que permite a criação de funções dentro de funções. 
d) A linguagem C permite a compartimentalização de código, escondendo do resto do programa as 
informações necessárias para realizaruma tarefa específica. 
e) É uma linguagem orientada a objeto. 
 
Comentários: 
 
a) ERRADO. A linguagem C permite a manipulação de bits, bytes e endereços, por isso é comumente utilizada 
em programação de sistemas embarcados e de baixo nível. 
b) ERRADO. Embora a portabilidade possa ser um problema em alguns casos, a linguagem C é conhecida por 
sua alta portabilidade, o que significa que o mesmo código pode ser compilado e executado em diferentes 
plataformas e sistemas operacionais. 
c) ERRADO. A linguagem C não permite a criação de funções dentro de outras funções, já que a função tem 
que ser declarada antes ou depois do escopo principal (main) do programa. 
d) CORRETO. Uma das principais características da linguagem C é a capacidade de dividir o código em funções 
e módulos, permitindo a criação de bibliotecas e a reutilização de código. Isso facilita a manutenção do 
código e torna o programa mais modular e organizado. 
e) ERRADO. A linguagem C não é uma linguagem orientada a objetos, embora possa ser usada para 
programação orientada a objetos com a utilização de bibliotecas e estruturas de dados personalizadas. 
 
Gabarito: Letra D 
 
52. (IBADE – IPM - JP – 2018) Considere o seguinte programa escrito na linguagem C 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
103
180
 
#include <stdio.h> 
main () 
{char ex3[5]={'z','k','w','x','v'}; 
int cont1; 
cont1=2; 
printf ("%c %c",ex3[cont1+1], ex3[4]+cont1);} 
 
Ao executar esse programa, é apresentado como resposta: 
 
a) w w 
b) w x 
c) w v 
d) x x 
e) x v 
 
Comentários: 
 
O programa declara um array de caracteres "ex3" com tamanho 5 e preenche com as letras z, k, w, x, v. Em 
seguida, é declarada uma variável inteira "cont1" e é atribuído o valor 2. Na linha seguinte, é impresso o 
conteúdo da posição "cont1+1" do array "ex3", que é o elemento de índice 3 (w). Na segunda parte do 
comando printf é impressa a soma do elemento de índice 4 do array "ex3" (v) com o valor de "cont1" (2), 
resultando na letra x. Portanto, a resposta correta é a letra B: "w x". 
Gabarito: Letra D 
 
53. (IBADE – Câmara de Cacoal - RO– 2018) Considere o seguinte programa escrito na linguagem C 
 
#include <stdio.h> 
 
int main() { 
 int g=0,i=0,l=0,k=0; 
 int m,n,o; 
 
 while (i<=10) { 
 m=g++; 
 n=+l; 
 o=++k; 
 i++; 
 } 
 printf (" m=%d n=%d o=%d ", m,n,o); 
 return 0; 
} 
 
Ao executar esse programa, os valores finais de ,e são respectivamente: 
 
a) 10 0 11 
b) 10 0 12 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
104
180
c) 10 10 11 
d) 11 0 11 
e) 11 10 12 
 
Comentários: 
 
O programa apresentado define algumas variáveis inteiras e inicia cada uma delas com zero. Em seguida, um 
loop while é iniciado, e a cada iteração, as variáveis m, n e o recebem valores de expressões que contêm as 
variáveis g, l e k. m recebe o valor de g pós-incrementado, enquanto n recebe o valor de l sem alteração. Já 
o recebe o valor de k pré-incrementado. O loop while é executado enquanto i for menor ou igual a 10, e a 
cada iteração o valor de i é incrementado. No final do programa, é chamada a função printf para exibir os 
valores finais das variáveis m, n e o. Como g é pós-incrementado a cada iteração do loop, m receberá o valor 
de 10, já que a última atribuição a g é feita quando i é igual a 10. Como n recebe sempre o valor de l, que é 
zero em todas as iterações, n será igual a 0. Já o recebe o valor de k pré-incrementado a cada iteração, por 
isso será igual a 11 no final do loop. Portanto, a resposta correta é a alternativa A: 10 0 11. 
 
Gabarito: Letra A 
 
54. (IBFC – Prefeitura de Divinópolis - MG – 2018) Referente à linguagem de programação C++, uma de suas 
características marcantes é a existência de: 
 
a) encapsulamento triplo 
b) herança múltipla 
c) polimorfismo duplo 
d) abstração complexa 
 
Comentários: 
 
Uma das principais características marcantes da linguagem de programação C++ é a herança múltipla, que 
permite a uma classe herdar características de mais de uma classe base. Isso pode tornar o código mais 
flexível e reutilizável, mas também pode tornar a hierarquia de classes mais complexa e difícil de entender. 
O encapsulamento é outra característica importante do C++, que permite que os dados sejam ocultados de 
outras partes do programa para evitar conflitos e garantir a segurança dos dados. O polimorfismo permite 
que objetos de diferentes classes sejam tratados de maneira semelhante, independentemente de suas 
diferenças de implementação. A abstração é uma característica mais ampla que se aplica a muitas linguagens 
de programação, incluindo o C++, e envolve a capacidade de simplificar e generalizar o código para torná-lo 
mais fácil de entender e trabalhar. 
Gabarito: Letra B 
 
55. (COPESE – UFPI – 2018) Analise as assertivas a seguir sobre as linguagens de programação C, C++, Python 
e Java. 
 
I. A linguagem Python é uma linguagem interpretada e imperativa; 
 
II. Java, assim como C++, é um exemplo de linguagem que segue o paradigma de orientação a objetos; 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
105
180
III. O identificador % é utilizado para identificar um comentário que utiliza somente uma linha em um 
programa escrito na linguagem C; 
 
IV. A linguagem de programação JAVA não fornece suporte à criação de tipos definidos pelo usuário. 
 
Assinale a opção referente às assertivas CORRETAS. 
 
a) Está correta somente a assertiva I. 
b) Estão corretas somente as assertivas I e III. 
c) Estão corretas somente as assertivas I e II. 
d) Estão corretas somente as assertivas III e IV. 
e) Estão corretas somente as assertivas II e IV. 
 
Comentários: 
 
A assertiva I está correta, pois Python é uma linguagem de script interpretada e imperativa. 
 
A assertiva II está correta, pois tanto Java quanto C++ são linguagens de programação orientadas a objetos. 
 
A assertiva III está incorreta, pois em C, o identificador para comentários que ocupam uma linha é //, 
enquanto % é utilizado em formatação de saída de dados com a função printf. 
 
A assertiva IV está incorreta, pois Java permite a criação de tipos definidos pelo usuário por meio de classes 
e interfaces. 
Gabarito: Letra C 
 
56. (FAPEC – UFMS – 2018) Considere o código a seguir escrito na linguagem C. 
 
#include <stdio.h> 
int main() 
{ 
 printf ("Valor total: %.1f\n", 9.1415169265); 
 return 0; 
} 
 
Assinale a alternativa que apresenta a saída correta. 
 
a) Valor total: 9.141517 
b) Valor total: 9.1 
c) Valor total: 9.14 
d) Valor total: 9.142 
e) Valor total: 9.141517e+00 
 
Comentários: 
 
A resposta correta é a letra B: Valor total: 9.1. A formatação %.1f indica que apenas um dígito após a vírgula 
deve ser exibido. No número 9.1415169265, o dígito seguinte ao 1 é o 5, que é maior ou igual a 5, portanto, 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
106
180
ocorre o arredondamento para 9.2. No entanto, como foi especificado apenas um dígito após a vírgula, o 
resultado final é 9.1. 
Gabarito: Letra B 
 
57. (FAPEC – UFMS – 2018) Considere as afirmações sobre a linguagem C. 
 
I - É considerada uma linguagem fortemente tipada. 
 
II - É uma linguagemorientada a objetos. 
 
III - A função scanf é utilizada para ler dados da entrada padrão. 
 
Está(ão) correta(s): 
 
a) Apenas I. 
b) Apenas II. 
c) Apenas I e III. 
d) Apenas II e III. 
e) I, II e III. 
 
Comentários: 
 
A assertiva I está correta, pois a linguagem C é considerada uma linguagem fortemente tipada, o que significa 
que o tipo das variáveis deve ser definido antes de serem utilizadas e não podem ser implicitamente 
convertidas para outros tipos. A assertiva II está incorreta, pois a linguagem C não é orientada a objetos, 
embora permita a programação estruturada. A assertiva III está correta, pois a função scanf é utilizada para 
ler dados da entrada padrão, como teclado, e armazená-los nas variáveis correspondentes. 
 
Gabarito: Letra C 
 
58. (UFTM – UFTM – 2018) Aponte, dentre as alternativas, os resultados da resolução da seguinte expressão 
lógica escrita na linguagem C, para os valores de A, B e C, definidos nos cenários I, II e III: 
 
(A &&B ) && ((C || A || B) || ( !A && C)) 
 
I: A=true, B=true, C=false 
II: A=false, B=true, C=true 
III: A=false, B=true, C=false 
 
a) I: true, II: false, III: false. 
b) I: true, II: true, III: false. 
c) I: false, II: false, III: false. 
d) I: false, II: true, III: false. 
 
Comentários: 
 
Para o cenário I temos: 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
107
180
 
(A && B) && ((C || A || B) || (!A && C)) 
(true && true) && ((false || true || true) || (!true && false)) 
true && true 
true 
 
Para o cenário II temos: 
 
(A && B) && ((C || A || B) || (!A && C)) 
(false && true) && ((true || false || true) || (!false && true)) 
false && true 
false 
 
Para o cenário III temos: 
 
(A && B) && ((C || A || B) || (!A && C)) 
(false && true) && ((false || false || true) || (!false && false)) 
false && true 
false 
 
Logo, a alternativa correta é a A. 
Gabarito: Letra A 
 
59. (UFTM – UFTM – 2018) Considere o trecho de código em C abaixo: 
 
#include <stdio.h> 
 
void troca(int a, int b) { 
 int temp = a; 
 a = b; 
 b = temp; 
} 
 
int calcula(int a, int b, int *c) { 
 *c = a - b; 
 return a * (b + 1); 
} 
 
int main() { 
 int x, y, w, z; 
 x = 5; 
 y = 4; 
 troca(x, y); 
 z = calcula(x, y, &w); 
 printf("%d,%d", w, z); 
 return 0; 
} 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
108
180
 
O que será exibido no console, quando a função main for executada? 
 
a) 1,25 
b) -1,24 
c) 1,24 
d) -1,25 
 
Comentários: 
 
No trecho de código fornecido, a função "troca" não está realizando a troca de fato, pois os parâmetros são 
passados por valor e não por referência. Portanto, as variáveis x e y na função main permanecem inalteradas. 
Em seguida, a função "calcula" é chamada com x=5 e y=4 e um ponteiro para a variável w é passado como 
terceiro argumento. Dentro da função "calcula", é calculado o valor de a-b e armazenado na posição de 
memória apontada por c (ou seja, na variável w na função main), e o valor a*(b+1) é retornado e armazenado 
em z na função main. Por fim, são impressos os valores de w e z separados por vírgula. Como a=5 e b=4, 
temos que c=a-b=1 e a*(b+1)=5*5=25. Portanto, os valores impressos serão "1,25". 
 
Gabarito: Letra A 
 
60. (UFES – UFES – 2018) Analise o trecho de código C++ abaixo. 
#include <stdio.h> 
 
class MinhaClasse { 
private: 
 int a; 
 
public: 
 MinhaClasse(int b) { 
 a = b; 
 ImprimeA(); 
 } 
 
 ~MinhaClasse() { 
 IncrementaA(); 
 ImprimeA(); 
 } 
 
 void IncrementaA() { 
 a++; 
 } 
 
 void ImprimeA() { 
 printf("[%d]", a); 
 } 
}; 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
109
180
int main() { 
 MinhaClasse *mClasseD = new MinhaClasse(1); 
 MinhaClasse mClasseE(10); 
 return 0; 
} 
 
Considerando os conceitos de gerenciamento dinâmico de memória, o código C++ acima imprimirá na 
saída padrão: 
a) [1][10][11][2] 
b) [1][10][2][11] 
c) [1][10][11] 
d) [1][10][2] 
e) [1][10] 
 
Comentários: 
 
A resposta correta é a alternativa C: "[1][10][11]". Isso porque o código cria duas instâncias da classe 
MinhaClasse: uma através da alocação dinâmica de memória com o operador new e outra na pilha de 
execução da função main(). A primeira instância criada, mClasseD, é criada com o construtor que recebe o 
parâmetro int b com valor 1. Ao imprimir o valor de a, é exibido "[1]". Em seguida, é chamado o destrutor da 
classe MinhaClasse, que incrementa o valor de a para 2 e imprime "[2]". A segunda instância criada, 
mClasseE, é criada na pilha de execução da função main() com o construtor que recebe o parâmetro int b 
com valor 10. Ao imprimir o valor de a, é exibido "[10]". Quando a função main() termina, o destrutor de 
mClasseE é chamado automaticamente, incrementando o valor de a para 11 e imprimindo "[11]". Portanto, 
a saída padrão será "[1][10][11]". 
Gabarito: Letra C 
 
61. (UFES – UFES – 2018) Analise o trecho de código C++ abaixo. 
 
using namespace std; 
int main() { 
 int arr[] = {10, 7, 2, 15, 4}; 
 vector<int> v(arr, arr + 5); 
 vector<int>::iterator it; 
 sort(v.rbegin(), v.rend()); 
 for (it = v.begin(); it != v.end(); it++) 
 printf("[%d]", *it); 
 return 0; 
} 
 
Considerando os conceitos de iteradores e algoritmos presentes na Standard Template Library (STL), o 
código C++ acima imprimirá na saída padrão: 
 
a) [4][15][2][7][10] 
b) [2][4][7][10][15] 
c) [10][7][2][15][4] 
d) [15][10][7][4][2] 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
110
180
e) [7][9][13][15][20] 
 
Comentários: 
 
O trecho de código C++ apresenta a criação de um vetor "arr" com 5 elementos e em seguida é criado um 
objeto da classe vector "v" que recebe como argumentos os elementos do vetor "arr" utilizando a função 
begin e end. Depois é declarado um iterador "it" do tipo vector<int>::iterator para percorrer o vetor "v". Em 
seguida, é chamada a função sort para ordenar o vetor em ordem decrescente, utilizando os iteradores 
rbegin() e rend(). Por fim, é feita a impressão na saída padrão utilizando o iterador "it" e um laço for. Assim, 
a resposta correta é a letra D, que corresponde à impressão dos elementos do vetor ordenados em ordem 
decrescente: [15][10][7][4][2]. 
Gabarito: Letra D 
 
62. (UFES – UFES – 2018) Um recurso relevante da linguagem C++ é o que declara membros de classe como 
static. O objetivo de se declarar um membro de classe como static em C++ é permitir que 
 
a) apenas uma cópia do membro seja compartilhada por todos os objetos da classe. 
b) cada objeto de uma classe tenha sua própria cópia do membro. 
c) o membro seja estático e seu valor não se altere durante a execução do código. 
d) o membro tenha um nome fixo durante a execução do código. 
e) se armazenem valores únicos. 
 
Comentários: 
 
A alternativa A está correta. Ao se declarar um membro de classe como static em C++, apenas uma cópia 
desse membro é criada e compartilhada por todos os objetos da classe, ou seja, não há uma cópia do 
membro para cada objeto criado. Dessa forma, o valor do membro é compartilhado e atualizado para todos 
os objetos que o acessam. Esse recurso pode ser útil em diversas situações, como para armazenarinformações comuns a todos os objetos da classe ou para contar o número de objetos criados daquela classe. 
 
Gabarito: Letra A 
 
63. (UFES – UFES – 2018) Após reconhecer que muitas estruturas de dados e algoritmos são comumente 
utilizadas por programadores em C++, o comitê-padrão adicionou a Standard Template Library (STL) à 
C++ Standard Library. Os contêineres são estruturas de dados baseadas em templates populares. Sobre 
os contêineres da STL em C++, é INCORRETO afirmar: 
 
a) O contêiner set permite pesquisa rápida e não permite duplicatas. 
b) O contêiner priority_queue permite inserções ou exclusões rápidas em sua parte dianteira ou traseira 
e acesso direto a qualquer elemento desse tipo de contêiner. 
c) O contêiner multiset permite pesquisa rápida e duplicatas. 
d) No contêiner stack, o último elemento a entrar é o primeiro a sair. 
e) O contêiner vector permite inserções e exclusões rápidas na parte traseira e acesso direto a qualquer 
elemento desse tipo de contêiner. 
 
Comentários: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
111
180
A afirmativa incorreta é a letra B. O contêiner priority_queue não permite acesso direto a qualquer elemento, 
apenas a inserção ou exclusão rápidas em sua parte dianteira ou traseira. Acesso direto aos elementos é 
permitido em contêineres como vector e deque. As demais afirmativas estão corretas: o set permite pesquisa 
rápida e não permite duplicatas; o multiset permite pesquisa rápida e permite duplicatas; no stack, o último 
elemento a entrar é o primeiro a sair; e o vector permite inserções e exclusões rápidas na parte traseira e 
acesso direto a qualquer elemento. 
Gabarito: Letra B 
 
64. (UFES – UFES – 2018) Observe o trecho de código em C abaixo, que implementa uma função f1 que tem 
uma string como parâmetro. 
 
void fl(char* str) { 
 while (*str) { 
 if (*str == ' ') { 
 *str = '-'; 
 } 
 str++; 
 } 
} 
 
Assumindo que a chamada da função foi feita passando uma string válida qualquer como argumento, é 
CORRETO afirmar sobre o código acima: 
 
a) o código da função entrará em laço infinito ao ser executado, pois, considerando-se uma string na 
linguagem C, a condição de parada está errada. 
b) o objetivo da função é substituir os caracteres do tipo espaço (i.e., ‘ ’) da string recebida por meio do 
parâmetro str por caracteres do tipo traço (i.e., ‘-’). 
c) o código da função acessará uma posição inválida de memória ao ser executado, pois, considerando-
se uma string na linguagem C, o incremento está errado. 
d) a função não fará nenhuma alteração na string recebida pelo parâmetro str, pois a execução nunca 
entrará no comando de laço. 
e) o objetivo da função é verificar se existem caracteres do tipo espaço e responder “verdadeiro”, caso 
haja, ou “falso”, em caso contrário. 
 
Comentários: 
 
A função implementada acima tem como objetivo substituir os caracteres do tipo espaço por traço na string 
recebida por meio do parâmetro str. Portanto, a alternativa correta é a letra b). 
a) o código da função entrará em laço infinito ao ser executado, pois, considerando-se uma string na 
linguagem C, a condição de parada está errada. 
b) o objetivo da função é substituir os caracteres do tipo espaço (i.e., ‘ ’) da string recebida por meio do 
parâmetro str por caracteres do tipo traço (i.e., ‘-’). 
c) o código da função acessará uma posição inválida de memória ao ser executado, pois, considerando-se 
uma string na linguagem C, o incremento está errado. 
d) a função não fará nenhuma alteração na string recebida pelo parâmetro str, pois a execução nunca entrará 
no comando de laço. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
112
180
e) o objetivo da função é verificar se existem caracteres do tipo espaço e responder “verdadeiro”, caso haja, 
ou “falso”, em caso contrário. 
Gabarito: Letra B 
 
65. (UFES – UFES – 2018) O trecho de código em C abaixo implementa uma função f1 para imprimir, na saída 
padrão, a sigla de um estado, composta por dois caracteres e recebida por meio do parâmetro sigla, e, 
em seguida, imprimir um caractere de quebra de linha. 
 
void f1(char* sigla) { 
 char lSigla[2]; 
 lSigla[0] = sigla[0]; 
 lSigla[1] = sigla[1]; 
 printf("%s\n", lSigla); 
} 
 
Analise as afirmativas a seguir, acerca do trecho de código acima: 
I. Os dois caracteres da sigla do estado passada como argumento serão impressos e serão seguidos 
imediatamente por um caractere de quebra de linha. 
 
II. A troca da linha printf("%c%c\n", lSigla[0],lSigla[1]); pela linha original printf("%s\n", lSigla); produziria 
o resultado desejado. 
 
III. Os dois caracteres da sigla do estado passada como argumento serão impressos primeiramente, mas 
não se pode prever o que será impresso entre a segunda letra da sigla e o caractere de quebra de linha. 
 
IV. Não se pode prever nenhum dos caracteres que serão impressos, mesmo que se conheça a sigla do 
estado passada como argumento. 
 
É CORRETO o que se afirma em 
 
a) II e III, apenas. 
b) II, apenas. 
c) IV, apenas. 
d) III, apenas. 
e) I e IV, apenas. 
 
Comentários: 
 
A afirmativa I está correta, já que a função f1 imprime os dois caracteres da sigla seguidos por um caractere 
de quebra de linha. A afirmativa II está incorreta, já que a troca da linha de impressão para printf("%c%c\n", 
lSigla[0],lSigla[1]) irá imprimir os caracteres da sigla separados por um espaço, em vez de serem 
concatenados em uma string. A afirmativa III está correta, já que não há nenhum caractere sendo 
explicitamente colocado entre as duas letras da sigla na impressão, mas a função printf pode inserir alguns 
caracteres especiais, dependendo do sistema operacional e da configuração. A afirmativa IV está incorreta, 
já que a sigla é claramente definida no código e os caracteres que serão impressos podem ser previstos. 
Portanto, a resposta correta é a letra A: II e III, apenas. 
Gabarito: Letra A 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
113
180
 
66. (FADESP – IF-PA – 2018) Analise as afirmações sobre as linguagens de programação. 
 
I. O mecanismo de herança em Java ocorre em tempo de compilação, ou seja, todo reaproveitamento de 
código realizado por herança é imutável em tempo de execução. 
II. A linguagem C++ possui herança múltipla, Java possui somente herança simples para classes concretas 
e abstratas, mas possui herança múltipla para a “interface”, já Javascript não possui herança como 
funcionalidade nativa. 
III. C++ é uma linguagem compilada, Java é compilada para uma linguagem de máquina intermediária 
chamada de bytecodes, sendo esta interpretada e Javascript é interpretada. 
 
É correto afirmar que 
 
a) somente a afirmativa II é verdadeira. 
b) somente as afirmativas I e III são verdadeiras. 
c) somente as afirmativas I e II são verdadeiras. 
d) somente a afirmativa III é verdadeira. 
e) as afirmativas I, II e III são verdadeiras. 
 
Comentários: 
 
A questão apresenta algumas afirmações sobre linguagens de programação e pede que o candidato analise 
cada uma delas e determine a correta. A primeira afirmação é correta e se refere ao mecanismo de herança 
em Java, que é determinado em tempo de compilação e não pode ser alterado em tempo de execução. Já a 
segunda afirmação é incorreta ao afirmar que JavaScript não possui herança como funcionalidade nativa. De 
fato, a linguagem possui suporte à herança, emborade uma maneira diferente da maioria das outras 
linguagens. A terceira afirmação é correta e se refere à maneira como as linguagens C++, Java e JavaScript 
são compiladas ou interpretadas. Assim, a alternativa correta é a letra B, que afirma que somente as 
afirmações I e III são verdadeiras. 
Gabarito: Letra B 
 
67. (NUCEPE – SEDUC-PI – 2018) A estrutura de repetição for possui três campos que devem ser preenchidos. 
Conforme o exemplo a seguir, esses três campos são chamados respectivamente de: 
 
for (contador = 1; contador <= 10; contador++) 
{ 
 printf("%d", contador); 
} 
getch(); 
return(0); 
} 
 
a) inicialização, condição e iteração. 
b) incremento, condição e inicialização. 
c) condição, inicialização e incremento. 
d) inicialização, condição e iteração. 
e) inicialização, condição e iteração. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
114
180
 
Comentários: 
 
A alternativa correta é a letra E: inicialização, condição e iteração. Os três campos da estrutura de repetição 
for são, nessa ordem: a inicialização da variável de controle, a condição para a execução do loop e a iteração 
da variável de controle. No exemplo dado, a variável "contador" é inicializada com o valor 1, a condição de 
execução é que o contador seja menor ou igual a 10 e a iteração é feita através do incremento do contador 
em uma unidade a cada iteração do loop. 
Gabarito: Letra E 
 
68. (NUCEPE – SEDUC-PI – 2018) Analise o trecho do código a seguir e marque a única alternativa CORRETA 
em relação ao resultado da execução do programa. 
 
#include <iostream> 
 
void impr3() { 
 std::cout << "3" << std::endl; 
} 
 
void impr2() {} 
 
void impr1() { 
 std::cout << "1" << std::endl; 
} 
 
int main() { 
 impr3(); 
 std::cout << "2" << std::endl; 
 impr1(); 
 impr2(); 
 return 0; 
} 
 
a) 2 3 1 
b) 1 3 2 
c) 1 2 3 
d) 3 2 1 
e) 2 1 3 
 
Comentários: 
 
A resposta correta é a alternativa B, que corresponde à sequência de saída "1 3 2". Isso porque a função 
impr3() é chamada logo no início do programa, imprimindo o número 3. Em seguida, o número 2 é impresso 
com o comando "std::cout << "2" << std::endl;", e depois a função impr1() é chamada, imprimindo o número 
1. A função impr2() não tem nenhum comando dentro dela e não produz saída. Portanto, a sequência correta 
de saída é "1 3 2". 
Gabarito: Letra B 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
115
180
 
69. (NUCEPE – SEDUC-PI – 2018) De acordo com o código a seguir, qual comando estaria no lugar de 
***************? 
 
#include <iostream> 
 
int main(int argc, char *argv[]) { 
 int num1, num2; 
 std::cout << "Digite um numero: "; 
 *************** 
 std::cout << "Digite outro numero: "; 
 std::cin >> num1; 
 std::cout << "Os números digitados foram " << num1 << " e " << num2 << std::endl; 
 return 0; 
} 
 
a) scanf ("%d", &num3). 
b) scanf ("%d", &num1). 
c) scanf ("%d", &num2). 
d) scanf ("%f", &num2). 
e) scanf ("%f", &num1). 
 
Comentários: 
 
O código é um programa simples em C++ que solicita que o usuário digite dois números e os exibe na tela. O 
programa começa declarando duas variáveis inteiras, num1 e num2, e em seguida utiliza a biblioteca 
iostream para imprimir a mensagem "Digite um número:" na tela. Em seguida, o programa utiliza o operador 
de extração (>>) para obter um valor digitado pelo usuário e armazená-lo na variável num2. O programa 
então imprime outra mensagem "Digite outro número:", utilizando a mesma sintaxe. Depois disso, o 
operador de extração (>>) é utilizado novamente para obter um segundo valor digitado pelo usuário e 
armazená-lo na variável num1. Finalmente, o programa imprime uma mensagem que combina os valores de 
num1 e num2 e encerra sua execução. O comando correto para ler um valor inteiro do usuário e armazená-
lo na variável num2 em C++ é "std::cin >> num2;". O comando scanf é utilizado em C para a mesma finalidade. 
 
Gabarito: Letra C 
 
70. (NUCEPE – SEDUC-PI – 2018) O programa em linguagem C abaixo imprime os números pares que estão 
no intervalo de 0 a 50, em ordem crescente. Qual o incremento correto? 
 
int i 
 for (i=0; i<=50; ****X{ 
 printf("%d ", i); 
} 
 
a) i++ 
b) cont = cont + 1 
c) cont = i++ 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
116
180
d) i = i + 1 
e) i = i + 2 
 
Comentários: 
 
O incremento correto seria a alternativa E, isto é, "i = i + 2". Isso porque o objetivo é imprimir somente 
números pares, e como todo número par é divisível por 2, é necessário incrementar o valor de i com um 
passo de 2 em 2 para que sejam considerados somente os números pares no intervalo de 0 a 50. 
 
Gabarito: Letra E 
 
71. (UFMT – UFSBA – 2017) A sobrecarga de operadores é uma técnica muito utilizada em C++. Assinale a 
alternativa que NÃO apresenta um operador que possa ser sobrecarregado em C++. 
 
a) "new" 
b) "new[]" 
c) "+" 
d) "?:". 
 
Comentários: 
 
A sobrecarga de operadores é uma técnica importante em C++, que permite aos desenvolvedores definir 
comportamentos personalizados para os operadores existentes na linguagem. Os operadores mencionados 
nas opções B e C - "new[]" e "+" - também podem ser sobrecarregados em C++. Vejamos cada alternativa. A) 
"new": "new" é um operador em C++ usado para alocar memória dinamicamente durante a execução de um 
programa. No entanto, esse operador não pode ser sobrecarregado, pois ele é um operador de membro e a 
linguagem C++ não permite a sobrecarga de operadores de membro. B) "new[]": "new[]" é um operador em 
C++ usado para alocar dinamicamente uma matriz de elementos em tempo de execução. Esse operador pode 
ser sobrecarregado para personalizar o comportamento da alocação dinâmica de matrizes. C) "+": "+" é um 
operador em C++ usado para realizar a operação de adição em dois valores. Esse operador pode ser 
sobrecarregado para personalizar o comportamento da adição de valores. D) "?:": "?:", também conhecido 
como operador ternário, é um operador condicional em C++ que retorna um dos dois valores, dependendo 
de uma condição. Esse operador pode ser sobrecarregado para personalizar o comportamento do operador 
ternário condicional. 
 
Gabarito: Letra D 
 
72. (UFMT – UFSBA – 2017) Assinale a alternativa que representa, na linguagem de programação C, a 
estrutura de repetição for que, por meio da variável de controle i, percorre o intervalo do índice 0 até o 
índice 32 inclusive, na ordem não decrescente. 
a) for(i = 32; i > 0; i--) 
b) for(i = 32; i > -1; i--) 
c) for(i = 0; i < 33; i++) 
d) for(i = 0; i < 32; i++) 
 
Comentários: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
117
180
A alternativa que representa, na linguagem de programação C, a estrutura de repetição for que percorre o 
intervalo do índice 0 até o índice 32 inclusive, na ordem não decrescente, é a letra C: for(i = 0; i < 33; i++). 
Nesse loop for, a variável i é inicializada com 0, e a condição de parada é i < 33, que garante que o loop 
execute até que i chegue ao valor 33. O operador de incremento i++ garante que a variável i seja 
incrementada em cada iteração do loop. Assim, o loop executa 33 iterações, percorrendo o intervalo de 0 
até 32 inclusive, em ordem nãodecrescente. 
Gabarito: Letra C 
 
73. (UFRN – UFRN – 2017) Considere o seguinte código em C++ : 
 
int funcl(int paramA, int paramB) { 
 if (paramA > paramB) { 
 return funcl(paramA - paramB, paramB); 
 } else { 
 return paramA; 
 } 
} 
 
Nesse código, o algoritmo func1 implementa uma função matemática de 
 
a) divisão inteira 
b) resto da divisão inteira 
c) fatorial 
d) potenciação 
 
Comentários: 
 
O código em C++ implementa uma função que retorna o resto da divisão inteira de paramA por paramB. A 
função funcl utiliza recursividade para realizar a operação, subtraindo paramB de paramA enquanto paramA 
for maior que paramB. Quando paramA é menor ou igual a paramB, a função simplesmente retorna paramA, 
que será o resto da divisão inteira. Portanto, a alternativa correta é a letra B, que se refere ao resto da divisão 
inteira. 
 
Gabarito: Letra B 
 
74. (IF-CE – IF-CE – 2017) Considere as afirmações sobre os paradigmas de linguagens de programação. 
 
I. Python, Ruby e Java são linguagens de programação interpretada multiparadigma, de tipagem dinâmica 
e forte. 
 
II. As linguagens de programação Object-Pascal, C++ e Java, embora deem suporte à Orientação a Objetos 
(OO), não são completamente orientadas a objetos. 
 
III. As linguagens de programação Smalltalk e Ruby são consideradas puramente orientadas a objetos, 
isto é, tudo é considerado um objeto, até mesmo os tipos básicos da linguagem. 
 
Está(ão) correta(s): 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
118
180
 
a) II, apenas. 
b) I, II e III. 
c) III, apenas. 
d) I e II, apenas. 
e) II e III, apenas. 
 
Comentários: 
 
A resposta correta é a alternativa E. A afirmação I é verdadeira. Python, Ruby e Java são linguagens de 
programação interpretada multiparadigma, de tipagem dinâmica e forte. A afirmação II é falsa. Tanto C++ 
quanto Object-Pascal e Java são linguagens que dão suporte completo à Orientação a Objetos (OO). A 
afirmação III é verdadeira. Smalltalk e Ruby são linguagens consideradas puramente orientadas a objetos, 
pois tudo é considerado um objeto, inclusive os tipos básicos da linguagem. Portanto, as afirmações II e III 
estão corretas, enquanto a afirmação I está incorreta. A alternativa que corresponde a isso é a letra E. 
 
Gabarito: Letra E 
 
75. (IF-CE – IF-CE – 2017) Sabendo-se que programas de computador podem ser compilados ou 
interpretados, é verdadeiro dizer-se que programas 
 
a) desenvolvidos com Java igualmente aos desenvolvidos com C# são compilados. Ambos se utilizam de 
uma linguagem intermediária, para independer do sistema operacional. 
b) em PHP são interpretados tanto quanto programas em Java para web. 
c) em JavaScript funcionam Client-Side, ou seja, rodam no lado cliente, por isso precisam ser previamente 
compilados. 
d) desenvolvidos para internet precisam de um servidor de aplicação como IIS ou Apache. Devido a isso, 
são linguagens interpretadas pelo servidor. 
e) feitos com linguagem que precise de uma máquina virtual ou semelhante, como o Java, são executados 
e interpretados por ela em tempo de execução (Just-in-time), por isso não precisam ser compilados. 
 
Comentários: 
 
Pessoal, nosso gabarito é a letra A. Programas desenvolvidos em Java e C# são compilados e utilizam uma 
linguagem intermediária para serem executados de forma independente do sistema operacional. Essa 
linguagem intermediária é conhecida como bytecode no caso do Java e IL (Intermediate Language) no caso 
do C#. PHP é uma linguagem interpretada, enquanto Java pode ser compilado ou interpretado, dependendo 
da implementação utilizada (por exemplo, a JVM pode compilar o bytecode para código nativo ou interpretá-
lo). JavaScript é uma linguagem interpretada que é executada no navegador do cliente (Client-Side) e não 
precisa ser previamente compilada. Programas desenvolvidos para internet não necessariamente precisam 
de um servidor de aplicação como IIS ou Apache, mas é comum que sejam executados em um ambiente de 
servidor e interpretados pelo servidor antes de serem enviados para o cliente. Linguagens que precisam de 
uma máquina virtual, como Java, geralmente são compiladas para bytecode e depois interpretadas pela 
máquina virtual em tempo de execução (Just-in-time), mas isso não significa que elas não precisam ser 
compiladas. 
 
Gabarito: Letra A 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
119
180
 
76. (IFB – IFB – 2017) Analise as seguintes afirmativas. I) Ocultar dados dentro das classes e torná-los 
disponíveis apenas por meio de métodos é uma técnica muito usada em programas orientados a objetos, 
chamada de sobreescrita de classes. II) Uma subclasse pode implementar novamente métodos que foram 
herdados de uma superclasse. Chamamos isso de sobrecarga de atributos. III) Em Java não existe herança 
múltipla como em C++. Essa limitação pode ser parcialmente simulada pelo uso de encaminhamento de 
métodos a variáveis de instância. Assinale a alternativa CORRETA com relação às afirmativas acima. 
 
a) Apenas a afirmativa I está correta. 
b) Apenas a afirmativa II está correta. 
c) Apenas a afirmativa III está correta. 
d) Apenas as afirmativas I e III estão corretas. 
e) Apenas as afirmativas I e II estão corretas. 
 
Comentários: 
 
A afirmativa I está incorreta, pois a técnica mencionada é chamada de encapsulamento, não de sobreescrita 
de classes. A afirmativa II está incorreta, pois a definição correta de sobrecarga é quando uma classe tem 
vários métodos com o mesmo nome, mas com parâmetros diferentes. A afirmativa III está correta, pois em 
Java não é possível herdar de múltiplas classes, mas é possível implementar múltiplas interfaces e usar o 
encaminhamento de métodos para simular herança múltipla. 
 
Gabarito: Letra C 
 
77. (UFES – UFES – 2016) O código C abaixo se propõe a informar a média da idade de algumas pessoas com 
uma precisão de duas casas decimais, dados o número de pessoas (pessoas, com 0<pessoas<10) e suas 
respectivas idades. 
 
#include <stdio.h> 
 
int main() { 
 int pessoas, i, soma, idade; 
 double media; 
 
 scanf("%d", &pessoas); 
 soma = 0; 
 
 for(i = 0; i < pessoas; i++) { 
 scanf("%d", &idade); 
 soma = soma + idade; 
 } 
 
 media = soma/pessoas; 
 printf("%.2f", media); 
 
 return 0; 
} 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
120
180
 
A respeito do código acima, é CORRETO afirmar: 
a) O código faz corretamente o que é proposto. 
b) O código interrompe sua execução com um segmentation fault. 
c) O código pode ser corrigido para fazer o que se propõe, caso seja feita uma conversão de tipos no local 
apropriado. 
d) O código está errado, pois o formato do printf não é apropriado para impressão com precisão de duas 
casas decimais. 
e) O código está errado, pois a variável idade deveria ser dividida pela variável pessoas dentro do for, ou 
seja, soma = soma + idade/pessoas;. 
 
Comentários: 
 
O código se propõe a calcular a média da idade de um número específico de pessoas e exibir o resultado com 
uma precisão de duas casas decimais. O código faz a leitura do número de pessoas e em seguida lê as idades 
de cada pessoa, somando todas elas em uma variável "soma". Em seguida, o código calcula a média dividindo 
a soma pelo número de pessoas e armazenando o resultado na variável "media". Por fim, o código imprime 
o valor de "media" com precisão de duas casasdecimais usando o formato de saída "%.2f". A opção correta 
é a letra C, pois embora o código esteja funcionando corretamente para o que se propõe, é possível que 
ocorra um erro caso o valor de "pessoas" seja maior ou igual a 10, já que o código não está preparado para 
lidar com esse caso. Além disso, o código poderia ser otimizado para utilizar uma variável do tipo "float" em 
vez de "double", já que a precisão necessária é de apenas duas casas decimais. 
 
Gabarito: Letra C 
 
78. (CESPE – TJ-SE– 2014) Para que a máquina entenda os comandos de um programa desenvolvido na 
linguagem C, o programa deve ser compilado e traduzido para a linguagem da máquina. 
 
Comentários: 
 
Sim, essa afirmação está correta. O código escrito na linguagem C é interpretado pelo compilador da 
linguagem, que é responsável por traduzir o código para a linguagem de máquina que o computador é capaz 
de entender e executar. Sem o processo de compilação, o programa escrito em C não poderia ser executado 
diretamente pela máquina. 
 
Gabarito: Correto 
 
79. (CESPE – TJ-SE– 2014) O comando em linguagem C apresentado abaixo é um tipo de laço que pode ser 
finalizado com o comando break; portanto, esse comando não tem garantia de laço infinito. 
 
for (;;) printf ("Exemplo de laço infinito.\n") ; 
 
Comentários: 
 
O laço for apresentado não tem condição de término, portanto é um laço infinito. No entanto, é possível 
finalizá-lo com o uso do comando break em alguma condição dentro do próprio laço. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
121
180
Gabarito: Correto 
 
80. (CESPE – ANTT – 2014) O paradigma de orientação a objetos é amplamente utilizado em várias 
linguagens: Java é compilada em bytecode e executada em uma máquina virtual (JVM); C++ apresenta 
bom desempenho ao unir características de alto e de baixo níveis; Python/Ruby/PHP podem ser utilizadas 
para desenvolvimento web, mas sem aplicações para dispositivos móveis 
 
Comentários: 
 
A afirmação apresentada está incorreta. Embora Java seja compilada em bytecode e executada em uma 
máquina virtual (JVM), isso não significa que as outras linguagens mencionadas não possam ser usadas para 
desenvolvimento de aplicativos móveis. Na verdade, tanto Python quanto Ruby têm uma grande variedade 
de frameworks e bibliotecas disponíveis para desenvolvimento de aplicativos móveis, como Kivy, PyMob e 
Rubymotion. Além disso, o PHP também pode ser usado para o desenvolvimento de aplicativos móveis, 
embora em menor escala. 
Gabarito: Errado 
 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
122
180
 
 
 
QUESTÕES COMENTADAS 
Diversas Bancas 
 
1. (VUNESP – UNICAMP – 2022) Na linguagem C++, estruturas (definidas pela palavra-chave struct) podem 
ser passadas como parâmetros em chamadas de funções. Nesse contexto, assinale a alternativa correta. 
 
a) Por padrão, estruturas são passadas por referência. 
b) Passar estruturas por referência é mais eficiente que passá-las por valor, uma vez que a passagem por 
valor requer que a estrutura inteira seja copiada. 
c) Estruturas só podem ser passadas como parâmetro por meio do uso de ponteiros. 
d) É necessário o uso da palavra-chave inline na declaração da função que recebe uma estrutura como 
parâmetro. 
e) Apenas funções do tipo void podem receber estruturas como parâmetros. 
 
Comentários: 
 
Passar estruturas por referência é mais eficiente que passá-las por valor, uma vez que a passagem por valor 
requer que a estrutura inteira seja copiada. Isso pode ser custoso em termos de desempenho se a estrutura 
for grande. Portanto, é comum passar estruturas por referência ou por ponteiros para evitar a cópia 
desnecessária de dados. No entanto, é importante notar que é possível passar estruturas por valor se a 
estrutura for pequena e se a cópia não afetar significativamente o desempenho da função. A letra A está 
incorreta, pois as estruturas podem ser passadas por valor ou por referência, dependendo da necessidade 
do programador. A letra C está incorreta, pois as estruturas podem ser passadas por valor ou por referência, 
não sendo necessário o uso de ponteiros. A letra D está incorreta, pois não é necessário o uso da palavra-
chave inline na declaração da função que recebe uma estrutura como parâmetro. A palavra-chave inline é 
usada para otimizar o desempenho de funções curtas, mas não está diretamente relacionada à passagem de 
estruturas como parâmetros. A letra E está incorreta, pois funções de qualquer tipo (não apenas do tipo 
void) podem receber estruturas como parâmetros. 
 
Gabarito: Letra B 
 
2. (CESPE – PG-DF – 2021) Tendo como referência o código, escrito em linguagem de programação ANSI C, 
julgue o item subsecutivo. 
 
#include <stdio.h> 
 
int main ( ) { 
 int vetor[10], i = 0, j = 0, auxiliar = 0; 
 
 for (i = 0; i < 10; i++) { 
 printf ("Digite um numero inteiro: "); 
 scanf ("%d", &auxiliar); 
 vetor[i] = auxiliar; 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
123
180
 
 
 
 } 
 
 for (i = 0; i < 10; i++) { 
 for (j = i+1; j < 10; j++) { 
 if ( vetor[i] > vetor [j]) { 
 auxiliar = vetor [i]; 
 vetor[i] = vetor[j]; 
 vetor[j] = auxiliar; 
 } 
 } 
 } 
 
for (i = 0; i < 10; i++) { 
 printf ("\n\n vetor[%d] = %d", i, vetor[i]); 
 } 
 
 system ("PAUSE"); 
 return 0; 
} 
 
Quando compilado e executado, o código solicita que o usuário digite dez números inteiros e, em 
seguida, ordena e mostra esses números na tela, em ordem crescente. 
 
Comentários: 
 
Este programa em C++ utiliza a biblioteca "vector" para criar um vetor de inteiros chamado "v". Em seguida, 
o programa utiliza um loop "for" para adicionar ao vetor os valores de i multiplicados por 2, ou seja, [0, 2, 4, 
6, 8, 10]. Depois disso, o programa remove os dois primeiros elementos do vetor usando o método "erase". 
Como resultado, o vetor agora tem os valores [4, 6, 8, 10]. Finalmente, o programa usa outro loop "for" para 
imprimir os elementos restantes do vetor. No entanto, há um erro na linha que imprime os elementos. Em 
vez de imprimir o valor do elemento, a variável "i" que representa um iterador é impressa. Para imprimir 
corretamente os valores, deve-se usar "*i" para acessar o valor do elemento no vetor. O código apresentado 
solicita ao usuário que digite 10 números inteiros, armazena esses valores em um vetor e, em seguida, usa o 
algoritmo de ordenação conhecido como "selection sort" para ordenar os números em ordem crescente. Por 
fim, o programa exibe os números ordenados na tela. Portanto, o item está correto. Quando compilado e 
executado, o código solicita que o usuário digite dez números inteiros e, em seguida, ordena e mostra esses 
números na tela, em ordem crescente. 
 
Gabarito: Correto 
 
3. (CESPE – PG-DF – 2021) Tendo como referência o código da questão anterior, escrito em linguagem de 
programação ANSI C, julgue o item subsecutivo. 
Caso a linha for (i = 0; i < 10; i++) { fosse alterada para for (i = 0; i > 10; i++) { em suas três ocorrências, o 
código funcionaria invertendo a ordem dos números digitados e armazenados no vetor declarado no 
código. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
124
180
 
 
 
 
Comentários: 
 
Pessoal, errada a questão! Na verdade, o código não funcionaria corretamente se a linha for (i = 0; i > 10; 
i++) { fosse alterada para as três ocorrências do loop for. Isso ocorre porque a condição do loop for é 
responsável por controlar a quantidade de iterações do loop, e a condição "i > 10" nunca seria satisfeita, pois 
a variável "i" é inicializada com o valor zero e incrementada a cada iteração. Portanto, o loop for nunca seria 
executado e nenhum número seria armazenado no vetor. Caso a intenção seja percorrer o vetor de forma 
invertida, a condição do loop for deveria ser alterada para "i >= 0" e o incremento da variável "i" deveria ser 
trocado para um decremento. 
 
Gabarito: Errado 
 
4. (CESPE – PG-DF – 2021) Tendo como referência o código da questão anterior, escrito em linguagem de 
programação ANSI C, julgue o item subsecutivo. 
 
O comando printf ("\n\n vetor[%d] = %d", i, vetor[i]); continuaria funcionando corretamente mesmo que 
o comando #include não existisse no código. 
 
Comentários: 
 
Pessoal, questão errada! Na verdade, o comando printf não funcionaria corretamente se o comando #include 
correspondente à biblioteca stdio.h não existisse no código. Isso ocorre porque o comando printf faz parte 
da biblioteca padrão de entrada e saída de dados do C, e seu protótipo é definido na biblioteca stdio.h. Se a 
biblioteca não for incluída no código, o compilador não será capaz de reconhecer o comando printf, 
resultando em um erro de compilação. Portanto, é necessário que a biblioteca stdio.h seja incluída no código 
para que o comando printf e outros comandos relacionados à entrada e saída de dados possam ser utilizados 
corretamente. 
 
Gabarito: Errado 
 
5. (CESPE – PG-DF – 2021) Tendo como referência o código da questão anterior, escrito em linguagem de 
programação ANSI C, julgue o item subsecutivo. 
 
O parâmetro %d, utilizado na linha scanf ("%d", &auxiliar);, permite a digitação apenas de números 
inteiros. 
 
Comentários: 
 
Perfeita questão pessoal! O parâmetro %d utilizado na linha scanf ("%d", &auxiliar); permite a leitura de 
números inteiros a partir do teclado. O %d é um especificador de formato utilizado pela função scanf para 
indicar que se espera a leitura de um número inteiro. Quando o usuário digita um número inteiro e pressiona 
a tecla Enter, o valor digitado é armazenado na variável auxiliar passada como argumento para a função 
scanf. Caso o usuário digite um valor que não seja um número inteiro, o comportamento da função scanf 
pode ser imprevisível, podendo ocorrer erros de leitura ou comportamentos inesperados. Portanto, é 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
125
180
 
 
 
importante garantir que o valor digitado pelo usuário seja compatível com o formato especificado pelo 
parâmetro %d. 
 
Gabarito: Correto 
 
6. (VUNESP – UNICAMP – 2022) Considere o seguinte programa na linguagem C++: 
 
#include <iostream> 
#include <vector> 
using namespace std; 
 int main() { 
 vector<int> v; 
 for (int i=0;i<=5;i++) { 
 v.push_back(i*2); 
 } 
 v.erase(v.begin()); 
 v.erase(v.begin()); 
 for (auto i=v.begin();i!=v.end();i++) { 
 cout << i << " "; 
 } 
 } 
 
A saída produzida por sua execução é: 
 
a) 4 6 8 
b) 6 4 2 
c) 2 4 6 8 
d) 4 6 8 10 
e) 8 6 4 2 
 
Comentários: 
 
A saída produzida pelo programa será: 2 4 6 8. Isso ocorre porque o valor i utilizado na linha v.push_back(i*2) 
é o valor de i após a execução do primeiro laço for, ou seja, 6. Portanto, os valores adicionados ao vetor v 
serão 12, que é o dobro de 6, e o laço for que imprime os elementos do vetor v irá imprimir na tela os valores 
4, 6 e 8, que são os elementos restantes após a remoção dos dois primeiros elementos. Assim, a opção 
correta é a letra d) 4 6 8 10. 
Gabarito: Letra D 
 
7. (VUNESP – UNICAMP – 2022) Na linguagem C++, estruturas (definidas pela palavra-chave struct) podem 
ser passadas como parâmetros em chamadas de funções. Nesse contexto, assinale a alternativa correta. 
Alternativas 
a) Por padrão, estruturas são passadas por referência. 
b) Passar estruturas por referência é mais eficiente que passá-las por valor, uma vez que a passagem por 
valor requer que a estrutura inteira seja copiada. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
126
180
 
 
 
c) Estruturas só podem ser passadas como parâmetro por meio do uso de ponteiros. 
d) É necessário o uso da palavra-chave inline na declaração da função que recebe uma estrutura como 
parâmetro. 
e) Apenas funções do tipo void podem receber estruturas como parâmetros. 
 
Comentários: 
 
A alternativa correta é a letra B: Passar estruturas por referência é mais eficiente que passá-las por valor, 
uma vez que a passagem por valor requer que a estrutura inteira seja copiada. Ao passar uma estrutura por 
valor em uma chamada de função, uma cópia completa da estrutura é criada, o que pode ser ineficiente em 
termos de uso de memória e processamento. Por isso, é comum passar estruturas por referência ou por 
ponteiro, que evitam a cópia desnecessária e podem melhorar a eficiência do programa. A opção A está 
incorreta, pois a passagem por referência é uma opção que deve ser explicitamente escolhida na definição 
da função ou na chamada da função, não sendo o padrão. A opção C está incorreta, pois as estruturas podem 
ser passadas tanto por valor quanto por referência (por meio de ponteiros ou referências). As opções D e E 
estão incorretas, pois a palavra-chave inline é usada para otimização do código em tempo de execução e não 
tem relação direta com a passagem de estruturas como parâmetros. Além disso, funções de qualquer tipo 
podem receber estruturas como parâmetros. 
Gabarito: Letra B 
 
8. (VUNESP – UNICAMP – 2022) Na linguagem C++, a linha de código 
 
 double * x,y; 
 
declara 
 
a) duas variáveis do tipo double. 
b) dois ponteiros para valores do tipo double. 
c) um ponteiro para um valor do tipo double e uma variável do tipo double. 
d) uma variável do tipo double e um ponteiro que aponta para ela. 
e) um ponteiro para uma função do tipo double que recebe dois parâmetros também do tipo double. 
 
Comentários: 
 
Em C++, o operador * é usado para declarar um ponteiro, que é uma variável que armazena o endereço de 
memória de outra variável. No código double * x, y;, a declaração double * x cria um ponteiro para um valor 
do tipo double chamado x. Já a declaração y cria uma variável do tipo double chamada y. Note que a 
declaração do ponteiro x só se aplica a ele e não à variável y. Ou seja, y não é um ponteiro e não armazena 
um endereço de memória, mas sim um valor do tipo double. Caso o objetivo fosse declarar dois ponteiros, a 
declaração correta seria double *x, *y;. Nesse caso, tanto x quanto y seriam ponteiros para valores do tipo 
double. Portanto, a alternativa correta é a letra C. 
Gabarito: Letra C 
 
9. (UFMT – Câmara de Cáceres - MT – 2022) A partir do trecho de código abaixo utilizando a linguagem de 
programação C, assinale a alternativa que apresenta a saída da execução do código. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
127
180
 
 
 
 
#include <stdio.h> 
int main() { 
 int i; 
 int vec[] = {1,2,3,4,5}; 
 *(vec + *vec) = vec[1];*(vec + vec[1]) = vec[3]; 
 *(vec + vec[2]) = *(vec + 0); 
 for(i = 0; i < 5; i++) 
 printf("%d", vec[i]); 
 return 0; 
} 
 
a) 1 2 3 1 4 
b) 1 2 3 4 5 
c) 1 2 4 4 1 
d) 1 2 4 4 4 
 
Comentários: 
 
A resposta correta é a alternativa C. Durante a execução do código, a linha *(vec + *vec) = vec[1]; altera o 
valor do segundo elemento do vetor vec para 2 (valor armazenado na posição 1). Em seguida, a linha *(vec 
+ vec[1]) = vec[3]; altera o quarto elemento do vetor vec para 4 (valor armazenado na posição 3). Por fim, a 
linha *(vec + vec[2]) = *(vec + 0); altera o terceiro elemento do vetor vec para 1 (valor armazenado na posição 
0). Ao final, a função printf exibe os valores do vetor vec, que serão: 1 2 4 4 1. A alternativa C é a única que 
apresenta esses valores. 
Gabarito: Letra C 
 
10. (FADENOR – Prefeitura de Dores de Guanhães - MG – 2022) Analise o código a seguir, escrito na 
linguagem de programação C. 
 
#include <stdio.h> 
void sub (int *x, int y){ 
 *x = 3; 
 y = *x + 1; 
} 
int main() 
{ 
 int a, b, z; 
 a = 1; 
 b = 2; 
 sub(&a,b); 
 z=a+b; 
 printf("%d",z); 
 return 0; 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
128
180
 
 
 
} 
 
O valor de Z, a ser mostrado na saída padrão, é 
 
a) 3. 
b) 4. 
c) 5. 
d) 7. 
e) 9. 
 
Comentários: 
 
O valor de Z será igual a 5. O programa define uma função chamada "sub" que recebe um ponteiro para 
inteiro (x) e um inteiro (y). Dentro da função, o valor apontado por x é alterado para 3 e o valor de y é 
atualizado para o valor apontado por x (que agora é 3) mais 1, mas essa atualização não afeta o valor de b 
na função main. Na função main, as variáveis a e b são definidas com valores 1 e 2, respectivamente. A função 
sub é chamada com o endereço de a e o valor de b. Isso significa que dentro da função sub, a referência 
apontada por x aponta para a variável a em main, e qualquer alteração feita nessa referência afetará o valor 
de a em main. Após a chamada da função sub, o valor de z é a soma de a e b, que são 3 e 2, respectivamente. 
Portanto, o valor de z é 5 e a resposta correta é a alternativa c) 5. 
 
Gabarito: Letra C 
 
11. (IBFC – DPE-MT – 2022) Quanto às principais características das linguagens: Java, C e C++, analise as 
afirmativas abaixo e dê valores Verdadeiro (V) ou Falso (F). 
 
( ) A maioria dos códigos escritos em C pode ser compilada em C++. 
 
( ) A linguagem C é considerada como tipicamente orientada a objetos. 
 
( ) As IDE's Eclipse e NetBeans não comportam o desenvolvimento em Java. 
 
Assinale a alternativa que apresenta a sequência correta de cima para baixo: 
 
a) V - F - F 
b) V - V - F 
c) F - V - V 
d) F - F - V 
 
Comentários: 
 
A resposta correta é a alternativa A) V - F - F. (V) A maioria dos códigos escritos em C pode ser compilada em 
C++. C++ é uma extensão da linguagem C, então a maioria dos códigos escritos em C pode ser compilada em 
C++ sem problemas. No entanto, nem todos os recursos de C são suportados em C++, e há diferenças 
importantes na sintaxe e na semântica. (F) A linguagem C é considerada como tipicamente orientada a 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
129
180
 
 
 
objetos. A linguagem C não é tipicamente orientada a objetos. C é uma linguagem procedural que não 
fornece suporte nativo para recursos de orientação a objetos, embora possa ser estendida por meio de 
bibliotecas externas, como o GObject. (F) As IDE's Eclipse e NetBeans não comportam o desenvolvimento 
em Java. Tanto o Eclipse quanto o NetBeans são IDEs populares que suportam o desenvolvimento em Java. 
Na verdade, eles são frequentemente usados para desenvolver aplicativos Java, além de outras linguagens. 
 
Gabarito: Letra A 
 
12. (FCC – TRT - 23ª REGIÃO (MT) – 2022) Considere o programa em C abaixo. 
 
#include <stdio.h> 
 int main() { 
 int y, *p, x; 
 y = 0; 
 p = &y; 
 x = *p; 
 x += 10; 
 ++ (*p); 
 --x; 
 (*p) += x; 
 printf ("y = %i\n", y); 
 return 0; 
} 
 
Ao ser compilado e executado em condições ideais, a saída do programa é: 
 
a) y = 9 
b) y = 0 
c) y = 10 
d) y = 1 
e) y = 11 
 
Comentários: 
 
A saída do programa será "y = 10". O programa começa definindo três variáveis: um inteiro y, um ponteiro 
para inteiro p e um inteiro x. y é inicializado como 0 e p é inicializado como o endereço de y. O programa 
então define x como o valor apontado por p, que é 0. x é então incrementado em 10, tornando-se 10. Em 
seguida, o valor apontado por p é incrementado em 1, tornando-se 1. Depois, x é decrementado em 1, 
tornando-se 9. Por fim, o valor apontado por p é incrementado em x, que é 9. Como resultado, o valor final 
de y é 10. Portanto, a resposta correta é a alternativa c) y = 10. 
Gabarito: Letra C 
 
13. (UFAM – UFAM – 2022) Considere o programa a seguir, elaborado na linguagem ANSI C: 
#include <stdio.h> 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
130
180
 
 
 
int main() { 
 int i, j; 
 for (i = 0; i < 2; i++) { 
 for (j = 1; j < 3; j++) { 
 printf("Teste\n"); 
 } 
 } 
 return 0; 
} 
 
 
Assinale a opção CORRETA sobre o número de vezes que a palavra "Teste" será mostrada, ao 
executarmos o programa: 
 
a) 3 
b) 4 
c) 5 
d) 6 
e) 7 
 
Comentários: 
 
O programa irá imprimir a palavra "Teste" quatro vezes. O primeiro loop for percorre duas vezes, enquanto 
o segundo loop for percorre duas vezes a cada iteração do primeiro loop. Portanto, a palavra "Teste" será 
impressa um total de quatro vezes. Portanto, a resposta correta é a alternativa b) 4. 
Gabarito: Letra B 
 
14. (UFAM – UFAM – 2022) Considere o programa a seguir, elaborado na linguagem ANSI C: 
 
#include <stdio.h> 
 
int* pa; 
int a; 
 
int main() { 
 a = 10; 
 pa = &a; 
 a = 8; 
 printf("%d", a); 
 printf(" %d", *pa); 
 return 0; 
} 
 
Assinale a alternativa CORRETA sobre a saída (output) obtida, ao se executar o programa: 
a) 8 8 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
131
180
 
 
 
b) 10 8 
c) 8 10 
d) 10 10 
e) 9 10 
 
Comentários: 
 
O programa começa por incluir a biblioteca padrão de entrada e saída (stdio.h). Em seguida, define as 
variáveis pa e a. pa é um ponteiro para inteiro (int*) e a é uma variável inteira. Dentro da função main(), o 
programa atribui o valor 10 para a variável a. Em seguida, o endereço de a é atribuído a pa. Depois, o valor 
de a é alterado para 8. Finalmente, o programa imprime o valor de a e o valor apontado por pa (que também 
é 8), separados por um espaço. Assim, a saída do programa será: 8 8. Portanto, a alternativa correta é a letra 
"a". 
Gabarito: Letra A 
 
15. (UFMG – UFMG – 2021) Na linguagem C, foi declarada uma matriz: int matriz[5][6];. 
 
O código abaixo é utilizado para imprimir todos os elementos da matriz. 
 
for (int i = 0; i <= 4; i++) { 
 for (int j = 0; j <= 5; j++) { 
 printf("%d ", matriz[i][j]); 
 } 
} 
 
Qual deve ser os valores de a, b, c e d, respectivamente, para imprimir todos os elementos da matriz? 
 
a) 0; 4; 0; 5. 
b) 1; 4; 1; 5. 
c) 1; 5; 1; 6. 
d) 1; 6; 1; 5. 
 
Comentários: 
 
O código apresentado está correto emrelação à sua sintaxe, mas falta contexto para saber se ele está 
adequado ao objetivo desejado. A estrutura for é utilizada para percorrer os elementos de uma matriz, onde 
a e b representam os limites das linhas a serem percorridas e c e d representam os limites das colunas a 
serem percorridas. Dentro do loop, o programa imprime o valor do elemento presente na posição i da linha 
e j da coluna da matriz. Como a matriz tem dimensões de 5 linhas e 6 colunas, os valores de índices válidos 
para a matriz serão de 0 a 4 para as linhas e de 0 a 5 para as colunas. Portanto, para imprimir todos os 
elementos da matriz, podemos utilizar os valores: a = 0 (primeira linha), b = 4 (última linha), c = 0 (primeira 
coluna), d = 5 (última coluna) 
 
Gabarito: Letra A 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
132
180
 
 
 
16. (UFMG – UFMG – 2021) Considerando o código escrito na linguagem C: 
 
#include <stdio.h> 
#include <stdlib.h> 
 
int main() { 
 int a; 
 int b = 4; 
 a = b++; 
 printf("a=%d e b=%d\n", a, b); 
 return 0; 
} 
 
Qual é o resultado da execução do código? 
 
a) a=4 e b=4 
b) a=4 e b=5 
c) a=5 e b=4 
d) a=5 e b=5 
 
Comentários: 
 
O resultado da execução do código é a=4 e b=5. Isso acontece porque a expressão "b++" primeiro atribui o 
valor atual de "b" para "a" (que fica com valor 4), e depois incrementa o valor de "b" para 5. Então, ao 
imprimir os valores de "a" e "b" no printf, teremos a=4 e b=5. 
Gabarito: Letra B 
 
17. (UFMG – UFMG – 2021) Considerando o código escrito na linguagem C: 
 
#include <stdio.h> 
#include <stdlib.h> 
 
void ops(int *a, int b){ 
 *a = 4; 
 b = *a + 2; 
} 
 
int main() { 
 int x, y, total; 
 x = 1; 
 y = 2; 
 ops(&x,y); 
 total = x + y; 
 printf("%d",total); 
 return 0; 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
133
180
 
 
 
} 
 
 
Qual é o valor da variável total que será impresso na saída padrão? 
 
a) 4 
b) 6 
c) 7 
d) 10 
 
Comentários: 
 
O valor da variável x é alterado para 4 pela função ops() e o valor da variável y permanece 2. O programa 
começa com a declaração da função ops, que recebe um ponteiro para inteiro a e um inteiro b. Dentro da 
função, o valor apontado por a é alterado para 4, e o valor de b é modificado para a soma de *a (valor 
apontado por a) mais 2. Como a função ops foi chamada com x passado por referência, a variável x é alterada 
para 4 e y permanece com o valor 2. Na sequência, o valor de total é a soma de x com y, que resulta em 6. 
Esse valor é impresso na tela com o comando printf. Portanto, a alternativa correta é a letra B: 6. 
 
Gabarito: Letra B 
 
18. (CETAP – SEPLAD - PA – 2021) Considere o seguinte programa exemplo escrito em linguagem C e marque 
a alternativa correta. 
 
#include <stdio.h> 
 
int soma(int n) { 
 if(n == 1) 
 return 1; 
 else 
 return (n + soma(n-1)); 
} 
 
int main() { 
 int n; 
 printf("Digite um inteiro positivo: "); 
 scanf("%d", &n); 
 printf("Soma: %d\n", soma(n)); 
 return 0; 
} 
 
(*) fonte do programa retirado de https:/Awww.cprogressivo.net/ acessado em 09/09/2021. 
 
a) O programa exemplo mostra o uso do método de iteração. 
b) O programa exemplo mostra o uso do método de ordenação. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
134
180
 
 
 
c)O programa exemplo mostra o uso do método de passagem de parâmetro. 
d) O programa exemplo mostra o uso do método de recursão. 
 
Comentários: 
 
Gabarito: d) O programa exemplo mostra o uso do método de recursão. O programa calcula a soma dos 
números inteiros de 1 até um número n, utilizando a técnica de recursão. A função soma() é chamada 
recursivamente até que o valor de n seja igual a 1, quando a função retorna 1. Em seguida, as chamadas 
recursivas da função são finalizadas, e os valores de n são somados em cada retorno da função, resultando 
na soma total dos números inteiros de 1 até n. 
Gabarito: Letra D 
 
19. (Instituto UniFil – Prefeitura de Marechal Cândido Rondon - PR – 2021) Linguagem compilada é uma 
linguagem de programação em que o código fonte, nessa linguagem, é executado diretamente pelo 
sistema operacional ou pelo processador, após ser traduzido por meio de um processo chamado 
compilação, usando um programa de computador chamado compilador, para uma linguagem de baixo 
nível, como linguagem de montagem ou código de máquina. Assinale a alternativa que representa 
somente linguagens que são compiladas. 
 
a) Cobol, PHP, C e Python 
b) Cobol, C, Delphi e PHP 
c) Cobol, C, Delphi e C++ 
d) Delphi, C, PHP e Python 
 
Comentários: 
 
A) Cobol, PHP, C e Python: Cobol: é uma linguagem compilada, utilizada principalmente em sistemas 
corporativos e financeiros. PHP: é uma linguagem interpretada, mas é possível compilar o código PHP 
utilizando o Zend Engine, o que faz com que o código seja executado mais rapidamente. C: é uma linguagem 
compilada, amplamente utilizada em sistemas operacionais, drivers de dispositivos, jogos, entre outros. 
Python: é uma linguagem interpretada, mas é possível utilizar ferramentas como o PyInstaller e o PyOxidizer 
para compilar o código Python em um executável. B) Cobol, C, Delphi e PHP: Cobol e C: já explicados 
anteriormente. Delphi: é uma linguagem compilada, utilizada para desenvolvimento de aplicativos para 
desktop, servidores e aplicações móveis. PHP: já explicado anteriormente. C) Cobol, C, Delphi e C++: Cobol, 
C e Delphi: já explicados anteriormente. C++: é uma linguagem compilada, derivada do C e utilizada 
principalmente no desenvolvimento de jogos, sistemas embarcados e software de alta performance. D) 
Delphi, C, PHP e Python: Delphi, C e PHP: já explicados anteriormente. Python: já explicado anteriormente. 
O gabarito é a letra C, pois todas as linguagens mencionadas são linguagens compiladas, ou seja, o código 
fonte é traduzido em código de máquina antes da execução. COBOL, C, Delphi e C++ são exemplos clássicos 
de linguagens compiladas, onde o compilador é responsável por gerar o arquivo executável diretamente a 
partir do código fonte. Por outro lado, as linguagens interpretadas, como Python e PHP, não precisam de um 
processo de compilação antes da execução do código, pois o interpretador pode executar diretamente o 
código fonte linha por linha. Portanto, a alternativa A está incorreta por incluir linguagens interpretadas, 
enquanto as alternativas B e D estão incorretas por não incluírem a linguagem C++, que também é uma 
linguagem compilada. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
135
180
 
 
 
 
Gabarito: Letra C 
 
20. (IDIB – CRECI-PE - 7ª Região – 2021) Qual será a saída do seguinte código C? 
 
#include <stdio.h> 
int main() { 
 int ary[4] = {1, 2, 3, 4}; 
 printf("%d\n", *ary); 
 return 0; 
} 
 
a) 1. 
b) Erro de tempo de compilação (run time error). 
c) Algum valor de lixo. 
d) Variável indefinida. 
 
Comentários: 
 
O código declara um array de inteiros com 4 elementos e inicializa com os valores 1, 2, 3 e 4. Em seguida, é 
impresso na saída padrão o valor do primeiro elemento do array utilizando o operador de desreferência 
(*ary). Como o primeiro elemento doarray é 1, a resposta correta é a alternativa A: "1". Não há erros de 
compilação ou de tempo de execução no código. 
 
Gabarito: Letra A 
 
21. (UFMT – UFMT – 2021) A linguagem de programação C é de propósito geral, sendo caracterizada como 
procedural e imperativa, desenvolvida em 1972 por Dennis M. Ritchie, baseando-se na sua experiência 
com o sistema operacional UNIX. Sua versatilidade e portabilidade lhe garantiram longa vida, sendo 
utilizada hoje também em programação de sistemas embarcados. A linguagem C foi formalizada com o 
ISO/IEC 9899:1990. Analise o código do programa a seguir conforme as definições da linguagem C. 
 
#include <stdio.h> 
 
int um_de_dois(int num1, int num2); 
 
int main() { 
 int a = 100; // definição de variáveis locais 
 int b = 20; 
 int ret_um; 
 ret_um = um_de_dois(a, b); // chamada da função 
 printf("O valor é: %d\n", ret_um); 
 return 0; 
} 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
136
180
 
 
 
int um_de_dois(int num1, int num2) { 
 int result; // declaração de variáveis locais 
 if (num1 > num2) 
 result = num1; 
 else 
 result = num2; 
 return result; 
} 
 
Sobre esse código, marque V para as afirmativas verdadeiras e F para as falsas. 
( ) A execução do programa produz como saída: O valor é: 20. 
( ) A formatação da saída poderia ser feita sem erro com o comando: printf( "O valor é: %f\n", ret_um ); 
( ) A passagem de parâmetros para a função é por valor, pois a função um_de_dois(int num1, int num2) 
não altera o valor da variáveis int a ou int b. 
( ) Os parâmetros formais são os argumentos da função um_de_dois(int num1, int num2), declarados 
como variáveis que aceitam os argumentos da chamada da função um_de_dois(a, b). 
 
Assinale a sequência correta. 
 
a) F, V, F, V 
b) V, V, F, F 
c) V, F, V, F 
d) F, F, V, V 
 
Comentários: 
 
A primeira afirmativa é falsa, pois a execução do programa produz como saída: O valor é: 100. A segunda 
afirmativa é falsa, pois o tipo de dado da variável ret_um é int e não float. A terceira afirmativa é verdadeira, 
pois a passagem de parâmetros para a função em C é por valor, ou seja, a função recebe cópias dos valores 
das variáveis passadas como argumentos. A quarta afirmativa é verdadeira, pois os parâmetros formais são 
os argumentos da função, e na chamada da função, os valores das variáveis a e b são passados como 
argumentos. 
Gabarito: Letra D 
 
22. (CEPUERJ – UERJ – 2021) Um tipo de dados define uma coleção de valores de dados e um conjunto de 
operações pré-definidas sobre ele. O sistema de tipos de uma linguagem de programação define como 
um tipo é associado com cada expressão na linguagem e inclui suas regras para equivalência e 
compatibilidade de tipos. Entender seu sistema de tipos é uma das partes mais importantes para 
entender a semântica de uma linguagem de programação. De acordo com essa afirmação e com os 
conceitos da linguagem de programação Java, é correto afirmar que: 
 
a) o tipo de dado matriz é um agregado homogêneo de elementos de dados no qual um elemento 
individual é identificado por sua posição na agregação. Na linguagem Java, os elementos de uma matriz 
não precisam ser do mesmo tipo 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
137
180
 
 
 
b) a enumeração é um tipo de dado ordinal definido pelo usuário e fornece uma maneira de declarar e 
agrupar coleções de constantes nomeadas 
c) um ponteiro em Java é um tipo de dado em que as variáveis têm uma faixa de valores que consistem 
em endereços de memória 
d) a herança múltipla na linguagem Java segue o mesmo formato e comportamento da linguagem C++ 
 
Comentários: 
 
a) Essa afirmação não é correta para a linguagem de programação Java. Em Java, uma matriz é um tipo de 
dado homogêneo que contém elementos do mesmo tipo. Além disso, a declaração de uma matriz em Java 
requer que seu tamanho seja especificado no momento da declaração. b) Essa afirmação é correta. A 
enumeração em Java é um tipo de dado ordinal que permite declarar e agrupar constantes nomeadas. Por 
exemplo, podemos definir uma enumeração "DiasDaSemana" com as constantes "SEGUNDA", "TERÇA", 
"QUARTA", "QUINTA", "SEXTA", "SÁBADO" e "DOMINGO". c) Essa afirmação não é correta para a linguagem 
de programação Java. Em Java, não existem ponteiros como na linguagem C ou C++. Em vez disso, as 
referências de objetos são usadas para se referir a objetos alocados dinamicamente na memória. Essas 
referências não contêm endereços de memória diretos, mas sim apontam para objetos alocados na 
memória. d) Essa afirmação não é correta. A linguagem Java não suporta herança múltipla direta de classes, 
embora possa ser simulada usando interfaces. Já na linguagem C++, a herança múltipla é suportada 
diretamente. Portanto, a herança múltipla na linguagem Java é diferente do formato e comportamento da 
linguagem C++. 
 
Gabarito: Letra B 
 
23. (INSTITUTO AOCP – ITEP - RN – 2021) Analise o código C++ a seguir: 
 
#include <iostream> 
using namespace std; 
 
void meuNome(string nome, int idade) { 
cout << "Seu nome é " << nome << " e sua idade é " << idade << endl; 
} 
 
int main() { 
string nome; 
int idade; 
cout << "Digite seu nome: "; 
cin >> nome; 
cout << "Digite sua idade: "; 
cin >> idade; 
meuNome(nome, idade); 
return 0; 
} 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
138
180
==30e709==
 
 
 
Para que a chamada da função meuNome, ocorra livre de erros, assinale a alternativa correta em relação 
à escrita dessa função. 
 
a) void meuNome(string Nome, int Idade) { cout << "Meu nome é "<< Nome << ". Tenho " << Idade << " 
anos.\n"; } 
b) meuNome(string nome, int idade) { cout << "Meu nome é "<< nome << ". Tenho " << idade << " 
anos.\n"; } 
c) void meuNome(nome, idade) { cout << "Meu nome é "<< nome << ". Tenho " << idade << " anos.\n"; } 
d) meuNome() { cout << "Meu nome é "<< nome << ". Tenho " << idade << " anos.\n"; } 
e) void meuNome(nome, idade) { cout << "Meu nome é %s.", nome; cout << "Tenho %d anos.", idade; } 
 
Comentários: 
 
A função meuNome deve receber dois argumentos, uma string para o nome e um inteiro para a idade, 
conforme definido na declaração da função. Na alternativa a), os nomes dos parâmetros da função estão 
corretos e a mensagem de saída está de acordo com a esperada no código original. Nas demais alternativas, 
há erros de sintaxe ou semântica que impedem a compilação ou o correto funcionamento do programa. 
 
Gabarito: Letra A 
 
24. (INSTITUTO AOCP – ITEP - RN – 2021) Em linguagens de programação, os tipos de dados podem ser 
classificados como elementares ou estruturados. Em qual das alternativas a seguir há exemplos somente 
de um mesmo tipo de dado (elementar ou estruturado) reconhecido pela linguagem C++? 
 
a) Struct e array. 
b) Integer e class. 
c) Float e class. 
d) Char e union. 
e) Enum e struct. 
 
Comentários: 
 
Uma struct é um tipo de dado definido pelo usuário que permite agrupar diferentes variáveis sob um único 
nome. É uma coleção de variáveis de tipos diferentes, que são acessadas por meio de um identificador 
comum. Um array é uma coleção de elementos de um mesmo tipo de dados, que é armazenada em uma 
sequência contígua de memória. Cada elemento pode ser acessado por meio de um índice. Integer é um tipo 
de dado primitivo que armazena valores numéricos inteiros. Em C++, ele é representado pelo tipo"int". Class 
é um tipo de dado definido pelo usuário que permite criar uma abstração de dados. É uma estrutura que 
encapsula dados e comportamentos relacionados a esses dados em uma única entidade. Uma classe pode 
conter variáveis, funções e métodos. Float é um tipo de dado primitivo que armazena valores numéricos em 
ponto flutuante. Em C++, ele é representado pelo tipo "float". Char é um tipo de dado primitivo que 
armazena um único caractere. Em C++, ele é representado pelo tipo "char". Union é um tipo de dado definido 
pelo usuário que permite que diferentes tipos de dados compartilhem o mesmo espaço de memória. A ideia 
é que apenas um dos tipos esteja ativo em um determinado momento e o acesso aos dados da union deve 
ser feito de forma cuidadosa para evitar comportamentos inesperados. Por fim, Enum é um tipo de dado 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
139
180
 
 
 
definido pelo usuário que permite definir um conjunto de constantes nomeadas. As constantes são 
atribuídas a valores inteiros sequenciais, a partir de um valor inicial especificado. A opção que apresenta 
exemplos somente de um mesmo tipo de dado (elementar ou estruturado) reconhecido pela linguagem C++ 
é a alternativa A) Struct e array. 
 
 
Gabarito: Letra A 
 
25. (INSTITUTO AOCP – ITEP - RN – 2021) Em relação às características da linguagem C, assinale a alternativa 
correta. 
 
a) É uma linguagem interpretada. 
b) Não possui tratamento de exceções. 
c) Possui 64 palavras reservadas. 
d) Suporta orientação a objeto. 
e) Os tipos básicos de variáveis para manipulação de caracteres são o char e string. 
 
Comentários: 
 
Vamos analisar cada alternativa: a) É uma linguagem interpretada. Esta afirmação é incorreta. C é uma 
linguagem compilada, o que significa que o código-fonte é transformado em código objeto por meio de um 
compilador antes de ser executado. b) Não possui tratamento de exceções. Esta afirmação é verdadeira. A 
linguagem C não possui mecanismos de tratamento de exceções nativamente, o que pode tornar o código 
propenso a erros inesperados em tempo de execução. c) Possui 64 palavras reservadas. Esta afirmação é 
incorreta. A linguagem C possui um número limitado de palavras-chave reservadas, que podem variar de 
acordo com a implementação do compilador. Por exemplo, o padrão C99 especifica apenas 32 palavras-
chave reservadas. d) Suporta orientação a objeto. Esta afirmação é parcialmente verdadeira. Embora a 
linguagem C não tenha recursos de orientação a objeto integrados, é possível implementar conceitos de 
programação orientada a objetos em C usando técnicas como estruturas e ponteiros de função. e) Os tipos 
básicos de variáveis para manipulação de caracteres são o char e string. Esta afirmação é incorreta. O tipo 
básico para manipulação de caracteres em C é o char, enquanto a string é uma sequência de caracteres 
terminada por um caractere nulo ('\0') e é implementada como um array de chars. 
 
Gabarito: Letra B 
 
26. (FADESP – Câmara de Marabá - PA – 2021) Considerando o operador de pós-incremento, utilizado na 
linguagem C, o resultado da execução do código é: 
 
#include <stdio.h> 
#include <stdlib.h> 
 
int main() { 
 int y, x = 10; 
 y = x++; 
 printf("x = %d\n", x); 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
140
180
 
 
 
 printf("y = %d\n", y); 
 system("pause"); 
 return 0; 
} 
 
a) x = 10 e y = 10. 
b) x = 11 e y = 11. 
c) x = 10 e y = 11. 
d) x = 11 e y = 10. 
e) x = 11 e y = 0. 
 
Comentários: 
 
O operador de pós-incremento (++) incrementa o valor de uma variável após o uso dessa variável em uma 
expressão. No código fornecido, o valor de x é atribuído a y antes de ser incrementado.Assim, a expressão y 
= x++ é avaliada da seguinte maneira: A variável y recebe o valor de x, que é 10. O operador de pós-
incremento é aplicado em x, fazendo com que o seu valor seja incrementado em 1, passando a ser 11. 
Portanto, no final da execução, o valor de x é 11 e o valor de y é 10. A alternativa correta é a letra d). 
 
Gabarito: Letra D 
 
27. (IBFC – IBGE – 2021) Quanto às linguagens de programação, assinale a alternativa que esteja 
tecnicamente incorreta. 
 
a) Java é uma das principais representantes das linguagens orientadas a objetos 
b) JavaScript, é uma sub-línguagem do Java, feita para o desenvolvimento de aplicações para Android 
c) Grande parte dos sistemas operacionais existentes no mercado foram escritos em C 
d) Assembly é uma linguagem de programação de baixo nível, também definida, muitas vezes, como 
linguagem de montagem 
e) A linguagem de programação C# foi desenvolvida pela Microsoft 
 
Comentários: 
 
A alternativa INCORRETA é a letra B. JavaScript é uma linguagem de programação que permite a você 
implementar itens complexos em páginas web — toda vez que uma página da web faz mais do que 
simplesmente mostrar a você informação estática — mostrando conteúdo que se atualiza em um intervalo 
de tempo, mapas interativos ou gráficos 2D/3D animados, etc. — você pode apostar que o JavaScript 
provavelmente está envolvido. Ademais, vejamos a alternativa C que trata sobre a linguagem C. A alternativa 
C está correta, já que grande parte dos sistemas operacionais foram escritos em C. Na verdade, muitos dos 
principais sistemas operacionais do mercado, como o Unix, o Linux e o Windows, foram criados com o uso 
da linguagem C. A linguagem C é muito popular para programação de sistemas, já que permite um controle 
mais preciso sobre o hardware do computador e é altamente portátil, permitindo que o mesmo código seja 
executado em diferentes sistemas operacionais. Além disso, a linguagem C é bastante eficiente e oferece 
recursos para gerenciamento de memória e acesso a dispositivos de hardware, o que a torna uma escolha 
popular para o desenvolvimento de drivers e outros softwares de baixo nível. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
141
180
 
 
 
 
Gabarito: Letra B 
 
28. (FAFIPA – Prefeitura de Arapongas - PR – 2020) A linguagem de programação C é uma linguagem 
compilada de propósito geral, estruturada, imperativa e procedural. Esta é uma das linguagens de 
programação mais populares e tem influenciado muitas outras linguagens de programação, como por 
exemplo, a linguagem Java. Observe a figura, onde é apresentado um código escrito em C: 
 
#include <stdio.h> 
 
int main() 
{ 
 int i = 3; 
 printf("%d", ++i); 
 return 0; 
} 
 
Após executar o código da figura no Compilador C, o que será apresentado no console? 
 
a) 4. 
b) 3. 
c) 2. 
d) 1. 
e) 0. 
 
Comentários: 
 
O código apresentado é um programa em C que imprime o valor de uma variável "i" na tela, utilizando a 
função "printf" da biblioteca padrão "stdio.h". Inicialmente, é declarada a variável "i" como um inteiro e 
atribuído o valor 3 a ela. Em seguida, a expressão "++i" é utilizada como argumento da função "printf". A 
expressão "++i" é um operador de pré-incremento, que incrementa o valor da variável "i" em 1 e retorna o 
novo valor. Portanto, quando a função "printf" é executada, o valor impresso na tela será 4, que é o valor 
resultante da operação "++i" (3+1). Ao executar o código apresentado, será exibido o valor 4 no console, pois 
o operador de pré-incremento (++i) incrementa o valor da variável i em 1 antes de imprimi-la na tela. Sendo 
assim, o valor de i será 4 no momento da impressão. 
Gabarito:Letra A 
 
29. (FAPEC – UFMS – 2020) Considere o código a seguir, utilizando a linguagem de programação C. Assinale 
a alternativa correta. 
 
#include <stdio.h> 
 
int main() { 
 int x = 1, y, z; 
 y = ++x; 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
142
180
 
 
 
 z = y++; 
 y = 2; 
 printf("%%%d, %d, %d%%", x, y, z); 
 return 0; 
} 
 
a) Será impresso: %1, 2, 3%. 
b) Será impresso: 2, 2, 3. 
c) Será impresso: %2, 2, 2%. 
d) Será impresso: 1, 2, 3. 
e) Ocorrerá o seguinte erro: incompatible type for argument 1 of ‘printf’. 
 
Comentários: 
 
O código declara três variáveis inteiras: x, y e z, inicializando apenas x com o valor 1. Em seguida, a variável 
y recebe o valor de x após ser incrementado em 1 (devido ao operador de pré-incremento ++x). Depois, a 
variável z recebe o valor de y antes de ser incrementado (devido ao operador de pós-incremento y++). A 
variável y recebe o valor 2. Em seguida, a variável y é atribuída com o valor 2. Por fim, a função printf() é 
chamada para imprimir o valor de x, y e z, respectivamente, em um formato específico. Como resultado, será 
impresso "%2, 2, 2%" no console. 
 
Gabarito: Letra C 
 
30. (FUCAP – Câmara da Estância Balneária de Praia Grande - SP – 2019) Assinale a única alternativa que 
indica corretamente a principal linguagem de programação usada para escrever o código-fonte das várias 
versões do Windows: 
 
a) Java; 
b) Javascript; 
c) PHP; 
d) C. 
 
Comentários: 
 
A principal linguagem de programação utilizada para escrever o código-fonte do sistema operacional 
Windows é a linguagem de programação C. O Windows é escrito em grande parte em C, embora também 
seja utilizada a linguagem Assembly para algumas partes críticas do sistema. 
 
Gabarito: Letra D 
 
31. (UFAM – UFAM – 2019) Considere o programa na linguagem C: 
 
#include <stdio.h> 
 
int main() { 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
143
180
 
 
 
 int array[10] = {1, -2, 3, -4}; 
 int a, loop; 
 a = 0; 
 for (loop = 1; loop >= 0; loop--) { 
 a = a + array[loop]; 
 } 
 printf(" %d", a); 
 return 0; 
} 
 
Ao executarmos o programa, o valor da saída será: 
 
a) −1 
b) 1 
c) −2 
d) 2 
e) 3 
 
Comentários: 
 
O programa declara um array de inteiros chamado array com tamanho 10, mas apenas os quatro primeiros 
elementos são inicializados. Em seguida, ele inicializa a variável a como zero e entra em um loop for que 
começa com a variável loop igual a 1 e decrementa até 0. Dentro do loop, a variável a é atualizada 
adicionando o valor do elemento array[loop]. Na primeira iteração do loop, loop é 1 e array[1] é -2, então a 
é atualizada para -2. Na segunda iteração do loop, loop é 0 e array[0] é 1, então a é atualizada para -1. Por 
fim, o programa imprime o valor de a, que é -1. Portanto, a resposta correta é a letra A) −1. 
 
Gabarito: Letra A 
 
32. (UFAM – UFAM – 2019) Considere o programa na linguagem C: 
 
#include <stdio.h> 
 int main(){ 
 int a, b, c; 
 printf("Digite dois números\n"); 
 scanf("%d%d", &a, &b); 
 c = a; 
 a = b; 
 b = a; 
 printf("%d %d\n", a, b); 
 return 0; 
 } 
 
Executando e digitando como entrada os números 12 e 14, a saída será: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
144
180
 
 
 
a) 12 14 
b) 12 12 
c) 14 14 
d) 14 12 
e) 26 
 
Comentários: 
 
A variável b é atribuída para a, e em seguida a variável a é atribuída novamente para b, o que acaba deixando 
ambas com o mesmo valor original. Portanto, a saída será 14 14, correspondente às variáveis a e b, 
respectivamente. A alternativa correta é a letra c). 
 
Gabarito: Letra C 
 
33. (FURB – Prefeitura de Porto Belo - SC – 2019) Leve em consideração o código abaixo, em linguagem C: 
 
#include <stdio.h> 
 
int a(int b) { 
 if (b <= 1) { 
 return 1; 
 } 
 return b * a(b - 1) - 1; 
} 
 
void main() { 
 int b = a(5), d = 0, c = 1, e = 43; 
 while (1) { 
 d = 1; 
 c += 2; 
 b -= 7; 
 if ((c + e + d + b) <= 44) { 
 printf("%d\n", c); 
 break; 
 } 
 d = a(d); 
 e -= c; 
 } 
 printf("%d\n", e); 
 printf("%d", b); 
} 
 
Os valores impressos na tela serão, respectivamente: 
 
a) 9, 28, 6. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
145
180
 
 
 
b) 3, 43, 27. 
c) 19, -37, 27. 
d) 11, 19, -1. 
e) 3, 43, 0. 
 
Comentários: 
 
O programa irá imprimir os valores 3, 43 e 27. A função "a(int b)" é uma função recursiva que calcula o 
fatorial de um número, mas com a particularidade de subtrair 1 do resultado final. Neste caso, a chamada 
"a(5)" retorna o valor 119, que é atribuído à variável "b". Dentro do laço "while", a variável "c" é 
incrementada em 2 a cada iteração, a variável "b" é decrementada em 7, e a variável "d" é atribuída o valor 
1. O resultado da expressão "(c + e + d + b) <= 44" é verdadeiro quando "c" vale 3, "e" vale 43, "d" vale 1 e 
"b" vale 27, o que faz o programa entrar no "if" e imprimir o valor de "c" (3) e sair do laço com "break". 
Depois disso, o programa imprime o valor de "e" (43) e o valor de "b" (que agora vale 27). 
 
Gabarito: Letra B 
 
34. (IBADE – Prefeitura de Vilhena - RO – 2019) Dado o código abaixo, escrito em linguagem de programação 
C, o que seria impresso na tela se fosse compilado e executado? 
 
int main(){ 
 int i, j, k=1, mat[4][4]; 
 for(i=0; i<4; i++) 
 for(j=0; j<4; j++){ 
 mat[i][j]=k; 
 k++; 
 } 
 
 for(i=0; i<4; i++) 
 for(j=2; j<4; j++) 
 if(i%j == 0) 
 printf("%d; ",mat[j][i]); 
 return 0; 
} 
 
a) 1; 3; 5; 7; 11 
b) 3; 6; 9; 12; 15 
c) 9; 13; 11; 16 
d) 1; 5; 10; 15 
e) 10 
 
Comentários: 
 
O código acima apresenta um programa em linguagem de programação C. O programa cria uma matriz de 
inteiros de tamanho 4x4 e preenche cada elemento com um valor sequencial a partir de 1. Em seguida, é 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
146
180
 
 
 
feita uma verificação em um laço de repetição em que, se a variável i for divisível por j, onde j é um valor 
entre 2 e 3, é impresso o valor do elemento da matriz correspondente à linha j e coluna i. Como i varia de 0 
a 3 e só é impresso o valor do elemento da matriz quando i é divisível por j (sendo j um número primo), 
apenas alguns elementos da matriz serão impressos. Neste caso, serão impressos os valores 9, 13, 11 e 16. 
Portanto, a resposta correta é a alternativa c) 9; 13; 11; 16. 
Gabarito: Letra C 
 
35. (IDECAN – UNIVASF – 2019) Dado o seguinte código fonte na linguagem C: 
 
#include <stdio.h> 
#include <unistd.h> 
 
int main() { 
 int i; 
 for (i = 0; i < 4; i++) { 
 if (i % 2 == 0) { 
 fork(); 
 } 
 } 
 return 0; 
} 
Assinale a alternativa que indica corretamente, incluindo o processo pai inicial, quantos processos são 
criados pelo programa mostrado no código após compilação com ocompilador GCC e execução na linha 
de comando. 
 
a) 5 
b) 4 
c) 3 
d) 2 
e )1 
 
 
Comentários: 
 
O código em questão cria processos filhos a partir de um processo pai utilizando a função fork(), que cria um 
novo processo. No loop for, a cada iteração, é verificado se i é um número par, caso seja, é chamada a função 
fork(), criando um novo processo filho que passa a ser executado em paralelo com o processo pai. O número 
de processos criados depende do número de iterações do loop e das condições definidas dentro do mesmo. 
Neste caso, são criados 4 processos (incluindo o processo pai inicial), já que o loop executa 4 vezes e a 
condição para criar um processo é que o valor de i seja par. 
 
Caso queira uma explicação mais detalhada, siga em frente, se já entendeu de forma suficiente, vá para a 
próxima questão. Quer entender mais? Então vamos lá: Ao iniciar a execução do programa, a variável i é 
inicializada com 0 e, em seguida, o loop é executado quatro vezes. Na primeira iteração, o valor de i é 0 e o 
resultado da expressão i % 2 é 0, portanto, o processo pai cria um novo processo filho usando a função fork(). 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
147
180
 
 
 
Esse novo processo filho também continua a executar o mesmo loop for. Na segunda iteração, o valor de i é 
1 e o resultado de i % 2 é 1, então o processo pai não cria um novo processo filho. No entanto, o processo 
filho criado na primeira iteração continua a executar o mesmo loop for. Na terceira iteração, o valor de i é 2 
e o resultado de i % 2 é 0, portanto, tanto o processo pai quanto o processo filho criado na primeira iteração 
criam um novo processo filho cada usando a função fork(). Ambos os processos filhos criados também 
executam o mesmo loop for. Na última iteração, o valor de i é 3 e o resultado de i % 2 é 1, portanto, o 
processo pai e o processo filho criado na segunda iteração não criam um novo processo filho. O primeiro 
processo filho criado na primeira iteração cria um novo processo filho e continua a executar o loop for, 
enquanto os outros dois processos filhos criados na terceira iteração executam o loop for. Assim, no final, 
serão criados 4 processos filhos em total, cada um executando o loop for a partir do ponto em que foi criado. 
 
Gabarito: Letra B 
 
36. (FCC – TRF - 3ª REGIÃO – 2019) Em C++, a chamada de uma função provoca o desvio do controle de 
execução para o início do código da função. Quando do seu término, o controle de execução volta para 
a instrução seguinte à sua chamada. Funções poupam espaço de memória, mas requerem mais tempo 
de execução. Se houver uma função muito pequena em relação à quantidade de instruções, em seu lugar 
utiliza-se 
 
a) DO WHILE. 
b) INCLUDE. 
c) PERFORM 
d) INLINE. 
e) DO UNTIL. 
 
 
Comentários: 
 
Em C++, se uma função for muito pequena em relação à quantidade de instruções, pode-se utilizar a diretiva 
inline para indicar ao compilador que o código da função deve ser "inserido" diretamente no local em que a 
função é chamada, evitando assim a sobrecarga de chamada de função e aumentando o desempenho do 
programa. A opção correta é a letra D. 
 
Gabarito: Letra D 
 
37. (COMPERVE – UFRN – 2019) O chefe do departamento de TI da Security10 enviou para João, por e-mail, 
o programa simples em linguagem C, mostrado abaixo, com intuito de aferir os conhecimentos do novo 
contratado sobre segurança de software. 
 
L1. void LerParametros (char *arg); 
L2. void main (int argc, char *argv[]) { 
L3. if (arg > 1){ 
L4. printf ("Parametros informados: %s\n", argv[1]); 
L5. LerParametros (argv[1]); 
L6. } 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
148
180
 
 
 
L7. } 
L8. void LerParametros (char *arg) { 
L9. char buffer[10]; 
10. strcpy (buffer, arg); 
L11. printf (buffer); 
L12. } 
 
 
Junto ao código, estava a mensagem: “João, por favor, verifique esse código. Sei que estamos fazendo 
algo errado e, com isso, expondo uma vulnerabilidade de segurança comum em programação, mas não 
consigo perceber qual. Falamos mais sobre isso na segunda”. João, ao analisar o código enviado, concluiu 
que esse apresenta como vulnerabilidade 
 
a) uma Falha de Segmentação (do inglês, Segmentation Fault) na linha L5. 
b) uma Falha de Segmentação (do inglês, Segmentation Fault) na linha L4. 
c) um Estouro de buffer (do inglês, Buffer Overflow) na linha L9. 
d) um Estouro de buffer (do inglês, Buffer Overflow) na linha L10. 
 
Comentários: 
 
A vulnerabilidade presente no código é o Estouro de buffer (Buffer Overflow) na linha L10. Isso ocorre porque 
a função strcpy() copia a string de argumento para o buffer sem verificar se a string cabe no buffer. Se a 
string de argumento for maior que o buffer (no caso, 10 caracteres), haverá um estouro de buffer e o 
comportamento do programa se torna indefinido, podendo levar a erros de segmentação, execução de 
código malicioso e outros problemas de segurança. Para corrigir essa vulnerabilidade, é necessário verificar 
o tamanho da string de argumento antes de copiá-la para o buffer. Uma solução seria usar a função strncpy(), 
que permite definir o tamanho máximo de cópia. 
Gabarito: Letra D 
 
38. (IF-MT – IF-MT – 2019) Analise o trecho de código escrito na linguagem C apresentado a seguir: 
 
#include <stdio.h> 
 
int main(void) { 
 int c, *x1, *x2; 
 x1 = &c; 
 x2 = x1; 
 printf("%p\n", x1); 
 printf("%p\n", x2); 
 return 0; 
} 
 
É CORRETO afirmar que: 
 
a) Sua execução apresentará uma mensagem de erro. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
149
180
 
 
 
b) O código possui erros léxicos e sintáticos. 
c) A sua execução apresentará na tela o resultado: %p\nx1 %p\nx2. 
d) A sua execução apresentará dois valores iguais. 
e) A sua execução não apresentará mensagens ou resultados. 
 
Comentários: 
 
O trecho de código apresentado não possui erros léxicos ou sintáticos e sua execução imprimirá na tela dois 
valores iguais, que representam o endereço de memória da variável 'c', que foi atribuído aos ponteiros 'x1' 
e 'x2'. O código apresentado cria três variáveis: um inteiro c, e dois ponteiros para inteiros x1 e x2. Em 
seguida, o ponteiro x1 é inicializado com o endereço de memória da variável c, através do operador "&". O 
ponteiro x2 é atribuído com o valor do ponteiro x1, ou seja, ambos os ponteiros apontam para o mesmo 
endereço de memória. Por fim, são impressos na tela os valores dos ponteiros x1 e x2, utilizando o 
especificador de formato "%p", que imprime o valor do ponteiro como um endereço hexadecimal na 
memória. Como ambos os ponteiros apontam para o mesmo endereço, a impressão dos dois valores será 
igual, resultando na impressão de dois endereços de memória iguais na tela. Caso você tenha alguma dúvida 
em relação ás demais alternativas, vamos analisar cada uma delas. a) A alternativa (a) afirma que a execução 
do código apresentará uma mensagem de erro, o que não é verdade. O código está correto e não apresenta 
nenhum erro durante a sua execução. b) A alternativa (b) afirma que o código possui erros léxicos e 
sintáticos, o que também não é verdade. O código está escrito de forma correta e pode ser compilado sem 
problemas. c) A alternativa (c) afirma que a execução do código apresentará na tela o resultado: %p\nx1 
%p\nx2, o que não é verdade. O código usa a função printf para imprimir o valor dos ponteiros, mas a saídacorreta seria apresentar dois endereços de memória diferentes, e não a string "%p\nx1 %p\nx2". e) A 
alternativa (e) afirma que a execução não apresentará mensagens ou resultados, o que não é verdade. A 
função printf é usada para imprimir os valores dos ponteiros na tela. 
 
Gabarito: Letra D 
 
39. (IF-MT – IF-MT – 2019) Considere o trecho de código escrito na linguagem C apresentado a seguir: 
 
#include <stdio.h> 
 
int MinhaFuncao(int a, int b) { 
 return a/**//b; 
} 
 
int main() { 
 printf("%d", MinhaFuncao (2,3)); 
 return 1; 
} 
 
Assinale a alternativa que apresenta o resultado da sua execução: 
 
a) 1.5 
b) 0.66667 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
150
180
 
 
 
c) 0 
d) 1 
e) 8 
 
Comentários: 
 
O resultado da execução do código apresentado será "0". Isso ocorre porque a função "MinhaFuncao" realiza 
uma divisão entre dois inteiros utilizando o operador "/", que retorna o resultado da divisão inteira. No caso 
em questão, 2 dividido por 3 resulta em 0,66, que arredondado para o inteiro mais próximo resulta em 0. 
Assim, a função retorna 0, que é impresso pelo printf no main. 
 
Gabarito: Letra C 
 
40. (COMPERVE – UFRN – 219) A linguagem de programação C está entre as linguagens de programação 
mais utilizadas para desenvolvimento de bibliotecas e sistemas operacionais pelas suas características de 
portabilidade e desempenho. É uma linguagem baseada em ponteiros que possui diversas formas de 
acesso ao conteúdo da memória. Dada uma matriz A com n colunas armazenada continuamente na 
memória, a lista de expressões que contém formas equivalentes de acesso ao mesmo conteúdo da 
memória é 
 
a) A[i][j], (&A+i*n+j), e A[i*n+j]. 
b) A[i][j], &(A+i*n*j), e A[i*n*j]. 
c) A[i][j], (*A+i*n*j), e A[i*n*j]. 
d) A[i][j], *(A+i*n+j), e A[i*n+j]. 
 
Comentários: 
 
A lista de expressões equivalentes é A[i][j], (A+in+j), e A[in+j]. A primeira expressão A[i][j] é a forma mais 
comum de acesso a um elemento da matriz. A segunda expressão (A+in+j) utiliza aritmética de ponteiros 
para acessar o elemento (i,j) da matriz A. Finalmente, a terceira expressão A[in+j] é uma forma alternativa, 
mas equivalente, de acessar o mesmo elemento usando aritmética de índices. 
 
Gabarito: Letra D 
 
41. (FCC – TRF - 4ª REGIÃO – 2019) As linguagens de programação 
 
a) como Java e C# têm seus códigos fontes transformados em uma linguagem intermediária (específica 
de cada linguagem), que será interpretada pela máquina virtual da linguagem quando o programa for 
executado. 
 
b) como C e Ruby são compiladas estaticamente e seus códigos-fontes são transformados diretamente 
em linguagem de montagem ou assembler. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
151
180
 
 
 
c) do tipo script como VBScript e Lua são utilizadas em aplicações web. No caso de sites do WordPress, 
por exemplo, os desenvolvedores criam plug-ins e usam o VB para solicitar o conteúdo. O código é 
executado como HTML, permitindo que os visitantes do site visualizem o conteúdo em seus navegadores. 
 
d) orientadas a objeto são todas compiladas e não interpretadas, por isso são consideradas de baixo 
nível, sendo as mais utilizadas para programação de sistemas embarcados ou aplicações que exijam 
acesso direto a registros da memória. 
 
e) interpretadas têm seu código-fonte traduzido por um programa tradutor ou assembly, que em seguida 
é executado pelo sistema operacional. Um exemplo disso é o Bytecode, que é uma linguagem que passa 
pelo processo de interpretação e, em seguida, é executada por um compilador. 
 
Comentários: 
 
Linguagens de programação como Java e C# utilizam um processo de compilação em duas etapas, em que o 
código-fonte é primeiro compilado para uma linguagem intermediária (Java bytecode e CIL, 
respectivamente), que é interpretada pela máquina virtual da linguagem quando o programa é executado. 
Esse processo é conhecido como compilação just-in-time (JIT). Essa abordagem oferece várias vantagens, 
como a portabilidade do código-fonte, já que a máquina virtual é executada em diferentes sistemas 
operacionais, e a segurança, já que a máquina virtual isola o programa do sistema operacional hospedeiro. 
Vejamos as demais alternativas. B) Em linguagens de programação como C e Ruby, o código-fonte é 
compilado diretamente para linguagem de máquina ou código de montagem (assembler). Essa abordagem 
é conhecida como compilação estática. O código gerado é específico para a plataforma em que a compilação 
ocorre e, portanto, não é portátil. C) Linguagens de script, como VBScript e Lua, podem ser utilizadas em 
aplicações web, mas o exemplo dado na alternativa não é preciso. Os plugins para o WordPress, por exemplo, 
geralmente são escritos em PHP e não em VBScript. O VBScript é uma linguagem de script da Microsoft que 
é executada em ambientes Windows. Além disso, o código em linguagens de script é interpretado, não 
compilado. D) Linguagens orientadas a objetos, como Java e C++, podem ser compiladas ou interpretadas, 
dependendo da implementação. Elas não são consideradas de baixo nível, já que o paradigma de 
programação orientada a objetos é relativamente alto nível e abstrato. Sistemas embarcados geralmente 
usam linguagens de baixo nível, como C ou Assembly. E) Linguagens interpretadas, como Python e Ruby, são 
traduzidas para código de máquina em tempo de execução por um programa chamado interpretador. O 
bytecode mencionado na alternativa é uma forma intermediária de código gerado por algumas linguagens 
interpretadas, como Java e Python. O bytecode é então interpretado pelo interpretador da linguagem para 
executar o programa. 
 
Gabarito: Letra A 
 
42. (NC-UFPR – ITAIPU BINACIONAL – 2019) Considere o programa abaixo: 
 
Assinale a alternativa que indica corretamente a quantidade de vezes que a palavra “prova” será 
impressa: 
 
#include <stdio.h> 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
152
180
 
 
 
int main() { 
 printf("prova"); 
 main(); 
 return 10; 
} 
 
a) nenhuma. 
b) infinitas vezes. 
c) uma vez. 
d) dez vezes. 
e) será impressa continuamente até que ocorra o estouro da pilha. 
 
Comentários: 
 
A resposta correta é a letra E. O programa apresenta uma chamada recursiva infinita da função main(), o que 
fará com que a string "prova" seja impressa continuamente até que ocorra o estouro da pilha de execução. 
Essa é uma situação conhecida como "stack overflow". O retorno return 10 não será alcançado. 
 
Gabarito: Letra E 
 
43. (NC-UFPR – ITAIPU BINACIONAL – 2019) Um programador escreve o programa abaixo e tenta compilar 
e executar. 
 
#include "stdio.h" 
 
int main() { 
 int i; 
 goto LOOP; 
 for (i = 0; i < 10; i++) { 
 printf("sucesso"); 
 LOOP: break; 
 } 
 return 0; 
} 
 
Assinale a alternativa que indica corretamente o que deve ocorrer: 
 
a) O programa não compila. 
b) O programa compila com sucesso, mas não imprime nada quando executado. 
c) O programa compila com sucesso, e quando executado imprime “sucesso” uma vez. 
d) O programa compila com sucesso, mas apresentará erro de execução. 
e) O programa compila com sucesso, e quando executado imprime “sucesso” dez vezes. 
 
Comentários: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
153
180
 
 
 
O programa compila com sucesso, mas não imprime nada quando executado, pois a instrução goto LOOP 
redireciona a execução do programa para a label LOOP que está logo abaixo, e a instrução break dentro do 
laço de repetição faz com que ele saia imediatamente, sem executar o printf. Portanto, o laço de repetição 
é executado apenas uma vez, e depois o programa é finalizado sem imprimir nada. 
 
Gabarito: Letra B 
 
44. (NC-UFPR – ITAIPU BINACIONAL – 2019) Considere o programa abaixo, escrito em linguagem C: 
 
#include <stdio.h> 
 
int i, j, k; 
 
int main() { 
 for (i = 0, j = 1, k = 2; i < k; i++) { 
 } 
 k = k + i % 2; 
 printf("%d,%d,%d", i, j, k); 
 return 0; 
} 
 
Assinale a alternativa que indica o que será impresso por esse programa. 
 
a) 0, 1, 2 
b) 1, 2, 3 
c) 3, 1, 3 
d) 3, 2, 1 
e) 3, 1, 2 
 
Comentários: 
 
A condição do loop é i<k, e como inicialmente k=2 e i=0, o loop não será executado nenhuma vez. Em seguida, 
k é atualizado para k+i%2, que é igual a 2+0%2, resultando em k=2. Por fim, é impresso o valor de i, j e k, que 
são respectivamente 0, 1 e 3. Portanto, a alternativa correta é a letra C. 
Gabarito: Letra C 
 
45. (IF-SP – IF-SP – 2019) Nas linguagens de programação Java e C++, o polimorfismo paramétrico é 
materializado, respectivamente, pelas funcionalidades e/ou características: 
 
a) Genéricos e Templates. 
b) Genéricos e Sobrecarga de Operadores. 
c) Sobrecarga e Templates. 
d) Anotações e Sobrescrita. 
 
Comentários: 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
154
180
 
 
 
 
Vamos analisar cada alternativa: A) Genéricos e Templates: em Java, o polimorfismo paramétrico é 
implementado através do recurso de "genéricos", que permite criar classes e métodos que possam ser 
usados com tipos diferentes de objetos, sem a necessidade de criar várias versões da mesma classe ou 
método. Em C++, o polimorfismo paramétrico é implementado através de "templates", que permitem criar 
classes e funções genéricas que possam ser usadas com diferentes tipos de dados. B) Genéricos e Sobrecarga 
de Operadores: a sobrecarga de operadores permite que um mesmo operador tenha comportamentos 
diferentes dependendo dos tipos de dados que estão sendo usados. Isso permite criar funções genéricas que 
possam ser aplicadas a diferentes tipos de dados. Em Java, a sobrecarga de operadores não é suportada, mas 
os genéricos podem ser usados para criar funções genéricas. Em C++, a sobrecarga de operadores é 
suportada e pode ser combinada com templates para criar funções genéricas que trabalham com diferentes 
tipos de dados. C) Sobrecarga e Templates: a sobrecarga permite criar funções e métodos com o mesmo 
nome, mas com comportamentos diferentes, dependendo dos parâmetros que são passados. Isso permite 
criar funções genéricas que possam ser usadas com diferentes tipos de dados. Em Java, a sobrecarga é 
suportada, mas os genéricos são a principal ferramenta para criar funções genéricas. Em C++, a sobrecarga 
é suportada e pode ser combinada com templates para criar funções genéricas que trabalham com 
diferentes tipos de dados. D) Anotações e Sobrescrita: a sobrescrita (ou "override") é uma técnica que 
permite que uma classe filha substitua um método da classe pai, mantendo o mesmo nome, mas com 
comportamento diferente. Isso não tem relação direta com o polimorfismo paramétrico. Já as anotações são 
utilizadas em Java para adicionar metadados a classes e métodos, o que pode ser útil em alguns casos, mas 
não está diretamente relacionado com o polimorfismo paramétrico. Em C++, não há suporte para anotações. 
 
Gabarito: Letra A 
 
46. (FAURGS – UFCSPA - RS – 2018) Analise o trecho de código abaixo, escrito em C++. 
 
class classe_base { 
private: 
 int a; 
 float x; 
protected: 
 int b; 
 float y; 
public: 
 int c; 
 float z; 
}; 
 
class subclasse_1 : public classe_base {...}; 
 
class subclasse_2 : private classe_base {...}; 
 
class subclasse_3 : private classe_base {...}; 
Com base nesse código, é correto afirmar que 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
155
180
 
 
 
a) na subclasse_1 os atributos b e y são protegidos. 
b) na subclasse_1 os atributos c e z são privados. 
c) na subclasse_2 os atributos b e y são públicos. 
d) na subclasse_2 os atributos c e z são protegidos. 
e) as instâncias da subclasse_3 podem acessar o atributo c. 
 
Comentários: 
 
Na subclasse_1, a classe derivada herdou a classe base com a palavra-chave "public". Isso significa que os 
membros públicos e protegidos da classe base serão herdados como protegidos pela subclasse. Portanto, a 
subclasse_1 terá os atributos b e y protegidos. As demais afirmativas estão incorretas: Na subclasse_1, os 
atributos c e z são públicos. Na subclasse_2, os atributos da classe base serão privados. Na subclasse_3, os 
atributos da classe base serão privados, e as instâncias da subclasse_3 não podem acessar o atributo c 
diretamente. 
Gabarito: Letra A 
 
47. (COTEC – Câmara de Rio Pardo de Minas - MG – 2018) Analise o código a seguir, escrito na linguagem 
de programação C. 
 
#include <stdio.h> 
 
void sub(int *x, int y){ 
 *x = 3; 
 y = *x + 1; 
} 
 
int main() { 
 int a, b, z; 
 a = 1; 
 b = 2; 
 sub(&a,b); 
 z = a + b; 
 printf("%d",z); 
 return 0; 
} 
 
O valor de Z, a ser mostrado na saída padrão, é: 
 
a) 3. 
b) 4. 
c) 5. 
d) 7. 
 
Comentários: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
156
180
 
 
 
No código, a função sub é chamada com o endereço da variável a e o valor da variável b como parâmetros. 
Dentro da função sub, o valor do inteiro apontado pelo ponteiro x é definido como 3, mas o valor de y 
passado como parâmetro não é afetado. Em seguida, no main, a variável z é definida como a soma de a (que 
agora tem valor 3) e b (que mantém seu valor original de 2), resultando em z igual a 5. Por fim, o valor de z 
é impresso na tela com o comando printf("%d", z);. 
 
Gabarito: Letra C 
 
48. (INSTITUTO AOCP – ITEP - RN – 2018) Em C++, como se denomina um conjunto de funções que 
compartilha um mesmo nome, porém contendo um código independente em cada uma? 
 
a) Redundância. 
b) Objeto. 
c) Encapsulamento. 
d) Polimorfismo. 
e) Herança. 
 
Comentários: 
 
A resposta correta é D - Polimorfismo. Em C++, um conjunto de funções que compartilha o mesmo nome, 
mas possui um código independente em cada uma, é conhecido como funções polimórficas. O polimorfismo 
é uma técnica que permite que objetos de diferentes classes sejam tratados como se fossem do mesmo tipo, 
e é um dos pilares da programação orientada a objetos. 
 
Gabarito: Letra D 
 
49. (INSTITUTO AOCP – ITEP - RN – 2018) Na linguagem C++, qual é a palavra-chave utilizada para a criação 
de novos tipos de dados? 
 
a) setw. 
b) while. 
c) struct. 
d) #include. 
e) #define. 
 
Comentários: 
 
A resposta correta é a alternativa "c) struct". A palavra-chave "struct" é utilizada na linguagem C++ para a 
criação de novos tipos de dados definidos pelo usuário. Com ela, é possível definir uma estrutura de dados 
contendo vários campos, cada um com seu próprio tipo. Essa estrutura pode ser usada para criar objetos do 
tipo definido pela estrutura, permitindo assim que o programador crie tipos de dados mais complexos e 
adaptados às suas necessidades.As outras alternativas apresentadas na questão são: 
 
a) "setw" é uma função da biblioteca padrão que permite definir a largura do campo de impressão em saídas 
formatadas para a tela ou arquivo. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
157
180
 
 
 
 
b) "while" é uma palavra-chave utilizada na linguagem C++ para implementar laços de repetição enquanto 
uma determinada condição é verdadeira. 
 
d) "#include" é uma diretiva do pré-processador que permite incluir o conteúdo de um arquivo de cabeçalho 
em um programa C++. 
 
e) "#define" é uma diretiva do pré-processador que permite definir uma constante ou um macro em um 
programa C++. 
Gabarito: Letra C 
 
50. (INSTITUTO AOCP – ITEP - RN – 2018) Qual das alternativas a seguir apresenta somente tipos de dados 
básicos da linguagem C? 
 
a) char, int e float. 
b) string, double e int. 
c) boolean, string e float. 
d) char, boolean e int. 
e) string, float e int. 
 
Comentários: 
 
A resposta correta é a alternativa a) char, int e float. Os tipos de dados básicos da linguagem C são: 
 
• char: tipo que representa caracteres. 
• int: tipo que representa números inteiros. 
• float: tipo que representa números de ponto flutuante de precisão simples. 
 
As outras alternativas apresentam pelo menos um tipo de dado que não é considerado básico na linguagem 
C: 
 
b) string: não é um tipo de dado básico na linguagem C, mas pode ser representado utilizando um array de 
caracteres. 
c) boolean e string: a linguagem C não possui um tipo de dado booleano nativo, e string também não é um 
tipo básico. 
d) boolean: como mencionado anteriormente, a linguagem C não possui um tipo de dado booleano nativo. 
e) string: novamente, string não é um tipo de dado básico na linguagem C. 
Portanto, apenas a alternativa a) apresenta somente tipos de dados básicos da linguagem C. 
 
Gabarito: Letra A 
 
51. (INSTITUTO AOCP – ITEP - RN – 2018) Em relação às principais caraterísticas da linguagem C, assinale a 
alternativa correta. 
 
a) Por ser uma linguagem de alto nível, não permite a manipulação de bits, bytes e endereços. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
158
180
 
 
 
b) Os códigos em C desenvolvidos para um determinado tipo de sistema operacional não são portáveis 
para outro sistema. Em outras palavras, a linguagem C não possui portabilidade. 
c) A linguagem C é estruturada em blocos, de modo que permite a criação de funções dentro de funções. 
d) A linguagem C permite a compartimentalização de código, escondendo do resto do programa as 
informações necessárias para realizar uma tarefa específica. 
e) É uma linguagem orientada a objeto. 
 
Comentários: 
 
a) ERRADO. A linguagem C permite a manipulação de bits, bytes e endereços, por isso é comumente utilizada 
em programação de sistemas embarcados e de baixo nível. 
b) ERRADO. Embora a portabilidade possa ser um problema em alguns casos, a linguagem C é conhecida por 
sua alta portabilidade, o que significa que o mesmo código pode ser compilado e executado em diferentes 
plataformas e sistemas operacionais. 
c) ERRADO. A linguagem C não permite a criação de funções dentro de outras funções, já que a função tem 
que ser declarada antes ou depois do escopo principal (main) do programa. 
d) CORRETO. Uma das principais características da linguagem C é a capacidade de dividir o código em funções 
e módulos, permitindo a criação de bibliotecas e a reutilização de código. Isso facilita a manutenção do 
código e torna o programa mais modular e organizado. 
e) ERRADO. A linguagem C não é uma linguagem orientada a objetos, embora possa ser usada para 
programação orientada a objetos com a utilização de bibliotecas e estruturas de dados personalizadas. 
 
Gabarito: Letra D 
 
52. (IBADE – IPM - JP – 2018) Considere o seguinte programa escrito na linguagem C 
 
#include <stdio.h> 
main () 
{char ex3[5]={'z','k','w','x','v'}; 
int cont1; 
cont1=2; 
printf ("%c %c",ex3[cont1+1], ex3[4]+cont1);} 
 
Ao executar esse programa, é apresentado como resposta: 
 
a) w w 
b) w x 
c) w v 
d) x x 
e) x v 
 
Comentários: 
 
O programa declara um array de caracteres "ex3" com tamanho 5 e preenche com as letras z, k, w, x, v. Em 
seguida, é declarada uma variável inteira "cont1" e é atribuído o valor 2. Na linha seguinte, é impresso o 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
159
180
 
 
 
conteúdo da posição "cont1+1" do array "ex3", que é o elemento de índice 3 (w). Na segunda parte do 
comando printf é impressa a soma do elemento de índice 4 do array "ex3" (v) com o valor de "cont1" (2), 
resultando na letra x. Portanto, a resposta correta é a letra B: "w x". 
Gabarito: Letra D 
 
53. (IBADE – Câmara de Cacoal - RO– 2018) Considere o seguinte programa escrito na linguagem C 
 
#include <stdio.h> 
 
int main() { 
 int g=0,i=0,l=0,k=0; 
 int m,n,o; 
 
 while (i<=10) { 
 m=g++; 
 n=+l; 
 o=++k; 
 i++; 
 } 
 printf (" m=%d n=%d o=%d ", m,n,o); 
 return 0; 
} 
 
Ao executar esse programa, os valores finais de ,e são respectivamente: 
 
a) 10 0 11 
b) 10 0 12 
c) 10 10 11 
d) 11 0 11 
e) 11 10 12 
 
Comentários: 
 
O programa apresentado define algumas variáveis inteiras e inicia cada uma delas com zero. Em seguida, um 
loop while é iniciado, e a cada iteração, as variáveis m, n e o recebem valores de expressões que contêm as 
variáveis g, l e k. m recebe o valor de g pós-incrementado, enquanto n recebe o valor de l sem alteração. Já 
o recebe o valor de k pré-incrementado. O loop while é executado enquanto i for menor ou igual a 10, e a 
cada iteração o valor de i é incrementado. No final do programa, é chamada a função printf para exibir os 
valores finais das variáveis m, n e o. Como g é pós-incrementado a cada iteração do loop, m receberá o valor 
de 10, já que a última atribuição a g é feita quando i é igual a 10. Como n recebe sempre o valor de l, que é 
zero em todas as iterações, n será igual a 0. Já o recebe o valor de k pré-incrementado a cada iteração, por 
isso será igual a 11 no final do loop. Portanto, a resposta correta é a alternativa A: 10 0 11. 
 
Gabarito: Letra A 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
160
180
 
 
 
54. (IBFC – Prefeitura de Divinópolis - MG – 2018) Referente à linguagem de programação C++, uma de suas 
características marcantes é a existência de: 
 
a) encapsulamento triplo 
b) herança múltipla 
c) polimorfismo duplo 
d) abstração complexa 
 
Comentários: 
 
Uma das principais características marcantes da linguagem de programação C++ é a herança múltipla, que 
permite a uma classe herdar características de mais de uma classe base. Isso pode tornar o código mais 
flexível e reutilizável, mas também pode tornar a hierarquia de classes mais complexa e difícil de entender. 
O encapsulamento é outra característica importante do C++, que permite que os dados sejam ocultados de 
outras partes do programa para evitar conflitos e garantir a segurança dos dados. O polimorfismo permite 
que objetos de diferentes classes sejam tratados de maneira semelhante, independentemente de suas 
diferenças de implementação. A abstração é uma característica maisampla que se aplica a muitas linguagens 
de programação, incluindo o C++, e envolve a capacidade de simplificar e generalizar o código para torná-lo 
mais fácil de entender e trabalhar. 
Gabarito: Letra B 
 
55. (COPESE – UFPI – 2018) Analise as assertivas a seguir sobre as linguagens de programação C, C++, Python 
e Java. 
 
I. A linguagem Python é uma linguagem interpretada e imperativa; 
 
II. Java, assim como C++, é um exemplo de linguagem que segue o paradigma de orientação a objetos; 
 
III. O identificador % é utilizado para identificar um comentário que utiliza somente uma linha em um 
programa escrito na linguagem C; 
 
IV. A linguagem de programação JAVA não fornece suporte à criação de tipos definidos pelo usuário. 
 
Assinale a opção referente às assertivas CORRETAS. 
 
a) Está correta somente a assertiva I. 
b) Estão corretas somente as assertivas I e III. 
c) Estão corretas somente as assertivas I e II. 
d) Estão corretas somente as assertivas III e IV. 
e) Estão corretas somente as assertivas II e IV. 
 
Comentários: 
 
A assertiva I está correta, pois Python é uma linguagem de script interpretada e imperativa. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
161
180
 
 
 
A assertiva II está correta, pois tanto Java quanto C++ são linguagens de programação orientadas a objetos. 
 
A assertiva III está incorreta, pois em C, o identificador para comentários que ocupam uma linha é //, 
enquanto % é utilizado em formatação de saída de dados com a função printf. 
 
A assertiva IV está incorreta, pois Java permite a criação de tipos definidos pelo usuário por meio de classes 
e interfaces. 
Gabarito: Letra C 
 
56. (FAPEC – UFMS – 2018) Considere o código a seguir escrito na linguagem C. 
 
#include <stdio.h> 
int main() 
{ 
 printf ("Valor total: %.1f\n", 9.1415169265); 
 return 0; 
} 
 
Assinale a alternativa que apresenta a saída correta. 
 
a) Valor total: 9.141517 
b) Valor total: 9.1 
c) Valor total: 9.14 
d) Valor total: 9.142 
e) Valor total: 9.141517e+00 
 
Comentários: 
 
A resposta correta é a letra B: Valor total: 9.1. A formatação %.1f indica que apenas um dígito após a vírgula 
deve ser exibido. No número 9.1415169265, o dígito seguinte ao 1 é o 5, que é maior ou igual a 5, portanto, 
ocorre o arredondamento para 9.2. No entanto, como foi especificado apenas um dígito após a vírgula, o 
resultado final é 9.1. 
Gabarito: Letra B 
 
57. (FAPEC – UFMS – 2018) Considere as afirmações sobre a linguagem C. 
 
I - É considerada uma linguagem fortemente tipada. 
 
II - É uma linguagem orientada a objetos. 
 
III - A função scanf é utilizada para ler dados da entrada padrão. 
 
Está(ão) correta(s): 
 
a) Apenas I. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
162
180
 
 
 
b) Apenas II. 
c) Apenas I e III. 
d) Apenas II e III. 
e) I, II e III. 
 
Comentários: 
 
A assertiva I está correta, pois a linguagem C é considerada uma linguagem fortemente tipada, o que significa 
que o tipo das variáveis deve ser definido antes de serem utilizadas e não podem ser implicitamente 
convertidas para outros tipos. A assertiva II está incorreta, pois a linguagem C não é orientada a objetos, 
embora permita a programação estruturada. A assertiva III está correta, pois a função scanf é utilizada para 
ler dados da entrada padrão, como teclado, e armazená-los nas variáveis correspondentes. 
 
Gabarito: Letra C 
 
58. (UFTM – UFTM – 2018) Aponte, dentre as alternativas, os resultados da resolução da seguinte expressão 
lógica escrita na linguagem C, para os valores de A, B e C, definidos nos cenários I, II e III: 
 
(A &&B ) && ((C || A || B) || ( !A && C)) 
 
I: A=true, B=true, C=false 
II: A=false, B=true, C=true 
III: A=false, B=true, C=false 
 
a) I: true, II: false, III: false. 
b) I: true, II: true, III: false. 
c) I: false, II: false, III: false. 
d) I: false, II: true, III: false. 
 
Comentários: 
 
Para o cenário I temos: 
 
(A && B) && ((C || A || B) || (!A && C)) 
(true && true) && ((false || true || true) || (!true && false)) 
true && true 
true 
 
Para o cenário II temos: 
 
(A && B) && ((C || A || B) || (!A && C)) 
(false && true) && ((true || false || true) || (!false && true)) 
false && true 
false 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
163
180
 
 
 
Para o cenário III temos: 
 
(A && B) && ((C || A || B) || (!A && C)) 
(false && true) && ((false || false || true) || (!false && false)) 
false && true 
false 
 
Logo, a alternativa correta é a A. 
Gabarito: Letra A 
 
59. (UFTM – UFTM – 2018) Considere o trecho de código em C abaixo: 
 
#include <stdio.h> 
 
void troca(int a, int b) { 
 int temp = a; 
 a = b; 
 b = temp; 
} 
 
int calcula(int a, int b, int *c) { 
 *c = a - b; 
 return a * (b + 1); 
} 
 
int main() { 
 int x, y, w, z; 
 x = 5; 
 y = 4; 
 troca(x, y); 
 z = calcula(x, y, &w); 
 printf("%d,%d", w, z); 
 return 0; 
} 
 
O que será exibido no console, quando a função main for executada? 
 
a) 1,25 
b) -1,24 
c) 1,24 
d) -1,25 
 
Comentários: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
164
180
 
 
 
No trecho de código fornecido, a função "troca" não está realizando a troca de fato, pois os parâmetros são 
passados por valor e não por referência. Portanto, as variáveis x e y na função main permanecem inalteradas. 
Em seguida, a função "calcula" é chamada com x=5 e y=4 e um ponteiro para a variável w é passado como 
terceiro argumento. Dentro da função "calcula", é calculado o valor de a-b e armazenado na posição de 
memória apontada por c (ou seja, na variável w na função main), e o valor a*(b+1) é retornado e armazenado 
em z na função main. Por fim, são impressos os valores de w e z separados por vírgula. Como a=5 e b=4, 
temos que c=a-b=1 e a*(b+1)=5*5=25. Portanto, os valores impressos serão "1,25". 
 
Gabarito: Letra A 
 
60. (UFES – UFES – 2018) Analise o trecho de código C++ abaixo. 
#include <stdio.h> 
 
class MinhaClasse { 
private: 
 int a; 
 
public: 
 MinhaClasse(int b) { 
 a = b; 
 ImprimeA(); 
 } 
 
 ~MinhaClasse() { 
 IncrementaA(); 
 ImprimeA(); 
 } 
 
 void IncrementaA() { 
 a++; 
 } 
 
 void ImprimeA() { 
 printf("[%d]", a); 
 } 
}; 
 
int main() { 
 MinhaClasse *mClasseD = new MinhaClasse(1); 
 MinhaClasse mClasseE(10); 
 return 0; 
} 
 
Considerando os conceitos de gerenciamento dinâmico de memória, o código C++ acima imprimirá na 
saída padrão: 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
165
180
 
 
 
a) [1][10][11][2] 
b) [1][10][2][11] 
c) [1][10][11] 
d) [1][10][2] 
e) [1][10] 
 
Comentários: 
 
A resposta correta é a alternativa C: "[1][10][11]". Isso porque o código cria duas instâncias da classe 
MinhaClasse: uma através da alocação dinâmica de memória com o operador new e outra na pilha de 
execução da função main(). A primeira instância criada, mClasseD, é criada com o construtor que recebeo 
parâmetro int b com valor 1. Ao imprimir o valor de a, é exibido "[1]". Em seguida, é chamado o destrutor da 
classe MinhaClasse, que incrementa o valor de a para 2 e imprime "[2]". A segunda instância criada, 
mClasseE, é criada na pilha de execução da função main() com o construtor que recebe o parâmetro int b 
com valor 10. Ao imprimir o valor de a, é exibido "[10]". Quando a função main() termina, o destrutor de 
mClasseE é chamado automaticamente, incrementando o valor de a para 11 e imprimindo "[11]". Portanto, 
a saída padrão será "[1][10][11]". 
Gabarito: Letra C 
 
61. (UFES – UFES – 2018) Analise o trecho de código C++ abaixo. 
 
using namespace std; 
int main() { 
 int arr[] = {10, 7, 2, 15, 4}; 
 vector<int> v(arr, arr + 5); 
 vector<int>::iterator it; 
 sort(v.rbegin(), v.rend()); 
 for (it = v.begin(); it != v.end(); it++) 
 printf("[%d]", *it); 
 return 0; 
} 
 
Considerando os conceitos de iteradores e algoritmos presentes na Standard Template Library (STL), o 
código C++ acima imprimirá na saída padrão: 
 
a) [4][15][2][7][10] 
b) [2][4][7][10][15] 
c) [10][7][2][15][4] 
d) [15][10][7][4][2] 
e) [7][9][13][15][20] 
 
Comentários: 
 
O trecho de código C++ apresenta a criação de um vetor "arr" com 5 elementos e em seguida é criado um 
objeto da classe vector "v" que recebe como argumentos os elementos do vetor "arr" utilizando a função 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
166
180
 
 
 
begin e end. Depois é declarado um iterador "it" do tipo vector<int>::iterator para percorrer o vetor "v". Em 
seguida, é chamada a função sort para ordenar o vetor em ordem decrescente, utilizando os iteradores 
rbegin() e rend(). Por fim, é feita a impressão na saída padrão utilizando o iterador "it" e um laço for. Assim, 
a resposta correta é a letra D, que corresponde à impressão dos elementos do vetor ordenados em ordem 
decrescente: [15][10][7][4][2]. 
Gabarito: Letra D 
 
62. (UFES – UFES – 2018) Um recurso relevante da linguagem C++ é o que declara membros de classe como 
static. O objetivo de se declarar um membro de classe como static em C++ é permitir que 
 
a) apenas uma cópia do membro seja compartilhada por todos os objetos da classe. 
b) cada objeto de uma classe tenha sua própria cópia do membro. 
c) o membro seja estático e seu valor não se altere durante a execução do código. 
d) o membro tenha um nome fixo durante a execução do código. 
e) se armazenem valores únicos. 
 
Comentários: 
 
A alternativa A está correta. Ao se declarar um membro de classe como static em C++, apenas uma cópia 
desse membro é criada e compartilhada por todos os objetos da classe, ou seja, não há uma cópia do 
membro para cada objeto criado. Dessa forma, o valor do membro é compartilhado e atualizado para todos 
os objetos que o acessam. Esse recurso pode ser útil em diversas situações, como para armazenar 
informações comuns a todos os objetos da classe ou para contar o número de objetos criados daquela classe. 
 
Gabarito: Letra A 
 
63. (UFES – UFES – 2018) Após reconhecer que muitas estruturas de dados e algoritmos são comumente 
utilizadas por programadores em C++, o comitê-padrão adicionou a Standard Template Library (STL) à 
C++ Standard Library. Os contêineres são estruturas de dados baseadas em templates populares. Sobre 
os contêineres da STL em C++, é INCORRETO afirmar: 
 
a) O contêiner set permite pesquisa rápida e não permite duplicatas. 
b) O contêiner priority_queue permite inserções ou exclusões rápidas em sua parte dianteira ou traseira 
e acesso direto a qualquer elemento desse tipo de contêiner. 
c) O contêiner multiset permite pesquisa rápida e duplicatas. 
d) No contêiner stack, o último elemento a entrar é o primeiro a sair. 
e) O contêiner vector permite inserções e exclusões rápidas na parte traseira e acesso direto a qualquer 
elemento desse tipo de contêiner. 
 
Comentários: 
 
A afirmativa incorreta é a letra B. O contêiner priority_queue não permite acesso direto a qualquer elemento, 
apenas a inserção ou exclusão rápidas em sua parte dianteira ou traseira. Acesso direto aos elementos é 
permitido em contêineres como vector e deque. As demais afirmativas estão corretas: o set permite pesquisa 
rápida e não permite duplicatas; o multiset permite pesquisa rápida e permite duplicatas; no stack, o último 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
167
180
 
 
 
elemento a entrar é o primeiro a sair; e o vector permite inserções e exclusões rápidas na parte traseira e 
acesso direto a qualquer elemento. 
Gabarito: Letra B 
 
64. (UFES – UFES – 2018) Observe o trecho de código em C abaixo, que implementa uma função f1 que tem 
uma string como parâmetro. 
 
void fl(char* str) { 
 while (*str) { 
 if (*str == ' ') { 
 *str = '-'; 
 } 
 str++; 
 } 
} 
 
Assumindo que a chamada da função foi feita passando uma string válida qualquer como argumento, é 
CORRETO afirmar sobre o código acima: 
 
a) o código da função entrará em laço infinito ao ser executado, pois, considerando-se uma string na 
linguagem C, a condição de parada está errada. 
b) o objetivo da função é substituir os caracteres do tipo espaço (i.e., ‘ ’) da string recebida por meio do 
parâmetro str por caracteres do tipo traço (i.e., ‘-’). 
c) o código da função acessará uma posição inválida de memória ao ser executado, pois, considerando-
se uma string na linguagem C, o incremento está errado. 
d) a função não fará nenhuma alteração na string recebida pelo parâmetro str, pois a execução nunca 
entrará no comando de laço. 
e) o objetivo da função é verificar se existem caracteres do tipo espaço e responder “verdadeiro”, caso 
haja, ou “falso”, em caso contrário. 
 
Comentários: 
 
A função implementada acima tem como objetivo substituir os caracteres do tipo espaço por traço na string 
recebida por meio do parâmetro str. Portanto, a alternativa correta é a letra b). 
a) o código da função entrará em laço infinito ao ser executado, pois, considerando-se uma string na 
linguagem C, a condição de parada está errada. 
b) o objetivo da função é substituir os caracteres do tipo espaço (i.e., ‘ ’) da string recebida por meio do 
parâmetro str por caracteres do tipo traço (i.e., ‘-’). 
c) o código da função acessará uma posição inválida de memória ao ser executado, pois, considerando-se 
uma string na linguagem C, o incremento está errado. 
d) a função não fará nenhuma alteração na string recebida pelo parâmetro str, pois a execução nunca entrará 
no comando de laço. 
e) o objetivo da função é verificar se existem caracteres do tipo espaço e responder “verdadeiro”, caso haja, 
ou “falso”, em caso contrário. 
Gabarito: Letra B 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
168
180
 
 
 
 
65. (UFES – UFES – 2018) O trecho de código em C abaixo implementa uma função f1 para imprimir, na saída 
padrão, a sigla de um estado, composta por dois caracteres e recebida por meio do parâmetro sigla, e, 
em seguida, imprimir um caractere de quebra de linha. 
 
void f1(char* sigla) { 
 char lSigla[2]; 
 lSigla[0] = sigla[0]; 
 lSigla[1] = sigla[1]; 
 printf("%s\n", lSigla); 
} 
 
Analise as afirmativas a seguir, acerca do trecho de código acima: 
I. Os dois caracteres da sigla do estado passada como argumento serão impressos e serão seguidos 
imediatamente por um caractere de quebrade linha. 
 
II. A troca da linha printf("%c%c\n", lSigla[0],lSigla[1]); pela linha original printf("%s\n", lSigla); produziria 
o resultado desejado. 
 
III. Os dois caracteres da sigla do estado passada como argumento serão impressos primeiramente, mas 
não se pode prever o que será impresso entre a segunda letra da sigla e o caractere de quebra de linha. 
 
IV. Não se pode prever nenhum dos caracteres que serão impressos, mesmo que se conheça a sigla do 
estado passada como argumento. 
 
É CORRETO o que se afirma em 
 
a) II e III, apenas. 
b) II, apenas. 
c) IV, apenas. 
d) III, apenas. 
e) I e IV, apenas. 
 
Comentários: 
 
A afirmativa I está correta, já que a função f1 imprime os dois caracteres da sigla seguidos por um caractere 
de quebra de linha. A afirmativa II está incorreta, já que a troca da linha de impressão para printf("%c%c\n", 
lSigla[0],lSigla[1]) irá imprimir os caracteres da sigla separados por um espaço, em vez de serem 
concatenados em uma string. A afirmativa III está correta, já que não há nenhum caractere sendo 
explicitamente colocado entre as duas letras da sigla na impressão, mas a função printf pode inserir alguns 
caracteres especiais, dependendo do sistema operacional e da configuração. A afirmativa IV está incorreta, 
já que a sigla é claramente definida no código e os caracteres que serão impressos podem ser previstos. 
Portanto, a resposta correta é a letra A: II e III, apenas. 
Gabarito: Letra A 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
169
180
 
 
 
66. (FADESP – IF-PA – 2018) Analise as afirmações sobre as linguagens de programação. 
 
I. O mecanismo de herança em Java ocorre em tempo de compilação, ou seja, todo reaproveitamento de 
código realizado por herança é imutável em tempo de execução. 
II. A linguagem C++ possui herança múltipla, Java possui somente herança simples para classes concretas 
e abstratas, mas possui herança múltipla para a “interface”, já Javascript não possui herança como 
funcionalidade nativa. 
III. C++ é uma linguagem compilada, Java é compilada para uma linguagem de máquina intermediária 
chamada de bytecodes, sendo esta interpretada e Javascript é interpretada. 
 
É correto afirmar que 
 
a) somente a afirmativa II é verdadeira. 
b) somente as afirmativas I e III são verdadeiras. 
c) somente as afirmativas I e II são verdadeiras. 
d) somente a afirmativa III é verdadeira. 
e) as afirmativas I, II e III são verdadeiras. 
 
Comentários: 
 
A questão apresenta algumas afirmações sobre linguagens de programação e pede que o candidato analise 
cada uma delas e determine a correta. A primeira afirmação é correta e se refere ao mecanismo de herança 
em Java, que é determinado em tempo de compilação e não pode ser alterado em tempo de execução. Já a 
segunda afirmação é incorreta ao afirmar que JavaScript não possui herança como funcionalidade nativa. De 
fato, a linguagem possui suporte à herança, embora de uma maneira diferente da maioria das outras 
linguagens. A terceira afirmação é correta e se refere à maneira como as linguagens C++, Java e JavaScript 
são compiladas ou interpretadas. Assim, a alternativa correta é a letra B, que afirma que somente as 
afirmações I e III são verdadeiras. 
Gabarito: Letra B 
 
67. (NUCEPE – SEDUC-PI – 2018) A estrutura de repetição for possui três campos que devem ser preenchidos. 
Conforme o exemplo a seguir, esses três campos são chamados respectivamente de: 
 
for (contador = 1; contador <= 10; contador++) 
{ 
 printf("%d", contador); 
} 
getch(); 
return(0); 
} 
 
a) inicialização, condição e iteração. 
b) incremento, condição e inicialização. 
c) condição, inicialização e incremento. 
d) inicialização, condição e iteração. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
170
180
 
 
 
e) inicialização, condição e iteração. 
 
Comentários: 
 
A alternativa correta é a letra E: inicialização, condição e iteração. Os três campos da estrutura de repetição 
for são, nessa ordem: a inicialização da variável de controle, a condição para a execução do loop e a iteração 
da variável de controle. No exemplo dado, a variável "contador" é inicializada com o valor 1, a condição de 
execução é que o contador seja menor ou igual a 10 e a iteração é feita através do incremento do contador 
em uma unidade a cada iteração do loop. 
Gabarito: Letra E 
 
68. (NUCEPE – SEDUC-PI – 2018) Analise o trecho do código a seguir e marque a única alternativa CORRETA 
em relação ao resultado da execução do programa. 
 
#include <iostream> 
 
void impr3() { 
 std::cout << "3" << std::endl; 
} 
 
void impr2() {} 
 
void impr1() { 
 std::cout << "1" << std::endl; 
} 
 
int main() { 
 impr3(); 
 std::cout << "2" << std::endl; 
 impr1(); 
 impr2(); 
 return 0; 
} 
 
a) 2 3 1 
b) 1 3 2 
c) 1 2 3 
d) 3 2 1 
e) 2 1 3 
 
Comentários: 
 
A resposta correta é a alternativa B, que corresponde à sequência de saída "1 3 2". Isso porque a função 
impr3() é chamada logo no início do programa, imprimindo o número 3. Em seguida, o número 2 é impresso 
com o comando "std::cout << "2" << std::endl;", e depois a função impr1() é chamada, imprimindo o número 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
171
180
 
 
 
1. A função impr2() não tem nenhum comando dentro dela e não produz saída. Portanto, a sequência correta 
de saída é "1 3 2". 
Gabarito: Letra B 
 
69. (NUCEPE – SEDUC-PI – 2018) De acordo com o código a seguir, qual comando estaria no lugar de 
***************? 
 
#include <iostream> 
 
int main(int argc, char *argv[]) { 
 int num1, num2; 
 std::cout << "Digite um numero: "; 
 *************** 
 std::cout << "Digite outro numero: "; 
 std::cin >> num1; 
 std::cout << "Os números digitados foram " << num1 << " e " << num2 << std::endl; 
 return 0; 
} 
 
a) scanf ("%d", &num3). 
b) scanf ("%d", &num1). 
c) scanf ("%d", &num2). 
d) scanf ("%f", &num2). 
e) scanf ("%f", &num1). 
 
Comentários: 
 
O código é um programa simples em C++ que solicita que o usuário digite dois números e os exibe na tela. O 
programa começa declarando duas variáveis inteiras, num1 e num2, e em seguida utiliza a biblioteca 
iostream para imprimir a mensagem "Digite um número:" na tela. Em seguida, o programa utiliza o operador 
de extração (>>) para obter um valor digitado pelo usuário e armazená-lo na variável num2. O programa 
então imprime outra mensagem "Digite outro número:", utilizando a mesma sintaxe. Depois disso, o 
operador de extração (>>) é utilizado novamente para obter um segundo valor digitado pelo usuário e 
armazená-lo na variável num1. Finalmente, o programa imprime uma mensagem que combina os valores de 
num1 e num2 e encerra sua execução. O comando correto para ler um valor inteiro do usuário e armazená-
lo na variável num2 em C++ é "std::cin >> num2;". O comando scanf é utilizado em C para a mesma finalidade. 
 
Gabarito: Letra C 
 
70. (NUCEPE – SEDUC-PI – 2018) O programa em linguagem C abaixo imprime os números pares que estão 
no intervalo de 0 a 50, em ordem crescente. Qual o incremento correto? 
 
int i 
 for (i=0; i<=50; ****X{ 
 printf("%d ", i); 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOSSANTOS
172
180
 
 
 
} 
 
a) i++ 
b) cont = cont + 1 
c) cont = i++ 
d) i = i + 1 
e) i = i + 2 
 
Comentários: 
 
O incremento correto seria a alternativa E, isto é, "i = i + 2". Isso porque o objetivo é imprimir somente 
números pares, e como todo número par é divisível por 2, é necessário incrementar o valor de i com um 
passo de 2 em 2 para que sejam considerados somente os números pares no intervalo de 0 a 50. 
 
Gabarito: Letra E 
 
71. (UFMT – UFSBA – 2017) A sobrecarga de operadores é uma técnica muito utilizada em C++. Assinale a 
alternativa que NÃO apresenta um operador que possa ser sobrecarregado em C++. 
 
a) "new" 
b) "new[]" 
c) "+" 
d) "?:". 
 
Comentários: 
 
A sobrecarga de operadores é uma técnica importante em C++, que permite aos desenvolvedores definir 
comportamentos personalizados para os operadores existentes na linguagem. Os operadores mencionados 
nas opções B e C - "new[]" e "+" - também podem ser sobrecarregados em C++. Vejamos cada alternativa. A) 
"new": "new" é um operador em C++ usado para alocar memória dinamicamente durante a execução de um 
programa. No entanto, esse operador não pode ser sobrecarregado, pois ele é um operador de membro e a 
linguagem C++ não permite a sobrecarga de operadores de membro. B) "new[]": "new[]" é um operador em 
C++ usado para alocar dinamicamente uma matriz de elementos em tempo de execução. Esse operador pode 
ser sobrecarregado para personalizar o comportamento da alocação dinâmica de matrizes. C) "+": "+" é um 
operador em C++ usado para realizar a operação de adição em dois valores. Esse operador pode ser 
sobrecarregado para personalizar o comportamento da adição de valores. D) "?:": "?:", também conhecido 
como operador ternário, é um operador condicional em C++ que retorna um dos dois valores, dependendo 
de uma condição. Esse operador pode ser sobrecarregado para personalizar o comportamento do operador 
ternário condicional. 
 
Gabarito: Letra D 
 
72. (UFMT – UFSBA – 2017) Assinale a alternativa que representa, na linguagem de programação C, a 
estrutura de repetição for que, por meio da variável de controle i, percorre o intervalo do índice 0 até o 
índice 32 inclusive, na ordem não decrescente. 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
173
180
 
 
 
a) for(i = 32; i > 0; i--) 
b) for(i = 32; i > -1; i--) 
c) for(i = 0; i < 33; i++) 
d) for(i = 0; i < 32; i++) 
 
Comentários: 
 
A alternativa que representa, na linguagem de programação C, a estrutura de repetição for que percorre o 
intervalo do índice 0 até o índice 32 inclusive, na ordem não decrescente, é a letra C: for(i = 0; i < 33; i++). 
Nesse loop for, a variável i é inicializada com 0, e a condição de parada é i < 33, que garante que o loop 
execute até que i chegue ao valor 33. O operador de incremento i++ garante que a variável i seja 
incrementada em cada iteração do loop. Assim, o loop executa 33 iterações, percorrendo o intervalo de 0 
até 32 inclusive, em ordem não decrescente. 
Gabarito: Letra C 
 
73. (UFRN – UFRN – 2017) Considere o seguinte código em C++ : 
 
int funcl(int paramA, int paramB) { 
 if (paramA > paramB) { 
 return funcl(paramA - paramB, paramB); 
 } else { 
 return paramA; 
 } 
} 
 
Nesse código, o algoritmo func1 implementa uma função matemática de 
 
a) divisão inteira 
b) resto da divisão inteira 
c) fatorial 
d) potenciação 
 
Comentários: 
 
O código em C++ implementa uma função que retorna o resto da divisão inteira de paramA por paramB. A 
função funcl utiliza recursividade para realizar a operação, subtraindo paramB de paramA enquanto paramA 
for maior que paramB. Quando paramA é menor ou igual a paramB, a função simplesmente retorna paramA, 
que será o resto da divisão inteira. Portanto, a alternativa correta é a letra B, que se refere ao resto da divisão 
inteira. 
 
Gabarito: Letra B 
 
74. (IF-CE – IF-CE – 2017) Considere as afirmações sobre os paradigmas de linguagens de programação. 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
174
180
 
 
 
I. Python, Ruby e Java são linguagens de programação interpretada multiparadigma, de tipagem dinâmica 
e forte. 
 
II. As linguagens de programação Object-Pascal, C++ e Java, embora deem suporte à Orientação a Objetos 
(OO), não são completamente orientadas a objetos. 
 
III. As linguagens de programação Smalltalk e Ruby são consideradas puramente orientadas a objetos, 
isto é, tudo é considerado um objeto, até mesmo os tipos básicos da linguagem. 
 
Está(ão) correta(s): 
 
a) II, apenas. 
b) I, II e III. 
c) III, apenas. 
d) I e II, apenas. 
e) II e III, apenas. 
 
Comentários: 
 
A resposta correta é a alternativa E. A afirmação I é verdadeira. Python, Ruby e Java são linguagens de 
programação interpretada multiparadigma, de tipagem dinâmica e forte. A afirmação II é falsa. Tanto C++ 
quanto Object-Pascal e Java são linguagens que dão suporte completo à Orientação a Objetos (OO). A 
afirmação III é verdadeira. Smalltalk e Ruby são linguagens consideradas puramente orientadas a objetos, 
pois tudo é considerado um objeto, inclusive os tipos básicos da linguagem. Portanto, as afirmações II e III 
estão corretas, enquanto a afirmação I está incorreta. A alternativa que corresponde a isso é a letra E. 
 
Gabarito: Letra E 
 
75. (IF-CE – IF-CE – 2017) Sabendo-se que programas de computador podem ser compilados ou 
interpretados, é verdadeiro dizer-se que programas 
 
a) desenvolvidos com Java igualmente aos desenvolvidos com C# são compilados. Ambos se utilizam de 
uma linguagem intermediária, para independer do sistema operacional. 
b) em PHP são interpretados tanto quanto programas em Java para web. 
c) em JavaScript funcionam Client-Side, ou seja, rodam no lado cliente, por isso precisam ser previamente 
compilados. 
d) desenvolvidos para internet precisam de um servidor de aplicação como IIS ou Apache. Devido a isso, 
são linguagens interpretadas pelo servidor. 
e) feitos com linguagem que precise de uma máquina virtual ou semelhante, como o Java, são executados 
e interpretados por ela em tempo de execução (Just-in-time), por isso não precisam ser compilados. 
 
Comentários: 
 
Pessoal, nosso gabarito é a letra A. Programas desenvolvidos em Java e C# são compilados e utilizam uma 
linguagem intermediária para serem executados de forma independente do sistema operacional. Essa 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
175
180
 
 
 
linguagem intermediária é conhecida como bytecode no caso do Java e IL (Intermediate Language) no caso 
do C#. PHP é uma linguagem interpretada, enquanto Java pode ser compilado ou interpretado, dependendo 
da implementação utilizada (por exemplo, a JVM pode compilar o bytecode para código nativo ou interpretá-
lo). JavaScript é uma linguagem interpretada que é executada no navegador do cliente (Client-Side) e não 
precisa ser previamente compilada. Programas desenvolvidos para internet não necessariamente precisam 
de um servidor de aplicação como IIS ou Apache, mas é comum que sejam executados em um ambiente de 
servidor e interpretados pelo servidor antes de serem enviados para o cliente. Linguagens que precisam de 
uma máquina virtual, como Java, geralmente são compiladas para bytecode e depois interpretadas pela 
máquina virtual em tempo de execução (Just-in-time), mas isso não significa que elas não precisam ser 
compiladas. 
 
Gabarito:Letra A 
 
76. (IFB – IFB – 2017) Analise as seguintes afirmativas. I) Ocultar dados dentro das classes e torná-los 
disponíveis apenas por meio de métodos é uma técnica muito usada em programas orientados a objetos, 
chamada de sobreescrita de classes. II) Uma subclasse pode implementar novamente métodos que foram 
herdados de uma superclasse. Chamamos isso de sobrecarga de atributos. III) Em Java não existe herança 
múltipla como em C++. Essa limitação pode ser parcialmente simulada pelo uso de encaminhamento de 
métodos a variáveis de instância. Assinale a alternativa CORRETA com relação às afirmativas acima. 
 
a) Apenas a afirmativa I está correta. 
b) Apenas a afirmativa II está correta. 
c) Apenas a afirmativa III está correta. 
d) Apenas as afirmativas I e III estão corretas. 
e) Apenas as afirmativas I e II estão corretas. 
 
Comentários: 
 
A afirmativa I está incorreta, pois a técnica mencionada é chamada de encapsulamento, não de sobreescrita 
de classes. A afirmativa II está incorreta, pois a definição correta de sobrecarga é quando uma classe tem 
vários métodos com o mesmo nome, mas com parâmetros diferentes. A afirmativa III está correta, pois em 
Java não é possível herdar de múltiplas classes, mas é possível implementar múltiplas interfaces e usar o 
encaminhamento de métodos para simular herança múltipla. 
 
Gabarito: Letra C 
 
77. (UFES – UFES – 2016) O código C abaixo se propõe a informar a média da idade de algumas pessoas com 
uma precisão de duas casas decimais, dados o número de pessoas (pessoas, com 0<pessoas<10) e suas 
respectivas idades. 
 
#include <stdio.h> 
 
int main() { 
 int pessoas, i, soma, idade; 
 double media; 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
176
180
 
 
 
 
 scanf("%d", &pessoas); 
 soma = 0; 
 
 for(i = 0; i < pessoas; i++) { 
 scanf("%d", &idade); 
 soma = soma + idade; 
 } 
 
 media = soma/pessoas; 
 printf("%.2f", media); 
 
 return 0; 
} 
 
A respeito do código acima, é CORRETO afirmar: 
a) O código faz corretamente o que é proposto. 
b) O código interrompe sua execução com um segmentation fault. 
c) O código pode ser corrigido para fazer o que se propõe, caso seja feita uma conversão de tipos no local 
apropriado. 
d) O código está errado, pois o formato do printf não é apropriado para impressão com precisão de duas 
casas decimais. 
e) O código está errado, pois a variável idade deveria ser dividida pela variável pessoas dentro do for, ou 
seja, soma = soma + idade/pessoas;. 
 
Comentários: 
 
O código se propõe a calcular a média da idade de um número específico de pessoas e exibir o resultado com 
uma precisão de duas casas decimais. O código faz a leitura do número de pessoas e em seguida lê as idades 
de cada pessoa, somando todas elas em uma variável "soma". Em seguida, o código calcula a média dividindo 
a soma pelo número de pessoas e armazenando o resultado na variável "media". Por fim, o código imprime 
o valor de "media" com precisão de duas casas decimais usando o formato de saída "%.2f". A opção correta 
é a letra C, pois embora o código esteja funcionando corretamente para o que se propõe, é possível que 
ocorra um erro caso o valor de "pessoas" seja maior ou igual a 10, já que o código não está preparado para 
lidar com esse caso. Além disso, o código poderia ser otimizado para utilizar uma variável do tipo "float" em 
vez de "double", já que a precisão necessária é de apenas duas casas decimais. 
 
Gabarito: Letra C 
 
78. (CESPE – TJ-SE– 2014) Para que a máquina entenda os comandos de um programa desenvolvido na 
linguagem C, o programa deve ser compilado e traduzido para a linguagem da máquina. 
 
Comentários: 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
177
180
 
 
 
Sim, essa afirmação está correta. O código escrito na linguagem C é interpretado pelo compilador da 
linguagem, que é responsável por traduzir o código para a linguagem de máquina que o computador é capaz 
de entender e executar. Sem o processo de compilação, o programa escrito em C não poderia ser executado 
diretamente pela máquina. 
 
Gabarito: Correto 
 
79. (CESPE – TJ-SE– 2014) O comando em linguagem C apresentado abaixo é um tipo de laço que pode ser 
finalizado com o comando break; portanto, esse comando não tem garantia de laço infinito. 
 
for (;;) printf ("Exemplo de laço infinito.\n") ; 
 
Comentários: 
 
O laço for apresentado não tem condição de término, portanto é um laço infinito. No entanto, é possível 
finalizá-lo com o uso do comando break em alguma condição dentro do próprio laço. 
 
Gabarito: Correto 
 
80. (CESPE – ANTT – 2014) O paradigma de orientação a objetos é amplamente utilizado em várias 
linguagens: Java é compilada em bytecode e executada em uma máquina virtual (JVM); C++ apresenta 
bom desempenho ao unir características de alto e de baixo níveis; Python/Ruby/PHP podem ser utilizadas 
para desenvolvimento web, mas sem aplicações para dispositivos móveis 
 
Comentários: 
 
A afirmação apresentada está incorreta. Embora Java seja compilada em bytecode e executada em uma 
máquina virtual (JVM), isso não significa que as outras linguagens mencionadas não possam ser usadas para 
desenvolvimento de aplicativos móveis. Na verdade, tanto Python quanto Ruby têm uma grande variedade 
de frameworks e bibliotecas disponíveis para desenvolvimento de aplicativos móveis, como Kivy, PyMob e 
Rubymotion. Além disso, o PHP também pode ser usado para o desenvolvimento de aplicativos móveis, 
embora em menor escala. 
Gabarito: Errado 
 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
178
180
 
 
 
GABARITO 
1. Letra B 
2. Correto 
3. Errado 
4. Errado 
5. Correto 
6. Letra D 
7. Letra B 
8. Letra C 
9. Letra C 
10. Letra C 
11. Letra A 
12. Letra C 
13. Letra B 
14. Letra A 
15. Letra A 
16. Letra B 
17. Letra B 
18. Letra D 
19. Letra C 
20. Letra A 
21. Letra D 
22. Letra B 
23. Letra A 
24. Letra A 
25. Letra B 
26. Letra D 
27. Letra B 
28. Letra A 
29. Letra C 
30. Letra D 
31. Letra A 
32. Letra C 
33. Letra B 
34. Letra C 
35. Letra B 
36. Letra D 
37. Letra D 
38. Letra D 
39. Letra C 
40. Letra D 
41. Letra A 
42. Letra E 
43. Letra B 
44. Letra C 
45. Letra A 
46. Letra A 
47. Letra C 
48. Letra D 
49. Letra C 
50. Letra A 
51. Letra D 
52. Letra D 
53. Letra A 
54. Letra B 
55. Letra C 
56. Letra B 
57. Letra C 
58. Letra A 
59. Letra A 
60. Letra C 
61. Letra D 
62. Letra A 
63. Letra B 
64. Letra B 
65. Letra A 
66. Letra B 
67. Letra E 
68. Letra B 
69. Letra C 
70. Letra E 
71. Letra D 
72. Letra C 
73. Letra B 
74. Letra E 
75. Letra A 
76. Letra C 
77. Letra C 
78. Correto 
79. Correto 
80. Errado 
 
Paolla Ramos
Aula 03 - Somente em PDF
POLITEC-PE (Perito Criminal - Área 5 - Ciências da Computação ou Sistemas de Informação) Desenvolvimento de Software - 2024 (Pós-Edital)
www.estrategiaconcursos.com.br
04397573395 - JOSIAS STONE PINHEIRO DOS SANTOS
179
180

Mais conteúdos dessa disciplina