Rodar programa criado em C

tec6223

Power Member
Bom dia, criei um programa muito básico em C e quando o compilo e rodo ele apenas cumpre a primeira instrução (a que está sublinhada abaixo)

Inseri o seguinte:
int Alunos;
int Rapazes;
float prapazes;
float praparigas;

printf ("Insira o numero de alunos e o numero de rapazes da turma\n");
scanf ("%d", &Alunos);
scanf ("%d", &Rapazes);
prapazes = Rapazes*100/ Alunos;
praparigas = 100 - prapazes;
}

Alguém o que possa ter feito mal?
 
a instrucao scanf aguarda por um input do utilizador atraves do teclado. tens de digitar um valor para continuar (neste caso 2x). o valor que digitares fica associado as variaveis na instrucao.
 
Estás a fazer um scanf, tens que introduzir um número e carregar enter
a instrucao scanf aguarda por um input do utilizador atraves do teclado. tens de digitar um valor para continuar (neste caso 2x). o valor que digitares fica associado as variaveis na instrucao.

Eu sei que tenho que dar um input e eu dou, mas depois as contas no fim, para saber as percentagens não acontecem
 
Eu sei que tenho que dar um input e eu dou, mas depois as contas no fim, para saber as percentagens não acontecem

Tu não estás a imprimir o resultado das contas que fazes no final. Acrescenta um printf depois disso, para imprimir os valores de prapazes e praparigas.
 
Tu não estás a imprimir o resultado das contas que fazes no final. Acrescenta um printf depois disso, para imprimir os valores de prapazes e praparigas.
Também já fiz isso, depois de ter colocado aqui a questão e os resultados aparecem todos:
PRapazes =0
PRaparigas =0
Ou seja, ignora os inputs que indiquei
 
Como estás a fazer o printf?
estás a usar %f no printf dos resultados? printf("%f", prapazes);

Sim, estou a usar %f, já fiz essas alterações tb. Neste momento tenho assim:

#include <stdio.h>
void main ()

{
int NUMALUNOS, NUMRAPAZES;
float PRAPAZES;
float PRAPARIGAS;

printf ("Insira o numero de alunos\n");
scanf ("%d", &NUMALUNOS);
printf ("Insira o numero de rapazes\n");
scanf ("%d", &NUMRAPAZES);
PRAPAZES = ((NUMRAPAZES/NUMALUNOS)*100);
PRAPARIGAS = (100-PRAPAZES);
printf ("A percentagem de rapazes é: %f\n", PRAPAZES);
printf ("A percentagem de raparigas é: %f\n", PRAPARIGAS);
}

Agora faz os cálculos mas apenas da percentagem de raparigas (PRAPARIGAS), a percentagem de rapazes dá 0 (zero)
 
Sim, estou a usar %f, já fiz essas alterações tb. Neste momento tenho assim:

#include <stdio.h>
void main ()

{
int NUMALUNOS, NUMRAPAZES;
float PRAPAZES;
float PRAPARIGAS;

printf ("Insira o numero de alunos\n");
scanf ("%d", &NUMALUNOS);
printf ("Insira o numero de rapazes\n");
scanf ("%d", &NUMRAPAZES);
PRAPAZES = ((NUMRAPAZES/NUMALUNOS)*100);
PRAPARIGAS = (100-PRAPAZES);
printf ("A percentagem de rapazes é: %f\n", PRAPAZES);
printf ("A percentagem de raparigas é: %f\n", PRAPARIGAS);
}

Agora faz os cálculos mas apenas da percentagem de raparigas (PRAPARIGAS), a percentagem de rapazes dá 0 (zero)

tens a fórmula mal:
PRAPAZES = ((NUMRAPAZES *100.0) / NUMALUNOS);
 
A fórmula não está mal, matematicamente. (A/B) * 100 é equivalente a ((A*100)/B).

O teu problema no código tem haver com as conversões entre float e int.

No cálculo da percentagem:

PRAPAZES = ((NUMRAPAZES/NUMALUNOS)*100);

NUMRAPAZES e NUMALUNOS são inteiros, logo, ao dividi-los, obténs um inteiro. Como NUMRAPAZES < NUMALUNOS sempre, o valor que obténs é menor do que 1. Mas como o resultado tem que ser um inteiro, o valor é arredondado para baixo, por isso é que te estava a dar 0 na percentagem.

A fórmula do mbovary deu-te um resultado "certo" (arredondado às unidades), porque ao multiplicares primeiro NUMRAPAZES por 100, a divisão já não dá um valor inferior a 1, logo não arredonda para 0 (NUMRAPAZES * 100 >> NUMALUNOS).

A maneira mais correta de resolveres o problema e mais exata de calculares a percentagem é fazeres cast para float das duas variáveis na divisão. Tipo isto:

((float)NUMRAPAZES/(float)NUMALUNOS)*100

Assim o compilador sabe que é para fazer a divisão para float e não int.
 
Última edição:
Back
Topo