Is it possible to change and save I2C address programatically?
As far as I can see in the datasheets of the 2 mentioned chips, they don't provide a way to change the address programmatically over the I2C bus. They only have address pins, which have to be tied to Vcc or ground for setting the address. Most ready to use boards with such chips already have pullup or pulldown resistors for this. If you use the blank chips, you absolutely need to tie the address pins to a fixed value. Normally this is done semi-permanently.
You can also connect the address pins to Arduino output pins to dynamically change the addresses.
There is no other way to change the addresses but to use the address pins.