Você está aqui: C ::: Desafios e Lista de Exercícios Resolvidos ::: C Básico

Como testar se um número é potência de dois usando C - Exercícios Resolvidos de C

Quantidade de visualizações: 559 vezes
Pergunta/Tarefa:

Escreva um programa C contendo um método que recebe um número inteiro e retorna um valor boolean indicando se o valor informado é potência de dois.

Sua saída deverá ser parecida com:

Informe um valor inteiro: 8
O valor 8 é potência de dois
Informe um valor inteiro: 34
O valor 34 não é potência de dois
Informe um valor inteiro: 64
O valor 64 é potência de dois
Resposta/Solução:

Veja a resolução comentada deste exercício usando C:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

// função que recebe um número inteiro e informe se ele é
// potência de dois
int is_potencia_dois(int n){
  // usamos o operador AND de bits para verificar se n AND n-1
  // é igual a 0
  return (n > 0) && (n & (n - 1)) == 0;
}

int main(int argc, char *argv[]){
  // variáveis usadas para 
  int valor;
  
  setlocale(LC_ALL,""); // para acentos do português
 
  // vamos pedir para o usuário informar um valor inteiro
  printf("Informe um valor inteiro: ");
  scanf("%d", &valor);
    
  // vamos testar se o número informado é potência de dois
  if(is_potencia_dois(valor)){
    printf("O valor %d é potência de dois", valor);
  }
  else{
    printf("O valor %d não é potência de dois", valor);
  }
 
  printf("\n\n");
  system("PAUSE");	
  return 0;
}


Link para compartilhar na Internet ou com seus amigos:

C ::: Dicas & Truques ::: Strings e Caracteres

Como escrever uma função C que verifica se duas strings são iguais ou diferentes (sem considerar maiúsculas e minúsculas)

Quantidade de visualizações: 9695 vezes
Esta dica mostra como escrever uma função em linguagem C que verifica se duas strings são iguais ou diferentes (sem considerar maiúsculas e minúsculas, ou seja, case insensitive). O nome da função é str_equal(). Esta função aceita duas strings como argumentos e retorna 1 se estas forem iguais e 0 em caso contrário. Experimente, faça as devidas alterações e adicione mais esta função ao seu repertório de códigos C:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

// função personalizada que permite verificar
// se duas strings são iguais ou diferentes sem
// considerar maiúsculas e minúsculas
int str_equal(const char *str1, const char *str2){
  while((toupper(*str1) == toupper(*str2)) && (*str1)){
    str1++;
    str2++;
  }

  return((*str1 == 0) && (*str2 == 0));
}

int main(int argc, char *argv[]){
  char palavra1[] = "Java";
  char palavra2[] = "Java";

  if(str_equal(palavra1, palavra2) == 1)
    printf("As palavras sao iguais");
  else
    printf("As palavras sao diferentes");

  puts("\n\n");
  system("PAUSE");
  return 0;
}



C ::: Dicas & Truques ::: Data e Hora

Como obter e exibir a data atual no formato DD/MM/YYYY (Ex: 02/07/2013) usando a linguagem C

Quantidade de visualizações: 4592 vezes
Em algumas situações gostaríamos de obter e exibir a data no formato DD/MM/YYYY, por exemplo, 23/05/2010. Para isso podemos usar a função strftime(), que nos permite formatar o conteúdo da estrutura tm usando especificadores de formato. Veja o código:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[]){
  time_t data_hora_segundos; // guarda os segundos deste 01/01/1970
  struct tm *timeinfo; // declara uma estrutura tm
  time(&data_hora_segundos); // preenche a variável data_hora_segundos
  // preenche a estrutura timeinfo
  timeinfo = localtime(&data_hora_segundos);

  // obtém e exibe a data atual no formato DD/MM/YYYY
  char data_atual[80];
  strftime(data_atual, 80, "A data de hoje é: %d/%m/%Y", timeinfo);

  // mostra o resultado
  printf("%s\n\n", data_atual);

  system("PAUSE");
  return 0;
}

Ao executar este código nós teremos o seguinte resultado:

A data de hoje é: 02/08/2013

Para exibir a data no formato DD/MM/YYYY eu usei os especificadores de formato %d, %m e %Y.


C ::: Dicas & Truques ::: Recursão (Recursividade)

Como somar os elementos de um vetor em C usando uma função recursiva - Linguagem C para iniciantes

Quantidade de visualizações: 5243 vezes
Em algumas ocasiões ficamos imaginando o que pode ser feito com os métodos e funções recursivas. A resposta é: praticamente tudo.

Veja abaixo um programa C completo no qual eu mostro como escrever uma função recursiva que recebe um array e mostra a soma de seus elementos (lembre-se de que um array é o mesmo que vetor, ou seja, uma matriz de uma linha e várias colunas):

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

