Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Dúvida na aplicação de raiz quadrada


fredlink
 Share

Question

Ler um numero real, se o numero for positivo imprima a raiz quadrada, senao imprima o numero ao quadrado.

Sou iniciante em C e fiz esse código abaixo. Ele quase funciona perfeito, só não entendi porque quando digito o numero positivo ele me retorna o resultado duplicando o dígito. Parece que ele entende como uma dízima periódica. Ex: quando n1=49 retorna 77 ao invés de 7.

Achei que estava relacionado há alguma limpeza de buffer, por isso inseri estes fflush(stdin), mas não adiantou. Peço sugestoes. Obrigado.

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int main(){
float n1, x;
printf("Digite um number: ");
scanf("%f", &n1);
printf("\n");
if (n1>0){
x = sqrt(n1);
fflush(stdin);
printf("%.f", x);
}else
x = pow(n1,2);
fflush(stdin);
printf("%.f\n\n", x);
system("pause");
return 0;
}
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

quando não colocamos chaves{} en else, esse mismo else somente tem alcance de uma só instruçao, ou seja que si eu tenho

...}else

x = pow(n1,2);
fflush(stdin);
printf("%.f\n\n", x);
ele só alcança a esa linha que esta em verde. Em outras palavras o anterior é como si fosse:

}else{

x = pow(n1,2);
}
fflush(stdin);
printf("%.f\n\n", x);

Para agrupar todas as intruçoes(uma ou mais) baixo else devemos fazer:

}else{

x = pow(n1,2);
fflush(stdin);
printf("%.f\n\n", x);

}

Seu programa arrumado seria:

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

int main() {
    float n1, x;
    
    printf ( "Digite um number:    " );
    scanf ( "%f", &n1 );
    printf ( "\n" );
    
    if ( n1 > 0 ) {
        x = sqrt ( n1 );
        fflush ( stdin );
        printf ( "%.f", x );
    } else {
        x = pow ( n1, 2 );
        fflush ( stdin );
        printf ( "%.f\n\n", x );
    }
    
    system ( "pause" );
    return 0;
    
}

E si ti interessa optimizar ele sem levar aos extremos:

#include <stdio.h>
#include<math.h>

int main() {
    float n1;
    
    printf ( "Digite um number:    " );
    scanf ( "%f%*c", &n1 );
    
    if ( n1 > 0 ) {
        printf ( "\nRAIZ%.f", sqrt(n1) );
    } else{
        printf ( "\nPOTENCIA%.f\n\n", pow(n1, 2) );
    }
    
    getchar();
    return 0;
    
}

Levando ao extremo seria:

#include <stdio.h>
#include<math.h>

int main() {
    float n1;
    
    printf ( "Digite um number:    " );
    scanf ( "%f%*c", &n1 );
    
    printf ( "%s: %.f", ( n1 > 0 ) ? "RAIZ" : "POTENCIA", ( n1 > 0 ) ? sqrt(n1) : pow(n1, 2) );

    getchar();
    return 0;
    
}
Edited by vangodp
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...