The Caribbean side made 337 for four from their 50 overs and Zimbabwe limped to 181 for nine after a poor start.
Charles' 130, which follows his maiden century in Melbourne earlier this month, came off 111 balls and featured 12 boundaries and four sixes as the opener made the most of a modest Zimbabwean attack.
Charles and fellow opener Kieran Powell put on 168 for the first wicket as West Indies sent out a firm message at the start of a tour which features two more one day games, two Twenty20 fixtures and a pair of test matches.
Zimbabwe finally removed Powell for 79 when he was caught by Craig Ervine in the deep off a short delivery from Chris Mpofu but there was no respite for the tourists as Bravo came in and quickly settled.
A yorker from Mpofu, who had been expensive, finally ended Charles' fine innings but West Indies continued to build a big score thanks to the strokeplay of Bravo.
The Trinidadian left-hander settled himself in quickly and then accelerated past his half-century, reaching 92 before the final over.
Bravo blasted Kyle Jarvis over midwicket for six on the penultimate ball of the over and then a single off the last ball secured his first one day international century.
Chasing a victory target of 338 was always going to be a tough task for Zimbabwe and their response never got going after a poor start with four wickets falling for just 34 runs.
Vusi Sibanda was trapped lbw by the pace of Kemar Roach and then Chamu Chibhabha inside-edged Sunil Narine off his pad to Powell at short leg.
Roach then pulled off a great diving catch to dismiss Hamilton Masakadza off Narine before Brendan Taylor drove Tino Best into the hands of Narsingh Deonarine.
A solid 41 from Ervine and 51 from Malcolm Waller avoided a slump and gave some respectability to the Zimbabwe innings but the run-rate was well out of reach as the African side ended up 181 for nine, Narine finishing with three for 28 from his 10 overs.
- Sports & Recreation
- Kieran Powell
- Craig Ervine