Comentários

0%

NÃO PODE FALTAR

Operações e expressões

Vanessa Cadan Scheffer

Leitura dos dados

A leitura dos dados é feita para processar e gerar informações. Essa etapa é construída com base na combinação de operações aritméticas, relacionais, lógicas e outras técnicas de programação.

Fonte: Shutterstock.

Deseja ouvir este material?

Áudio disponível no material digital.

Praticar para aprender

Você já está dominando os tipos de dados que podem ser utilizados em um sistema computacional e já sabe como declará-los e guardá-los temporariamente em variáveis. Além disso, ao longo desta seção você aprenderá a processar os dados por meio de operações e expressões matemáticas e a combiná-las usando operadores lógicos.

A fim de colocarmos em prática os conhecimentos a serem aprendidos, vamos analisar a seguinte situação-problema: Seu chefe está muito contente, pois ele sabe que agora você será capaz de resolver problemas mais desafiadores na empresa. Sua última atividade foi escrever um programa na linguagem C que fosse capaz de ler a idade e o nome do cliente, bem como a classificação do filme que ele deseja locar. Posteriormente, seu programa deveria imprimir todas essas informações na tela, conforme o padrão a seguir:

Cliente: José das Couves
Idade: 18 anos
Classificação do filme: 12 anos 

Agora, seu chefe pediu para você melhorar esse programa, de forma que ele seja capaz de mostrar ao cliente:

  1. Se o filme desejado está disponível ou não.
  2. Se o filme desejado pode ser locado pelo cliente, levando em consideração se o filme está disponível e se ele é indicado para sua faixa etária.
  3. Quantos anos faltam para que a classificação do filme seja adequada à faixa etária do cliente.
Roteiro do professor - SP 

Antes de apresentar a solução aos alunos, leve-os a pensar sobre os requisitos colocados pelo dono da empresa. Reserve um tempo maior para discutir sobre o terceiro requisito: quantos anos faltam para que a classificação do filme seja adequada à faixa etária do cliente.

Isso seria facilmente resolvido por meio de um comando condicional (if-else). Contudo, como esse conteúdo ainda não foi apresentado, peça aos alunos que discutam, entre si, como esse requisito poderia ser implementado sem o uso desse tipo de comando.

Perguntas/instruções para direcionar a discussão:

  1. Peça aos alunos que abram o software Paiza.io e tentem imprimir o resultado de uma expressão lógica, por exemplo: printf("%d", 2 > 1) e printf("%d", 2 > 3). Eles vão perceber que os resultados são 0 para falso e 1 para verdadeiro.
  2. Lembrando da matemática básica, o que acontece se multiplicarmos um número por 0? E se for por 1?

Após mostrar a solução do problema, é interessante discutir com os alunos que o “não-uso” de um comando condicional pode ter tornado o programa ainda mais rápido (eficiente). Isso é importante para que o aluno entenda que parar e refletir sobre uma solução, antes de partir para a implementação com os recursos que ele já conhece, é um aspecto fundamental para um profissional da área de desenvolvimento de software.

conceito-chave

Desde o momento em que você liga um computador, tablet ou smartphone, centenas de processos são iniciados e passam a competir no processador para que possam ser executados e para que a “mágica” do mundo digital possa acontecer. Todos os resultados desses sistemas são obtidos por meio do processamento de dados e, nesta seção, vamos estudar os recursos que lhe permitirão implementar soluções com processamento.

Sistemas computacionais são construídos para resolver os mais diversos problemas. Todos esses sistemas, independentemente da sua aplicação, são construídos em três partes: entrada, processamento e saída. Na entrada, os valores utilizados pelo processamento são lidos basicamente a partir de três fontes:

Nos três casos, a leitura dos dados é feita apenas para processar e gerar informações, e essa etapa é construída com base na combinação de operações aritméticas, relacionais, lógicas e outras técnicas de programação que você conhecerá no decorrer desta seção.

OPERADORES ARITMÉTICOS NA LINGUAGEM C

