Ir ao conteúdo
  • Cadastre-se
astridxd

C Exercicios de Linguagem C

Recommended Posts

Estou com problemas nos 2 códigos: o primeiro, o resultado aparece incorreto; o segundo, ele congela no terceiro printf e não executa mais.

Segue códigos abaixo:

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

int main () {
	int  sb, p;
	float sl;
	
	printf ("Informe o seu salario bruto:");
	scanf ("%d, &sb");
	printf ("Informe o seu provento:");
	scanf ("%d, &p");
	
if (sb <=50){ //desconto de 5%
   sl = ((sb + p) - (5/100));
   printf ("%f \n", sl);
	

} else { //desconto de 10%
	sl = ((sb + p) -  (10/100));
      printf ("%f \n ", sl); }
	
system ("pause");
return 0;

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

int main () {
	
	int n1, n2, am, aa;
	int m;
	float f;
	
	printf ("Informe a nota da prova 1:");
	scanf ("%d", &n1);
	printf ("Informe a nota da prova 2:");
	scanf ("%d",&n2);
	printf ("Informe o numero de aulas ministradas:");
	scanf ("%d", am);
	printf ("Informe o numero de aulas assistidas:");
	scanf ("%d", &aa);

//cálculo da média//
 m= (n1+n2)/2;

//cálculo da frequência//
 f= ((aa*100)/ am);

if ((m>=6) && (f>=75)) {
printf ("\n voce foi aprovado com media %d \n", m); 

} else {
	printf ("\n voce foi reprovado com media %d \n", m); }

system ("pause");
return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre o segundo código:

printf ("Informe o numero de aulas ministradas:");
	scanf ("%d", am);

Faltou tu atribuir o sinal de referência " & ".

 

	printf("Informe o numero de aulas ministradas:");
	scanf(%d, &am);

Eu vou conferir os cálculos do primeiro código e jaja te retorno

Compartilhar este post


Link para o post
Compartilhar em outros sites

@astridxd Olá. Com relação ao primeiro código, nessa parte:

printf ("Informe o seu salario bruto:");
scanf ("%d", &sb);
printf ("Informe o seu provento:");
scanf ("%d", &p);

Só não sei porque está usando duas variáveis do tipo inteiras (int) se o assunto é ligado a salário, que seria mais adequado permitir o uso de casas decimais, e, além disso, você teria um resultado mais preciso no cálculo que está fazendo

Sugiro definir essas variáveis como sendo do tipo ponto flutuante (float ou double)

E claro, também sugiro dar nomes mais intuitivos para as suas variáveis, té por ser uma boa prática de programação, além de fazer com q seus códigos fiquem mais fáceis para se entender

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Curti principalmente essa parte porque códigos literários são mais universais.

 

10 horas atrás, giu_d disse:

E claro, também sugiro dar nomes mais intuitivos para as suas variáveis, té por ser uma boa prática de programação, além de fazer com q seus códigos fiquem mais fáceis para se entender

 

O primeiro código que para mim é 10 fica assim ...

/** Lista de correções realizada no código original astridxd
 ** --------------------------------------------------------
 **
 **  01-  Remoção do include para o arquivo de cabeçalho stdlib.h, pois o mesmo
 **  é sem utilidade para o programa, haja vista o uso de uma função.
 **
 **  02-  Troca dos identificadores por nomes mais literais. Adequação de tipo de
 **  variável para o tipo de dados.
 **
 **  03-  Melhoria no design do programa.
 **
 **  04-  Correção na função scanf para salário bruto e proventos.
 **
 **  05-  Correção na escrita de percentagem para frações.
 **
 **  06-  Melhor uso de outros recursos da linguagem
 **/
	
#include <stdio.h>
int main( void )
{	float sbruto, sliquido, proventos= 0;

	sbruto= sliquido= proventos;

	printf( "%s\n", "Programa para Calculo de Descontos de 5% e 10%" );
	printf( "%s\n", "----------------------------------------------" );
	printf( "\n" );

	printf( "%s\n", "Por favor, informe o qual o seu salario bruto" );
	printf( "R$ " ); scanf( "%f", (& sbruto) );
	setbuf( stdin, NULL );
	printf( "\n" );

	printf( "%s\n", "Por favor, informe o qual o seu provento" );
	printf( "R$ " );scanf( "%f", (& proventos) );
	setbuf( stdin, NULL );
	printf( "\n" );

	printf( "%s\n", "Calculando!" );
	//                                        desconto      10%    5%
	sliquido=  (sbruto + proventos) * (( 50 <= sbruto ) ? 0.90 : 0.95);

	printf( "%s", "Precione enter ... " );
	printf( "%c", getchar() );

	printf( "%s", "Salario bruto com abatimentos de descontos e de R$ " );
	printf( "%.2f\n", sliquido );

	printf( "%s", "Precione enter ... " );
	printf( "%c", getchar() );

	printf( "%s\n", "Fim do programa" );
	return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @astridxd
em relação ao seu primeiro código:
• Seus dois primeiros scanf tem um erro de sintaxe:
  Você colocou 

scanf ("%d, &sb");

Porém as aspas devem ser fechadas assim:
 

scanf ("%d", &sb);

• O uso de variáveis do tipo int é mal visto quando nos referimos a valores monetários, pois existem subdivisões nas moedas (centavos), por isso o uso de variáveis do tipo float,double é mais indicada nesses casos.

• Já nos ifs há um erro de lógica,pois a expressão não corresponde ao desconto desejado.
  Você colocou assim:
 

sl = ((sb + p) -  (10/100));

repare que caso sb=85 e p=15, a soma sb+p seria igual a 100 correto? Logo seu programa iria agora subtrair (10/100) dessa soma, como (10/100 =0,1), seu sl final seria 99.9, o que não corresponde a um desconto de 10%.
Para esse problema o correto seria:
 

sl = ((sb + p)*0.9);

Nesse caso o programa retorna 90% do total o que corresponde a um desconto de 10%, você tambem poderia fazem assim:
 

sl = ((sb + p)-(((sb+p)*10)/100));

Porém acho essa resolução mais confusa, mas também está correta!!!
• Faça o mesmo para o outro if e ficará correto .

espero ter ajudado, abraços!!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×