Infer geometric sequences
Husk, 8 bytes

~↑≤Ṡ¡o//


Input is in order b, c, a.
Try it online!

Explanation

~↑≤Ṡ¡o//  Implicit inputs.
       /  a/b as exact rational number.
     o/   Divide by a/b (so multiply by b/a).
    ¡     Iterate that function
   Ṡ      on a. Result is the infinite list [a, b, b^2/a, b^3/a^2, ..
 ↑        Take elements from it while
~ ≤       they are at most c.


The control flow in this program is a bit hard to follow.
First, b is fed to the rightmost /, producing a function /b that divides by b.
Next, ~ splits the remaining program into three parts: ~(↑)(≤)(Ṡ¡o//b).
This feeds c to ≤ and a to Ṡ¡o//b, and combines the results with ↑.
The result of ≤c is a function that checks if its argument is at most c, and ↑≤c takes the longest prefix of elements for which this holds.

It remains to show how (Ṡ¡o//b)a evaluates to the desired infinite list.
The part in parentheses is split into Ṡ(¡)(o//b).
Then Ṡ feeds a to o//b, feeds the result to ¡, and then gives a to its second argument.
The expression (o//b)a gives a function that takes a number and divides it by a/b, and ¡ iterates this function on its second argument, which is a.

Here is a series of transformations that visualize the explanation:

  (~↑≤Ṡ¡o//) b c a
= (~↑≤Ṡ¡o/(/b)) c a
= ~(↑)(≤)(Ṡ¡o/(/b)) c a
= ↑(≤c)((Ṡ¡o/(/b)) a)
= ↑(≤c)(Ṡ(¡)(o/(/b)) a)
= ↑(≤c)(¡(o/(/b)a) a)
= ↑(≤c)(¡(/(/ba))a)
Last line in English: takeWhile (atMost c) (iterate (divideBy (divideBy b a)) a)


Alternative solution using explicit variables in order a, b, c:

↑≤⁰¡*/⁵²