C ++ For循环初学者错误输出

时间:2014-10-26 15:10:57

标签: c++ loops for-loop int

我今年开始上大学开设软件开发课程。我刚开始用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

4 个答案:

答案 0 :(得分:1)

使用

percentfirstclass = (numfirstclass / 10(double)) * 100;

numfirstclass / 10将始终求值为0(除非numfirstclass为1),因为它是整数除法,乘以100且0始终为0.

使用强制转换会使numfirstclass / 10(double)产生一个带小数部分的数字,然后,它将乘以100。然后,此号码将分配给percentfirstclasspercentfirstclassint,小数部分将被截断。

答案 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;