Ir ao conteúdo
  • Cadastre-se

C Na atribuição de um float = float + int/int;


Posts recomendados

Eu estava tentando fazer essa questão em C 

image.png.68139e963e42d5ce9f6cedec91583ac2.png

Aí comecei assim e deu erro >

#include <stdio.h>
int main()
{
	int n, i;
	float s;
	
	i = 1;
	printf("digite o N: \n");
	scanf("%d", &n);
	
	do
	{	
	 	s = s + 1/i;
	 	i++;
        // printf("kkkkkkkkjkjjj");  tentei até colocar um printf pra verificar se estava funcionando essa parte, mudei pra while{} e nd
	}while (i <= n);
	printf("\nO S é: %.2f ", s);
	return(0);
}

Depois disso peguei e troquei o s = s + 1/i; para s = s + um/i;   onde <um> defini como constante inteira e deu errado também

Acabei pegando e criando uma variavel um inteira e deu errado

Só depois disso que fiz certo, criando uma variavel float de um, AI FUNCIONOU 

#include <stdio.h>
int main()
{
	int n, i;
	float s,um;
	
	i = 1;
	um = 1; 
	printf("digite o N: \n");
	scanf("%d", &n);
	
	do
	{	
	 	s = s + um/i;
	 	i++;
	}while (i <= n);
	printf("\nO S é: %.2f ", s);
	return(0);
}

A questão é, não possivel atribuir um para um float a soma dele mesmo com um inteiro dividindo um inteiro?  

Link para o comentário
Compartilhar em outros sites

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
    setlocale(LC_ALL,"");
    int num, x;
    float s, d;
    s = 0;
    printf("Digite um número de termo para cálculo da série: ");
    scanf("%d",&num);
   for(x=1; x<=num; x++){
       d = x;
       s = s + 1/d;
    }
    printf("\nO valor de S para o número informado é: %.2f", s);
    return 0;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

int main()
{
	int n, i;
	float s;
	
	i = 1;
	printf("digite o N: \n");
	scanf("%d", &n);
	
	do
	{	
	 	s = s + 1/i;
	 	i++;
	}    while (i <= n);
	printf("\nO S é: %.2f ", s);
	return(0);
}

Nesse primeiro caso começou errado ao tentar usar s do lado direito sem ter um valor inicial definido. Não deve ter compilado já aí. Não pode escrever s = s + 1/i; se ao entrar no loop o valor de s não era conhecido.

 

Se i é inteiro como declarou e 1 é inteiro a divisão (1/i) vai ser feita considerando DOIS inteiros e vai dar 0,1 ou -1, certo?

 

Só que você quer a fração.

Então pode escrever por exemplo 1./i e terá uma divisão de float por int. Apenas colocando o ponto lá vai indicar de 1 é double, o float longo mas float. Talvez tenha um warning do compilador por isso. Mas vai funcionar.

Ou pode escrever 1.f/i e assim oficialmente declarar 1.0 como float e não double.

 

Ou pode converter o i usando um cast: 1/(float) i . Essa conversão explícita se chama cast e tem sempre esse formato em C ou C++. 

 

3 horas atrás, AnonymousLPH disse:

Depois disso peguei e troquei o s = s + 1/i; para s = s + um/i;   onde <um> defini como constante inteira e deu errado também

 

Pois é. Uma constante inteira não serve. devia ter declarado float.

 

3 horas atrás, AnonymousLPH disse:

A questão é, não possivel atribuir um para um float a soma dele mesmo com um inteiro dividindo um inteiro?

 

Sim. É perfeitamente possível. No entanto divisão de inteiro por inteiro dá um outro inteiro. E vai truncar os valores para o menor inteiro. Se for isso o que quer não há problema. Mas o compilador não vai saber quando você quer isso como fração e aí você deve usar uma das maneiras que te mostrei.

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!