Vamos começar a aprimorar nossos algoritmos com as operações aritméticas. Observe o Quadro 1.3, que demonstra algumas operações disponíveis na linguagem C e seus respectivos exemplos.

Quadro 1.3 | Operações aritméticas básicas em linguagens de programação
Operador Descrição Exemplo Resultado
+ Adição z = x + y
4 + 2
z = 6
- Subtração z = x – y
4 – 2
z = 2
* Multiplicação z = x * y
4 * 2
z = 8
/ Divisão (Quociente) z = x/y
4 / 2
z = 2
% Módulo (resto de uma divisão) z = x % y
4 % 2
z = 0
Fonte: adaptado de Manzano (2015, p. 43).
Exemplificando

Vamos criar um programa em C que some a idade de duas pessoas e imprima na tela o resultado. No Código 1.11 está o código que realiza tal processo. Veja que, primeiramente, as idades foram solicitadas e armazenadas em duas variáveis (linhas de 7 e 9 – entrada pelo usuário), para depois ser feito o processamento (linha 10) e, por fim, a exibição do resultado na tela (linha 11).

Código 1.11 | Soma da idade de duas pessoas
#include <stdio.h>
int main(){
    int idade1 = 0;
    int idade2 = 0;
    int resultado=0;
    printf("\n Digite a primeira idade: ");
    scanf("%d", &idade1);
    printf("\n Digite a segunda idade: ");
    scanf("%d", &idade2);
    resultado = idade1 + idade2;
    printf("\n Resultado = %d", resultado);
}
Fonte: elaborado pela autora.

Agora é com você !

Para visualizar o objeto, acesse seu material digital.

 

Quando trabalhamos com operadores, a ordem de precedência é muito importante. Segundo Soffner (2013), os operadores aritméticos apresentam a seguinte ordem de execução:

  1. Parênteses.
  2. Potenciação e radiciação.
  3. Multiplicação, divisão e módulo.
  4. Soma e subtração.
Reflita

Ao implementar uma solução em software, um dos maiores desafios é garantir que a lógica esteja correta e, tratando-se da parte de processamento, ao escrever uma expressão matemática, é preciso atentar à ordem de precedência dos operadores. Se, ao implementar uma solução que calcula a média aritmética, você usar a expressão resultado = a + b / c, você terá o resultado correto? Se for um cálculo para o setor financeiro de uma empresa, seu cálculo mostraria lucro ou prejuízo?

Das operações aritméticas apresentadas no Quadro 1.3, a operação módulo (%) talvez seja a que você ainda não tenha familiaridade. Essa operação faz a divisão de um número considerando somente a parte inteira do quociente e retorna o resto da divisão.

Exemplificando

Vamos aplicar o operador módulo para efetuar o processamento de 43 % 3. 

#include <stdio.h>
int main(){
    int resultado = 43 % 3;
    printf("Operacao modulo 43 % 3 = %d", resultado);
} 

Ao executar o código, obtém-se como resultado o resto da divisão, ou seja, nesse caso, o valor 1. Veja na Figura 1.16 o cálculo matemático que é efetuado e como o resultado é obtido., você terá o resultado correto? Se for um cálculo para o setor financeiro de uma empresa, seu cálculo mostraria lucro ou prejuízo?

Figura 1.16 | Operação aritmética módulo
A figura mostra uma operação aritmética módulo. É apresentada a seguinte operação: 43 dividido por 3. O número 43 é o dividendo e o 3 é o divisor. O resultado dessa operação, ou seja, o quociente, é 14. E o Resto é 1. A operação aritmética módulo faz a divisão de um número considerando somente a parte inteira do quociente e retorna o resto da divisão.
Fonte: elaborada pela autora.

Agora é com você!

Para visualizar o objeto, acesse seu material digital.

 

Reflita

Como podemos usar o operador aritmético módulo (%) para identificar se um número inteiro é ímpar ou par?

