3
respostas

Duvidas programa so avalia primeiro if

Fala galera, estou começando na area e estou praticando as aulas que tive, para poder aprender mais. Não estou conseguindo entender porque o programa não funciona.

O exercício pede para o usuário entrar com o salário base, e a saída deveria ser o valor do imposto retido na fonte. 15. (Cortesia do Prof. Bogdan Tomoyuki Nassu) A tabela abaixo foi copiada do website da Receita Federal, e traz as alíquotas do imposto de renda de pessoa física retido na fonte para o exercício de 2013:

A base de cálculo é dada pelo salário mensal, com certas deduções, como dependentes e contribuição previdenciária. Abstraindo estes e outros detalhes, o imposto devido é calculado tomando a base de cálculo mensal, verificando a faixa na qual ela se encontra, aplicando a alíquota correspondente, e reduzindo o valor final da parcela a deduzir. Por exemplo, se a base de cálculo é de R$10.000,00, a alíquota é de 27,5%, ou seja, R$2750,00. Deduzimos R$756,53 da parcela e obtemos como resultado final R$1993,47 de imposto devido. Escreva um programa que receba como entrada a base de cálculo mensal de um trabalhador e retorne o imposto de renda devido.

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

int main(void) {

double salario_base;
double aliquota;
double parcela_reduzida;
double imposto_renda;
double base_mensal;

aliquota = (salario_base * aliquota) / 100;
//imposto_renda = parcela_reduzida - aliquota;


printf("Imposto de renda de pessoa física retido na fonte parao exercício de 2023\n");
    printf("Digite seu Salario: ");
    scanf("%.3lf", &salario_base);

     parcela_reduzida = 0;

if (salario_base <= 1.637,11) {
     printf("Nao houve desconto.\n");
}

  else if(salario_base <= 2.453,50){

    aliquota = 7,5;
    parcela_reduzida = 122,78;
   imposto_renda = parcela_reduzida - aliquota;
    printf("O Imposto de Renda %d retiro e: ", imposto_renda);
  }

    else if(salario_base <= 3.271,38) {

     aliquota = 15,0;
     parcela_reduzida = 306,80;
    imposto_renda = parcela_reduzida - aliquota;
    printf("O Imposto de Renda %d retiro e: ", imposto_renda);
    }

   else if(salario_base <= 4.087,65) {

     aliquota = 22,5;
     parcela_reduzida = 306,80;
    imposto_renda = parcela_reduzida - aliquota;
    printf("O Imposto de Renda %d retiro e: ", imposto_renda);
   }

   else {
      //salario_base > 4.087,65;
      aliquota = 27,5;
      parcela_reduzida = 306,80;
        imposto_renda = parcela_reduzida - aliquota;
   }
   printf("O Imposto de Renda retiro e: %.3lf",salario_base);

return 0;

}

3 respostas

Opa, tudo bem? Notei alguns erros no código e vou tentar te ajudar, mesmo C não sendo minha praia.

Corrijam-me se eu estiver errado.

Primeiro: Não se usa vírgulas em números, vírgulas são usadas para separar elementos.

///ERRADO

aliquota = 15,0;
 parcela_reduzida = 306,80;
 salario_base <= 4.087,65;

///CERTO

aliquota = 15.0;
 parcela_reduzida = 306.80;
 salario_base <= 4087.65;

Sobre o %d, ele é usado formatar número inteiros(int) em formato decimal(base 10). //Não tenho 100% certeza dessa informação.

Para printar números com casas decimais, use o %f ou %lf .

///ERRADO

printf("O Imposto de Renda %d retiro e: ", imposto_renda);

///CORRETO

printf("O Imposto de Renda %f retiro e: ", imposto_renda);
 printf("O Imposto de Renda %lf retiro e: ", imposto_renda);

Fala meu brother, valeu pela força, realmente esses era alguns dos erros, quebrei acabeça aqui e desocbri outros também.

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

int main(void) {

double salario_base;
double aliquota;
double imposto_renda;
double desconto;
double porcentagem ;



printf("Imposto de renda de pessoa fisica retido na fonte parao exercicio de 2023\n");

    printf("Digite seu Salario: ");
    scanf("%lf", &salario_base);




 if(salario_base <= 1637.11){

    porcentagem = 0;
     aliquota = (salario_base / 100) * porcentagem ;
    printf("Nao houve desconto!");
}

else if(salario_base <= 2453.50){

     porcentagem = 7.5;
    aliquota = (salario_base / 100) * porcentagem ;
    desconto = 122.78;
    imposto_renda = aliquota - desconto;
    //printf("Minha aliquota com Base no salario e: R$ %.2lf\n", aliquota);

    printf("Meu imposto com Base no salario e:R$%.2lf", imposto_renda);
}



else if(salario_base <= 3271.38){

porcentagem = 15.0;
aliquota = (salario_base / 100) * porcentagem ;

desconto = 306.80;
imposto_renda = aliquota - desconto;

printf("Meu imposto com Base no salario e: R$ %.2lf", imposto_renda);
}

else if(salario_base <= 4087.65){

 porcentagem = 22.5;
 aliquota = (salario_base / 100) * porcentagem ;

desconto = 552.15;
imposto_renda = aliquota - desconto;

}
else{

porcentagem = 27.5;
aliquota = (salario_base / 100) * porcentagem ;

desconto = 756.53;
imposto_renda = aliquota - desconto;
printf("Meu imposto com Base no salario e: R$ %.2lf", imposto_renda);

}

return 0;

}

Estava colocando as variavéis fora do bloco de comando do if, ai não rodava mesmo.