The Boilermakers (5-6, 3-4) need to win Saturday at Indiana to become bowl-eligible.
Iowa scored on its first possession with a 26-yard touchdown pass from Vandenberg to McNutt.
Purdue responded with a 13-play, 63-yard drive. Gabe Holmes caught his first career touchdown pass, a 14-yarder from Caleb TerBush, to tie the score.
Iowa answered when Vandenberg found C.J. Fiedorowicz for a 5-yard touchdown pass to make it 14-7.
Purdue's Carson Wiggs considered a fake punt but decided to kick while running instead. It was blocked by Collin Sleeper, and Iowa recovered at the Purdue 9. The Boilermakers caught a break when Mica'il McCall fumbled on the second play of Iowa's possession, and Purdue's Will Lucas recovered.
After an exchange of punts, Marve stepped in at quarterback for TerBush and led the Boilermakers down the field. But Tanner Miller intercepted Marve at the Iowa 1-yard line.
On the next play, Vandenberg dropped back into his end zone and was pressured by Dwayne Beckford. Vandenberg fumbled as he was going down, and Purdue's Brandon Taylor recovered in the end zone to tie the score at 14.
Iowa took a 21-14 halftime lead on a 2-yard touchdown run by Coker with 31 seconds left in the second quarter. The Hawkeyes outgained the Boilermakers 257 yards to 117 and held the ball for more than 19 minutes in the first half.
Iowa's Mike Meyer kicked a 38-yard field goal, and then Vandenberg connected with McNutt again for a 51-yard touchdown on the first play of the fourth quarter to give Iowa a 31-14 lead.
Ralph Bolden's 11-yard touchdown in the fourth quarter after TerBush returned to the game cut Iowa's lead to 31-21.
Marve re-entered the game on a fourth-and-18 situation and completed a 22-yard pass to Edison. He closed the drive with what looked like a touchdown run, but he fumbled into the pylon for a touchback, and Iowa took over.