Os operadores aritméticos podem ser classificados em unário ou binário (MANZANO, 2015). Os binários, que nós já conhecemos no Quadro 1.3, são operadores que usam dois componentes (operandos); já os operadores unários usam apenas um componente (operando). É o caso dos operadores aritméticos de incremento (++) e decremento (--). Esses operadores acrescentam ou diminuem “um” ao valor de uma variável e podem ser usados de duas formas:

O Quadro 1.4 apresenta um resumo dos operadores unários.

Quadro 1.4 | Operadores aritméticos unários
Operador Descrição Exemplo Resultado
++ Pós-incremento x++ x+1
++ Pré-incremento ++x x+1
-- Pós-decremento y-- y-1
-- Pré-decremento --y y-1
Fonte: elaborado pela autora.
Exemplificando 

Para entender a diferença entre as formas de uso dos operadores de incremento e decremento (pré e pós), vejamos os exemplos a seguir:

#include <stdio.h>
int main(void){
	int x = 0;
    int resultado = x++;
    printf("\n Resultado = %d", resultado);
    printf("\n X = %d", x );
} 

Na linha 4, o operador pós-incremento é utilizado juntamente com o operador de atribuição (=). Isso significa que, primeiramente, o valor da variável x será atribuído à variável resultado e só depois (por isso se chama operador pós-incremento) o valor de x será incrementado de 1. Assim, o resultado da execução do programa é:

Resultado = 0
X = 1

Por outro lado, se tivéssemos utilizado o operador pré-incremento, o resultado seria diferente.

Faça o teste você mesmo. Altere a expressão da linha 4 do programa acima para: int resultado = ++x;

Nesse caso, a variável x seria, primeiramente, incrementada de 1 e somente depois seu valor seria atribuído à variável resultado. Portanto, a saída do programa seria:

Resultado = 1
X = 1

OPERADORES RELACIONAIS NA LINGUAGEM C

Faz parte do processamento de um programa fazer comparações entre valores, para, a partir do resultado, realizar novas ações. Por exemplo, podemos criar um programa que some a nota de dois bimestres de um aluno e efetue a média aritmética. Com base no resultado, se o aluno obtiver média superior a seis, ele estará aprovado; caso contrário, estará reprovado. Veja que é necessário fazer uma comparação da média obtida pelo aluno com a nota estabelecida como critério.

Em programação, para compararmos valores, usamos operadores relacionais. O Quadro 1.5 apresenta os operadores usados na linguagem de programação C (DEITEL; DEITEL, 2011).

Quadro 1.5 | Operadores relacionais em linguagens de programação
Operador Descrição Exemplo
== igual a x==y
!= diferente de x!=y
> maior que x>y
< menor que x<y
>= maior ou igual que x>=y
<= menor ou igual que x<=y
Fonte: adaptado de Manzano (2015, p. 82).

Os operadores relacionais são usados para construir expressões booleanas, ou seja, expressões que terão como resultado verdadeiro (valor 1) ou falso (valor 0). Quando fazemos alguma operação relacional na linguagem C, se a expressão for verdadeira, o resultado será 1; caso contrário, retornará zero, se a expressão for considerada falsa.

Atenção

Não confunda o operador de comparação “==” com o operador de atribuição “=”. Lembre-se: esses operadores têm diferentes propósitos, portanto, se ocorrer esse equívoco – que é comum na linguagem C –, se você utilizar o operador de comparação em uma atribuição, o compilador acusará um erro.

Vamos criar um programa que solicita ao usuário dois números inteiros e faz algumas comparações com esses valores. Veja, no Código 1.12, que na linha 9 comparamos se os números são iguais; na linha 10, se o primeiro (n1) é maior que o segundo (n2) e, na linha 11, se o primeiro é menor ou igual ao segundo.

Código 1.12 | Comparações entre dois números
#include <stdio.h>
int main(){
    int n1 = 0;
    int n2 = 0;
    printf("\n Digite o primeiro numero: ");
    scanf("%d", &n1);
    printf("\n Digite o segundo numero: ");
    scanf("%d", &n2);
    printf("\n n1 e n2 são iguais? %d", n1 == n2);
    printf("\n n1 e maior que n2? %d", n1 > n2);
    printf("\n n1 e menor ou igual a n2? %d", n1 <= n2);
} 
Fonte: elaborado pela autora .

