我今年开始上大学开设软件开发课程。我刚开始用c ++做循环,并且已经分配了许多问题需要解决。我已经为第一个问题完成了代码,但部分输出无法正常工作,我无法弄清楚原因。
问题是在考试中读取10名学生的分数,然后输出获得荣誉分数(超过70分)的学生的百分比
这是我的代码
int _tmain(int argc, _TCHAR* argv[])
{
int grade;
int numfirstclass = 0;
int percentfirstclass;
for (int count = 0; count < 10; count++)// For loop to run 10 times to allow 10 grades to be entered
{
cout << "Enter your grade ";
cin >> grade;
if (grade >= 70)
numfirstclass++;
}
cout << "The number of students with a first class honours degree is:" << numfirstclass;
percentfirstclass = (numfirstclass / 10) * 100;
cout << endl << "The Percentage of students that recieved a first class degree is: " << percentfirstclass;
return 0;
}
我的问题是,percentfirstclass的输出总是0,我无法弄清楚原因。
任何解释都将不胜感激
我正在使用visual studio 2013
答案 0 :(得分:1)
使用
percentfirstclass = (numfirstclass / 10(double)) * 100;
numfirstclass / 10
将始终求值为0(除非numfirstclass
为1),因为它是整数除法,乘以100且0始终为0.
使用强制转换会使numfirstclass / 10(double)
产生一个带小数部分的数字,然后,它将乘以100。然后,此号码将分配给percentfirstclass
,percentfirstclass
为int
,小数部分将被截断。
答案 1 :(得分:1)
问题在于子表达式
(numfirstclass / 10)
表达
percentfirstclass = (numfirstclass / 10) * 100;
总是等于0,因为numfirstclass
总是小于10,除了numfirstclass等于10的一种情况。:)使用整数算术。
您可以将numfirstclass
定义为类型为float(或double)或将语句重写为
percentfirstclass = (numfirstclass * 100 ) / 10;
或强制将表达式计算为浮点数
percentfirstclass = (numfirstclass / 10.0) * 100;
答案 2 :(得分:0)
很酷的家伙告诉你将percentfirstclass更改为float或double,在上面的代码中你试图将整数除以10,小于10,所以程序返回0作为输出 即。
int c = 1; int d = c / 10; //得0,因为整数cannit支持小数
如果您使用
float d = c / 10; //您将获得所需的输出
希望你明白了。
答案 3 :(得分:0)
只需输入类型double
。写一下
double percentfirstclass;
percentfirstclass = (numfirstclass / 10.0) * 100;
而不是
int percentfirstclass;
percentfirstclass = (numfirstclass / 10) * 100;