Puedes hacerlo usando dos arrays, en uno guardas los dni, en el otro la nota promedio.
Así vas pidiendo las 40 notas con un bucle for, que vaya de 0 a 39, que son las posiciones válidas de los arrays, y en cada uno vas guardando el dato correspondiente.
Para facilitar la tarea, además de pedir y guardar esos datos, puedes guardar en otra variable la nota promedio mayor de las que se van introduciendo.
La inicias con valor 0, y cada nota promedio que te den, preguntas con un IF si esta nota es MAYOR que la que tengas guardada en esa variables.
Si no es mayor, no haces nada.
Y si es mayor, entonces a esa variable le asignas la nota que te acaban de dar.
De este modo, cuando hayas recibido las 40 notas, ya sabrás cuál es la nota mayor.
Solo quedaría recorrer el array de notas y por cada posición que encuentres que coincide con esa nota mayor, muestras en pantalla el dni que se encuentre en la misma posición en el otro array.
Inténtalo, no importa si te sale mal o te atascas (es como mejor se aprende), haz lo que puedas y lo muestras por aquí.
Y entonces te ayudamos a corregirlo, completarlo y lo que haga falta.
Pero haz un intento, si otros lo hacen por ti, no aprenderás.