Agora é com você!

OPERADORES LÓGICOS NA LINGUAGEM C

Além dos operadores relacionais, outro importante recurso para o processamento é a utilização de operadores lógicos, que têm como fundamento a lógica matemática clássica e a lógica booleana (GERSTING, 2017). O Quadro 1.6 apresenta os operadores lógicos que podem ser usados na linguagem C.

Quadro 1.6 | Operadores lógicos em linguagens de programação
Operador Descrição Exemplo
! negação (NOT - NÃO) !(x==y)
&& conjunção (AND - E) (x>y)&&(a==b)
|| disjunção (OR - OU) (x>y)||(a==b)
Fonte: adaptado de Soffner (2013, p. 35).

Os operadores lógicos podem ser utilizados juntamente aos relacionais, unindo duas ou mais expressões relacionais simples e criando expressões mais complexas.

Assimile

O operador de negação é usado para inverter o resultado da expressão. O operador de conjunção é usado para criar condições em que todas as alternativas devem ser verdadeiras para que o resultado seja verdadeiro. O operador de disjunção é usado para criar condições em que basta uma condição ser verdadeira para que o resultado também o seja.

Veja, no Código 1.13, o uso dos operadores relacionais e lógicos aplicados à comparação dos valores de três variáveis. Na linha 4, a condição criada será verdadeira caso o valor de a seja igual ao de b e o valor de a também seja igual a c. Nesse caso, como a primeira condição não é verdadeira, o resultado da expressão será 0. Na linha 5, a condição criada será verdadeira caso uma das condições seja satisfeita (isto é, seja verdadeira). Nesse caso, como a é igual a c, o resultado será 1. Por fim, na linha 6, invertemos esse resultado da expressão anterior com o operador de negação. Ou seja, o resultado será 0.

Código 1.13 | Operadores relacionais e lógicos
#include <stdio.h>
int main(){
    int a = 5, b = 10, c = 5;
    printf("\n (a == b) && (a == c) = %d", ((a == b) && (a == c)));
    printf("\n (a == b) || (a == c) = %d", ((a == b) || (a == c)));
    printf("\n !(a == b) || (a == c) = %d", !((a == b) || (a == c)));
} 
Fonte: elaborado pela autora.
Roteiro do professor 

Utilizar o conceito de tabela verdade é uma boa maneira de apresentar aos alunos as expressões lógicas, utilizando os operadores lógicos NOT (!), AND (&&) e OR (||), e seus resultados, considerando todas possíveis declarações verdadeiras (1) / Falsas (0). A tabela verdade pode ser usada com os operadores da sintaxe C.

Veja o exemplo de uma tabela verdade a seguir:

Tabela 1.4 | Tabela verdade
P V !P P && V P || V
0 0 1 0 0
0 1 1 0 1
1 0 0 0 1
1 1 0 1 1
Fonte: elaborada pela autora.

P e V são proposições (fatos), para as quais podem ser atribuídos os valores verdadeiro ou falso. A expressão (a == b), no Código 1.13, é um exemplo de proposição. Construir uma tabela verdade ajuda o aluno a pensar em todas as possibilidades de entrada para certa expressão lógica, bem como em seus possíveis resultados.

Pensando nisso, peça aos alunos que, em grupo, elaborem tabelas verdades para as seguintes situações, indicando todas as possibilidades de resultados:

  1. Se não chover irei à praia ou ao parque.
  2. Só irei ao cinema se tiver dinheiro para a entrada (R$ 25,00) e o filme for de ficção científica.
  3. Só irei ao cinema no domingo se estiver chovendo; se não chover vou caminhar no parque.

