The following bit of code does the weighted-average algorithm correctly:
(define weighted-average
  (lambda (scores maxes weights)
    (let ((weighted-sum
            (sum
              (map
                (lambda (score max weight) (* (/ score max) weight))
                scores maxes weights)))
          (total-weight (sum weights)))
      (/ weighted-sum total-weight))))
(define sum
  (lambda (l)
    (if (null? l) 0 (+ (car l) (sum (cdr l))))))
The actual average is computed in Excel using this algorithm.
Mitchell Wand