The loop declaration itself is fine, but probably not for what you are intending to do.
I perceive this as follows: an assignment is first graded giving the value of 'mark'. After it is graded, it is reduced by 5 marks/day until it hits a minimum of 20 (to me this hardly seems fair; I would reduce until 0, but I'm not the one giving marks ). To do this with a for loop, use multiple conditions:
So if 'mark' is 75, and it was late for fourteen days, logically:
for (int m = mark, d = daysLate; m >= 20 && d >= 0; m -= 5, ++d)
m would be 20 and d would be 3 in the end (since only 11 days would be subtracted off).
int mark = 75;
int daysLate = 14;
for (int m = mark, d = daysLate, m >= 20 && d >= 0; m -= 5, --d)
This can also be calculated with just regular mathematics and conditions.