Em uma documentação da Microsoft você pode encontrar alguns exemplos de códigos utilizando os operadores lógicos AND (E) e OR (OU), disponível em: https://bit.ly/36r0gQP. Acesso em: 20 out. 2020.

    Ao final, pode ser aplicado um quiz utilizando as proposições e os operadores para verificar o entendimento dos alunos sobre as expressões lógicas criadas.

    A ferramenta para aplicar o quiz pode ser a Quizizz. Ela possui alguns modelos de quiz, incluindo de lógica de programação, e podem ser reformuladas e criadas outras perguntas. Disponível em: https://quizizz.com/. Acesso em: 20 out. 2020.

    FUNÇÕES PREDEFINIDAS PARA A LINGUAGEM C

    Para facilitar o desenvolvimento de soluções em software, cada linguagem de programação oferece um conjunto de funções predefinidas, que ficam à disposição dos programadores. Entende-se por função “um conjunto de instruções que efetuam uma tarefa específica” (MANZANO, 2015, p. 153).

    Pesquise mais 

    Existe uma série de bibliotecas e funções disponíveis na linguagem C que podem facilitar o desenvolvimento de soluções. No conteúdo, a seguir, você encontra uma vasta referência a esses elementos:

    • TUTORIALS POINT. C Standard Library Reference Tutorial. Tutorials point, 2020.

    Nesta disciplina, você já usou algumas das funções da linguagem C, por exemplo, para imprimir uma mensagem na tela: usa-se a função printf(), que pertence à biblioteca stdio.h. Uma biblioteca é caracterizada por um conjunto de funções divididas por contexto (MANZANO, 2015). Vamos apresentar algumas funções que costumam aparecer com frequência nos programas implementados na linguagem C (Quadro 1.7).

    Quadro 1.7 | Algumas bibliotecas e funções na linguagem C
    Biblioteca Função Descrição
    <stdio.h> printf()
    scanf()
    fgets(variavel, tamanho, fluxo)
    Imprime na tela.
    Faz leitura de um dado digitado.
    Faz a leitura de uma linha digitada.
    <math.h> pow(base,potencia)
    sqrt(numero)
    sin(angulo)
    cos(angulo)
    Operação de potenciação.
    Calcula a raiz quadrada.
    Calcula o seno de um ângulo.
    Calcula o cosseno de um ângulo.
    <string.h> strcmp(string1, string2)
    strcpy(destino, origem)
    Verifica se duas strings são iguais.
    Copia uma string da origem para o destino.
    <stdlib.h> malloc(tamanho)
    realloc(local,tamanho)
    free(local)
    Aloca dinamicamente espaço na memória.
    Modifica um espaço já alocado dinamicamente.
    Libera um espaço alocado dinamicamente.
    Fonte: adaptado de Tutorials point (2020).

    A função strcmp(string1, string2) compara o conteúdo de duas strings e pode retornar três resultados, o valor nulo (zero), positivo ou negativo, conforme as seguintes regras:

    Assimile

    Cada função, independentemente da linguagem de programação, precisa ter um tipo de retorno, por exemplo, retornar um inteiro, um real, um booleano, entre outros. A função de comparação de strings, por exemplo, tem como tipo de retorno um número inteiro.

    Roteiro do professor 

    As funções strcpy e strcmp da biblioteca <string.h> são muito úteis. Contudo, não estão de acordo com o desenvolvimento seguro; são consideradas funções inseguras, computacionalmente falando, pois elas não fazem verificação do espaço reservado para as variáveis utilizadas na chamada da função.

    Por exemplo, suponha que você tenha um vetor de caracteres de tamanho 100 e você utilize a função strcpy para copiar um texto informado pelo usuário via teclado para esse vetor. Caso o usuário informe um texto com mais do que 100 caracteres, o computador continuará copiando os caracteres excedentes para a memória do computador, extrapolando o espaço reservado para o seu vetor. Isso pode causar sérios problemas, tais como o abortamento do programa pelo sistema operacional ou, pior ainda, a escrita de código malicioso na memória do computador, podendo provocar danos ainda maiores.

    Para evitar esse problema, faça uma pesquisa sobre as versões mais seguras dessas funções, a saber strncpy e strncmp. A diferença básica dessas funções para as anteriores é que o programador deve informar o tamanho a ser considerado para a string. Caso um parâmetro passado para essas funções extrapole esse valor, os caracteres excedentes serão ignorados (descartados) pelo computador.

    Sugerimos a leitura do artigo, indicado a seguir, que explica o problema de ultrapassar o espaço reservado na memória e a escrita de código malicioso:

    • DOMINGUES, P.; TÁVORA, V. Programação (in)segura – transbordo de memória. Revista Programar, ed. 52, mar. 2016. Disponível em: https://bit.ly/3knrug2. Acesso em: 1 nov. 2020.

    Apresenta, ainda, alguns exemplos utilizando as funções strcpy e strncpy com a explicação do funcionamento de ambos. Após a leitura, desenvolva um trecho de código para cada função e, depois, realize a comparação das funções.

    Outra referência é o livro:

    • BACKES, A. Linguagem C – Completa e Descomplicada. São Paulo: Grupo GEN, 2018. Disponível em: https://bit.ly/32AXfMO. Acesso em: 21 out. 2020.

    No capítulo 7 (seção 7.3), nas páginas 137 e 139, temos exemplos da utilização das funções strcpy e strcmp. Migre os exemplos com a utilização das funções strncpy e strncmp.

    Exemplificando

    Observe o uso da função strcmp no código a seguir.

    #include <stdio.h>
    #include <string.h>
    int main(void){
        printf("\n ARARA == ARARA? %d", strcmp("ARARA", "ARARA"));
        printf("\n ARARA == BANANA? %d", strcmp("ARARA", "BANANA"));
        printf("\n BANANA == ARARA? %d", strcmp("BANANA", "ARARA"));
    } 

    Teste o código na ferramenta Paiza.io. Clique em Run executar e visualizar as saídas do código.

    Na primeira chamada da função, compara-se ARARA com ARARA. Como as strings são iguais, o resultado será 0. Na segunda chamada, a comparação é entre ARARA e BANANA. Como ARARA é “menor” que BANANA, alfabeticamente falando, então, o resultado será negativo (nesse caso, o valor impresso foi -1). Na última chamada da função, compara-se BANANA com ARARA. Como BANANA é “maior” que ARARA, alfabeticamente falando, então, o resultado será positivo (nesse caso, o valor impresso foi 1).

    Note que, para a função strcmp, a ordem em que os parâmetros são passados é importante.

    Finalizamos esta unidade, na qual exploramos as formas de armazenamento temporário de dados em diversos tipos de variáveis e aprendemos a utilizar os operadores para realizar o processamento dos dados.

    Faça valer a pena

    Questão 1

    Todo sistema computacional é construído para se obter alguma solução automatizada. Uma das áreas promissoras da computação é a mineração de dados, que, como o nome sugere, refere-se a um determinado montante de dados e ao modo como eles podem ser minerados para gerar informações de valor. Dentro do processamento de informações, os operadores matemáticos, relacionais e lógicos são essenciais, pois são a base do processo.

    Considerando a expressão resultado = a + b * (c – b) / a e os valores a=2, b=3 e c=5, escolha a opção correta.

    Correto!

    Ao substituir os valores de cada variável na expressão, obtém-se:

    resultado = a + b * (c – b) / a

    resultado = 2 + 3 * (5 - 3) / 2

    resultado = 2 + 3 * 2 / 2

    resultado = 2 + 6 / 2

    resultado = 2 + 3

    resultado = 5

    Ou seja, aplicando a ordem de precedência dos operadores, chega-se ao resultado final. 

    Tente novamente...

    Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.

    Tente novamente...

    Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.

    Tente novamente...

    Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.

    Tente novamente...

    Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.

    Questão 2

    Considerando o comando printf("%d",((a > b) || (b < c) && (c < b))), é correto afirmar que:

    1. O resultado será 1 (um) para a = 30, b = 20, c = 10

    PORQUE

    1. Para a expressão lógica proposta, basta que uma das condições seja verdadeira.

    A respeito dessas asserções, assinale a alternativa correta.

    Tente novamente...

    Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.

    Tente novamente...

    Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.

    Correto!

    Ao executar o código com os valores propostos, obtém-se o seguinte resultado para cada comparação lógica:

    printf("%d",((a > b) || (b < c) && (c < b)))

    1. Verdadeiro
    2. Falso
    3. Verdadeiro

    Ao montar a expressão lógica: (V) ou (F) e (V), obtém-se como resposta verdadeiro, pois os operadores serão executados da esquerda para a direita. Assim teremos V ou F, que resulta em V, e depois V e V, que resulta em verdadeiro também. Em C, verdadeiro é representado pelo número 1.

    Tente novamente...

    Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.

    Tente novamente...

    Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.

    Questão 3

    Algumas soluções em software necessitam de ordenação de strings; por exemplo, em um relatório de folha de pagamento dos funcionários de uma empresa. Para comparação entre strings, a fim de se obter a ordenação desejada, pode-se usar a função strcmp, da biblioteca <string.h>.

    #include <stdio.h>
    #include <string.h>
    
    #define TAM_NOME 100
    
    struct funcionario {
        char nome[TAM_NOME];
        float salario;
    };
    
    int main(){
        struct funcionario f1, f2;
        strcpy(f1.nome, "Pedro");
        strcpy(f2.nome, "Maria");
        printf("\n %d", strcmp(f1.nome, f2.nome));
    } 
    

    Considerando o código apresentado, escolha a alternativa correta:

    Tente novamente...

    Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.

    Tente novamente...

    Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.

    Tente novamente...

    Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.

    Correto!

    Ao utilizar a função strcmp(), são passados os nomes dos funcionários representados pelas variáveis f1.nome e f2.nome, nessa ordem. 

    Assim, a função comparará as strings “Pedro” e “Maria”. Como “Pedro” é “alfabeticamente maior” do que “Maria”, então, de acordo com a definição da função strcmp(), o resultado será um valor positivo. 

    Tente novamente...

    Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.

    Referências

    BACKES, A. Linguagem C – Completa e Descomplicada. São Paulo: Grupo GEN, 2018. Disponível em: https://bit.ly/3ku61Cx. Acesso em: 21 out. 2020.

    DEITEL, P.; DEITEL, H. C. Como programar. 6. ed. São Paulo: Pearson, 2011.

    DOMINGUES, P.; TÁVORA, V. Programação (in)segura – transbordo de memória. Revista Programar, ed. 52, mar. 2016. Disponível em: https://bit.ly/3niSpLR. Acesso em: 1 nov. 2020.

    GERSTING, J. L. Fundamentos matemáticos para a ciência da computação: matemática discreta e suas aplicações. Rio de Janeiro: LTC, 2017.

    INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA (IBGE). Frota de veículos. Pesquisas. 2014. Disponível em: https://bit.ly/36l8EBq. Acesso em: 10 mar. 2020.

    MANZANO, J. A. N. G. Linguagem C: acompanhada de uma xícara de café. São Paulo: Érica, 2015. 480 p.

    MANZANO, J. A. N. G.; MATOS, E.; LOURENÇO, A. E. Algoritmos: técnicas de programação. 2. ed. São Paulo: Érica, 2015.

    PEREIRA, S. do L. Linguagem C. Ime: USP, 2017. Disponível em: https://bit.ly/3llZIBT. Acesso em: 11 mar. 2020.

    PIVA JUNIOR, D. et al. Algoritmos e programação de computadores. Rio de Janeiro: Elsevier, 2012.

    SOFFNER, R. Algoritmos e programação em linguagem C. São Paulo: Saraiva, 2013.

    TARIFA, A. Big Data: descubra o que é e como usar na sua empresa. Endeavor, [s.d.]. Disponível em: https://bit.ly/3eVuyPx. Acesso em: 23 jul. 2018.

    TUTORIALS POINT. C Standard Library Reference Tutorial. Tutorials point, 2020. Disponível em: https://bit.ly/3ls9BOQ. Acesso em: 23 jul. 2018.

    Bons estudos!

    AVALIE ESTE MATERIAL

    OBRIGADO PELO SEU FEEDBACK!