// função recursiva para somar todos os elementos de um array
int somar(int indice, int tamanho, int vetor[]){
  // o caso base...hora de encerrar a recursividade
  if(indice == (tamanho - 1)){
    return vetor[indice];
  }
  else{
    // ainda não é o caso base? vamos fazer uma nova chamada à função somar()
    return vetor[indice] + somar(indice + 1, 10, vetor);
  }
}

// função principal do programa
int main(int argc, char *argv[]){
  // vamos declarar um array de 10 elementos
  int valores[10];
  int i, soma;

  // vamos pedir ao usuário para informar os valores para o vetor
  for(i = 0; i < 10; i++){
    printf("Informe o valor do elemento %d: ", i);
    scanf("%d", &valores[i]); 
  }

  // vamos efetuar uma chamada à função recursiva somar();
  // nota que estamos passando o índice inicial, o tamanho do
  // array e o array em si
  soma = somar(0, 10, valores);
  printf("\nA soma dos elementos è: %d", soma);
  
  printf("\n\n");
  system("PAUSE");
  return 0;
}

Ao executarmos este código C nós teremos o seguinte resultado:

Informe o valor do elemento 0: 7
Informe o valor do elemento 1: 3
Informe o valor do elemento 2: 1
Informe o valor do elemento 3: 3
Informe o valor do elemento 4: 8
Informe o valor do elemento 5: 9
Informe o valor do elemento 6: 4
Informe o valor do elemento 7: 3
Informe o valor do elemento 8: 2
Informe o valor do elemento 9: 6

A soma dos elementos é: 46


Vamos testar seus conhecimentos em AutoCAD Civil 3D

Conjuntos de Description Key no AutoCAD Civil 3D

Quando estamos usando conjuntos de Description Key, qual parâmetro nos permite controlar automaticamente os parâmetros de alguns pontos?

A) Location description (Descrição de localização)

B) Marker style (Estilo de marcador)

C) Raw description (Descrição crua)

D) Full description (Descrição completa)
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais

Dimensionamento de Redes de Distribuição de Água

Qual a vazão necessária na tubulação que sai do reservatório em uma rede ramificada para um loteamento com a seguinte configuração, considerando que cada habitante consome 400 L/dia?



A) 8,67 L/s.

B) 16,42 L/s.

C) 2,63 L/s.

D) 17,33 L/s.

E) 6,96 L/s.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais

Dimensionamento de Redes de Distribuição de Água

O primeiro passo para você entender uma rede de distribuição de água (RDA) é conhecer as duas formas nas quais diferentes condutos podem se associar: em série ou em paralelo. Quanto aos condutos em série e paralelo pode-se dizer que as afirmações a seguir:

I) Para manter a vazão constante, a velocidade do escoamento se altera, sendo inversamente proporcional à área. Assim, se a área da seção transversal aumenta, a velocidade diminui, e vice-versa.

II) O que você precisa saber em uma associação de condutos em paralelo é que existe uma perda de carga entre A e B, ou seja, o início e final de um segmento. Essa perda de carga é constante, independentemente do trecho pelo qual o escoamento flui.

III) Quando em paralelo, a vazão que parte do nó A se divide em função das características da tubulação e do escoamento, como diâmetro, rugosidade e velocidade, quando chega em B, houve alteração nesta vazão a variação da velocidade diferenciada em cada um dos caminhos ao qual fora dividida.

Pode-se dizer que:

A) I e III estão corretas

B) Somente III está correta

C) Somente I está correta

D) I e II estão corretas

E) Todas estão corretas
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Hidrologia

Marque a alternativa que indica uma característica da rede hidrográfica brasileira.

A) É formada principalmente por rios intermitentes.

B) Não apresenta cursos de água em área de planalto.

C) Possui rios com o predomínio de foz do tipo estuário.

D) Todos os rios brasileiros possuem regime nival.

E) É composta por rios de baixo aproveitamento hídrico.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil

Locação da obra

Locar ou marcar a obra é uma das etapas de maior importância da construção. Sobre essa etapa, assinale a alternativa que apresenta a afirmação verdadeira.

A) A demarcação dos pontos que definem o edifício no terreno é feita a partir de um referencial previamente definido, considerando-se três coordenadas, sendo duas planimétricas e uma altimétrica.

B) Para a locação da obra, são necessários somente os projetos de estrutura e de arquitetura.

C) A locação da obra deve ser realizada somente após a movimentação de terra e a execução das fundações.

D) As tábuas que compõem os quadros de madeira (gabaritos) só precisam ser niveladas nos casos em que o terreno possui desnível superior a um metro.

E) O gabarito somente poderá ser desmontado após a execução da totalidade da estrutura de concreto.
Verificar Resposta Estudar Cards Todas as Questões

Desafios, Exercícios e Algoritmos Resolvidos de C

Veja mais Dicas e truques de C

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 74 usuários muito felizes estudando em nosso site.